From 49ae84062b4bfc063429808a5f2dd37810aafd91 Mon Sep 17 00:00:00 2001 From: Isaac <> Date: Mon, 17 Nov 2025 23:16:39 +0800 Subject: [PATCH] Update build system --- .bazelrc | 6 + .gitignore | 1 + .gitmodules | 3 + .sourcekit-lsp/config.json | 9 + .vscode/launch.json | 51 +- .vscode/tasks.json | 83 +- BUILD.bazel | 15 + MODULE.bazel | 10 +- build-system/Make/Make.py | 54 +- build-system/Make/ProjectGeneration.py | 8 +- build-system/bazel-rules/sourcekit-bazel-bsp | 1 + build-system/decrypt.rb | 6 +- scripts/Telegram | 757 + scripts/launch_and_debug.sh | 39 + third-party/flatc/BUILD | 2 +- third-party/libjxl/BUILD | 2 +- third-party/mozjpeg/BUILD | 2 +- third-party/mozjpeg/build-mozjpeg-bazel.sh | 39 +- third-party/td/BUILD | 2 +- third-party/webp/BUILD | 2 +- third-party/yasm/BUILD | 15 +- third-party/yasm/yasm-1.3.0.tar.gz | Bin 1492156 -> 0 bytes third-party/yasm/yasm-1.3.0/ABOUT-NLS | 1282 + third-party/yasm/yasm-1.3.0/AUTHORS | 2 + third-party/yasm/yasm-1.3.0/Artistic.txt | 131 + third-party/yasm/yasm-1.3.0/BSD.txt | 74 + third-party/yasm/yasm-1.3.0/CMakeLists.txt | 47 + third-party/yasm/yasm-1.3.0/COPYING | 61 + third-party/yasm/yasm-1.3.0/ChangeLog | 11 + .../yasm/yasm-1.3.0/ConfigureChecks.cmake | 74 + third-party/yasm/yasm-1.3.0/GNU_GPL-2.0 | 340 + third-party/yasm/yasm-1.3.0/GNU_LGPL-2.0 | 481 + third-party/yasm/yasm-1.3.0/INSTALL | 182 + third-party/yasm/yasm-1.3.0/Makefile.am | 237 + third-party/yasm/yasm-1.3.0/Makefile.in | 4241 + .../yasm/yasm-1.3.0/Mkfiles/Makefile.dj | 271 + .../yasm/yasm-1.3.0/Mkfiles/Makefile.flat | 279 + .../yasm/yasm-1.3.0/Mkfiles/dj/YASM-VERSION.h | 2 + .../yasm/yasm-1.3.0/Mkfiles/dj/config.h | 172 + .../yasm-1.3.0/Mkfiles/dj/libyasm-stdint.h | 4 + .../yasm-1.3.0/Mkfiles/vc10/YASM-VERSION.h | 2 + .../yasm/yasm-1.3.0/Mkfiles/vc10/config.h | 170 + .../vc10/crt_secure_no_deprecate.props | 11 + .../vc10/crt_secure_no_deprecate.vsprops | 11 + .../Mkfiles/vc10/genmacro/genmacro.vcxproj | 117 + .../vc10/genmacro/genmacro.vcxproj.filters | 17 + .../yasm-1.3.0/Mkfiles/vc10/genmacro/run.bat | 5 + .../Mkfiles/vc10/genmodule/genmodule.vcxproj | 118 + .../vc10/genmodule/genmodule.vcxproj.filters | 20 + .../yasm-1.3.0/Mkfiles/vc10/genmodule/run.bat | 3 + .../Mkfiles/vc10/genperf/genperf.vcxproj | 144 + .../vc10/genperf/genperf.vcxproj.filters | 56 + .../yasm-1.3.0/Mkfiles/vc10/genperf/run.bat | 39 + .../Mkfiles/vc10/genstring/genstring.vcxproj | 111 + .../vc10/genstring/genstring.vcxproj.filters | 17 + .../yasm-1.3.0/Mkfiles/vc10/genstring/run.bat | 2 + .../vc10/genversion/genversion.vcxproj | 126 + .../genversion/genversion.vcxproj.filters | 26 + .../Mkfiles/vc10/genversion/run.bat | 2 + .../yasm-1.3.0/Mkfiles/vc10/libyasm-stdint.h | 8 + .../Mkfiles/vc10/libyasm/libyasm.vcxproj | 273 + .../vc10/libyasm/libyasm.vcxproj.filters | 200 + .../Mkfiles/vc10/modules/modules.vcxproj | 320 + .../vc10/modules/modules.vcxproj.filters | 256 + .../Mkfiles/vc10/out_copy_rename.bat | 42 + .../yasm-1.3.0/Mkfiles/vc10/re2c/re2c.vcxproj | 134 + .../Mkfiles/vc10/re2c/re2c.vcxproj.filters | 80 + .../yasm/yasm-1.3.0/Mkfiles/vc10/re2c/run.bat | 4 + .../yasm-1.3.0/Mkfiles/vc10/readme.vc10.txt | 119 + .../yasm/yasm-1.3.0/Mkfiles/vc10/vsyasm.props | 27 + .../yasm-1.3.0/Mkfiles/vc10/vsyasm.targets | 108 + .../yasm-1.3.0/Mkfiles/vc10/vsyasm.vcxproj | 275 + .../yasm/yasm-1.3.0/Mkfiles/vc10/vsyasm.xml | 283 + .../yasm/yasm-1.3.0/Mkfiles/vc10/yasm.sln | 140 + .../yasm/yasm-1.3.0/Mkfiles/vc10/yasm.vcxproj | 279 + .../Mkfiles/vc10/yasm.vcxproj.filters | 41 + .../yasm-1.3.0/Mkfiles/vc10/ytasm.vcxproj | 274 + .../yasm-1.3.0/Mkfiles/vc12/YASM-VERSION.h | 2 + .../yasm/yasm-1.3.0/Mkfiles/vc12/config.h | 170 + .../vc12/crt_secure_no_deprecate.props | 11 + .../vc12/crt_secure_no_deprecate.vsprops | 11 + .../Mkfiles/vc12/libyasm/libyasm.vcxproj | 277 + .../vc12/libyasm/libyasm.vcxproj.filters | 200 + .../Mkfiles/vc12/modules/modules.vcxproj | 324 + .../vc12/modules/modules.vcxproj.filters | 256 + .../Mkfiles/vc12/out_copy_rename.bat | 42 + .../yasm-1.3.0/Mkfiles/vc12/readme.vc12.txt | 106 + .../yasm/yasm-1.3.0/Mkfiles/vc12/vsyasm.props | 27 + .../yasm-1.3.0/Mkfiles/vc12/vsyasm.targets | 108 + .../yasm-1.3.0/Mkfiles/vc12/vsyasm.vcxproj | 279 + .../yasm/yasm-1.3.0/Mkfiles/vc12/vsyasm.xml | 283 + .../yasm/yasm-1.3.0/Mkfiles/vc12/yasm.sln | 142 + .../yasm/yasm-1.3.0/Mkfiles/vc12/yasm.vcxproj | 283 + .../Mkfiles/vc12/yasm.vcxproj.filters | 41 + .../yasm-1.3.0/Mkfiles/vc12/ytasm.vcxproj | 278 + .../yasm-1.3.0/Mkfiles/vc9/YASM-VERSION.h | 2 + .../yasm/yasm-1.3.0/Mkfiles/vc9/config.h | 170 + .../vc9/crt_secure_no_deprecate.vsprops | 11 + .../Mkfiles/vc9/genmacro/genmacro.vcproj | 198 + .../yasm-1.3.0/Mkfiles/vc9/genmacro/run.bat | 5 + .../Mkfiles/vc9/genmodule/genmodule.vcproj | 202 + .../yasm-1.3.0/Mkfiles/vc9/genmodule/run.bat | 3 + .../Mkfiles/vc9/genperf/genperf.vcproj | 234 + .../yasm-1.3.0/Mkfiles/vc9/genperf/run.bat | 22 + .../Mkfiles/vc9/genstring/genstring.vcproj | 198 + .../yasm-1.3.0/Mkfiles/vc9/genstring/run.bat | 2 + .../Mkfiles/vc9/genversion/genversion.vcproj | 211 + .../yasm-1.3.0/Mkfiles/vc9/genversion/run.bat | 2 + .../yasm-1.3.0/Mkfiles/vc9/libyasm-stdint.h | 8 + .../Mkfiles/vc9/libyasm/libyasm.vcproj | 572 + .../Mkfiles/vc9/modules/modules.vcproj | 616 + .../yasm-1.3.0/Mkfiles/vc9/re2c/re2c.vcproj | 278 + .../yasm/yasm-1.3.0/Mkfiles/vc9/re2c/run.bat | 4 + .../yasm-1.3.0/Mkfiles/vc9/readme.vc9.txt | 132 + .../yasm/yasm-1.3.0/Mkfiles/vc9/vc98_swap.py | 52 + .../yasm/yasm-1.3.0/Mkfiles/vc9/vsyasm.vcproj | 406 + .../yasm/yasm-1.3.0/Mkfiles/vc9/yasm.rules | 115 + .../yasm/yasm-1.3.0/Mkfiles/vc9/yasm.sln | 157 + .../yasm/yasm-1.3.0/Mkfiles/vc9/yasm.vcproj | 410 + .../yasm/yasm-1.3.0/Mkfiles/vc9/ytasm.vcproj | 410 + third-party/yasm/yasm-1.3.0/NEWS | 0 third-party/yasm/yasm-1.3.0/README | 0 .../yasm/yasm-1.3.0/YASM-VERSION-GEN.sh | 42 + third-party/yasm/yasm-1.3.0/aclocal.m4 | 1511 + .../yasm/yasm-1.3.0/cmake/CMakeLists.txt | 1 + .../yasm-1.3.0/cmake/modules/CMakeLists.txt | 2 + .../yasm-1.3.0/cmake/modules/DummyCFile.c | 4 + .../yasm-1.3.0/cmake/modules/VersionGen.cmake | 78 + .../yasm-1.3.0/cmake/modules/YasmMacros.cmake | 86 + third-party/yasm/yasm-1.3.0/config.h.cmake | 48 + third-party/yasm/yasm-1.3.0/config.h.in | 172 + third-party/yasm/yasm-1.3.0/config/compile | 347 + .../yasm/yasm-1.3.0/config/config.guess | 1530 + .../yasm/yasm-1.3.0/config/config.rpath | 690 + third-party/yasm/yasm-1.3.0/config/config.sub | 1782 + third-party/yasm/yasm-1.3.0/config/depcomp | 791 + third-party/yasm/yasm-1.3.0/config/install-sh | 527 + third-party/yasm/yasm-1.3.0/config/missing | 215 + .../yasm/yasm-1.3.0/config/mkinstalldirs | 161 + .../yasm/yasm-1.3.0/config/test-driver | 139 + third-party/yasm/yasm-1.3.0/configure | 10699 ++ third-party/yasm/yasm-1.3.0/configure.ac | 313 + .../yasm/yasm-1.3.0/frontends/CMakeLists.txt | 3 + .../yasm/yasm-1.3.0/frontends/Makefile.inc | 7 + .../yasm-1.3.0/frontends/tasm/CMakeLists.txt | 37 + .../yasm-1.3.0/frontends/tasm/Makefile.inc | 7 + .../yasm-1.3.0/frontends/tasm/tasm-options.c | 127 + .../yasm-1.3.0/frontends/tasm/tasm-options.h | 69 + .../yasm/yasm-1.3.0/frontends/tasm/tasm.c | 1009 + .../frontends/vsyasm/CMakeLists.txt | 37 + .../yasm-1.3.0/frontends/vsyasm/Makefile.inc | 9 + .../yasm/yasm-1.3.0/frontends/vsyasm/vsyasm.c | 1424 + .../yasm-1.3.0/frontends/yasm/CMakeLists.txt | 34 + .../yasm-1.3.0/frontends/yasm/Makefile.inc | 23 + .../yasm-1.3.0/frontends/yasm/genstring.py | 45 + .../yasm-1.3.0/frontends/yasm/yasm-options.c | 216 + .../yasm-1.3.0/frontends/yasm/yasm-options.h | 75 + .../yasm-1.3.0/frontends/yasm/yasm-plugin.c | 126 + .../yasm-1.3.0/frontends/yasm/yasm-plugin.h | 34 + .../yasm/yasm-1.3.0/frontends/yasm/yasm.c | 1417 + .../yasm/yasm-1.3.0/frontends/yasm/yasm.xml | 552 + third-party/yasm/yasm-1.3.0/genstring.c | 102 + .../yasm/yasm-1.3.0/libyasm-stdint.h.cmake | 46 + third-party/yasm/yasm-1.3.0/libyasm.h | 75 + .../yasm/yasm-1.3.0/libyasm/CMakeLists.txt | 80 + .../yasm/yasm-1.3.0/libyasm/Makefile.inc | 80 + third-party/yasm/yasm-1.3.0/libyasm/arch.h | 495 + .../yasm/yasm-1.3.0/libyasm/assocdat.c | 138 + .../yasm/yasm-1.3.0/libyasm/assocdat.h | 76 + .../yasm/yasm-1.3.0/libyasm/bc-align.c | 245 + third-party/yasm/yasm-1.3.0/libyasm/bc-data.c | 600 + .../yasm/yasm-1.3.0/libyasm/bc-incbin.c | 265 + third-party/yasm/yasm-1.3.0/libyasm/bc-org.c | 152 + .../yasm/yasm-1.3.0/libyasm/bc-reserve.c | 152 + third-party/yasm/yasm-1.3.0/libyasm/bitvect.c | 4045 + third-party/yasm/yasm-1.3.0/libyasm/bitvect.h | 666 + .../yasm/yasm-1.3.0/libyasm/bytecode.c | 386 + .../yasm/yasm-1.3.0/libyasm/bytecode.h | 638 + .../yasm/yasm-1.3.0/libyasm/cmake-module.c | 126 + .../yasm/yasm-1.3.0/libyasm/compat-queue.h | 456 + .../yasm/yasm-1.3.0/libyasm/coretype.h | 393 + third-party/yasm/yasm-1.3.0/libyasm/dbgfmt.h | 122 + third-party/yasm/yasm-1.3.0/libyasm/errwarn.c | 529 + third-party/yasm/yasm-1.3.0/libyasm/errwarn.h | 348 + third-party/yasm/yasm-1.3.0/libyasm/expr.c | 1516 + third-party/yasm/yasm-1.3.0/libyasm/expr.h | 388 + third-party/yasm/yasm-1.3.0/libyasm/file.c | 672 + third-party/yasm/yasm-1.3.0/libyasm/file.h | 525 + .../yasm/yasm-1.3.0/libyasm/floatnum.c | 760 + .../yasm/yasm-1.3.0/libyasm/floatnum.h | 131 + .../yasm/yasm-1.3.0/libyasm/genmodule.c | 228 + third-party/yasm/yasm-1.3.0/libyasm/hamt.c | 421 + third-party/yasm/yasm-1.3.0/libyasm/hamt.h | 123 + third-party/yasm/yasm-1.3.0/libyasm/insn.c | 295 + third-party/yasm/yasm-1.3.0/libyasm/insn.h | 269 + third-party/yasm/yasm-1.3.0/libyasm/intnum.c | 1096 + third-party/yasm/yasm-1.3.0/libyasm/intnum.h | 340 + third-party/yasm/yasm-1.3.0/libyasm/inttree.c | 891 + third-party/yasm/yasm-1.3.0/libyasm/inttree.h | 70 + third-party/yasm/yasm-1.3.0/libyasm/linemap.c | 293 + third-party/yasm/yasm-1.3.0/libyasm/linemap.h | 141 + third-party/yasm/yasm-1.3.0/libyasm/listfmt.h | 124 + third-party/yasm/yasm-1.3.0/libyasm/md5.c | 309 + third-party/yasm/yasm-1.3.0/libyasm/md5.h | 32 + .../yasm/yasm-1.3.0/libyasm/mergesort.c | 361 + third-party/yasm/yasm-1.3.0/libyasm/module.h | 82 + third-party/yasm/yasm-1.3.0/libyasm/module.in | 179 + third-party/yasm/yasm-1.3.0/libyasm/objfmt.h | 216 + third-party/yasm/yasm-1.3.0/libyasm/parser.h | 67 + third-party/yasm/yasm-1.3.0/libyasm/phash.c | 268 + third-party/yasm/yasm-1.3.0/libyasm/phash.h | 19 + third-party/yasm/yasm-1.3.0/libyasm/preproc.h | 210 + third-party/yasm/yasm-1.3.0/libyasm/section.c | 1581 + third-party/yasm/yasm-1.3.0/libyasm/section.h | 383 + .../yasm/yasm-1.3.0/libyasm/strcasecmp.c | 94 + third-party/yasm/yasm-1.3.0/libyasm/strsep.c | 85 + third-party/yasm/yasm-1.3.0/libyasm/symrec.c | 714 + third-party/yasm/yasm-1.3.0/libyasm/symrec.h | 437 + .../yasm/yasm-1.3.0/libyasm/tests/1shl0.asm | 1 + .../yasm/yasm-1.3.0/libyasm/tests/1shl0.hex | 4 + .../yasm-1.3.0/libyasm/tests/Makefile.inc | 114 + .../yasm-1.3.0/libyasm/tests/absloop-err.asm | 6 + .../libyasm/tests/absloop-err.errwarn | 1 + .../yasm-1.3.0/libyasm/tests/bitvect_test.c | 176 + .../yasm-1.3.0/libyasm/tests/charconst64.asm | 3 + .../yasm-1.3.0/libyasm/tests/charconst64.hex | 10 + .../yasm-1.3.0/libyasm/tests/combpath_test.c | 139 + .../libyasm/tests/data-rawvalue.asm | 3 + .../libyasm/tests/data-rawvalue.hex | 13 + .../yasm-1.3.0/libyasm/tests/duplabel-err.asm | 18 + .../libyasm/tests/duplabel-err.errwarn | 4 + .../yasm-1.3.0/libyasm/tests/emptydata.asm | 1 + .../yasm-1.3.0/libyasm/tests/emptydata.hex | 0 .../yasm-1.3.0/libyasm/tests/equ-expand.asm | 9 + .../yasm-1.3.0/libyasm/tests/equ-expand.hex | 10 + .../libyasm/tests/expr-fold-level.asm | 4 + .../libyasm/tests/expr-fold-level.hex | 4 + .../libyasm/tests/expr-simplify-identity.asm | 4 + .../libyasm/tests/expr-simplify-identity.hex | 13 + .../libyasm/tests/expr-wide-ident.asm | 2 + .../libyasm/tests/expr-wide-ident.hex | 9 + .../yasm-1.3.0/libyasm/tests/externdef.asm | 2 + .../libyasm/tests/externdef.errwarn | 2 + .../yasm-1.3.0/libyasm/tests/externdef.hex | 0 .../yasm-1.3.0/libyasm/tests/floatnum_test.c | 453 + .../yasm/yasm-1.3.0/libyasm/tests/incbin.asm | 18 + .../yasm/yasm-1.3.0/libyasm/tests/incbin.hex | 23 + .../yasm-1.3.0/libyasm/tests/jmpsize1-err.asm | 264 + .../libyasm/tests/jmpsize1-err.errwarn | 2 + .../yasm-1.3.0/libyasm/tests/jmpsize1.asm | 264 + .../yasm-1.3.0/libyasm/tests/jmpsize1.hex | 265 + .../yasm-1.3.0/libyasm/tests/leb128_test.c | 199 + .../yasm-1.3.0/libyasm/tests/libyasm_test.sh | 3 + .../yasm-1.3.0/libyasm/tests/opt-align1.asm | 9 + .../yasm-1.3.0/libyasm/tests/opt-align1.hex | 266 + .../yasm-1.3.0/libyasm/tests/opt-align2.asm | 10 + .../yasm-1.3.0/libyasm/tests/opt-align2.hex | 266 + .../yasm-1.3.0/libyasm/tests/opt-align3.asm | 16 + .../yasm-1.3.0/libyasm/tests/opt-align3.hex | 272 + .../libyasm/tests/opt-circular1-err.asm | 2 + .../libyasm/tests/opt-circular1-err.errwarn | 1 + .../libyasm/tests/opt-circular2-err.asm | 2 + .../libyasm/tests/opt-circular2-err.errwarn | 1 + .../libyasm/tests/opt-circular3-err.asm | 7 + .../libyasm/tests/opt-circular3-err.errwarn | 1 + .../yasm-1.3.0/libyasm/tests/opt-gvmat64.asm | 514 + .../yasm-1.3.0/libyasm/tests/opt-gvmat64.hex | 731 + .../libyasm/tests/opt-immexpand.asm | 9 + .../libyasm/tests/opt-immexpand.hex | 263 + .../libyasm/tests/opt-immnoexpand.asm | 10 + .../libyasm/tests/opt-immnoexpand.hex | 261 + .../yasm-1.3.0/libyasm/tests/opt-oldalign.asm | 3 + .../yasm-1.3.0/libyasm/tests/opt-oldalign.hex | 35 + .../yasm-1.3.0/libyasm/tests/opt-struc.asm | 39 + .../yasm-1.3.0/libyasm/tests/opt-struc.hex | 24 + .../yasm-1.3.0/libyasm/tests/reserve-err1.asm | 15 + .../libyasm/tests/reserve-err1.errwarn | 2 + .../yasm-1.3.0/libyasm/tests/reserve-err2.asm | 15 + .../libyasm/tests/reserve-err2.errwarn | 6 + .../yasm-1.3.0/libyasm/tests/splitpath_test.c | 154 + .../yasm-1.3.0/libyasm/tests/strucsize.asm | 23 + .../yasm-1.3.0/libyasm/tests/strucsize.hex | 12 + .../yasm-1.3.0/libyasm/tests/times-res.asm | 3 + .../libyasm/tests/times-res.errwarn | 1 + .../yasm-1.3.0/libyasm/tests/times-res.hex | 20 + .../yasm/yasm-1.3.0/libyasm/tests/times0.asm | 1 + .../yasm/yasm-1.3.0/libyasm/tests/times0.hex | 0 .../yasm-1.3.0/libyasm/tests/timesfwd.asm | 8 + .../yasm-1.3.0/libyasm/tests/timesfwd.hex | 10 + .../libyasm/tests/timesover-err.asm | 2 + .../libyasm/tests/timesover-err.errwarn | 1 + .../yasm-1.3.0/libyasm/tests/timesunder.asm | 3 + .../yasm-1.3.0/libyasm/tests/timesunder.hex | 130 + .../yasm/yasm-1.3.0/libyasm/tests/unary.asm | 5 + .../yasm/yasm-1.3.0/libyasm/tests/unary.hex | 20 + .../yasm-1.3.0/libyasm/tests/uncstring_test.c | 156 + .../yasm-1.3.0/libyasm/tests/value-err.asm | 9 + .../libyasm/tests/value-err.errwarn | 3 + .../yasm-1.3.0/libyasm/tests/value-mask.asm | 5 + .../libyasm/tests/value-mask.errwarn | 1 + .../yasm-1.3.0/libyasm/tests/value-mask.hex | 2 + .../libyasm/tests/value-samesym.asm | 2 + .../libyasm/tests/value-samesym.errwarn | 1 + .../libyasm/tests/value-samesym.hex | 8 + .../libyasm/tests/value-shr-symexpr.asm | 6 + .../libyasm/tests/value-shr-symexpr.hex | 8 + .../yasm/yasm-1.3.0/libyasm/valparam.c | 385 + .../yasm/yasm-1.3.0/libyasm/valparam.h | 408 + third-party/yasm/yasm-1.3.0/libyasm/value.c | 771 + third-party/yasm/yasm-1.3.0/libyasm/value.h | 172 + third-party/yasm/yasm-1.3.0/libyasm/xmalloc.c | 114 + third-party/yasm/yasm-1.3.0/libyasm/xstrdup.c | 68 + third-party/yasm/yasm-1.3.0/m4/Makefile.inc | 30 + .../yasm/yasm-1.3.0/m4/ax_create_stdint_h.m4 | 675 + third-party/yasm/yasm-1.3.0/m4/codeset.m4 | 21 + third-party/yasm/yasm-1.3.0/m4/cython.m4 | 23 + third-party/yasm/yasm-1.3.0/m4/gettext.m4 | 401 + third-party/yasm/yasm-1.3.0/m4/glibc21.m4 | 30 + third-party/yasm/yasm-1.3.0/m4/iconv.m4 | 268 + third-party/yasm/yasm-1.3.0/m4/intdiv0.m4 | 70 + third-party/yasm/yasm-1.3.0/m4/intmax.m4 | 30 + .../yasm/yasm-1.3.0/m4/inttypes-pri.m4 | 30 + third-party/yasm/yasm-1.3.0/m4/inttypes.m4 | 25 + third-party/yasm/yasm-1.3.0/m4/inttypes_h.m4 | 26 + third-party/yasm/yasm-1.3.0/m4/isc-posix.m4 | 24 + third-party/yasm/yasm-1.3.0/m4/lcmessage.m4 | 30 + third-party/yasm/yasm-1.3.0/m4/lib-ld.m4 | 119 + third-party/yasm/yasm-1.3.0/m4/lib-link.m4 | 777 + third-party/yasm/yasm-1.3.0/m4/lib-prefix.m4 | 224 + third-party/yasm/yasm-1.3.0/m4/longdouble.m4 | 28 + third-party/yasm/yasm-1.3.0/m4/longlong.m4 | 23 + third-party/yasm/yasm-1.3.0/m4/nls.m4 | 32 + third-party/yasm/yasm-1.3.0/m4/po.m4 | 453 + .../yasm/yasm-1.3.0/m4/printf-posix.m4 | 44 + third-party/yasm/yasm-1.3.0/m4/progtest.m4 | 91 + third-party/yasm/yasm-1.3.0/m4/pythonhead.m4 | 24 + third-party/yasm/yasm-1.3.0/m4/signed.m4 | 17 + third-party/yasm/yasm-1.3.0/m4/size_max.m4 | 59 + third-party/yasm/yasm-1.3.0/m4/stdint_h.m4 | 26 + third-party/yasm/yasm-1.3.0/m4/uintmax_t.m4 | 30 + third-party/yasm/yasm-1.3.0/m4/ulonglong.m4 | 23 + third-party/yasm/yasm-1.3.0/m4/wchar_t.m4 | 20 + third-party/yasm/yasm-1.3.0/m4/wint_t.m4 | 20 + third-party/yasm/yasm-1.3.0/m4/xsize.m4 | 13 + .../yasm/yasm-1.3.0/modules/CMakeLists.txt | 103 + .../yasm/yasm-1.3.0/modules/Makefile.inc | 12 + .../yasm-1.3.0/modules/arch/CMakeLists.txt | 2 + .../yasm/yasm-1.3.0/modules/arch/Makefile.inc | 14 + .../modules/arch/lc3b/CMakeLists.txt | 11 + .../yasm-1.3.0/modules/arch/lc3b/Makefile.inc | 16 + .../yasm-1.3.0/modules/arch/lc3b/lc3barch.c | 212 + .../yasm-1.3.0/modules/arch/lc3b/lc3barch.h | 70 + .../yasm-1.3.0/modules/arch/lc3b/lc3bbc.c | 249 + .../yasm-1.3.0/modules/arch/lc3b/lc3bid.re | 480 + .../modules/arch/lc3b/tests/Makefile.inc | 12 + .../modules/arch/lc3b/tests/lc3b-basic.asm | 9 + .../arch/lc3b/tests/lc3b-basic.errwarn | 1 + .../modules/arch/lc3b/tests/lc3b-basic.hex | 12 + .../modules/arch/lc3b/tests/lc3b-br.asm | 10 + .../modules/arch/lc3b/tests/lc3b-br.hex | 16 + .../modules/arch/lc3b/tests/lc3b-ea-err.asm | 1 + .../arch/lc3b/tests/lc3b-ea-err.errwarn | 1 + .../modules/arch/lc3b/tests/lc3b-mp22NC.asm | 302 + .../modules/arch/lc3b/tests/lc3b-mp22NC.hex | 512 + .../modules/arch/lc3b/tests/lc3b_test.sh | 3 + .../modules/arch/x86/CMakeLists.txt | 50 + .../yasm-1.3.0/modules/arch/x86/Makefile.inc | 57 + .../modules/arch/x86/gen_x86_insn.py | 8489 + .../modules/arch/x86/tests/Makefile.inc | 263 + .../modules/arch/x86/tests/addbyte.asm | 34 + .../modules/arch/x86/tests/addbyte.errwarn | 4 + .../modules/arch/x86/tests/addbyte.hex | 97 + .../modules/arch/x86/tests/addrop-err.asm | 2 + .../modules/arch/x86/tests/addrop-err.errwarn | 1 + .../modules/arch/x86/tests/addrop.asm | 25 + .../modules/arch/x86/tests/addrop.errwarn | 1 + .../modules/arch/x86/tests/addrop.hex | 88 + .../yasm-1.3.0/modules/arch/x86/tests/aes.asm | 80 + .../yasm-1.3.0/modules/arch/x86/tests/aes.hex | 356 + .../modules/arch/x86/tests/amd-fma4.asm | 109 + .../modules/arch/x86/tests/amd-fma4.hex | 540 + .../modules/arch/x86/tests/amd200707.asm | 31 + .../modules/arch/x86/tests/amd200707.hex | 212 + .../modules/arch/x86/tests/arithsmall.asm | 13 + .../modules/arch/x86/tests/arithsmall.errwarn | 2 + .../modules/arch/x86/tests/arithsmall.hex | 51 + .../yasm-1.3.0/modules/arch/x86/tests/avx.asm | 2617 + .../yasm-1.3.0/modules/arch/x86/tests/avx.hex | 10332 + .../modules/arch/x86/tests/avx16.asm | 10 + .../modules/arch/x86/tests/avx16.hex | 52 + .../modules/arch/x86/tests/avx2.asm | 652 + .../modules/arch/x86/tests/avx2.hex | 2297 + .../modules/arch/x86/tests/avxcc.asm | 899 + .../modules/arch/x86/tests/avxcc.hex | 3816 + .../modules/arch/x86/tests/bittest.asm | 1 + .../modules/arch/x86/tests/bittest.hex | 5 + .../modules/arch/x86/tests/bmi1.asm | 32 + .../modules/arch/x86/tests/bmi1.hex | 193 + .../modules/arch/x86/tests/bmi2.asm | 40 + .../modules/arch/x86/tests/bmi2.hex | 244 + .../modules/arch/x86/tests/bswap64.asm | 4 + .../modules/arch/x86/tests/bswap64.hex | 6 + .../modules/arch/x86/tests/clmul.asm | 42 + .../modules/arch/x86/tests/clmul.hex | 210 + .../modules/arch/x86/tests/cmpxchg.asm | 5 + .../modules/arch/x86/tests/cmpxchg.hex | 34 + .../modules/arch/x86/tests/cpubasic-err.asm | 17 + .../arch/x86/tests/cpubasic-err.errwarn | 6 + .../modules/arch/x86/tests/cyrix.asm | 17 + .../modules/arch/x86/tests/cyrix.hex | 86 + .../modules/arch/x86/tests/div-err.asm | 7 + .../modules/arch/x86/tests/div-err.errwarn | 4 + .../modules/arch/x86/tests/ea-nonzero.asm | 6 + .../modules/arch/x86/tests/ea-nonzero.hex | 5 + .../modules/arch/x86/tests/ea-over.asm | 4 + .../modules/arch/x86/tests/ea-over.errwarn | 1 + .../modules/arch/x86/tests/ea-over.hex | 6 + .../modules/arch/x86/tests/ea-warn.asm | 18 + .../modules/arch/x86/tests/ea-warn.errwarn | 3 + .../modules/arch/x86/tests/ea-warn.hex | 88 + .../modules/arch/x86/tests/ebpindex.asm | 5 + .../modules/arch/x86/tests/ebpindex.hex | 16 + .../modules/arch/x86/tests/effaddr.asm | 18 + .../modules/arch/x86/tests/effaddr.hex | 63 + .../modules/arch/x86/tests/enter.asm | 9 + .../modules/arch/x86/tests/enter.errwarn | 2 + .../modules/arch/x86/tests/enter.hex | 26 + .../modules/arch/x86/tests/eptvpid.asm | 8 + .../modules/arch/x86/tests/eptvpid.hex | 22 + .../modules/arch/x86/tests/f16c.asm | 10 + .../modules/arch/x86/tests/f16c.hex | 64 + .../modules/arch/x86/tests/far64.asm | 7 + .../modules/arch/x86/tests/far64.hex | 44 + .../modules/arch/x86/tests/farbasic.asm | 12 + .../modules/arch/x86/tests/farbasic.hex | 19 + .../modules/arch/x86/tests/farithr.asm | 9 + .../modules/arch/x86/tests/farithr.hex | 16 + .../modules/arch/x86/tests/fcmov.asm | 8 + .../modules/arch/x86/tests/fcmov.hex | 16 + .../yasm-1.3.0/modules/arch/x86/tests/fma.asm | 289 + .../yasm-1.3.0/modules/arch/x86/tests/fma.hex | 1440 + .../modules/arch/x86/tests/fsgsbase.asm | 10 + .../modules/arch/x86/tests/fsgsbase.hex | 36 + .../modules/arch/x86/tests/fwdequ64.asm | 4 + .../modules/arch/x86/tests/fwdequ64.hex | 7 + .../modules/arch/x86/tests/gas32/Makefile.inc | 24 + .../modules/arch/x86/tests/gas32/align32.asm | 82 + .../modules/arch/x86/tests/gas32/align32.hex | 536 + .../arch/x86/tests/gas32/gas-farithr.asm | 18 + .../arch/x86/tests/gas32/gas-farithr.hex | 376 + .../arch/x86/tests/gas32/gas-farjump.asm | 13 + .../arch/x86/tests/gas32/gas-farjump.hex | 408 + .../arch/x86/tests/gas32/gas-fpmem.asm | 11 + .../arch/x86/tests/gas32/gas-fpmem.hex | 376 + .../arch/x86/tests/gas32/gas-invlpg.asm | 2 + .../arch/x86/tests/gas32/gas-invlpg.hex | 360 + .../arch/x86/tests/gas32/gas-loop32.asm | 5 + .../arch/x86/tests/gas32/gas-loop32.hex | 376 + .../arch/x86/tests/gas32/gas-movdq32.asm | 20 + .../arch/x86/tests/gas32/gas-movdq32.hex | 440 + .../arch/x86/tests/gas32/gas-movsd.asm | 3 + .../arch/x86/tests/gas32/gas-movsd.hex | 360 + .../modules/arch/x86/tests/gas32/gas-pop.asm | 50 + .../modules/arch/x86/tests/gas32/gas-pop.hex | 456 + .../arch/x86/tests/gas32/gas32-jmpcall.asm | 6 + .../arch/x86/tests/gas32/gas32-jmpcall.hex | 464 + .../arch/x86/tests/gas32/x86_gas32_test.sh | 3 + .../modules/arch/x86/tests/gas64/Makefile.inc | 35 + .../modules/arch/x86/tests/gas64/align64.asm | 82 + .../modules/arch/x86/tests/gas64/align64.hex | 672 + .../modules/arch/x86/tests/gas64/gas-cbw.asm | 12 + .../modules/arch/x86/tests/gas64/gas-cbw.hex | 528 + .../modules/arch/x86/tests/gas64/gas-fp.asm | 32 + .../modules/arch/x86/tests/gas64/gas-fp.hex | 672 + .../arch/x86/tests/gas64/gas-inout.asm | 12 + .../arch/x86/tests/gas64/gas-inout.hex | 528 + .../arch/x86/tests/gas64/gas-loop64.asm | 5 + .../arch/x86/tests/gas64/gas-loop64.hex | 528 + .../arch/x86/tests/gas64/gas-moreinsn.asm | 66 + .../arch/x86/tests/gas64/gas-moreinsn.hex | 720 + .../arch/x86/tests/gas64/gas-movabs.asm | 4 + .../arch/x86/tests/gas64/gas-movabs.hex | 672 + .../arch/x86/tests/gas64/gas-movdq64.asm | 30 + .../arch/x86/tests/gas64/gas-movdq64.hex | 640 + .../arch/x86/tests/gas64/gas-movsxs.asm | 32 + .../arch/x86/tests/gas64/gas-movsxs.hex | 640 + .../arch/x86/tests/gas64/gas-muldiv.asm | 36 + .../arch/x86/tests/gas64/gas-muldiv.hex | 624 + .../arch/x86/tests/gas64/gas-prefix.asm | 9 + .../arch/x86/tests/gas64/gas-prefix.errwarn | 4 + .../arch/x86/tests/gas64/gas-prefix.hex | 544 + .../arch/x86/tests/gas64/gas-retenter.asm | 20 + .../arch/x86/tests/gas64/gas-retenter.hex | 544 + .../arch/x86/tests/gas64/gas-shift.asm | 26 + .../arch/x86/tests/gas64/gas-shift.hex | 576 + .../arch/x86/tests/gas64/gas64-jmpcall.asm | 6 + .../arch/x86/tests/gas64/gas64-jmpcall.hex | 688 + .../modules/arch/x86/tests/gas64/riprel.asm | 1 + .../modules/arch/x86/tests/gas64/riprel.hex | 640 + .../arch/x86/tests/gas64/x86_gas64_test.sh | 3 + .../modules/arch/x86/tests/gen-fma-test.py | 63 + .../modules/arch/x86/tests/genopcode.asm | 178 + .../modules/arch/x86/tests/genopcode.hex | 495 + .../modules/arch/x86/tests/imm64.asm | 35 + .../modules/arch/x86/tests/imm64.errwarn | 3 + .../modules/arch/x86/tests/imm64.hex | 175 + .../modules/arch/x86/tests/invpcid.asm | 6 + .../modules/arch/x86/tests/invpcid.hex | 19 + .../modules/arch/x86/tests/iret.asm | 13 + .../modules/arch/x86/tests/iret.hex | 14 + .../modules/arch/x86/tests/jmp64-1.asm | 6 + .../modules/arch/x86/tests/jmp64-1.hex | 13 + .../modules/arch/x86/tests/jmp64-2.asm | 6 + .../modules/arch/x86/tests/jmp64-2.hex | 13 + .../modules/arch/x86/tests/jmp64-3.asm | 7 + .../modules/arch/x86/tests/jmp64-3.hex | 14 + .../modules/arch/x86/tests/jmp64-4.asm | 7 + .../modules/arch/x86/tests/jmp64-4.hex | 14 + .../modules/arch/x86/tests/jmp64-5.asm | 7 + .../modules/arch/x86/tests/jmp64-5.hex | 65554 +++++++ .../modules/arch/x86/tests/jmp64-6.asm | 7 + .../modules/arch/x86/tests/jmp64-6.hex | 14 + .../modules/arch/x86/tests/jmpfar.asm | 16 + .../modules/arch/x86/tests/jmpfar.hex | 39 + .../modules/arch/x86/tests/larlsl.asm | 59 + .../modules/arch/x86/tests/larlsl.hex | 178 + .../yasm-1.3.0/modules/arch/x86/tests/lds.asm | 6 + .../yasm-1.3.0/modules/arch/x86/tests/lds.hex | 27 + .../modules/arch/x86/tests/lfs64.asm | 10 + .../modules/arch/x86/tests/lfs64.hex | 33 + .../modules/arch/x86/tests/loopadsz.asm | 7 + .../modules/arch/x86/tests/loopadsz.hex | 12 + .../modules/arch/x86/tests/lsahf.asm | 9 + .../modules/arch/x86/tests/lsahf.hex | 6 + .../modules/arch/x86/tests/lzcnt.asm | 8 + .../modules/arch/x86/tests/lzcnt.hex | 43 + .../modules/arch/x86/tests/mem64-err.asm | 7 + .../modules/arch/x86/tests/mem64-err.errwarn | 5 + .../modules/arch/x86/tests/mem64.asm | 25 + .../modules/arch/x86/tests/mem64.errwarn | 1 + .../modules/arch/x86/tests/mem64.hex | 144 + .../modules/arch/x86/tests/mem64hi32.asm | 3 + .../modules/arch/x86/tests/mem64hi32.hex | 9 + .../modules/arch/x86/tests/mem64rip.asm | 8 + .../modules/arch/x86/tests/mem64rip.hex | 35 + .../modules/arch/x86/tests/mixcase.asm | 3 + .../modules/arch/x86/tests/mixcase.hex | 3 + .../modules/arch/x86/tests/movbe.asm | 20 + .../modules/arch/x86/tests/movbe.hex | 176 + .../modules/arch/x86/tests/movdq32.asm | 21 + .../modules/arch/x86/tests/movdq32.hex | 88 + .../modules/arch/x86/tests/movdq64.asm | 31 + .../modules/arch/x86/tests/movdq64.hex | 132 + .../modules/arch/x86/tests/negequ.asm | 8 + .../modules/arch/x86/tests/negequ.hex | 12 + .../modules/arch/x86/tests/nomem64-err.asm | 17 + .../arch/x86/tests/nomem64-err.errwarn | 14 + .../modules/arch/x86/tests/nomem64-err2.asm | 3 + .../arch/x86/tests/nomem64-err2.errwarn | 2 + .../modules/arch/x86/tests/nomem64.asm | 28 + .../modules/arch/x86/tests/nomem64.errwarn | 1 + .../modules/arch/x86/tests/nomem64.hex | 159 + .../yasm-1.3.0/modules/arch/x86/tests/o64.asm | 5 + .../yasm-1.3.0/modules/arch/x86/tests/o64.hex | 22 + .../modules/arch/x86/tests/o64loop.asm | 3 + .../modules/arch/x86/tests/o64loop.errwarn | 1 + .../modules/arch/x86/tests/o64loop.hex | 2 + .../modules/arch/x86/tests/opersize.asm | 17 + .../modules/arch/x86/tests/opersize.hex | 30 + .../modules/arch/x86/tests/opsize-err.asm | 3 + .../modules/arch/x86/tests/opsize-err.errwarn | 1 + .../modules/arch/x86/tests/overflow.asm | 12 + .../modules/arch/x86/tests/overflow.errwarn | 6 + .../modules/arch/x86/tests/overflow.hex | 37 + .../modules/arch/x86/tests/padlock.asm | 16 + .../modules/arch/x86/tests/padlock.hex | 38 + .../modules/arch/x86/tests/pinsrb.asm | 6 + .../modules/arch/x86/tests/pinsrb.hex | 18 + .../modules/arch/x86/tests/pshift.asm | 11 + .../modules/arch/x86/tests/pshift.hex | 45 + .../modules/arch/x86/tests/push64.asm | 6 + .../modules/arch/x86/tests/push64.errwarn | 1 + .../modules/arch/x86/tests/push64.hex | 19 + .../modules/arch/x86/tests/pushf-err.asm | 29 + .../modules/arch/x86/tests/pushf-err.errwarn | 10 + .../modules/arch/x86/tests/pushf.asm | 29 + .../modules/arch/x86/tests/pushf.hex | 24 + .../modules/arch/x86/tests/pushnosize.asm | 47 + .../modules/arch/x86/tests/pushnosize.errwarn | 6 + .../modules/arch/x86/tests/pushnosize.hex | 139 + .../modules/arch/x86/tests/rdrnd.asm | 4 + .../modules/arch/x86/tests/rdrnd.hex | 11 + .../yasm-1.3.0/modules/arch/x86/tests/rep.asm | 5 + .../yasm-1.3.0/modules/arch/x86/tests/rep.hex | 11 + .../yasm-1.3.0/modules/arch/x86/tests/ret.asm | 29 + .../yasm-1.3.0/modules/arch/x86/tests/ret.hex | 63 + .../modules/arch/x86/tests/riprel1.asm | 66 + .../modules/arch/x86/tests/riprel1.hex | 334 + .../modules/arch/x86/tests/riprel2.asm | 110 + .../modules/arch/x86/tests/riprel2.errwarn | 26 + .../modules/arch/x86/tests/riprel2.hex | 704 + .../modules/arch/x86/tests/ripseg.asm | 35 + .../modules/arch/x86/tests/ripseg.errwarn | 6 + .../modules/arch/x86/tests/ripseg.hex | 170 + .../modules/arch/x86/tests/segmov.asm | 9 + .../modules/arch/x86/tests/segmov.hex | 29 + .../modules/arch/x86/tests/segoff-err.asm | 6 + .../modules/arch/x86/tests/segoff-err.errwarn | 4 + .../modules/arch/x86/tests/segoff.asm | 7 + .../modules/arch/x86/tests/segoff.hex | 15 + .../modules/arch/x86/tests/shift.asm | 6 + .../modules/arch/x86/tests/shift.hex | 8 + .../modules/arch/x86/tests/shift64.asm | 5 + .../modules/arch/x86/tests/shift64.hex | 16 + .../modules/arch/x86/tests/simd-1.asm | 11 + .../modules/arch/x86/tests/simd-1.hex | 67 + .../modules/arch/x86/tests/simd-2.asm | 104 + .../modules/arch/x86/tests/simd-2.hex | 474 + .../modules/arch/x86/tests/simd64-1.asm | 2 + .../modules/arch/x86/tests/simd64-1.hex | 5 + .../modules/arch/x86/tests/simd64-2.asm | 11 + .../modules/arch/x86/tests/simd64-2.hex | 39 + .../yasm-1.3.0/modules/arch/x86/tests/smx.asm | 3 + .../yasm-1.3.0/modules/arch/x86/tests/smx.hex | 2 + .../modules/arch/x86/tests/sse-prefix.asm | 39 + .../modules/arch/x86/tests/sse-prefix.hex | 81 + .../modules/arch/x86/tests/sse3.asm | 25 + .../modules/arch/x86/tests/sse3.hex | 118 + .../modules/arch/x86/tests/sse4-err.asm | 4 + .../modules/arch/x86/tests/sse4-err.errwarn | 2 + .../modules/arch/x86/tests/sse4.asm | 226 + .../modules/arch/x86/tests/sse4.hex | 1347 + .../modules/arch/x86/tests/ssewidth.asm | 566 + .../modules/arch/x86/tests/ssewidth.hex | 1532 + .../modules/arch/x86/tests/ssse3.asm | 71 + .../yasm-1.3.0/modules/arch/x86/tests/ssse3.c | 223 + .../modules/arch/x86/tests/ssse3.hex | 994 + .../modules/arch/x86/tests/stos.asm | 13 + .../modules/arch/x86/tests/stos.hex | 14 + .../yasm-1.3.0/modules/arch/x86/tests/str.asm | 4 + .../yasm-1.3.0/modules/arch/x86/tests/str.hex | 8 + .../modules/arch/x86/tests/strict-err.asm | 5 + .../modules/arch/x86/tests/strict-err.errwarn | 4 + .../modules/arch/x86/tests/strict.asm | 163 + .../modules/arch/x86/tests/strict.errwarn | 20 + .../modules/arch/x86/tests/strict.hex | 542 + .../modules/arch/x86/tests/stringseg.asm | 5 + .../modules/arch/x86/tests/stringseg.errwarn | 1 + .../modules/arch/x86/tests/stringseg.hex | 11 + .../yasm-1.3.0/modules/arch/x86/tests/svm.asm | 39 + .../yasm-1.3.0/modules/arch/x86/tests/svm.hex | 104 + .../modules/arch/x86/tests/twobytemem.asm | 15 + .../modules/arch/x86/tests/twobytemem.errwarn | 1 + .../modules/arch/x86/tests/twobytemem.hex | 75 + .../modules/arch/x86/tests/vmx-err.asm | 8 + .../modules/arch/x86/tests/vmx-err.errwarn | 2 + .../yasm-1.3.0/modules/arch/x86/tests/vmx.asm | 25 + .../yasm-1.3.0/modules/arch/x86/tests/vmx.hex | 83 + .../modules/arch/x86/tests/vsib-err.asm | 14 + .../modules/arch/x86/tests/vsib-err.errwarn | 7 + .../modules/arch/x86/tests/vsib.asm | 114 + .../modules/arch/x86/tests/vsib.hex | 662 + .../modules/arch/x86/tests/vsib2-err.asm | 19 + .../modules/arch/x86/tests/vsib2-err.errwarn | 7 + .../modules/arch/x86/tests/x86_test.sh | 3 + .../modules/arch/x86/tests/x86label.asm | 2 + .../modules/arch/x86/tests/x86label.hex | 2 + .../modules/arch/x86/tests/xchg64.asm | 32 + .../modules/arch/x86/tests/xchg64.hex | 56 + .../modules/arch/x86/tests/xmm64.asm | 3 + .../modules/arch/x86/tests/xmm64.hex | 7 + .../modules/arch/x86/tests/xop-all.asm | 266 + .../modules/arch/x86/tests/xop-all.hex | 1437 + .../modules/arch/x86/tests/xop-basic.asm | 8 + .../modules/arch/x86/tests/xop-basic.hex | 47 + .../modules/arch/x86/tests/xop-cc.asm | 22 + .../modules/arch/x86/tests/xop-cc.hex | 108 + .../modules/arch/x86/tests/xsave.asm | 8 + .../modules/arch/x86/tests/xsave.hex | 30 + .../yasm-1.3.0/modules/arch/x86/x86arch.c | 633 + .../yasm-1.3.0/modules/arch/x86/x86arch.h | 336 + .../yasm/yasm-1.3.0/modules/arch/x86/x86bc.c | 1062 + .../yasm-1.3.0/modules/arch/x86/x86cpu.gperf | 496 + .../yasm-1.3.0/modules/arch/x86/x86expr.c | 1061 + .../yasm/yasm-1.3.0/modules/arch/x86/x86id.c | 1951 + .../modules/arch/x86/x86regtmod.gperf | 297 + .../yasm-1.3.0/modules/arch/yasm_arch.xml | 398 + .../yasm-1.3.0/modules/dbgfmts/CMakeLists.txt | 4 + .../yasm-1.3.0/modules/dbgfmts/Makefile.inc | 18 + .../modules/dbgfmts/codeview/CMakeLists.txt | 5 + .../modules/dbgfmts/codeview/Makefile.inc | 11 + .../modules/dbgfmts/codeview/cv-dbgfmt.c | 107 + .../modules/dbgfmts/codeview/cv-dbgfmt.h | 58 + .../modules/dbgfmts/codeview/cv-symline.c | 1102 + .../modules/dbgfmts/codeview/cv-type.c | 778 + .../modules/dbgfmts/codeview/cv8.txt | 96 + .../modules/dbgfmts/dwarf2/CMakeLists.txt | 6 + .../modules/dbgfmts/dwarf2/Makefile.inc | 10 + .../modules/dbgfmts/dwarf2/dwarf2-aranges.c | 125 + .../modules/dbgfmts/dwarf2/dwarf2-dbgfmt.c | 348 + .../modules/dbgfmts/dwarf2/dwarf2-dbgfmt.h | 131 + .../modules/dbgfmts/dwarf2/dwarf2-info.c | 429 + .../modules/dbgfmts/dwarf2/dwarf2-line.c | 1144 + .../modules/dbgfmts/dwarf2/tests/Makefile.inc | 9 + .../dbgfmts/dwarf2/tests/gen64/Makefile.inc | 6 + .../dwarf2/tests/gen64/dwarf2_gen64_test.sh | 3 + .../dwarf2/tests/gen64/dwarf64_pathname.asm | 22 + .../dwarf2/tests/gen64/dwarf64_pathname.hex | 1632 + .../dbgfmts/dwarf2/tests/pass32/Makefile.inc | 8 + .../dwarf2/tests/pass32/dwarf2_pass32_test.sh | 3 + .../dwarf2/tests/pass32/dwarf32-err.asm | 34 + .../dwarf2/tests/pass32/dwarf32-err.errwarn | 22 + .../dwarf2/tests/pass32/dwarf32_testhd.asm | 980 + .../dwarf2/tests/pass32/dwarf32_testhd.hex | 5936 + .../dbgfmts/dwarf2/tests/pass64/Makefile.inc | 8 + .../dwarf2/tests/pass64/dwarf2_pass64_test.sh | 3 + .../dwarf2/tests/pass64/dwarf64_2loc.asm | 8 + .../dwarf2/tests/pass64/dwarf64_2loc.hex | 880 + .../dwarf2/tests/pass64/dwarf64_leb128.asm | 9063 + .../dwarf2/tests/pass64/dwarf64_leb128.hex | 91280 +++++++++ .../dwarf2/tests/passwin64/Makefile.inc | 7 + .../tests/passwin64/dwarf2_passwin64_test.sh | 3 + .../tests/passwin64/dwarfwin64_testhd.asm | 1132 + .../tests/passwin64/dwarfwin64_testhd.errwarn | 17 + .../tests/passwin64/dwarfwin64_testhd.hex | 7574 + .../modules/dbgfmts/null/CMakeLists.txt | 3 + .../modules/dbgfmts/null/Makefile.inc | 3 + .../modules/dbgfmts/null/null-dbgfmt.c | 64 + .../modules/dbgfmts/stabs/CMakeLists.txt | 3 + .../modules/dbgfmts/stabs/Makefile.inc | 6 + .../modules/dbgfmts/stabs/stabs-dbgfmt.c | 511 + .../modules/dbgfmts/stabs/tests/Makefile.inc | 5 + .../modules/dbgfmts/stabs/tests/stabs-elf.asm | 83 + .../modules/dbgfmts/stabs/tests/stabs-elf.hex | 1632 + .../modules/dbgfmts/stabs/tests/stabs_test.sh | 4 + .../modules/dbgfmts/yasm_dbgfmts.xml | 125 + .../modules/listfmts/CMakeLists.txt | 1 + .../yasm-1.3.0/modules/listfmts/Makefile.inc | 3 + .../modules/listfmts/nasm/CMakeLists.txt | 3 + .../modules/listfmts/nasm/Makefile.inc | 7 + .../modules/listfmts/nasm/nasm-listfmt.c | 301 + .../yasm-1.3.0/modules/objfmts/CMakeLists.txt | 9 + .../yasm-1.3.0/modules/objfmts/Makefile.inc | 30 + .../modules/objfmts/bin/CMakeLists.txt | 3 + .../modules/objfmts/bin/Makefile.inc | 7 + .../modules/objfmts/bin/bin-objfmt.c | 1972 + .../modules/objfmts/bin/tests/Makefile.inc | 34 + .../modules/objfmts/bin/tests/abs.asm | 5 + .../modules/objfmts/bin/tests/abs.hex | 5 + .../modules/objfmts/bin/tests/bigorg.asm | 9 + .../modules/objfmts/bin/tests/bigorg.errwarn | 2 + .../modules/objfmts/bin/tests/bigorg.hex | 38 + .../modules/objfmts/bin/tests/bin-farabs.asm | 53 + .../modules/objfmts/bin/tests/bin-farabs.hex | 59 + .../modules/objfmts/bin/tests/bin-rip.asm | 20 + .../modules/objfmts/bin/tests/bin-rip.hex | 46 + .../modules/objfmts/bin/tests/bin_test.sh | 3 + .../modules/objfmts/bin/tests/bintest.asm | 56 + .../modules/objfmts/bin/tests/bintest.hex | 65 + .../modules/objfmts/bin/tests/float-err.asm | 12 + .../objfmts/bin/tests/float-err.errwarn | 8 + .../modules/objfmts/bin/tests/float.asm | 10 + .../modules/objfmts/bin/tests/float.hex | 48 + .../objfmts/bin/tests/integer-warn.asm | 6 + .../objfmts/bin/tests/integer-warn.errwarn | 5 + .../objfmts/bin/tests/integer-warn.hex | 25 + .../modules/objfmts/bin/tests/integer.asm | 8 + .../modules/objfmts/bin/tests/integer.hex | 25 + .../modules/objfmts/bin/tests/levelop.asm | 4 + .../modules/objfmts/bin/tests/levelop.hex | 12 + .../objfmts/bin/tests/multisect/Makefile.inc | 51 + .../objfmts/bin/tests/multisect/bin-align.asm | 12 + .../bin/tests/multisect/bin-align.errwarn | 3 + .../objfmts/bin/tests/multisect/bin-align.hex | 17 + .../objfmts/bin/tests/multisect/bin-align.map | 66 + .../objfmts/bin/tests/multisect/bin-ssym.asm | 5 + .../objfmts/bin/tests/multisect/bin-ssym.hex | 25 + .../objfmts/bin/tests/multisect/bin-ssym.map | 16 + .../bin/tests/multisect/bin_multi_test.sh | 113 + .../bin/tests/multisect/follows-loop1-err.asm | 2 + .../tests/multisect/follows-loop1-err.errwarn | 1 + .../bin/tests/multisect/follows-loop2-err.asm | 1 + .../tests/multisect/follows-loop2-err.errwarn | 1 + .../tests/multisect/follows-notfound-err.asm | 2 + .../multisect/follows-notfound-err.errwarn | 1 + .../objfmts/bin/tests/multisect/initbss.asm | 5 + .../bin/tests/multisect/initbss.errwarn | 2 + .../objfmts/bin/tests/multisect/initbss.hex | 0 .../objfmts/bin/tests/multisect/initbss.map | 17 + .../bin/tests/multisect/ldlinux-sects.asm | 102 + .../bin/tests/multisect/ldlinux-sects.hex | 11363 ++ .../bin/tests/multisect/ldlinux-sects.map | 148 + .../bin/tests/multisect/multisect1.asm | 31 + .../bin/tests/multisect/multisect1.hex | 20 + .../bin/tests/multisect/multisect1.map | 78 + .../bin/tests/multisect/multisect2.asm | 42 + .../bin/tests/multisect/multisect2.hex | 66 + .../bin/tests/multisect/multisect2.map | 74 + .../bin/tests/multisect/multisect3.asm | 9 + .../bin/tests/multisect/multisect3.hex | 2 + .../bin/tests/multisect/multisect3.map | 54 + .../bin/tests/multisect/multisect4.asm | 31 + .../bin/tests/multisect/multisect4.hex | 768 + .../bin/tests/multisect/multisect4.map | 97 + .../bin/tests/multisect/multisect5.asm | 22 + .../bin/tests/multisect/multisect5.hex | 1816 + .../bin/tests/multisect/multisect5.map | 138 + .../bin/tests/multisect/nomultisect1.asm | 10 + .../bin/tests/multisect/nomultisect1.hex | 512 + .../bin/tests/multisect/nomultisect1.map | 54 + .../bin/tests/multisect/nomultisect2.asm | 12 + .../bin/tests/multisect/nomultisect2.hex | 512 + .../bin/tests/multisect/nomultisect2.map | 54 + .../tests/multisect/vfollows-loop1-err.asm | 2 + .../multisect/vfollows-loop1-err.errwarn | 1 + .../tests/multisect/vfollows-loop2-err.asm | 1 + .../multisect/vfollows-loop2-err.errwarn | 1 + .../tests/multisect/vfollows-notfound-err.asm | 2 + .../multisect/vfollows-notfound-err.errwarn | 1 + .../modules/objfmts/bin/tests/reserve.asm | 14 + .../modules/objfmts/bin/tests/reserve.errwarn | 4 + .../modules/objfmts/bin/tests/reserve.hex | 233 + .../modules/objfmts/bin/tests/shr.asm | 3 + .../modules/objfmts/bin/tests/shr.hex | 260 + .../modules/objfmts/coff/CMakeLists.txt | 27 + .../modules/objfmts/coff/Makefile.inc | 25 + .../modules/objfmts/coff/coff-objfmt.c | 2517 + .../modules/objfmts/coff/coff-objfmt.h | 77 + .../modules/objfmts/coff/tests/Makefile.inc | 11 + .../modules/objfmts/coff/tests/coff_test.sh | 3 + .../modules/objfmts/coff/tests/cofftest.asm | 82 + .../modules/objfmts/coff/tests/cofftest.c | 34 + .../modules/objfmts/coff/tests/cofftest.hex | 657 + .../modules/objfmts/coff/tests/cofftimes.asm | 12 + .../modules/objfmts/coff/tests/cofftimes.hex | 470 + .../modules/objfmts/coff/tests/x86id.asm | 26132 +++ .../modules/objfmts/coff/tests/x86id.errwarn | 44 + .../modules/objfmts/coff/tests/x86id.hex | 106010 +++++++++++ .../modules/objfmts/coff/win64-except.c | 559 + .../modules/objfmts/coff/win64-gas.mac | 73 + .../modules/objfmts/coff/win64-nasm.mac | 106 + .../modules/objfmts/dbg/CMakeLists.txt | 3 + .../modules/objfmts/dbg/Makefile.inc | 3 + .../modules/objfmts/dbg/dbg-objfmt.c | 183 + .../modules/objfmts/elf/CMakeLists.txt | 10 + .../modules/objfmts/elf/Makefile.inc | 13 + .../modules/objfmts/elf/elf-machine.h | 108 + .../modules/objfmts/elf/elf-objfmt.c | 1393 + .../modules/objfmts/elf/elf-x86-amd64.c | 256 + .../modules/objfmts/elf/elf-x86-x32.c | 251 + .../modules/objfmts/elf/elf-x86-x86.c | 242 + .../yasm/yasm-1.3.0/modules/objfmts/elf/elf.c | 960 + .../yasm/yasm-1.3.0/modules/objfmts/elf/elf.h | 532 + .../modules/objfmts/elf/tests/Makefile.inc | 59 + .../objfmts/elf/tests/amd64/Makefile.inc | 11 + .../objfmts/elf/tests/amd64/elf-rip.asm | 7 + .../objfmts/elf/tests/amd64/elf-rip.hex | 704 + .../objfmts/elf/tests/amd64/elf_amd64_test.sh | 3 + .../objfmts/elf/tests/amd64/elfso64.asm | 90 + .../objfmts/elf/tests/amd64/elfso64.hex | 1680 + .../objfmts/elf/tests/amd64/gotpcrel.asm | 6 + .../objfmts/elf/tests/amd64/gotpcrel.hex | 720 + .../objfmts/elf/tests/amd64/multiplefixup.asm | 8 + .../objfmts/elf/tests/amd64/multiplefixup.hex | 992 + .../modules/objfmts/elf/tests/curpos-err.asm | 27 + .../objfmts/elf/tests/curpos-err.errwarn | 2 + .../modules/objfmts/elf/tests/curpos.asm | 27 + .../modules/objfmts/elf/tests/curpos.hex | 832 + .../modules/objfmts/elf/tests/elf-overdef.asm | 2 + .../modules/objfmts/elf/tests/elf-overdef.hex | 360 + .../modules/objfmts/elf/tests/elf-x86id.asm | 26132 +++ .../modules/objfmts/elf/tests/elf-x86id.hex | 145800 +++++++++++++++ .../modules/objfmts/elf/tests/elf_test.sh | 4 + .../modules/objfmts/elf/tests/elfabssect.asm | 12 + .../modules/objfmts/elf/tests/elfabssect.hex | 424 + .../modules/objfmts/elf/tests/elfcond.asm | 4 + .../modules/objfmts/elf/tests/elfcond.hex | 416 + .../modules/objfmts/elf/tests/elfequabs.asm | 10 + .../modules/objfmts/elf/tests/elfequabs.hex | 496 + .../modules/objfmts/elf/tests/elfglobal.asm | 10 + .../modules/objfmts/elf/tests/elfglobal.hex | 408 + .../modules/objfmts/elf/tests/elfglobext.asm | 16 + .../modules/objfmts/elf/tests/elfglobext.hex | 544 + .../modules/objfmts/elf/tests/elfglobext2.asm | 2 + .../modules/objfmts/elf/tests/elfglobext2.hex | 376 + .../modules/objfmts/elf/tests/elfmanysym.asm | 346 + .../modules/objfmts/elf/tests/elfmanysym.hex | 4464 + .../objfmts/elf/tests/elfreloc-ext.asm | 4 + .../objfmts/elf/tests/elfreloc-ext.hex | 464 + .../modules/objfmts/elf/tests/elfreloc.asm | 8 + .../modules/objfmts/elf/tests/elfreloc.hex | 512 + .../objfmts/elf/tests/elfsectalign.asm | 2 + .../objfmts/elf/tests/elfsectalign.hex | 488 + .../modules/objfmts/elf/tests/elfso.asm | 97 + .../modules/objfmts/elf/tests/elfso.hex | 1144 + .../modules/objfmts/elf/tests/elftest.asm | 83 + .../modules/objfmts/elf/tests/elftest.c | 35 + .../modules/objfmts/elf/tests/elftest.hex | 1032 + .../modules/objfmts/elf/tests/elftimes.asm | 12 + .../modules/objfmts/elf/tests/elftimes.hex | 656 + .../modules/objfmts/elf/tests/elftypesize.asm | 33 + .../modules/objfmts/elf/tests/elftypesize.hex | 552 + .../objfmts/elf/tests/elfvisibility.asm | 11 + .../objfmts/elf/tests/elfvisibility.errwarn | 1 + .../objfmts/elf/tests/elfvisibility.hex | 456 + .../objfmts/elf/tests/gas32/Makefile.inc | 7 + .../objfmts/elf/tests/gas32/elf_gas32_got.asm | 13 + .../objfmts/elf/tests/gas32/elf_gas32_got.hex | 544 + .../elf/tests/gas32/elf_gas32_ssym.asm | 14 + .../elf/tests/gas32/elf_gas32_ssym.hex | 592 + .../objfmts/elf/tests/gas32/elf_gas32_test.sh | 3 + .../objfmts/elf/tests/gas64/Makefile.inc | 11 + .../objfmts/elf/tests/gas64/crosssect.asm | 18 + .../objfmts/elf/tests/gas64/crosssect.hex | 832 + .../elf/tests/gas64/elf_gas64_curpos.asm | 27 + .../elf/tests/gas64/elf_gas64_curpos.hex | 1248 + .../elf/tests/gas64/elf_gas64_reloc.asm | 37 + .../elf/tests/gas64/elf_gas64_reloc.hex | 1392 + .../elf/tests/gas64/elf_gas64_ssym.asm | 10 + .../elf/tests/gas64/elf_gas64_ssym.hex | 880 + .../objfmts/elf/tests/gas64/elf_gas64_test.sh | 3 + .../objfmts/elf/tests/gasx32/Makefile.inc | 11 + .../objfmts/elf/tests/gasx32/crosssect.asm | 18 + .../objfmts/elf/tests/gasx32/crosssect.hex | 568 + .../elf/tests/gasx32/elf_gasx32_curpos.asm | 27 + .../elf/tests/gasx32/elf_gasx32_curpos.hex | 848 + .../elf/tests/gasx32/elf_gasx32_reloc.asm | 37 + .../elf/tests/gasx32/elf_gasx32_reloc.hex | 1016 + .../elf/tests/gasx32/elf_gasx32_ssym.asm | 10 + .../elf/tests/gasx32/elf_gasx32_ssym.hex | 592 + .../elf/tests/gasx32/elf_gasx32_test.sh | 3 + .../objfmts/elf/tests/nasm-forceident.asm | 12 + .../objfmts/elf/tests/nasm-forceident.hex | 448 + .../objfmts/elf/tests/nasm-sectname.asm | 4 + .../objfmts/elf/tests/nasm-sectname.hex | 504 + .../objfmts/elf/tests/x32/Makefile.inc | 11 + .../modules/objfmts/elf/tests/x32/elf-rip.asm | 7 + .../modules/objfmts/elf/tests/x32/elf-rip.hex | 496 + .../objfmts/elf/tests/x32/elf_x32_test.sh | 3 + .../objfmts/elf/tests/x32/elfsox32.asm | 90 + .../objfmts/elf/tests/x32/elfsox32.hex | 1176 + .../objfmts/elf/tests/x32/gotpcrel.asm | 6 + .../objfmts/elf/tests/x32/gotpcrel.hex | 496 + .../objfmts/elf/tests/x32/multiplefixup.asm | 8 + .../objfmts/elf/tests/x32/multiplefixup.hex | 680 + .../modules/objfmts/macho/CMakeLists.txt | 5 + .../modules/objfmts/macho/Makefile.inc | 7 + .../modules/objfmts/macho/macho-objfmt.c | 1620 + .../modules/objfmts/macho/tests/Makefile.inc | 9 + .../objfmts/macho/tests/gas32/Makefile.inc | 5 + .../objfmts/macho/tests/gas32/gas-macho32.asm | 79 + .../objfmts/macho/tests/gas32/gas-macho32.hex | 688 + .../macho/tests/gas32/gas_macho32_test.sh | 3 + .../objfmts/macho/tests/gas64/Makefile.inc | 7 + .../macho/tests/gas64/gas-macho64-pic.asm | 32 + .../macho/tests/gas64/gas-macho64-pic.hex | 346 + .../objfmts/macho/tests/gas64/gas-macho64.asm | 103 + .../objfmts/macho/tests/gas64/gas-macho64.hex | 666 + .../macho/tests/gas64/gas_macho64_test.sh | 3 + .../objfmts/macho/tests/nasm32/Makefile.inc | 17 + .../macho/tests/nasm32/macho-reloc.asm | 24 + .../macho/tests/nasm32/macho-reloc.hex | 393 + .../macho/tests/nasm32/macho32-pext.asm | 4 + .../macho/tests/nasm32/macho32-pext.hex | 202 + .../macho/tests/nasm32/macho32-pic.asm | 46 + .../macho/tests/nasm32/macho32-pic.hex | 338 + .../macho/tests/nasm32/macho32-sect.asm | 9 + .../macho/tests/nasm32/macho32-sect.errwarn | 7 + .../macho/tests/nasm32/macho32-sect.hex | 789 + .../macho/tests/nasm32/macho32-size.asm | 60 + .../macho/tests/nasm32/macho32-size.hex | 328 + .../macho/tests/nasm32/macho32_test.sh | 3 + .../objfmts/macho/tests/nasm32/machotest.asm | 87 + .../objfmts/macho/tests/nasm32/machotest.c | 45 + .../objfmts/macho/tests/nasm32/machotest.hex | 692 + .../objfmts/macho/tests/nasm64/Makefile.inc | 10 + .../macho/tests/nasm64/macho-reloc64-err.asm | 32 + .../tests/nasm64/macho-reloc64-err.errwarn | 8 + .../macho/tests/nasm64/macho64_test.sh | 3 + .../macho/tests/nasm64/machotest64.asm | 111 + .../objfmts/macho/tests/nasm64/machotest64.c | 56 + .../macho/tests/nasm64/machotest64.hex | 1058 + .../macho/tests/nasm64/nasm-macho64-pic.asm | 34 + .../macho/tests/nasm64/nasm-macho64-pic.hex | 346 + .../modules/objfmts/rdf/CMakeLists.txt | 3 + .../modules/objfmts/rdf/Makefile.inc | 7 + .../modules/objfmts/rdf/rdf-objfmt.c | 1088 + .../modules/objfmts/rdf/tests/Makefile.inc | 23 + .../modules/objfmts/rdf/tests/rdf_test.sh | 3 + .../modules/objfmts/rdf/tests/rdfabs.asm | 7 + .../modules/objfmts/rdf/tests/rdfabs.errwarn | 2 + .../modules/objfmts/rdf/tests/rdfabs.hex | 24 + .../modules/objfmts/rdf/tests/rdfext.asm | 63 + .../modules/objfmts/rdf/tests/rdfext.hex | 447 + .../modules/objfmts/rdf/tests/rdfseg.asm | 20 + .../modules/objfmts/rdf/tests/rdfseg.hex | 141 + .../modules/objfmts/rdf/tests/rdfseg2.asm | 12 + .../modules/objfmts/rdf/tests/rdfseg2.hex | 49 + .../modules/objfmts/rdf/tests/rdftest1.asm | 54 + .../modules/objfmts/rdf/tests/rdftest1.hex | 301 + .../modules/objfmts/rdf/tests/rdftest2.asm | 33 + .../modules/objfmts/rdf/tests/rdftest2.hex | 252 + .../modules/objfmts/rdf/tests/rdtlib.asm | 48 + .../modules/objfmts/rdf/tests/rdtlib.hex | 128 + .../modules/objfmts/rdf/tests/rdtmain.asm | 47 + .../modules/objfmts/rdf/tests/rdtmain.hex | 134 + .../modules/objfmts/rdf/tests/testlib.asm | 18 + .../modules/objfmts/rdf/tests/testlib.hex | 128 + .../modules/objfmts/win32/Makefile.inc | 7 + .../modules/objfmts/win32/tests/Makefile.inc | 21 + .../modules/objfmts/win32/tests/export.asm | 5 + .../modules/objfmts/win32/tests/export.hex | 273 + .../objfmts/win32/tests/gas/Makefile.inc | 9 + .../objfmts/win32/tests/gas/win32_gas_test.sh | 3 + .../objfmts/win32/tests/gas/win32at.asm | 167 + .../objfmts/win32/tests/gas/win32at.hex | 1653 + .../objfmts/win32/tests/gas/win32def.asm | 7 + .../objfmts/win32/tests/gas/win32def.hex | 172 + .../objfmts/win32/tests/gas/win32secrel32.asm | 80 + .../objfmts/win32/tests/gas/win32secrel32.hex | 778 + .../objfmts/win32/tests/win32-curpos.asm | 27 + .../objfmts/win32/tests/win32-curpos.hex | 498 + .../objfmts/win32/tests/win32-overdef.asm | 2 + .../objfmts/win32/tests/win32-overdef.hex | 154 + .../objfmts/win32/tests/win32-safeseh.asm | 5 + .../objfmts/win32/tests/win32-safeseh.hex | 296 + .../objfmts/win32/tests/win32-safeseh.masm | 10 + .../objfmts/win32/tests/win32-segof.asm | 10 + .../objfmts/win32/tests/win32-segof.hex | 280 + .../modules/objfmts/win32/tests/win32_test.sh | 3 + .../modules/objfmts/win32/tests/win32test.asm | 82 + .../modules/objfmts/win32/tests/win32test.c | 34 + .../modules/objfmts/win32/tests/win32test.hex | 675 + .../modules/objfmts/win64/Makefile.inc | 7 + .../modules/objfmts/win64/tests/Makefile.inc | 37 + .../objfmts/win64/tests/gas/Makefile.inc | 5 + .../objfmts/win64/tests/gas/win64-gas-sce.asm | 11 + .../objfmts/win64/tests/gas/win64-gas-sce.hex | 399 + .../objfmts/win64/tests/gas/win64_gas_test.sh | 3 + .../modules/objfmts/win64/tests/sce1-err.asm | 36 + .../objfmts/win64/tests/sce1-err.errwarn | 8 + .../modules/objfmts/win64/tests/sce1.asm | 44 + .../modules/objfmts/win64/tests/sce1.hex | 430 + .../modules/objfmts/win64/tests/sce2-err.asm | 3 + .../objfmts/win64/tests/sce2-err.errwarn | 2 + .../modules/objfmts/win64/tests/sce2.asm | 29 + .../modules/objfmts/win64/tests/sce2.hex | 717 + .../modules/objfmts/win64/tests/sce3.asm | 73 + .../modules/objfmts/win64/tests/sce3.hex | 859 + .../modules/objfmts/win64/tests/sce3.masm | 74 + .../modules/objfmts/win64/tests/sce4-err.asm | 24 + .../objfmts/win64/tests/sce4-err.errwarn | 9 + .../modules/objfmts/win64/tests/sce4.asm | 30 + .../modules/objfmts/win64/tests/sce4.hex | 652 + .../modules/objfmts/win64/tests/sce4.masm | 36 + .../modules/objfmts/win64/tests/win64-abs.asm | 1 + .../modules/objfmts/win64/tests/win64-abs.hex | 171 + .../objfmts/win64/tests/win64-curpos.asm | 27 + .../objfmts/win64/tests/win64-curpos.hex | 499 + .../objfmts/win64/tests/win64-dataref.asm | 151 + .../objfmts/win64/tests/win64-dataref.hex | 2479 + .../objfmts/win64/tests/win64-dataref.masm | 139 + .../objfmts/win64/tests/win64-dataref2.asm | 17 + .../objfmts/win64/tests/win64-dataref2.hex | 343 + .../objfmts/win64/tests/win64-dataref2.masm | 17 + .../objfmts/win64/tests/win64-function.asm | 4 + .../objfmts/win64/tests/win64-function.hex | 154 + .../objfmts/win64/tests/win64-imagebase.asm | 17 + .../objfmts/win64/tests/win64-imagebase.hex | 512 + .../modules/objfmts/win64/tests/win64_test.sh | 3 + .../modules/objfmts/xdf/CMakeLists.txt | 3 + .../modules/objfmts/xdf/Makefile.inc | 7 + .../modules/objfmts/xdf/tests/Makefile.inc | 18 + .../modules/objfmts/xdf/tests/xdf-overdef.asm | 2 + .../modules/objfmts/xdf/tests/xdf-overdef.hex | 78 + .../modules/objfmts/xdf/tests/xdf_test.sh | 3 + .../modules/objfmts/xdf/tests/xdflong.asm | 231 + .../modules/objfmts/xdf/tests/xdflong.errwarn | 1 + .../modules/objfmts/xdf/tests/xdflong.hex | 47856 +++++ .../modules/objfmts/xdf/tests/xdfother.asm | 24 + .../modules/objfmts/xdf/tests/xdfother.hex | 578 + .../modules/objfmts/xdf/tests/xdfprotect.asm | 178 + .../modules/objfmts/xdf/tests/xdfprotect.hex | 1806 + .../modules/objfmts/xdf/tests/xdfsect-err.asm | 18 + .../objfmts/xdf/tests/xdfsect-err.errwarn | 20 + .../modules/objfmts/xdf/tests/xdfsect.asm | 13 + .../modules/objfmts/xdf/tests/xdfsect.hex | 836 + .../modules/objfmts/xdf/tests/xdfvirtual.asm | 4 + .../modules/objfmts/xdf/tests/xdfvirtual.hex | 323 + .../modules/objfmts/xdf/xdf-objfmt.c | 842 + .../modules/objfmts/yasm_objfmts.xml | 168 + .../yasm-1.3.0/modules/parsers/CMakeLists.txt | 2 + .../yasm-1.3.0/modules/parsers/Makefile.inc | 15 + .../modules/parsers/gas/CMakeLists.txt | 12 + .../modules/parsers/gas/Makefile.inc | 19 + .../modules/parsers/gas/gas-parse-intel.c | 90 + .../modules/parsers/gas/gas-parse.c | 1766 + .../modules/parsers/gas/gas-parser.c | 133 + .../modules/parsers/gas/gas-parser.h | 163 + .../modules/parsers/gas/gas-token.re | 559 + .../modules/parsers/gas/tests/Makefile.inc | 48 + .../parsers/gas/tests/bin/Makefile.inc | 32 + .../parsers/gas/tests/bin/gas-comment.asm | 25 + .../parsers/gas/tests/bin/gas-comment.errwarn | 1 + .../parsers/gas/tests/bin/gas-comment.hex | 6 + .../tests/bin/gas-intel_syntax-noprefix.asm | 19 + .../tests/bin/gas-intel_syntax-noprefix.hex | 58 + .../parsers/gas/tests/bin/gas-llabel.asm | 29 + .../parsers/gas/tests/bin/gas-llabel.hex | 512 + .../parsers/gas/tests/bin/gas-macro.asm | 25 + .../parsers/gas/tests/bin/gas-macro.hex | 6 + .../modules/parsers/gas/tests/bin/gas-set.asm | 34 + .../modules/parsers/gas/tests/bin/gas-set.hex | 12 + .../modules/parsers/gas/tests/bin/gas-str.asm | 1 + .../modules/parsers/gas/tests/bin/gas-str.hex | 3 + .../parsers/gas/tests/bin/gas_bin_test.sh | 3 + .../parsers/gas/tests/bin/rept-err.asm | 4 + .../parsers/gas/tests/bin/rept-err.errwarn | 1 + .../parsers/gas/tests/bin/reptempty.asm | 4 + .../parsers/gas/tests/bin/reptempty.hex | 2 + .../parsers/gas/tests/bin/reptlong.asm | 156 + .../parsers/gas/tests/bin/reptlong.hex | 7 + .../parsers/gas/tests/bin/reptnested.asm | 7 + .../parsers/gas/tests/bin/reptnested.hex | 10 + .../parsers/gas/tests/bin/reptsimple.asm | 5 + .../parsers/gas/tests/bin/reptsimple.hex | 7 + .../parsers/gas/tests/bin/reptwarn.asm | 11 + .../parsers/gas/tests/bin/reptwarn.errwarn | 9 + .../parsers/gas/tests/bin/reptwarn.hex | 9 + .../parsers/gas/tests/bin/reptzero.asm | 6 + .../parsers/gas/tests/bin/reptzero.hex | 2 + .../modules/parsers/gas/tests/dataref-imm.asm | 5 + .../modules/parsers/gas/tests/dataref-imm.hex | 592 + .../modules/parsers/gas/tests/datavis.asm | 39 + .../modules/parsers/gas/tests/datavis.errwarn | 1 + .../modules/parsers/gas/tests/datavis.hex | 920 + .../modules/parsers/gas/tests/datavis2.asm | 13 + .../modules/parsers/gas/tests/datavis2.hex | 712 + .../modules/parsers/gas/tests/execsect.asm | 4 + .../modules/parsers/gas/tests/execsect.hex | 432 + .../modules/parsers/gas/tests/gas-fill.asm | 6 + .../modules/parsers/gas/tests/gas-fill.hex | 424 + .../modules/parsers/gas/tests/gas-float.asm | 2 + .../modules/parsers/gas/tests/gas-float.hex | 376 + .../parsers/gas/tests/gas-instlabel.asm | 6 + .../parsers/gas/tests/gas-instlabel.hex | 376 + .../parsers/gas/tests/gas-line-err.asm | 11 + .../parsers/gas/tests/gas-line-err.errwarn | 6 + .../parsers/gas/tests/gas-line2-err.asm | 5 + .../parsers/gas/tests/gas-line2-err.errwarn | 3 + .../modules/parsers/gas/tests/gas-push.asm | 3 + .../modules/parsers/gas/tests/gas-push.hex | 360 + .../parsers/gas/tests/gas-segprefix.asm | 2 + .../parsers/gas/tests/gas-segprefix.hex | 360 + .../modules/parsers/gas/tests/gas-semi.asm | 5 + .../modules/parsers/gas/tests/gas-semi.hex | 408 + .../modules/parsers/gas/tests/gas_test.sh | 3 + .../parsers/gas/tests/gassectalign.asm | 7 + .../parsers/gas/tests/gassectalign.hex | 472 + .../modules/parsers/gas/tests/jmpcall.asm | 13 + .../modules/parsers/gas/tests/jmpcall.errwarn | 4 + .../modules/parsers/gas/tests/jmpcall.hex | 496 + .../modules/parsers/gas/tests/leb128.asm | 18 + .../modules/parsers/gas/tests/leb128.hex | 448 + .../modules/parsers/gas/tests/localcomm.asm | 18 + .../modules/parsers/gas/tests/localcomm.hex | 544 + .../parsers/gas/tests/reggroup-err.asm | 5 + .../parsers/gas/tests/reggroup-err.errwarn | 1 + .../modules/parsers/gas/tests/reggroup.asm | 5 + .../modules/parsers/gas/tests/reggroup.hex | 360 + .../modules/parsers/gas/tests/strzero.asm | 1 + .../modules/parsers/gas/tests/strzero.hex | 360 + .../modules/parsers/gas/tests/varinsn.asm | 1 + .../modules/parsers/gas/tests/varinsn.hex | 448 + .../modules/parsers/nasm/CMakeLists.txt | 21 + .../modules/parsers/nasm/Makefile.inc | 29 + .../modules/parsers/nasm/nasm-parse.c | 1680 + .../modules/parsers/nasm/nasm-parser-struct.h | 85 + .../modules/parsers/nasm/nasm-parser.c | 140 + .../modules/parsers/nasm/nasm-parser.h | 123 + .../modules/parsers/nasm/nasm-std.mac | 109 + .../modules/parsers/nasm/nasm-token.re | 795 + .../modules/parsers/nasm/tests/Makefile.inc | 51 + .../modules/parsers/nasm/tests/alignnop16.asm | 4 + .../modules/parsers/nasm/tests/alignnop16.hex | 17 + .../modules/parsers/nasm/tests/alignnop32.asm | 4 + .../modules/parsers/nasm/tests/alignnop32.hex | 17 + .../parsers/nasm/tests/charconstmath.asm | 1 + .../parsers/nasm/tests/charconstmath.hex | 7 + .../modules/parsers/nasm/tests/dirwarning.asm | 1 + .../parsers/nasm/tests/dirwarning.errwarn | 1 + .../modules/parsers/nasm/tests/dirwarning.hex | 0 .../modules/parsers/nasm/tests/dy.asm | 5 + .../modules/parsers/nasm/tests/dy.hex | 34 + .../modules/parsers/nasm/tests/endcomma.asm | 2 + .../modules/parsers/nasm/tests/endcomma.hex | 4 + .../modules/parsers/nasm/tests/equcolon.asm | 3 + .../modules/parsers/nasm/tests/equcolon.hex | 2 + .../modules/parsers/nasm/tests/equlocal.asm | 7 + .../modules/parsers/nasm/tests/equlocal.hex | 3 + .../modules/parsers/nasm/tests/hexconst.asm | 2 + .../modules/parsers/nasm/tests/hexconst.hex | 8 + .../modules/parsers/nasm/tests/locallabel.asm | 21 + .../modules/parsers/nasm/tests/locallabel.hex | 16 + .../parsers/nasm/tests/locallabel2.asm | 4 + .../parsers/nasm/tests/locallabel2.hex | 2 + .../modules/parsers/nasm/tests/long.asm | 1 + .../modules/parsers/nasm/tests/long.hex | 8 + .../parsers/nasm/tests/nasm-prefix.asm | 5 + .../parsers/nasm/tests/nasm-prefix.hex | 6 + .../modules/parsers/nasm/tests/nasm_test.sh | 3 + .../modules/parsers/nasm/tests/newsect.asm | 10 + .../modules/parsers/nasm/tests/newsect.hex | 4 + .../parsers/nasm/tests/orphannowarn.asm | 12 + .../parsers/nasm/tests/orphannowarn.hex | 8 + .../parsers/nasm/tests/prevlocalwarn.asm | 5 + .../parsers/nasm/tests/prevlocalwarn.errwarn | 1 + .../parsers/nasm/tests/prevlocalwarn.hex | 2 + .../modules/parsers/nasm/tests/strucalign.asm | 14 + .../modules/parsers/nasm/tests/strucalign.hex | 20 + .../modules/parsers/nasm/tests/strucbase.asm | 11 + .../modules/parsers/nasm/tests/strucbase.hex | 4 + .../modules/parsers/nasm/tests/struczero.asm | 7 + .../modules/parsers/nasm/tests/struczero.hex | 5 + .../modules/parsers/nasm/tests/syntax-err.asm | 17 + .../parsers/nasm/tests/syntax-err.errwarn | 16 + .../modules/parsers/nasm/tests/uscore.asm | 10 + .../modules/parsers/nasm/tests/uscore.hex | 32 + .../parsers/nasm/tests/worphan/Makefile.inc | 6 + .../nasm/tests/worphan/nasm_worphan_test.sh | 3 + .../parsers/nasm/tests/worphan/orphanwarn.asm | 12 + .../nasm/tests/worphan/orphanwarn.errwarn | 2 + .../parsers/nasm/tests/worphan/orphanwarn.hex | 8 + .../modules/parsers/tasm/Makefile.inc | 3 + .../modules/parsers/tasm/tests/Makefile.inc | 43 + .../modules/parsers/tasm/tests/array.asm | 2 + .../modules/parsers/tasm/tests/array.hex | 6 + .../modules/parsers/tasm/tests/case.asm | 3 + .../modules/parsers/tasm/tests/case.hex | 5 + .../modules/parsers/tasm/tests/charstr.asm | 1 + .../modules/parsers/tasm/tests/charstr.hex | 6 + .../modules/parsers/tasm/tests/dup.asm | 1 + .../modules/parsers/tasm/tests/dup.hex | 10 + .../modules/parsers/tasm/tests/equal.asm | 1 + .../modules/parsers/tasm/tests/equal.hex | 0 .../parsers/tasm/tests/exe/Makefile.inc | 6 + .../modules/parsers/tasm/tests/exe/exe.asm | 4 + .../modules/parsers/tasm/tests/exe/exe.hex | 515 + .../parsers/tasm/tests/exe/tasm_exe_test.sh | 3 + .../modules/parsers/tasm/tests/expr.asm | 2 + .../modules/parsers/tasm/tests/expr.hex | 2 + .../modules/parsers/tasm/tests/irp.asm | 3 + .../modules/parsers/tasm/tests/irp.hex | 9 + .../modules/parsers/tasm/tests/label.asm | 2 + .../modules/parsers/tasm/tests/label.hex | 3 + .../modules/parsers/tasm/tests/les.asm | 2 + .../modules/parsers/tasm/tests/les.hex | 5 + .../modules/parsers/tasm/tests/lidt.asm | 3 + .../modules/parsers/tasm/tests/lidt.hex | 11 + .../modules/parsers/tasm/tests/macro.asm | 6 + .../modules/parsers/tasm/tests/macro.hex | 6 + .../modules/parsers/tasm/tests/offset.asm | 3 + .../modules/parsers/tasm/tests/offset.hex | 7 + .../modules/parsers/tasm/tests/quote.asm | 2 + .../modules/parsers/tasm/tests/quote.hex | 6 + .../modules/parsers/tasm/tests/res.asm | 2 + .../modules/parsers/tasm/tests/res.errwarn | 2 + .../modules/parsers/tasm/tests/res.hex | 3 + .../modules/parsers/tasm/tests/segment.asm | 8 + .../modules/parsers/tasm/tests/segment.hex | 7 + .../modules/parsers/tasm/tests/size.asm | 2 + .../modules/parsers/tasm/tests/size.hex | 6 + .../modules/parsers/tasm/tests/struc.asm | 8 + .../modules/parsers/tasm/tests/struc.errwarn | 1 + .../modules/parsers/tasm/tests/struc.hex | 5 + .../modules/parsers/tasm/tests/tasm_test.sh | 3 + .../modules/parsers/yasm_parsers.xml | 112 + .../modules/preprocs/CMakeLists.txt | 4 + .../yasm-1.3.0/modules/preprocs/Makefile.inc | 11 + .../modules/preprocs/cpp/CMakeLists.txt | 3 + .../modules/preprocs/cpp/Makefile.inc | 6 + .../modules/preprocs/cpp/cpp-preproc.c | 402 + .../modules/preprocs/gas/CMakeLists.txt | 4 + .../modules/preprocs/gas/Makefile.inc | 9 + .../modules/preprocs/gas/gas-eval.c | 444 + .../modules/preprocs/gas/gas-eval.h | 120 + .../modules/preprocs/gas/gas-preproc.c | 1409 + .../modules/preprocs/gas/tests/Makefile.inc | 5 + .../modules/preprocs/nasm/CMakeLists.txt | 24 + .../modules/preprocs/nasm/Makefile.inc | 38 + .../modules/preprocs/nasm/genversion.c | 81 + .../modules/preprocs/nasm/nasm-eval.c | 441 + .../modules/preprocs/nasm/nasm-eval.h | 18 + .../modules/preprocs/nasm/nasm-pp.c | 5317 + .../modules/preprocs/nasm/nasm-pp.h | 22 + .../modules/preprocs/nasm/nasm-preproc.c | 342 + .../yasm-1.3.0/modules/preprocs/nasm/nasm.h | 283 + .../modules/preprocs/nasm/nasmlib.c | 201 + .../modules/preprocs/nasm/nasmlib.h | 60 + .../modules/preprocs/nasm/tests/16args.asm | 27 + .../modules/preprocs/nasm/tests/16args.hex | 96 + .../modules/preprocs/nasm/tests/Makefile.inc | 24 + .../preprocs/nasm/tests/ifcritical-err.asm | 7 + .../nasm/tests/ifcritical-err.errwarn | 1 + .../modules/preprocs/nasm/tests/longline.asm | 2 + .../modules/preprocs/nasm/tests/longline.hex | 64 + .../preprocs/nasm/tests/macroeof-err.asm | 1 + .../preprocs/nasm/tests/macroeof-err.errwarn | 1 + .../preprocs/nasm/tests/nasmpp-bigint.asm | 3 + .../preprocs/nasm/tests/nasmpp-bigint.hex | 1 + .../preprocs/nasm/tests/nasmpp-decimal.asm | 14 + .../preprocs/nasm/tests/nasmpp-decimal.hex | 24 + .../preprocs/nasm/tests/nasmpp-nested.asm | 29 + .../preprocs/nasm/tests/nasmpp-nested.errwarn | 3 + .../preprocs/nasm/tests/nasmpp-nested.hex | 0 .../preprocs/nasm/tests/nasmpp_test.sh | 3 + .../preprocs/nasm/tests/noinclude-err.asm | 1 + .../preprocs/nasm/tests/noinclude-err.errwarn | 1 + .../modules/preprocs/nasm/tests/orgsect.asm | 7 + .../modules/preprocs/nasm/tests/orgsect.hex | 3 + .../modules/preprocs/nasm/tests/scope-err.asm | 13 + .../preprocs/nasm/tests/scope-err.errwarn | 6 + .../modules/preprocs/raw/CMakeLists.txt | 3 + .../modules/preprocs/raw/Makefile.inc | 7 + .../modules/preprocs/raw/raw-preproc.c | 169 + .../modules/preprocs/raw/tests/Makefile.inc | 5 + .../modules/preprocs/raw/tests/longline.asm | 1 + .../modules/preprocs/raw/tests/longline.hex | 0 .../modules/preprocs/raw/tests/rawpp_test.sh | 3 + .../modules/preprocs/tasm/Makefile.inc | 3 + .../modules/preprocs/tasm/tests/Makefile.inc | 7 + .../tasm/tests/tasm-assume-comment.asm | 3 + .../tasm/tests/tasm-assume-comment.hex | 0 .../tasm/tests/tasm-comment-instr.asm | 1 + .../tasm/tests/tasm-comment-instr.hex | 11 + .../preprocs/tasm/tests/tasmpp_test.sh | 3 + third-party/yasm/yasm-1.3.0/out_test.sh | 104 + third-party/yasm/yasm-1.3.0/plugins/README | 22 + .../yasm-1.3.0/plugins/dbg/CMakeLists.txt | 56 + .../yasm/yasm-1.3.0/plugins/dbg/README | 21 + .../yasm/yasm-1.3.0/plugins/dbg/dbg-objfmt.c | 175 + .../yasm/yasm-1.3.0/plugins/dbg/init_plugin.c | 13 + .../yasm-1.3.0/plugins/x86/CMakeLists.txt | 145 + .../yasm/yasm-1.3.0/plugins/x86/README | 19 + .../yasm/yasm-1.3.0/plugins/x86/init_plugin.c | 13 + third-party/yasm/yasm-1.3.0/po/ChangeLog | 9 + third-party/yasm/yasm-1.3.0/po/Makefile.in.in | 454 + third-party/yasm/yasm-1.3.0/po/Makevars | 53 + third-party/yasm/yasm-1.3.0/po/POTFILES.in | 60 + third-party/yasm/yasm-1.3.0/po/Rules-quot | 47 + third-party/yasm/yasm-1.3.0/po/boldquot.sed | 10 + .../yasm/yasm-1.3.0/po/en@boldquot.header | 25 + third-party/yasm/yasm-1.3.0/po/en@quot.header | 22 + .../yasm/yasm-1.3.0/po/insert-header.sin | 23 + third-party/yasm/yasm-1.3.0/po/quot.sed | 6 + .../yasm/yasm-1.3.0/po/remove-potcdate.sin | 19 + third-party/yasm/yasm-1.3.0/po/stamp-po | 1 + third-party/yasm/yasm-1.3.0/po/yasm.pot | 2425 + third-party/yasm/yasm-1.3.0/splint.sh | 87 + third-party/yasm/yasm-1.3.0/test_hd.c | 59 + .../yasm/yasm-1.3.0/tools/CMakeLists.txt | 3 + .../yasm/yasm-1.3.0/tools/Makefile.inc | 9 + .../yasm-1.3.0/tools/genmacro/CMakeLists.txt | 3 + .../yasm-1.3.0/tools/genmacro/Makefile.inc | 14 + .../yasm/yasm-1.3.0/tools/genmacro/genmacro.c | 134 + .../yasm-1.3.0/tools/genperf/CMakeLists.txt | 8 + .../yasm-1.3.0/tools/genperf/Makefile.inc | 42 + .../yasm/yasm-1.3.0/tools/genperf/genperf.c | 540 + .../yasm/yasm-1.3.0/tools/genperf/perfect.c | 1179 + .../yasm/yasm-1.3.0/tools/genperf/perfect.h | 132 + .../yasm/yasm-1.3.0/tools/genperf/standard.h | 35 + .../yasm-1.3.0/tools/python-yasm/Makefile.inc | 79 + .../yasm-1.3.0/tools/python-yasm/bytecode.pxi | 107 + .../yasm-1.3.0/tools/python-yasm/errwarn.pxi | 73 + .../yasm-1.3.0/tools/python-yasm/expr.pxi | 136 + .../yasm-1.3.0/tools/python-yasm/floatnum.pxi | 49 + .../yasm-1.3.0/tools/python-yasm/intnum.pxi | 170 + .../tools/python-yasm/pyxelator/cparse.py | 819 + .../tools/python-yasm/pyxelator/genpyx.py | 530 + .../tools/python-yasm/pyxelator/ir.py | 1163 + .../tools/python-yasm/pyxelator/lexer.py | 248 + .../tools/python-yasm/pyxelator/node.py | 301 + .../tools/python-yasm/pyxelator/parse_core.py | 106 + .../tools/python-yasm/pyxelator/work_unit.py | 192 + .../tools/python-yasm/pyxelator/wrap_yasm.py | 57 + .../yasm-1.3.0/tools/python-yasm/setup.py | 88 + .../yasm-1.3.0/tools/python-yasm/symrec.pxi | 285 + .../tools/python-yasm/tests/Makefile.inc | 13 + .../tools/python-yasm/tests/__init__.py | 69 + .../tools/python-yasm/tests/python_test.sh | 19 + .../tools/python-yasm/tests/test_bytecode.py | 3 + .../tools/python-yasm/tests/test_expr.py | 18 + .../tools/python-yasm/tests/test_intnum.py | 77 + .../tools/python-yasm/tests/test_symrec.py | 80 + .../yasm-1.3.0/tools/python-yasm/value.pxi | 56 + .../yasm-1.3.0/tools/python-yasm/yasm.pyx | 137 + .../yasm/yasm-1.3.0/tools/re2c/CHANGELOG | 22 + .../yasm/yasm-1.3.0/tools/re2c/CMakeLists.txt | 11 + .../yasm/yasm-1.3.0/tools/re2c/Makefile.inc | 93 + .../yasm/yasm-1.3.0/tools/re2c/NO_WARRANTY | 2 + third-party/yasm/yasm-1.3.0/tools/re2c/README | 153 + .../yasm/yasm-1.3.0/tools/re2c/actions.c | 692 + .../yasm/yasm-1.3.0/tools/re2c/basics.h | 14 + .../yasm-1.3.0/tools/re2c/bootstrap/scanner.c | 748 + third-party/yasm/yasm-1.3.0/tools/re2c/code.c | 969 + third-party/yasm/yasm-1.3.0/tools/re2c/dfa.c | 253 + third-party/yasm/yasm-1.3.0/tools/re2c/dfa.h | 173 + .../yasm-1.3.0/tools/re2c/doc/loplas.ps.gz | Bin 0 -> 69080 bytes .../yasm/yasm-1.3.0/tools/re2c/doc/sample.bib | 48 + .../yasm-1.3.0/tools/re2c/examples/basemmap.c | 26 + .../yasm/yasm-1.3.0/tools/re2c/examples/c.re | 272 + .../yasm-1.3.0/tools/re2c/examples/cmmap.re | 267 + .../yasm-1.3.0/tools/re2c/examples/cnokw.re | 239 + .../yasm-1.3.0/tools/re2c/examples/cunroll.re | 258 + .../yasm-1.3.0/tools/re2c/examples/modula.re | 202 + .../tools/re2c/examples/repeater.re | 42 + .../tools/re2c/examples/rexx/README | 1 + .../tools/re2c/examples/rexx/rexx.l | 319 + .../tools/re2c/examples/rexx/scanio.c | 41 + .../yasm-1.3.0/tools/re2c/examples/sample.re | 7 + .../yasm-1.3.0/tools/re2c/examples/simple.re | 13 + .../yasm/yasm-1.3.0/tools/re2c/globals.h | 26 + third-party/yasm/yasm-1.3.0/tools/re2c/ins.h | 40 + third-party/yasm/yasm-1.3.0/tools/re2c/main.c | 196 + .../yasm/yasm-1.3.0/tools/re2c/mbo_getopt.c | 194 + .../yasm/yasm-1.3.0/tools/re2c/mbo_getopt.h | 22 + .../yasm/yasm-1.3.0/tools/re2c/parse.h | 29 + .../yasm/yasm-1.3.0/tools/re2c/parser.c | 249 + .../yasm/yasm-1.3.0/tools/re2c/parser.h | 33 + third-party/yasm/yasm-1.3.0/tools/re2c/re.h | 191 + third-party/yasm/yasm-1.3.0/tools/re2c/re2c.1 | 536 + .../yasm/yasm-1.3.0/tools/re2c/scanner.c | 748 + .../yasm/yasm-1.3.0/tools/re2c/scanner.h | 44 + .../yasm/yasm-1.3.0/tools/re2c/scanner.re | 241 + .../yasm/yasm-1.3.0/tools/re2c/substr.c | 65 + .../yasm/yasm-1.3.0/tools/re2c/substr.h | 89 + .../yasm/yasm-1.3.0/tools/re2c/token.h | 30 + .../yasm/yasm-1.3.0/tools/re2c/translate.c | 61 + third-party/yasm/yasm-1.3.0/util.h | 159 + third-party/yasm/yasm-1.3.0/version | 1 + third-party/yasm/yasm-1.3.0/x86insn_gas.gperf | 2081 + .../yasm/yasm-1.3.0/x86insn_nasm.gperf | 1465 + third-party/yasm/yasm-1.3.0/x86insns.c | 2423 + third-party/yasm/yasm-1.3.0/yasm.1 | 349 + third-party/yasm/yasm-1.3.0/yasm_arch.7 | 860 + third-party/yasm/yasm-1.3.0/yasm_dbgfmts.7 | 63 + third-party/yasm/yasm-1.3.0/yasm_objfmts.7 | 102 + third-party/yasm/yasm-1.3.0/yasm_parsers.7 | 58 + 1448 files changed, 835035 insertions(+), 140 deletions(-) create mode 100644 .sourcekit-lsp/config.json create mode 100644 BUILD.bazel create mode 160000 build-system/bazel-rules/sourcekit-bazel-bsp create mode 100755 scripts/Telegram create mode 100755 scripts/launch_and_debug.sh delete mode 100644 third-party/yasm/yasm-1.3.0.tar.gz create mode 100644 third-party/yasm/yasm-1.3.0/ABOUT-NLS create mode 100644 third-party/yasm/yasm-1.3.0/AUTHORS create mode 100644 third-party/yasm/yasm-1.3.0/Artistic.txt create mode 100644 third-party/yasm/yasm-1.3.0/BSD.txt create mode 100644 third-party/yasm/yasm-1.3.0/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/COPYING create mode 100644 third-party/yasm/yasm-1.3.0/ChangeLog create mode 100644 third-party/yasm/yasm-1.3.0/ConfigureChecks.cmake create mode 100644 third-party/yasm/yasm-1.3.0/GNU_GPL-2.0 create mode 100644 third-party/yasm/yasm-1.3.0/GNU_LGPL-2.0 create mode 100644 third-party/yasm/yasm-1.3.0/INSTALL create mode 100644 third-party/yasm/yasm-1.3.0/Makefile.am create mode 100644 third-party/yasm/yasm-1.3.0/Makefile.in create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/Makefile.dj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/Makefile.flat create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/dj/YASM-VERSION.h create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/dj/config.h create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/dj/libyasm-stdint.h create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/YASM-VERSION.h create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/config.h create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/crt_secure_no_deprecate.props create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/crt_secure_no_deprecate.vsprops create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmacro/genmacro.vcxproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmacro/genmacro.vcxproj.filters create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmacro/run.bat create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmodule/genmodule.vcxproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmodule/genmodule.vcxproj.filters create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmodule/run.bat create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genperf/genperf.vcxproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genperf/genperf.vcxproj.filters create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genperf/run.bat create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genstring/genstring.vcxproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genstring/genstring.vcxproj.filters create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genstring/run.bat create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genversion/genversion.vcxproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genversion/genversion.vcxproj.filters create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genversion/run.bat create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/libyasm-stdint.h create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/libyasm/libyasm.vcxproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/libyasm/libyasm.vcxproj.filters create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/modules/modules.vcxproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/modules/modules.vcxproj.filters create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/out_copy_rename.bat create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/re2c/re2c.vcxproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/re2c/re2c.vcxproj.filters create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/re2c/run.bat create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/readme.vc10.txt create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/vsyasm.props create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/vsyasm.targets create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/vsyasm.vcxproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/vsyasm.xml create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/yasm.sln create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/yasm.vcxproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/yasm.vcxproj.filters create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc10/ytasm.vcxproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc12/YASM-VERSION.h create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc12/config.h create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc12/crt_secure_no_deprecate.props create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc12/crt_secure_no_deprecate.vsprops create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc12/libyasm/libyasm.vcxproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc12/libyasm/libyasm.vcxproj.filters create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc12/modules/modules.vcxproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc12/modules/modules.vcxproj.filters create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc12/out_copy_rename.bat create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc12/readme.vc12.txt create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc12/vsyasm.props create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc12/vsyasm.targets create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc12/vsyasm.vcxproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc12/vsyasm.xml create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc12/yasm.sln create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc12/yasm.vcxproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc12/yasm.vcxproj.filters create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc12/ytasm.vcxproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/YASM-VERSION.h create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/config.h create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/crt_secure_no_deprecate.vsprops create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genmacro/genmacro.vcproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genmacro/run.bat create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genmodule/genmodule.vcproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genmodule/run.bat create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genperf/genperf.vcproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genperf/run.bat create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genstring/genstring.vcproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genstring/run.bat create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genversion/genversion.vcproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genversion/run.bat create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/libyasm-stdint.h create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/libyasm/libyasm.vcproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/modules/modules.vcproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/re2c/re2c.vcproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/re2c/run.bat create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/readme.vc9.txt create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/vc98_swap.py create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/vsyasm.vcproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/yasm.rules create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/yasm.sln create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/yasm.vcproj create mode 100644 third-party/yasm/yasm-1.3.0/Mkfiles/vc9/ytasm.vcproj create mode 100644 third-party/yasm/yasm-1.3.0/NEWS create mode 100644 third-party/yasm/yasm-1.3.0/README create mode 100755 third-party/yasm/yasm-1.3.0/YASM-VERSION-GEN.sh create mode 100644 third-party/yasm/yasm-1.3.0/aclocal.m4 create mode 100644 third-party/yasm/yasm-1.3.0/cmake/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/cmake/modules/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/cmake/modules/DummyCFile.c create mode 100644 third-party/yasm/yasm-1.3.0/cmake/modules/VersionGen.cmake create mode 100644 third-party/yasm/yasm-1.3.0/cmake/modules/YasmMacros.cmake create mode 100644 third-party/yasm/yasm-1.3.0/config.h.cmake create mode 100644 third-party/yasm/yasm-1.3.0/config.h.in create mode 100755 third-party/yasm/yasm-1.3.0/config/compile create mode 100644 third-party/yasm/yasm-1.3.0/config/config.guess create mode 100755 third-party/yasm/yasm-1.3.0/config/config.rpath create mode 100644 third-party/yasm/yasm-1.3.0/config/config.sub create mode 100755 third-party/yasm/yasm-1.3.0/config/depcomp create mode 100755 third-party/yasm/yasm-1.3.0/config/install-sh create mode 100755 third-party/yasm/yasm-1.3.0/config/missing create mode 100755 third-party/yasm/yasm-1.3.0/config/mkinstalldirs create mode 100755 third-party/yasm/yasm-1.3.0/config/test-driver create mode 100755 third-party/yasm/yasm-1.3.0/configure create mode 100644 third-party/yasm/yasm-1.3.0/configure.ac create mode 100644 third-party/yasm/yasm-1.3.0/frontends/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/frontends/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/frontends/tasm/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/frontends/tasm/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/frontends/tasm/tasm-options.c create mode 100644 third-party/yasm/yasm-1.3.0/frontends/tasm/tasm-options.h create mode 100644 third-party/yasm/yasm-1.3.0/frontends/tasm/tasm.c create mode 100644 third-party/yasm/yasm-1.3.0/frontends/vsyasm/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/frontends/vsyasm/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/frontends/vsyasm/vsyasm.c create mode 100644 third-party/yasm/yasm-1.3.0/frontends/yasm/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/frontends/yasm/Makefile.inc create mode 100755 third-party/yasm/yasm-1.3.0/frontends/yasm/genstring.py create mode 100644 third-party/yasm/yasm-1.3.0/frontends/yasm/yasm-options.c create mode 100644 third-party/yasm/yasm-1.3.0/frontends/yasm/yasm-options.h create mode 100644 third-party/yasm/yasm-1.3.0/frontends/yasm/yasm-plugin.c create mode 100644 third-party/yasm/yasm-1.3.0/frontends/yasm/yasm-plugin.h create mode 100644 third-party/yasm/yasm-1.3.0/frontends/yasm/yasm.c create mode 100644 third-party/yasm/yasm-1.3.0/frontends/yasm/yasm.xml create mode 100644 third-party/yasm/yasm-1.3.0/genstring.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm-stdint.h.cmake create mode 100644 third-party/yasm/yasm-1.3.0/libyasm.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/arch.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/assocdat.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/assocdat.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/bc-align.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/bc-data.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/bc-incbin.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/bc-org.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/bc-reserve.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/bitvect.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/bitvect.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/bytecode.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/bytecode.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/cmake-module.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/compat-queue.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/coretype.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/dbgfmt.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/errwarn.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/errwarn.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/expr.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/expr.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/file.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/file.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/floatnum.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/floatnum.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/genmodule.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/hamt.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/hamt.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/insn.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/insn.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/intnum.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/intnum.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/inttree.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/inttree.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/linemap.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/linemap.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/listfmt.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/md5.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/md5.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/mergesort.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/module.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/module.in create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/objfmt.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/parser.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/phash.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/phash.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/preproc.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/section.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/section.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/strcasecmp.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/strsep.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/symrec.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/symrec.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/1shl0.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/1shl0.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/absloop-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/absloop-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/bitvect_test.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/charconst64.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/charconst64.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/combpath_test.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/data-rawvalue.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/data-rawvalue.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/duplabel-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/duplabel-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/emptydata.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/emptydata.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/equ-expand.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/equ-expand.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/expr-fold-level.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/expr-fold-level.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/expr-simplify-identity.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/expr-simplify-identity.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/expr-wide-ident.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/expr-wide-ident.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/externdef.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/externdef.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/externdef.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/floatnum_test.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/incbin.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/incbin.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/jmpsize1-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/jmpsize1-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/jmpsize1.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/jmpsize1.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/leb128_test.c create mode 100755 third-party/yasm/yasm-1.3.0/libyasm/tests/libyasm_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align1.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align1.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align2.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align2.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align3.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align3.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular1-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular1-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular2-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular2-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular3-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular3-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-gvmat64.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-gvmat64.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-immexpand.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-immexpand.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-immnoexpand.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-immnoexpand.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-oldalign.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-oldalign.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-struc.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/opt-struc.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/reserve-err1.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/reserve-err1.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/reserve-err2.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/reserve-err2.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/splitpath_test.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/strucsize.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/strucsize.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/times-res.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/times-res.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/times-res.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/times0.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/times0.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/timesfwd.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/timesfwd.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/timesover-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/timesover-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/timesunder.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/timesunder.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/unary.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/unary.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/uncstring_test.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/value-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/value-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/value-mask.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/value-mask.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/value-mask.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/value-samesym.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/value-samesym.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/value-samesym.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/value-shr-symexpr.asm create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/tests/value-shr-symexpr.hex create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/valparam.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/valparam.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/value.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/value.h create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/xmalloc.c create mode 100644 third-party/yasm/yasm-1.3.0/libyasm/xstrdup.c create mode 100644 third-party/yasm/yasm-1.3.0/m4/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/m4/ax_create_stdint_h.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/codeset.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/cython.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/gettext.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/glibc21.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/iconv.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/intdiv0.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/intmax.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/inttypes-pri.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/inttypes.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/inttypes_h.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/isc-posix.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/lcmessage.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/lib-ld.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/lib-link.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/lib-prefix.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/longdouble.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/longlong.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/nls.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/po.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/printf-posix.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/progtest.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/pythonhead.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/signed.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/size_max.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/stdint_h.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/uintmax_t.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/ulonglong.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/wchar_t.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/wint_t.m4 create mode 100644 third-party/yasm/yasm-1.3.0/m4/xsize.m4 create mode 100644 third-party/yasm/yasm-1.3.0/modules/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/lc3b/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/lc3b/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/lc3b/lc3barch.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/lc3b/lc3barch.h create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/lc3b/lc3bbc.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/lc3b/lc3bid.re create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-basic.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-basic.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-basic.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-br.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-br.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-ea-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-ea-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-mp22NC.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-mp22NC.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/Makefile.inc create mode 100755 third-party/yasm/yasm-1.3.0/modules/arch/x86/gen_x86_insn.py create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addbyte.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addbyte.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addbyte.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/aes.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/aes.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/amd-fma4.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/amd-fma4.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/amd200707.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/amd200707.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/arithsmall.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/arithsmall.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/arithsmall.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx16.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx16.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx2.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx2.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avxcc.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avxcc.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bittest.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bittest.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bmi1.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bmi1.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bmi2.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bmi2.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bswap64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bswap64.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/clmul.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/clmul.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cmpxchg.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cmpxchg.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cpubasic-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cpubasic-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cyrix.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cyrix.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/div-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/div-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-nonzero.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-nonzero.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-over.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-over.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-over.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-warn.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-warn.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-warn.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ebpindex.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ebpindex.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/effaddr.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/effaddr.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/enter.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/enter.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/enter.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/eptvpid.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/eptvpid.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/f16c.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/f16c.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/far64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/far64.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/farbasic.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/farbasic.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/farithr.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/farithr.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fcmov.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fcmov.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fma.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fma.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fsgsbase.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fsgsbase.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fwdequ64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fwdequ64.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/align32.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/align32.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farithr.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farithr.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farjump.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farjump.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-fpmem.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-fpmem.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-invlpg.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-invlpg.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-loop32.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-loop32.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movdq32.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movdq32.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movsd.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movsd.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-pop.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-pop.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas32-jmpcall.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas32-jmpcall.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/x86_gas32_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/align64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/align64.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-cbw.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-cbw.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-fp.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-fp.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-inout.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-inout.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-loop64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-loop64.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-moreinsn.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-moreinsn.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movabs.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movabs.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movdq64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movdq64.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movsxs.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movsxs.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-muldiv.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-muldiv.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-prefix.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-prefix.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-prefix.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-retenter.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-retenter.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-shift.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-shift.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas64-jmpcall.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas64-jmpcall.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/riprel.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/riprel.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/x86_gas64_test.sh create mode 100755 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gen-fma-test.py create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/genopcode.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/genopcode.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/imm64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/imm64.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/imm64.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/invpcid.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/invpcid.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/iret.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/iret.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-1.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-1.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-2.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-2.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-3.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-3.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-4.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-4.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-5.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-5.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-6.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-6.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmpfar.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmpfar.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/larlsl.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/larlsl.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lds.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lds.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lfs64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lfs64.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/loopadsz.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/loopadsz.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lsahf.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lsahf.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lzcnt.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lzcnt.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64hi32.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64hi32.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64rip.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64rip.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mixcase.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mixcase.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movbe.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movbe.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movdq32.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movdq32.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movdq64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movdq64.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/negequ.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/negequ.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64-err2.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64-err2.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64loop.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64loop.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64loop.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/opersize.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/opersize.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/opsize-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/opsize-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/overflow.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/overflow.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/overflow.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/padlock.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/padlock.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pinsrb.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pinsrb.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pshift.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pshift.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/push64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/push64.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/push64.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushf-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushf-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushf.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushf.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushnosize.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushnosize.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushnosize.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/rdrnd.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/rdrnd.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/rep.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/rep.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ret.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ret.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel1.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel1.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel2.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel2.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel2.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ripseg.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ripseg.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ripseg.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segmov.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segmov.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segoff-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segoff-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segoff.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segoff.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/shift.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/shift.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/shift64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/shift64.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd-1.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd-1.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd-2.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd-2.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd64-1.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd64-1.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd64-2.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd64-2.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/smx.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/smx.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse-prefix.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse-prefix.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse3.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse3.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse4-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse4-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse4.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse4.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssewidth.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssewidth.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssse3.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssse3.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssse3.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stos.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stos.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/str.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/str.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stringseg.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stringseg.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stringseg.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/svm.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/svm.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/twobytemem.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/twobytemem.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/twobytemem.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vmx-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vmx-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vmx.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vmx.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib2-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib2-err.errwarn create mode 100755 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/x86_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/x86label.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/x86label.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xchg64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xchg64.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xmm64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xmm64.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-all.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-all.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-basic.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-basic.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-cc.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-cc.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xsave.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xsave.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/x86arch.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/x86arch.h create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/x86bc.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/x86cpu.gperf create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/x86expr.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/x86id.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/x86/x86regtmod.gperf create mode 100644 third-party/yasm/yasm-1.3.0/modules/arch/yasm_arch.xml create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv-dbgfmt.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv-dbgfmt.h create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv-symline.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv-type.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv8.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-aranges.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-dbgfmt.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-dbgfmt.h create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-info.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-line.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/Makefile.inc create mode 100755 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/dwarf2_gen64_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/dwarf64_pathname.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/dwarf64_pathname.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/Makefile.inc create mode 100755 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf2_pass32_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32_testhd.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32_testhd.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/Makefile.inc create mode 100755 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf2_pass64_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_2loc.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_2loc.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_leb128.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_leb128.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/Makefile.inc create mode 100755 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarf2_passwin64_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/null/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/null/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/null/null-dbgfmt.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/stabs-dbgfmt.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/tests/stabs-elf.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/tests/stabs-elf.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/tests/stabs_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/dbgfmts/yasm_dbgfmts.xml create mode 100644 third-party/yasm/yasm-1.3.0/modules/listfmts/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/listfmts/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/listfmts/nasm/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/listfmts/nasm/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/listfmts/nasm/nasm-listfmt.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/bin-objfmt.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/abs.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/abs.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bigorg.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bigorg.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bigorg.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin-farabs.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin-farabs.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin-rip.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin-rip.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bintest.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bintest.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/float-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/float-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/float.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/float.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer-warn.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer-warn.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer-warn.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/levelop.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/levelop.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.map create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-ssym.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-ssym.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-ssym.map create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin_multi_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop1-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop1-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop2-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop2-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-notfound-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-notfound-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.map create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/ldlinux-sects.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/ldlinux-sects.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/ldlinux-sects.map create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect1.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect1.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect1.map create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect2.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect2.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect2.map create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect3.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect3.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect3.map create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect4.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect4.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect4.map create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect5.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect5.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect5.map create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect1.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect1.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect1.map create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect2.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect2.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect2.map create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop1-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop1-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop2-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop2-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-notfound-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-notfound-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/reserve.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/reserve.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/reserve.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/shr.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/shr.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/coff/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/coff/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/coff/coff-objfmt.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/coff/coff-objfmt.h create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/Makefile.inc create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/coff_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftest.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftest.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftest.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftimes.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftimes.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/x86id.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/x86id.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/x86id.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/coff/win64-except.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/coff/win64-gas.mac create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/coff/win64-nasm.mac create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/dbg/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/dbg/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/dbg/dbg-objfmt.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-machine.h create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-objfmt.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-x86-amd64.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-x86-x32.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-x86-x86.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf.h create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elf-rip.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elf-rip.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elf_amd64_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elfso64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elfso64.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/gotpcrel.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/gotpcrel.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/multiplefixup.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/multiplefixup.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/curpos-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/curpos-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/curpos.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/curpos.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf-overdef.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf-overdef.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf-x86id.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf-x86id.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfabssect.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfabssect.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfcond.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfcond.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfequabs.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfequabs.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobal.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobal.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobext.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobext.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobext2.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobext2.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfmanysym.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfmanysym.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfreloc-ext.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfreloc-ext.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfreloc.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfreloc.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfsectalign.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfsectalign.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfso.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfso.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftest.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftest.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftest.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftimes.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftimes.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftypesize.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftypesize.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfvisibility.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfvisibility.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfvisibility.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_got.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_got.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_ssym.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_ssym.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/crosssect.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/crosssect.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_curpos.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_curpos.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_reloc.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_reloc.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_ssym.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_ssym.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/crosssect.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/crosssect.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_curpos.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_curpos.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_reloc.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_reloc.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_ssym.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_ssym.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/nasm-forceident.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/nasm-forceident.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/nasm-sectname.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/nasm-sectname.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elf-rip.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elf-rip.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elf_x32_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elfsox32.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elfsox32.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/gotpcrel.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/gotpcrel.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/multiplefixup.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/multiplefixup.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/macho-objfmt.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas32/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas32/gas-macho32.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas32/gas-macho32.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas32/gas_macho32_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64-pic.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64-pic.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas_macho64_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho-reloc.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho-reloc.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pext.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pext.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pic.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pic.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-sect.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-sect.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-sect.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-size.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-size.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/machotest.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/machotest.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/machotest.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/macho-reloc64-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/macho-reloc64-err.errwarn create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/macho64_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/machotest64.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/machotest64.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/machotest64.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/nasm-macho64-pic.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/nasm-macho64-pic.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/rdf-objfmt.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/Makefile.inc create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdf_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfabs.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfabs.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfabs.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfext.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfext.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg2.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg2.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdftest1.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdftest1.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdftest2.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdftest2.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdtlib.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdtlib.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdtmain.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdtmain.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/testlib.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/testlib.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/export.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/export.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/Makefile.inc create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32_gas_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32at.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32at.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32def.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32def.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32secrel32.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32secrel32.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-curpos.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-curpos.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-overdef.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-overdef.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-safeseh.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-safeseh.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-safeseh.masm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-segof.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-segof.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32test.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32test.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32test.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/gas/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/gas/win64-gas-sce.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/gas/win64-gas-sce.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/gas/win64_gas_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce1-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce1-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce1.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce1.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce2-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce2-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce2.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce2.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce3.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce3.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce3.masm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4.masm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-abs.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-abs.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-curpos.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-curpos.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref.masm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref2.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref2.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref2.masm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-function.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-function.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-imagebase.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-imagebase.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdf-overdef.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdf-overdef.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdf_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdflong.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdflong.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdflong.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfother.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfother.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfprotect.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfprotect.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfvirtual.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfvirtual.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/xdf-objfmt.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/objfmts/yasm_objfmts.xml create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-parse-intel.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-parse.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-parser.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-parser.h create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-token.re create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-comment.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-comment.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-comment.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-intel_syntax-noprefix.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-intel_syntax-noprefix.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-llabel.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-llabel.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-macro.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-macro.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-set.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-set.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-str.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-str.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas_bin_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/rept-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/rept-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptempty.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptempty.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptlong.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptlong.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptnested.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptnested.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptsimple.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptsimple.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptwarn.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptwarn.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptwarn.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptzero.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptzero.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/dataref-imm.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/dataref-imm.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis2.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis2.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/execsect.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/execsect.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-fill.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-fill.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-float.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-float.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-instlabel.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-instlabel.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-line-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-line-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-line2-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-line2-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-push.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-push.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-segprefix.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-segprefix.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-semi.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-semi.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gassectalign.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gassectalign.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/jmpcall.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/jmpcall.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/jmpcall.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/leb128.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/leb128.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/localcomm.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/localcomm.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/reggroup-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/reggroup-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/reggroup.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/reggroup.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/strzero.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/strzero.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/varinsn.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/varinsn.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-parse.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-parser-struct.h create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-parser.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-parser.h create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-std.mac create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-token.re create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/alignnop16.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/alignnop16.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/alignnop32.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/alignnop32.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/charconstmath.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/charconstmath.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dirwarning.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dirwarning.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dirwarning.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dy.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dy.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/endcomma.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/endcomma.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/equcolon.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/equcolon.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/equlocal.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/equlocal.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/hexconst.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/hexconst.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/locallabel.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/locallabel.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/locallabel2.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/locallabel2.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/long.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/long.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/nasm-prefix.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/nasm-prefix.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/nasm_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/newsect.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/newsect.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/orphannowarn.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/orphannowarn.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/prevlocalwarn.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/prevlocalwarn.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/prevlocalwarn.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/strucalign.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/strucalign.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/strucbase.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/strucbase.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/struczero.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/struczero.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/syntax-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/syntax-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/uscore.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/uscore.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/Makefile.inc create mode 100755 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/nasm_worphan_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/orphanwarn.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/orphanwarn.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/orphanwarn.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/array.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/array.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/case.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/case.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/charstr.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/charstr.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/dup.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/dup.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/equal.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/equal.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/exe/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/exe/exe.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/exe/exe.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/exe/tasm_exe_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/expr.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/expr.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/irp.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/irp.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/label.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/label.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/les.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/les.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/lidt.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/lidt.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/macro.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/macro.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/offset.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/offset.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/quote.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/quote.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/res.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/res.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/res.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/segment.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/segment.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/size.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/size.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/struc.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/struc.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/struc.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/tasm_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/parsers/yasm_parsers.xml create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/cpp/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/cpp/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/cpp/cpp-preproc.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/gas/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/gas/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/gas/gas-eval.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/gas/gas-eval.h create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/gas/gas-preproc.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/gas/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/genversion.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-eval.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-eval.h create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-pp.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-pp.h create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-preproc.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm.h create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasmlib.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasmlib.h create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/16args.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/16args.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/ifcritical-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/ifcritical-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/longline.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/longline.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/macroeof-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/macroeof-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-bigint.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-bigint.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-decimal.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-decimal.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-nested.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-nested.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-nested.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/noinclude-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/noinclude-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/orgsect.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/orgsect.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/scope-err.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/scope-err.errwarn create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/raw/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/raw/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/raw/raw-preproc.c create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/raw/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/raw/tests/longline.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/raw/tests/longline.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/preprocs/raw/tests/rawpp_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasm-assume-comment.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasm-assume-comment.hex create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasm-comment-instr.asm create mode 100644 third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasm-comment-instr.hex create mode 100755 third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasmpp_test.sh create mode 100755 third-party/yasm/yasm-1.3.0/out_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/plugins/README create mode 100644 third-party/yasm/yasm-1.3.0/plugins/dbg/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/plugins/dbg/README create mode 100644 third-party/yasm/yasm-1.3.0/plugins/dbg/dbg-objfmt.c create mode 100644 third-party/yasm/yasm-1.3.0/plugins/dbg/init_plugin.c create mode 100644 third-party/yasm/yasm-1.3.0/plugins/x86/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/plugins/x86/README create mode 100644 third-party/yasm/yasm-1.3.0/plugins/x86/init_plugin.c create mode 100644 third-party/yasm/yasm-1.3.0/po/ChangeLog create mode 100644 third-party/yasm/yasm-1.3.0/po/Makefile.in.in create mode 100644 third-party/yasm/yasm-1.3.0/po/Makevars create mode 100644 third-party/yasm/yasm-1.3.0/po/POTFILES.in create mode 100644 third-party/yasm/yasm-1.3.0/po/Rules-quot create mode 100644 third-party/yasm/yasm-1.3.0/po/boldquot.sed create mode 100644 third-party/yasm/yasm-1.3.0/po/en@boldquot.header create mode 100644 third-party/yasm/yasm-1.3.0/po/en@quot.header create mode 100644 third-party/yasm/yasm-1.3.0/po/insert-header.sin create mode 100644 third-party/yasm/yasm-1.3.0/po/quot.sed create mode 100644 third-party/yasm/yasm-1.3.0/po/remove-potcdate.sin create mode 100644 third-party/yasm/yasm-1.3.0/po/stamp-po create mode 100644 third-party/yasm/yasm-1.3.0/po/yasm.pot create mode 100755 third-party/yasm/yasm-1.3.0/splint.sh create mode 100644 third-party/yasm/yasm-1.3.0/test_hd.c create mode 100644 third-party/yasm/yasm-1.3.0/tools/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/tools/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/tools/genmacro/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/tools/genmacro/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/tools/genmacro/genmacro.c create mode 100644 third-party/yasm/yasm-1.3.0/tools/genperf/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/tools/genperf/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/tools/genperf/genperf.c create mode 100644 third-party/yasm/yasm-1.3.0/tools/genperf/perfect.c create mode 100644 third-party/yasm/yasm-1.3.0/tools/genperf/perfect.h create mode 100644 third-party/yasm/yasm-1.3.0/tools/genperf/standard.h create mode 100644 third-party/yasm/yasm-1.3.0/tools/python-yasm/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/tools/python-yasm/bytecode.pxi create mode 100644 third-party/yasm/yasm-1.3.0/tools/python-yasm/errwarn.pxi create mode 100644 third-party/yasm/yasm-1.3.0/tools/python-yasm/expr.pxi create mode 100644 third-party/yasm/yasm-1.3.0/tools/python-yasm/floatnum.pxi create mode 100644 third-party/yasm/yasm-1.3.0/tools/python-yasm/intnum.pxi create mode 100755 third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/cparse.py create mode 100755 third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/genpyx.py create mode 100755 third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/ir.py create mode 100755 third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/lexer.py create mode 100755 third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/node.py create mode 100755 third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/parse_core.py create mode 100755 third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/work_unit.py create mode 100755 third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/wrap_yasm.py create mode 100644 third-party/yasm/yasm-1.3.0/tools/python-yasm/setup.py create mode 100644 third-party/yasm/yasm-1.3.0/tools/python-yasm/symrec.pxi create mode 100644 third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/__init__.py create mode 100755 third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/python_test.sh create mode 100644 third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/test_bytecode.py create mode 100644 third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/test_expr.py create mode 100644 third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/test_intnum.py create mode 100644 third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/test_symrec.py create mode 100644 third-party/yasm/yasm-1.3.0/tools/python-yasm/value.pxi create mode 100644 third-party/yasm/yasm-1.3.0/tools/python-yasm/yasm.pyx create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/CHANGELOG create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/CMakeLists.txt create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/Makefile.inc create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/NO_WARRANTY create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/README create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/actions.c create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/basics.h create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/bootstrap/scanner.c create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/code.c create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/dfa.c create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/dfa.h create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/doc/loplas.ps.gz create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/doc/sample.bib create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/examples/basemmap.c create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/examples/c.re create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/examples/cmmap.re create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/examples/cnokw.re create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/examples/cunroll.re create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/examples/modula.re create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/examples/repeater.re create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/examples/rexx/README create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/examples/rexx/rexx.l create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/examples/rexx/scanio.c create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/examples/sample.re create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/examples/simple.re create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/globals.h create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/ins.h create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/main.c create mode 100755 third-party/yasm/yasm-1.3.0/tools/re2c/mbo_getopt.c create mode 100755 third-party/yasm/yasm-1.3.0/tools/re2c/mbo_getopt.h create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/parse.h create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/parser.c create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/parser.h create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/re.h create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/re2c.1 create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/scanner.c create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/scanner.h create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/scanner.re create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/substr.c create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/substr.h create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/token.h create mode 100644 third-party/yasm/yasm-1.3.0/tools/re2c/translate.c create mode 100644 third-party/yasm/yasm-1.3.0/util.h create mode 100644 third-party/yasm/yasm-1.3.0/version create mode 100644 third-party/yasm/yasm-1.3.0/x86insn_gas.gperf create mode 100644 third-party/yasm/yasm-1.3.0/x86insn_nasm.gperf create mode 100644 third-party/yasm/yasm-1.3.0/x86insns.c create mode 100644 third-party/yasm/yasm-1.3.0/yasm.1 create mode 100644 third-party/yasm/yasm-1.3.0/yasm_arch.7 create mode 100644 third-party/yasm/yasm-1.3.0/yasm_dbgfmts.7 create mode 100644 third-party/yasm/yasm-1.3.0/yasm_objfmts.7 create mode 100644 third-party/yasm/yasm-1.3.0/yasm_parsers.7 diff --git a/.bazelrc b/.bazelrc index 53cb710dc1..b083e61ee8 100644 --- a/.bazelrc +++ b/.bazelrc @@ -22,3 +22,9 @@ build --spawn_strategy=standalone build --strategy=SwiftCompile=standalone build --define RULES_SWIFT_BUILD_DUMMY_WORKER=1 +common:index_build --experimental_convenience_symlinks=ignore +common:index_build --bes_backend= --bes_results_url= +common:index_build --nolegacy_important_outputs +common:index_build --show_result=0 +common:index_build --define=buildNumber=10000 +common:index_build --define=telegramVersion=12.2.2 diff --git a/.gitignore b/.gitignore index 4a8af5793f..0e855890d9 100644 --- a/.gitignore +++ b/.gitignore @@ -74,3 +74,4 @@ buildServer.json Telegram.LSP.json **/.build/** spm-files +.bsp/** \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index e66c7387a0..9e7292b4dc 100644 --- a/.gitmodules +++ b/.gitmodules @@ -35,3 +35,6 @@ url=../tgcalls.git [submodule "third-party/XcodeGen"] path = third-party/XcodeGen url = https://github.com/yonaskolb/XcodeGen.git +[submodule "build-system/bazel-rules/sourcekit-bazel-bsp"] + path = build-system/bazel-rules/sourcekit-bazel-bsp +url=https://github.com/ali-fareed/sourcekit-bazel-bsp.git diff --git a/.sourcekit-lsp/config.json b/.sourcekit-lsp/config.json new file mode 100644 index 0000000000..7715da74d8 --- /dev/null +++ b/.sourcekit-lsp/config.json @@ -0,0 +1,9 @@ +{ + "backgroundIndexing": true, + "backgroundPreparationMode": "build", + "defaultWorkspaceType": "buildServer", + "logging": { + "level": "error", + "privacyLevel": "sensitive" + } +} diff --git a/.vscode/launch.json b/.vscode/launch.json index 9c36c383b3..fcf9ca4a0b 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,44 +1,39 @@ { - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", "configurations": [ { - "type": "swift", - "request": "launch", - "args": [], - "cwd": "${workspaceFolder:telegram-ios}", "name": "Debug Telegram", - "program": "${workspaceFolder:telegram-ios}/.build/debug/Telegram", - "preLaunchTask": "swift: Build Debug Telegram" + "type": "lldb-dap", + "request": "attach", + "preLaunchTask": "_launch_telegram", + "debuggerRoot": "${workspaceFolder}", + "attachCommands": [ + "process connect connect://localhost:6667" + ], + "internalConsoleOptions": "openOnSessionStart", + "timeout": 1000 }, { "type": "swift", "request": "launch", "args": [], - "cwd": "${workspaceFolder:telegram-ios}", - "name": "Release Telegram", - "program": "${workspaceFolder:telegram-ios}/.build/release/Telegram", - "preLaunchTask": "swift: Build Release Telegram" + "cwd": "${workspaceFolder:Telegram}", + "name": "Debug sourcekit-bazel-bsp", + "preLaunchTask": "swift: Build Debug sourcekit-bazel-bsp", + "target": "sourcekit-bazel-bsp", + "configuration": "debug" }, { "type": "swift", "request": "launch", "args": [], - "cwd": "${workspaceFolder:telegram-ios}", - "name": "Debug telegram-ios", - "program": "${workspaceFolder:telegram-ios}/.build/debug/telegram-ios", - "preLaunchTask": "swift: Build Debug telegram-ios" - }, - { - "type": "swift", - "request": "launch", - "args": [], - "cwd": "${workspaceFolder:telegram-ios}", - "name": "Release telegram-ios", - "program": "${workspaceFolder:telegram-ios}/.build/release/telegram-ios", - "preLaunchTask": "swift: Build Release telegram-ios" + "cwd": "${workspaceFolder:Telegram}", + "name": "Release sourcekit-bazel-bsp", + "preLaunchTask": "swift: Build Release sourcekit-bazel-bsp", + "target": "sourcekit-bazel-bsp", + "configuration": "release" } - ] + ], + "options": { + "console": "integratedTerminal", + } } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 79b33fc863..b2656a5f75 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,6 +1,79 @@ { - "version": "2.0.0", - "tasks": [ - ] - } - \ No newline at end of file + "version": "2.0.0", + "tasks": [ + { + "label": "Build Telegram", + "type": "shell", + "command": "${workspaceFolder}/build-input/bazel-8.3.1-darwin-arm64", + "args": [ + "build", + "Telegram/Telegram", + "--features=swift.use_global_module_cache", + "--verbose_failures", + "--remote_cache_async", + "--features=swift.skip_function_bodies_for_derived_files", + "--jobs=16", + "--define=buildNumber=10000", + "--define=telegramVersion=12.2.2", + "--disk_cache=${HOME}/telegram-bazel-cache", + "-c", + "dbg", + "--ios_multi_cpus=sim_arm64", + "--watchos_cpus=arm64_32", + "--features=swift.enable_batch_mode" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "problemMatcher": [], + "runOptions": { + "instanceLimit": 1 + } + }, + // Hidden never-ending task that handles the launch / debugging bits for Cmd+Shift+D. + // The problemMatcher field defines when the task is effectively ready to be debugged + // by the attach task in launch.json. + { + "label": "_launch_telegram", + "type": "shell", + "command": "./scripts/launch_and_debug.sh", + "presentation": { + "reveal": "always" + }, + "hide": true, + "isBackground": true, + "problemMatcher": [ + { + "pattern": [ + { + "regexp": "\\b\\B", + "file": 1, + "location": 2, + "message": 3 + } + ], + "background": { + "activeOnStart": true, + "beginsPattern": "^.*Building....*", + "endsPattern": "^.*Listening to port 6667 for a connection from .*" + } + } + ], + "runOptions": { + "instanceLimit": 1 + } + }, + { + "label": "Stream SourceKitBazelBSP Logs", + "type": "shell", + "command": "log stream --process sourcekit-bazel-bsp --debug", + "problemMatcher": [], + "isBackground": false, + "presentation": { + "reveal": "always", + "panel": "dedicated" + } + } + ] +} \ No newline at end of file diff --git a/BUILD.bazel b/BUILD.bazel new file mode 100644 index 0000000000..51cc4ab4ac --- /dev/null +++ b/BUILD.bazel @@ -0,0 +1,15 @@ +load("@sourcekit_bazel_bsp//rules:setup_sourcekit_bsp.bzl", "setup_sourcekit_bsp") + +setup_sourcekit_bsp( + name = "setup_sourcekit_bsp_telegram_project", + bazel_wrapper = "./build-input/bazel-8.3.1-darwin-arm64", + files_to_watch = [ + "**/*.swift", + ], + index_flags = [ + "config=index_build", + ], + targets = [ + "//Telegram:Telegram", + ], +) diff --git a/MODULE.bazel b/MODULE.bazel index a9aae97daf..f8ca9964e1 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -30,8 +30,8 @@ local_path_override( http_file( name = "cmake_tar_gz", - urls = ["https://github.com/Kitware/CMake/releases/download/v3.23.1/cmake-3.23.1-macos-universal.tar.gz"], - sha256 = "f794ed92ccb4e9b6619a77328f313497d7decf8fb7e047ba35a348b838e0e1e2", + urls = ["https://github.com/Kitware/CMake/releases/download/v4.1.2/cmake-4.1.2-macos-universal.tar.gz"], + sha256 = "3be85f5b999e327b1ac7d804cbc9acd767059e9f603c42ec2765f6ab68fbd367", ) http_file( @@ -62,3 +62,9 @@ local_path_override( module_name = "build_configuration", path = "./build-input/configuration-repository", ) + +bazel_dep(name = "sourcekit_bazel_bsp", version = "0.3.0") +local_path_override( + module_name = "sourcekit_bazel_bsp", + path = "build-system/bazel-rules/sourcekit-bazel-bsp", +) \ No newline at end of file diff --git a/build-system/Make/Make.py b/build-system/Make/Make.py index 1bdd0f7412..1898ad5cb4 100644 --- a/build-system/Make/Make.py +++ b/build-system/Make/Make.py @@ -40,7 +40,6 @@ class BazelCommandLine: self.additional_args = None self.build_number = None self.configuration_args = None - self.configuration_path = None self.split_submodules = False self.custom_target = None self.continue_on_error = False @@ -68,7 +67,7 @@ class BazelCommandLine: '--verbose_failures', # Asynchronously upload cache artifacts - '--experimental_remote_cache_async', + '--remote_cache_async', ] self.common_build_args = [ @@ -89,12 +88,6 @@ class BazelCommandLine: # invoking a smaller number of frontend processes and passing them batches of # source files. '--features=swift.enable_batch_mode', - - # https://docs.bazel.build/versions/master/command-line-reference.html - # Set the number of parallel jobs per module to saturate the available CPU resources. - #'--swiftcopt=-j{}'.format(os.cpu_count() - 1), - '--@build_bazel_rules_swift//swift:copt="-j{}"'.format(os.cpu_count() - 1), - '--@build_bazel_rules_swift//swift:copt="-whole-module-optimization"', ] self.common_release_args = [ @@ -147,9 +140,6 @@ class BazelCommandLine: def set_split_swiftmodules(self, value): self.split_submodules = value - def set_configuration_path(self, path): - self.configuration_path = path - def set_disable_provisioning_profiles(self): self.disable_provisioning_profiles = True @@ -203,8 +193,6 @@ class BazelCommandLine: # Require DSYM files as build output. '--output_groups=+dsyms', - - #'--@build_bazel_rules_swift//swift:copt="-num-threads 0"', ] + self.common_release_args else: raise Exception('Unknown configuration {}'.format(configuration)) @@ -296,13 +284,6 @@ class BazelCommandLine: if self.disable_provisioning_profiles: combined_arguments += ['--//Telegram:disableProvisioningProfiles'] - if self.configuration_path is None: - raise Exception('configuration_path is not defined') - - combined_arguments += [ - '--override_repository=build_configuration={}'.format(self.configuration_path) - ] - combined_arguments += self.common_args combined_arguments += self.common_build_args combined_arguments += self.get_define_arguments() @@ -336,13 +317,6 @@ class BazelCommandLine: combined_arguments += ['Tests/AllTests'] - if self.configuration_path is None: - raise Exception('configuration_path is not defined') - - combined_arguments += [ - '--override_repository=build_configuration={}'.format(self.configuration_path) - ] - combined_arguments += self.common_args combined_arguments += self.common_build_args combined_arguments += self.get_define_arguments() @@ -371,13 +345,6 @@ class BazelCommandLine: combined_arguments += self.get_startup_bazel_arguments() combined_arguments += ['aquery'] - if self.configuration_path is None: - raise Exception('configuration_path is not defined') - - combined_arguments += [ - '--override_repository=build_configuration={}'.format(self.configuration_path) - ] - combined_arguments += [ '-c', 'dbg', '--ios_multi_cpus=sim_arm64', @@ -425,13 +392,6 @@ class BazelCommandLine: if self.disable_provisioning_profiles: combined_arguments += ['--//Telegram:disableProvisioningProfiles'] - if self.configuration_path is None: - raise Exception('configuration_path is not defined') - - combined_arguments += [ - '--override_repository=build_configuration={}'.format(self.configuration_path) - ] - combined_arguments += self.common_args combined_arguments += self.common_build_args combined_arguments += self.get_define_arguments() @@ -562,9 +522,6 @@ def resolve_configuration(base_path, bazel_command_line: BazelCommandLine, argum file.write(' "{}",\n'.format(file_name)) file.write('])\n') - if bazel_command_line is not None: - bazel_command_line.set_configuration_path(configuration_repository_path) - def generate_project(bazel, arguments): bazel_command_line = BazelCommandLine( @@ -617,7 +574,6 @@ def generate_project(bazel, arguments): disable_provisioning_profiles=disable_provisioning_profiles, include_release=project_include_release, generate_dsym=generate_dsym, - configuration_path=bazel_command_line.configuration_path, bazel_app_arguments=bazel_command_line.get_project_generation_arguments(), target_name=target_name ) @@ -1006,14 +962,10 @@ if __name__ == '__main__': buildParser.add_argument( '--configuration', choices=[ - 'debug_universal', 'debug_arm64', - 'debug_armv7', 'debug_sim_arm64', 'release_sim_arm64', 'release_arm64', - 'release_armv7', - 'release_universal' ], required=True, help='Build configuration' @@ -1254,14 +1206,10 @@ if __name__ == '__main__': spm_parser.add_argument( '--configuration', choices=[ - 'debug_universal', 'debug_arm64', - 'debug_armv7', 'debug_sim_arm64', 'release_sim_arm64', 'release_arm64', - 'release_armv7', - 'release_universal' ], required=True, help='Build configuration' diff --git a/build-system/Make/ProjectGeneration.py b/build-system/Make/ProjectGeneration.py index 17d436a33d..8de469312c 100644 --- a/build-system/Make/ProjectGeneration.py +++ b/build-system/Make/ProjectGeneration.py @@ -9,7 +9,7 @@ def remove_directory(path): if os.path.isdir(path): shutil.rmtree(path) -def generate_xcodeproj(build_environment: BuildEnvironment, disable_extensions, disable_provisioning_profiles, include_release, generate_dsym, configuration_path, bazel_app_arguments, target_name): +def generate_xcodeproj(build_environment: BuildEnvironment, disable_extensions, disable_provisioning_profiles, include_release, generate_dsym, bazel_app_arguments, target_name): if '/' in target_name: app_target_spec = target_name.split('/')[0] + '/' + target_name.split('/')[1] + ':' + target_name.split('/')[1] app_target = target_name @@ -22,7 +22,6 @@ def generate_xcodeproj(build_environment: BuildEnvironment, disable_extensions, bazel_generate_arguments = [build_environment.bazel_path] bazel_generate_arguments += ['run', '//{}_xcodeproj'.format(app_target_spec)] - bazel_generate_arguments += ['--override_repository=build_configuration={}'.format(configuration_path)] if target_name == 'Telegram': if disable_extensions: @@ -32,7 +31,6 @@ def generate_xcodeproj(build_environment: BuildEnvironment, disable_extensions, project_bazel_arguments = [] for argument in bazel_app_arguments: project_bazel_arguments.append(argument) - project_bazel_arguments += ['--override_repository=build_configuration={}'.format(configuration_path)] if target_name == 'Telegram': if disable_extensions: @@ -54,5 +52,5 @@ def generate_xcodeproj(build_environment: BuildEnvironment, disable_extensions, return xcodeproj_path -def generate(build_environment: BuildEnvironment, disable_extensions, disable_provisioning_profiles, include_release, generate_dsym, configuration_path, bazel_app_arguments, target_name) -> str: - return generate_xcodeproj(build_environment, disable_extensions, disable_provisioning_profiles, include_release, generate_dsym, configuration_path, bazel_app_arguments, target_name) +def generate(build_environment: BuildEnvironment, disable_extensions, disable_provisioning_profiles, include_release, generate_dsym, bazel_app_arguments, target_name) -> str: + return generate_xcodeproj(build_environment, disable_extensions, disable_provisioning_profiles, include_release, generate_dsym, bazel_app_arguments, target_name) diff --git a/build-system/bazel-rules/sourcekit-bazel-bsp b/build-system/bazel-rules/sourcekit-bazel-bsp new file mode 160000 index 0000000000..fb37d850e8 --- /dev/null +++ b/build-system/bazel-rules/sourcekit-bazel-bsp @@ -0,0 +1 @@ +Subproject commit fb37d850e8715df81761feeea25f2158514fa2be diff --git a/build-system/decrypt.rb b/build-system/decrypt.rb index 5f89736a25..1183ebf40d 100644 --- a/build-system/decrypt.rb +++ b/build-system/decrypt.rb @@ -52,9 +52,9 @@ class EncryptionV2 iv = keyIv[32..43] auth_data = keyIv[44..-1] - puts "key: #{key.inspect}" - puts "iv: #{iv.inspect}" - puts "auth_data: #{auth_data.inspect}" + #puts "key: #{key.inspect}" + #puts "iv: #{iv.inspect}" + #puts "auth_data: #{auth_data.inspect}" cipher.key = key cipher.iv = iv diff --git a/scripts/Telegram b/scripts/Telegram new file mode 100755 index 0000000000..8bcb1ad1ac --- /dev/null +++ b/scripts/Telegram @@ -0,0 +1,757 @@ +#!/usr/bin/env python3 + +# Copyright 2020 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Invoked by `bazel run` to launch *_application targets in the simulator.""" + +# This script works in one of two modes. +# +# If either --ios_simulator_version or --ios_simulator_device were not +# passed to bazel: +# +# 1. Discovers a simulator compatible with the minimum_os of the +# *_application target, preferring already-booted simulators +# if possible +# 2. Boots the simulator if needed +# 3. Installs and launches the application +# 4. Displays the application's output on the console +# +# This mode does not kill running simulators or shutdown or delete the simulator +# after it completes. +# +# If --ios_simulator_version and --ios_simulator_device were both passed +# to bazel: +# +# 1. Creates a new temporary simulator by running "simctl create ..." +# 2. Boots the new temporary simulator +# 3. Installs and launches the application +# 4. Displays the application's output on the console +# 5. When done, shuts down and deletes the newly-created simulator +# +# All environment variables with names starting with "IOS_" are passed to the +# application, after stripping the prefix "IOS_". + +import collections.abc +import contextlib +import json +import logging +import os +import os.path +import pathlib +import platform +import plistlib +import shutil +import subprocess +import sys +import tempfile +import time +from typing import Dict, Optional +import zipfile + + +# Custom type for methods yielding an Apple simulator UDID. +AppleSimulatorUDID = collections.abc.Generator[str, None, None] + + +logging.basicConfig( + format="%(asctime)s.%(msecs)03d %(levelname)s %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", + level=logging.INFO, +) +logger = logging.getLogger(__name__) + +if platform.system() != "Darwin": + raise Exception( + "Cannot run Apple platform application targets on a non-mac machine." + ) + + +class DeviceType(collections.abc.Mapping): + """Wraps the `devicetype` dictionary from `simctl list -j`. + + Provides an ordering so iPhones > iPads. In addition, maintains the + original order from `simctl list` as `simctl_list_index` to ensure + newer device types are sorted after older device types. + """ + + def __init__(self, device_type, simctl_list_index): + self.device_type = device_type + self.simctl_list_index = simctl_list_index + + def __getitem__(self, name): + return self.device_type[name] + + def __iter__(self): + return iter(self.device_type) + + def __len__(self): + return len(self.device_type) + + def __repr__(self): + return self["name"] + " (" + self["identifier"] + ")" + + def __lt__(self, other): + # Order iPhones ahead of (later in the list than) iPads. + if self.is_ipad() and other.is_iphone(): + return True + elif self.is_iphone() and other.is_ipad(): + return False + # Order device types from the same product family in the same order + # as `simctl list`. + return self.simctl_list_index < other.simctl_list_index + + def supports_platform_type(self, platform_type: str) -> bool: + """Returns boolean to indicate if device supports given Apple platform type.""" + if platform_type == "ios": + return self.is_iphone() or self.is_ipad() + elif platform_type == "tvos": + return self.is_apple_tv() + elif platform_type == "watchos": + return self.is_apple_watch() + elif platform_type == "visionos": + return self.is_apple_vision() + else: + raise ValueError( + f"Apple platform type not supported for simulator: {platform_type}." + ) + + def is_apple_tv(self) -> bool: + return self.has_product_family_or_identifier("Apple TV") + + def is_apple_watch(self) -> bool: + return self.has_product_family_or_identifier("Apple Watch") + + def is_apple_vision(self) -> bool: + return self.has_product_family_or_identifier("Apple Vision") + + def is_iphone(self) -> bool: + return self.has_product_family_or_identifier("iPhone") + + def is_ipad(self) -> bool: + return self.has_product_family_or_identifier("iPad") + + def has_product_family_or_identifier(self, device_type: str) -> bool: + product_family = self.get("productFamily") + if product_family: + return product_family == device_type + # Some older simulators are missing `productFamily`. Try to guess from the + # identifier. + return device_type in self["identifier"] + + +class Device(collections.abc.Mapping): + """Wraps the `device` dictionary from `simctl list -j`. + + Provides an ordering so booted devices > shutdown devices, delegating + to `DeviceType` order when both devices have the same state. + """ + + def __init__(self, device, device_type): + self.device = device + self.device_type = device_type + + def is_shutdown(self): + return self["state"] == "Shutdown" + + def is_booted(self): + return self["state"] == "Booted" + + def __getitem__(self, name): + return self.device[name] + + def __iter__(self): + return iter(self.device) + + def __len__(self): + return len(self.device) + + def __repr__(self): + return self["name"] + "(" + self["udid"] + ")" + + def __lt__(self, other): + if self.is_shutdown() and other.is_booted(): + return True + elif self.is_booted() and other.is_shutdown(): + return False + else: + return self.device_type < other.device_type + + +def minimum_os_to_simctl_runtime_version(minimum_os: str) -> int: + """Converts a minimum OS string to a simctl RuntimeVersion integer. + + Args: + minimum_os: A string in the form '12.2' or '13.2.3'. + + Returns: + An integer in the form 0xAABBCC, where AA is the major version, BB is + the minor version, and CC is the micro version. + """ + # Pad the minimum OS version to major.minor.micro. + minimum_os_components = (minimum_os.split(".") + ["0"] * 3)[:3] + result = 0 + for component in minimum_os_components: + result = (result << 8) | int(component) + return result + + +def discover_best_compatible_simulator( + *, + platform_type: str, + simctl_path: str, + minimum_os: str, + sim_device: str, + sim_os_version: str, +) -> (Optional[DeviceType], Optional[Device]): + """Discovers the best compatible simulator device type and device. + + Args: + platform_type: The Apple platform type for the given *_application() target. + simctl_path: The path to the `simctl` binary. + minimum_os: The minimum OS version required by the *_application() target. + sim_device: Optional name of the device (e.g. "iPhone 8 Plus"). + sim_os_version: Optional version of the Apple platform runtime (e.g. + "13.2"). + + Returns: + A tuple (device_type, device) containing the DeviceType and Device + of the best compatible simulator (might be None if no match was found). + + Raises: + subprocess.SubprocessError: if `simctl list` fails or times out. + """ + # The `simctl list` CLI provides only very basic case-insensitive description + # matching search term functionality. + # + # This code needs to enforce a numeric floor on `minimum_os`, so it directly + # parses the JSON output by `simctl list` instead of repeatedly invoking + # `simctl list` with search terms. + cmd = [simctl_path, "list", "-j"] + with subprocess.Popen(cmd, stdout=subprocess.PIPE) as process: + simctl_data = json.load(process.stdout) + if process.wait() != os.EX_OK: + raise subprocess.CalledProcessError(process.returncode, cmd) + compatible_device_types = [] + minimum_runtime_version = minimum_os_to_simctl_runtime_version(minimum_os) + # Prepare the device name for case-insensitive matching. + sim_device = sim_device and sim_device.casefold() + # `simctl list` orders device types from oldest to newest. Remember + # the index of each device type to preserve that ordering when + # sorting device types. + for simctl_list_index, device_type in enumerate(simctl_data["devicetypes"]): + device_type = DeviceType(device_type, simctl_list_index) + if not device_type.supports_platform_type(platform_type): + continue + # Some older simulators are missing `maxRuntimeVersion`. Assume those + # simulators support all OSes (even though it's not true). + max_runtime_version = device_type.get("maxRuntimeVersion") + if max_runtime_version and max_runtime_version < minimum_runtime_version: + continue + if sim_device and device_type["name"].casefold() != sim_device: + continue + compatible_device_types.append(device_type) + compatible_device_types.sort() + # logger.info( + # "Found %d potentialcompatible device types.", len(compatible_device_types) + # ) + compatible_runtime_identifiers = set() + for runtime in simctl_data["runtimes"]: + if not runtime["isAvailable"]: + continue + if sim_os_version and runtime["version"] != sim_os_version: + continue + compatible_runtime_identifiers.add(runtime["identifier"]) + compatible_devices = [] + for runtime_identifier, devices in simctl_data["devices"].items(): + if runtime_identifier not in compatible_runtime_identifiers: + continue + for device in devices: + if not device["isAvailable"]: + continue + compatible_device = None + for device_type in compatible_device_types: + if device["deviceTypeIdentifier"] == device_type["identifier"]: + compatible_device = Device(device, device_type) + break + if not compatible_device: + continue + compatible_devices.append(compatible_device) + compatible_devices.sort() + logger.debug("Found %d compatible devices.", len(compatible_devices)) + if compatible_device_types: + best_compatible_device_type = compatible_device_types[-1] + else: + best_compatible_device_type = None + if compatible_devices: + best_compatible_device = compatible_devices[-1] + else: + best_compatible_device = None + return (best_compatible_device_type, best_compatible_device) + + +def persistent_simulator( + *, + platform_type: str, + simctl_path: str, + minimum_os: str, + sim_device: str, + sim_os_version: str, +) -> str: + return "C4EDF56A-4B14-442F-B4D6-4B665E0495D2" + + """Finds or creates a persistent compatible Apple simulator. + + Boots the simulator if needed. Does not shut down or delete the simulator when + done. + + Args: + platform_type: The Apple platform type for the given *_application() target. + simctl_path: The path to the `simctl` binary. + minimum_os: The minimum OS version required by the *_application() target. + sim_device: Optional name of the device (e.g. "iPhone 8 Plus"). + sim_os_version: Optional version of the Apple platform runtime (e.g. + "13.2"). + + Returns: + The UDID of the compatible Apple simulator. + + Raises: + Exception: if a compatible simulator was not found. + """ + (best_compatible_device_type, best_compatible_device) = ( + discover_best_compatible_simulator( + platform_type=platform_type, + simctl_path=simctl_path, + minimum_os=minimum_os, + sim_device=sim_device, + sim_os_version=sim_os_version, + ) + ) + if best_compatible_device: + udid = best_compatible_device["udid"] + if best_compatible_device.is_shutdown(): + logger.debug("Booting compatible device: %s", best_compatible_device) + subprocess.run([simctl_path, "boot", udid], check=True) + else: + logger.debug("Using compatible device: %s", best_compatible_device) + return udid + if best_compatible_device_type: + device_name = best_compatible_device_type["name"] + device_id = best_compatible_device_type["identifier"] + # logger.info("Creating new %s simulator", device_name) + create_result = subprocess.run( + [simctl_path, "create", device_name, device_id], + encoding="utf-8", + stdout=subprocess.PIPE, + check=True, + ) + udid = create_result.stdout.rstrip() + logger.debug("Created new simulator: %s", udid) + return udid + raise Exception( + f"Could not find or create a simulator for the {platform_type} platform" + f"compatible with minimum OS version {minimum_os} (device name " + f"{sim_device}, OS version {sim_os_version})" + ) + + +def wait_for_sim_to_boot(simctl_path: str, udid: str) -> bool: + """Blocks until the given simulator is booted. + + Args: + simctl_path: The path to the `simctl` binary. + udid: The identifier of the simulator to wait for. + + Returns: + True if the simulator boots within 60 seconds, False otherwise. + """ + logger.info("Waiting for simulator to boot...") + for _ in range(0, 60): + # The expected output of "simctl list" is like: + # -- iOS 8.4 -- + # iPhone 5s (E946FA1C-26AB-465C-A7AC-24750D520BEA) (Shutdown) + # TestDevice (8491C4BC-B18E-4E2D-934A-54FA76365E48) (Booted) + # So if there's any booted simulator, $booted_device will not be empty. + #logger.info("will list devices with udid: %s", udid) + simctl_list_result = subprocess.run( + [simctl_path, "list", "devices"], + encoding="utf-8", + check=True, + stdout=subprocess.PIPE, + ) + #logger.info(simctl_list_result.stdout) + for line in simctl_list_result.stdout.split("\n"): + if line.find(udid) != -1 and line.find("Booted") != -1: + logger.debug("Simulator is booted.") + # Simulator is booted. + return True + logger.debug("Simulator not booted, still waiting...") + time.sleep(1) + return False + + +def boot_simulator(*, developer_path: str, simctl_path: str, udid: str) -> None: + """Launches the Apple simulator for the given identifier. + + Ensures the Simulator process is in the foreground. + + Args: + developer_path: The path to /Applications/Xcode.app/Contents/Developer. + simctl_path: The path to the `simctl` binary. + udid: The identifier of the simulator to wait for. + + Raises: + Exception: if the simulator did not launch within 60 seconds. + """ + logger.info("Launching simulator with udid: %s", udid) + # Using subprocess.Popen() to launch Simulator.app and then + # `osascript -e "tell application \"Simulator\" to activate" is racy + # and can fail with: + # + # Simulator got an error: Connection is invalid. (-609) + # + # This is likely because the newly-spawned Simulator.app process + # hasn't had time to connect to the Apple Events system which + # `osascript` relies on. + simulator_path = os.path.join(developer_path, "Applications/Simulator.app") + subprocess.run( + ["open", "-a", simulator_path, "--args", "-CurrentDeviceUDID", udid], + check=True, + ) + logger.debug("Simulator launched.") + if not wait_for_sim_to_boot(simctl_path, udid): + raise Exception("Failed to launch simulator with UDID: " + udid) + + +@contextlib.contextmanager +def temporary_simulator( + *, platform_type: str, simctl_path: str, device: str, version: str +) -> AppleSimulatorUDID: + """Creates a temporary Apple simulator, cleaned up automatically upon close. + + Args: + platform_type: The Apple platform type for the given *_application() target. + simctl_path: The path to the `simctl` binary. + device: The name of the device (e.g. "iPhone 8 Plus"). + version: The version of the Apple platform runtime (e.g. "13.2"). + + Yields: + The UDID of the newly-created Apple simulator. + """ + runtime_version_name = version.replace(".", "-") + # capitalizes 'os' from Apple platform type string (e.g. watchos -> watchOS) + runtime_platform = platform_type[0:-2].lower() + platform_type[-2:].upper() + # logger.info("Creating simulator, device=%s, version=%s", device, version) + simctl_create_result = subprocess.run( + [ + simctl_path, + "create", + "TestDevice", + device, + "{prefix}.{runtime_platform}-{runtime_version_name}".format( + prefix="com.apple.CoreSimulator.SimRuntime", + runtime_platform=runtime_platform, + runtime_version_name=runtime_version_name, + ), + ], + encoding="utf-8", + check=True, + stdout=subprocess.PIPE, + ) + udid = simctl_create_result.stdout.rstrip() + try: + logger.info("Killing all running simulators...") + subprocess.run( + ["pkill", "Simulator"], stderr=subprocess.DEVNULL, check=False + ) + yield udid + finally: + logger.info("Shutting down simulator with udid: %s", udid) + subprocess.run( + [simctl_path, "shutdown", udid], stderr=subprocess.DEVNULL, check=False + ) + logger.info("Deleting simulator with udid: %s", udid) + subprocess.run([simctl_path, "delete", udid], check=True) + + +def register_dsyms(dsyms_dir: str): + """Adds all dSYMs in `dsyms_dir` to the symbolscache. + + Args: + dsyms_dir: Path to directory potentially containing dSYMs + """ + symbolscache_command = [ + "/usr/bin/symbolscache", + "delete", + "--tag", + "Bazel", + "compact", + "add", + "--tag", + "Bazel", + ] + [ + a + for a in pathlib.Path(dsyms_dir).glob( + "**/*.dSYM/Contents/Resources/DWARF/*" + ) + ] + logger.debug("Running command: %s", symbolscache_command) + result = subprocess.run( + symbolscache_command, + capture_output=True, + check=True, + encoding="utf-8", + text=True, + ) + logger.debug("symbolscache output: %s", result.stdout) + + +@contextlib.contextmanager +def extracted_app( + application_output_path: str, app_name: str +) -> AppleSimulatorUDID: + """Extracts Foo.app from *_application() output and makes it writable. + + Args: + application_output_path: Path to the output of an `*_application()`. If the + path is a directory, copies it to a temporary directory and makes the + contents writable, as `simctl install` fails to install an `.app` that is + read-only. If the path is an .ipa archive, unzips it to a temporary + directory. + app_name: The name of the application (e.g. "Foo" for "Foo.app"). + + Yields: + Path to Foo.app in temporary directory (re-used if already present). + """ + if os.path.isdir(application_output_path): + # Re-use the same path for each run and rsync to it (reducing + # copies). Ensure the result is writable, or `simctl install` will + # fail with `Unhandled error domain NSPOSIXErrorDomain, code 13`. + dst_dir = os.path.join(tempfile.gettempdir(), "bazel_temp_" + app_name) + os.makedirs(dst_dir, exist_ok=True) + + # NOTE: use `which` to find the path to `rsync`. + # In macOS 15.4, the system `rsync` is using `openrsync` which contains some permission issues. + # This allows users to workaround the issue by overriding the system `rsync` with a working version. + # Remove this once we no longer support macOS versions with broken `rsync`. + rsync_path = shutil.which("rsync") + + rsync_command = [ + rsync_path, + "--archive", + "--delete", + "--checksum", + "--chmod=u+w", + "--verbose", + # The output path might itself be a symlink; resolve to the + # real path so rsync doesn't just copy the symlink. + os.path.realpath(application_output_path), + dst_dir, + ] + logger.debug( + "Found app directory: %s, running command: %s", + application_output_path, + rsync_command, + ) + result = subprocess.run( + rsync_command, + capture_output=True, + check=True, + encoding="utf-8", + text=True, + ) + logger.debug("rsync output: %s", result.stdout) + yield os.path.join(dst_dir, app_name + ".app") + else: + # Create a new temporary directory for each run, deleting it + # afterwards (there's no efficient way to "sync" an unzip, so this + # can't re-use the output directory). + with tempfile.TemporaryDirectory(prefix="bazel_temp") as temp_dir: + logger.debug( + "Unzipping IPA from %s to %s", application_output_path, temp_dir + ) + with zipfile.ZipFile(application_output_path) as ipa_zipfile: + ipa_zipfile.extractall(temp_dir) + yield os.path.join(temp_dir, "Payload", app_name + ".app") + + +def bundle_id(bundle_path: str) -> str: + """Returns the bundle ID given a bundle directory path.""" + info_plist_path = os.path.join(bundle_path, "Info.plist") + with open(info_plist_path, mode="rb") as plist_file: + plist = plistlib.load(plist_file) + return plist["CFBundleIdentifier"] + + +def simctl_launch_environ() -> Dict[str, str]: + """Calculates an environment dictionary for running `simctl launch`.""" + # Pass environment variables prefixed with "IOS_" to the simulator, replace + # the prefix with "SIMCTL_CHILD_". bazel adds "IOS_" to the env vars which + # will be passed to the app as prefix to differentiate from other env vars. We + # replace the prefix "IOS_" with "SIMCTL_CHILD_" here, because "simctl" only + # pass the env vars prefixed with "SIMCTL_CHILD_" to the app. + result = {} + for k, v in os.environ.items(): + if not k.startswith("IOS_"): + continue + new_key = k.replace("IOS_", "SIMCTL_CHILD_", 1) + result[new_key] = v + if "IDE_DISABLED_OS_ACTIVITY_DT_MODE" not in os.environ: + # Ensure os_log() mirrors writes to stderr. (lldb and Xcode set this + # environment variable as well.) + result["SIMCTL_CHILD_OS_ACTIVITY_DT_MODE"] = "enable" + return result + + +@contextlib.contextmanager +def apple_simulator( + *, + platform_type: str, + simctl_path: str, + minimum_os: str, + sim_device: str, + sim_os_version: str, +) -> AppleSimulatorUDID: + """Finds either a temporary or persistent Apple simulator based on args. + + Args: + platform_type: The Apple platform type for the given *_application() target. + simctl_path: The path to the `simctl` binary. + minimum_os: The minimum OS version required by the *_application() target. + sim_device: Optional name of the device (e.g. "iPhone 8 Plus"). + sim_os_version: Optional version of the Apple platform runtime (e.g. + "13.2"). + + Yields: + The UDID of the simulator. + """ + yield persistent_simulator( + platform_type=platform_type, + simctl_path=simctl_path, + minimum_os=minimum_os, + sim_device=sim_device, + sim_os_version=sim_os_version, + ) + + +def run_app_in_simulator( + *, + simulator_udid: str, + developer_path: str, + simctl_path: str, + application_output_path: str, + app_name: str, +) -> None: + """Installs and runs an app in the specified simulator. + + Args: + simulator_udid: The UDID of the simulator in which to run the app. + developer_path: The path to /Applications/Xcode.app/Contents/Developer. + simctl_path: The path to the `simctl` binary. + application_output_path: Path to the output of an `*_application()`. + app_name: The name of the application (e.g. "Foo" for "Foo.app"). + """ + boot_simulator( + developer_path=developer_path, + simctl_path=simctl_path, + udid=simulator_udid, + ) + root_dir = os.path.dirname(application_output_path) + register_dsyms(root_dir) + with extracted_app(application_output_path, app_name) as app_path: + logger.info("Will use simulator: %s", simulator_udid) + logger.info( + "Terminating any existing instances of the app in that simulator..." + ) + # First, quietly kill any existing instances of the app + app_bundle_id = bundle_id(app_path) + subprocess.run( + [simctl_path, "terminate", simulator_udid, app_bundle_id], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) + logger.info("Installing...") + subprocess.run( + [simctl_path, "install", simulator_udid, app_path], check=True + ) + logger.info( + "Launching..." + ) + args = [ + simctl_path, + "launch", + ] + # Append optional launch arguments. + args.extend(sys.argv[1:]) + args.extend([ + simulator_udid, + app_bundle_id, + ]) + subprocess.run(args, env=simctl_launch_environ(), check=True) + + +def main( + *, + app_name: str, + application_output_path: str, + minimum_os: str, + platform_type: str, + sim_device: str, + sim_os_version: str, +): + """Main entry point to `bazel run` for *_application() targets. + + Args: + app_name: The name of the application (e.g. "Foo" for "Foo.app"). + application_output_path: Path to the output of an *_application(). + minimum_os: The minimum OS version required by the *_application() target. + platform_type: The Apple platform type for the given *_application() target. + sim_device: The name of the device (e.g. "iPhone 8 Plus"). + sim_os_version: The version of the Apple platform runtime (e.g. "13.2"). + """ + xcode_select_result = subprocess.run( + ["xcode-select", "-p"], + encoding="utf-8", + check=True, + stdout=subprocess.PIPE, + ) + developer_path = xcode_select_result.stdout.rstrip() + simctl_path = os.path.join(developer_path, "usr", "bin", "simctl") + + with apple_simulator( + platform_type=platform_type, + simctl_path=simctl_path, + minimum_os=minimum_os, + sim_device=sim_device, + sim_os_version=sim_os_version, + ) as simulator_udid: + run_app_in_simulator( + simulator_udid=simulator_udid, + developer_path=developer_path, + simctl_path=simctl_path, + application_output_path=application_output_path, + app_name=app_name, + ) + + +if __name__ == "__main__": + main( + app_name="Telegram", + application_output_path="Telegram/Telegram.ipa", + minimum_os="13.0", + platform_type="ios", + sim_device="iPhone 16 Pro", + sim_os_version="26.0", + ) diff --git a/scripts/launch_and_debug.sh b/scripts/launch_and_debug.sh new file mode 100755 index 0000000000..089422a5cf --- /dev/null +++ b/scripts/launch_and_debug.sh @@ -0,0 +1,39 @@ +#!/bin/zsh + +set -e + +# We don't use bazelisk run because it does a bunch of things we don't want in this case. +# Instead, we have our own script for launching the simulator and lldb. +# Ideally we should upstream these changes back to rules_apple since they should be useful for everyone. + +echo "Building..." +./build-input/bazel-8.3.1-darwin-arm64 build Telegram/Telegram --announce_rc --features=swift.use_global_module_cache --verbose_failures --remote_cache_async --features=swift.skip_function_bodies_for_derived_files --jobs=16 --define=buildNumber=10000 --define=telegramVersion=12.2.1 --disk_cache=/Users/ali/telegram-bazel-cache -c dbg --ios_multi_cpus=sim_arm64 --watchos_cpus=arm64_32 --features=swift.enable_batch_mode +chmod -R 777 ./bazel-bin/Telegram + +tmp_file=$(pwd)/bazel-bin/Telegram/pid.txt +rm ${tmp_file} > /dev/null 2>&1 || true +touch ${tmp_file} +cp ./scripts/Telegram ./bazel-bin/Telegram/Telegram + +pushd ./bazel-bin +python3 ./Telegram/Telegram --wait-for-debugger --stdout=$(tty) --stderr=$(tty) > ${tmp_file} +popd + +# Get pid from the tmp_file +echo "$(cat "${tmp_file}" | awk -F': ' '{print $2}')" > ${tmp_file} +# Ugly hack to remove the newline from the file +pid=$(tr -d '\n' < ${tmp_file}) +echo "Launched app's pid: ${pid}" + +xcode_path=$(xcode-select -p) +debugserver_path="${xcode_path}/../SharedFrameworks/LLDB.framework/Versions/A/Resources/debugserver" + +# Just for sanity, kill any other debugservers that might be running +pgrep -lfa Resources/debugserver | awk '{print $1}' | xargs kill -9 + +# Launch the debugserver. The output of this command will signal the IDE to launch the lldb extension, +# which is hardcoded to connect to port 6667. +${debugserver_path} "localhost:6667" --attach ${pid} + +# Kill the app when debugging ends, just like in Xcode. +kill -9 ${pid} > /dev/null 2>&1 || true \ No newline at end of file diff --git a/third-party/flatc/BUILD b/third-party/flatc/BUILD index e3d54ce41c..12cb66aafa 100644 --- a/third-party/flatc/BUILD +++ b/third-party/flatc/BUILD @@ -22,7 +22,7 @@ set -x pushd "$$BUILD_DIR/flatbuffers-24.12.23" mkdir build cd build - PATH="$$PATH:$$CMAKE_DIR/cmake-3.23.1-macos-universal/CMake.app/Contents/bin" cmake .. -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_BUILD_TESTS=0 -DFLATBUFFERS_INSTALL=0 -DFLATBUFFERS_BUILD_FLATLIB=0 -DFLATBUFFERS_STATIC_FLATC=0 + PATH="$$CMAKE_DIR/cmake-4.1.2-macos-universal/CMake.app/Contents/bin:$$PATH" cmake .. -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_BUILD_TESTS=0 -DFLATBUFFERS_INSTALL=0 -DFLATBUFFERS_BUILD_FLATLIB=0 -DFLATBUFFERS_STATIC_FLATC=0 make -j $$core_count popd diff --git a/third-party/libjxl/BUILD b/third-party/libjxl/BUILD index ae93a6b1a0..58ab6bebee 100644 --- a/third-party/libjxl/BUILD +++ b/third-party/libjxl/BUILD @@ -78,7 +78,7 @@ genrule( mkdir -p "$$BUILD_DIR/Public/jxl" - PATH="$$PATH:$$CMAKE_DIR/cmake-3.23.1-macos-universal/CMake.app/Contents/bin" sh $$BUILD_DIR/build-libjxl-bazel.sh $$BUILD_ARCH "$$BUILD_DIR/libjxl" "$$BUILD_DIR" + PATH="$$CMAKE_DIR/cmake-4.1.2-macos-universal/CMake.app/Contents/bin:$$PATH" sh $$BUILD_DIR/build-libjxl-bazel.sh $$BUILD_ARCH "$$BUILD_DIR/libjxl" "$$BUILD_DIR" """ + "\n".join([ "cp -f \"$$BUILD_DIR/build/lib/include/{}\" \"$(location Public/{})\"".format(header, header) for header in headers diff --git a/third-party/mozjpeg/BUILD b/third-party/mozjpeg/BUILD index 27d92cd0ae..b74836738d 100644 --- a/third-party/mozjpeg/BUILD +++ b/third-party/mozjpeg/BUILD @@ -57,7 +57,7 @@ genrule( mkdir -p "$$BUILD_DIR/Public/mozjpeg" - PATH="$$PATH:$$CMAKE_DIR/cmake-3.23.1-macos-universal/CMake.app/Contents/bin" sh $$BUILD_DIR/build-mozjpeg-bazel.sh $$BUILD_ARCH "$$BUILD_DIR/mozjpeg" "$$BUILD_DIR" + PATH="$$PATH:$$CMAKE_DIR/cmake-4.1.2-macos-universal/CMake.app/Contents/bin" sh $$BUILD_DIR/build-mozjpeg-bazel.sh $$BUILD_ARCH "$$BUILD_DIR/mozjpeg" "$$BUILD_DIR" """ + "\n".join([ "cp -f \"$$BUILD_DIR/mozjpeg/{}\" \"$(location Public/mozjpeg/{})\"".format(header, header) for header in headers diff --git a/third-party/mozjpeg/build-mozjpeg-bazel.sh b/third-party/mozjpeg/build-mozjpeg-bazel.sh index c8621e5901..c115e26c97 100755 --- a/third-party/mozjpeg/build-mozjpeg-bazel.sh +++ b/third-party/mozjpeg/build-mozjpeg-bazel.sh @@ -7,24 +7,7 @@ ARCH="$1" SOURCE_DIR="$2" BUILD_DIR=$(echo "$(cd "$(dirname "$3")"; pwd -P)/$(basename "$3")") -if [ "$ARCH" = "armv7" ]; then - IOS_PLATFORMDIR="$(xcode-select -p)/Platforms/iPhoneOS.platform" - IOS_SYSROOT=($IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk) - export CFLAGS="-mfloat-abi=softfp -arch armv7 -miphoneos-version-min=13.0" - export ASMFLAGS="-no-integrated-as" - - cd "$BUILD_DIR" - mkdir build - cd build - - touch toolchain.cmake - echo "set(CMAKE_SYSTEM_NAME Darwin)" >> toolchain.cmake - echo "set(CMAKE_SYSTEM_PROCESSOR arm)" >> toolchain.cmake - echo "set(CMAKE_C_COMPILER $(xcode-select -p)/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang)" >> toolchain.cmake - - cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -DCMAKE_OSX_SYSROOT=${IOS_SYSROOT[0]} -DPNG_SUPPORTED=FALSE -DENABLE_SHARED=FALSE -DWITH_JPEG8=1 -DBUILD=10000 ../mozjpeg - make -elif [ "$ARCH" = "arm64" ]; then +if [ "$ARCH" = "arm64" ]; then IOS_PLATFORMDIR="$(xcode-select -p)/Platforms/iPhoneOS.platform" IOS_SYSROOT=($IOS_PLATFORMDIR/Developer/SDKs/iPhoneOS*.sdk) export CFLAGS="-Wall -arch arm64 -miphoneos-version-min=13.0 -funwind-tables" @@ -38,7 +21,7 @@ elif [ "$ARCH" = "arm64" ]; then echo "set(CMAKE_SYSTEM_PROCESSOR aarch64)" >> toolchain.cmake echo "set(CMAKE_C_COMPILER $(xcode-select -p)/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang)" >> toolchain.cmake - cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -DCMAKE_OSX_SYSROOT=${IOS_SYSROOT[0]} -DPNG_SUPPORTED=FALSE -DENABLE_SHARED=FALSE -DWITH_JPEG8=1 -DBUILD=10000 ../mozjpeg + cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -DCMAKE_OSX_SYSROOT=${IOS_SYSROOT[0]} -DPNG_SUPPORTED=FALSE -DENABLE_SHARED=FALSE -DWITH_JPEG8=1 -DBUILD=10000 -DCMAKE_POLICY_VERSION_MINIMUM=3.5 ../mozjpeg make elif [ "$ARCH" = "sim_arm64" ]; then IOS_PLATFORMDIR="$(xcode-select -p)/Platforms/iPhoneSimulator.platform" @@ -54,23 +37,7 @@ elif [ "$ARCH" = "sim_arm64" ]; then echo "set(CMAKE_SYSTEM_PROCESSOR aarch64)" >> toolchain.cmake echo "set(CMAKE_C_COMPILER $(xcode-select -p)/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang)" >> toolchain.cmake - cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -DCMAKE_OSX_SYSROOT=${IOS_SYSROOT[0]} -DPNG_SUPPORTED=FALSE -DENABLE_SHARED=FALSE -DWITH_JPEG8=1 -DBUILD=10000 ../mozjpeg - make -elif [ "$ARCH" = "x86_64" ]; then - IOS_PLATFORMDIR="$(xcode-select -p)/Platforms/iPhoneSimulator.platform" - IOS_SYSROOT=($IOS_PLATFORMDIR/Developer/SDKs/iPhoneSimulator*.sdk) - export CFLAGS="-Wall -arch x86_64 -miphoneos-version-min=13.0 -funwind-tables" - - cd "$BUILD_DIR" - mkdir build - cd build - - touch toolchain.cmake - echo "set(CMAKE_SYSTEM_NAME Darwin)" >> toolchain.cmake - echo "set(CMAKE_SYSTEM_PROCESSOR AMD64)" >> toolchain.cmake - echo "set(CMAKE_C_COMPILER $(xcode-select -p)/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang)" >> toolchain.cmake - - cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -DCMAKE_OSX_SYSROOT=${IOS_SYSROOT[0]} -DPNG_SUPPORTED=FALSE -DENABLE_SHARED=FALSE -DWITH_JPEG8=1 -DBUILD=10000 ../mozjpeg + cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -DCMAKE_OSX_SYSROOT=${IOS_SYSROOT[0]} -DPNG_SUPPORTED=FALSE -DENABLE_SHARED=FALSE -DWITH_JPEG8=1 -DBUILD=10000 -DCMAKE_POLICY_VERSION_MINIMUM=3.5 ../mozjpeg make else echo "Unsupported architecture $ARCH" diff --git a/third-party/td/BUILD b/third-party/td/BUILD index 396dde13bb..365f56ee82 100644 --- a/third-party/td/BUILD +++ b/third-party/td/BUILD @@ -77,7 +77,7 @@ genrule( mkdir -p "$$BUILD_DIR/Public/td" - PATH="$$PATH:$$CMAKE_DIR/cmake-3.23.1-macos-universal/CMake.app/Contents/bin" sh $$BUILD_DIR/build-td-bazel.sh $$BUILD_ARCH "$$BUILD_DIR/td" "$$BUILD_DIR" "$$OPENSSL_DIR" + PATH="$$CMAKE_DIR/cmake-4.1.2-macos-universal/CMake.app/Contents/bin:$$PATH" sh $$BUILD_DIR/build-td-bazel.sh $$BUILD_ARCH "$$BUILD_DIR/td" "$$BUILD_DIR" "$$OPENSSL_DIR" """ + "\n".join([ "cp -f \"$$BUILD_DIR/td/tde2e/{}\" \"$(location Public/td/{})\"".format(header, header) for header in headers diff --git a/third-party/webp/BUILD b/third-party/webp/BUILD index 796f360164..82b7278c8e 100644 --- a/third-party/webp/BUILD +++ b/third-party/webp/BUILD @@ -56,7 +56,7 @@ genrule( mkdir -p "$$BUILD_DIR/Public/libwebp" - PATH="$$PATH:$$CMAKE_DIR/cmake-3.23.1-macos-universal/CMake.app/Contents/bin" sh $$BUILD_DIR/build-webp-bazel.sh $$BUILD_ARCH "$$BUILD_DIR/libwebp" "$$BUILD_DIR" + PATH="$$CMAKE_DIR/cmake-4.1.2-macos-universal/CMake.app/Contents/bin:$$PATH" sh $$BUILD_DIR/build-webp-bazel.sh $$BUILD_ARCH "$$BUILD_DIR/libwebp" "$$BUILD_DIR" """ + "\n".join([ "cp -f \"$$BUILD_DIR/libwebp/src/webp/{}\" \"$(location Public/webp/{})\"".format(header, header) for header in headers diff --git a/third-party/yasm/BUILD b/third-party/yasm/BUILD index bc405ece85..ecfef261b0 100644 --- a/third-party/yasm/BUILD +++ b/third-party/yasm/BUILD @@ -1,9 +1,16 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file") +filegroup( + name = "yasm_sources", + srcs = glob([ + "yasm-1.3.0/**/*" + ]), +) + genrule( name = "yasm", srcs = [ - "yasm-1.3.0.tar.gz", + ":yasm_sources", "@cmake_tar_gz//file", ], cmd_bash = @@ -19,11 +26,13 @@ set -x mkdir -p "$$CMAKE_DIR" tar -xf "$(location @cmake_tar_gz//file)" -C "$$CMAKE_DIR" - tar -xzf "$(location yasm-1.3.0.tar.gz)" --directory "$$BUILD_DIR" + SOURCE_PATH="third-party/yasm/yasm-1.3.0" + cp -R "$$SOURCE_PATH" "$$BUILD_DIR/" + pushd "$$BUILD_DIR/yasm-1.3.0" mkdir build cd build - PATH="$$PATH:$$CMAKE_DIR/cmake-3.23.1-macos-universal/CMake.app/Contents/bin" cmake .. -DYASM_BUILD_TESTS=OFF -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DPYTHON_EXECUTABLE="$$(which python3)" + PATH="$$CMAKE_DIR/cmake-4.1.2-macos-universal/CMake.app/Contents/bin:$$PATH" cmake .. -DYASM_BUILD_TESTS=OFF -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DPYTHON_EXECUTABLE="$$(which python3)" make -j $$core_count popd diff --git a/third-party/yasm/yasm-1.3.0.tar.gz b/third-party/yasm/yasm-1.3.0.tar.gz deleted file mode 100644 index 665692ba8045c1c5f4c39b326424e39d21a4e7e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1492156 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

Y5N^S*Tb&|z` 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 z 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

i7TJeX+AE-f*gEP3_Jd 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%0D7z-Ig(p{dH;UQY|_wQ_ucd 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

xKjFcY)Yd}Dr3sck}EL)7~FY%Za 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

HE5 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 z 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 z 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%0D?r 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 -oX~wNq^aR$~wj# z>Od$OTCCXkF2sN!au`t+a(J>_SSSK}D~!5}MHPD`RU;*epX3N#Tv)+48IuK)FrIEY z5d%q7^aiFQ?`AuiQy;m`CD4D@(xyqsnzP)wfF9T%PkHA5t~D6Nh27Jg?bG+iI~N!5 zUAhEKeKDv$HFgGtwh`8fxO$Zf|+|j|N$8 zWAoytFtSaJ6HD!Bu+kv6f9K6yQVB5FO^n``?fP7xa=R^QG$Usi1=C(+2to`S&C5c8 zC1`kE`o|Qpry#?-LT0Zwo&dj67r0e3iXYm5eC>*{xoI>pveZI;pC{36JKaupjrTD0 zRsuTG`i~z!qGa)*CGD(#BnO2vt8LA$c4nD$k^Hd)Ua5jxnogTIFc~Hr`P;xE^;YGl za3G631n4LoI=alR(zWJEri{a_Wu{wRbzC$Oa9S^3G@Gjr!wPKA&x04!o&2KtWf<-B zr!4t;7>F!5yBrU2w&(*mZ@F{|nB4X7ASSs)@nlA1eQ5bhVv5l$*so&YDZYFk^s)Ge zi$&<>*2H&RKU6mZM2s0Be^Zj}T|0sAjRBYIg#w!`h!YNrN^8gJrO&%3N2u+>bhGqX zgfaV)sFNMQ#rG7*mVOf0eJiphvub&y3y9t4!T1yk32%h#F0P?@*!xr<*Mzf5}H zL-*|1F*50;Os#nw{`J~_hA+QfXL&9!eZ9{5T>kfZ%k#L_BUu5O!fg0I+JXTuH8*e~ z#BBqP2(4j8p+K>}!(QM_qMG4i;MlPb*zCYcC`HZ~aKsuqOUw*`O`@ISTW+5+WVsh|(2q0q!PK`6<5=2XW3$mPmX`7fVH4*Nde-qF5`Q%h4KIN6n?jEXS z=2Ln=lfIKSv$w_*DiJM%QXlF%6hq4(v?_&!3Pt;_?rspDK$N_NTk4( zAl&E$L4Cg^S4&J(^+n|Tb<_0-;Rm z8%(X>&S*EAYx3j1=a zuUXR<`ml9kbr#*zUPzTfZCUOV;m& zy4s^fYWZ0wGPENZP{H8ciGspBUln~PB#CHrHvw^vINCzp8zsKsO>z)}dd%;_=1W)0 zBm0(kXczCSjjdpaJhSKCRSInsIJEMl!JA$u9?oM<=@{u!!Fs8Rs|U^T8_wb3QmeH_FpO{A$4Cxj8sD z@Dn@^cDW{c<*$R?^MBOE|0$L0c)fG7eY|^g3XBp|b97X|I4B`nVOT+*8`;NeUQTyP z)1-XATGHJB$d4e;PJytJeL)=I$LB6Feuc&o0z0oRZT*gS?42=EGCo$TK$}$EiBc%D zg|-U`%HyWiYgBW{lR6g(Q}>P(AuQ1rcuew#Bw3EH+fplVOkVBAV^KI?a(@T*_nHfMmEkVbOCirLO-WORL#MuXgd$k_Tig1F}C1acG}Q?g^O_Xfk@_>3O}lx zj~p^!OJjRdX@pW^DIC4HE{%O?d0_Vd!+`YHwT}XfKSAxARFu$F*25Fk^w+Q6 zCg--_9p=ofu(+`(OJG}WHqXoS@ZhD@9^{SC`Gzx|z#PCr>A}*mMHnqoa`y;9K?HF_ zwk$^LoCtB3R+}Z&5P&nT9574_@5WuwH*_2eBAmRw3)A9wk#O9R$Sc<`x)$k8T`Q2d9oT?CAq+gV30Jg1davAJ#XGJZ zMmELS!O=xj;QPhGvoBE+8@BEtE(ncskON&9nNZE>&Yp&g@RF($!NW`dQlZxo#FoIe zalu~u0myzhzqUK*v}uBuuwHnk2xcJHp;%j~$xN%uaVB`yGf|9Jk?mFo1}_Q_4hlAq zt{E#Dn;IdHj1PQP>B0}X9SyvPR)?{KD|3j@$=OcL5MJ0-g{WG@a;|+ViG xe)f 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 diff --git a/third-party/yasm/yasm-1.3.0/ABOUT-NLS b/third-party/yasm/yasm-1.3.0/ABOUT-NLS new file mode 100644 index 0000000000..b1de1b6832 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/ABOUT-NLS @@ -0,0 +1,1282 @@ +1 Notes on the Free Translation Project +*************************************** + +Free software is going international! The Free Translation Project is +a way to get maintainers of free software, translators, and users all +together, so that free software will gradually become able to speak many +languages. A few packages already provide translations for their +messages. + + If you found this `ABOUT-NLS' file inside a distribution, you may +assume that the distributed package does use GNU `gettext' internally, +itself available at your nearest GNU archive site. But you do _not_ +need to install GNU `gettext' prior to configuring, installing or using +this package with messages translated. + + Installers will find here some useful hints. These notes also +explain how users should proceed for getting the programs to use the +available translations. They tell how people wanting to contribute and +work on translations can contact the appropriate team. + +1.1 INSTALL Matters +=================== + +Some packages are "localizable" when properly installed; the programs +they contain can be made to speak your own native language. Most such +packages use GNU `gettext'. Other packages have their own ways to +internationalization, predating GNU `gettext'. + + By default, this package will be installed to allow translation of +messages. It will automatically detect whether the system already +provides the GNU `gettext' functions. Installers may use special +options at configuration time for changing the default behaviour. The +command: + + ./configure --disable-nls + +will _totally_ disable translation of messages. + + When you already have GNU `gettext' installed on your system and run +configure without an option for your new package, `configure' will +probably detect the previously built and installed `libintl' library +and will decide to use it. If not, you may have to to use the +`--with-libintl-prefix' option to tell `configure' where to look for it. + + Internationalized packages usually have many `po/LL.po' files, where +LL gives an ISO 639 two-letter code identifying the language. Unless +translations have been forbidden at `configure' time by using the +`--disable-nls' switch, all available translations are installed +together with the package. However, the environment variable `LINGUAS' +may be set, prior to configuration, to limit the installed set. +`LINGUAS' should then contain a space separated list of two-letter +codes, stating which languages are allowed. + +1.2 Using This Package +====================== + +As a user, if your language has been installed for this package, you +only have to set the `LANG' environment variable to the appropriate +`LL_CC' combination. If you happen to have the `LC_ALL' or some other +`LC_xxx' environment variables set, you should unset them before +setting `LANG', otherwise the setting of `LANG' will not have the +desired effect. Here `LL' is an ISO 639 two-letter language code, and +`CC' is an ISO 3166 two-letter country code. For example, let's +suppose that you speak German and live in Germany. At the shell +prompt, merely execute `setenv LANG de_DE' (in `csh'), +`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). +This can be done from your `.login' or `.profile' file, once and for +all. + + You might think that the country code specification is redundant. +But in fact, some languages have dialects in different countries. For +example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The +country code serves to distinguish the dialects. + + The locale naming convention of `LL_CC', with `LL' denoting the +language and `CC' denoting the country, is the one use on systems based +on GNU libc. On other systems, some variations of this scheme are +used, such as `LL' or `LL_CC.ENCODING'. You can get the list of +locales supported by your system for your language by running the +command `locale -a | grep '^LL''. + + Not all programs have translations for all languages. By default, an +English message is shown in place of a nonexistent translation. If you +understand other languages, you can set up a priority list of languages. +This is done through a different environment variable, called +`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' +for the purpose of message handling, but you still need to have `LANG' +set to the primary language; this is required by other parts of the +system libraries. For example, some Swedish users who would rather +read translations in German than English for when Swedish is not +available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. + + Special advice for Norwegian users: The language code for Norwegian +bokma*l changed from `no' to `nb' recently (in 2003). During the +transition period, while some message catalogs for this language are +installed under `nb' and some older ones under `no', it's recommended +for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and +older translations are used. + + In the `LANGUAGE' environment variable, but not in the `LANG' +environment variable, `LL_CC' combinations can be abbreviated as `LL' +to denote the language's main dialect. For example, `de' is equivalent +to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' +(Portuguese as spoken in Portugal) in this context. + +1.3 Translating Teams +===================== + +For the Free Translation Project to be a success, we need interested +people who like their own language and write it well, and who are also +able to synergize with other translators speaking the same language. +Each translation team has its own mailing list. The up-to-date list of +teams can be found at the Free Translation Project's homepage, +`http://translationproject.org/', in the "Teams" area. + + If you'd like to volunteer to _work_ at translating messages, you +should become a member of the translating team for your own language. +The subscribing address is _not_ the same as the list itself, it has +`-request' appended. For example, speakers of Swedish can send a +message to `sv-request@li.org', having this message body: + + subscribe + + Keep in mind that team members are expected to participate +_actively_ in translations, or at solving translational difficulties, +rather than merely lurking around. If your team does not exist yet and +you want to start one, or if you are unsure about what to do or how to +get started, please write to `coordinator@translationproject.org' to +reach the coordinator for all translator teams. + + The English team is special. It works at improving and uniformizing +the terminology in use. Proven linguistic skills are praised more than +programming skills, here. + +1.4 Available Packages +====================== + +Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of June +2010. The matrix shows, in regard of each package, for which languages +PO files have been submitted to translation coordination, with a +translation percentage of at least 50%. + + Ready PO files af am an ar as ast az be be@latin bg bn_IN bs ca + +--------------------------------------------------+ + a2ps | [] [] | + aegis | | + ant-phone | | + anubis | | + aspell | [] [] | + bash | | + bfd | | + bibshelf | [] | + binutils | | + bison | | + bison-runtime | [] | + bluez-pin | [] [] | + bombono-dvd | | + buzztard | | + cflow | | + clisp | | + coreutils | [] [] | + cpio | | + cppi | | + cpplib | [] | + cryptsetup | | + dfarc | | + dialog | [] [] | + dico | | + diffutils | [] | + dink | | + doodle | | + e2fsprogs | [] | + enscript | [] | + exif | | + fetchmail | [] | + findutils | [] | + flex | [] | + freedink | | + gas | | + gawk | [] [] | + gcal | [] | + gcc | | + gettext-examples | [] [] [] [] | + gettext-runtime | [] [] | + gettext-tools | [] [] | + gip | [] | + gjay | | + gliv | [] | + glunarclock | [] [] | + gnubiff | | + gnucash | [] | + gnuedu | | + gnulib | | + gnunet | | + gnunet-gtk | | + gnutls | | + gold | | + gpe-aerial | | + gpe-beam | | + gpe-bluetooth | | + gpe-calendar | | + gpe-clock | [] | + gpe-conf | | + gpe-contacts | | + gpe-edit | | + gpe-filemanager | | + gpe-go | | + gpe-login | | + gpe-ownerinfo | [] | + gpe-package | | + gpe-sketchbook | | + gpe-su | [] | + gpe-taskmanager | [] | + gpe-timesheet | [] | + gpe-today | [] | + gpe-todo | | + gphoto2 | | + gprof | [] | + gpsdrive | | + gramadoir | | + grep | | + grub | [] [] | + gsasl | | + gss | | + gst-plugins-bad | [] | + gst-plugins-base | [] | + gst-plugins-good | [] | + gst-plugins-ugly | [] | + gstreamer | [] [] [] | + gtick | | + gtkam | [] | + gtkorphan | [] | + gtkspell | [] [] [] | + gutenprint | | + hello | [] | + help2man | | + hylafax | | + idutils | | + indent | [] [] | + iso_15924 | | + iso_3166 | [] [] [] [] [] [] [] | + iso_3166_2 | | + iso_4217 | | + iso_639 | [] [] [] [] | + iso_639_3 | | + jwhois | | + kbd | | + keytouch | [] | + keytouch-editor | | + keytouch-keyboa... | [] | + klavaro | [] | + latrine | | + ld | [] | + leafpad | [] [] | + libc | [] [] | + libexif | () | + libextractor | | + libgnutls | | + libgpewidget | | + libgpg-error | | + libgphoto2 | | + libgphoto2_port | | + libgsasl | | + libiconv | [] | + libidn | | + lifelines | | + liferea | [] [] | + lilypond | | + linkdr | [] | + lordsawar | | + lprng | | + lynx | [] | + m4 | | + mailfromd | | + mailutils | | + make | | + man-db | | + man-db-manpages | | + minicom | | + mkisofs | | + myserver | | + nano | [] [] | + opcodes | | + parted | | + pies | | + popt | | + psmisc | | + pspp | [] | + pwdutils | | + radius | [] | + recode | [] [] | + rosegarden | | + rpm | | + rush | | + sarg | | + screem | | + scrollkeeper | [] [] [] | + sed | [] [] | + sharutils | [] [] | + shishi | | + skencil | | + solfege | | + solfege-manual | | + soundtracker | | + sp | | + sysstat | | + tar | [] | + texinfo | | + tin | | + unicode-han-tra... | | + unicode-transla... | | + util-linux-ng | [] | + vice | | + vmm | | + vorbis-tools | | + wastesedge | | + wdiff | | + wget | [] [] | + wyslij-po | | + xchat | [] [] [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] | + +--------------------------------------------------+ + af am an ar as ast az be be@latin bg bn_IN bs ca + 6 0 1 2 3 19 1 10 3 28 3 1 38 + + crh cs da de el en en_GB en_ZA eo es et eu fa + +-------------------------------------------------+ + a2ps | [] [] [] [] [] [] [] | + aegis | [] [] [] | + ant-phone | [] () | + anubis | [] [] | + aspell | [] [] [] [] [] | + bash | [] [] [] | + bfd | [] | + bibshelf | [] [] [] | + binutils | [] | + bison | [] [] | + bison-runtime | [] [] [] [] | + bluez-pin | [] [] [] [] [] [] | + bombono-dvd | [] | + buzztard | [] [] [] | + cflow | [] [] | + clisp | [] [] [] [] | + coreutils | [] [] [] [] | + cpio | | + cppi | | + cpplib | [] [] [] | + cryptsetup | [] | + dfarc | [] [] [] | + dialog | [] [] [] [] [] | + dico | | + diffutils | [] [] [] [] [] [] | + dink | [] [] [] | + doodle | [] | + e2fsprogs | [] [] [] | + enscript | [] [] [] | + exif | () [] [] | + fetchmail | [] [] () [] [] [] | + findutils | [] [] [] | + flex | [] [] | + freedink | [] [] [] | + gas | [] | + gawk | [] [] [] | + gcal | [] | + gcc | [] [] | + gettext-examples | [] [] [] [] | + gettext-runtime | [] [] [] [] | + gettext-tools | [] [] [] | + gip | [] [] [] [] | + gjay | [] | + gliv | [] [] [] | + glunarclock | [] [] | + gnubiff | () | + gnucash | [] () () () () | + gnuedu | [] [] | + gnulib | [] [] | + gnunet | | + gnunet-gtk | [] | + gnutls | [] [] | + gold | [] | + gpe-aerial | [] [] [] [] | + gpe-beam | [] [] [] [] | + gpe-bluetooth | [] [] | + gpe-calendar | [] | + gpe-clock | [] [] [] [] | + gpe-conf | [] [] [] | + gpe-contacts | [] [] [] | + gpe-edit | [] [] | + gpe-filemanager | [] [] [] | + gpe-go | [] [] [] [] | + gpe-login | [] [] | + gpe-ownerinfo | [] [] [] [] | + gpe-package | [] [] [] | + gpe-sketchbook | [] [] [] [] | + gpe-su | [] [] [] [] | + gpe-taskmanager | [] [] [] [] | + gpe-timesheet | [] [] [] [] | + gpe-today | [] [] [] [] | + gpe-todo | [] [] [] | + gphoto2 | [] [] () [] [] [] | + gprof | [] [] [] | + gpsdrive | [] [] [] | + gramadoir | [] [] [] | + grep | [] | + grub | [] [] | + gsasl | [] | + gss | | + gst-plugins-bad | [] [] [] [] [] | + gst-plugins-base | [] [] [] [] [] | + gst-plugins-good | [] [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] | + gtick | [] () [] | + gtkam | [] [] () [] [] | + gtkorphan | [] [] [] [] | + gtkspell | [] [] [] [] [] [] [] | + gutenprint | [] [] [] | + hello | [] [] [] [] | + help2man | [] | + hylafax | [] [] | + idutils | [] [] | + indent | [] [] [] [] [] [] [] | + iso_15924 | [] () [] [] | + iso_3166 | [] [] [] [] () [] [] [] () | + iso_3166_2 | () | + iso_4217 | [] [] [] () [] [] | + iso_639 | [] [] [] [] () [] [] | + iso_639_3 | [] | + jwhois | [] | + kbd | [] [] [] [] [] | + keytouch | [] [] | + keytouch-editor | [] [] | + keytouch-keyboa... | [] | + klavaro | [] [] [] [] | + latrine | [] () | + ld | [] [] | + leafpad | [] [] [] [] [] [] | + libc | [] [] [] [] | + libexif | [] [] () | + libextractor | | + libgnutls | [] | + libgpewidget | [] [] | + libgpg-error | [] [] | + libgphoto2 | [] () | + libgphoto2_port | [] () [] | + libgsasl | | + libiconv | [] [] [] [] [] | + libidn | [] [] [] | + lifelines | [] () | + liferea | [] [] [] [] [] | + lilypond | [] [] [] | + linkdr | [] [] [] | + lordsawar | [] | + lprng | | + lynx | [] [] [] [] | + m4 | [] [] [] [] | + mailfromd | | + mailutils | [] | + make | [] [] [] | + man-db | | + man-db-manpages | | + minicom | [] [] [] [] | + mkisofs | | + myserver | | + nano | [] [] [] | + opcodes | [] [] | + parted | [] [] | + pies | | + popt | [] [] [] [] [] | + psmisc | [] [] [] | + pspp | [] | + pwdutils | [] | + radius | [] | + recode | [] [] [] [] [] [] | + rosegarden | () () () | + rpm | [] [] [] | + rush | | + sarg | | + screem | | + scrollkeeper | [] [] [] [] [] | + sed | [] [] [] [] [] [] | + sharutils | [] [] [] [] | + shishi | | + skencil | [] () [] | + solfege | [] [] [] | + solfege-manual | [] [] | + soundtracker | [] [] [] | + sp | [] | + sysstat | [] [] [] | + tar | [] [] [] [] | + texinfo | [] [] [] | + tin | [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux-ng | [] [] [] [] | + vice | () () | + vmm | [] | + vorbis-tools | [] [] | + wastesedge | [] | + wdiff | [] [] | + wget | [] [] [] | + wyslij-po | | + xchat | [] [] [] [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] [] [] | + +-------------------------------------------------+ + crh cs da de el en en_GB en_ZA eo es et eu fa + 5 64 105 117 18 1 8 0 28 89 18 19 0 + + fi fr ga gl gu he hi hr hu hy id is it ja ka kn + +----------------------------------------------------+ + a2ps | [] [] [] [] | + aegis | [] [] | + ant-phone | [] [] | + anubis | [] [] [] [] | + aspell | [] [] [] [] | + bash | [] [] [] [] | + bfd | [] [] [] | + bibshelf | [] [] [] [] [] | + binutils | [] [] [] | + bison | [] [] [] [] | + bison-runtime | [] [] [] [] [] [] | + bluez-pin | [] [] [] [] [] [] [] [] | + bombono-dvd | [] | + buzztard | [] | + cflow | [] [] [] | + clisp | [] | + coreutils | [] [] [] [] [] | + cpio | [] [] [] [] | + cppi | [] [] | + cpplib | [] [] [] | + cryptsetup | [] [] [] | + dfarc | [] [] [] | + dialog | [] [] [] [] [] [] [] | + dico | | + diffutils | [] [] [] [] [] [] [] [] [] | + dink | [] | + doodle | [] [] | + e2fsprogs | [] [] | + enscript | [] [] [] [] | + exif | [] [] [] [] [] [] | + fetchmail | [] [] [] [] | + findutils | [] [] [] [] [] [] | + flex | [] [] [] | + freedink | [] [] [] | + gas | [] [] | + gawk | [] [] [] [] () [] | + gcal | [] | + gcc | [] | + gettext-examples | [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] | + gettext-tools | [] [] [] [] | + gip | [] [] [] [] [] [] | + gjay | [] | + gliv | [] () | + glunarclock | [] [] [] [] | + gnubiff | () [] () | + gnucash | () () () () () [] | + gnuedu | [] [] | + gnulib | [] [] [] [] [] [] | + gnunet | | + gnunet-gtk | [] | + gnutls | [] [] | + gold | [] [] | + gpe-aerial | [] [] [] | + gpe-beam | [] [] [] [] | + gpe-bluetooth | [] [] [] [] | + gpe-calendar | [] [] | + gpe-clock | [] [] [] [] [] | + gpe-conf | [] [] [] [] | + gpe-contacts | [] [] [] [] | + gpe-edit | [] [] [] | + gpe-filemanager | [] [] [] [] | + gpe-go | [] [] [] [] [] | + gpe-login | [] [] [] | + gpe-ownerinfo | [] [] [] [] [] | + gpe-package | [] [] [] | + gpe-sketchbook | [] [] [] [] | + gpe-su | [] [] [] [] [] [] | + gpe-taskmanager | [] [] [] [] [] | + gpe-timesheet | [] [] [] [] [] | + gpe-today | [] [] [] [] [] [] [] | + gpe-todo | [] [] [] | + gphoto2 | [] [] [] [] [] [] | + gprof | [] [] [] [] | + gpsdrive | [] [] [] | + gramadoir | [] [] [] | + grep | [] [] | + grub | [] [] [] [] | + gsasl | [] [] [] [] [] | + gss | [] [] [] [] [] | + gst-plugins-bad | [] [] [] [] [] [] | + gst-plugins-base | [] [] [] [] [] [] | + gst-plugins-good | [] [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] | + gtick | [] [] [] [] [] | + gtkam | [] [] [] [] [] | + gtkorphan | [] [] [] | + gtkspell | [] [] [] [] [] [] [] [] [] | + gutenprint | [] [] [] [] | + hello | [] [] [] | + help2man | [] [] | + hylafax | [] | + idutils | [] [] [] [] [] [] | + indent | [] [] [] [] [] [] [] [] | + iso_15924 | [] () [] [] | + iso_3166 | [] () [] [] [] [] [] [] [] [] [] [] | + iso_3166_2 | () [] [] [] | + iso_4217 | [] () [] [] [] [] | + iso_639 | [] () [] [] [] [] [] [] [] | + iso_639_3 | () [] [] | + jwhois | [] [] [] [] [] | + kbd | [] [] | + keytouch | [] [] [] [] [] [] | + keytouch-editor | [] [] [] [] [] | + keytouch-keyboa... | [] [] [] [] [] | + klavaro | [] [] | + latrine | [] [] [] | + ld | [] [] [] [] | + leafpad | [] [] [] [] [] [] [] () | + libc | [] [] [] [] [] | + libexif | [] | + libextractor | | + libgnutls | [] [] | + libgpewidget | [] [] [] [] | + libgpg-error | [] [] | + libgphoto2 | [] [] [] | + libgphoto2_port | [] [] [] | + libgsasl | [] [] [] [] [] | + libiconv | [] [] [] [] [] [] | + libidn | [] [] [] [] | + lifelines | () | + liferea | [] [] [] [] | + lilypond | [] [] | + linkdr | [] [] [] [] [] | + lordsawar | | + lprng | [] | + lynx | [] [] [] [] [] | + m4 | [] [] [] [] [] [] | + mailfromd | | + mailutils | [] [] | + make | [] [] [] [] [] [] [] [] [] | + man-db | [] [] | + man-db-manpages | [] | + minicom | [] [] [] [] [] | + mkisofs | [] [] [] [] | + myserver | | + nano | [] [] [] [] [] [] | + opcodes | [] [] [] [] | + parted | [] [] [] [] | + pies | | + popt | [] [] [] [] [] [] [] [] [] | + psmisc | [] [] [] | + pspp | | + pwdutils | [] [] | + radius | [] [] | + recode | [] [] [] [] [] [] [] [] | + rosegarden | () () () () () | + rpm | [] [] | + rush | | + sarg | [] | + screem | [] [] | + scrollkeeper | [] [] [] [] | + sed | [] [] [] [] [] [] [] [] | + sharutils | [] [] [] [] [] [] [] | + shishi | [] | + skencil | [] | + solfege | [] [] [] [] | + solfege-manual | [] [] | + soundtracker | [] [] | + sp | [] () | + sysstat | [] [] [] [] [] | + tar | [] [] [] [] [] [] [] | + texinfo | [] [] [] [] | + tin | [] | + unicode-han-tra... | | + unicode-transla... | [] [] | + util-linux-ng | [] [] [] [] [] [] | + vice | () () () | + vmm | [] | + vorbis-tools | [] | + wastesedge | () () | + wdiff | [] | + wget | [] [] [] [] [] [] [] [] | + wyslij-po | [] [] [] | + xchat | [] [] [] [] [] [] [] [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] [] | + +----------------------------------------------------+ + fi fr ga gl gu he hi hr hu hy id is it ja ka kn + 105 121 53 20 4 8 3 5 53 2 120 5 84 67 0 4 + + ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne + +-----------------------------------------------+ + a2ps | [] | + aegis | | + ant-phone | | + anubis | [] [] | + aspell | [] | + bash | | + bfd | | + bibshelf | [] [] | + binutils | | + bison | [] | + bison-runtime | [] [] [] [] [] | + bluez-pin | [] [] [] [] [] | + bombono-dvd | | + buzztard | | + cflow | | + clisp | | + coreutils | [] | + cpio | | + cppi | | + cpplib | | + cryptsetup | | + dfarc | [] | + dialog | [] [] [] [] [] | + dico | | + diffutils | [] [] | + dink | | + doodle | | + e2fsprogs | | + enscript | | + exif | [] | + fetchmail | | + findutils | | + flex | | + freedink | [] | + gas | | + gawk | | + gcal | | + gcc | | + gettext-examples | [] [] [] [] | + gettext-runtime | [] | + gettext-tools | [] | + gip | [] [] | + gjay | | + gliv | | + glunarclock | [] | + gnubiff | | + gnucash | () () () () | + gnuedu | | + gnulib | | + gnunet | | + gnunet-gtk | | + gnutls | [] | + gold | | + gpe-aerial | [] | + gpe-beam | [] | + gpe-bluetooth | [] [] | + gpe-calendar | [] | + gpe-clock | [] [] [] [] [] | + gpe-conf | [] [] | + gpe-contacts | [] [] | + gpe-edit | [] | + gpe-filemanager | [] [] | + gpe-go | [] [] [] | + gpe-login | [] | + gpe-ownerinfo | [] [] | + gpe-package | [] [] | + gpe-sketchbook | [] [] | + gpe-su | [] [] [] [] [] [] | + gpe-taskmanager | [] [] [] [] [] [] | + gpe-timesheet | [] [] | + gpe-today | [] [] [] [] | + gpe-todo | [] [] | + gphoto2 | | + gprof | [] | + gpsdrive | | + gramadoir | | + grep | | + grub | | + gsasl | | + gss | | + gst-plugins-bad | [] [] [] [] | + gst-plugins-base | [] [] | + gst-plugins-good | [] [] | + gst-plugins-ugly | [] [] [] [] [] | + gstreamer | | + gtick | | + gtkam | [] | + gtkorphan | [] [] | + gtkspell | [] [] [] [] [] [] [] | + gutenprint | | + hello | [] [] [] | + help2man | | + hylafax | | + idutils | | + indent | | + iso_15924 | [] [] | + iso_3166 | [] [] () [] [] [] [] [] | + iso_3166_2 | | + iso_4217 | [] [] | + iso_639 | [] [] | + iso_639_3 | [] | + jwhois | [] | + kbd | | + keytouch | [] | + keytouch-editor | [] | + keytouch-keyboa... | [] | + klavaro | [] | + latrine | [] | + ld | | + leafpad | [] [] [] | + libc | [] | + libexif | | + libextractor | | + libgnutls | [] | + libgpewidget | [] [] | + libgpg-error | | + libgphoto2 | | + libgphoto2_port | | + libgsasl | | + libiconv | | + libidn | | + lifelines | | + liferea | | + lilypond | | + linkdr | | + lordsawar | | + lprng | | + lynx | | + m4 | | + mailfromd | | + mailutils | | + make | [] | + man-db | | + man-db-manpages | | + minicom | [] | + mkisofs | | + myserver | | + nano | [] [] | + opcodes | | + parted | | + pies | | + popt | [] [] [] | + psmisc | | + pspp | | + pwdutils | | + radius | | + recode | | + rosegarden | | + rpm | | + rush | | + sarg | | + screem | | + scrollkeeper | [] [] | + sed | | + sharutils | | + shishi | | + skencil | | + solfege | [] | + solfege-manual | | + soundtracker | | + sp | | + sysstat | [] | + tar | [] | + texinfo | [] | + tin | | + unicode-han-tra... | | + unicode-transla... | | + util-linux-ng | | + vice | | + vmm | | + vorbis-tools | | + wastesedge | | + wdiff | | + wget | [] | + wyslij-po | | + xchat | [] [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] | + +-----------------------------------------------+ + ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne + 20 5 10 1 13 48 4 2 2 4 24 10 20 3 1 + + nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr + +---------------------------------------------------+ + a2ps | [] [] [] [] [] [] [] [] | + aegis | [] [] [] | + ant-phone | [] [] | + anubis | [] [] [] | + aspell | [] [] [] [] [] | + bash | [] [] | + bfd | [] | + bibshelf | [] [] | + binutils | [] [] | + bison | [] [] [] | + bison-runtime | [] [] [] [] [] [] [] | + bluez-pin | [] [] [] [] [] [] [] [] | + bombono-dvd | [] () | + buzztard | [] [] | + cflow | [] | + clisp | [] [] | + coreutils | [] [] [] [] [] [] | + cpio | [] [] [] | + cppi | [] | + cpplib | [] | + cryptsetup | [] | + dfarc | [] | + dialog | [] [] [] [] | + dico | [] | + diffutils | [] [] [] [] [] [] | + dink | () | + doodle | [] [] | + e2fsprogs | [] [] | + enscript | [] [] [] [] [] | + exif | [] [] [] () [] | + fetchmail | [] [] [] [] | + findutils | [] [] [] [] [] | + flex | [] [] [] [] [] | + freedink | [] [] | + gas | | + gawk | [] [] [] [] | + gcal | | + gcc | [] | + gettext-examples | [] [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] [] [] [] | + gettext-tools | [] [] [] [] [] [] | + gip | [] [] [] [] [] | + gjay | | + gliv | [] [] [] [] [] [] | + glunarclock | [] [] [] [] [] | + gnubiff | [] () | + gnucash | [] () () () | + gnuedu | [] | + gnulib | [] [] [] [] | + gnunet | | + gnunet-gtk | | + gnutls | [] [] | + gold | | + gpe-aerial | [] [] [] [] [] [] [] | + gpe-beam | [] [] [] [] [] [] [] | + gpe-bluetooth | [] [] | + gpe-calendar | [] [] [] [] | + gpe-clock | [] [] [] [] [] [] [] [] | + gpe-conf | [] [] [] [] [] [] [] | + gpe-contacts | [] [] [] [] [] | + gpe-edit | [] [] [] | + gpe-filemanager | [] [] [] | + gpe-go | [] [] [] [] [] [] [] [] | + gpe-login | [] [] | + gpe-ownerinfo | [] [] [] [] [] [] [] [] | + gpe-package | [] [] | + gpe-sketchbook | [] [] [] [] [] [] [] | + gpe-su | [] [] [] [] [] [] [] [] | + gpe-taskmanager | [] [] [] [] [] [] [] [] | + gpe-timesheet | [] [] [] [] [] [] [] [] | + gpe-today | [] [] [] [] [] [] [] [] | + gpe-todo | [] [] [] [] [] | + gphoto2 | [] [] [] [] [] [] [] [] | + gprof | [] [] [] | + gpsdrive | [] [] | + gramadoir | [] [] | + grep | [] [] [] [] | + grub | [] [] [] | + gsasl | [] [] [] [] | + gss | [] [] [] | + gst-plugins-bad | [] [] [] [] [] [] | + gst-plugins-base | [] [] [] [] [] | + gst-plugins-good | [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] | + gtick | [] [] [] | + gtkam | [] [] [] [] [] [] | + gtkorphan | [] | + gtkspell | [] [] [] [] [] [] [] [] [] [] | + gutenprint | [] [] | + hello | [] [] [] [] | + help2man | [] [] | + hylafax | [] | + idutils | [] [] [] [] [] | + indent | [] [] [] [] [] [] [] | + iso_15924 | [] [] [] [] | + iso_3166 | [] [] [] [] [] () [] [] [] [] [] [] [] [] | + iso_3166_2 | [] [] [] | + iso_4217 | [] [] [] [] [] [] [] [] | + iso_639 | [] [] [] [] [] [] [] [] [] | + iso_639_3 | [] [] | + jwhois | [] [] [] [] | + kbd | [] [] [] | + keytouch | [] [] [] | + keytouch-editor | [] [] [] | + keytouch-keyboa... | [] [] [] | + klavaro | [] [] | + latrine | [] [] | + ld | | + leafpad | [] [] [] [] [] [] [] [] [] | + libc | [] [] [] [] | + libexif | [] [] () [] | + libextractor | | + libgnutls | [] [] | + libgpewidget | [] [] [] | + libgpg-error | [] [] | + libgphoto2 | [] [] | + libgphoto2_port | [] [] [] [] [] | + libgsasl | [] [] [] [] [] | + libiconv | [] [] [] [] [] | + libidn | [] [] | + lifelines | [] [] | + liferea | [] [] [] [] [] () () [] | + lilypond | [] | + linkdr | [] [] [] | + lordsawar | | + lprng | [] | + lynx | [] [] [] | + m4 | [] [] [] [] [] | + mailfromd | [] | + mailutils | [] | + make | [] [] [] [] | + man-db | [] [] [] | + man-db-manpages | [] [] [] | + minicom | [] [] [] [] | + mkisofs | [] [] [] | + myserver | | + nano | [] [] [] [] | + opcodes | [] [] | + parted | [] [] [] [] | + pies | [] | + popt | [] [] [] [] | + psmisc | [] [] [] | + pspp | [] [] | + pwdutils | [] | + radius | [] [] [] | + recode | [] [] [] [] [] [] [] [] | + rosegarden | () () | + rpm | [] [] [] | + rush | [] [] | + sarg | | + screem | | + scrollkeeper | [] [] [] [] [] [] [] [] | + sed | [] [] [] [] [] [] [] [] [] | + sharutils | [] [] [] [] | + shishi | [] | + skencil | [] [] | + solfege | [] [] [] [] | + solfege-manual | [] [] [] | + soundtracker | [] | + sp | | + sysstat | [] [] [] [] | + tar | [] [] [] [] | + texinfo | [] [] [] [] | + tin | [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux-ng | [] [] [] [] [] | + vice | [] | + vmm | [] | + vorbis-tools | [] [] | + wastesedge | [] | + wdiff | [] [] | + wget | [] [] [] [] [] [] [] | + wyslij-po | [] [] [] | + xchat | [] [] [] [] [] [] [] [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] | + +---------------------------------------------------+ + nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr + 135 10 4 7 105 1 29 62 47 91 3 54 46 9 37 + + sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW + +---------------------------------------------------+ + a2ps | [] [] [] [] [] | 27 + aegis | [] | 9 + ant-phone | [] [] [] [] | 9 + anubis | [] [] [] [] | 15 + aspell | [] [] [] | 20 + bash | [] [] [] | 12 + bfd | [] | 6 + bibshelf | [] [] [] | 16 + binutils | [] [] | 8 + bison | [] [] | 12 + bison-runtime | [] [] [] [] [] [] | 29 + bluez-pin | [] [] [] [] [] [] [] [] | 37 + bombono-dvd | [] | 4 + buzztard | [] | 7 + cflow | [] [] [] | 9 + clisp | | 10 + coreutils | [] [] [] [] | 22 + cpio | [] [] [] [] [] [] | 13 + cppi | [] [] | 5 + cpplib | [] [] [] [] [] [] | 14 + cryptsetup | [] [] | 7 + dfarc | [] | 9 + dialog | [] [] [] [] [] [] [] | 30 + dico | [] | 2 + diffutils | [] [] [] [] [] [] | 30 + dink | | 4 + doodle | [] [] | 7 + e2fsprogs | [] [] [] | 11 + enscript | [] [] [] [] | 17 + exif | [] [] [] | 16 + fetchmail | [] [] [] | 17 + findutils | [] [] [] [] [] | 20 + flex | [] [] [] [] | 15 + freedink | [] | 10 + gas | [] | 4 + gawk | [] [] [] [] | 18 + gcal | [] [] | 5 + gcc | [] [] [] | 7 + gettext-examples | [] [] [] [] [] [] [] | 34 + gettext-runtime | [] [] [] [] [] [] [] | 29 + gettext-tools | [] [] [] [] [] [] | 22 + gip | [] [] [] [] | 22 + gjay | [] | 3 + gliv | [] [] [] | 14 + glunarclock | [] [] [] [] [] | 19 + gnubiff | [] [] | 4 + gnucash | () [] () [] () | 10 + gnuedu | [] [] | 7 + gnulib | [] [] [] [] | 16 + gnunet | [] | 1 + gnunet-gtk | [] [] [] | 5 + gnutls | [] [] [] | 10 + gold | [] | 4 + gpe-aerial | [] [] [] | 18 + gpe-beam | [] [] [] | 19 + gpe-bluetooth | [] [] [] | 13 + gpe-calendar | [] [] [] [] | 12 + gpe-clock | [] [] [] [] [] | 28 + gpe-conf | [] [] [] [] | 20 + gpe-contacts | [] [] [] | 17 + gpe-edit | [] [] [] | 12 + gpe-filemanager | [] [] [] [] | 16 + gpe-go | [] [] [] [] [] | 25 + gpe-login | [] [] [] | 11 + gpe-ownerinfo | [] [] [] [] [] | 25 + gpe-package | [] [] [] | 13 + gpe-sketchbook | [] [] [] | 20 + gpe-su | [] [] [] [] [] | 30 + gpe-taskmanager | [] [] [] [] [] | 29 + gpe-timesheet | [] [] [] [] [] | 25 + gpe-today | [] [] [] [] [] [] | 30 + gpe-todo | [] [] [] [] | 17 + gphoto2 | [] [] [] [] [] | 24 + gprof | [] [] [] | 15 + gpsdrive | [] [] [] | 11 + gramadoir | [] [] [] | 11 + grep | [] [] [] | 10 + grub | [] [] [] | 14 + gsasl | [] [] [] [] | 14 + gss | [] [] [] | 11 + gst-plugins-bad | [] [] [] [] | 26 + gst-plugins-base | [] [] [] [] [] | 24 + gst-plugins-good | [] [] [] [] | 24 + gst-plugins-ugly | [] [] [] [] [] | 29 + gstreamer | [] [] [] [] | 22 + gtick | [] [] [] | 13 + gtkam | [] [] [] | 20 + gtkorphan | [] [] [] | 14 + gtkspell | [] [] [] [] [] [] [] [] [] | 45 + gutenprint | [] | 10 + hello | [] [] [] [] [] [] | 21 + help2man | [] [] | 7 + hylafax | [] | 5 + idutils | [] [] [] [] | 17 + indent | [] [] [] [] [] [] | 30 + iso_15924 | () [] () [] [] | 16 + iso_3166 | [] [] () [] [] () [] [] [] () | 53 + iso_3166_2 | () [] () [] | 9 + iso_4217 | [] () [] [] () [] [] | 26 + iso_639 | [] [] [] () [] () [] [] [] [] | 38 + iso_639_3 | [] () | 8 + jwhois | [] [] [] [] [] | 16 + kbd | [] [] [] [] [] | 15 + keytouch | [] [] [] | 16 + keytouch-editor | [] [] [] | 14 + keytouch-keyboa... | [] [] [] | 14 + klavaro | [] | 11 + latrine | [] [] [] | 10 + ld | [] [] [] [] | 11 + leafpad | [] [] [] [] [] [] | 33 + libc | [] [] [] [] [] | 21 + libexif | [] () | 7 + libextractor | [] | 1 + libgnutls | [] [] [] | 9 + libgpewidget | [] [] [] | 14 + libgpg-error | [] [] [] | 9 + libgphoto2 | [] [] | 8 + libgphoto2_port | [] [] [] [] | 14 + libgsasl | [] [] [] | 13 + libiconv | [] [] [] [] | 21 + libidn | () [] [] | 11 + lifelines | [] | 4 + liferea | [] [] [] | 21 + lilypond | [] | 7 + linkdr | [] [] [] [] [] | 17 + lordsawar | | 1 + lprng | [] | 3 + lynx | [] [] [] [] | 17 + m4 | [] [] [] [] | 19 + mailfromd | [] [] | 3 + mailutils | [] | 5 + make | [] [] [] [] | 21 + man-db | [] [] [] | 8 + man-db-manpages | | 4 + minicom | [] [] | 16 + mkisofs | [] [] | 9 + myserver | | 0 + nano | [] [] [] [] | 21 + opcodes | [] [] [] | 11 + parted | [] [] [] [] [] | 15 + pies | [] [] | 3 + popt | [] [] [] [] [] [] | 27 + psmisc | [] [] | 11 + pspp | | 4 + pwdutils | [] [] | 6 + radius | [] [] | 9 + recode | [] [] [] [] | 28 + rosegarden | () | 0 + rpm | [] [] [] | 11 + rush | [] [] | 4 + sarg | | 1 + screem | [] | 3 + scrollkeeper | [] [] [] [] [] | 27 + sed | [] [] [] [] [] | 30 + sharutils | [] [] [] [] [] | 22 + shishi | [] | 3 + skencil | [] [] | 7 + solfege | [] [] [] [] | 16 + solfege-manual | [] | 8 + soundtracker | [] [] [] | 9 + sp | [] | 3 + sysstat | [] [] | 15 + tar | [] [] [] [] [] [] | 23 + texinfo | [] [] [] [] [] | 17 + tin | | 4 + unicode-han-tra... | | 0 + unicode-transla... | | 2 + util-linux-ng | [] [] [] [] | 20 + vice | () () | 1 + vmm | [] | 4 + vorbis-tools | [] | 6 + wastesedge | | 2 + wdiff | [] [] | 7 + wget | [] [] [] [] [] | 26 + wyslij-po | [] [] | 8 + xchat | [] [] [] [] [] [] | 36 + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | 63 + xkeyboard-config | [] [] [] | 22 + +---------------------------------------------------+ + 85 teams sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW + 178 domains 119 1 3 3 0 10 65 51 155 17 98 7 41 2618 + + Some counters in the preceding matrix are higher than the number of +visible blocks let us expect. This is because a few extra PO files are +used for implementing regional variants of languages, or language +dialects. + + For a PO file in the matrix above to be effective, the package to +which it applies should also have been internationalized and +distributed as such by its maintainer. There might be an observable +lag between the mere existence a PO file and its wide availability in a +distribution. + + If June 2010 seems to be old, you may fetch a more recent copy of +this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date +matrix with full percentage details can be found at +`http://translationproject.org/extra/matrix.html'. + +1.5 Using `gettext' in new packages +=================================== + +If you are writing a freely available program and want to +internationalize it you are welcome to use GNU `gettext' in your +package. Of course you have to respect the GNU Library General Public +License which covers the use of the GNU `gettext' library. This means +in particular that even non-free programs can use `libintl' as a shared +library, whereas only free software can use `libintl' as a static +library or use modified versions of `libintl'. + + Once the sources are changed appropriately and the setup can handle +the use of `gettext' the only thing missing are the translations. The +Free Translation Project is also available for packages which are not +developed inside the GNU project. Therefore the information given above +applies also for every other Free Software Project. Contact +`coordinator@translationproject.org' to make the `.pot' files available +to the translation teams. + diff --git a/third-party/yasm/yasm-1.3.0/AUTHORS b/third-party/yasm/yasm-1.3.0/AUTHORS new file mode 100644 index 0000000000..6c4e641747 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/AUTHORS @@ -0,0 +1,2 @@ +Peter Johnson +Michael Urman diff --git a/third-party/yasm/yasm-1.3.0/Artistic.txt b/third-party/yasm/yasm-1.3.0/Artistic.txt new file mode 100644 index 0000000000..5f221241e8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Artistic.txt @@ -0,0 +1,131 @@ + + + + + The "Artistic License" + + Preamble + +The intent of this document is to state the conditions under which a +Package may be copied, such that the Copyright Holder maintains some +semblance of artistic control over the development of the package, +while giving the users of the package the right to use and distribute +the Package in a more-or-less customary fashion, plus the right to make +reasonable modifications. + +Definitions: + + "Package" refers to the collection of files distributed by the + Copyright Holder, and derivatives of that collection of files + created through textual modification. + + "Standard Version" refers to such a Package if it has not been + modified, or has been modified in accordance with the wishes + of the Copyright Holder as specified below. + + "Copyright Holder" is whoever is named in the copyright or + copyrights for the package. + + "You" is you, if you're thinking about copying or distributing + this Package. + + "Reasonable copying fee" is whatever you can justify on the + basis of media cost, duplication charges, time of people involved, + and so on. (You will not be required to justify it to the + Copyright Holder, but only to the computing community at large + as a market that must bear the fee.) + + "Freely Available" means that no fee is charged for the item + itself, though there may be fees involved in handling the item. + It also means that recipients of the item may redistribute it + under the same conditions they received it. + +1. You may make and give away verbatim copies of the source form of the +Standard Version of this Package without restriction, provided that you +duplicate all of the original copyright notices and associated disclaimers. + +2. You may apply bug fixes, portability fixes and other modifications +derived from the Public Domain or from the Copyright Holder. A Package +modified in such a way shall still be considered the Standard Version. + +3. You may otherwise modify your copy of this Package in any way, provided +that you insert a prominent notice in each changed file stating how and +when you changed that file, and provided that you do at least ONE of the +following: + + a) place your modifications in the Public Domain or otherwise make them + Freely Available, such as by posting said modifications to Usenet or + an equivalent medium, or placing the modifications on a major archive + site such as uunet.uu.net, or by allowing the Copyright Holder to include + your modifications in the Standard Version of the Package. + + b) use the modified Package only within your corporation or organization. + + c) rename any non-standard executables so the names do not conflict + with standard executables, which must also be provided, and provide + a separate manual page for each non-standard executable that clearly + documents how it differs from the Standard Version. + + d) make other distribution arrangements with the Copyright Holder. + +4. You may distribute the programs of this Package in object code or +executable form, provided that you do at least ONE of the following: + + a) distribute a Standard Version of the executables and library files, + together with instructions (in the manual page or equivalent) on where + to get the Standard Version. + + b) accompany the distribution with the machine-readable source of + the Package with your modifications. + + c) give non-standard executables non-standard names, and clearly + document the differences in manual pages (or equivalent), together + with instructions on where to get the Standard Version. + + d) make other distribution arrangements with the Copyright Holder. + +5. You may charge a reasonable copying fee for any distribution of this +Package. You may charge any fee you choose for support of this +Package. You may not charge a fee for this Package itself. However, +you may distribute this Package in aggregate with other (possibly +commercial) programs as part of a larger (possibly commercial) software +distribution provided that you do not advertise this Package as a +product of your own. You may embed this Package's interpreter within +an executable of yours (by linking); this shall be construed as a mere +form of aggregation, provided that the complete Standard Version of the +interpreter is so embedded. + +6. The scripts and library files supplied as input to or produced as +output from the programs of this Package do not automatically fall +under the copyright of this Package, but belong to whoever generated +them, and may be sold commercially, and may be aggregated with this +Package. If such scripts or library files are aggregated with this +Package via the so-called "undump" or "unexec" methods of producing a +binary executable image, then distribution of such an image shall +neither be construed as a distribution of this Package nor shall it +fall under the restrictions of Paragraphs 3 and 4, provided that you do +not represent such an executable image as a Standard Version of this +Package. + +7. C subroutines (or comparably compiled subroutines in other +languages) supplied by you and linked into this Package in order to +emulate subroutines and variables of the language defined by this +Package shall not be considered part of this Package, but are the +equivalent of input as in Paragraph 6, provided these subroutines do +not change the language in any way that would cause it to fail the +regression tests for the language. + +8. Aggregation of this Package with a commercial distribution is always +permitted provided that the use of this Package is embedded; that is, +when no overt attempt is made to make this Package's interfaces visible +to the end user of the commercial distribution. Such use shall not be +construed as a distribution of this Package. + +9. The name of the Copyright Holder may not be used to endorse or promote +products derived from this software without specific prior written permission. + +10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + The End diff --git a/third-party/yasm/yasm-1.3.0/BSD.txt b/third-party/yasm/yasm-1.3.0/BSD.txt new file mode 100644 index 0000000000..03476b75b5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/BSD.txt @@ -0,0 +1,74 @@ +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. +------------------------------------------------------------------------------- +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the author nor the names of other contributors + may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. +------------------------------------------------------------------------------- +NASM is now licensed under the 2-clause BSD license, also known as the +simplified BSD license. + + Copyright 1996-2009 the NASM Authors - All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following + conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + CONTRIBUTORS "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 COPYRIGHT OWNER 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. diff --git a/third-party/yasm/yasm-1.3.0/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/CMakeLists.txt new file mode 100644 index 0000000000..2eafe3fdec --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/CMakeLists.txt @@ -0,0 +1,47 @@ +PROJECT(yasm) +CMAKE_MINIMUM_REQUIRED(VERSION 3.5) +if (COMMAND cmake_policy) + cmake_policy(SET CMP0003 NEW) +endif (COMMAND cmake_policy) + +OPTION(BUILD_SHARED_LIBS "Build shared libraries" ON) + +# Where to look first for cmake modules +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules") + +INCLUDE(YasmMacros) +INCLUDE(VersionGen) + +OPTION(ENABLE_NLS "Enable message translations" OFF) + +OPTION(YASM_BUILD_TESTS "Enable building of tests" ON) + +IF(YASM_BUILD_TESTS) + ENABLE_TESTING() +ENDIF(YASM_BUILD_TESTS) + +# Default build type to debug if not set +IF(NOT CMAKE_BUILD_TYPE) + SET(CMAKE_BUILD_TYPE Debug CACHE STRING + "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." + FORCE) +ENDIF(NOT CMAKE_BUILD_TYPE) + +VERSION_GEN(PACKAGE_VERSION "${CMAKE_BINARY_DIR}/YASM-VERSION-FILE" "1.3.0") + +set (PACKAGE_STRING "yasm ${PACKAGE_VERSION}") + +INCLUDE_DIRECTORIES(AFTER ${CMAKE_BINARY_DIR} ${yasm_SOURCE_DIR}) + +INCLUDE(ConfigureChecks.cmake) + +ADD_SUBDIRECTORY(tools) +ADD_SUBDIRECTORY(libyasm) +ADD_SUBDIRECTORY(modules) +ADD_SUBDIRECTORY(frontends) + +INSTALL(FILES + libyasm.h + ${CMAKE_BINARY_DIR}/libyasm-stdint.h + DESTINATION include + ) diff --git a/third-party/yasm/yasm-1.3.0/COPYING b/third-party/yasm/yasm-1.3.0/COPYING new file mode 100644 index 0000000000..430673b7d1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/COPYING @@ -0,0 +1,61 @@ +Yasm is Copyright (c) 2001-2014 Peter Johnson and other Yasm developers. + +Yasm developers and/or contributors include: + Peter Johnson + Michael Urman + Brian Gladman (Visual Studio build files, other fixes) + Stanislav Karchebny (options parser) + Mathieu Monnier (SSE4 instruction patches, NASM preprocessor additions) + Anonymous "NASM64" developer (NASM preprocessor fixes) + Stephen Polkowski (x86 instruction patches) + Henryk Richter (Mach-O object format) + Ben Skeggs (patches, bug reports) + Alexei Svitkine (GAS preprocessor) + Samuel Thibault (TASM parser and frontend) + +----------------------------------- +Yasm licensing overview and summary +----------------------------------- + +Note: This document does not provide legal advice nor is it the actual +license of any part of Yasm. See the individual licenses for complete +details. Consult a lawyer for legal advice. + +The primary license of Yasm is the 2-clause BSD license. Please use this +license if you plan on submitting code to the project. + +Yasm has absolutely no warranty; not even for merchantibility or fitness +for a particular purpose. + +------- +Libyasm +------- +Libyasm is 2-clause or 3-clause BSD licensed, with the exception of +bitvect, which is triple-licensed under the Artistic license, GPL, and +LGPL. Libyasm is thus GPL and LGPL compatible. In addition, this also +means that libyasm is free for binary-only distribution as long as the +terms of the 3-clause BSD license and Artistic license (as it applies to +bitvect) are fulfilled. + +------- +Modules +------- +The modules are 2-clause or 3-clause BSD licensed. + +--------- +Frontends +--------- +The frontends are 2-clause BSD licensed. + +------------- +License Texts +------------- +The full text of all licenses are provided in separate files in the source +distribution. Each source file may include the entire license (in the case +of the BSD and Artistic licenses), or may reference the GPL or LGPL license +file. + +BSD.txt - 2-clause and 3-clause BSD licenses +Artistic.txt - Artistic license +GNU_GPL-2.0 - GNU General Public License +GNU_LGPL-2.0 - GNU Library General Public License diff --git a/third-party/yasm/yasm-1.3.0/ChangeLog b/third-party/yasm/yasm-1.3.0/ChangeLog new file mode 100644 index 0000000000..1f6ad37d73 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/ChangeLog @@ -0,0 +1,11 @@ +2014-08-10 gettextize + + * m4/gettext.m4: Upgrade to gettext-0.18.3. + * m4/iconv.m4: Upgrade to gettext-0.18.3. + * m4/lib-ld.m4: Upgrade to gettext-0.18.3. + * m4/lib-link.m4: Upgrade to gettext-0.18.3. + * m4/lib-prefix.m4: Upgrade to gettext-0.18.3. + * m4/nls.m4: Upgrade to gettext-0.18.3. + * m4/po.m4: Upgrade to gettext-0.18.3. + * m4/progtest.m4: Upgrade to gettext-0.18.3. + diff --git a/third-party/yasm/yasm-1.3.0/ConfigureChecks.cmake b/third-party/yasm/yasm-1.3.0/ConfigureChecks.cmake new file mode 100644 index 0000000000..4b05d0489d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/ConfigureChecks.cmake @@ -0,0 +1,74 @@ +INCLUDE(CheckCSourceCompiles) +INCLUDE(CheckCCompilerFlag) +INCLUDE(CheckFunctionExists) +INCLUDE(CheckIncludeFile) +INCLUDE(CheckSymbolExists) +INCLUDE(CheckTypeSize) +INCLUDE(CheckLibraryExists) + +FIND_PROGRAM(CPP_PROG NAMES cpp) + +# Platform-specific include files (POSIX, Win32) +CHECK_INCLUDE_FILE(locale.h HAVE_LOCALE_H) +CHECK_INCLUDE_FILE(libgen.h HAVE_LIBGEN_H) +CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H) +CHECK_INCLUDE_FILE(direct.h HAVE_DIRECT_H) +CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H) + +CHECK_SYMBOL_EXISTS(abort "stdlib.h" HAVE_ABORT) + +CHECK_FUNCTION_EXISTS(getcwd HAVE_GETCWD) +CHECK_FUNCTION_EXISTS(toascii HAVE_TOASCII) + +CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_LIBDL) + +IF (HAVE_LIBDL) + SET(LIBDL "dl") +ELSE (HAVE_LIBDL) + SET(LIBDL "") +ENDIF (HAVE_LIBDL) + +CONFIGURE_FILE(libyasm-stdint.h.cmake + ${CMAKE_CURRENT_BINARY_DIR}/libyasm-stdint.h) +CONFIGURE_FILE(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) + +ADD_DEFINITIONS(-DHAVE_CONFIG_H) + +INCLUDE(FindPythonInterp) +IF (NOT PYTHON_EXECUTABLE) + MESSAGE(FATAL_ERROR "Could not find Python executable") +ENDIF (NOT PYTHON_EXECUTABLE) + +IF (CMAKE_COMPILER_IS_GNUCXX) + CHECK_C_COMPILER_FLAG(-pipe C_ACCEPTS_PIPE) + CHECK_C_COMPILER_FLAG(-ansi C_ACCEPTS_ANSI) + CHECK_C_COMPILER_FLAG(-pedantic C_ACCEPTS_PEDANTIC) + CHECK_C_COMPILER_FLAG(-Wall C_ACCEPTS_WALL) + CHECK_C_COMPILER_FLAG(-Wno-unused-parameter C_ACCEPTS_WNOUNUSEDPARAM) + + IF (C_ACCEPTS_PIPE) + ADD_DEFINITIONS(-pipe) + ENDIF (C_ACCEPTS_PIPE) + + IF (C_ACCEPTS_ANSI) + ADD_DEFINITIONS(-ansi) + ENDIF (C_ACCEPTS_ANSI) + + IF (C_ACCEPTS_PEDANTIC) + ADD_DEFINITIONS(-pedantic) + ENDIF (C_ACCEPTS_PEDANTIC) + + IF (C_ACCEPTS_WALL) + ADD_DEFINITIONS(-Wall) + ENDIF (C_ACCEPTS_WALL) + + IF (C_ACCEPTS_WNOUNUSEDPARAM) + ADD_DEFINITIONS(-Wno-unused-parameter) + ENDIF (C_ACCEPTS_WNOUNUSEDPARAM) +ENDIF (CMAKE_COMPILER_IS_GNUCXX) + +# Disable some annoying Visual Studio warnings +IF (MSVC) + ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS) + ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_WARNINGS) +ENDIF (MSVC) diff --git a/third-party/yasm/yasm-1.3.0/GNU_GPL-2.0 b/third-party/yasm/yasm-1.3.0/GNU_GPL-2.0 new file mode 100644 index 0000000000..3912109b5c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/GNU_GPL-2.0 @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/third-party/yasm/yasm-1.3.0/GNU_LGPL-2.0 b/third-party/yasm/yasm-1.3.0/GNU_LGPL-2.0 new file mode 100644 index 0000000000..2e0c160212 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/GNU_LGPL-2.0 @@ -0,0 +1,481 @@ + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/third-party/yasm/yasm-1.3.0/INSTALL b/third-party/yasm/yasm-1.3.0/INSTALL new file mode 100644 index 0000000000..b42a17ac46 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/INSTALL @@ -0,0 +1,182 @@ +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. diff --git a/third-party/yasm/yasm-1.3.0/Makefile.am b/third-party/yasm/yasm-1.3.0/Makefile.am new file mode 100644 index 0000000000..b1524aa926 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Makefile.am @@ -0,0 +1,237 @@ +SUBDIRS = po . + +ACLOCAL_AMFLAGS = -I m4 +AM_YFLAGS = -d +AM_CFLAGS = @MORE_CFLAGS@ + +bin_PROGRAMS = +dist_man_MANS = +notrans_dist_man_MANS = +TESTS = +TESTS_ENVIRONMENT = +noinst_PROGRAMS = genstring + +check_PROGRAMS = test_hd + +test_hd_SOURCES = test_hd.c + +include_HEADERS = libyasm.h +nodist_include_HEADERS = libyasm-stdint.h + +noinst_HEADERS = util.h + +BUILT_SOURCES = +MAINTAINERCLEANFILES = +DISTCLEANFILES = +SUFFIXES = + +# configure.lineno doesn't clean up after itself? +CLEANFILES = configure.lineno +EXTRA_DIST = config/config.rpath + +# libyasm-stdint.h doesn't clean up after itself? +CONFIG_CLEAN_FILES = libyasm-stdint.h +CONFIG_CLEAN_FILES += YASM-VERSION-FILE +CONFIG_CLEAN_FILES += YASM-VERSION.h + +EXTRA_DIST += tools/Makefile.inc +EXTRA_DIST += libyasm/Makefile.inc +EXTRA_DIST += modules/Makefile.inc +EXTRA_DIST += frontends/Makefile.inc + +include tools/Makefile.inc + +YASM_MODULES = +lib_LIBRARIES = libyasm.a +libyasm_a_SOURCES = +nodist_libyasm_a_SOURCES = +include modules/Makefile.inc + +include libyasm/Makefile.inc +include frontends/Makefile.inc +include m4/Makefile.inc + +EXTRA_DIST += out_test.sh +EXTRA_DIST += Artistic.txt +EXTRA_DIST += BSD.txt +EXTRA_DIST += GNU_GPL-2.0 +EXTRA_DIST += GNU_LGPL-2.0 +EXTRA_DIST += splint.sh +EXTRA_DIST += YASM-VERSION-GEN.sh +EXTRA_DIST += CMakeLists.txt +EXTRA_DIST += ConfigureChecks.cmake +EXTRA_DIST += config.h.cmake +EXTRA_DIST += libyasm-stdint.h.cmake +EXTRA_DIST += cmake/CMakeLists.txt +EXTRA_DIST += cmake/modules/CMakeLists.txt +EXTRA_DIST += cmake/modules/DummyCFile.c +EXTRA_DIST += cmake/modules/VersionGen.cmake +EXTRA_DIST += cmake/modules/YasmMacros.cmake +EXTRA_DIST += frontends/CMakeLists.txt +EXTRA_DIST += frontends/tasm/CMakeLists.txt +EXTRA_DIST += frontends/vsyasm/CMakeLists.txt +EXTRA_DIST += frontends/yasm/CMakeLists.txt +EXTRA_DIST += frontends/yasm/genstring.py +EXTRA_DIST += frontends/yasm/yasm-plugin.c +EXTRA_DIST += frontends/yasm/yasm-plugin.h +EXTRA_DIST += libyasm/CMakeLists.txt +EXTRA_DIST += libyasm/cmake-module.c +EXTRA_DIST += modules/arch/CMakeLists.txt +EXTRA_DIST += modules/arch/lc3b/CMakeLists.txt +EXTRA_DIST += modules/arch/x86/CMakeLists.txt +EXTRA_DIST += modules/CMakeLists.txt +EXTRA_DIST += modules/dbgfmts/CMakeLists.txt +EXTRA_DIST += modules/dbgfmts/codeview/CMakeLists.txt +EXTRA_DIST += modules/dbgfmts/dwarf2/CMakeLists.txt +EXTRA_DIST += modules/dbgfmts/null/CMakeLists.txt +EXTRA_DIST += modules/dbgfmts/stabs/CMakeLists.txt +EXTRA_DIST += modules/listfmts/CMakeLists.txt +EXTRA_DIST += modules/listfmts/nasm/CMakeLists.txt +EXTRA_DIST += modules/objfmts/bin/CMakeLists.txt +EXTRA_DIST += modules/objfmts/CMakeLists.txt +EXTRA_DIST += modules/objfmts/coff/CMakeLists.txt +EXTRA_DIST += modules/objfmts/dbg/CMakeLists.txt +EXTRA_DIST += modules/objfmts/elf/CMakeLists.txt +EXTRA_DIST += modules/objfmts/macho/CMakeLists.txt +EXTRA_DIST += modules/objfmts/rdf/CMakeLists.txt +EXTRA_DIST += modules/objfmts/xdf/CMakeLists.txt +EXTRA_DIST += modules/parsers/CMakeLists.txt +EXTRA_DIST += modules/parsers/gas/CMakeLists.txt +EXTRA_DIST += modules/parsers/nasm/CMakeLists.txt +EXTRA_DIST += modules/preprocs/CMakeLists.txt +EXTRA_DIST += modules/preprocs/cpp/CMakeLists.txt +EXTRA_DIST += modules/preprocs/gas/CMakeLists.txt +EXTRA_DIST += modules/preprocs/nasm/CMakeLists.txt +EXTRA_DIST += modules/preprocs/raw/CMakeLists.txt +EXTRA_DIST += plugins/README +EXTRA_DIST += plugins/dbg/CMakeLists.txt +EXTRA_DIST += plugins/dbg/dbg-objfmt.c +EXTRA_DIST += plugins/dbg/init_plugin.c +EXTRA_DIST += plugins/dbg/README +EXTRA_DIST += plugins/x86/CMakeLists.txt +EXTRA_DIST += plugins/x86/init_plugin.c +EXTRA_DIST += plugins/x86/README +EXTRA_DIST += tools/CMakeLists.txt +EXTRA_DIST += tools/genmacro/CMakeLists.txt +EXTRA_DIST += tools/genperf/CMakeLists.txt +EXTRA_DIST += tools/re2c/CMakeLists.txt +EXTRA_DIST += Mkfiles/Makefile.flat +EXTRA_DIST += Mkfiles/Makefile.dj +EXTRA_DIST += Mkfiles/dj/config.h +EXTRA_DIST += Mkfiles/dj/libyasm-stdint.h +EXTRA_DIST += Mkfiles/vc9/config.h +EXTRA_DIST += Mkfiles/vc9/crt_secure_no_deprecate.vsprops +EXTRA_DIST += Mkfiles/vc9/libyasm-stdint.h +EXTRA_DIST += Mkfiles/vc9/readme.vc9.txt +EXTRA_DIST += Mkfiles/vc9/vc98_swap.py +EXTRA_DIST += Mkfiles/vc9/vsyasm.vcproj +EXTRA_DIST += Mkfiles/vc9/yasm.sln +EXTRA_DIST += Mkfiles/vc9/yasm.vcproj +EXTRA_DIST += Mkfiles/vc9/ytasm.vcproj +EXTRA_DIST += Mkfiles/vc9/yasm.rules +EXTRA_DIST += Mkfiles/vc9/genmacro/genmacro.vcproj +EXTRA_DIST += Mkfiles/vc9/genmacro/run.bat +EXTRA_DIST += Mkfiles/vc9/genmodule/genmodule.vcproj +EXTRA_DIST += Mkfiles/vc9/genmodule/run.bat +EXTRA_DIST += Mkfiles/vc9/genperf/genperf.vcproj +EXTRA_DIST += Mkfiles/vc9/genperf/run.bat +EXTRA_DIST += Mkfiles/vc9/genstring/genstring.vcproj +EXTRA_DIST += Mkfiles/vc9/genstring/run.bat +EXTRA_DIST += Mkfiles/vc9/genversion/genversion.vcproj +EXTRA_DIST += Mkfiles/vc9/genversion/run.bat +EXTRA_DIST += Mkfiles/vc9/libyasm/libyasm.vcproj +EXTRA_DIST += Mkfiles/vc9/modules/modules.vcproj +EXTRA_DIST += Mkfiles/vc9/re2c/re2c.vcproj +EXTRA_DIST += Mkfiles/vc9/re2c/run.bat +EXTRA_DIST += Mkfiles/vc10/config.h +EXTRA_DIST += Mkfiles/vc10/crt_secure_no_deprecate.props +EXTRA_DIST += Mkfiles/vc10/crt_secure_no_deprecate.vsprops +EXTRA_DIST += Mkfiles/vc10/libyasm-stdint.h +EXTRA_DIST += Mkfiles/vc10/out_copy_rename.bat +EXTRA_DIST += Mkfiles/vc10/readme.vc10.txt +EXTRA_DIST += Mkfiles/vc10/vsyasm.props +EXTRA_DIST += Mkfiles/vc10/vsyasm.targets +EXTRA_DIST += Mkfiles/vc10/vsyasm.vcxproj +EXTRA_DIST += Mkfiles/vc10/vsyasm.xml +EXTRA_DIST += Mkfiles/vc10/yasm.sln +EXTRA_DIST += Mkfiles/vc10/yasm.vcxproj +EXTRA_DIST += Mkfiles/vc10/yasm.vcxproj.filters +EXTRA_DIST += Mkfiles/vc10/ytasm.vcxproj +EXTRA_DIST += Mkfiles/vc10/genmacro/genmacro.vcxproj +EXTRA_DIST += Mkfiles/vc10/genmacro/genmacro.vcxproj.filters +EXTRA_DIST += Mkfiles/vc10/genmacro/run.bat +EXTRA_DIST += Mkfiles/vc10/genmodule/genmodule.vcxproj +EXTRA_DIST += Mkfiles/vc10/genmodule/genmodule.vcxproj.filters +EXTRA_DIST += Mkfiles/vc10/genmodule/run.bat +EXTRA_DIST += Mkfiles/vc10/genperf/genperf.vcxproj +EXTRA_DIST += Mkfiles/vc10/genperf/genperf.vcxproj.filters +EXTRA_DIST += Mkfiles/vc10/genperf/run.bat +EXTRA_DIST += Mkfiles/vc10/genstring/genstring.vcxproj +EXTRA_DIST += Mkfiles/vc10/genstring/genstring.vcxproj.filters +EXTRA_DIST += Mkfiles/vc10/genstring/run.bat +EXTRA_DIST += Mkfiles/vc10/genversion/genversion.vcxproj +EXTRA_DIST += Mkfiles/vc10/genversion/genversion.vcxproj.filters +EXTRA_DIST += Mkfiles/vc10/genversion/run.bat +EXTRA_DIST += Mkfiles/vc10/libyasm/libyasm.vcxproj +EXTRA_DIST += Mkfiles/vc10/libyasm/libyasm.vcxproj.filters +EXTRA_DIST += Mkfiles/vc10/modules/modules.vcxproj +EXTRA_DIST += Mkfiles/vc10/modules/modules.vcxproj.filters +EXTRA_DIST += Mkfiles/vc10/re2c/re2c.vcxproj +EXTRA_DIST += Mkfiles/vc10/re2c/re2c.vcxproj.filters +EXTRA_DIST += Mkfiles/vc10/re2c/run.bat +EXTRA_DIST += Mkfiles/vc12/config.h +EXTRA_DIST += Mkfiles/vc12/crt_secure_no_deprecate.props +EXTRA_DIST += Mkfiles/vc12/crt_secure_no_deprecate.vsprops +EXTRA_DIST += Mkfiles/vc12/libyasm/libyasm.vcxproj +EXTRA_DIST += Mkfiles/vc12/libyasm/libyasm.vcxproj.filters +EXTRA_DIST += Mkfiles/vc12/modules/modules.vcxproj +EXTRA_DIST += Mkfiles/vc12/modules/modules.vcxproj.filters +EXTRA_DIST += Mkfiles/vc12/out_copy_rename.bat +EXTRA_DIST += Mkfiles/vc12/readme.vc12.txt +EXTRA_DIST += Mkfiles/vc12/vsyasm.props +EXTRA_DIST += Mkfiles/vc12/vsyasm.targets +EXTRA_DIST += Mkfiles/vc12/vsyasm.vcxproj +EXTRA_DIST += Mkfiles/vc12/vsyasm.xml +EXTRA_DIST += Mkfiles/vc12/yasm.sln +EXTRA_DIST += Mkfiles/vc12/yasm.vcxproj +EXTRA_DIST += Mkfiles/vc12/yasm.vcxproj.filters +EXTRA_DIST += Mkfiles/vc12/ytasm.vcxproj + +# Until this gets fixed in automake +DISTCLEANFILES += libyasm/stamp-h libyasm/stamp-h[0-9]* + +dist-hook: YASM-VERSION-FILE YASM-VERSION.h + cp YASM-VERSION-FILE $(distdir)/version + cp YASM-VERSION.h $(distdir)/Mkfiles/dj/ + cp YASM-VERSION.h $(distdir)/Mkfiles/vc9/ + cp YASM-VERSION.h $(distdir)/Mkfiles/vc10/ + cp YASM-VERSION.h $(distdir)/Mkfiles/vc12/ + +YASM-VERSION-FILE: $(top_srcdir)/YASM-VERSION-GEN.sh + $(top_srcdir)/YASM-VERSION-GEN.sh + +distclean-local: + -rm -rf results +if HAVE_PYTHON + -rm -rf build +endif + +# Until gets fixed libyasm cross-build for target system +# use fixinstall-yasm-XXX make targets +all-local: python-build +install-exec-hook: python-install +uninstall-hook: python-uninstall + +if BUILD_MAN +MAINTAINERCLEANFILES += $(dist_man_MANS) $(notrans_dist_man_MANS) +endif + +# genstring build +genstring_SOURCES = +EXTRA_DIST += genstring.c +genstring_LDADD = genstring.$(OBJEXT) +genstring_LINK = $(CCLD_FOR_BUILD) -o $@ + +genstring.$(OBJEXT): genstring.c + $(CC_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) -c -o $@ `test -f genstring.c || echo '$(srcdir)/'`genstring.c + diff --git a/third-party/yasm/yasm-1.3.0/Makefile.in b/third-party/yasm/yasm-1.3.0/Makefile.in new file mode 100644 index 0000000000..20e00a7334 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Makefile.in @@ -0,0 +1,4241 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# These utility programs have to be built for BUILD host in cross-build. +# This makes things rather non-standard automake + +# These utility programs have to be built for BUILD host in cross-build. +# This makes things rather non-standard automake + +# These utility programs have to be built for BUILD host in cross-build. +# This makes things rather non-standard automake + +# Makefile for cpp module. +# Copied from raw preprocessor module. + +#TESTS += modules/preprocs/gas/tests/rawpp_test.sh + +# Assume objfmt_coff is included + +# Assume objfmt_coff is included + + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = yasm$(EXEEXT) ytasm$(EXEEXT) vsyasm$(EXEEXT) +TESTS = $(am__append_3) modules/arch/x86/tests/x86_test.sh \ + modules/arch/x86/tests/gas32/x86_gas32_test.sh \ + modules/arch/x86/tests/gas64/x86_gas64_test.sh \ + modules/arch/lc3b/tests/lc3b_test.sh \ + modules/parsers/gas/tests/gas_test.sh \ + modules/parsers/gas/tests/bin/gas_bin_test.sh \ + modules/parsers/nasm/tests/nasm_test.sh \ + modules/parsers/nasm/tests/worphan/nasm_worphan_test.sh \ + modules/parsers/tasm/tests/tasm_test.sh \ + modules/parsers/tasm/tests/exe/tasm_exe_test.sh \ + modules/preprocs/tasm/tests/tasmpp_test.sh \ + modules/preprocs/nasm/tests/nasmpp_test.sh \ + modules/preprocs/raw/tests/rawpp_test.sh \ + modules/dbgfmts/dwarf2/tests/gen64/dwarf2_gen64_test.sh \ + modules/dbgfmts/dwarf2/tests/pass32/dwarf2_pass32_test.sh \ + modules/dbgfmts/dwarf2/tests/pass64/dwarf2_pass64_test.sh \ + modules/dbgfmts/dwarf2/tests/passwin64/dwarf2_passwin64_test.sh \ + modules/dbgfmts/stabs/tests/stabs_test.sh \ + modules/objfmts/bin/tests/bin_test.sh \ + modules/objfmts/bin/tests/multisect/bin_multi_test.sh \ + modules/objfmts/elf/tests/elf_test.sh \ + modules/objfmts/elf/tests/amd64/elf_amd64_test.sh \ + modules/objfmts/elf/tests/x32/elf_x32_test.sh \ + modules/objfmts/elf/tests/gas32/elf_gas32_test.sh \ + modules/objfmts/elf/tests/gas64/elf_gas64_test.sh \ + modules/objfmts/elf/tests/gasx32/elf_gasx32_test.sh \ + modules/objfmts/coff/tests/coff_test.sh \ + modules/objfmts/macho/tests/gas32/gas_macho32_test.sh \ + modules/objfmts/macho/tests/gas64/gas_macho64_test.sh \ + modules/objfmts/macho/tests/nasm32/macho32_test.sh \ + modules/objfmts/macho/tests/nasm64/macho64_test.sh \ + modules/objfmts/rdf/tests/rdf_test.sh \ + modules/objfmts/win32/tests/win32_test.sh \ + modules/objfmts/win32/tests/gas/win32_gas_test.sh \ + modules/objfmts/win64/tests/win64_test.sh \ + modules/objfmts/win64/tests/gas/win64_gas_test.sh \ + modules/objfmts/xdf/tests/xdf_test.sh bitvect_test$(EXEEXT) \ + floatnum_test$(EXEEXT) leb128_test$(EXEEXT) \ + splitpath_test$(EXEEXT) combpath_test$(EXEEXT) \ + uncstring_test$(EXEEXT) libyasm/tests/libyasm_test.sh +noinst_PROGRAMS = genstring$(EXEEXT) re2c$(EXEEXT) genmacro$(EXEEXT) \ + genperf$(EXEEXT) genversion$(EXEEXT) genmodule$(EXEEXT) +check_PROGRAMS = test_hd$(EXEEXT) bitvect_test$(EXEEXT) \ + floatnum_test$(EXEEXT) leb128_test$(EXEEXT) \ + splitpath_test$(EXEEXT) combpath_test$(EXEEXT) \ + uncstring_test$(EXEEXT) +DIST_COMMON = $(srcdir)/tools/Makefile.inc \ + $(srcdir)/tools/re2c/Makefile.inc \ + $(srcdir)/tools/genmacro/Makefile.inc \ + $(srcdir)/tools/genperf/Makefile.inc \ + $(srcdir)/tools/python-yasm/Makefile.inc \ + $(srcdir)/tools/python-yasm/tests/Makefile.inc \ + $(srcdir)/modules/Makefile.inc \ + $(srcdir)/modules/arch/Makefile.inc \ + $(srcdir)/modules/arch/x86/Makefile.inc \ + $(srcdir)/modules/arch/x86/tests/Makefile.inc \ + $(srcdir)/modules/arch/x86/tests/gas32/Makefile.inc \ + $(srcdir)/modules/arch/x86/tests/gas64/Makefile.inc \ + $(srcdir)/modules/arch/lc3b/Makefile.inc \ + $(srcdir)/modules/arch/lc3b/tests/Makefile.inc \ + $(srcdir)/modules/listfmts/Makefile.inc \ + $(srcdir)/modules/listfmts/nasm/Makefile.inc \ + $(srcdir)/modules/parsers/Makefile.inc \ + $(srcdir)/modules/parsers/gas/Makefile.inc \ + $(srcdir)/modules/parsers/gas/tests/Makefile.inc \ + $(srcdir)/modules/parsers/gas/tests/bin/Makefile.inc \ + $(srcdir)/modules/parsers/nasm/Makefile.inc \ + $(srcdir)/modules/parsers/nasm/tests/Makefile.inc \ + $(srcdir)/modules/parsers/nasm/tests/worphan/Makefile.inc \ + $(srcdir)/modules/parsers/tasm/Makefile.inc \ + $(srcdir)/modules/parsers/tasm/tests/Makefile.inc \ + $(srcdir)/modules/parsers/tasm/tests/exe/Makefile.inc \ + $(srcdir)/modules/preprocs/Makefile.inc \ + $(srcdir)/modules/preprocs/tasm/Makefile.inc \ + $(srcdir)/modules/preprocs/tasm/tests/Makefile.inc \ + $(srcdir)/modules/preprocs/nasm/Makefile.inc \ + $(srcdir)/modules/preprocs/nasm/tests/Makefile.inc \ + $(srcdir)/modules/preprocs/raw/Makefile.inc \ + $(srcdir)/modules/preprocs/raw/tests/Makefile.inc \ + $(srcdir)/modules/preprocs/cpp/Makefile.inc \ + $(srcdir)/modules/preprocs/gas/Makefile.inc \ + $(srcdir)/modules/preprocs/gas/tests/Makefile.inc \ + $(srcdir)/modules/dbgfmts/Makefile.inc \ + $(srcdir)/modules/dbgfmts/codeview/Makefile.inc \ + $(srcdir)/modules/dbgfmts/dwarf2/Makefile.inc \ + $(srcdir)/modules/dbgfmts/dwarf2/tests/Makefile.inc \ + $(srcdir)/modules/dbgfmts/dwarf2/tests/gen64/Makefile.inc \ + $(srcdir)/modules/dbgfmts/dwarf2/tests/pass32/Makefile.inc \ + $(srcdir)/modules/dbgfmts/dwarf2/tests/pass64/Makefile.inc \ + $(srcdir)/modules/dbgfmts/dwarf2/tests/passwin64/Makefile.inc \ + $(srcdir)/modules/dbgfmts/null/Makefile.inc \ + $(srcdir)/modules/dbgfmts/stabs/Makefile.inc \ + $(srcdir)/modules/dbgfmts/stabs/tests/Makefile.inc \ + $(srcdir)/modules/objfmts/Makefile.inc \ + $(srcdir)/modules/objfmts/dbg/Makefile.inc \ + $(srcdir)/modules/objfmts/bin/Makefile.inc \ + $(srcdir)/modules/objfmts/bin/tests/Makefile.inc \ + $(srcdir)/modules/objfmts/bin/tests/multisect/Makefile.inc \ + $(srcdir)/modules/objfmts/elf/Makefile.inc \ + $(srcdir)/modules/objfmts/elf/tests/Makefile.inc \ + $(srcdir)/modules/objfmts/elf/tests/amd64/Makefile.inc \ + $(srcdir)/modules/objfmts/elf/tests/x32/Makefile.inc \ + $(srcdir)/modules/objfmts/elf/tests/gas32/Makefile.inc \ + $(srcdir)/modules/objfmts/elf/tests/gas64/Makefile.inc \ + $(srcdir)/modules/objfmts/elf/tests/gasx32/Makefile.inc \ + $(srcdir)/modules/objfmts/coff/Makefile.inc \ + $(srcdir)/modules/objfmts/coff/tests/Makefile.inc \ + $(srcdir)/modules/objfmts/macho/Makefile.inc \ + $(srcdir)/modules/objfmts/macho/tests/Makefile.inc \ + $(srcdir)/modules/objfmts/macho/tests/gas32/Makefile.inc \ + $(srcdir)/modules/objfmts/macho/tests/gas64/Makefile.inc \ + $(srcdir)/modules/objfmts/macho/tests/nasm32/Makefile.inc \ + $(srcdir)/modules/objfmts/macho/tests/nasm64/Makefile.inc \ + $(srcdir)/modules/objfmts/rdf/Makefile.inc \ + $(srcdir)/modules/objfmts/rdf/tests/Makefile.inc \ + $(srcdir)/modules/objfmts/win32/Makefile.inc \ + $(srcdir)/modules/objfmts/win32/tests/Makefile.inc \ + $(srcdir)/modules/objfmts/win32/tests/gas/Makefile.inc \ + $(srcdir)/modules/objfmts/win64/Makefile.inc \ + $(srcdir)/modules/objfmts/win64/tests/Makefile.inc \ + $(srcdir)/modules/objfmts/win64/tests/gas/Makefile.inc \ + $(srcdir)/modules/objfmts/xdf/Makefile.inc \ + $(srcdir)/modules/objfmts/xdf/tests/Makefile.inc \ + $(srcdir)/libyasm/Makefile.inc \ + $(srcdir)/libyasm/tests/Makefile.inc \ + $(srcdir)/frontends/Makefile.inc \ + $(srcdir)/frontends/yasm/Makefile.inc \ + $(srcdir)/frontends/tasm/Makefile.inc \ + $(srcdir)/frontends/vsyasm/Makefile.inc \ + $(srcdir)/m4/Makefile.inc $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(srcdir)/config.h.in \ + $(top_srcdir)/config/mkinstalldirs \ + $(top_srcdir)/config/depcomp $(dist_man_MANS) \ + $(notrans_dist_man_MANS) $(include_HEADERS) \ + $(modinclude_HEADERS) $(noinst_HEADERS) \ + $(top_srcdir)/config/test-driver ABOUT-NLS AUTHORS COPYING \ + ChangeLog INSTALL NEWS README config/compile \ + config/config.guess config/config.rpath config/config.sub \ + config/depcomp config/install-sh config/missing \ + config/mkinstalldirs $(top_srcdir)/config/compile \ + $(top_srcdir)/config/config.guess \ + $(top_srcdir)/config/config.rpath \ + $(top_srcdir)/config/config.sub \ + $(top_srcdir)/config/install-sh $(top_srcdir)/config/missing +@HAVE_PYTHON_BINDINGS_TRUE@am__append_1 = _yasm.pxi yasm.pyx \ +@HAVE_PYTHON_BINDINGS_TRUE@ yasm_python.c python-setup.txt \ +@HAVE_PYTHON_BINDINGS_TRUE@ .python-build +@HAVE_PYTHON_BINDINGS_TRUE@am__append_2 = PYTHON=${PYTHON} +@HAVE_PYTHON_BINDINGS_TRUE@am__append_3 = tools/python-yasm/tests/python_test.sh +@BUILD_MAN_TRUE@am__append_4 = $(dist_man_MANS) $(notrans_dist_man_MANS) +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_create_stdint_h.m4 \ + $(top_srcdir)/m4/cython.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/pythonhead.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ + "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man7dir)" \ + "$(DESTDIR)$(includedir)" "$(DESTDIR)$(modincludedir)" \ + "$(DESTDIR)$(includedir)" +LIBRARIES = $(lib_LIBRARIES) +ARFLAGS = cru +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = +libyasm_a_AR = $(AR) $(ARFLAGS) +libyasm_a_LIBADD = +am__dirstamp = $(am__leading_dot)dirstamp +am_libyasm_a_OBJECTS = modules/arch/x86/x86arch.$(OBJEXT) \ + modules/arch/x86/x86bc.$(OBJEXT) \ + modules/arch/x86/x86expr.$(OBJEXT) \ + modules/arch/x86/x86id.$(OBJEXT) \ + modules/arch/lc3b/lc3barch.$(OBJEXT) \ + modules/arch/lc3b/lc3bbc.$(OBJEXT) \ + modules/listfmts/nasm/nasm-listfmt.$(OBJEXT) \ + modules/parsers/gas/gas-parser.$(OBJEXT) \ + modules/parsers/gas/gas-parse.$(OBJEXT) \ + modules/parsers/gas/gas-parse-intel.$(OBJEXT) \ + modules/parsers/nasm/nasm-parser.$(OBJEXT) \ + modules/parsers/nasm/nasm-parse.$(OBJEXT) \ + modules/preprocs/nasm/nasm-preproc.$(OBJEXT) \ + modules/preprocs/nasm/nasm-pp.$(OBJEXT) \ + modules/preprocs/nasm/nasmlib.$(OBJEXT) \ + modules/preprocs/nasm/nasm-eval.$(OBJEXT) \ + modules/preprocs/raw/raw-preproc.$(OBJEXT) \ + modules/preprocs/cpp/cpp-preproc.$(OBJEXT) \ + modules/preprocs/gas/gas-preproc.$(OBJEXT) \ + modules/preprocs/gas/gas-eval.$(OBJEXT) \ + modules/dbgfmts/codeview/cv-dbgfmt.$(OBJEXT) \ + modules/dbgfmts/codeview/cv-symline.$(OBJEXT) \ + modules/dbgfmts/codeview/cv-type.$(OBJEXT) \ + modules/dbgfmts/dwarf2/dwarf2-dbgfmt.$(OBJEXT) \ + modules/dbgfmts/dwarf2/dwarf2-line.$(OBJEXT) \ + modules/dbgfmts/dwarf2/dwarf2-aranges.$(OBJEXT) \ + modules/dbgfmts/dwarf2/dwarf2-info.$(OBJEXT) \ + modules/dbgfmts/null/null-dbgfmt.$(OBJEXT) \ + modules/dbgfmts/stabs/stabs-dbgfmt.$(OBJEXT) \ + modules/objfmts/dbg/dbg-objfmt.$(OBJEXT) \ + modules/objfmts/bin/bin-objfmt.$(OBJEXT) \ + modules/objfmts/elf/elf.$(OBJEXT) \ + modules/objfmts/elf/elf-objfmt.$(OBJEXT) \ + modules/objfmts/elf/elf-x86-x86.$(OBJEXT) \ + modules/objfmts/elf/elf-x86-amd64.$(OBJEXT) \ + modules/objfmts/elf/elf-x86-x32.$(OBJEXT) \ + modules/objfmts/coff/coff-objfmt.$(OBJEXT) \ + modules/objfmts/coff/win64-except.$(OBJEXT) \ + modules/objfmts/macho/macho-objfmt.$(OBJEXT) \ + modules/objfmts/rdf/rdf-objfmt.$(OBJEXT) \ + modules/objfmts/xdf/xdf-objfmt.$(OBJEXT) \ + libyasm/assocdat.$(OBJEXT) libyasm/bitvect.$(OBJEXT) \ + libyasm/bc-align.$(OBJEXT) libyasm/bc-data.$(OBJEXT) \ + libyasm/bc-incbin.$(OBJEXT) libyasm/bc-org.$(OBJEXT) \ + libyasm/bc-reserve.$(OBJEXT) libyasm/bytecode.$(OBJEXT) \ + libyasm/errwarn.$(OBJEXT) libyasm/expr.$(OBJEXT) \ + libyasm/file.$(OBJEXT) libyasm/floatnum.$(OBJEXT) \ + libyasm/hamt.$(OBJEXT) libyasm/insn.$(OBJEXT) \ + libyasm/intnum.$(OBJEXT) libyasm/inttree.$(OBJEXT) \ + libyasm/linemap.$(OBJEXT) libyasm/md5.$(OBJEXT) \ + libyasm/mergesort.$(OBJEXT) libyasm/phash.$(OBJEXT) \ + libyasm/section.$(OBJEXT) libyasm/strcasecmp.$(OBJEXT) \ + libyasm/strsep.$(OBJEXT) libyasm/symrec.$(OBJEXT) \ + libyasm/valparam.$(OBJEXT) libyasm/value.$(OBJEXT) \ + libyasm/xmalloc.$(OBJEXT) libyasm/xstrdup.$(OBJEXT) +nodist_libyasm_a_OBJECTS = x86cpu.$(OBJEXT) x86regtmod.$(OBJEXT) \ + lc3bid.$(OBJEXT) gas-token.$(OBJEXT) nasm-token.$(OBJEXT) \ + module.$(OBJEXT) +libyasm_a_OBJECTS = $(am_libyasm_a_OBJECTS) \ + $(nodist_libyasm_a_OBJECTS) +PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) +am_bitvect_test_OBJECTS = libyasm/tests/bitvect_test.$(OBJEXT) +bitvect_test_OBJECTS = $(am_bitvect_test_OBJECTS) +am__DEPENDENCIES_1 = +bitvect_test_DEPENDENCIES = libyasm.a $(am__DEPENDENCIES_1) +am_combpath_test_OBJECTS = libyasm/tests/combpath_test.$(OBJEXT) +combpath_test_OBJECTS = $(am_combpath_test_OBJECTS) +combpath_test_DEPENDENCIES = libyasm.a $(am__DEPENDENCIES_1) +am_floatnum_test_OBJECTS = libyasm/tests/floatnum_test.$(OBJEXT) +floatnum_test_OBJECTS = $(am_floatnum_test_OBJECTS) +floatnum_test_DEPENDENCIES = libyasm.a $(am__DEPENDENCIES_1) +am_genmacro_OBJECTS = +genmacro_OBJECTS = $(am_genmacro_OBJECTS) +genmacro_DEPENDENCIES = genmacro.$(OBJEXT) +am_genmodule_OBJECTS = +genmodule_OBJECTS = $(am_genmodule_OBJECTS) +genmodule_DEPENDENCIES = genmodule.$(OBJEXT) +am_genperf_OBJECTS = +genperf_OBJECTS = $(am_genperf_OBJECTS) +genperf_DEPENDENCIES = genperf.$(OBJEXT) gp-perfect.$(OBJEXT) \ + gp-phash.$(OBJEXT) gp-xmalloc.$(OBJEXT) gp-xstrdup.$(OBJEXT) +am_genstring_OBJECTS = +genstring_OBJECTS = $(am_genstring_OBJECTS) +genstring_DEPENDENCIES = genstring.$(OBJEXT) +am_genversion_OBJECTS = +genversion_OBJECTS = $(am_genversion_OBJECTS) +genversion_DEPENDENCIES = genversion.$(OBJEXT) +am_leb128_test_OBJECTS = libyasm/tests/leb128_test.$(OBJEXT) +leb128_test_OBJECTS = $(am_leb128_test_OBJECTS) +leb128_test_DEPENDENCIES = libyasm.a $(am__DEPENDENCIES_1) +am_re2c_OBJECTS = +re2c_OBJECTS = $(am_re2c_OBJECTS) +re2c_DEPENDENCIES = re2c-main.$(OBJEXT) re2c-code.$(OBJEXT) \ + re2c-dfa.$(OBJEXT) re2c-parser.$(OBJEXT) \ + re2c-actions.$(OBJEXT) re2c-scanner.$(OBJEXT) \ + re2c-mbo_getopt.$(OBJEXT) re2c-substr.$(OBJEXT) \ + re2c-translate.$(OBJEXT) +am_splitpath_test_OBJECTS = libyasm/tests/splitpath_test.$(OBJEXT) +splitpath_test_OBJECTS = $(am_splitpath_test_OBJECTS) +splitpath_test_DEPENDENCIES = libyasm.a $(am__DEPENDENCIES_1) +am_test_hd_OBJECTS = test_hd.$(OBJEXT) +test_hd_OBJECTS = $(am_test_hd_OBJECTS) +test_hd_LDADD = $(LDADD) +am_uncstring_test_OBJECTS = libyasm/tests/uncstring_test.$(OBJEXT) +uncstring_test_OBJECTS = $(am_uncstring_test_OBJECTS) +uncstring_test_DEPENDENCIES = libyasm.a $(am__DEPENDENCIES_1) +am_vsyasm_OBJECTS = frontends/vsyasm/vsyasm.$(OBJEXT) \ + frontends/yasm/yasm-options.$(OBJEXT) +vsyasm_OBJECTS = $(am_vsyasm_OBJECTS) +vsyasm_DEPENDENCIES = libyasm.a $(am__DEPENDENCIES_1) +am_yasm_OBJECTS = frontends/yasm/yasm.$(OBJEXT) \ + frontends/yasm/yasm-options.$(OBJEXT) +yasm_OBJECTS = $(am_yasm_OBJECTS) +yasm_DEPENDENCIES = libyasm.a $(am__DEPENDENCIES_1) +am_ytasm_OBJECTS = frontends/tasm/tasm.$(OBJEXT) \ + frontends/tasm/tasm-options.$(OBJEXT) +ytasm_OBJECTS = $(am_ytasm_OBJECTS) +ytasm_DEPENDENCIES = libyasm.a $(am__DEPENDENCIES_1) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/config/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libyasm_a_SOURCES) $(nodist_libyasm_a_SOURCES) \ + $(bitvect_test_SOURCES) $(combpath_test_SOURCES) \ + $(floatnum_test_SOURCES) $(genmacro_SOURCES) \ + $(genmodule_SOURCES) $(genperf_SOURCES) $(genstring_SOURCES) \ + $(genversion_SOURCES) $(leb128_test_SOURCES) $(re2c_SOURCES) \ + $(splitpath_test_SOURCES) $(test_hd_SOURCES) \ + $(uncstring_test_SOURCES) $(vsyasm_SOURCES) $(yasm_SOURCES) \ + $(ytasm_SOURCES) +DIST_SOURCES = $(libyasm_a_SOURCES) $(bitvect_test_SOURCES) \ + $(combpath_test_SOURCES) $(floatnum_test_SOURCES) \ + $(genmacro_SOURCES) $(genmodule_SOURCES) $(genperf_SOURCES) \ + $(genstring_SOURCES) $(genversion_SOURCES) \ + $(leb128_test_SOURCES) $(re2c_SOURCES) \ + $(splitpath_test_SOURCES) $(test_hd_SOURCES) \ + $(uncstring_test_SOURCES) $(vsyasm_SOURCES) $(yasm_SOURCES) \ + $(ytasm_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +man1dir = $(mandir)/man1 +man7dir = $(mandir)/man7 +NROFF = nroff +MANS = $(dist_man_MANS) $(notrans_dist_man_MANS) +HEADERS = $(include_HEADERS) $(modinclude_HEADERS) \ + $(nodist_include_HEADERS) $(noinst_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope check recheck distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +DIST_TARGETS = dist-gzip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +ARCH = @ARCH@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CCLD_FOR_BUILD = @CCLD_FOR_BUILD@ +CC_FOR_BUILD = @CC_FOR_BUILD@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPP_FOR_HOST = @CPP_FOR_HOST@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GCC = @GCC@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MORE_CFLAGS = @MORE_CFLAGS@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = po . +ACLOCAL_AMFLAGS = -I m4 +AM_YFLAGS = -d +AM_CFLAGS = @MORE_CFLAGS@ +dist_man_MANS = yasm.1 + +#!include modules/objfmts/omf/Makefile.inc +notrans_dist_man_MANS = yasm_arch.7 yasm_parsers.7 yasm_dbgfmts.7 \ + yasm_objfmts.7 +TESTS_ENVIRONMENT = $(am__append_2) +test_hd_SOURCES = test_hd.c +include_HEADERS = libyasm.h +nodist_include_HEADERS = libyasm-stdint.h +noinst_HEADERS = util.h +BUILT_SOURCES = x86insns.c x86insn_nasm.gperf x86insn_gas.gperf \ + x86insn_nasm.c x86insn_gas.c gas-token.c nasm-token.c \ + nasm-macros.c nasm-version.c version.mac win64-nasm.c \ + win64-gas.c license.c +MAINTAINERCLEANFILES = x86insns.c x86insn_nasm.gperf x86insn_gas.gperf \ + $(am__append_4) + +# Until this gets fixed in automake +DISTCLEANFILES = libyasm/stamp-h libyasm/stamp-h[0-9]* + +# Suffix rule for genperf +SUFFIXES = .gperf + +# configure.lineno doesn't clean up after itself? +CLEANFILES = configure.lineno $(am__append_1) x86insn_nasm.c \ + x86insn_gas.c x86cpu.c x86regtmod.c lc3bid.c gas-token.c \ + nasm-token.c nasm-macros.c nasm-version.c version.mac \ + win64-nasm.c win64-gas.c module.c license.c +#!EXTRA_DIST += modules/objfmts/omf/Makefile.inc +EXTRA_DIST = config/config.rpath tools/Makefile.inc \ + libyasm/Makefile.inc modules/Makefile.inc \ + frontends/Makefile.inc tools/re2c/Makefile.inc \ + tools/genmacro/Makefile.inc tools/genperf/Makefile.inc \ + tools/python-yasm/Makefile.inc tools/re2c/main.c \ + tools/re2c/basics.h tools/re2c/globals.h tools/re2c/ins.h \ + tools/re2c/re.h tools/re2c/token.h tools/re2c/code.c \ + tools/re2c/dfa.h tools/re2c/dfa.c tools/re2c/parse.h \ + tools/re2c/parser.h tools/re2c/parser.c tools/re2c/actions.c \ + tools/re2c/scanner.h tools/re2c/scanner.c \ + tools/re2c/mbo_getopt.h tools/re2c/mbo_getopt.c \ + tools/re2c/substr.h tools/re2c/substr.c tools/re2c/translate.c \ + tools/re2c/CHANGELOG tools/re2c/NO_WARRANTY tools/re2c/README \ + tools/re2c/scanner.re tools/re2c/re2c.1 \ + tools/re2c/bootstrap/scanner.c tools/re2c/doc/loplas.ps.gz \ + tools/re2c/doc/sample.bib tools/re2c/examples/basemmap.c \ + tools/re2c/examples/c.re tools/re2c/examples/cmmap.re \ + tools/re2c/examples/cnokw.re tools/re2c/examples/cunroll.re \ + tools/re2c/examples/modula.re tools/re2c/examples/repeater.re \ + tools/re2c/examples/sample.re tools/re2c/examples/simple.re \ + tools/re2c/examples/rexx/README \ + tools/re2c/examples/rexx/rexx.l \ + tools/re2c/examples/rexx/scanio.c tools/genmacro/genmacro.c \ + tools/genperf/genperf.c tools/genperf/perfect.c \ + tools/genperf/perfect.h tools/genperf/standard.h \ + tools/python-yasm/pyxelator/cparse.py \ + tools/python-yasm/pyxelator/genpyx.py \ + tools/python-yasm/pyxelator/ir.py \ + tools/python-yasm/pyxelator/lexer.py \ + tools/python-yasm/pyxelator/node.py \ + tools/python-yasm/pyxelator/parse_core.py \ + tools/python-yasm/pyxelator/work_unit.py \ + tools/python-yasm/pyxelator/wrap_yasm.py \ + tools/python-yasm/setup.py tools/python-yasm/yasm.pyx \ + $(PYBINDING_DEPS) tools/python-yasm/tests/Makefile.inc \ + tools/python-yasm/tests/python_test.sh \ + tools/python-yasm/tests/__init__.py \ + tools/python-yasm/tests/test_bytecode.py \ + tools/python-yasm/tests/test_expr.py \ + tools/python-yasm/tests/test_intnum.py \ + tools/python-yasm/tests/test_symrec.py \ + modules/arch/Makefile.inc modules/listfmts/Makefile.inc \ + modules/parsers/Makefile.inc modules/preprocs/Makefile.inc \ + modules/objfmts/Makefile.inc modules/arch/x86/Makefile.inc \ + modules/arch/lc3b/Makefile.inc \ + modules/arch/x86/gen_x86_insn.py x86insns.c x86insn_nasm.gperf \ + x86insn_gas.gperf modules/arch/x86/x86cpu.gperf \ + modules/arch/x86/x86regtmod.gperf \ + modules/arch/x86/tests/Makefile.inc \ + modules/arch/x86/tests/x86_test.sh \ + modules/arch/x86/tests/gen-fma-test.py \ + modules/arch/x86/tests/addbyte.asm \ + modules/arch/x86/tests/addbyte.errwarn \ + modules/arch/x86/tests/addbyte.hex \ + modules/arch/x86/tests/addrop.asm \ + modules/arch/x86/tests/addrop.errwarn \ + modules/arch/x86/tests/addrop.hex \ + modules/arch/x86/tests/addrop-err.asm \ + modules/arch/x86/tests/addrop-err.errwarn \ + modules/arch/x86/tests/aes.asm modules/arch/x86/tests/aes.hex \ + modules/arch/x86/tests/amd200707.asm \ + modules/arch/x86/tests/amd200707.hex \ + modules/arch/x86/tests/amd-fma4.asm \ + modules/arch/x86/tests/amd-fma4.hex \ + modules/arch/x86/tests/arithsmall.asm \ + modules/arch/x86/tests/arithsmall.errwarn \ + modules/arch/x86/tests/arithsmall.hex \ + modules/arch/x86/tests/avx.asm modules/arch/x86/tests/avx.hex \ + modules/arch/x86/tests/avx16.asm \ + modules/arch/x86/tests/avx16.hex \ + modules/arch/x86/tests/avx2.asm \ + modules/arch/x86/tests/avx2.hex \ + modules/arch/x86/tests/avxcc.asm \ + modules/arch/x86/tests/avxcc.hex \ + modules/arch/x86/tests/bittest.asm \ + modules/arch/x86/tests/bittest.hex \ + modules/arch/x86/tests/bmi1.asm \ + modules/arch/x86/tests/bmi1.hex \ + modules/arch/x86/tests/bmi2.asm \ + modules/arch/x86/tests/bmi2.hex \ + modules/arch/x86/tests/bswap64.asm \ + modules/arch/x86/tests/bswap64.hex \ + modules/arch/x86/tests/clmul.asm \ + modules/arch/x86/tests/clmul.hex \ + modules/arch/x86/tests/cmpxchg.asm \ + modules/arch/x86/tests/cmpxchg.hex \ + modules/arch/x86/tests/cpubasic-err.asm \ + modules/arch/x86/tests/cpubasic-err.errwarn \ + modules/arch/x86/tests/cyrix.asm \ + modules/arch/x86/tests/cyrix.hex \ + modules/arch/x86/tests/div-err.asm \ + modules/arch/x86/tests/div-err.errwarn \ + modules/arch/x86/tests/ea-nonzero.asm \ + modules/arch/x86/tests/ea-nonzero.hex \ + modules/arch/x86/tests/ea-over.asm \ + modules/arch/x86/tests/ea-over.errwarn \ + modules/arch/x86/tests/ea-over.hex \ + modules/arch/x86/tests/ea-warn.asm \ + modules/arch/x86/tests/ea-warn.errwarn \ + modules/arch/x86/tests/ea-warn.hex \ + modules/arch/x86/tests/ebpindex.asm \ + modules/arch/x86/tests/ebpindex.hex \ + modules/arch/x86/tests/effaddr.asm \ + modules/arch/x86/tests/effaddr.hex \ + modules/arch/x86/tests/enter.asm \ + modules/arch/x86/tests/enter.errwarn \ + modules/arch/x86/tests/enter.hex \ + modules/arch/x86/tests/eptvpid.asm \ + modules/arch/x86/tests/eptvpid.hex \ + modules/arch/x86/tests/f16c.asm \ + modules/arch/x86/tests/f16c.hex \ + modules/arch/x86/tests/far64.asm \ + modules/arch/x86/tests/far64.hex \ + modules/arch/x86/tests/farbasic.asm \ + modules/arch/x86/tests/farbasic.hex \ + modules/arch/x86/tests/farithr.asm \ + modules/arch/x86/tests/farithr.hex \ + modules/arch/x86/tests/fcmov.asm \ + modules/arch/x86/tests/fcmov.hex \ + modules/arch/x86/tests/fma.asm modules/arch/x86/tests/fma.hex \ + modules/arch/x86/tests/fsgsbase.asm \ + modules/arch/x86/tests/fsgsbase.hex \ + modules/arch/x86/tests/fwdequ64.asm \ + modules/arch/x86/tests/fwdequ64.hex \ + modules/arch/x86/tests/genopcode.asm \ + modules/arch/x86/tests/genopcode.hex \ + modules/arch/x86/tests/imm64.asm \ + modules/arch/x86/tests/imm64.errwarn \ + modules/arch/x86/tests/imm64.hex \ + modules/arch/x86/tests/invpcid.asm \ + modules/arch/x86/tests/invpcid.hex \ + modules/arch/x86/tests/iret.asm \ + modules/arch/x86/tests/iret.hex \ + modules/arch/x86/tests/jmp64-1.asm \ + modules/arch/x86/tests/jmp64-1.hex \ + modules/arch/x86/tests/jmp64-2.asm \ + modules/arch/x86/tests/jmp64-2.hex \ + modules/arch/x86/tests/jmp64-3.asm \ + modules/arch/x86/tests/jmp64-3.hex \ + modules/arch/x86/tests/jmp64-4.asm \ + modules/arch/x86/tests/jmp64-4.hex \ + modules/arch/x86/tests/jmp64-5.asm \ + modules/arch/x86/tests/jmp64-5.hex \ + modules/arch/x86/tests/jmp64-6.asm \ + modules/arch/x86/tests/jmp64-6.hex \ + modules/arch/x86/tests/jmpfar.asm \ + modules/arch/x86/tests/jmpfar.hex \ + modules/arch/x86/tests/larlsl.asm \ + modules/arch/x86/tests/larlsl.hex \ + modules/arch/x86/tests/lds.asm modules/arch/x86/tests/lds.hex \ + modules/arch/x86/tests/lfs64.asm \ + modules/arch/x86/tests/lfs64.hex \ + modules/arch/x86/tests/loopadsz.asm \ + modules/arch/x86/tests/loopadsz.hex \ + modules/arch/x86/tests/lsahf.asm \ + modules/arch/x86/tests/lsahf.hex \ + modules/arch/x86/tests/lzcnt.asm \ + modules/arch/x86/tests/lzcnt.hex \ + modules/arch/x86/tests/mem64-err.asm \ + modules/arch/x86/tests/mem64-err.errwarn \ + modules/arch/x86/tests/mem64.asm \ + modules/arch/x86/tests/mem64.errwarn \ + modules/arch/x86/tests/mem64.hex \ + modules/arch/x86/tests/mem64hi32.asm \ + modules/arch/x86/tests/mem64hi32.hex \ + modules/arch/x86/tests/mem64rip.asm \ + modules/arch/x86/tests/mem64rip.hex \ + modules/arch/x86/tests/mixcase.asm \ + modules/arch/x86/tests/mixcase.hex \ + modules/arch/x86/tests/movbe.asm \ + modules/arch/x86/tests/movbe.hex \ + modules/arch/x86/tests/movdq32.asm \ + modules/arch/x86/tests/movdq32.hex \ + modules/arch/x86/tests/movdq64.asm \ + modules/arch/x86/tests/movdq64.hex \ + modules/arch/x86/tests/negequ.asm \ + modules/arch/x86/tests/negequ.hex \ + modules/arch/x86/tests/nomem64-err.asm \ + modules/arch/x86/tests/nomem64-err.errwarn \ + modules/arch/x86/tests/nomem64-err2.asm \ + modules/arch/x86/tests/nomem64-err2.errwarn \ + modules/arch/x86/tests/nomem64.asm \ + modules/arch/x86/tests/nomem64.errwarn \ + modules/arch/x86/tests/nomem64.hex \ + modules/arch/x86/tests/o64.asm modules/arch/x86/tests/o64.hex \ + modules/arch/x86/tests/o64loop.asm \ + modules/arch/x86/tests/o64loop.errwarn \ + modules/arch/x86/tests/o64loop.hex \ + modules/arch/x86/tests/opersize.asm \ + modules/arch/x86/tests/opersize.hex \ + modules/arch/x86/tests/opsize-err.asm \ + modules/arch/x86/tests/opsize-err.errwarn \ + modules/arch/x86/tests/overflow.asm \ + modules/arch/x86/tests/overflow.errwarn \ + modules/arch/x86/tests/overflow.hex \ + modules/arch/x86/tests/padlock.asm \ + modules/arch/x86/tests/padlock.hex \ + modules/arch/x86/tests/pinsrb.asm \ + modules/arch/x86/tests/pinsrb.hex \ + modules/arch/x86/tests/pshift.asm \ + modules/arch/x86/tests/pshift.hex \ + modules/arch/x86/tests/push64.asm \ + modules/arch/x86/tests/push64.errwarn \ + modules/arch/x86/tests/push64.hex \ + modules/arch/x86/tests/pushf.asm \ + modules/arch/x86/tests/pushf.hex \ + modules/arch/x86/tests/pushf-err.asm \ + modules/arch/x86/tests/pushf-err.errwarn \ + modules/arch/x86/tests/pushnosize.asm \ + modules/arch/x86/tests/pushnosize.errwarn \ + modules/arch/x86/tests/pushnosize.hex \ + modules/arch/x86/tests/rdrnd.asm \ + modules/arch/x86/tests/rdrnd.hex \ + modules/arch/x86/tests/rep.asm modules/arch/x86/tests/rep.hex \ + modules/arch/x86/tests/ret.asm modules/arch/x86/tests/ret.hex \ + modules/arch/x86/tests/riprel1.asm \ + modules/arch/x86/tests/riprel1.hex \ + modules/arch/x86/tests/riprel2.asm \ + modules/arch/x86/tests/riprel2.errwarn \ + modules/arch/x86/tests/riprel2.hex \ + modules/arch/x86/tests/ripseg.asm \ + modules/arch/x86/tests/ripseg.errwarn \ + modules/arch/x86/tests/ripseg.hex \ + modules/arch/x86/tests/segmov.asm \ + modules/arch/x86/tests/segmov.hex \ + modules/arch/x86/tests/segoff.asm \ + modules/arch/x86/tests/segoff.hex \ + modules/arch/x86/tests/segoff-err.asm \ + modules/arch/x86/tests/segoff-err.errwarn \ + modules/arch/x86/tests/shift.asm \ + modules/arch/x86/tests/shift.hex \ + modules/arch/x86/tests/shift64.asm \ + modules/arch/x86/tests/shift64.hex \ + modules/arch/x86/tests/simd-1.asm \ + modules/arch/x86/tests/simd-1.hex \ + modules/arch/x86/tests/simd-2.asm \ + modules/arch/x86/tests/simd-2.hex \ + modules/arch/x86/tests/simd64-1.asm \ + modules/arch/x86/tests/simd64-1.hex \ + modules/arch/x86/tests/simd64-2.asm \ + modules/arch/x86/tests/simd64-2.hex \ + modules/arch/x86/tests/smx.asm modules/arch/x86/tests/smx.hex \ + modules/arch/x86/tests/sse-prefix.asm \ + modules/arch/x86/tests/sse-prefix.hex \ + modules/arch/x86/tests/sse3.asm \ + modules/arch/x86/tests/sse3.hex \ + modules/arch/x86/tests/sse4.asm \ + modules/arch/x86/tests/sse4.hex \ + modules/arch/x86/tests/sse4-err.asm \ + modules/arch/x86/tests/sse4-err.errwarn \ + modules/arch/x86/tests/ssewidth.asm \ + modules/arch/x86/tests/ssewidth.hex \ + modules/arch/x86/tests/ssse3.asm \ + modules/arch/x86/tests/ssse3.c \ + modules/arch/x86/tests/ssse3.hex \ + modules/arch/x86/tests/stos.asm \ + modules/arch/x86/tests/stos.hex modules/arch/x86/tests/str.asm \ + modules/arch/x86/tests/str.hex \ + modules/arch/x86/tests/strict.asm \ + modules/arch/x86/tests/strict.errwarn \ + modules/arch/x86/tests/strict.hex \ + modules/arch/x86/tests/strict-err.asm \ + modules/arch/x86/tests/strict-err.errwarn \ + modules/arch/x86/tests/stringseg.asm \ + modules/arch/x86/tests/stringseg.errwarn \ + modules/arch/x86/tests/stringseg.hex \ + modules/arch/x86/tests/svm.asm modules/arch/x86/tests/svm.hex \ + modules/arch/x86/tests/twobytemem.asm \ + modules/arch/x86/tests/twobytemem.errwarn \ + modules/arch/x86/tests/twobytemem.hex \ + modules/arch/x86/tests/vmx.asm modules/arch/x86/tests/vmx.hex \ + modules/arch/x86/tests/vmx-err.asm \ + modules/arch/x86/tests/vmx-err.errwarn \ + modules/arch/x86/tests/vsib.asm \ + modules/arch/x86/tests/vsib.hex \ + modules/arch/x86/tests/vsib-err.asm \ + modules/arch/x86/tests/vsib-err.errwarn \ + modules/arch/x86/tests/vsib2-err.asm \ + modules/arch/x86/tests/vsib2-err.errwarn \ + modules/arch/x86/tests/x86label.asm \ + modules/arch/x86/tests/x86label.hex \ + modules/arch/x86/tests/xchg64.asm \ + modules/arch/x86/tests/xchg64.hex \ + modules/arch/x86/tests/xmm64.asm \ + modules/arch/x86/tests/xmm64.hex \ + modules/arch/x86/tests/xop-all.asm \ + modules/arch/x86/tests/xop-all.hex \ + modules/arch/x86/tests/xop-basic.asm \ + modules/arch/x86/tests/xop-basic.hex \ + modules/arch/x86/tests/xop-cc.asm \ + modules/arch/x86/tests/xop-cc.hex \ + modules/arch/x86/tests/xsave.asm \ + modules/arch/x86/tests/xsave.hex \ + modules/arch/x86/tests/gas32/Makefile.inc \ + modules/arch/x86/tests/gas64/Makefile.inc \ + modules/arch/x86/tests/gas32/x86_gas32_test.sh \ + modules/arch/x86/tests/gas32/align32.asm \ + modules/arch/x86/tests/gas32/align32.hex \ + modules/arch/x86/tests/gas32/gas-farithr.asm \ + modules/arch/x86/tests/gas32/gas-farithr.hex \ + modules/arch/x86/tests/gas32/gas-farjump.asm \ + modules/arch/x86/tests/gas32/gas-farjump.hex \ + modules/arch/x86/tests/gas32/gas-fpmem.asm \ + modules/arch/x86/tests/gas32/gas-fpmem.hex \ + modules/arch/x86/tests/gas32/gas-invlpg.asm \ + modules/arch/x86/tests/gas32/gas-invlpg.hex \ + modules/arch/x86/tests/gas32/gas-loop32.asm \ + modules/arch/x86/tests/gas32/gas-loop32.hex \ + modules/arch/x86/tests/gas32/gas-movdq32.asm \ + modules/arch/x86/tests/gas32/gas-movdq32.hex \ + modules/arch/x86/tests/gas32/gas-movsd.asm \ + modules/arch/x86/tests/gas32/gas-movsd.hex \ + modules/arch/x86/tests/gas32/gas-pop.asm \ + modules/arch/x86/tests/gas32/gas-pop.hex \ + modules/arch/x86/tests/gas32/gas32-jmpcall.asm \ + modules/arch/x86/tests/gas32/gas32-jmpcall.hex \ + modules/arch/x86/tests/gas64/x86_gas64_test.sh \ + modules/arch/x86/tests/gas64/align64.asm \ + modules/arch/x86/tests/gas64/align64.hex \ + modules/arch/x86/tests/gas64/gas-cbw.asm \ + modules/arch/x86/tests/gas64/gas-cbw.hex \ + modules/arch/x86/tests/gas64/gas-fp.asm \ + modules/arch/x86/tests/gas64/gas-fp.hex \ + modules/arch/x86/tests/gas64/gas-inout.asm \ + modules/arch/x86/tests/gas64/gas-inout.hex \ + modules/arch/x86/tests/gas64/gas-loop64.asm \ + modules/arch/x86/tests/gas64/gas-loop64.hex \ + modules/arch/x86/tests/gas64/gas-moreinsn.asm \ + modules/arch/x86/tests/gas64/gas-moreinsn.hex \ + modules/arch/x86/tests/gas64/gas-movabs.asm \ + modules/arch/x86/tests/gas64/gas-movabs.hex \ + modules/arch/x86/tests/gas64/gas-movdq64.asm \ + modules/arch/x86/tests/gas64/gas-movdq64.hex \ + modules/arch/x86/tests/gas64/gas-movsxs.asm \ + modules/arch/x86/tests/gas64/gas-movsxs.hex \ + modules/arch/x86/tests/gas64/gas-muldiv.asm \ + modules/arch/x86/tests/gas64/gas-muldiv.hex \ + modules/arch/x86/tests/gas64/gas-prefix.asm \ + modules/arch/x86/tests/gas64/gas-prefix.errwarn \ + modules/arch/x86/tests/gas64/gas-prefix.hex \ + modules/arch/x86/tests/gas64/gas-retenter.asm \ + modules/arch/x86/tests/gas64/gas-retenter.hex \ + modules/arch/x86/tests/gas64/gas-shift.asm \ + modules/arch/x86/tests/gas64/gas-shift.hex \ + modules/arch/x86/tests/gas64/gas64-jmpcall.asm \ + modules/arch/x86/tests/gas64/gas64-jmpcall.hex \ + modules/arch/x86/tests/gas64/riprel.asm \ + modules/arch/x86/tests/gas64/riprel.hex \ + modules/arch/lc3b/tests/Makefile.inc \ + modules/arch/lc3b/lc3bid.re \ + modules/arch/lc3b/tests/lc3b_test.sh \ + modules/arch/lc3b/tests/lc3b-basic.asm \ + modules/arch/lc3b/tests/lc3b-basic.errwarn \ + modules/arch/lc3b/tests/lc3b-basic.hex \ + modules/arch/lc3b/tests/lc3b-br.asm \ + modules/arch/lc3b/tests/lc3b-br.hex \ + modules/arch/lc3b/tests/lc3b-ea-err.asm \ + modules/arch/lc3b/tests/lc3b-ea-err.errwarn \ + modules/arch/lc3b/tests/lc3b-mp22NC.asm \ + modules/arch/lc3b/tests/lc3b-mp22NC.hex \ + modules/arch/yasm_arch.xml modules/listfmts/nasm/Makefile.inc \ + modules/parsers/gas/Makefile.inc \ + modules/parsers/nasm/Makefile.inc \ + modules/parsers/gas/tests/Makefile.inc \ + modules/parsers/gas/gas-token.re \ + modules/parsers/gas/tests/gas_test.sh \ + modules/parsers/gas/tests/dataref-imm.asm \ + modules/parsers/gas/tests/dataref-imm.hex \ + modules/parsers/gas/tests/datavis.asm \ + modules/parsers/gas/tests/datavis.errwarn \ + modules/parsers/gas/tests/datavis.hex \ + modules/parsers/gas/tests/datavis2.asm \ + modules/parsers/gas/tests/datavis2.hex \ + modules/parsers/gas/tests/execsect.asm \ + modules/parsers/gas/tests/execsect.hex \ + modules/parsers/gas/tests/gas-fill.asm \ + modules/parsers/gas/tests/gas-fill.hex \ + modules/parsers/gas/tests/gas-float.asm \ + modules/parsers/gas/tests/gas-float.hex \ + modules/parsers/gas/tests/gas-instlabel.asm \ + modules/parsers/gas/tests/gas-instlabel.hex \ + modules/parsers/gas/tests/gas-line-err.asm \ + modules/parsers/gas/tests/gas-line-err.errwarn \ + modules/parsers/gas/tests/gas-line2-err.asm \ + modules/parsers/gas/tests/gas-line2-err.errwarn \ + modules/parsers/gas/tests/gas-push.asm \ + modules/parsers/gas/tests/gas-push.hex \ + modules/parsers/gas/tests/gas-segprefix.asm \ + modules/parsers/gas/tests/gas-segprefix.hex \ + modules/parsers/gas/tests/gas-semi.asm \ + modules/parsers/gas/tests/gas-semi.hex \ + modules/parsers/gas/tests/gassectalign.asm \ + modules/parsers/gas/tests/gassectalign.hex \ + modules/parsers/gas/tests/jmpcall.asm \ + modules/parsers/gas/tests/jmpcall.errwarn \ + modules/parsers/gas/tests/jmpcall.hex \ + modules/parsers/gas/tests/leb128.asm \ + modules/parsers/gas/tests/leb128.hex \ + modules/parsers/gas/tests/localcomm.asm \ + modules/parsers/gas/tests/localcomm.hex \ + modules/parsers/gas/tests/reggroup-err.asm \ + modules/parsers/gas/tests/reggroup-err.errwarn \ + modules/parsers/gas/tests/reggroup.asm \ + modules/parsers/gas/tests/reggroup.hex \ + modules/parsers/gas/tests/strzero.asm \ + modules/parsers/gas/tests/strzero.hex \ + modules/parsers/gas/tests/varinsn.asm \ + modules/parsers/gas/tests/varinsn.hex \ + modules/parsers/gas/tests/bin/Makefile.inc \ + modules/parsers/gas/tests/bin/gas_bin_test.sh \ + modules/parsers/gas/tests/bin/gas-comment.asm \ + modules/parsers/gas/tests/bin/gas-comment.errwarn \ + modules/parsers/gas/tests/bin/gas-comment.hex \ + modules/parsers/gas/tests/bin/gas-intel_syntax-noprefix.asm \ + modules/parsers/gas/tests/bin/gas-intel_syntax-noprefix.hex \ + modules/parsers/gas/tests/bin/gas-llabel.asm \ + modules/parsers/gas/tests/bin/gas-llabel.hex \ + modules/parsers/gas/tests/bin/gas-macro.asm \ + modules/parsers/gas/tests/bin/gas-macro.hex \ + modules/parsers/gas/tests/bin/gas-set.asm \ + modules/parsers/gas/tests/bin/gas-set.hex \ + modules/parsers/gas/tests/bin/gas-str.asm \ + modules/parsers/gas/tests/bin/gas-str.hex \ + modules/parsers/gas/tests/bin/rept-err.asm \ + modules/parsers/gas/tests/bin/rept-err.errwarn \ + modules/parsers/gas/tests/bin/reptempty.asm \ + modules/parsers/gas/tests/bin/reptempty.hex \ + modules/parsers/gas/tests/bin/reptlong.asm \ + modules/parsers/gas/tests/bin/reptlong.hex \ + modules/parsers/gas/tests/bin/reptnested.asm \ + modules/parsers/gas/tests/bin/reptnested.hex \ + modules/parsers/gas/tests/bin/reptsimple.asm \ + modules/parsers/gas/tests/bin/reptsimple.hex \ + modules/parsers/gas/tests/bin/reptwarn.asm \ + modules/parsers/gas/tests/bin/reptwarn.errwarn \ + modules/parsers/gas/tests/bin/reptwarn.hex \ + modules/parsers/gas/tests/bin/reptzero.asm \ + modules/parsers/gas/tests/bin/reptzero.hex \ + modules/parsers/nasm/nasm-token.re \ + modules/parsers/nasm/nasm-std.mac \ + modules/parsers/nasm/tests/Makefile.inc \ + modules/parsers/nasm/tests/nasm_test.sh \ + modules/parsers/nasm/tests/alignnop16.asm \ + modules/parsers/nasm/tests/alignnop16.hex \ + modules/parsers/nasm/tests/alignnop32.asm \ + modules/parsers/nasm/tests/alignnop32.hex \ + modules/parsers/nasm/tests/charconstmath.asm \ + modules/parsers/nasm/tests/charconstmath.hex \ + modules/parsers/nasm/tests/dirwarning.asm \ + modules/parsers/nasm/tests/dirwarning.errwarn \ + modules/parsers/nasm/tests/dirwarning.hex \ + modules/parsers/nasm/tests/dy.asm \ + modules/parsers/nasm/tests/dy.hex \ + modules/parsers/nasm/tests/endcomma.asm \ + modules/parsers/nasm/tests/endcomma.hex \ + modules/parsers/nasm/tests/equcolon.asm \ + modules/parsers/nasm/tests/equcolon.hex \ + modules/parsers/nasm/tests/equlocal.asm \ + modules/parsers/nasm/tests/equlocal.hex \ + modules/parsers/nasm/tests/hexconst.asm \ + modules/parsers/nasm/tests/hexconst.hex \ + modules/parsers/nasm/tests/long.asm \ + modules/parsers/nasm/tests/long.hex \ + modules/parsers/nasm/tests/locallabel.asm \ + modules/parsers/nasm/tests/locallabel.hex \ + modules/parsers/nasm/tests/locallabel2.asm \ + modules/parsers/nasm/tests/locallabel2.hex \ + modules/parsers/nasm/tests/nasm-prefix.asm \ + modules/parsers/nasm/tests/nasm-prefix.hex \ + modules/parsers/nasm/tests/newsect.asm \ + modules/parsers/nasm/tests/newsect.hex \ + modules/parsers/nasm/tests/orphannowarn.asm \ + modules/parsers/nasm/tests/orphannowarn.hex \ + modules/parsers/nasm/tests/prevlocalwarn.asm \ + modules/parsers/nasm/tests/prevlocalwarn.errwarn \ + modules/parsers/nasm/tests/prevlocalwarn.hex \ + modules/parsers/nasm/tests/strucalign.asm \ + modules/parsers/nasm/tests/strucalign.hex \ + modules/parsers/nasm/tests/struczero.asm \ + modules/parsers/nasm/tests/struczero.hex \ + modules/parsers/nasm/tests/strucbase.asm \ + modules/parsers/nasm/tests/strucbase.hex \ + modules/parsers/nasm/tests/syntax-err.asm \ + modules/parsers/nasm/tests/syntax-err.errwarn \ + modules/parsers/nasm/tests/uscore.asm \ + modules/parsers/nasm/tests/uscore.hex \ + modules/parsers/nasm/tests/worphan/Makefile.inc \ + modules/parsers/nasm/tests/worphan/nasm_worphan_test.sh \ + modules/parsers/nasm/tests/worphan/orphanwarn.asm \ + modules/parsers/nasm/tests/worphan/orphanwarn.errwarn \ + modules/parsers/nasm/tests/worphan/orphanwarn.hex \ + modules/parsers/tasm/tests/Makefile.inc \ + modules/parsers/tasm/tests/tasm_test.sh \ + modules/parsers/tasm/tests/array.asm \ + modules/parsers/tasm/tests/array.hex \ + modules/parsers/tasm/tests/case.asm \ + modules/parsers/tasm/tests/case.hex \ + modules/parsers/tasm/tests/charstr.asm \ + modules/parsers/tasm/tests/charstr.hex \ + modules/parsers/tasm/tests/dup.asm \ + modules/parsers/tasm/tests/dup.hex \ + modules/parsers/tasm/tests/equal.asm \ + modules/parsers/tasm/tests/equal.hex \ + modules/parsers/tasm/tests/expr.asm \ + modules/parsers/tasm/tests/expr.hex \ + modules/parsers/tasm/tests/irp.asm \ + modules/parsers/tasm/tests/irp.hex \ + modules/parsers/tasm/tests/label.asm \ + modules/parsers/tasm/tests/label.hex \ + modules/parsers/tasm/tests/les.asm \ + modules/parsers/tasm/tests/les.hex \ + modules/parsers/tasm/tests/lidt.asm \ + modules/parsers/tasm/tests/lidt.hex \ + modules/parsers/tasm/tests/macro.asm \ + modules/parsers/tasm/tests/macro.hex \ + modules/parsers/tasm/tests/offset.asm \ + modules/parsers/tasm/tests/offset.hex \ + modules/parsers/tasm/tests/quote.asm \ + modules/parsers/tasm/tests/quote.hex \ + modules/parsers/tasm/tests/res.asm \ + modules/parsers/tasm/tests/res.errwarn \ + modules/parsers/tasm/tests/res.hex \ + modules/parsers/tasm/tests/segment.asm \ + modules/parsers/tasm/tests/segment.hex \ + modules/parsers/tasm/tests/size.asm \ + modules/parsers/tasm/tests/size.hex \ + modules/parsers/tasm/tests/struc.asm \ + modules/parsers/tasm/tests/struc.errwarn \ + modules/parsers/tasm/tests/struc.hex \ + modules/parsers/tasm/tests/exe/Makefile.inc \ + modules/parsers/tasm/tests/exe/tasm_exe_test.sh \ + modules/parsers/tasm/tests/exe/exe.asm \ + modules/parsers/tasm/tests/exe/exe.hex \ + modules/parsers/yasm_parsers.xml \ + modules/preprocs/tasm/Makefile.inc \ + modules/preprocs/nasm/Makefile.inc \ + modules/preprocs/raw/Makefile.inc \ + modules/preprocs/cpp/Makefile.inc \ + modules/preprocs/gas/Makefile.inc \ + modules/preprocs/tasm/tests/Makefile.inc \ + modules/preprocs/tasm/tests/tasmpp_test.sh \ + modules/preprocs/tasm/tests/tasm-assume-comment.asm \ + modules/preprocs/tasm/tests/tasm-assume-comment.hex \ + modules/preprocs/tasm/tests/tasm-comment-instr.asm \ + modules/preprocs/tasm/tests/tasm-comment-instr.hex \ + modules/preprocs/nasm/genversion.c \ + modules/preprocs/nasm/tests/Makefile.inc \ + modules/preprocs/nasm/tests/nasmpp_test.sh \ + modules/preprocs/nasm/tests/16args.asm \ + modules/preprocs/nasm/tests/16args.hex \ + modules/preprocs/nasm/tests/ifcritical-err.asm \ + modules/preprocs/nasm/tests/ifcritical-err.errwarn \ + modules/preprocs/nasm/tests/longline.asm \ + modules/preprocs/nasm/tests/longline.hex \ + modules/preprocs/nasm/tests/macroeof-err.asm \ + modules/preprocs/nasm/tests/macroeof-err.errwarn \ + modules/preprocs/nasm/tests/noinclude-err.asm \ + modules/preprocs/nasm/tests/noinclude-err.errwarn \ + modules/preprocs/nasm/tests/nasmpp-bigint.asm \ + modules/preprocs/nasm/tests/nasmpp-bigint.hex \ + modules/preprocs/nasm/tests/nasmpp-decimal.asm \ + modules/preprocs/nasm/tests/nasmpp-decimal.hex \ + modules/preprocs/nasm/tests/nasmpp-nested.asm \ + modules/preprocs/nasm/tests/nasmpp-nested.errwarn \ + modules/preprocs/nasm/tests/nasmpp-nested.hex \ + modules/preprocs/nasm/tests/orgsect.asm \ + modules/preprocs/nasm/tests/orgsect.hex \ + modules/preprocs/nasm/tests/scope-err.asm \ + modules/preprocs/nasm/tests/scope-err.errwarn \ + modules/preprocs/raw/tests/Makefile.inc \ + modules/preprocs/raw/tests/rawpp_test.sh \ + modules/preprocs/raw/tests/longline.asm \ + modules/preprocs/raw/tests/longline.hex \ + modules/preprocs/gas/tests/Makefile.inc \ + modules/dbgfmts/codeview/Makefile.inc \ + modules/dbgfmts/dwarf2/Makefile.inc \ + modules/dbgfmts/null/Makefile.inc \ + modules/dbgfmts/stabs/Makefile.inc \ + modules/dbgfmts/codeview/cv8.txt \ + modules/dbgfmts/dwarf2/tests/Makefile.inc \ + modules/dbgfmts/dwarf2/tests/gen64/Makefile.inc \ + modules/dbgfmts/dwarf2/tests/pass32/Makefile.inc \ + modules/dbgfmts/dwarf2/tests/pass64/Makefile.inc \ + modules/dbgfmts/dwarf2/tests/passwin64/Makefile.inc \ + modules/dbgfmts/dwarf2/tests/gen64/dwarf2_gen64_test.sh \ + modules/dbgfmts/dwarf2/tests/gen64/dwarf64_pathname.asm \ + modules/dbgfmts/dwarf2/tests/gen64/dwarf64_pathname.hex \ + modules/dbgfmts/dwarf2/tests/pass32/dwarf2_pass32_test.sh \ + modules/dbgfmts/dwarf2/tests/pass32/dwarf32-err.asm \ + modules/dbgfmts/dwarf2/tests/pass32/dwarf32-err.errwarn \ + modules/dbgfmts/dwarf2/tests/pass32/dwarf32_testhd.asm \ + modules/dbgfmts/dwarf2/tests/pass32/dwarf32_testhd.hex \ + modules/dbgfmts/dwarf2/tests/pass64/dwarf2_pass64_test.sh \ + modules/dbgfmts/dwarf2/tests/pass64/dwarf64_2loc.asm \ + modules/dbgfmts/dwarf2/tests/pass64/dwarf64_2loc.hex \ + modules/dbgfmts/dwarf2/tests/pass64/dwarf64_leb128.asm \ + modules/dbgfmts/dwarf2/tests/pass64/dwarf64_leb128.hex \ + modules/dbgfmts/dwarf2/tests/passwin64/dwarf2_passwin64_test.sh \ + modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.asm \ + modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.errwarn \ + modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.hex \ + modules/dbgfmts/stabs/tests/Makefile.inc \ + modules/dbgfmts/stabs/tests/stabs_test.sh \ + modules/dbgfmts/stabs/tests/stabs-elf.asm \ + modules/dbgfmts/stabs/tests/stabs-elf.hex \ + modules/dbgfmts/yasm_dbgfmts.xml \ + modules/objfmts/dbg/Makefile.inc \ + modules/objfmts/bin/Makefile.inc \ + modules/objfmts/elf/Makefile.inc \ + modules/objfmts/coff/Makefile.inc \ + modules/objfmts/macho/Makefile.inc \ + modules/objfmts/rdf/Makefile.inc \ + modules/objfmts/win32/Makefile.inc \ + modules/objfmts/win64/Makefile.inc \ + modules/objfmts/xdf/Makefile.inc \ + modules/objfmts/bin/tests/Makefile.inc \ + modules/objfmts/bin/tests/bin_test.sh \ + modules/objfmts/bin/tests/abs.asm \ + modules/objfmts/bin/tests/abs.hex \ + modules/objfmts/bin/tests/bigorg.asm \ + modules/objfmts/bin/tests/bigorg.hex \ + modules/objfmts/bin/tests/bigorg.errwarn \ + modules/objfmts/bin/tests/bin-farabs.asm \ + modules/objfmts/bin/tests/bin-farabs.hex \ + modules/objfmts/bin/tests/bin-rip.asm \ + modules/objfmts/bin/tests/bin-rip.hex \ + modules/objfmts/bin/tests/bintest.asm \ + modules/objfmts/bin/tests/bintest.hex \ + modules/objfmts/bin/tests/float-err.asm \ + modules/objfmts/bin/tests/float-err.errwarn \ + modules/objfmts/bin/tests/float.asm \ + modules/objfmts/bin/tests/float.hex \ + modules/objfmts/bin/tests/integer-warn.asm \ + modules/objfmts/bin/tests/integer-warn.hex \ + modules/objfmts/bin/tests/integer-warn.errwarn \ + modules/objfmts/bin/tests/integer.asm \ + modules/objfmts/bin/tests/integer.hex \ + modules/objfmts/bin/tests/levelop.asm \ + modules/objfmts/bin/tests/levelop.hex \ + modules/objfmts/bin/tests/reserve.asm \ + modules/objfmts/bin/tests/reserve.hex \ + modules/objfmts/bin/tests/reserve.errwarn \ + modules/objfmts/bin/tests/shr.asm \ + modules/objfmts/bin/tests/shr.hex \ + modules/objfmts/bin/tests/multisect/Makefile.inc \ + modules/objfmts/bin/tests/multisect/bin_multi_test.sh \ + modules/objfmts/bin/tests/multisect/bin-align.asm \ + modules/objfmts/bin/tests/multisect/bin-align.errwarn \ + modules/objfmts/bin/tests/multisect/bin-align.hex \ + modules/objfmts/bin/tests/multisect/bin-align.map \ + modules/objfmts/bin/tests/multisect/bin-ssym.asm \ + modules/objfmts/bin/tests/multisect/bin-ssym.hex \ + modules/objfmts/bin/tests/multisect/bin-ssym.map \ + modules/objfmts/bin/tests/multisect/follows-loop1-err.asm \ + modules/objfmts/bin/tests/multisect/follows-loop1-err.errwarn \ + modules/objfmts/bin/tests/multisect/follows-loop2-err.asm \ + modules/objfmts/bin/tests/multisect/follows-loop2-err.errwarn \ + modules/objfmts/bin/tests/multisect/follows-notfound-err.asm \ + modules/objfmts/bin/tests/multisect/follows-notfound-err.errwarn \ + modules/objfmts/bin/tests/multisect/initbss.asm \ + modules/objfmts/bin/tests/multisect/initbss.errwarn \ + modules/objfmts/bin/tests/multisect/initbss.hex \ + modules/objfmts/bin/tests/multisect/initbss.map \ + modules/objfmts/bin/tests/multisect/ldlinux-sects.asm \ + modules/objfmts/bin/tests/multisect/ldlinux-sects.hex \ + modules/objfmts/bin/tests/multisect/ldlinux-sects.map \ + modules/objfmts/bin/tests/multisect/multisect1.asm \ + modules/objfmts/bin/tests/multisect/multisect1.hex \ + modules/objfmts/bin/tests/multisect/multisect1.map \ + modules/objfmts/bin/tests/multisect/multisect2.asm \ + modules/objfmts/bin/tests/multisect/multisect2.hex \ + modules/objfmts/bin/tests/multisect/multisect2.map \ + modules/objfmts/bin/tests/multisect/multisect3.asm \ + modules/objfmts/bin/tests/multisect/multisect3.hex \ + modules/objfmts/bin/tests/multisect/multisect3.map \ + modules/objfmts/bin/tests/multisect/multisect4.asm \ + modules/objfmts/bin/tests/multisect/multisect4.hex \ + modules/objfmts/bin/tests/multisect/multisect4.map \ + modules/objfmts/bin/tests/multisect/multisect5.asm \ + modules/objfmts/bin/tests/multisect/multisect5.hex \ + modules/objfmts/bin/tests/multisect/multisect5.map \ + modules/objfmts/bin/tests/multisect/nomultisect1.asm \ + modules/objfmts/bin/tests/multisect/nomultisect1.hex \ + modules/objfmts/bin/tests/multisect/nomultisect1.map \ + modules/objfmts/bin/tests/multisect/nomultisect2.asm \ + modules/objfmts/bin/tests/multisect/nomultisect2.hex \ + modules/objfmts/bin/tests/multisect/nomultisect2.map \ + modules/objfmts/bin/tests/multisect/vfollows-loop1-err.asm \ + modules/objfmts/bin/tests/multisect/vfollows-loop1-err.errwarn \ + modules/objfmts/bin/tests/multisect/vfollows-loop2-err.asm \ + modules/objfmts/bin/tests/multisect/vfollows-loop2-err.errwarn \ + modules/objfmts/bin/tests/multisect/vfollows-notfound-err.asm \ + modules/objfmts/bin/tests/multisect/vfollows-notfound-err.errwarn \ + modules/objfmts/elf/tests/Makefile.inc \ + modules/objfmts/elf/tests/elf_test.sh \ + modules/objfmts/elf/tests/curpos.asm \ + modules/objfmts/elf/tests/curpos.hex \ + modules/objfmts/elf/tests/curpos-err.asm \ + modules/objfmts/elf/tests/curpos-err.errwarn \ + modules/objfmts/elf/tests/elf-overdef.asm \ + modules/objfmts/elf/tests/elf-overdef.hex \ + modules/objfmts/elf/tests/elf-x86id.asm \ + modules/objfmts/elf/tests/elf-x86id.hex \ + modules/objfmts/elf/tests/elfabssect.asm \ + modules/objfmts/elf/tests/elfabssect.hex \ + modules/objfmts/elf/tests/elfcond.asm \ + modules/objfmts/elf/tests/elfcond.hex \ + modules/objfmts/elf/tests/elfequabs.asm \ + modules/objfmts/elf/tests/elfequabs.hex \ + modules/objfmts/elf/tests/elfglobal.asm \ + modules/objfmts/elf/tests/elfglobal.hex \ + modules/objfmts/elf/tests/elfglobext.asm \ + modules/objfmts/elf/tests/elfglobext.hex \ + modules/objfmts/elf/tests/elfglobext2.asm \ + modules/objfmts/elf/tests/elfglobext2.hex \ + modules/objfmts/elf/tests/elfmanysym.asm \ + modules/objfmts/elf/tests/elfmanysym.hex \ + modules/objfmts/elf/tests/elfreloc.asm \ + modules/objfmts/elf/tests/elfreloc.hex \ + modules/objfmts/elf/tests/elfreloc-ext.asm \ + modules/objfmts/elf/tests/elfreloc-ext.hex \ + modules/objfmts/elf/tests/elfsectalign.asm \ + modules/objfmts/elf/tests/elfsectalign.hex \ + modules/objfmts/elf/tests/elfso.asm \ + modules/objfmts/elf/tests/elfso.hex \ + modules/objfmts/elf/tests/elftest.c \ + modules/objfmts/elf/tests/elftest.asm \ + modules/objfmts/elf/tests/elftest.hex \ + modules/objfmts/elf/tests/elftimes.asm \ + modules/objfmts/elf/tests/elftimes.hex \ + modules/objfmts/elf/tests/elftypesize.asm \ + modules/objfmts/elf/tests/elftypesize.hex \ + modules/objfmts/elf/tests/elfvisibility.asm \ + modules/objfmts/elf/tests/elfvisibility.errwarn \ + modules/objfmts/elf/tests/elfvisibility.hex \ + modules/objfmts/elf/tests/nasm-sectname.asm \ + modules/objfmts/elf/tests/nasm-sectname.hex \ + modules/objfmts/elf/tests/nasm-forceident.asm \ + modules/objfmts/elf/tests/nasm-forceident.hex \ + modules/objfmts/elf/tests/amd64/Makefile.inc \ + modules/objfmts/elf/tests/x32/Makefile.inc \ + modules/objfmts/elf/tests/gas32/Makefile.inc \ + modules/objfmts/elf/tests/gas64/Makefile.inc \ + modules/objfmts/elf/tests/gasx32/Makefile.inc \ + modules/objfmts/elf/tests/amd64/elf_amd64_test.sh \ + modules/objfmts/elf/tests/amd64/elf-rip.asm \ + modules/objfmts/elf/tests/amd64/elf-rip.hex \ + modules/objfmts/elf/tests/amd64/elfso64.asm \ + modules/objfmts/elf/tests/amd64/elfso64.hex \ + modules/objfmts/elf/tests/amd64/gotpcrel.asm \ + modules/objfmts/elf/tests/amd64/gotpcrel.hex \ + modules/objfmts/elf/tests/amd64/multiplefixup.asm \ + modules/objfmts/elf/tests/amd64/multiplefixup.hex \ + modules/objfmts/elf/tests/x32/elf_x32_test.sh \ + modules/objfmts/elf/tests/x32/elf-rip.asm \ + modules/objfmts/elf/tests/x32/elf-rip.hex \ + modules/objfmts/elf/tests/x32/elfsox32.asm \ + modules/objfmts/elf/tests/x32/elfsox32.hex \ + modules/objfmts/elf/tests/x32/gotpcrel.asm \ + modules/objfmts/elf/tests/x32/gotpcrel.hex \ + modules/objfmts/elf/tests/x32/multiplefixup.asm \ + modules/objfmts/elf/tests/x32/multiplefixup.hex \ + modules/objfmts/elf/tests/gas32/elf_gas32_test.sh \ + modules/objfmts/elf/tests/gas32/elf_gas32_ssym.asm \ + modules/objfmts/elf/tests/gas32/elf_gas32_ssym.hex \ + modules/objfmts/elf/tests/gas32/elf_gas32_got.asm \ + modules/objfmts/elf/tests/gas32/elf_gas32_got.hex \ + modules/objfmts/elf/tests/gas64/elf_gas64_test.sh \ + modules/objfmts/elf/tests/gas64/crosssect.asm \ + modules/objfmts/elf/tests/gas64/crosssect.hex \ + modules/objfmts/elf/tests/gas64/elf_gas64_curpos.asm \ + modules/objfmts/elf/tests/gas64/elf_gas64_curpos.hex \ + modules/objfmts/elf/tests/gas64/elf_gas64_reloc.asm \ + modules/objfmts/elf/tests/gas64/elf_gas64_reloc.hex \ + modules/objfmts/elf/tests/gas64/elf_gas64_ssym.asm \ + modules/objfmts/elf/tests/gas64/elf_gas64_ssym.hex \ + modules/objfmts/elf/tests/gasx32/elf_gasx32_test.sh \ + modules/objfmts/elf/tests/gasx32/crosssect.asm \ + modules/objfmts/elf/tests/gasx32/crosssect.hex \ + modules/objfmts/elf/tests/gasx32/elf_gasx32_curpos.asm \ + modules/objfmts/elf/tests/gasx32/elf_gasx32_curpos.hex \ + modules/objfmts/elf/tests/gasx32/elf_gasx32_reloc.asm \ + modules/objfmts/elf/tests/gasx32/elf_gasx32_reloc.hex \ + modules/objfmts/elf/tests/gasx32/elf_gasx32_ssym.asm \ + modules/objfmts/elf/tests/gasx32/elf_gasx32_ssym.hex \ + modules/objfmts/coff/win64-nasm.mac \ + modules/objfmts/coff/win64-gas.mac \ + modules/objfmts/coff/tests/Makefile.inc \ + modules/objfmts/coff/tests/coff_test.sh \ + modules/objfmts/coff/tests/cofftest.c \ + modules/objfmts/coff/tests/cofftest.asm \ + modules/objfmts/coff/tests/cofftest.hex \ + modules/objfmts/coff/tests/cofftimes.asm \ + modules/objfmts/coff/tests/cofftimes.hex \ + modules/objfmts/coff/tests/x86id.asm \ + modules/objfmts/coff/tests/x86id.hex \ + modules/objfmts/coff/tests/x86id.errwarn \ + modules/objfmts/macho/tests/Makefile.inc \ + modules/objfmts/macho/tests/gas32/Makefile.inc \ + modules/objfmts/macho/tests/gas64/Makefile.inc \ + modules/objfmts/macho/tests/nasm32/Makefile.inc \ + modules/objfmts/macho/tests/nasm64/Makefile.inc \ + modules/objfmts/macho/tests/gas32/gas_macho32_test.sh \ + modules/objfmts/macho/tests/gas32/gas-macho32.asm \ + modules/objfmts/macho/tests/gas32/gas-macho32.hex \ + modules/objfmts/macho/tests/gas64/gas_macho64_test.sh \ + modules/objfmts/macho/tests/gas64/gas-macho64.asm \ + modules/objfmts/macho/tests/gas64/gas-macho64.hex \ + modules/objfmts/macho/tests/gas64/gas-macho64-pic.asm \ + modules/objfmts/macho/tests/gas64/gas-macho64-pic.hex \ + modules/objfmts/macho/tests/nasm32/macho32_test.sh \ + modules/objfmts/macho/tests/nasm32/machotest.c \ + modules/objfmts/macho/tests/nasm32/machotest.asm \ + modules/objfmts/macho/tests/nasm32/machotest.hex \ + modules/objfmts/macho/tests/nasm32/macho-reloc.asm \ + modules/objfmts/macho/tests/nasm32/macho-reloc.hex \ + modules/objfmts/macho/tests/nasm32/macho32-pext.asm \ + modules/objfmts/macho/tests/nasm32/macho32-pext.hex \ + modules/objfmts/macho/tests/nasm32/macho32-pic.asm \ + modules/objfmts/macho/tests/nasm32/macho32-pic.hex \ + modules/objfmts/macho/tests/nasm32/macho32-sect.asm \ + modules/objfmts/macho/tests/nasm32/macho32-sect.errwarn \ + modules/objfmts/macho/tests/nasm32/macho32-sect.hex \ + modules/objfmts/macho/tests/nasm32/macho32-size.asm \ + modules/objfmts/macho/tests/nasm32/macho32-size.hex \ + modules/objfmts/macho/tests/nasm64/nasm-macho64-pic.asm \ + modules/objfmts/macho/tests/nasm64/nasm-macho64-pic.hex \ + modules/objfmts/macho/tests/nasm64/macho64_test.sh \ + modules/objfmts/macho/tests/nasm64/machotest64.c \ + modules/objfmts/macho/tests/nasm64/machotest64.asm \ + modules/objfmts/macho/tests/nasm64/machotest64.hex \ + modules/objfmts/macho/tests/nasm64/macho-reloc64-err.asm \ + modules/objfmts/macho/tests/nasm64/macho-reloc64-err.errwarn \ + modules/objfmts/rdf/tests/Makefile.inc \ + modules/objfmts/rdf/tests/rdf_test.sh \ + modules/objfmts/rdf/tests/rdfabs.asm \ + modules/objfmts/rdf/tests/rdfabs.errwarn \ + modules/objfmts/rdf/tests/rdfabs.hex \ + modules/objfmts/rdf/tests/rdfext.asm \ + modules/objfmts/rdf/tests/rdfext.hex \ + modules/objfmts/rdf/tests/rdfseg.asm \ + modules/objfmts/rdf/tests/rdfseg.hex \ + modules/objfmts/rdf/tests/rdfseg2.asm \ + modules/objfmts/rdf/tests/rdfseg2.hex \ + modules/objfmts/rdf/tests/rdftest1.asm \ + modules/objfmts/rdf/tests/rdftest1.hex \ + modules/objfmts/rdf/tests/rdftest2.asm \ + modules/objfmts/rdf/tests/rdftest2.hex \ + modules/objfmts/rdf/tests/rdtlib.asm \ + modules/objfmts/rdf/tests/rdtlib.hex \ + modules/objfmts/rdf/tests/rdtmain.asm \ + modules/objfmts/rdf/tests/rdtmain.hex \ + modules/objfmts/rdf/tests/testlib.asm \ + modules/objfmts/rdf/tests/testlib.hex \ + modules/objfmts/win32/tests/Makefile.inc \ + modules/objfmts/win32/tests/export.asm \ + modules/objfmts/win32/tests/export.hex \ + modules/objfmts/win32/tests/win32_test.sh \ + modules/objfmts/win32/tests/win32-curpos.asm \ + modules/objfmts/win32/tests/win32-curpos.hex \ + modules/objfmts/win32/tests/win32-overdef.asm \ + modules/objfmts/win32/tests/win32-overdef.hex \ + modules/objfmts/win32/tests/win32-safeseh.asm \ + modules/objfmts/win32/tests/win32-safeseh.hex \ + modules/objfmts/win32/tests/win32-safeseh.masm \ + modules/objfmts/win32/tests/win32-segof.asm \ + modules/objfmts/win32/tests/win32-segof.hex \ + modules/objfmts/win32/tests/win32test.c \ + modules/objfmts/win32/tests/win32test.asm \ + modules/objfmts/win32/tests/win32test.hex \ + modules/objfmts/win32/tests/gas/Makefile.inc \ + modules/objfmts/win32/tests/gas/win32_gas_test.sh \ + modules/objfmts/win32/tests/gas/win32at.asm \ + modules/objfmts/win32/tests/gas/win32at.hex \ + modules/objfmts/win32/tests/gas/win32def.asm \ + modules/objfmts/win32/tests/gas/win32def.hex \ + modules/objfmts/win32/tests/gas/win32secrel32.asm \ + modules/objfmts/win32/tests/gas/win32secrel32.hex \ + modules/objfmts/win64/tests/Makefile.inc \ + modules/objfmts/win64/tests/win64_test.sh \ + modules/objfmts/win64/tests/sce1.asm \ + modules/objfmts/win64/tests/sce1.hex \ + modules/objfmts/win64/tests/sce1-err.asm \ + modules/objfmts/win64/tests/sce1-err.errwarn \ + modules/objfmts/win64/tests/sce2.asm \ + modules/objfmts/win64/tests/sce2.hex \ + modules/objfmts/win64/tests/sce2-err.asm \ + modules/objfmts/win64/tests/sce2-err.errwarn \ + modules/objfmts/win64/tests/sce3.asm \ + modules/objfmts/win64/tests/sce3.hex \ + modules/objfmts/win64/tests/sce3.masm \ + modules/objfmts/win64/tests/sce4.asm \ + modules/objfmts/win64/tests/sce4.hex \ + modules/objfmts/win64/tests/sce4.masm \ + modules/objfmts/win64/tests/sce4-err.asm \ + modules/objfmts/win64/tests/sce4-err.errwarn \ + modules/objfmts/win64/tests/win64-abs.asm \ + modules/objfmts/win64/tests/win64-abs.hex \ + modules/objfmts/win64/tests/win64-curpos.asm \ + modules/objfmts/win64/tests/win64-curpos.hex \ + modules/objfmts/win64/tests/win64-dataref.asm \ + modules/objfmts/win64/tests/win64-dataref.hex \ + modules/objfmts/win64/tests/win64-dataref.masm \ + modules/objfmts/win64/tests/win64-dataref2.asm \ + modules/objfmts/win64/tests/win64-dataref2.hex \ + modules/objfmts/win64/tests/win64-dataref2.masm \ + modules/objfmts/win64/tests/win64-function.asm \ + modules/objfmts/win64/tests/win64-function.hex \ + modules/objfmts/win64/tests/win64-imagebase.hex \ + modules/objfmts/win64/tests/win64-imagebase.asm \ + modules/objfmts/win64/tests/gas/Makefile.inc \ + modules/objfmts/win64/tests/gas/win64_gas_test.sh \ + modules/objfmts/win64/tests/gas/win64-gas-sce.asm \ + modules/objfmts/win64/tests/gas/win64-gas-sce.hex \ + modules/objfmts/xdf/tests/Makefile.inc \ + modules/objfmts/xdf/tests/xdf_test.sh \ + modules/objfmts/xdf/tests/xdf-overdef.asm \ + modules/objfmts/xdf/tests/xdf-overdef.hex \ + modules/objfmts/xdf/tests/xdflong.asm \ + modules/objfmts/xdf/tests/xdflong.hex \ + modules/objfmts/xdf/tests/xdflong.errwarn \ + modules/objfmts/xdf/tests/xdfother.asm \ + modules/objfmts/xdf/tests/xdfother.hex \ + modules/objfmts/xdf/tests/xdfprotect.asm \ + modules/objfmts/xdf/tests/xdfprotect.hex \ + modules/objfmts/xdf/tests/xdfsect.asm \ + modules/objfmts/xdf/tests/xdfsect.hex \ + modules/objfmts/xdf/tests/xdfsect-err.asm \ + modules/objfmts/xdf/tests/xdfsect-err.errwarn \ + modules/objfmts/xdf/tests/xdfvirtual.asm \ + modules/objfmts/xdf/tests/xdfvirtual.hex \ + modules/objfmts/yasm_objfmts.xml libyasm/genmodule.c \ + libyasm/module.in libyasm/tests/Makefile.inc \ + libyasm/tests/libyasm_test.sh libyasm/tests/1shl0.asm \ + libyasm/tests/1shl0.hex libyasm/tests/absloop-err.asm \ + libyasm/tests/absloop-err.errwarn \ + libyasm/tests/charconst64.asm libyasm/tests/charconst64.hex \ + libyasm/tests/data-rawvalue.asm \ + libyasm/tests/data-rawvalue.hex libyasm/tests/duplabel-err.asm \ + libyasm/tests/duplabel-err.errwarn libyasm/tests/emptydata.asm \ + libyasm/tests/emptydata.hex libyasm/tests/equ-expand.asm \ + libyasm/tests/equ-expand.hex libyasm/tests/expr-fold-level.asm \ + libyasm/tests/expr-fold-level.hex \ + libyasm/tests/expr-simplify-identity.asm \ + libyasm/tests/expr-simplify-identity.hex \ + libyasm/tests/expr-wide-ident.asm \ + libyasm/tests/expr-wide-ident.hex libyasm/tests/externdef.asm \ + libyasm/tests/externdef.errwarn libyasm/tests/externdef.hex \ + libyasm/tests/incbin.asm libyasm/tests/incbin.hex \ + libyasm/tests/jmpsize1.asm libyasm/tests/jmpsize1.hex \ + libyasm/tests/jmpsize1-err.asm \ + libyasm/tests/jmpsize1-err.errwarn \ + libyasm/tests/opt-align1.asm libyasm/tests/opt-align1.hex \ + libyasm/tests/opt-align2.asm libyasm/tests/opt-align2.hex \ + libyasm/tests/opt-align3.asm libyasm/tests/opt-align3.hex \ + libyasm/tests/opt-circular1-err.asm \ + libyasm/tests/opt-circular1-err.errwarn \ + libyasm/tests/opt-circular2-err.asm \ + libyasm/tests/opt-circular2-err.errwarn \ + libyasm/tests/opt-circular3-err.asm \ + libyasm/tests/opt-circular3-err.errwarn \ + libyasm/tests/opt-gvmat64.asm libyasm/tests/opt-gvmat64.hex \ + libyasm/tests/opt-immexpand.asm \ + libyasm/tests/opt-immexpand.hex \ + libyasm/tests/opt-immnoexpand.asm \ + libyasm/tests/opt-immnoexpand.hex \ + libyasm/tests/opt-oldalign.asm libyasm/tests/opt-oldalign.hex \ + libyasm/tests/opt-struc.asm libyasm/tests/opt-struc.hex \ + libyasm/tests/reserve-err1.asm \ + libyasm/tests/reserve-err1.errwarn \ + libyasm/tests/reserve-err2.asm \ + libyasm/tests/reserve-err2.errwarn libyasm/tests/strucsize.asm \ + libyasm/tests/strucsize.hex libyasm/tests/times0.asm \ + libyasm/tests/times0.hex libyasm/tests/timesfwd.asm \ + libyasm/tests/timesfwd.hex libyasm/tests/timesover-err.asm \ + libyasm/tests/timesover-err.errwarn \ + libyasm/tests/timesunder.asm libyasm/tests/timesunder.hex \ + libyasm/tests/times-res.asm libyasm/tests/times-res.errwarn \ + libyasm/tests/times-res.hex libyasm/tests/unary.asm \ + libyasm/tests/unary.hex libyasm/tests/value-err.asm \ + libyasm/tests/value-err.errwarn \ + libyasm/tests/value-samesym.asm \ + libyasm/tests/value-samesym.errwarn \ + libyasm/tests/value-samesym.hex libyasm/tests/value-mask.asm \ + libyasm/tests/value-mask.errwarn libyasm/tests/value-mask.hex \ + libyasm/tests/value-shr-symexpr.asm \ + libyasm/tests/value-shr-symexpr.hex \ + frontends/yasm/Makefile.inc frontends/tasm/Makefile.inc \ + frontends/vsyasm/Makefile.inc frontends/yasm/yasm.xml \ + m4/intmax.m4 m4/longdouble.m4 m4/nls.m4 m4/po.m4 \ + m4/printf-posix.m4 m4/signed.m4 m4/size_max.m4 m4/ulonglong.m4 \ + m4/wchar_t.m4 m4/wint_t.m4 m4/xsize.m4 m4/codeset.m4 \ + m4/gettext.m4 m4/glibc21.m4 m4/iconv.m4 m4/intdiv0.m4 \ + m4/inttypes.m4 m4/inttypes_h.m4 m4/inttypes-pri.m4 \ + m4/isc-posix.m4 m4/lcmessage.m4 m4/lib-ld.m4 m4/lib-link.m4 \ + m4/lib-prefix.m4 m4/longlong.m4 m4/progtest.m4 m4/stdint_h.m4 \ + m4/uintmax_t.m4 m4/pythonhead.m4 m4/cython.m4 out_test.sh \ + Artistic.txt BSD.txt GNU_GPL-2.0 GNU_LGPL-2.0 splint.sh \ + YASM-VERSION-GEN.sh CMakeLists.txt ConfigureChecks.cmake \ + config.h.cmake libyasm-stdint.h.cmake cmake/CMakeLists.txt \ + cmake/modules/CMakeLists.txt cmake/modules/DummyCFile.c \ + cmake/modules/VersionGen.cmake cmake/modules/YasmMacros.cmake \ + frontends/CMakeLists.txt frontends/tasm/CMakeLists.txt \ + frontends/vsyasm/CMakeLists.txt frontends/yasm/CMakeLists.txt \ + frontends/yasm/genstring.py frontends/yasm/yasm-plugin.c \ + frontends/yasm/yasm-plugin.h libyasm/CMakeLists.txt \ + libyasm/cmake-module.c modules/arch/CMakeLists.txt \ + modules/arch/lc3b/CMakeLists.txt \ + modules/arch/x86/CMakeLists.txt modules/CMakeLists.txt \ + modules/dbgfmts/CMakeLists.txt \ + modules/dbgfmts/codeview/CMakeLists.txt \ + modules/dbgfmts/dwarf2/CMakeLists.txt \ + modules/dbgfmts/null/CMakeLists.txt \ + modules/dbgfmts/stabs/CMakeLists.txt \ + modules/listfmts/CMakeLists.txt \ + modules/listfmts/nasm/CMakeLists.txt \ + modules/objfmts/bin/CMakeLists.txt \ + modules/objfmts/CMakeLists.txt \ + modules/objfmts/coff/CMakeLists.txt \ + modules/objfmts/dbg/CMakeLists.txt \ + modules/objfmts/elf/CMakeLists.txt \ + modules/objfmts/macho/CMakeLists.txt \ + modules/objfmts/rdf/CMakeLists.txt \ + modules/objfmts/xdf/CMakeLists.txt \ + modules/parsers/CMakeLists.txt \ + modules/parsers/gas/CMakeLists.txt \ + modules/parsers/nasm/CMakeLists.txt \ + modules/preprocs/CMakeLists.txt \ + modules/preprocs/cpp/CMakeLists.txt \ + modules/preprocs/gas/CMakeLists.txt \ + modules/preprocs/nasm/CMakeLists.txt \ + modules/preprocs/raw/CMakeLists.txt plugins/README \ + plugins/dbg/CMakeLists.txt plugins/dbg/dbg-objfmt.c \ + plugins/dbg/init_plugin.c plugins/dbg/README \ + plugins/x86/CMakeLists.txt plugins/x86/init_plugin.c \ + plugins/x86/README tools/CMakeLists.txt \ + tools/genmacro/CMakeLists.txt tools/genperf/CMakeLists.txt \ + tools/re2c/CMakeLists.txt Mkfiles/Makefile.flat \ + Mkfiles/Makefile.dj Mkfiles/dj/config.h \ + Mkfiles/dj/libyasm-stdint.h Mkfiles/vc9/config.h \ + Mkfiles/vc9/crt_secure_no_deprecate.vsprops \ + Mkfiles/vc9/libyasm-stdint.h Mkfiles/vc9/readme.vc9.txt \ + Mkfiles/vc9/vc98_swap.py Mkfiles/vc9/vsyasm.vcproj \ + Mkfiles/vc9/yasm.sln Mkfiles/vc9/yasm.vcproj \ + Mkfiles/vc9/ytasm.vcproj Mkfiles/vc9/yasm.rules \ + Mkfiles/vc9/genmacro/genmacro.vcproj \ + Mkfiles/vc9/genmacro/run.bat \ + Mkfiles/vc9/genmodule/genmodule.vcproj \ + Mkfiles/vc9/genmodule/run.bat \ + Mkfiles/vc9/genperf/genperf.vcproj Mkfiles/vc9/genperf/run.bat \ + Mkfiles/vc9/genstring/genstring.vcproj \ + Mkfiles/vc9/genstring/run.bat \ + Mkfiles/vc9/genversion/genversion.vcproj \ + Mkfiles/vc9/genversion/run.bat \ + Mkfiles/vc9/libyasm/libyasm.vcproj \ + Mkfiles/vc9/modules/modules.vcproj \ + Mkfiles/vc9/re2c/re2c.vcproj Mkfiles/vc9/re2c/run.bat \ + Mkfiles/vc10/config.h \ + Mkfiles/vc10/crt_secure_no_deprecate.props \ + Mkfiles/vc10/crt_secure_no_deprecate.vsprops \ + Mkfiles/vc10/libyasm-stdint.h Mkfiles/vc10/out_copy_rename.bat \ + Mkfiles/vc10/readme.vc10.txt Mkfiles/vc10/vsyasm.props \ + Mkfiles/vc10/vsyasm.targets Mkfiles/vc10/vsyasm.vcxproj \ + Mkfiles/vc10/vsyasm.xml Mkfiles/vc10/yasm.sln \ + Mkfiles/vc10/yasm.vcxproj Mkfiles/vc10/yasm.vcxproj.filters \ + Mkfiles/vc10/ytasm.vcxproj \ + Mkfiles/vc10/genmacro/genmacro.vcxproj \ + Mkfiles/vc10/genmacro/genmacro.vcxproj.filters \ + Mkfiles/vc10/genmacro/run.bat \ + Mkfiles/vc10/genmodule/genmodule.vcxproj \ + Mkfiles/vc10/genmodule/genmodule.vcxproj.filters \ + Mkfiles/vc10/genmodule/run.bat \ + Mkfiles/vc10/genperf/genperf.vcxproj \ + Mkfiles/vc10/genperf/genperf.vcxproj.filters \ + Mkfiles/vc10/genperf/run.bat \ + Mkfiles/vc10/genstring/genstring.vcxproj \ + Mkfiles/vc10/genstring/genstring.vcxproj.filters \ + Mkfiles/vc10/genstring/run.bat \ + Mkfiles/vc10/genversion/genversion.vcxproj \ + Mkfiles/vc10/genversion/genversion.vcxproj.filters \ + Mkfiles/vc10/genversion/run.bat \ + Mkfiles/vc10/libyasm/libyasm.vcxproj \ + Mkfiles/vc10/libyasm/libyasm.vcxproj.filters \ + Mkfiles/vc10/modules/modules.vcxproj \ + Mkfiles/vc10/modules/modules.vcxproj.filters \ + Mkfiles/vc10/re2c/re2c.vcxproj \ + Mkfiles/vc10/re2c/re2c.vcxproj.filters \ + Mkfiles/vc10/re2c/run.bat Mkfiles/vc12/config.h \ + Mkfiles/vc12/crt_secure_no_deprecate.props \ + Mkfiles/vc12/crt_secure_no_deprecate.vsprops \ + Mkfiles/vc12/libyasm/libyasm.vcxproj \ + Mkfiles/vc12/libyasm/libyasm.vcxproj.filters \ + Mkfiles/vc12/modules/modules.vcxproj \ + Mkfiles/vc12/modules/modules.vcxproj.filters \ + Mkfiles/vc12/out_copy_rename.bat Mkfiles/vc12/readme.vc12.txt \ + Mkfiles/vc12/vsyasm.props Mkfiles/vc12/vsyasm.targets \ + Mkfiles/vc12/vsyasm.vcxproj Mkfiles/vc12/vsyasm.xml \ + Mkfiles/vc12/yasm.sln Mkfiles/vc12/yasm.vcxproj \ + Mkfiles/vc12/yasm.vcxproj.filters Mkfiles/vc12/ytasm.vcxproj \ + genstring.c + +# libyasm-stdint.h doesn't clean up after itself? +CONFIG_CLEAN_FILES = libyasm-stdint.h YASM-VERSION-FILE YASM-VERSION.h +re2c_SOURCES = +re2c_LDADD = re2c-main.$(OBJEXT) re2c-code.$(OBJEXT) \ + re2c-dfa.$(OBJEXT) re2c-parser.$(OBJEXT) \ + re2c-actions.$(OBJEXT) re2c-scanner.$(OBJEXT) \ + re2c-mbo_getopt.$(OBJEXT) re2c-substr.$(OBJEXT) \ + re2c-translate.$(OBJEXT) +re2c_LINK = $(CCLD_FOR_BUILD) -o $@ +genmacro_SOURCES = +genmacro_LDADD = genmacro.$(OBJEXT) +genmacro_LINK = $(CCLD_FOR_BUILD) -o $@ +genperf_SOURCES = +genperf_LDADD = genperf.$(OBJEXT) gp-perfect.$(OBJEXT) \ + gp-phash.$(OBJEXT) gp-xmalloc.$(OBJEXT) gp-xstrdup.$(OBJEXT) +genperf_LINK = $(CCLD_FOR_BUILD) -o $@ +PYBINDING_DEPS = tools/python-yasm/bytecode.pxi \ + tools/python-yasm/errwarn.pxi tools/python-yasm/expr.pxi \ + tools/python-yasm/floatnum.pxi tools/python-yasm/intnum.pxi \ + tools/python-yasm/symrec.pxi tools/python-yasm/value.pxi +YASM_MODULES = arch_x86 arch_lc3b listfmt_nasm parser_gas parser_gnu \ + parser_nasm parser_tasm preproc_nasm preproc_tasm preproc_raw \ + preproc_cpp preproc_gas dbgfmt_cv8 dbgfmt_dwarf2 dbgfmt_null \ + dbgfmt_stabs objfmt_dbg objfmt_bin objfmt_dosexe objfmt_elf \ + objfmt_elf32 objfmt_elf64 objfmt_elfx32 objfmt_coff \ + objfmt_macho objfmt_macho32 objfmt_macho64 objfmt_rdf \ + objfmt_win32 objfmt_win64 objfmt_x64 objfmt_xdf +lib_LIBRARIES = libyasm.a +libyasm_a_SOURCES = modules/arch/x86/x86arch.c \ + modules/arch/x86/x86arch.h modules/arch/x86/x86bc.c \ + modules/arch/x86/x86expr.c modules/arch/x86/x86id.c \ + modules/arch/lc3b/lc3barch.c modules/arch/lc3b/lc3barch.h \ + modules/arch/lc3b/lc3bbc.c \ + modules/listfmts/nasm/nasm-listfmt.c \ + modules/parsers/gas/gas-parser.c \ + modules/parsers/gas/gas-parser.h \ + modules/parsers/gas/gas-parse.c \ + modules/parsers/gas/gas-parse-intel.c \ + modules/parsers/nasm/nasm-parser.c \ + modules/parsers/nasm/nasm-parser.h \ + modules/parsers/nasm/nasm-parser-struct.h \ + modules/parsers/nasm/nasm-parse.c \ + modules/preprocs/nasm/nasm-preproc.c \ + modules/preprocs/nasm/nasm-pp.h \ + modules/preprocs/nasm/nasm-pp.c modules/preprocs/nasm/nasm.h \ + modules/preprocs/nasm/nasmlib.h \ + modules/preprocs/nasm/nasmlib.c \ + modules/preprocs/nasm/nasm-eval.h \ + modules/preprocs/nasm/nasm-eval.c \ + modules/preprocs/raw/raw-preproc.c \ + modules/preprocs/cpp/cpp-preproc.c \ + modules/preprocs/gas/gas-preproc.c \ + modules/preprocs/gas/gas-eval.h \ + modules/preprocs/gas/gas-eval.c \ + modules/dbgfmts/codeview/cv-dbgfmt.h \ + modules/dbgfmts/codeview/cv-dbgfmt.c \ + modules/dbgfmts/codeview/cv-symline.c \ + modules/dbgfmts/codeview/cv-type.c \ + modules/dbgfmts/dwarf2/dwarf2-dbgfmt.h \ + modules/dbgfmts/dwarf2/dwarf2-dbgfmt.c \ + modules/dbgfmts/dwarf2/dwarf2-line.c \ + modules/dbgfmts/dwarf2/dwarf2-aranges.c \ + modules/dbgfmts/dwarf2/dwarf2-info.c \ + modules/dbgfmts/null/null-dbgfmt.c \ + modules/dbgfmts/stabs/stabs-dbgfmt.c \ + modules/objfmts/dbg/dbg-objfmt.c \ + modules/objfmts/bin/bin-objfmt.c modules/objfmts/elf/elf.c \ + modules/objfmts/elf/elf.h modules/objfmts/elf/elf-objfmt.c \ + modules/objfmts/elf/elf-machine.h \ + modules/objfmts/elf/elf-x86-x86.c \ + modules/objfmts/elf/elf-x86-amd64.c \ + modules/objfmts/elf/elf-x86-x32.c \ + modules/objfmts/coff/coff-objfmt.c \ + modules/objfmts/coff/coff-objfmt.h \ + modules/objfmts/coff/win64-except.c \ + modules/objfmts/macho/macho-objfmt.c \ + modules/objfmts/rdf/rdf-objfmt.c \ + modules/objfmts/xdf/xdf-objfmt.c libyasm/assocdat.c \ + libyasm/bitvect.c libyasm/bc-align.c libyasm/bc-data.c \ + libyasm/bc-incbin.c libyasm/bc-org.c libyasm/bc-reserve.c \ + libyasm/bytecode.c libyasm/errwarn.c libyasm/expr.c \ + libyasm/file.c libyasm/floatnum.c libyasm/hamt.c \ + libyasm/insn.c libyasm/intnum.c libyasm/inttree.c \ + libyasm/linemap.c libyasm/md5.c libyasm/mergesort.c \ + libyasm/phash.c libyasm/section.c libyasm/strcasecmp.c \ + libyasm/strsep.c libyasm/symrec.c libyasm/valparam.c \ + libyasm/value.c libyasm/xmalloc.c libyasm/xstrdup.c +nodist_libyasm_a_SOURCES = x86cpu.c x86regtmod.c lc3bid.c gas-token.c \ + nasm-token.c module.c +genversion_SOURCES = +genversion_LDADD = genversion.$(OBJEXT) +genversion_LINK = $(CCLD_FOR_BUILD) -o $@ +genmodule_SOURCES = +genmodule_LDADD = genmodule.$(OBJEXT) +genmodule_LINK = $(CCLD_FOR_BUILD) -o $@ +modincludedir = $(includedir)/libyasm +modinclude_HEADERS = libyasm/arch.h libyasm/assocdat.h \ + libyasm/bitvect.h libyasm/bytecode.h libyasm/compat-queue.h \ + libyasm/coretype.h libyasm/dbgfmt.h libyasm/errwarn.h \ + libyasm/expr.h libyasm/file.h libyasm/floatnum.h \ + libyasm/hamt.h libyasm/insn.h libyasm/intnum.h \ + libyasm/inttree.h libyasm/linemap.h libyasm/listfmt.h \ + libyasm/md5.h libyasm/module.h libyasm/objfmt.h \ + libyasm/parser.h libyasm/phash.h libyasm/preproc.h \ + libyasm/section.h libyasm/symrec.h libyasm/valparam.h \ + libyasm/value.h +bitvect_test_SOURCES = libyasm/tests/bitvect_test.c +bitvect_test_LDADD = libyasm.a $(INTLLIBS) +floatnum_test_SOURCES = libyasm/tests/floatnum_test.c +floatnum_test_LDADD = libyasm.a $(INTLLIBS) +leb128_test_SOURCES = libyasm/tests/leb128_test.c +leb128_test_LDADD = libyasm.a $(INTLLIBS) +splitpath_test_SOURCES = libyasm/tests/splitpath_test.c +splitpath_test_LDADD = libyasm.a $(INTLLIBS) +combpath_test_SOURCES = libyasm/tests/combpath_test.c +combpath_test_LDADD = libyasm.a $(INTLLIBS) +uncstring_test_SOURCES = libyasm/tests/uncstring_test.c +uncstring_test_LDADD = libyasm.a $(INTLLIBS) +yasm_SOURCES = frontends/yasm/yasm.c frontends/yasm/yasm-options.c \ + frontends/yasm/yasm-options.h +yasm_LDADD = libyasm.a $(INTLLIBS) +ytasm_SOURCES = frontends/tasm/tasm.c frontends/tasm/tasm-options.c \ + frontends/tasm/tasm-options.h +ytasm_LDADD = libyasm.a $(INTLLIBS) +vsyasm_SOURCES = frontends/vsyasm/vsyasm.c \ + frontends/yasm/yasm-options.c frontends/yasm/yasm-options.h +vsyasm_LDADD = libyasm.a $(INTLLIBS) + +# genstring build +genstring_SOURCES = +genstring_LDADD = genstring.$(OBJEXT) +genstring_LINK = $(CCLD_FOR_BUILD) -o $@ +all: $(BUILT_SOURCES) config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .gperf .c .log .o .obj .test .test$(EXEEXT) .trs +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/tools/Makefile.inc $(srcdir)/tools/re2c/Makefile.inc $(srcdir)/tools/genmacro/Makefile.inc $(srcdir)/tools/genperf/Makefile.inc $(srcdir)/tools/python-yasm/Makefile.inc $(srcdir)/tools/python-yasm/tests/Makefile.inc $(srcdir)/modules/Makefile.inc $(srcdir)/modules/arch/Makefile.inc $(srcdir)/modules/arch/x86/Makefile.inc $(srcdir)/modules/arch/x86/tests/Makefile.inc $(srcdir)/modules/arch/x86/tests/gas32/Makefile.inc $(srcdir)/modules/arch/x86/tests/gas64/Makefile.inc $(srcdir)/modules/arch/lc3b/Makefile.inc $(srcdir)/modules/arch/lc3b/tests/Makefile.inc $(srcdir)/modules/listfmts/Makefile.inc $(srcdir)/modules/listfmts/nasm/Makefile.inc $(srcdir)/modules/parsers/Makefile.inc $(srcdir)/modules/parsers/gas/Makefile.inc $(srcdir)/modules/parsers/gas/tests/Makefile.inc $(srcdir)/modules/parsers/gas/tests/bin/Makefile.inc $(srcdir)/modules/parsers/nasm/Makefile.inc $(srcdir)/modules/parsers/nasm/tests/Makefile.inc $(srcdir)/modules/parsers/nasm/tests/worphan/Makefile.inc $(srcdir)/modules/parsers/tasm/Makefile.inc $(srcdir)/modules/parsers/tasm/tests/Makefile.inc $(srcdir)/modules/parsers/tasm/tests/exe/Makefile.inc $(srcdir)/modules/preprocs/Makefile.inc $(srcdir)/modules/preprocs/tasm/Makefile.inc $(srcdir)/modules/preprocs/tasm/tests/Makefile.inc $(srcdir)/modules/preprocs/nasm/Makefile.inc $(srcdir)/modules/preprocs/nasm/tests/Makefile.inc $(srcdir)/modules/preprocs/raw/Makefile.inc $(srcdir)/modules/preprocs/raw/tests/Makefile.inc $(srcdir)/modules/preprocs/cpp/Makefile.inc $(srcdir)/modules/preprocs/gas/Makefile.inc $(srcdir)/modules/preprocs/gas/tests/Makefile.inc $(srcdir)/modules/dbgfmts/Makefile.inc $(srcdir)/modules/dbgfmts/codeview/Makefile.inc $(srcdir)/modules/dbgfmts/dwarf2/Makefile.inc $(srcdir)/modules/dbgfmts/dwarf2/tests/Makefile.inc $(srcdir)/modules/dbgfmts/dwarf2/tests/gen64/Makefile.inc $(srcdir)/modules/dbgfmts/dwarf2/tests/pass32/Makefile.inc $(srcdir)/modules/dbgfmts/dwarf2/tests/pass64/Makefile.inc $(srcdir)/modules/dbgfmts/dwarf2/tests/passwin64/Makefile.inc $(srcdir)/modules/dbgfmts/null/Makefile.inc $(srcdir)/modules/dbgfmts/stabs/Makefile.inc $(srcdir)/modules/dbgfmts/stabs/tests/Makefile.inc $(srcdir)/modules/objfmts/Makefile.inc $(srcdir)/modules/objfmts/dbg/Makefile.inc $(srcdir)/modules/objfmts/bin/Makefile.inc $(srcdir)/modules/objfmts/bin/tests/Makefile.inc $(srcdir)/modules/objfmts/bin/tests/multisect/Makefile.inc $(srcdir)/modules/objfmts/elf/Makefile.inc $(srcdir)/modules/objfmts/elf/tests/Makefile.inc $(srcdir)/modules/objfmts/elf/tests/amd64/Makefile.inc $(srcdir)/modules/objfmts/elf/tests/x32/Makefile.inc $(srcdir)/modules/objfmts/elf/tests/gas32/Makefile.inc $(srcdir)/modules/objfmts/elf/tests/gas64/Makefile.inc $(srcdir)/modules/objfmts/elf/tests/gasx32/Makefile.inc $(srcdir)/modules/objfmts/coff/Makefile.inc $(srcdir)/modules/objfmts/coff/tests/Makefile.inc $(srcdir)/modules/objfmts/macho/Makefile.inc $(srcdir)/modules/objfmts/macho/tests/Makefile.inc $(srcdir)/modules/objfmts/macho/tests/gas32/Makefile.inc $(srcdir)/modules/objfmts/macho/tests/gas64/Makefile.inc $(srcdir)/modules/objfmts/macho/tests/nasm32/Makefile.inc $(srcdir)/modules/objfmts/macho/tests/nasm64/Makefile.inc $(srcdir)/modules/objfmts/rdf/Makefile.inc $(srcdir)/modules/objfmts/rdf/tests/Makefile.inc $(srcdir)/modules/objfmts/win32/Makefile.inc $(srcdir)/modules/objfmts/win32/tests/Makefile.inc $(srcdir)/modules/objfmts/win32/tests/gas/Makefile.inc $(srcdir)/modules/objfmts/win64/Makefile.inc $(srcdir)/modules/objfmts/win64/tests/Makefile.inc $(srcdir)/modules/objfmts/win64/tests/gas/Makefile.inc $(srcdir)/modules/objfmts/xdf/Makefile.inc $(srcdir)/modules/objfmts/xdf/tests/Makefile.inc $(srcdir)/libyasm/Makefile.inc $(srcdir)/libyasm/tests/Makefile.inc $(srcdir)/frontends/Makefile.inc $(srcdir)/frontends/yasm/Makefile.inc $(srcdir)/frontends/tasm/Makefile.inc $(srcdir)/frontends/vsyasm/Makefile.inc $(srcdir)/m4/Makefile.inc $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; +$(srcdir)/tools/Makefile.inc $(srcdir)/tools/re2c/Makefile.inc $(srcdir)/tools/genmacro/Makefile.inc $(srcdir)/tools/genperf/Makefile.inc $(srcdir)/tools/python-yasm/Makefile.inc $(srcdir)/tools/python-yasm/tests/Makefile.inc $(srcdir)/modules/Makefile.inc $(srcdir)/modules/arch/Makefile.inc $(srcdir)/modules/arch/x86/Makefile.inc $(srcdir)/modules/arch/x86/tests/Makefile.inc $(srcdir)/modules/arch/x86/tests/gas32/Makefile.inc $(srcdir)/modules/arch/x86/tests/gas64/Makefile.inc $(srcdir)/modules/arch/lc3b/Makefile.inc $(srcdir)/modules/arch/lc3b/tests/Makefile.inc $(srcdir)/modules/listfmts/Makefile.inc $(srcdir)/modules/listfmts/nasm/Makefile.inc $(srcdir)/modules/parsers/Makefile.inc $(srcdir)/modules/parsers/gas/Makefile.inc $(srcdir)/modules/parsers/gas/tests/Makefile.inc $(srcdir)/modules/parsers/gas/tests/bin/Makefile.inc $(srcdir)/modules/parsers/nasm/Makefile.inc $(srcdir)/modules/parsers/nasm/tests/Makefile.inc $(srcdir)/modules/parsers/nasm/tests/worphan/Makefile.inc $(srcdir)/modules/parsers/tasm/Makefile.inc $(srcdir)/modules/parsers/tasm/tests/Makefile.inc $(srcdir)/modules/parsers/tasm/tests/exe/Makefile.inc $(srcdir)/modules/preprocs/Makefile.inc $(srcdir)/modules/preprocs/tasm/Makefile.inc $(srcdir)/modules/preprocs/tasm/tests/Makefile.inc $(srcdir)/modules/preprocs/nasm/Makefile.inc $(srcdir)/modules/preprocs/nasm/tests/Makefile.inc $(srcdir)/modules/preprocs/raw/Makefile.inc $(srcdir)/modules/preprocs/raw/tests/Makefile.inc $(srcdir)/modules/preprocs/cpp/Makefile.inc $(srcdir)/modules/preprocs/gas/Makefile.inc $(srcdir)/modules/preprocs/gas/tests/Makefile.inc $(srcdir)/modules/dbgfmts/Makefile.inc $(srcdir)/modules/dbgfmts/codeview/Makefile.inc $(srcdir)/modules/dbgfmts/dwarf2/Makefile.inc $(srcdir)/modules/dbgfmts/dwarf2/tests/Makefile.inc $(srcdir)/modules/dbgfmts/dwarf2/tests/gen64/Makefile.inc $(srcdir)/modules/dbgfmts/dwarf2/tests/pass32/Makefile.inc $(srcdir)/modules/dbgfmts/dwarf2/tests/pass64/Makefile.inc $(srcdir)/modules/dbgfmts/dwarf2/tests/passwin64/Makefile.inc $(srcdir)/modules/dbgfmts/null/Makefile.inc $(srcdir)/modules/dbgfmts/stabs/Makefile.inc $(srcdir)/modules/dbgfmts/stabs/tests/Makefile.inc $(srcdir)/modules/objfmts/Makefile.inc $(srcdir)/modules/objfmts/dbg/Makefile.inc $(srcdir)/modules/objfmts/bin/Makefile.inc $(srcdir)/modules/objfmts/bin/tests/Makefile.inc $(srcdir)/modules/objfmts/bin/tests/multisect/Makefile.inc $(srcdir)/modules/objfmts/elf/Makefile.inc $(srcdir)/modules/objfmts/elf/tests/Makefile.inc $(srcdir)/modules/objfmts/elf/tests/amd64/Makefile.inc $(srcdir)/modules/objfmts/elf/tests/x32/Makefile.inc $(srcdir)/modules/objfmts/elf/tests/gas32/Makefile.inc $(srcdir)/modules/objfmts/elf/tests/gas64/Makefile.inc $(srcdir)/modules/objfmts/elf/tests/gasx32/Makefile.inc $(srcdir)/modules/objfmts/coff/Makefile.inc $(srcdir)/modules/objfmts/coff/tests/Makefile.inc $(srcdir)/modules/objfmts/macho/Makefile.inc $(srcdir)/modules/objfmts/macho/tests/Makefile.inc $(srcdir)/modules/objfmts/macho/tests/gas32/Makefile.inc $(srcdir)/modules/objfmts/macho/tests/gas64/Makefile.inc $(srcdir)/modules/objfmts/macho/tests/nasm32/Makefile.inc $(srcdir)/modules/objfmts/macho/tests/nasm64/Makefile.inc $(srcdir)/modules/objfmts/rdf/Makefile.inc $(srcdir)/modules/objfmts/rdf/tests/Makefile.inc $(srcdir)/modules/objfmts/win32/Makefile.inc $(srcdir)/modules/objfmts/win32/tests/Makefile.inc $(srcdir)/modules/objfmts/win32/tests/gas/Makefile.inc $(srcdir)/modules/objfmts/win64/Makefile.inc $(srcdir)/modules/objfmts/win64/tests/Makefile.inc $(srcdir)/modules/objfmts/win64/tests/gas/Makefile.inc $(srcdir)/modules/objfmts/xdf/Makefile.inc $(srcdir)/modules/objfmts/xdf/tests/Makefile.inc $(srcdir)/libyasm/Makefile.inc $(srcdir)/libyasm/tests/Makefile.inc $(srcdir)/frontends/Makefile.inc $(srcdir)/frontends/yasm/Makefile.inc $(srcdir)/frontends/tasm/Makefile.inc $(srcdir)/frontends/vsyasm/Makefile.inc $(srcdir)/m4/Makefile.inc: + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +install-libLIBRARIES: $(lib_LIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(INSTALL_DATA) $$list2 "$(DESTDIR)$(libdir)" || exit $$?; } + @$(POST_INSTALL) + @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + if test -f $$p; then \ + $(am__strip_dir) \ + echo " ( cd '$(DESTDIR)$(libdir)' && $(RANLIB) $$f )"; \ + ( cd "$(DESTDIR)$(libdir)" && $(RANLIB) $$f ) || exit $$?; \ + else :; fi; \ + done + +uninstall-libLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(libdir)'; $(am__uninstall_files_from_dir) + +clean-libLIBRARIES: + -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) +modules/arch/x86/$(am__dirstamp): + @$(MKDIR_P) modules/arch/x86 + @: > modules/arch/x86/$(am__dirstamp) +modules/arch/x86/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/arch/x86/$(DEPDIR) + @: > modules/arch/x86/$(DEPDIR)/$(am__dirstamp) +modules/arch/x86/x86arch.$(OBJEXT): modules/arch/x86/$(am__dirstamp) \ + modules/arch/x86/$(DEPDIR)/$(am__dirstamp) +modules/arch/x86/x86bc.$(OBJEXT): modules/arch/x86/$(am__dirstamp) \ + modules/arch/x86/$(DEPDIR)/$(am__dirstamp) +modules/arch/x86/x86expr.$(OBJEXT): modules/arch/x86/$(am__dirstamp) \ + modules/arch/x86/$(DEPDIR)/$(am__dirstamp) +modules/arch/x86/x86id.$(OBJEXT): modules/arch/x86/$(am__dirstamp) \ + modules/arch/x86/$(DEPDIR)/$(am__dirstamp) +modules/arch/lc3b/$(am__dirstamp): + @$(MKDIR_P) modules/arch/lc3b + @: > modules/arch/lc3b/$(am__dirstamp) +modules/arch/lc3b/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/arch/lc3b/$(DEPDIR) + @: > modules/arch/lc3b/$(DEPDIR)/$(am__dirstamp) +modules/arch/lc3b/lc3barch.$(OBJEXT): \ + modules/arch/lc3b/$(am__dirstamp) \ + modules/arch/lc3b/$(DEPDIR)/$(am__dirstamp) +modules/arch/lc3b/lc3bbc.$(OBJEXT): modules/arch/lc3b/$(am__dirstamp) \ + modules/arch/lc3b/$(DEPDIR)/$(am__dirstamp) +modules/listfmts/nasm/$(am__dirstamp): + @$(MKDIR_P) modules/listfmts/nasm + @: > modules/listfmts/nasm/$(am__dirstamp) +modules/listfmts/nasm/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/listfmts/nasm/$(DEPDIR) + @: > modules/listfmts/nasm/$(DEPDIR)/$(am__dirstamp) +modules/listfmts/nasm/nasm-listfmt.$(OBJEXT): \ + modules/listfmts/nasm/$(am__dirstamp) \ + modules/listfmts/nasm/$(DEPDIR)/$(am__dirstamp) +modules/parsers/gas/$(am__dirstamp): + @$(MKDIR_P) modules/parsers/gas + @: > modules/parsers/gas/$(am__dirstamp) +modules/parsers/gas/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/parsers/gas/$(DEPDIR) + @: > modules/parsers/gas/$(DEPDIR)/$(am__dirstamp) +modules/parsers/gas/gas-parser.$(OBJEXT): \ + modules/parsers/gas/$(am__dirstamp) \ + modules/parsers/gas/$(DEPDIR)/$(am__dirstamp) +modules/parsers/gas/gas-parse.$(OBJEXT): \ + modules/parsers/gas/$(am__dirstamp) \ + modules/parsers/gas/$(DEPDIR)/$(am__dirstamp) +modules/parsers/gas/gas-parse-intel.$(OBJEXT): \ + modules/parsers/gas/$(am__dirstamp) \ + modules/parsers/gas/$(DEPDIR)/$(am__dirstamp) +modules/parsers/nasm/$(am__dirstamp): + @$(MKDIR_P) modules/parsers/nasm + @: > modules/parsers/nasm/$(am__dirstamp) +modules/parsers/nasm/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/parsers/nasm/$(DEPDIR) + @: > modules/parsers/nasm/$(DEPDIR)/$(am__dirstamp) +modules/parsers/nasm/nasm-parser.$(OBJEXT): \ + modules/parsers/nasm/$(am__dirstamp) \ + modules/parsers/nasm/$(DEPDIR)/$(am__dirstamp) +modules/parsers/nasm/nasm-parse.$(OBJEXT): \ + modules/parsers/nasm/$(am__dirstamp) \ + modules/parsers/nasm/$(DEPDIR)/$(am__dirstamp) +modules/preprocs/nasm/$(am__dirstamp): + @$(MKDIR_P) modules/preprocs/nasm + @: > modules/preprocs/nasm/$(am__dirstamp) +modules/preprocs/nasm/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/preprocs/nasm/$(DEPDIR) + @: > modules/preprocs/nasm/$(DEPDIR)/$(am__dirstamp) +modules/preprocs/nasm/nasm-preproc.$(OBJEXT): \ + modules/preprocs/nasm/$(am__dirstamp) \ + modules/preprocs/nasm/$(DEPDIR)/$(am__dirstamp) +modules/preprocs/nasm/nasm-pp.$(OBJEXT): \ + modules/preprocs/nasm/$(am__dirstamp) \ + modules/preprocs/nasm/$(DEPDIR)/$(am__dirstamp) +modules/preprocs/nasm/nasmlib.$(OBJEXT): \ + modules/preprocs/nasm/$(am__dirstamp) \ + modules/preprocs/nasm/$(DEPDIR)/$(am__dirstamp) +modules/preprocs/nasm/nasm-eval.$(OBJEXT): \ + modules/preprocs/nasm/$(am__dirstamp) \ + modules/preprocs/nasm/$(DEPDIR)/$(am__dirstamp) +modules/preprocs/raw/$(am__dirstamp): + @$(MKDIR_P) modules/preprocs/raw + @: > modules/preprocs/raw/$(am__dirstamp) +modules/preprocs/raw/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/preprocs/raw/$(DEPDIR) + @: > modules/preprocs/raw/$(DEPDIR)/$(am__dirstamp) +modules/preprocs/raw/raw-preproc.$(OBJEXT): \ + modules/preprocs/raw/$(am__dirstamp) \ + modules/preprocs/raw/$(DEPDIR)/$(am__dirstamp) +modules/preprocs/cpp/$(am__dirstamp): + @$(MKDIR_P) modules/preprocs/cpp + @: > modules/preprocs/cpp/$(am__dirstamp) +modules/preprocs/cpp/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/preprocs/cpp/$(DEPDIR) + @: > modules/preprocs/cpp/$(DEPDIR)/$(am__dirstamp) +modules/preprocs/cpp/cpp-preproc.$(OBJEXT): \ + modules/preprocs/cpp/$(am__dirstamp) \ + modules/preprocs/cpp/$(DEPDIR)/$(am__dirstamp) +modules/preprocs/gas/$(am__dirstamp): + @$(MKDIR_P) modules/preprocs/gas + @: > modules/preprocs/gas/$(am__dirstamp) +modules/preprocs/gas/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/preprocs/gas/$(DEPDIR) + @: > modules/preprocs/gas/$(DEPDIR)/$(am__dirstamp) +modules/preprocs/gas/gas-preproc.$(OBJEXT): \ + modules/preprocs/gas/$(am__dirstamp) \ + modules/preprocs/gas/$(DEPDIR)/$(am__dirstamp) +modules/preprocs/gas/gas-eval.$(OBJEXT): \ + modules/preprocs/gas/$(am__dirstamp) \ + modules/preprocs/gas/$(DEPDIR)/$(am__dirstamp) +modules/dbgfmts/codeview/$(am__dirstamp): + @$(MKDIR_P) modules/dbgfmts/codeview + @: > modules/dbgfmts/codeview/$(am__dirstamp) +modules/dbgfmts/codeview/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/dbgfmts/codeview/$(DEPDIR) + @: > modules/dbgfmts/codeview/$(DEPDIR)/$(am__dirstamp) +modules/dbgfmts/codeview/cv-dbgfmt.$(OBJEXT): \ + modules/dbgfmts/codeview/$(am__dirstamp) \ + modules/dbgfmts/codeview/$(DEPDIR)/$(am__dirstamp) +modules/dbgfmts/codeview/cv-symline.$(OBJEXT): \ + modules/dbgfmts/codeview/$(am__dirstamp) \ + modules/dbgfmts/codeview/$(DEPDIR)/$(am__dirstamp) +modules/dbgfmts/codeview/cv-type.$(OBJEXT): \ + modules/dbgfmts/codeview/$(am__dirstamp) \ + modules/dbgfmts/codeview/$(DEPDIR)/$(am__dirstamp) +modules/dbgfmts/dwarf2/$(am__dirstamp): + @$(MKDIR_P) modules/dbgfmts/dwarf2 + @: > modules/dbgfmts/dwarf2/$(am__dirstamp) +modules/dbgfmts/dwarf2/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/dbgfmts/dwarf2/$(DEPDIR) + @: > modules/dbgfmts/dwarf2/$(DEPDIR)/$(am__dirstamp) +modules/dbgfmts/dwarf2/dwarf2-dbgfmt.$(OBJEXT): \ + modules/dbgfmts/dwarf2/$(am__dirstamp) \ + modules/dbgfmts/dwarf2/$(DEPDIR)/$(am__dirstamp) +modules/dbgfmts/dwarf2/dwarf2-line.$(OBJEXT): \ + modules/dbgfmts/dwarf2/$(am__dirstamp) \ + modules/dbgfmts/dwarf2/$(DEPDIR)/$(am__dirstamp) +modules/dbgfmts/dwarf2/dwarf2-aranges.$(OBJEXT): \ + modules/dbgfmts/dwarf2/$(am__dirstamp) \ + modules/dbgfmts/dwarf2/$(DEPDIR)/$(am__dirstamp) +modules/dbgfmts/dwarf2/dwarf2-info.$(OBJEXT): \ + modules/dbgfmts/dwarf2/$(am__dirstamp) \ + modules/dbgfmts/dwarf2/$(DEPDIR)/$(am__dirstamp) +modules/dbgfmts/null/$(am__dirstamp): + @$(MKDIR_P) modules/dbgfmts/null + @: > modules/dbgfmts/null/$(am__dirstamp) +modules/dbgfmts/null/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/dbgfmts/null/$(DEPDIR) + @: > modules/dbgfmts/null/$(DEPDIR)/$(am__dirstamp) +modules/dbgfmts/null/null-dbgfmt.$(OBJEXT): \ + modules/dbgfmts/null/$(am__dirstamp) \ + modules/dbgfmts/null/$(DEPDIR)/$(am__dirstamp) +modules/dbgfmts/stabs/$(am__dirstamp): + @$(MKDIR_P) modules/dbgfmts/stabs + @: > modules/dbgfmts/stabs/$(am__dirstamp) +modules/dbgfmts/stabs/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/dbgfmts/stabs/$(DEPDIR) + @: > modules/dbgfmts/stabs/$(DEPDIR)/$(am__dirstamp) +modules/dbgfmts/stabs/stabs-dbgfmt.$(OBJEXT): \ + modules/dbgfmts/stabs/$(am__dirstamp) \ + modules/dbgfmts/stabs/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/dbg/$(am__dirstamp): + @$(MKDIR_P) modules/objfmts/dbg + @: > modules/objfmts/dbg/$(am__dirstamp) +modules/objfmts/dbg/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/objfmts/dbg/$(DEPDIR) + @: > modules/objfmts/dbg/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/dbg/dbg-objfmt.$(OBJEXT): \ + modules/objfmts/dbg/$(am__dirstamp) \ + modules/objfmts/dbg/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/bin/$(am__dirstamp): + @$(MKDIR_P) modules/objfmts/bin + @: > modules/objfmts/bin/$(am__dirstamp) +modules/objfmts/bin/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/objfmts/bin/$(DEPDIR) + @: > modules/objfmts/bin/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/bin/bin-objfmt.$(OBJEXT): \ + modules/objfmts/bin/$(am__dirstamp) \ + modules/objfmts/bin/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/elf/$(am__dirstamp): + @$(MKDIR_P) modules/objfmts/elf + @: > modules/objfmts/elf/$(am__dirstamp) +modules/objfmts/elf/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/objfmts/elf/$(DEPDIR) + @: > modules/objfmts/elf/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/elf/elf.$(OBJEXT): \ + modules/objfmts/elf/$(am__dirstamp) \ + modules/objfmts/elf/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/elf/elf-objfmt.$(OBJEXT): \ + modules/objfmts/elf/$(am__dirstamp) \ + modules/objfmts/elf/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/elf/elf-x86-x86.$(OBJEXT): \ + modules/objfmts/elf/$(am__dirstamp) \ + modules/objfmts/elf/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/elf/elf-x86-amd64.$(OBJEXT): \ + modules/objfmts/elf/$(am__dirstamp) \ + modules/objfmts/elf/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/elf/elf-x86-x32.$(OBJEXT): \ + modules/objfmts/elf/$(am__dirstamp) \ + modules/objfmts/elf/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/coff/$(am__dirstamp): + @$(MKDIR_P) modules/objfmts/coff + @: > modules/objfmts/coff/$(am__dirstamp) +modules/objfmts/coff/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/objfmts/coff/$(DEPDIR) + @: > modules/objfmts/coff/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/coff/coff-objfmt.$(OBJEXT): \ + modules/objfmts/coff/$(am__dirstamp) \ + modules/objfmts/coff/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/coff/win64-except.$(OBJEXT): \ + modules/objfmts/coff/$(am__dirstamp) \ + modules/objfmts/coff/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/macho/$(am__dirstamp): + @$(MKDIR_P) modules/objfmts/macho + @: > modules/objfmts/macho/$(am__dirstamp) +modules/objfmts/macho/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/objfmts/macho/$(DEPDIR) + @: > modules/objfmts/macho/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/macho/macho-objfmt.$(OBJEXT): \ + modules/objfmts/macho/$(am__dirstamp) \ + modules/objfmts/macho/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/rdf/$(am__dirstamp): + @$(MKDIR_P) modules/objfmts/rdf + @: > modules/objfmts/rdf/$(am__dirstamp) +modules/objfmts/rdf/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/objfmts/rdf/$(DEPDIR) + @: > modules/objfmts/rdf/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/rdf/rdf-objfmt.$(OBJEXT): \ + modules/objfmts/rdf/$(am__dirstamp) \ + modules/objfmts/rdf/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/xdf/$(am__dirstamp): + @$(MKDIR_P) modules/objfmts/xdf + @: > modules/objfmts/xdf/$(am__dirstamp) +modules/objfmts/xdf/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) modules/objfmts/xdf/$(DEPDIR) + @: > modules/objfmts/xdf/$(DEPDIR)/$(am__dirstamp) +modules/objfmts/xdf/xdf-objfmt.$(OBJEXT): \ + modules/objfmts/xdf/$(am__dirstamp) \ + modules/objfmts/xdf/$(DEPDIR)/$(am__dirstamp) +libyasm/$(am__dirstamp): + @$(MKDIR_P) libyasm + @: > libyasm/$(am__dirstamp) +libyasm/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) libyasm/$(DEPDIR) + @: > libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/assocdat.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/bitvect.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/bc-align.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/bc-data.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/bc-incbin.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/bc-org.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/bc-reserve.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/bytecode.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/errwarn.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/expr.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/file.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/floatnum.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/hamt.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/insn.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/intnum.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/inttree.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/linemap.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/md5.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/mergesort.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/phash.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/section.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/strcasecmp.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/strsep.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/symrec.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/valparam.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/value.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/xmalloc.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) +libyasm/xstrdup.$(OBJEXT): libyasm/$(am__dirstamp) \ + libyasm/$(DEPDIR)/$(am__dirstamp) + +libyasm.a: $(libyasm_a_OBJECTS) $(libyasm_a_DEPENDENCIES) $(EXTRA_libyasm_a_DEPENDENCIES) + $(AM_V_at)-rm -f libyasm.a + $(AM_V_AR)$(libyasm_a_AR) libyasm.a $(libyasm_a_OBJECTS) $(libyasm_a_LIBADD) + $(AM_V_at)$(RANLIB) libyasm.a +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +clean-checkPROGRAMS: + -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) + +clean-noinstPROGRAMS: + -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) +libyasm/tests/$(am__dirstamp): + @$(MKDIR_P) libyasm/tests + @: > libyasm/tests/$(am__dirstamp) +libyasm/tests/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) libyasm/tests/$(DEPDIR) + @: > libyasm/tests/$(DEPDIR)/$(am__dirstamp) +libyasm/tests/bitvect_test.$(OBJEXT): libyasm/tests/$(am__dirstamp) \ + libyasm/tests/$(DEPDIR)/$(am__dirstamp) + +bitvect_test$(EXEEXT): $(bitvect_test_OBJECTS) $(bitvect_test_DEPENDENCIES) $(EXTRA_bitvect_test_DEPENDENCIES) + @rm -f bitvect_test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(bitvect_test_OBJECTS) $(bitvect_test_LDADD) $(LIBS) +libyasm/tests/combpath_test.$(OBJEXT): libyasm/tests/$(am__dirstamp) \ + libyasm/tests/$(DEPDIR)/$(am__dirstamp) + +combpath_test$(EXEEXT): $(combpath_test_OBJECTS) $(combpath_test_DEPENDENCIES) $(EXTRA_combpath_test_DEPENDENCIES) + @rm -f combpath_test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(combpath_test_OBJECTS) $(combpath_test_LDADD) $(LIBS) +libyasm/tests/floatnum_test.$(OBJEXT): libyasm/tests/$(am__dirstamp) \ + libyasm/tests/$(DEPDIR)/$(am__dirstamp) + +floatnum_test$(EXEEXT): $(floatnum_test_OBJECTS) $(floatnum_test_DEPENDENCIES) $(EXTRA_floatnum_test_DEPENDENCIES) + @rm -f floatnum_test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(floatnum_test_OBJECTS) $(floatnum_test_LDADD) $(LIBS) + +genmacro$(EXEEXT): $(genmacro_OBJECTS) $(genmacro_DEPENDENCIES) $(EXTRA_genmacro_DEPENDENCIES) + @rm -f genmacro$(EXEEXT) + $(AM_V_GEN)$(genmacro_LINK) $(genmacro_OBJECTS) $(genmacro_LDADD) $(LIBS) + +genmodule$(EXEEXT): $(genmodule_OBJECTS) $(genmodule_DEPENDENCIES) $(EXTRA_genmodule_DEPENDENCIES) + @rm -f genmodule$(EXEEXT) + $(AM_V_GEN)$(genmodule_LINK) $(genmodule_OBJECTS) $(genmodule_LDADD) $(LIBS) + +genperf$(EXEEXT): $(genperf_OBJECTS) $(genperf_DEPENDENCIES) $(EXTRA_genperf_DEPENDENCIES) + @rm -f genperf$(EXEEXT) + $(AM_V_GEN)$(genperf_LINK) $(genperf_OBJECTS) $(genperf_LDADD) $(LIBS) + +genstring$(EXEEXT): $(genstring_OBJECTS) $(genstring_DEPENDENCIES) $(EXTRA_genstring_DEPENDENCIES) + @rm -f genstring$(EXEEXT) + $(AM_V_GEN)$(genstring_LINK) $(genstring_OBJECTS) $(genstring_LDADD) $(LIBS) + +genversion$(EXEEXT): $(genversion_OBJECTS) $(genversion_DEPENDENCIES) $(EXTRA_genversion_DEPENDENCIES) + @rm -f genversion$(EXEEXT) + $(AM_V_GEN)$(genversion_LINK) $(genversion_OBJECTS) $(genversion_LDADD) $(LIBS) +libyasm/tests/leb128_test.$(OBJEXT): libyasm/tests/$(am__dirstamp) \ + libyasm/tests/$(DEPDIR)/$(am__dirstamp) + +leb128_test$(EXEEXT): $(leb128_test_OBJECTS) $(leb128_test_DEPENDENCIES) $(EXTRA_leb128_test_DEPENDENCIES) + @rm -f leb128_test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(leb128_test_OBJECTS) $(leb128_test_LDADD) $(LIBS) + +re2c$(EXEEXT): $(re2c_OBJECTS) $(re2c_DEPENDENCIES) $(EXTRA_re2c_DEPENDENCIES) + @rm -f re2c$(EXEEXT) + $(AM_V_GEN)$(re2c_LINK) $(re2c_OBJECTS) $(re2c_LDADD) $(LIBS) +libyasm/tests/splitpath_test.$(OBJEXT): libyasm/tests/$(am__dirstamp) \ + libyasm/tests/$(DEPDIR)/$(am__dirstamp) + +splitpath_test$(EXEEXT): $(splitpath_test_OBJECTS) $(splitpath_test_DEPENDENCIES) $(EXTRA_splitpath_test_DEPENDENCIES) + @rm -f splitpath_test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(splitpath_test_OBJECTS) $(splitpath_test_LDADD) $(LIBS) + +test_hd$(EXEEXT): $(test_hd_OBJECTS) $(test_hd_DEPENDENCIES) $(EXTRA_test_hd_DEPENDENCIES) + @rm -f test_hd$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_hd_OBJECTS) $(test_hd_LDADD) $(LIBS) +libyasm/tests/uncstring_test.$(OBJEXT): libyasm/tests/$(am__dirstamp) \ + libyasm/tests/$(DEPDIR)/$(am__dirstamp) + +uncstring_test$(EXEEXT): $(uncstring_test_OBJECTS) $(uncstring_test_DEPENDENCIES) $(EXTRA_uncstring_test_DEPENDENCIES) + @rm -f uncstring_test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(uncstring_test_OBJECTS) $(uncstring_test_LDADD) $(LIBS) +frontends/vsyasm/$(am__dirstamp): + @$(MKDIR_P) frontends/vsyasm + @: > frontends/vsyasm/$(am__dirstamp) +frontends/vsyasm/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) frontends/vsyasm/$(DEPDIR) + @: > frontends/vsyasm/$(DEPDIR)/$(am__dirstamp) +frontends/vsyasm/vsyasm.$(OBJEXT): frontends/vsyasm/$(am__dirstamp) \ + frontends/vsyasm/$(DEPDIR)/$(am__dirstamp) +frontends/yasm/$(am__dirstamp): + @$(MKDIR_P) frontends/yasm + @: > frontends/yasm/$(am__dirstamp) +frontends/yasm/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) frontends/yasm/$(DEPDIR) + @: > frontends/yasm/$(DEPDIR)/$(am__dirstamp) +frontends/yasm/yasm-options.$(OBJEXT): frontends/yasm/$(am__dirstamp) \ + frontends/yasm/$(DEPDIR)/$(am__dirstamp) + +vsyasm$(EXEEXT): $(vsyasm_OBJECTS) $(vsyasm_DEPENDENCIES) $(EXTRA_vsyasm_DEPENDENCIES) + @rm -f vsyasm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(vsyasm_OBJECTS) $(vsyasm_LDADD) $(LIBS) +frontends/yasm/yasm.$(OBJEXT): frontends/yasm/$(am__dirstamp) \ + frontends/yasm/$(DEPDIR)/$(am__dirstamp) + +yasm$(EXEEXT): $(yasm_OBJECTS) $(yasm_DEPENDENCIES) $(EXTRA_yasm_DEPENDENCIES) + @rm -f yasm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(yasm_OBJECTS) $(yasm_LDADD) $(LIBS) +frontends/tasm/$(am__dirstamp): + @$(MKDIR_P) frontends/tasm + @: > frontends/tasm/$(am__dirstamp) +frontends/tasm/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) frontends/tasm/$(DEPDIR) + @: > frontends/tasm/$(DEPDIR)/$(am__dirstamp) +frontends/tasm/tasm.$(OBJEXT): frontends/tasm/$(am__dirstamp) \ + frontends/tasm/$(DEPDIR)/$(am__dirstamp) +frontends/tasm/tasm-options.$(OBJEXT): frontends/tasm/$(am__dirstamp) \ + frontends/tasm/$(DEPDIR)/$(am__dirstamp) + +ytasm$(EXEEXT): $(ytasm_OBJECTS) $(ytasm_DEPENDENCIES) $(EXTRA_ytasm_DEPENDENCIES) + @rm -f ytasm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(ytasm_OBJECTS) $(ytasm_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f frontends/tasm/*.$(OBJEXT) + -rm -f frontends/vsyasm/*.$(OBJEXT) + -rm -f frontends/yasm/*.$(OBJEXT) + -rm -f libyasm/*.$(OBJEXT) + -rm -f libyasm/tests/*.$(OBJEXT) + -rm -f modules/arch/lc3b/*.$(OBJEXT) + -rm -f modules/arch/x86/*.$(OBJEXT) + -rm -f modules/dbgfmts/codeview/*.$(OBJEXT) + -rm -f modules/dbgfmts/dwarf2/*.$(OBJEXT) + -rm -f modules/dbgfmts/null/*.$(OBJEXT) + -rm -f modules/dbgfmts/stabs/*.$(OBJEXT) + -rm -f modules/listfmts/nasm/*.$(OBJEXT) + -rm -f modules/objfmts/bin/*.$(OBJEXT) + -rm -f modules/objfmts/coff/*.$(OBJEXT) + -rm -f modules/objfmts/dbg/*.$(OBJEXT) + -rm -f modules/objfmts/elf/*.$(OBJEXT) + -rm -f modules/objfmts/macho/*.$(OBJEXT) + -rm -f modules/objfmts/rdf/*.$(OBJEXT) + -rm -f modules/objfmts/xdf/*.$(OBJEXT) + -rm -f modules/parsers/gas/*.$(OBJEXT) + -rm -f modules/parsers/nasm/*.$(OBJEXT) + -rm -f modules/preprocs/cpp/*.$(OBJEXT) + -rm -f modules/preprocs/gas/*.$(OBJEXT) + -rm -f modules/preprocs/nasm/*.$(OBJEXT) + -rm -f modules/preprocs/raw/*.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gas-token.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lc3bid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nasm-token.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_hd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86cpu.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x86regtmod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frontends/tasm/$(DEPDIR)/tasm-options.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frontends/tasm/$(DEPDIR)/tasm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frontends/vsyasm/$(DEPDIR)/vsyasm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frontends/yasm/$(DEPDIR)/yasm-options.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frontends/yasm/$(DEPDIR)/yasm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/assocdat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/bc-align.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/bc-data.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/bc-incbin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/bc-org.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/bc-reserve.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/bitvect.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/bytecode.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/errwarn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/expr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/file.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/floatnum.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/hamt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/insn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/intnum.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/inttree.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/linemap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/md5.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/mergesort.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/phash.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/section.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/strcasecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/strsep.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/symrec.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/valparam.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/value.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/xmalloc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/$(DEPDIR)/xstrdup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/tests/$(DEPDIR)/bitvect_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/tests/$(DEPDIR)/combpath_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/tests/$(DEPDIR)/floatnum_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/tests/$(DEPDIR)/leb128_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/tests/$(DEPDIR)/splitpath_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libyasm/tests/$(DEPDIR)/uncstring_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/arch/lc3b/$(DEPDIR)/lc3barch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/arch/lc3b/$(DEPDIR)/lc3bbc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/arch/x86/$(DEPDIR)/x86arch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/arch/x86/$(DEPDIR)/x86bc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/arch/x86/$(DEPDIR)/x86expr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/arch/x86/$(DEPDIR)/x86id.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/dbgfmts/codeview/$(DEPDIR)/cv-dbgfmt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/dbgfmts/codeview/$(DEPDIR)/cv-symline.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/dbgfmts/codeview/$(DEPDIR)/cv-type.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/dbgfmts/dwarf2/$(DEPDIR)/dwarf2-aranges.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/dbgfmts/dwarf2/$(DEPDIR)/dwarf2-dbgfmt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/dbgfmts/dwarf2/$(DEPDIR)/dwarf2-info.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/dbgfmts/dwarf2/$(DEPDIR)/dwarf2-line.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/dbgfmts/null/$(DEPDIR)/null-dbgfmt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/dbgfmts/stabs/$(DEPDIR)/stabs-dbgfmt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/listfmts/nasm/$(DEPDIR)/nasm-listfmt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/objfmts/bin/$(DEPDIR)/bin-objfmt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/objfmts/coff/$(DEPDIR)/coff-objfmt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/objfmts/coff/$(DEPDIR)/win64-except.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/objfmts/dbg/$(DEPDIR)/dbg-objfmt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/objfmts/elf/$(DEPDIR)/elf-objfmt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/objfmts/elf/$(DEPDIR)/elf-x86-amd64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/objfmts/elf/$(DEPDIR)/elf-x86-x32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/objfmts/elf/$(DEPDIR)/elf-x86-x86.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/objfmts/elf/$(DEPDIR)/elf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/objfmts/macho/$(DEPDIR)/macho-objfmt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/objfmts/rdf/$(DEPDIR)/rdf-objfmt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/objfmts/xdf/$(DEPDIR)/xdf-objfmt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/parsers/gas/$(DEPDIR)/gas-parse-intel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/parsers/gas/$(DEPDIR)/gas-parse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/parsers/gas/$(DEPDIR)/gas-parser.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/parsers/nasm/$(DEPDIR)/nasm-parse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/parsers/nasm/$(DEPDIR)/nasm-parser.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/preprocs/cpp/$(DEPDIR)/cpp-preproc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/preprocs/gas/$(DEPDIR)/gas-eval.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/preprocs/gas/$(DEPDIR)/gas-preproc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/preprocs/nasm/$(DEPDIR)/nasm-eval.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/preprocs/nasm/$(DEPDIR)/nasm-pp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/preprocs/nasm/$(DEPDIR)/nasm-preproc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/preprocs/nasm/$(DEPDIR)/nasmlib.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@modules/preprocs/raw/$(DEPDIR)/raw-preproc.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` +install-man1: $(dist_man_MANS) $(notrans_dist_man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(notrans_dist_man_MANS)'; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed 'n;s,.*/,,;p;s,\.[^1][0-9a-z]*$$,.1,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + @list1=''; \ + list2='$(dist_man_MANS)'; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(notrans_dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed 's,.*/,,;s,\.[^1][0-9a-z]*$$,.1,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +install-man7: $(dist_man_MANS) $(notrans_dist_man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(notrans_dist_man_MANS)'; \ + test -n "$(man7dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man7dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man7dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.7[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed 'n;s,.*/,,;p;s,\.[^7][0-9a-z]*$$,.7,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man7dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man7dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man7dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man7dir)" || exit $$?; }; \ + done; } + @list1=''; \ + list2='$(dist_man_MANS)'; \ + test -n "$(man7dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man7dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man7dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.7[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man7dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man7dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man7dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man7dir)" || exit $$?; }; \ + done; } + +uninstall-man7: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man7dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(notrans_dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.7[a-z]*$$/p'; \ + } | sed 's,.*/,,;s,\.[^7][0-9a-z]*$$,.7,'`; \ + dir='$(DESTDIR)$(man7dir)'; $(am__uninstall_files_from_dir) + @list=''; test -n "$(man7dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.7[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man7dir)'; $(am__uninstall_files_from_dir) +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) +install-modincludeHEADERS: $(modinclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(modinclude_HEADERS)'; test -n "$(modincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(modincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(modincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(modincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(modincludedir)" || exit $$?; \ + done + +uninstall-modincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(modinclude_HEADERS)'; test -n "$(modincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(modincludedir)'; $(am__uninstall_files_from_dir) +install-nodist_includeHEADERS: $(nodist_include_HEADERS) + @$(NORMAL_INSTALL) + @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-nodist_includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + else \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all $(check_PROGRAMS) + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +tools/python-yasm/tests/python_test.sh.log: tools/python-yasm/tests/python_test.sh + @p='tools/python-yasm/tests/python_test.sh'; \ + b='tools/python-yasm/tests/python_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/arch/x86/tests/x86_test.sh.log: modules/arch/x86/tests/x86_test.sh + @p='modules/arch/x86/tests/x86_test.sh'; \ + b='modules/arch/x86/tests/x86_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/arch/x86/tests/gas32/x86_gas32_test.sh.log: modules/arch/x86/tests/gas32/x86_gas32_test.sh + @p='modules/arch/x86/tests/gas32/x86_gas32_test.sh'; \ + b='modules/arch/x86/tests/gas32/x86_gas32_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/arch/x86/tests/gas64/x86_gas64_test.sh.log: modules/arch/x86/tests/gas64/x86_gas64_test.sh + @p='modules/arch/x86/tests/gas64/x86_gas64_test.sh'; \ + b='modules/arch/x86/tests/gas64/x86_gas64_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/arch/lc3b/tests/lc3b_test.sh.log: modules/arch/lc3b/tests/lc3b_test.sh + @p='modules/arch/lc3b/tests/lc3b_test.sh'; \ + b='modules/arch/lc3b/tests/lc3b_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/parsers/gas/tests/gas_test.sh.log: modules/parsers/gas/tests/gas_test.sh + @p='modules/parsers/gas/tests/gas_test.sh'; \ + b='modules/parsers/gas/tests/gas_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/parsers/gas/tests/bin/gas_bin_test.sh.log: modules/parsers/gas/tests/bin/gas_bin_test.sh + @p='modules/parsers/gas/tests/bin/gas_bin_test.sh'; \ + b='modules/parsers/gas/tests/bin/gas_bin_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/parsers/nasm/tests/nasm_test.sh.log: modules/parsers/nasm/tests/nasm_test.sh + @p='modules/parsers/nasm/tests/nasm_test.sh'; \ + b='modules/parsers/nasm/tests/nasm_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/parsers/nasm/tests/worphan/nasm_worphan_test.sh.log: modules/parsers/nasm/tests/worphan/nasm_worphan_test.sh + @p='modules/parsers/nasm/tests/worphan/nasm_worphan_test.sh'; \ + b='modules/parsers/nasm/tests/worphan/nasm_worphan_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/parsers/tasm/tests/tasm_test.sh.log: modules/parsers/tasm/tests/tasm_test.sh + @p='modules/parsers/tasm/tests/tasm_test.sh'; \ + b='modules/parsers/tasm/tests/tasm_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/parsers/tasm/tests/exe/tasm_exe_test.sh.log: modules/parsers/tasm/tests/exe/tasm_exe_test.sh + @p='modules/parsers/tasm/tests/exe/tasm_exe_test.sh'; \ + b='modules/parsers/tasm/tests/exe/tasm_exe_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/preprocs/tasm/tests/tasmpp_test.sh.log: modules/preprocs/tasm/tests/tasmpp_test.sh + @p='modules/preprocs/tasm/tests/tasmpp_test.sh'; \ + b='modules/preprocs/tasm/tests/tasmpp_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/preprocs/nasm/tests/nasmpp_test.sh.log: modules/preprocs/nasm/tests/nasmpp_test.sh + @p='modules/preprocs/nasm/tests/nasmpp_test.sh'; \ + b='modules/preprocs/nasm/tests/nasmpp_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/preprocs/raw/tests/rawpp_test.sh.log: modules/preprocs/raw/tests/rawpp_test.sh + @p='modules/preprocs/raw/tests/rawpp_test.sh'; \ + b='modules/preprocs/raw/tests/rawpp_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/dbgfmts/dwarf2/tests/gen64/dwarf2_gen64_test.sh.log: modules/dbgfmts/dwarf2/tests/gen64/dwarf2_gen64_test.sh + @p='modules/dbgfmts/dwarf2/tests/gen64/dwarf2_gen64_test.sh'; \ + b='modules/dbgfmts/dwarf2/tests/gen64/dwarf2_gen64_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/dbgfmts/dwarf2/tests/pass32/dwarf2_pass32_test.sh.log: modules/dbgfmts/dwarf2/tests/pass32/dwarf2_pass32_test.sh + @p='modules/dbgfmts/dwarf2/tests/pass32/dwarf2_pass32_test.sh'; \ + b='modules/dbgfmts/dwarf2/tests/pass32/dwarf2_pass32_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/dbgfmts/dwarf2/tests/pass64/dwarf2_pass64_test.sh.log: modules/dbgfmts/dwarf2/tests/pass64/dwarf2_pass64_test.sh + @p='modules/dbgfmts/dwarf2/tests/pass64/dwarf2_pass64_test.sh'; \ + b='modules/dbgfmts/dwarf2/tests/pass64/dwarf2_pass64_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/dbgfmts/dwarf2/tests/passwin64/dwarf2_passwin64_test.sh.log: modules/dbgfmts/dwarf2/tests/passwin64/dwarf2_passwin64_test.sh + @p='modules/dbgfmts/dwarf2/tests/passwin64/dwarf2_passwin64_test.sh'; \ + b='modules/dbgfmts/dwarf2/tests/passwin64/dwarf2_passwin64_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/dbgfmts/stabs/tests/stabs_test.sh.log: modules/dbgfmts/stabs/tests/stabs_test.sh + @p='modules/dbgfmts/stabs/tests/stabs_test.sh'; \ + b='modules/dbgfmts/stabs/tests/stabs_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/bin/tests/bin_test.sh.log: modules/objfmts/bin/tests/bin_test.sh + @p='modules/objfmts/bin/tests/bin_test.sh'; \ + b='modules/objfmts/bin/tests/bin_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/bin/tests/multisect/bin_multi_test.sh.log: modules/objfmts/bin/tests/multisect/bin_multi_test.sh + @p='modules/objfmts/bin/tests/multisect/bin_multi_test.sh'; \ + b='modules/objfmts/bin/tests/multisect/bin_multi_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/elf/tests/elf_test.sh.log: modules/objfmts/elf/tests/elf_test.sh + @p='modules/objfmts/elf/tests/elf_test.sh'; \ + b='modules/objfmts/elf/tests/elf_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/elf/tests/amd64/elf_amd64_test.sh.log: modules/objfmts/elf/tests/amd64/elf_amd64_test.sh + @p='modules/objfmts/elf/tests/amd64/elf_amd64_test.sh'; \ + b='modules/objfmts/elf/tests/amd64/elf_amd64_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/elf/tests/x32/elf_x32_test.sh.log: modules/objfmts/elf/tests/x32/elf_x32_test.sh + @p='modules/objfmts/elf/tests/x32/elf_x32_test.sh'; \ + b='modules/objfmts/elf/tests/x32/elf_x32_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/elf/tests/gas32/elf_gas32_test.sh.log: modules/objfmts/elf/tests/gas32/elf_gas32_test.sh + @p='modules/objfmts/elf/tests/gas32/elf_gas32_test.sh'; \ + b='modules/objfmts/elf/tests/gas32/elf_gas32_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/elf/tests/gas64/elf_gas64_test.sh.log: modules/objfmts/elf/tests/gas64/elf_gas64_test.sh + @p='modules/objfmts/elf/tests/gas64/elf_gas64_test.sh'; \ + b='modules/objfmts/elf/tests/gas64/elf_gas64_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/elf/tests/gasx32/elf_gasx32_test.sh.log: modules/objfmts/elf/tests/gasx32/elf_gasx32_test.sh + @p='modules/objfmts/elf/tests/gasx32/elf_gasx32_test.sh'; \ + b='modules/objfmts/elf/tests/gasx32/elf_gasx32_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/coff/tests/coff_test.sh.log: modules/objfmts/coff/tests/coff_test.sh + @p='modules/objfmts/coff/tests/coff_test.sh'; \ + b='modules/objfmts/coff/tests/coff_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/macho/tests/gas32/gas_macho32_test.sh.log: modules/objfmts/macho/tests/gas32/gas_macho32_test.sh + @p='modules/objfmts/macho/tests/gas32/gas_macho32_test.sh'; \ + b='modules/objfmts/macho/tests/gas32/gas_macho32_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/macho/tests/gas64/gas_macho64_test.sh.log: modules/objfmts/macho/tests/gas64/gas_macho64_test.sh + @p='modules/objfmts/macho/tests/gas64/gas_macho64_test.sh'; \ + b='modules/objfmts/macho/tests/gas64/gas_macho64_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/macho/tests/nasm32/macho32_test.sh.log: modules/objfmts/macho/tests/nasm32/macho32_test.sh + @p='modules/objfmts/macho/tests/nasm32/macho32_test.sh'; \ + b='modules/objfmts/macho/tests/nasm32/macho32_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/macho/tests/nasm64/macho64_test.sh.log: modules/objfmts/macho/tests/nasm64/macho64_test.sh + @p='modules/objfmts/macho/tests/nasm64/macho64_test.sh'; \ + b='modules/objfmts/macho/tests/nasm64/macho64_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/rdf/tests/rdf_test.sh.log: modules/objfmts/rdf/tests/rdf_test.sh + @p='modules/objfmts/rdf/tests/rdf_test.sh'; \ + b='modules/objfmts/rdf/tests/rdf_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/win32/tests/win32_test.sh.log: modules/objfmts/win32/tests/win32_test.sh + @p='modules/objfmts/win32/tests/win32_test.sh'; \ + b='modules/objfmts/win32/tests/win32_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/win32/tests/gas/win32_gas_test.sh.log: modules/objfmts/win32/tests/gas/win32_gas_test.sh + @p='modules/objfmts/win32/tests/gas/win32_gas_test.sh'; \ + b='modules/objfmts/win32/tests/gas/win32_gas_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/win64/tests/win64_test.sh.log: modules/objfmts/win64/tests/win64_test.sh + @p='modules/objfmts/win64/tests/win64_test.sh'; \ + b='modules/objfmts/win64/tests/win64_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/win64/tests/gas/win64_gas_test.sh.log: modules/objfmts/win64/tests/gas/win64_gas_test.sh + @p='modules/objfmts/win64/tests/gas/win64_gas_test.sh'; \ + b='modules/objfmts/win64/tests/gas/win64_gas_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +modules/objfmts/xdf/tests/xdf_test.sh.log: modules/objfmts/xdf/tests/xdf_test.sh + @p='modules/objfmts/xdf/tests/xdf_test.sh'; \ + b='modules/objfmts/xdf/tests/xdf_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +bitvect_test.log: bitvect_test$(EXEEXT) + @p='bitvect_test$(EXEEXT)'; \ + b='bitvect_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +floatnum_test.log: floatnum_test$(EXEEXT) + @p='floatnum_test$(EXEEXT)'; \ + b='floatnum_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +leb128_test.log: leb128_test$(EXEEXT) + @p='leb128_test$(EXEEXT)'; \ + b='leb128_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +splitpath_test.log: splitpath_test$(EXEEXT) + @p='splitpath_test$(EXEEXT)'; \ + b='splitpath_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +combpath_test.log: combpath_test$(EXEEXT) + @p='combpath_test$(EXEEXT)'; \ + b='combpath_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +uncstring_test.log: uncstring_test$(EXEEXT) + @p='uncstring_test$(EXEEXT)'; \ + b='uncstring_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +libyasm/tests/libyasm_test.sh.log: libyasm/tests/libyasm_test.sh + @p='libyasm/tests/libyasm_test.sh'; \ + b='libyasm/tests/libyasm_test.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(MANS) $(HEADERS) config.h \ + all-local +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man7dir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(modincludedir)" "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f frontends/tasm/$(DEPDIR)/$(am__dirstamp) + -rm -f frontends/tasm/$(am__dirstamp) + -rm -f frontends/vsyasm/$(DEPDIR)/$(am__dirstamp) + -rm -f frontends/vsyasm/$(am__dirstamp) + -rm -f frontends/yasm/$(DEPDIR)/$(am__dirstamp) + -rm -f frontends/yasm/$(am__dirstamp) + -rm -f libyasm/$(DEPDIR)/$(am__dirstamp) + -rm -f libyasm/$(am__dirstamp) + -rm -f libyasm/tests/$(DEPDIR)/$(am__dirstamp) + -rm -f libyasm/tests/$(am__dirstamp) + -rm -f modules/arch/lc3b/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/arch/lc3b/$(am__dirstamp) + -rm -f modules/arch/x86/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/arch/x86/$(am__dirstamp) + -rm -f modules/dbgfmts/codeview/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/dbgfmts/codeview/$(am__dirstamp) + -rm -f modules/dbgfmts/dwarf2/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/dbgfmts/dwarf2/$(am__dirstamp) + -rm -f modules/dbgfmts/null/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/dbgfmts/null/$(am__dirstamp) + -rm -f modules/dbgfmts/stabs/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/dbgfmts/stabs/$(am__dirstamp) + -rm -f modules/listfmts/nasm/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/listfmts/nasm/$(am__dirstamp) + -rm -f modules/objfmts/bin/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/objfmts/bin/$(am__dirstamp) + -rm -f modules/objfmts/coff/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/objfmts/coff/$(am__dirstamp) + -rm -f modules/objfmts/dbg/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/objfmts/dbg/$(am__dirstamp) + -rm -f modules/objfmts/elf/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/objfmts/elf/$(am__dirstamp) + -rm -f modules/objfmts/macho/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/objfmts/macho/$(am__dirstamp) + -rm -f modules/objfmts/rdf/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/objfmts/rdf/$(am__dirstamp) + -rm -f modules/objfmts/xdf/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/objfmts/xdf/$(am__dirstamp) + -rm -f modules/parsers/gas/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/parsers/gas/$(am__dirstamp) + -rm -f modules/parsers/nasm/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/parsers/nasm/$(am__dirstamp) + -rm -f modules/preprocs/cpp/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/preprocs/cpp/$(am__dirstamp) + -rm -f modules/preprocs/gas/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/preprocs/gas/$(am__dirstamp) + -rm -f modules/preprocs/nasm/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/preprocs/nasm/$(am__dirstamp) + -rm -f modules/preprocs/raw/$(DEPDIR)/$(am__dirstamp) + -rm -f modules/preprocs/raw/$(am__dirstamp) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ + clean-libLIBRARIES clean-noinstPROGRAMS mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf ./$(DEPDIR) frontends/tasm/$(DEPDIR) frontends/vsyasm/$(DEPDIR) frontends/yasm/$(DEPDIR) libyasm/$(DEPDIR) libyasm/tests/$(DEPDIR) modules/arch/lc3b/$(DEPDIR) modules/arch/x86/$(DEPDIR) modules/dbgfmts/codeview/$(DEPDIR) modules/dbgfmts/dwarf2/$(DEPDIR) modules/dbgfmts/null/$(DEPDIR) modules/dbgfmts/stabs/$(DEPDIR) modules/listfmts/nasm/$(DEPDIR) modules/objfmts/bin/$(DEPDIR) modules/objfmts/coff/$(DEPDIR) modules/objfmts/dbg/$(DEPDIR) modules/objfmts/elf/$(DEPDIR) modules/objfmts/macho/$(DEPDIR) modules/objfmts/rdf/$(DEPDIR) modules/objfmts/xdf/$(DEPDIR) modules/parsers/gas/$(DEPDIR) modules/parsers/nasm/$(DEPDIR) modules/preprocs/cpp/$(DEPDIR) modules/preprocs/gas/$(DEPDIR) modules/preprocs/nasm/$(DEPDIR) modules/preprocs/raw/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-local distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-includeHEADERS install-man \ + install-modincludeHEADERS install-nodist_includeHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-binPROGRAMS install-libLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-exec-hook +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: install-man1 install-man7 + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -rf ./$(DEPDIR) frontends/tasm/$(DEPDIR) frontends/vsyasm/$(DEPDIR) frontends/yasm/$(DEPDIR) libyasm/$(DEPDIR) libyasm/tests/$(DEPDIR) modules/arch/lc3b/$(DEPDIR) modules/arch/x86/$(DEPDIR) modules/dbgfmts/codeview/$(DEPDIR) modules/dbgfmts/dwarf2/$(DEPDIR) modules/dbgfmts/null/$(DEPDIR) modules/dbgfmts/stabs/$(DEPDIR) modules/listfmts/nasm/$(DEPDIR) modules/objfmts/bin/$(DEPDIR) modules/objfmts/coff/$(DEPDIR) modules/objfmts/dbg/$(DEPDIR) modules/objfmts/elf/$(DEPDIR) modules/objfmts/macho/$(DEPDIR) modules/objfmts/rdf/$(DEPDIR) modules/objfmts/xdf/$(DEPDIR) modules/parsers/gas/$(DEPDIR) modules/parsers/nasm/$(DEPDIR) modules/preprocs/cpp/$(DEPDIR) modules/preprocs/gas/$(DEPDIR) modules/preprocs/nasm/$(DEPDIR) modules/preprocs/raw/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-includeHEADERS \ + uninstall-libLIBRARIES uninstall-man \ + uninstall-modincludeHEADERS uninstall-nodist_includeHEADERS + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook +uninstall-man: uninstall-man1 uninstall-man7 + +.MAKE: $(am__recursive_targets) all check check-am install install-am \ + install-exec-am install-strip uninstall-am + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \ + am--refresh check check-TESTS check-am clean clean-binPROGRAMS \ + clean-checkPROGRAMS clean-cscope clean-generic \ + clean-libLIBRARIES clean-noinstPROGRAMS cscope cscopelist-am \ + ctags ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \ + dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-compile distclean-generic distclean-hdr \ + distclean-local distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-exec-hook install-html install-html-am \ + install-includeHEADERS install-info install-info-am \ + install-libLIBRARIES install-man install-man1 install-man7 \ + install-modincludeHEADERS install-nodist_includeHEADERS \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ + ps ps-am recheck tags tags-am uninstall uninstall-am \ + uninstall-binPROGRAMS uninstall-hook uninstall-includeHEADERS \ + uninstall-libLIBRARIES uninstall-man uninstall-man1 \ + uninstall-man7 uninstall-modincludeHEADERS \ + uninstall-nodist_includeHEADERS + + +re2c-main.$(OBJEXT): tools/re2c/main.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/re2c/main.c || echo '$(srcdir)/'`tools/re2c/main.c + +re2c-code.$(OBJEXT): tools/re2c/code.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/re2c/code.c || echo '$(srcdir)/'`tools/re2c/code.c + +re2c-dfa.$(OBJEXT): tools/re2c/dfa.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/re2c/dfa.c || echo '$(srcdir)/'`tools/re2c/dfa.c + +re2c-parser.$(OBJEXT): tools/re2c/parser.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/re2c/parser.c || echo '$(srcdir)/'`tools/re2c/parser.c + +re2c-actions.$(OBJEXT): tools/re2c/actions.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/re2c/actions.c || echo '$(srcdir)/'`tools/re2c/actions.c + +re2c-scanner.$(OBJEXT): tools/re2c/scanner.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/re2c/scanner.c || echo '$(srcdir)/'`tools/re2c/scanner.c + +re2c-mbo_getopt.$(OBJEXT): tools/re2c/mbo_getopt.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/re2c/mbo_getopt.c || echo '$(srcdir)/'`tools/re2c/mbo_getopt.c + +re2c-substr.$(OBJEXT): tools/re2c/substr.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/re2c/substr.c || echo '$(srcdir)/'`tools/re2c/substr.c + +re2c-translate.$(OBJEXT): tools/re2c/translate.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/re2c/translate.c || echo '$(srcdir)/'`tools/re2c/translate.c + +genmacro.$(OBJEXT): tools/genmacro/genmacro.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/genmacro/genmacro.c || echo '$(srcdir)/'`tools/genmacro/genmacro.c +.gperf.c: genperf$(EXEEXT) + $(top_builddir)/genperf$(EXEEXT) $< $@ + +genperf.$(OBJEXT): tools/genperf/genperf.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/genperf/genperf.c || echo '$(srcdir)/'`tools/genperf/genperf.c + +gp-perfect.$(OBJEXT): tools/genperf/perfect.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/genperf/perfect.c || echo '$(srcdir)/'`tools/genperf/perfect.c + +gp-phash.$(OBJEXT): libyasm/phash.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f libyasm/phash.c || echo '$(srcdir)/'`libyasm/phash.c + +gp-xmalloc.$(OBJEXT): libyasm/xmalloc.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f libyasm/xmalloc.c || echo '$(srcdir)/'`libyasm/xmalloc.c + +gp-xstrdup.$(OBJEXT): libyasm/xstrdup.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f libyasm/xstrdup.c || echo '$(srcdir)/'`libyasm/xstrdup.c + +# Use Pyxelator to generate Pyrex function headers. +@HAVE_PYTHON_BINDINGS_TRUE@_yasm.pxi: ${HEADERS} +@HAVE_PYTHON_BINDINGS_TRUE@ @rm -rf .tmp +@HAVE_PYTHON_BINDINGS_TRUE@ @mkdir .tmp +@HAVE_PYTHON_BINDINGS_TRUE@ $(PYTHON) $(srcdir)/tools/python-yasm/pyxelator/wrap_yasm.py \ +@HAVE_PYTHON_BINDINGS_TRUE@ "YASM_DIR=${srcdir}" "CPP=${CPP}" "CPPFLAGS=${CPPFLAGS}" +@HAVE_PYTHON_BINDINGS_TRUE@ @rm -rf .tmp + +# Need to build a local copy of the main Pyrex input file to include _yasm.pxi +# from the build directory. Also need to fixup the other .pxi include paths. +@HAVE_PYTHON_BINDINGS_TRUE@yasm.pyx: $(srcdir)/tools/python-yasm/yasm.pyx +@HAVE_PYTHON_BINDINGS_TRUE@ sed -e 's,^include "\([^_]\),include "${srcdir}/tools/python-yasm/\1,' \ +@HAVE_PYTHON_BINDINGS_TRUE@ $(srcdir)/tools/python-yasm/yasm.pyx > $@ + +# Actually run Cython +@HAVE_PYTHON_BINDINGS_TRUE@yasm_python.c: yasm.pyx _yasm.pxi $(PYBINDING_DEPS) +@HAVE_PYTHON_BINDINGS_TRUE@ $(PYTHON) -c "from Cython.Compiler.Main import main; main(command_line=1)" \ +@HAVE_PYTHON_BINDINGS_TRUE@ -o $@ yasm.pyx + +# Now the Python build magic... +@HAVE_PYTHON_BINDINGS_TRUE@python-setup.txt: Makefile +@HAVE_PYTHON_BINDINGS_TRUE@ echo "includes=${DEFS} ${DEFAULT_INCLUDES} ${INCLUDES} ${AM_CPPFLAGS} ${CPPFLAGS}" > python-setup.txt +@HAVE_PYTHON_BINDINGS_TRUE@ echo "sources=${libyasm_a_SOURCES} ${nodist_libyasm_a_SOURCES}" >> python-setup.txt +@HAVE_PYTHON_BINDINGS_TRUE@ echo "srcdir=${srcdir}" >> python-setup.txt +@HAVE_PYTHON_BINDINGS_TRUE@ echo "gcc=${GCC}" >> python-setup.txt + +@HAVE_PYTHON_BINDINGS_TRUE@.python-build: python-setup.txt yasm_python.c ${libyasm_a_SOURCES} ${nodist_libyasm_a_SOURCES} +@HAVE_PYTHON_BINDINGS_TRUE@ $(PYTHON) `test -f tools/python-yasm/setup.py || echo '$(srcdir)/'`tools/python-yasm/setup.py build +@HAVE_PYTHON_BINDINGS_TRUE@ touch .python-build +@HAVE_PYTHON_BINDINGS_TRUE@python-build: .python-build + +@HAVE_PYTHON_BINDINGS_TRUE@python-install: .python-build +@HAVE_PYTHON_BINDINGS_TRUE@ $(PYTHON) `test -f tools/python-yasm/setup.py || echo '$(srcdir)/'`tools/python-yasm/setup.py install "--install-lib=$(DESTDIR)$(pythondir)" + +@HAVE_PYTHON_BINDINGS_TRUE@python-uninstall: +@HAVE_PYTHON_BINDINGS_TRUE@ rm -f `$(PYTHON) -c "import sys;sys.path.insert(0, '${DESTDIR}${pythondir}'); import yasm; print yasm.__file__"` + +@HAVE_PYTHON_BINDINGS_FALSE@python-build: +@HAVE_PYTHON_BINDINGS_FALSE@python-install: +@HAVE_PYTHON_BINDINGS_FALSE@python-uninstall: + +modules/arch/x86/x86id.c: x86insn_nasm.c x86insn_gas.c x86insns.c + +@HAVE_PYTHON_TRUE@x86insn_nasm.gperf x86insn_gas.gperf x86insns.c: $(srcdir)/modules/arch/x86/gen_x86_insn.py +@HAVE_PYTHON_TRUE@ $(PYTHON) $(srcdir)/modules/arch/x86/gen_x86_insn.py +@HAVE_PYTHON_FALSE@x86insn_nasm.gperf: $(srcdir)/x86insn_nasm.gperf +@HAVE_PYTHON_FALSE@ @echo Python must be installed to regenerate x86 instructions files +@HAVE_PYTHON_FALSE@ cp $(srcdir)/x86insn_nasm.gperf $@ +@HAVE_PYTHON_FALSE@x86insn_gas.gperf: $(srcdir)/x86insn_gas.gperf +@HAVE_PYTHON_FALSE@ @echo Python must be installed to regenerate x86 instructions files +@HAVE_PYTHON_FALSE@ cp $(srcdir)/x86insn_gas.gperf $@ + +# Use suffix rules for gperf files +x86insn_nasm.c: x86insn_nasm.gperf genperf$(EXEEXT) +x86insn_gas.c: x86insn_gas.gperf genperf$(EXEEXT) +x86cpu.c: $(srcdir)/modules/arch/x86/x86cpu.gperf genperf$(EXEEXT) + $(top_builddir)/genperf$(EXEEXT) $(srcdir)/modules/arch/x86/x86cpu.gperf $@ +x86regtmod.c: $(srcdir)/modules/arch/x86/x86regtmod.gperf genperf$(EXEEXT) + $(top_builddir)/genperf$(EXEEXT) $(srcdir)/modules/arch/x86/x86regtmod.gperf $@ + +lc3bid.c: $(srcdir)/modules/arch/lc3b/lc3bid.re re2c$(EXEEXT) + $(top_builddir)/re2c$(EXEEXT) -s -o $@ $(srcdir)/modules/arch/lc3b/lc3bid.re + +@BUILD_MAN_TRUE@yasm_arch.7: modules/arch/yasm_arch.xml +@BUILD_MAN_TRUE@ $(XMLTO) -o $(top_builddir) man $(srcdir)/modules/arch/yasm_arch.xml + +#EXTRA_DIST += modules/listfmts/nasm/tests/Makefile.inc + +#include modules/listfmts/nasm/tests/Makefile.inc + +gas-token.c: $(srcdir)/modules/parsers/gas/gas-token.re re2c$(EXEEXT) + $(top_builddir)/re2c$(EXEEXT) -b -o $@ $(srcdir)/modules/parsers/gas/gas-token.re + +nasm-token.c: $(srcdir)/modules/parsers/nasm/nasm-token.re re2c$(EXEEXT) + $(top_builddir)/re2c$(EXEEXT) -b -o $@ $(srcdir)/modules/parsers/nasm/nasm-token.re + +$(top_srcdir)/modules/parsers/nasm/nasm-parser.c: nasm-macros.c + +nasm-macros.c: $(srcdir)/modules/parsers/nasm/nasm-std.mac genmacro$(EXEEXT) + $(top_builddir)/genmacro$(EXEEXT) $@ nasm_standard_mac $(srcdir)/modules/parsers/nasm/nasm-std.mac + +@BUILD_MAN_TRUE@yasm_parsers.7: modules/parsers/yasm_parsers.xml +@BUILD_MAN_TRUE@ $(XMLTO) -o $(top_builddir) man $(srcdir)/modules/parsers/yasm_parsers.xml + +$(top_srcdir)/modules/preprocs/nasm/nasm-preproc.c: nasm-version.c + +nasm-version.c: version.mac genmacro$(EXEEXT) + $(top_builddir)/genmacro$(EXEEXT) $@ nasm_version_mac version.mac + +version.mac: genversion$(EXEEXT) + $(top_builddir)/genversion$(EXEEXT) $@ + +genversion.$(OBJEXT): modules/preprocs/nasm/genversion.c + $(CC_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) -c -o $@ `test -f modules/preprocs/nasm/genversion.c || echo '$(srcdir)/'`modules/preprocs/nasm/genversion.c + +#EXTRA_DIST += modules/preprocs/gas/tests/rawpp_test.sh +#EXTRA_DIST += modules/preprocs/gas/tests/longline.asm +#EXTRA_DIST += modules/preprocs/gas/tests/longline.hex + +#EXTRA_DIST += modules/dbgfmts/codeview/tests/Makefile.inc +#include modules/dbgfmts/codeview/tests/Makefile.inc + +@BUILD_MAN_TRUE@yasm_dbgfmts.7: modules/dbgfmts/yasm_dbgfmts.xml +@BUILD_MAN_TRUE@ $(XMLTO) -o $(top_builddir) man $(srcdir)/modules/dbgfmts/yasm_dbgfmts.xml + +$(top_srcdir)/modules/objfmts/coff/coff-objfmt.c: win64-nasm.c win64-gas.c + +win64-nasm.c: $(srcdir)/modules/objfmts/coff/win64-nasm.mac genmacro$(EXEEXT) + $(top_builddir)/genmacro$(EXEEXT) $@ win64_nasm_stdmac $(srcdir)/modules/objfmts/coff/win64-nasm.mac + +win64-gas.c: $(srcdir)/modules/objfmts/coff/win64-gas.mac genmacro$(EXEEXT) + $(top_builddir)/genmacro$(EXEEXT) $@ win64_gas_stdmac $(srcdir)/modules/objfmts/coff/win64-gas.mac + +@BUILD_MAN_TRUE@yasm_objfmts.7: modules/objfmts/yasm_objfmts.xml +@BUILD_MAN_TRUE@ $(XMLTO) -o $(top_builddir) man $(srcdir)/modules/objfmts/yasm_objfmts.xml + +module.c: $(top_srcdir)/libyasm/module.in genmodule$(EXEEXT) Makefile + $(top_builddir)/genmodule$(EXEEXT) $(top_srcdir)/libyasm/module.in Makefile + +genmodule.$(OBJEXT): libyasm/genmodule.c + $(CC_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) -c -o $@ `test -f libyasm/genmodule.c || echo '$(srcdir)/'`libyasm/genmodule.c + +@BUILD_MAN_TRUE@yasm.1: frontends/yasm/yasm.xml +@BUILD_MAN_TRUE@ $(XMLTO) -o $(top_builddir) man $(srcdir)/frontends/yasm/yasm.xml + +$(srcdir)/frontends/yasm/yasm.c: license.c + +license.c: $(srcdir)/COPYING genstring$(EXEEXT) + $(top_builddir)/genstring$(EXEEXT) license_msg $@ $(srcdir)/COPYING + +$(srcdir)/frontends/vsyasm/vsyasm.c: license.c + +dist-hook: YASM-VERSION-FILE YASM-VERSION.h + cp YASM-VERSION-FILE $(distdir)/version + cp YASM-VERSION.h $(distdir)/Mkfiles/dj/ + cp YASM-VERSION.h $(distdir)/Mkfiles/vc9/ + cp YASM-VERSION.h $(distdir)/Mkfiles/vc10/ + cp YASM-VERSION.h $(distdir)/Mkfiles/vc12/ + +YASM-VERSION-FILE: $(top_srcdir)/YASM-VERSION-GEN.sh + $(top_srcdir)/YASM-VERSION-GEN.sh + +distclean-local: + -rm -rf results +@HAVE_PYTHON_TRUE@ -rm -rf build + +# Until gets fixed libyasm cross-build for target system +# use fixinstall-yasm-XXX make targets +all-local: python-build +install-exec-hook: python-install +uninstall-hook: python-uninstall + +genstring.$(OBJEXT): genstring.c + $(CC_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) -c -o $@ `test -f genstring.c || echo '$(srcdir)/'`genstring.c + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/Makefile.dj b/third-party/yasm/yasm-1.3.0/Mkfiles/Makefile.dj new file mode 100644 index 0000000000..34773036bb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/Makefile.dj @@ -0,0 +1,271 @@ +# Ultra-flat Makefile for DJGPP (also works for Cygwin). +# Does NOT depend on or use configure. +# +# Works for simple build but *not* for development (no clean, dist, etc). +# Also, WARNING, no header dependencies are included! +# +# How to compile: +# make -fMkfiles/Makefile.dj + +CFLAGS=-DHAVE_CONFIG_H -IMkfiles/dj -O -I. +CC?=gcc +BUILDCC?=$(CC) + +all: yasm ytasm vsyasm + +LIBYASM_OBJS= \ + libyasm/assocdat.o \ + libyasm/bitvect.o \ + libyasm/bc-align.o \ + libyasm/bc-data.o \ + libyasm/bc-incbin.o \ + libyasm/bc-org.o \ + libyasm/bc-reserve.o \ + libyasm/bytecode.o \ + libyasm/errwarn.o \ + libyasm/expr.o \ + libyasm/file.o \ + libyasm/floatnum.o \ + libyasm/hamt.o \ + libyasm/insn.o \ + libyasm/intnum.o \ + libyasm/inttree.o \ + libyasm/linemap.o \ + libyasm/md5.o \ + libyasm/mergesort.o \ + libyasm/phash.o \ + libyasm/section.o \ + libyasm/strcasecmp.o \ + libyasm/strsep.o \ + libyasm/symrec.o \ + libyasm/valparam.o \ + libyasm/value.o \ + libyasm/xmalloc.o \ + libyasm/xstrdup.o \ + module.o + +MODULES_ARCH_X86_OBJS= \ + modules/arch/x86/x86arch.o \ + modules/arch/x86/x86bc.o \ + modules/arch/x86/x86expr.o \ + modules/arch/x86/x86id.o \ + x86cpu.o \ + x86regtmod.o +YASM_MODULES=arch_x86 + +MODULES_ARCH_LC3B_OBJS= \ + modules/arch/lc3b/lc3barch.o \ + modules/arch/lc3b/lc3bbc.o \ + lc3bid.o +YASM_MODULES+=arch_lc3b + +MODULES_ARCH_OBJS= \ + $(MODULES_ARCH_X86_OBJS) \ + $(MODULES_ARCH_LC3B_OBJS) + +MODULES_DBGFMTS_OBJS= \ + modules/dbgfmts/null/null-dbgfmt.o \ + modules/dbgfmts/stabs/stabs-dbgfmt.o \ + modules/dbgfmts/codeview/cv-dbgfmt.o \ + modules/dbgfmts/codeview/cv-symline.o \ + modules/dbgfmts/codeview/cv-type.o \ + modules/dbgfmts/dwarf2/dwarf2-dbgfmt.o \ + modules/dbgfmts/dwarf2/dwarf2-line.o \ + modules/dbgfmts/dwarf2/dwarf2-info.o \ + modules/dbgfmts/dwarf2/dwarf2-aranges.o +YASM_MODULES+=dbgfmt_null +YASM_MODULES+=dbgfmt_stabs +YASM_MODULES+=dbgfmt_cv8 +YASM_MODULES+=dbgfmt_dwarf2 + +MODULES_LISTFMTS_OBJS= \ + modules/listfmts/nasm/nasm-listfmt.o +YASM_MODULES+=listfmt_nasm + +MODULES_OBJFMTS_OBJS= \ + modules/objfmts/dbg/dbg-objfmt.o \ + modules/objfmts/bin/bin-objfmt.o \ + modules/objfmts/coff/coff-objfmt.o \ + modules/objfmts/coff/win64-except.o \ + modules/objfmts/elf/elf.o \ + modules/objfmts/elf/elf-x86-x86.o \ + modules/objfmts/elf/elf-x86-amd64.o \ + modules/objfmts/elf/elf-objfmt.o \ + modules/objfmts/macho/macho-objfmt.o \ + modules/objfmts/rdf/rdf-objfmt.o \ + modules/objfmts/xdf/xdf-objfmt.o +YASM_MODULES+=objfmt_dbg +YASM_MODULES+=objfmt_bin objfmt_dosexe +YASM_MODULES+=objfmt_coff objfmt_win32 objfmt_win64 objfmt_x64 +YASM_MODULES+=objfmt_elf objfmt_elf32 objfmt_elf64 objfmt_elfx32 +YASM_MODULES+=objfmt_macho objfmt_macho32 objfmt_macho64 +YASM_MODULES+=objfmt_rdf +YASM_MODULES+=objfmt_xdf + +MODULES_PARSERS_OBJS= \ + modules/parsers/nasm/nasm-parser.o \ + modules/parsers/nasm/nasm-parse.o \ + nasm-token.o \ + modules/parsers/gas/gas-parser.o \ + modules/parsers/gas/gas-parse-intel.o \ + modules/parsers/gas/gas-parse.o \ + gas-token.o +YASM_MODULES+=parser_nasm parser_tasm +YASM_MODULES+=parser_gas parser_gnu + +MODULES_PREPROCS_NASM_OBJS= \ + modules/preprocs/nasm/nasm-eval.o \ + modules/preprocs/nasm/nasm-pp.o \ + modules/preprocs/nasm/nasm-preproc.o \ + modules/preprocs/nasm/nasmlib.o +YASM_MODULES+=preproc_nasm preproc_tasm + +MODULES_PREPROCS_RAW_OBJS = \ + modules/preprocs/raw/raw-preproc.o +YASM_MODULES+=preproc_raw + +MODULES_PREPROCS_CPP_OBJS = \ + modules/preprocs/cpp/cpp-preproc.o +YASM_MODULES+=preproc_cpp + +MODULES_PREPROCS_GAS_OBJS = \ + modules/preprocs/gas/gas-eval.o \ + modules/preprocs/gas/gas-preproc.o +YASM_MODULES+=preproc_gas + +MODULES_PREPROCS_OBJS = \ + $(MODULES_PREPROCS_NASM_OBJS) \ + $(MODULES_PREPROCS_RAW_OBJS) \ + $(MODULES_PREPROCS_CPP_OBJS) \ + $(MODULES_PREPROCS_GAS_OBJS) + +MODULES_OBJS = \ + $(MODULES_ARCH_OBJS) \ + $(MODULES_DBGFMTS_OBJS) \ + $(MODULES_LISTFMTS_OBJS) \ + $(MODULES_OBJFMTS_OBJS) \ + $(MODULES_OPTIMIZERS_OBJS) \ + $(MODULES_PARSERS_OBJS) \ + $(MODULES_PREPROCS_OBJS) + +YASM_OBJS= \ + frontends/yasm/yasm.o \ + frontends/yasm/yasm-options.o \ + $(LIBYASM_OBJS) \ + $(MODULES_OBJS) + +YTASM_OBJS= \ + frontends/tasm/tasm.o \ + frontends/tasm/tasm-options.o \ + $(LIBYASM_OBJS) \ + $(MODULES_OBJS) + +VSYASM_OBJS= \ + frontends/vsyasm/vsyasm.o \ + frontends/yasm/yasm-options.o \ + $(LIBYASM_OBJS) \ + $(MODULES_OBJS) + +genstring: genstring.c + $(BUILDCC) -o $@ $< + +license.c: COPYING genstring + ./genstring license_msg $@ COPYING + +frontends/yasm/yasm.c: license.c + +genmacro: tools/genmacro/genmacro.c + $(BUILDCC) -o $@ $< + +nasm-version.c: version.mac genmacro + ./genmacro $@ nasm_version_mac version.mac + +modules/preprocs/nasm/nasm-pp.c: nasm-version.c + +nasm-macros.c: modules/parsers/nasm/nasm-std.mac genmacro + ./genmacro $@ nasm_standard_mac modules/parsers/nasm/nasm-std.mac + +modules/parsers/nasm/nasm-parser.c: nasm-macros.c + +win64-nasm.c: modules/objfmts/coff/win64-nasm.mac genmacro + ./genmacro $@ win64_nasm_stdmac modules/objfmts/coff/win64-nasm.mac +win64-gas.c: modules/objfmts/coff/win64-gas.mac genmacro + ./genmacro $@ win64_gas_stdmac modules/objfmts/coff/win64-gas.mac + +modules/objfmts/coff/coff-objfmt.c: win64-nasm.c win64-gas.c + +genversion: modules/preprocs/nasm/genversion.c + $(BUILDCC) -IMkfiles/dj -o $@ $< + +version.mac: genversion + ./genversion $@ + +genmodule: libyasm/genmodule.c + $(BUILDCC) -o $@ $< + +module.c: libyasm/module.in genmodule + ./genmodule libyasm/module.in Mkfiles/Makefile.dj + +x86insn_nasm.gperf x86insn_gas.gperf x86insns.c: modules/arch/x86/gen_x86_insn.py + # ignore error in case python is not installed + -python modules/arch/x86/gen_x86_insn.py + +x86insn_nasm.c: x86insn_nasm.gperf genperf + ./genperf x86insn_nasm.gperf $@ + +x86insn_gas.c: x86insn_gas.gperf genperf + ./genperf x86insn_gas.gperf $@ + +x86cpu.c: modules/arch/x86/x86cpu.gperf genperf + ./genperf modules/arch/x86/x86cpu.gperf $@ + +x86regtmod.c: modules/arch/x86/x86regtmod.gperf genperf + ./genperf modules/arch/x86/x86regtmod.gperf $@ + +modules/arch/x86/x86id.c: x86insn_nasm.c x86insn_gas.c x86insns.c + +lc3bid.c: modules/arch/lc3b/lc3bid.re re2c + ./re2c -s -o $@ modules/arch/lc3b/lc3bid.re + +gas-token.c: modules/parsers/gas/gas-token.re re2c + ./re2c -b -o $@ modules/parsers/gas/gas-token.re + +nasm-token.c: modules/parsers/nasm/nasm-token.re re2c + ./re2c -b -o $@ modules/parsers/nasm/nasm-token.re + +RE2C_SRCS= \ + tools/re2c/main.c \ + tools/re2c/code.c \ + tools/re2c/dfa.c \ + tools/re2c/parser.c \ + tools/re2c/actions.c \ + tools/re2c/scanner.c \ + tools/re2c/mbo_getopt.c \ + tools/re2c/substr.c \ + tools/re2c/translate.c + +re2c: $(RE2C_SRCS) + $(BUILDCC) -I. -o re2c $(RE2C_SRCS) + +GENPERF_SRCS= \ + tools/genperf/genperf.c \ + tools/genperf/perfect.c \ + libyasm/phash.c \ + libyasm/xmalloc.c \ + libyasm/xstrdup.c + +genperf: $(GENPERF_SRCS) + $(BUILDCC) -I. -o genperf $(GENPERF_SRCS) + +yasm: $(YASM_OBJS) + $(CC) -o yasm $(YASM_OBJS) + +ytasm: $(YTASM_OBJS) + $(CC) -o ytasm $(YTASM_OBJS) + +vsyasm: $(VSYASM_OBJS) + $(CC) -o vsyasm $(VSYASM_OBJS) + +.c.o: + $(CC) -c $(CFLAGS) -o $@ $< + diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/Makefile.flat b/third-party/yasm/yasm-1.3.0/Mkfiles/Makefile.flat new file mode 100644 index 0000000000..e4d5b219d6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/Makefile.flat @@ -0,0 +1,279 @@ +# Ultra-flat Makefile "prototype" for non-Unix platforms. +# Does NOT depend on or use configure. +# +# Works for simple build but *not* for development (no clean, dist, etc). +# Also, WARNING, no header dependencies are included! +# +# NOTE: Needs a valid config.h for the platform being compiled on. +# +# This file should be customized to particular platforms by changing CC and +# CFLAGS appropriately, along with writing a config.h and _stdint.h for the +# platform and placing them in a subdirectory of Mkfiles. + +CFLAGS=-DHAVE_CONFIG_H -IMkfiles -I. +CC?=gcc +BUILDCC?=$(CC) + +all: yasm ytasm vsyasm + +LIBYASM_OBJS= \ + libyasm/assocdat.o \ + libyasm/bitvect.o \ + libyasm/bc-align.o \ + libyasm/bc-data.o \ + libyasm/bc-incbin.o \ + libyasm/bc-org.o \ + libyasm/bc-reserve.o \ + libyasm/bytecode.o \ + libyasm/errwarn.o \ + libyasm/expr.o \ + libyasm/file.o \ + libyasm/floatnum.o \ + libyasm/hamt.o \ + libyasm/insn.o \ + libyasm/intnum.o \ + libyasm/inttree.o \ + libyasm/linemap.o \ + libyasm/md5.o \ + libyasm/mergesort.o \ + libyasm/phash.o \ + libyasm/section.o \ + libyasm/strcasecmp.o \ + libyasm/strsep.o \ + libyasm/symrec.o \ + libyasm/valparam.o \ + libyasm/value.o \ + libyasm/xmalloc.o \ + libyasm/xstrdup.o \ + module.o + +MODULES_ARCH_X86_OBJS= \ + modules/arch/x86/x86arch.o \ + modules/arch/x86/x86bc.o \ + modules/arch/x86/x86expr.o \ + modules/arch/x86/x86id.o \ + x86cpu.o \ + x86regtmod.o +YASM_MODULES=arch_x86 + +MODULES_ARCH_LC3B_OBJS= \ + modules/arch/lc3b/lc3barch.o \ + modules/arch/lc3b/lc3bbc.o \ + lc3bid.o +YASM_MODULES+=arch_lc3b + +MODULES_ARCH_OBJS= \ + $(MODULES_ARCH_X86_OBJS) \ + $(MODULES_ARCH_LC3B_OBJS) + +MODULES_DBGFMTS_OBJS= \ + modules/dbgfmts/null/null-dbgfmt.o \ + modules/dbgfmts/stabs/stabs-dbgfmt.o \ + modules/dbgfmts/codeview/cv-dbgfmt.o \ + modules/dbgfmts/codeview/cv-symline.o \ + modules/dbgfmts/codeview/cv-type.o \ + modules/dbgfmts/dwarf2/dwarf2-dbgfmt.o \ + modules/dbgfmts/dwarf2/dwarf2-line.o \ + modules/dbgfmts/dwarf2/dwarf2-info.o \ + modules/dbgfmts/dwarf2/dwarf2-aranges.o +YASM_MODULES+=dbgfmt_null +YASM_MODULES+=dbgfmt_stabs +YASM_MODULES+=dbgfmt_cv8 +YASM_MODULES+=dbgfmt_dwarf2 + +MODULES_LISTFMTS_OBJS= \ + modules/listfmts/nasm/nasm-listfmt.o +YASM_MODULES+=listfmt_nasm + +MODULES_OBJFMTS_OBJS= \ + modules/objfmts/dbg/dbg-objfmt.o \ + modules/objfmts/bin/bin-objfmt.o \ + modules/objfmts/coff/coff-objfmt.o \ + modules/objfmts/coff/win64-except.o \ + modules/objfmts/elf/elf.o \ + modules/objfmts/elf/elf-x86-x86.o \ + modules/objfmts/elf/elf-x86-amd64.o \ + modules/objfmts/elf/elf-objfmt.o \ + modules/objfmts/macho/macho-objfmt.o \ + modules/objfmts/rdf/rdf-objfmt.o \ + modules/objfmts/xdf/xdf-objfmt.o +YASM_MODULES+=objfmt_dbg +YASM_MODULES+=objfmt_bin objfmt_dosexe +YASM_MODULES+=objfmt_coff objfmt_win32 objfmt_win64 objfmt_x64 +YASM_MODULES+=objfmt_elf objfmt_elf32 objfmt_elf64 objfmt_elfx32 +YASM_MODULES+=objfmt_macho objfmt_macho32 objfmt_macho64 +YASM_MODULES+=objfmt_rdf +YASM_MODULES+=objfmt_xdf + +MODULES_PARSERS_OBJS= \ + modules/parsers/nasm/nasm-parser.o \ + modules/parsers/nasm/nasm-parse.o \ + nasm-token.o \ + modules/parsers/gas/gas-parser.o \ + modules/parsers/gas/gas-parse-intel.o \ + modules/parsers/gas/gas-parse.o \ + gas-token.o +YASM_MODULES+=parser_nasm parser_tasm +YASM_MODULES+=parser_gas parser_gnu + +MODULES_PREPROCS_NASM_OBJS= \ + modules/preprocs/nasm/nasm-eval.o \ + modules/preprocs/nasm/nasm-pp.o \ + modules/preprocs/nasm/nasm-preproc.o \ + modules/preprocs/nasm/nasmlib.o +YASM_MODULES+=preproc_nasm preproc_tasm + +MODULES_PREPROCS_RAW_OBJS = \ + modules/preprocs/raw/raw-preproc.o +YASM_MODULES+=preproc_raw + +MODULES_PREPROCS_CPP_OBJS = \ + modules/preprocs/cpp/cpp-preproc.o +YASM_MODULES+=preproc_cpp + +MODULES_PREPROCS_GAS_OBJS = \ + modules/preprocs/gas/gas-eval.o \ + modules/preprocs/gas/gas-preproc.o +YASM_MODULES+=preproc_gas + +MODULES_PREPROCS_OBJS = \ + $(MODULES_PREPROCS_NASM_OBJS) \ + $(MODULES_PREPROCS_RAW_OBJS) \ + $(MODULES_PREPROCS_CPP_OBJS) \ + $(MODULES_PREPROCS_GAS_OBJS) + +MODULES_OBJS = \ + $(MODULES_ARCH_OBJS) \ + $(MODULES_DBGFMTS_OBJS) \ + $(MODULES_LISTFMTS_OBJS) \ + $(MODULES_OBJFMTS_OBJS) \ + $(MODULES_OPTIMIZERS_OBJS) \ + $(MODULES_PARSERS_OBJS) \ + $(MODULES_PREPROCS_OBJS) + +YASM_OBJS= \ + frontends/yasm/yasm.o \ + frontends/yasm/yasm-options.o \ + $(LIBYASM_OBJS) \ + $(MODULES_OBJS) + +YTASM_OBJS= \ + frontends/tasm/tasm.o \ + frontends/tasm/tasm-options.o \ + $(LIBYASM_OBJS) \ + $(MODULES_OBJS) + +VSYASM_OBJS= \ + frontends/vsyasm/vsyasm.o \ + frontends/yasm/yasm-options.o \ + $(LIBYASM_OBJS) \ + $(MODULES_OBJS) + +genstring: genstring.c + $(BUILDCC) -o $@ $< + +license.c: COPYING genstring + ./genstring license_msg $@ COPYING + +frontends/yasm/yasm.c: license.c + +genmacro: tools/genmacro/genmacro.c + $(BUILDCC) -o $@ $< + +nasm-version.c: version.mac genmacro + ./genmacro $@ nasm_version_mac version.mac + +modules/preprocs/nasm/nasm-pp.c: nasm-version.c + +nasm-macros.c: modules/parsers/nasm/nasm-std.mac genmacro + ./genmacro $@ nasm_standard_mac modules/parsers/nasm/nasm-std.mac + +modules/parsers/nasm/nasm-parser.c: nasm-macros.c + +win64-nasm.c: modules/objfmts/coff/win64-nasm.mac genmacro + ./genmacro $@ win64_nasm_stdmac modules/objfmts/coff/win64-nasm.mac +win64-gas.c: modules/objfmts/coff/win64-gas.mac genmacro + ./genmacro $@ win64_gas_stdmac modules/objfmts/coff/win64-gas.mac + +modules/objfmts/coff/coff-objfmt.c: win64-nasm.c win64-gas.c + +genversion: modules/preprocs/nasm/genversion.c YASM-VERSION.h + $(BUILDCC) -IMkfiles -I. -o $@ $< + +version.mac: genversion + ./genversion $@ + +genmodule: libyasm/genmodule.c + $(BUILDCC) -o $@ $< + +module.c: libyasm/module.in genmodule + ./genmodule libyasm/module.in Mkfiles/Makefile.flat + +x86insn_nasm.gperf x86insn_gas.gperf x86insns.c: modules/arch/x86/gen_x86_insn.py + # ignore error in case python is not installed + -python modules/arch/x86/gen_x86_insn.py + +x86insn_nasm.c: x86insn_nasm.gperf genperf + ./genperf x86insn_nasm.gperf $@ + +x86insn_gas.c: x86insn_gas.gperf genperf + ./genperf x86insn_gas.gperf $@ + +x86cpu.c: modules/arch/x86/x86cpu.gperf genperf + ./genperf modules/arch/x86/x86cpu.gperf $@ + +x86regtmod.c: modules/arch/x86/x86regtmod.gperf genperf + ./genperf modules/arch/x86/x86regtmod.gperf $@ + +modules/arch/x86/x86id.c: x86insn_nasm.c x86insn_gas.c x86insns.c + +lc3bid.c: modules/arch/lc3b/lc3bid.re re2c + ./re2c -s -o $@ modules/arch/lc3b/lc3bid.re + +gas-token.c: modules/parsers/gas/gas-token.re re2c + ./re2c -b -o $@ modules/parsers/gas/gas-token.re + +nasm-token.c: modules/parsers/nasm/nasm-token.re re2c + ./re2c -b -o $@ modules/parsers/nasm/nasm-token.re + +RE2C_SRCS= \ + tools/re2c/main.c \ + tools/re2c/code.c \ + tools/re2c/dfa.c \ + tools/re2c/parser.c \ + tools/re2c/actions.c \ + tools/re2c/scanner.c \ + tools/re2c/mbo_getopt.c \ + tools/re2c/substr.c \ + tools/re2c/translate.c + +re2c: $(RE2C_SRCS) + $(BUILDCC) -I. -o re2c $(RE2C_SRCS) + +GENPERF_SRCS= \ + tools/genperf/genperf.c \ + tools/genperf/perfect.c \ + libyasm/phash.c \ + libyasm/xmalloc.c \ + libyasm/xstrdup.c + +genperf: $(GENPERF_SRCS) + $(BUILDCC) -I. -o genperf $(GENPERF_SRCS) + +yasm: $(YASM_OBJS) + $(CC) -o yasm $(YASM_OBJS) + +ytasm: $(YTASM_OBJS) + $(CC) -o ytasm $(YTASM_OBJS) + +vsyasm: $(VSYASM_OBJS) + $(CC) -o vsyasm $(VSYASM_OBJS) + +.c.o: + $(CC) -c $(CFLAGS) -o $@ $< + +$(YASM_OBJS) $(YTASM_OBJS) $(VSYASM_OBJS): YASM-VERSION.h + +YASM-VERSION.h: YASM-VERSION-GEN.sh + sh YASM-VERSION-GEN.sh + diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/dj/YASM-VERSION.h b/third-party/yasm/yasm-1.3.0/Mkfiles/dj/YASM-VERSION.h new file mode 100644 index 0000000000..8624b44ff0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/dj/YASM-VERSION.h @@ -0,0 +1,2 @@ +#define PACKAGE_STRING "yasm 1.3.0" +#define PACKAGE_VERSION "1.3.0" diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/dj/config.h b/third-party/yasm/yasm-1.3.0/Mkfiles/dj/config.h new file mode 100644 index 0000000000..b33554ac39 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/dj/config.h @@ -0,0 +1,172 @@ +#include "YASM-VERSION.h" +#define yasm__splitpath(path, tail) yasm__splitpath_win(path, tail) +#define yasm__abspath(path) yasm__abspath_win(path) +#define yasm__combpath(from, to) yasm__combpath_win(from, to) + +/* Command name to run C preprocessor */ +#define CPP_PROG "gcc -E" + +/* */ +/* #undef ENABLE_NLS */ + +/* Define if you have the `abort' function. */ +#define HAVE_ABORT 1 + +/* */ +/* #undef HAVE_CATGETS */ + +/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the + CoreFoundation framework. */ +/* #undef HAVE_CFLOCALECOPYCURRENT */ + +/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */ + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +/* #undef HAVE_DCGETTEXT */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_DIRECT_H */ + +/* Define to 1 if you have the `ftruncate' function. */ +#define HAVE_FTRUNCATE 1 + +/* Define to 1 if you have the `getcwd' function. */ +#define HAVE_GETCWD 1 + +/* */ +/* #undef HAVE_GETTEXT */ + +/* Define if you have the GNU C Library */ +/* #undef HAVE_GNU_C_LIBRARY */ + +/* Define if you have the iconv() function. */ +/* #undef HAVE_ICONV */ + +/* Define if you have the header file. */ +/* #undef HAVE_INTTYPES_H */ + +/* */ +/* #undef HAVE_LC_MESSAGES */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_LIBGEN_H */ + +/* Define if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define if you have the `mergesort function. */ +/* #undef HAVE_MERGESORT */ + +/* Define to 1 if you have the `popen' function. */ +#define HAVE_POPEN 1 + +/* Define if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* */ +#define HAVE_STPCPY 1 + +/* Define if you have the `strcasecmp' function. */ +#define HAVE_STRCASECMP 1 + +/* Define if you have the `strcmpi' function. */ +/* #undef HAVE_STRCMPI */ + +/* Define if you have the `stricmp' function. */ +/* #undef HAVE_STRICMP */ + +/* Define if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define if you have the `strncasecmp' function. */ +#define HAVE_STRNCASECMP 1 + +/* Define if you have the `strsep' function. */ +#define HAVE_STRSEP 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define if you have the `toascii' function. */ +#define HAVE_TOASCII 1 + +/* Define if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the `vsnprintf' function. */ +/* #undef HAVE_VSNPRINTF */ + +/* Define to 1 if you have the `_stricmp' function. */ +/* #undef HAVE__STRICMP */ + +/* Name of package */ +#define PACKAGE "yasm" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "bug-yasm@tortall.net" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "yasm" + +/* Define to the full name and version of this package. */ +/*#define PACKAGE_STRING "yasm HEAD"*/ + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "yasm" + +/* Define to the version of this package. */ +/*#define PACKAGE_VERSION "HEAD"*/ + +/* Define if the C compiler supports function prototypes. */ +#define PROTOTYPES 1 + +/* The size of a `char', as computed by sizeof. */ +/* #undef SIZEOF_CHAR */ + +/* The size of a `int', as computed by sizeof. */ +/* #undef SIZEOF_INT */ + +/* The size of a `long', as computed by sizeof. */ +/* #undef SIZEOF_LONG */ + +/* The size of a `short', as computed by sizeof. */ +/* #undef SIZEOF_SHORT */ + +/* The size of a `void*', as computed by sizeof. */ +/* #undef SIZEOF_VOIDP */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Version number of package */ +#define VERSION "HEAD" + +/* Define if using the dmalloc debugging malloc package */ +/* #undef WITH_DMALLOC */ + +/* Define like PROTOTYPES; this can be used by system headers. */ +#define __PROTOTYPES 1 + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ + +/* Define as `__inline' if that's what the C compiler calls it, or to nothing + if it is not supported. */ +#ifndef __cplusplus +/* #undef inline */ +#endif + +/* Define to `unsigned' if doesn't define. */ +/* #undef size_t */ diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/dj/libyasm-stdint.h b/third-party/yasm/yasm-1.3.0/Mkfiles/dj/libyasm-stdint.h new file mode 100644 index 0000000000..d205fca0b3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/dj/libyasm-stdint.h @@ -0,0 +1,4 @@ +#ifndef _UINTPTR_T_DEFINED +typedef unsigned long uintptr_t; +#define _UINTPTR_T_DEFINED +#endif diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/YASM-VERSION.h b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/YASM-VERSION.h new file mode 100644 index 0000000000..8624b44ff0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/YASM-VERSION.h @@ -0,0 +1,2 @@ +#define PACKAGE_STRING "yasm 1.3.0" +#define PACKAGE_VERSION "1.3.0" diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/config.h b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/config.h new file mode 100644 index 0000000000..efb7cbe4d6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/config.h @@ -0,0 +1,170 @@ +#include "YASM-VERSION.h" +#define yasm__splitpath(path, tail) yasm__splitpath_win(path, tail) +#define yasm__abspath(path) yasm__abspath_win(path) +#define yasm__combpath(from, to) yasm__combpath_win(from, to) + +/* Command name to run C preprocessor */ +#define CPP_PROG "cpp" + +/* */ +/* #undef ENABLE_NLS */ + +/* Define if you have the `abort' function. */ +#define HAVE_ABORT 1 + +/* */ +/* #undef HAVE_CATGETS */ + +/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the + CoreFoundation framework. */ +/* #undef HAVE_CFLOCALECOPYCURRENT */ + +/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */ + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +/* #undef HAVE_DCGETTEXT */ + +/* Define to 1 if you have the header file. */ +#define HAVE_DIRECT_H 1 + +/* Define to 1 if you have the `getcwd' function. */ +#define HAVE_GETCWD 1 + +/* */ +/* #undef HAVE_GETTEXT */ + +/* Define if you have the GNU C Library */ +/* #undef HAVE_GNU_C_LIBRARY */ + +/* Define if you have the iconv() function. */ +/* #undef HAVE_ICONV */ + +/* Define if you have the header file. */ +/* #undef HAVE_INTTYPES_H */ + +/* */ +/* #undef HAVE_LC_MESSAGES */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_LIBGEN_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_MEMORY_H */ + +/* Define if you have the `mergesort' function. */ +/* #undef HAVE_MERGESORT */ + +/* Define to 1 if you have the `popen' function. */ +/* #undef HAVE_POPEN */ + +/* Define if you have the header file. */ +/* #undef HAVE_STDINT_H */ + +/* Define if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* */ +/* #undef HAVE_STPCPY */ + +/* Define if you have the `strcasecmp' function. */ +/* #undef HAVE_STRCASECMP */ + +/* Define if you have the `strcmpi' function. */ +/* #undef HAVE_STRCMPI */ + +/* Define if you have the `stricmp' function. */ +/* #undefine HAVE_STRICMP */ + +/* Define if you have the header file. */ +/* #undef HAVE_STRINGS_H */ + +/* Define if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define if you have the `strncasecmp' function. */ +/* #undef HAVE_STRNCASECMP */ + +/* Define if you have the `strsep' function. */ +/* #undef HAVE_STRSEP */ + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_STAT_H */ + +/* Define if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define if you have the `toascii' function. */ +#define HAVE_TOASCII 1 +#define toascii __toascii + +/* Define if you have the header file. */ +/* #undef HAVE_UNISTD_H */ + +/* Define to 1 if you have the `vsnprintf' function. */ +/* #undef HAVE_VSNPRINTF */ + +/* Define to 1 if you have the `_stricmp' function. */ +#define HAVE__STRICMP 1 + +/* Name of package */ +#define PACKAGE "yasm" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "bug-yasm@tortall.net" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "yasm" + +/* Define to the full name and version of this package. */ +/*#define PACKAGE_STRING "yasm HEAD"*/ + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "yasm" + +/* Define to the version of this package. */ +/*#define PACKAGE_VERSION "HEAD"*/ + +/* Define if the C compiler supports function prototypes. */ +#define PROTOTYPES 1 + +/* The size of a `char', as computed by sizeof. */ +/* #undef SIZEOF_CHAR */ + +/* The size of a `int', as computed by sizeof. */ +/* #undef SIZEOF_INT */ + +/* The size of a `long', as computed by sizeof. */ +/* #undef SIZEOF_LONG */ + +/* The size of a `short', as computed by sizeof. */ +/* #undef SIZEOF_SHORT */ + +/* The size of a `void*', as computed by sizeof. */ +/* #undef SIZEOF_VOIDP */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Version number of package */ +#define VERSION "HEAD" + +/* Define if using the dmalloc debugging malloc package */ +/* #undef WITH_DMALLOC */ + +/* Define like PROTOTYPES; this can be used by system headers. */ +#define __PROTOTYPES 1 + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ + +/* Define as `__inline' if that's what the C compiler calls it, or to nothing + if it is not supported. */ +#ifndef __cplusplus +/* #undef inline */ +#endif + +/* Define to `unsigned' if doesn't define. */ +/* #undef size_t */ diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/crt_secure_no_deprecate.props b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/crt_secure_no_deprecate.props new file mode 100644 index 0000000000..16e9f0d0e6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/crt_secure_no_deprecate.props @@ -0,0 +1,11 @@ + + + + <_ProjectFileVersion>10.0.21006.1 + + + + _CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/crt_secure_no_deprecate.vsprops b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/crt_secure_no_deprecate.vsprops new file mode 100644 index 0000000000..d61ba30aff --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/crt_secure_no_deprecate.vsprops @@ -0,0 +1,11 @@ + + + + diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmacro/genmacro.vcxproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmacro/genmacro.vcxproj new file mode 100644 index 0000000000..15cf1693d4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmacro/genmacro.vcxproj @@ -0,0 +1,117 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {225700A5-07B8-434E-AD61-555278BF6733} + genmacro + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + $(IntDir) + Level3 + ProgramDatabase + Default + + + $(OutDir)genmacro.exe + true + $(OutDir)$(TargetName).pdb + Console + false + + + MachineX86 + + + run.bat "$(TargetPath)" + + + + + Full + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreaded + + + $(IntDir) + Level3 + Default + + + $(OutDir)genmacro.exe + $(OutDir)$(TargetName).pdb + Console + true + true + false + + + MachineX86 + + + run.bat "$(TargetPath)" + + + + + + + + + + + {b545983b-8ee0-4a7b-a67a-e749eeae62a2} + false + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmacro/genmacro.vcxproj.filters b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmacro/genmacro.vcxproj.filters new file mode 100644 index 0000000000..b9d110e6e3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmacro/genmacro.vcxproj.filters @@ -0,0 +1,17 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmacro/run.bat b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmacro/run.bat new file mode 100644 index 0000000000..d2fbb98c30 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmacro/run.bat @@ -0,0 +1,5 @@ +cd ..\..\.. +%1 nasm-version.c nasm_version_mac version.mac +%1 nasm-macros.c nasm_standard_mac modules\parsers\nasm\nasm-std.mac +%1 win64-nasm.c win64_nasm_stdmac modules\objfmts\coff\win64-nasm.mac +%1 win64-gas.c win64_gas_stdmac modules\objfmts\coff\win64-gas.mac diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmodule/genmodule.vcxproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmodule/genmodule.vcxproj new file mode 100644 index 0000000000..eca6ce853f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmodule/genmodule.vcxproj @@ -0,0 +1,118 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0} + genmodule + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + %(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;FILTERMODE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + $(IntDir) + $(IntDir) + Level3 + ProgramDatabase + Default + + + $(OutDir)genmodule.exe + true + $(OutDir)$(TargetName).pdb + Console + false + + + MachineX86 + + + run.bat "$(TargetPath)" + + + + + Full + %(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;FILTERMODE;%(PreprocessorDefinitions) + MultiThreaded + + + $(IntDir) + $(IntDir) + Level3 + Default + + + $(OutDir)genmodule.exe + $(OutDir)$(TargetName).pdb + Console + true + true + false + + + MachineX86 + + + run.bat "$(TargetPath)" + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmodule/genmodule.vcxproj.filters b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmodule/genmodule.vcxproj.filters new file mode 100644 index 0000000000..e977736052 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmodule/genmodule.vcxproj.filters @@ -0,0 +1,20 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmodule/run.bat b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmodule/run.bat new file mode 100644 index 0000000000..e34a41694e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genmodule/run.bat @@ -0,0 +1,3 @@ +@echo off +cd ..\..\.. +%1 libyasm\module.in Makefile.am diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genperf/genperf.vcxproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genperf/genperf.vcxproj new file mode 100644 index 0000000000..9d14bf53bd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genperf/genperf.vcxproj @@ -0,0 +1,144 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619} + genperf + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + false + false + false + false + + + + Disabled + ..;../../..;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;STDC_HEADERS;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + $(IntDir) + Level3 + ProgramDatabase + Default + + + $(OutDir)genperf.exe + true + $(OutDir)$(TargetName).pdb + Console + false + + + MachineX86 + + + + + + + run.bat "$(TargetPath)" + + + x86insn_nasm.c;x86insn_gas.c;x86cpu.c;x86regtmod.c;%(Outputs) + + + + + Full + ..;../../..;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;STDC_HEADERS;%(PreprocessorDefinitions) + MultiThreaded + + + $(IntDir) + Level3 + Default + + + $(OutDir)genperf.exe + $(OutDir)$(TargetName).pdb + Console + true + true + false + + + MachineX86 + + + + + + + run.bat "$(TargetPath)" + + + x86insn_nasm.c;x86insn_gas.c;x86cpu.c;x86regtmod.c;%(Outputs) + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genperf/genperf.vcxproj.filters b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genperf/genperf.vcxproj.filters new file mode 100644 index 0000000000..f45157d960 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genperf/genperf.vcxproj.filters @@ -0,0 +1,56 @@ + + + + + {3C1E9AA8-6338-4CED-99F1-BEBA80607BD5} + h;hpp;hxx;hm;inl;inc;xsd + + + {1062695D-1C50-4068-8313-73A409885BC1} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genperf/run.bat b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genperf/run.bat new file mode 100644 index 0000000000..664e59ae3a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genperf/run.bat @@ -0,0 +1,39 @@ +cd ..\..\.. +@echo off + +for /f "usebackq tokens=1*" %%f in (`reg query HKCR\Applications\python.exe\shell\open\command 2^>NUL`) do (set _my_=%%f %%g) +goto try1%errorlevel% + +:try10 +goto ok + +:try11 +for /f "usebackq tokens=1*" %%f in (`reg query HKCR\Python.File\shell\open\command 2^>NUL`) do (set _my_=%%f %%g) +goto try2%errorlevel% + +:try20: +goto ok + +:try21: +echo Building without Python ... +goto therest + +:ok +echo Building with Python ... +set _res_=%_my_:*REG_SZ=% +set _end_=%_res_:*exe"=% +call set _python_=%%_res_:%_end_%=%% +call %_python_% modules\arch\x86\gen_x86_insn.py + +:therest +@echo on +call :update %1 x86insn_nasm.gperf x86insn_nasm.c +call :update %1 x86insn_gas.gperf x86insn_gas.c +call :update %1 modules\arch\x86\x86cpu.gperf x86cpu.c +call :update %1 modules\arch\x86\x86regtmod.gperf x86regtmod.c +goto :eof + +:update +%1 %2 tf +call mkfiles\vc10\out_copy_rename tf .\ %3 +del tf diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genstring/genstring.vcxproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genstring/genstring.vcxproj new file mode 100644 index 0000000000..118ec80c1c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genstring/genstring.vcxproj @@ -0,0 +1,111 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {021CEB0A-F721-4F59-B349-9CEEAF244459} + genstring + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + $(IntDir) + Level3 + ProgramDatabase + Default + + + $(OutDir)genstring.exe + true + $(OutDir)$(TargetName).pdb + Console + false + + + MachineX86 + + + run.bat "$(TargetPath)" + + + + + Full + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreaded + + + $(IntDir) + Level3 + Default + + + $(OutDir)genstring.exe + $(OutDir)$(TargetName).pdb + Console + true + true + false + + + MachineX86 + + + run.bat "$(TargetPath)" + + + + + + + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genstring/genstring.vcxproj.filters b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genstring/genstring.vcxproj.filters new file mode 100644 index 0000000000..4ec3efa334 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genstring/genstring.vcxproj.filters @@ -0,0 +1,17 @@ + + + + + {28EBE11C-5BE8-4935-9381-F57696749E0C} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genstring/run.bat b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genstring/run.bat new file mode 100644 index 0000000000..5864b1dc18 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genstring/run.bat @@ -0,0 +1,2 @@ +cd ..\..\.. +%1 license_msg license.c COPYING diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genversion/genversion.vcxproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genversion/genversion.vcxproj new file mode 100644 index 0000000000..2452658791 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genversion/genversion.vcxproj @@ -0,0 +1,126 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2} + genversion + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + ..\..\vc10;..\..\..\;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + $(IntDir) + Level3 + ProgramDatabase + Default + + + $(OutDir)genversion.exe + true + $(OutDir)$(TargetName).pdb + Console + false + + + MachineX86 + + + run.bat "$(TargetPath)" + + + cd ..\..\..\ +YASM-VERSION-GEN.bat + + + + + + Full + ..\..\vc10;..\..\..\;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreaded + + + $(IntDir) + Level3 + Default + + + $(OutDir)genversion.exe + $(OutDir)$(TargetName).pdb + Console + true + true + false + + + MachineX86 + + + run.bat "$(TargetPath)" + + + cd ..\..\..\ +YASM-VERSION-GEN.bat + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genversion/genversion.vcxproj.filters b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genversion/genversion.vcxproj.filters new file mode 100644 index 0000000000..a5fd059ad5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genversion/genversion.vcxproj.filters @@ -0,0 +1,26 @@ + + + + + {2acbec3a-0ed8-4b2e-826e-a84c7d35f205} + h;hpp;hxx;hm;inl + + + {E67ED277-E4F2-4D79-8C9E-962BAC164F3F} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + + + Header Files + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genversion/run.bat b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genversion/run.bat new file mode 100644 index 0000000000..30edf8f1bd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/genversion/run.bat @@ -0,0 +1,2 @@ +cd ..\..\.. +%1 version.mac diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/libyasm-stdint.h b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/libyasm-stdint.h new file mode 100644 index 0000000000..fed61b337b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/libyasm-stdint.h @@ -0,0 +1,8 @@ +#ifndef _UINTPTR_T_DEFINED +#ifdef _WIN64 +#include +#else +typedef unsigned long uintptr_t; +#endif +#define _UINTPTR_T_DEFINED +#endif diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/libyasm/libyasm.vcxproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/libyasm/libyasm.vcxproj new file mode 100644 index 0000000000..1498e312c0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/libyasm/libyasm.vcxproj @@ -0,0 +1,273 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {29FE7874-1256-4AD6-B889-68E399DC9608} + libyasm + + + + StaticLibrary + false + MultiByte + + + StaticLibrary + false + MultiByte + + + StaticLibrary + false + MultiByte + + + StaticLibrary + false + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + + Full + Default + ..;../../..;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_LIB;HAVE_CONFIG_H;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libyasm.lib + true + + + + + X64 + + + Full + Default + ..;../../..;%(AdditionalIncludeDirectories) + NDEBUG;_LIB;HAVE_CONFIG_H;WIN64;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libyasm.lib + true + + + + + Disabled + ..;../../..;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_LIB;HAVE_CONFIG_H;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libyasm.lib + true + + + + + X64 + + + Disabled + ..;../../..;%(AdditionalIncludeDirectories) + _DEBUG;_LIB;HAVE_CONFIG_H;WIN64;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libyasm.lib + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {f0e8b707-00c5-4ff2-b8ef-7c39817132a0} + false + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/libyasm/libyasm.vcxproj.filters b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/libyasm/libyasm.vcxproj.filters new file mode 100644 index 0000000000..d1ee2793ee --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/libyasm/libyasm.vcxproj.filters @@ -0,0 +1,200 @@ + + + + + {4ca3b698-9d01-4e4e-ae00-5c98da045efe} + h;hpp;hxx;hm;inl + + + {68607062-982d-4251-9a1a-30f76474983d} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/modules/modules.vcxproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/modules/modules.vcxproj new file mode 100644 index 0000000000..070e923fa4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/modules/modules.vcxproj @@ -0,0 +1,320 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6} + modules + + + + StaticLibrary + false + MultiByte + + + StaticLibrary + false + MultiByte + + + StaticLibrary + false + MultiByte + + + StaticLibrary + false + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + + Full + Default + ..;../../..;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_LIB;HAVE_CONFIG_H;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)modules.lib + true + + + + + + + + + X64 + + + Full + Default + ..;../../..;%(AdditionalIncludeDirectories) + NDEBUG;_LIB;HAVE_CONFIG_H;WIN64;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)modules.lib + true + + + + + Disabled + ..;../../..;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_LIB;HAVE_CONFIG_H;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)modules.lib + true + + + + + X64 + + + Disabled + ..;../../..;%(AdditionalIncludeDirectories) + _DEBUG;_LIB;HAVE_CONFIG_H;WIN64;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)modules.lib + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {225700a5-07b8-434e-ad61-555278bf6733} + false + + + {c45a8b59-8b59-4d5d-a8e8-fb090f8dd619} + false + + + {29fe7874-1256-4ad6-b889-68e399dc9608} + false + + + {3c58be13-50a3-4583-984d-d8902b3d7713} + false + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/modules/modules.vcxproj.filters b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/modules/modules.vcxproj.filters new file mode 100644 index 0000000000..b7912bdad8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/modules/modules.vcxproj.filters @@ -0,0 +1,256 @@ + + + + + {39c89f91-d860-4396-a49f-86b8b7a51c33} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + {be0cdf28-cbed-4774-b3cc-b63e4e3fa0a9} + + + {491cc60a-889b-4f53-aae9-f4d7d6aa667a} + + + {c084015d-3c3e-4379-8746-ae5cffcec79e} + + + {3333e0b3-e95f-44f6-9000-58d4da368360} + + + {528f2955-ceba-4691-a36c-054f119e3dcc} + + + {81686d52-eb71-4d4a-a830-66c45afb808f} + + + {98fe1e43-3794-4639-bf29-14b0c569754f} + + + {6b3956d4-0bff-4e8e-af61-a7e59b476fa4} + + + {446fad62-ac17-49e9-8263-33481f04f182} + + + {33fb7fc8-61f9-428d-9c94-7a4912fbb678} + + + {48fc77ec-7d78-4c0a-bfc2-9aa76faf5d7f} + + + + + Source Files\parsers + + + Source Files\arch + + + Source Files\arch + + + Source Files\arch + + + Source Files\arch + + + Source Files\arch + + + Source Files\arch + + + Source Files\arch + + + Source Files\dbgfmts + + + Source Files\dbgfmts + + + Source Files\dbgfmts + + + Source Files\dbgfmts + + + Source Files\dbgfmts + + + Source Files\dbgfmts + + + Source Files\dbgfmts + + + Source Files\dbgfmts + + + Source Files\dbgfmts + + + Source Files\listfmts\nasm + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\parsers + + + Source Files\parsers + + + Source Files\parsers + + + Source Files\parsers + + + Source Files\parsers + + + Source Files\preprocs\cpp + + + Source Files\preprocs\gas + + + Source Files\preprocs\gas + + + Source Files\preprocs\nasm + + + Source Files\preprocs\nasm + + + Source Files\preprocs\nasm + + + Source Files\preprocs\nasm + + + Source Files\preprocs\raw + + + Source Files\parsers + + + Source Files\arch + + + Source Files\arch + + + Source Files\objfmts + + + + + Source Files\arch + + + Source Files\arch + + + Source Files\dbgfmts + + + Source Files\dbgfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\parsers + + + Source Files\parsers + + + Source Files\preprocs\gas + + + Source Files\preprocs\nasm + + + Source Files\preprocs\nasm + + + Source Files\preprocs\nasm + + + Source Files\preprocs\nasm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/out_copy_rename.bat b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/out_copy_rename.bat new file mode 100644 index 0000000000..349ee33022 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/out_copy_rename.bat @@ -0,0 +1,42 @@ +@echo off +if not exist %1 goto nofile +if exist %2 goto copy + +echo creating directory %2 +md %2 > nul + +:copy +set str=%2 +for /f "useback tokens=*" %%a in ('%str%') do set str=%%~a +set str=%str:~-1% +if %str% == "\" goto hasbackslash + +if not exist %2\%3 goto cpy +fc %1 %2\%3 > nul && if not %errorlevel 1 goto exit +echo overwriting %2\%3 with %1 +copy %1 %2\%3 > nul +goto exit + +:cpy +echo copying %1 to %2\%3 +copy %1 %2\%3 > nul +goto exit + +:hasbackslash +if not exist %2%3 goto cpy2 +fc %1 %2%3 > nul && if not %errorlevel 1 goto exit +echo overwriting %2%3 with %1 +copy %1 %2%3 > nul +goto exit + +:cpy2 +echo copying %1 to %2%3 +copy %1 %2%3 > nul +goto exit + +:nofile +echo %1 not found + +:exit + + diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/re2c/re2c.vcxproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/re2c/re2c.vcxproj new file mode 100644 index 0000000000..fb50f146c4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/re2c/re2c.vcxproj @@ -0,0 +1,134 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {3C58BE13-50A3-4583-984D-D8902B3D7713} + re2c + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + true + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + Disabled + ..;../../..;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + $(IntDir) + Level3 + Default + ProgramDatabase + + + $(OutDir)re2c.exe + true + $(OutDir)$(TargetName).pdb + Console + false + + + MachineX86 + + + run.bat "$(TargetPath)" + + + + + Full + ..;../../..;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreaded + + + $(IntDir) + Level3 + Default + + + $(OutDir)re2c.exe + $(OutDir)$(TargetName).pdb + Console + true + true + false + + + MachineX86 + + + run.bat "$(TargetPath)" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/re2c/re2c.vcxproj.filters b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/re2c/re2c.vcxproj.filters new file mode 100644 index 0000000000..426ee6eb78 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/re2c/re2c.vcxproj.filters @@ -0,0 +1,80 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/re2c/run.bat b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/re2c/run.bat new file mode 100644 index 0000000000..cde2a7b6c8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/re2c/run.bat @@ -0,0 +1,4 @@ +cd ..\..\..\ +%1 -s -o lc3bid.c modules\arch\lc3b\lc3bid.re +%1 -b -o nasm-token.c modules\parsers\nasm\nasm-token.re +%1 -b -o gas-token.c modules\parsers\gas\gas-token.re diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/readme.vc10.txt b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/readme.vc10.txt new file mode 100644 index 0000000000..0182520be7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/readme.vc10.txt @@ -0,0 +1,119 @@ +Building YASM with Microsoft Visual Studio 2010 (C/C++ v10) +----------------------------------------------------------- + +This note describes how to build YASM using Microsoft Visual +Studio 2010 (C/C++ v10). + +1. The Compiler +--------------- + +If you want to build the 64-bit version of YASM you will need +to install the Visual Studio 2010 64-bit tools, which may not +be installed by default. If using Visual C++ Express 2010, +you will need to install the Windows SDK to obtain the 64-bit +build tools. + +2. YASM Download +---------------- + +First YASM needs to be downloaded and the files placed within +a suitable directory, which will be called here but can +be named and located as you wish. + +3. Building YASM with Microsoft 2010 (VC10) +------------------------------------------- + +Now locate and double click on the yasm.sln solution file in +the 'Mkfiles/vc10' subdirectory to open the build project in +the Visual Studio 2010 IDE and then select: + + win32 or x64 build + release or debug build + +as appropriate to build the YASM binaries that you need. + +4. Using YASM with Visual Sudio 2010 and VC++ version 10 +-------------------------------------------------------- + +The YASM version vsyasm.exe is designed specifically for use +with Visual Studio 2010. To tell Visual Studio where to find +vsyasm.exe, the environment variable YASMPATH can be set to +the absolute path of the directory in which vsyasm.exe is +located (this path should include the final backslash). + +Alternatively you can find the directory (or directories) +where the VC++ compiler binaries are located and put copies +of the vsyasm.exe binary in these directories. The typical +location on 64-bit Windows is: + +C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin + +On 32-bit Windows it is normally at: + +C:\Program Files\Microsoft Visual Studio 10.0\VC\bin + +Depending on your system you can use either the win32 or the +x64 version of vsyasm.exe, which must be named vsyasm.exe. + +To use the new custom tools facility in Visual Studio 2010, you +need to place a copy of three files - yasm.props, yasm.targets +and yasm.xml - into a location where they can be found by the +Visual Studio build customisation processes. There are several +ways to do this: + + a. put these files in the MSBUILD customisation directory, + which is typically at: + + C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations + + or: + + C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations + + b. put them in a convenient location and set this path in the + 'Build Customisations Search Path' in the Visual Studio + 'Projects and Solutions|VC++ Project Settings' item in + the 'Tools|Options' menu; + + c. put them in a convenient location and set this path in the + 'Build Customisation dialogue (discussed later). + +To use YASM in a project, right click on the project in the Solution +Explorer and select 'Build Customisations..'. This will give you a +dialog box that allows you to select YASM as an assembler (note that +your assembler files need to have the extension '.asm'). If you have +used option c. above, you will need to let the dialogue find them +using the 'Find Existing' button below the dialogue. + +To assemble a file with YASM, select the Property Page for the +file and the select 'Yasm Assembler' in the Tool dialog entry. +Then click 'Apply' and an additional property page entry will +appear and enable YASM settings to be established. + +5. A Linker Issue +----------------- + +There appears to be a linker bug in the VC++ linker that +prevents symbols with absolute addresses being linked in DLL +builds. This means, for example, that LEA instructions of +the general form: + + lea, rax,[rax+symbol] + +cannot be used for DLL builds. The following general form +has to be used instead: + + lea rcx,[symbol wrt rip] + lea rax,[rax+rcx] + +This limitation may also cause problems with other instruction +that use absolute addresses. + +6. Acknowledgements +------------------- + +I am most grateful for the fantastic support that Peter Johnson, +YASM's creator, has given me in tracking down issues in using +YASM for the production of Windows x64 code. + + Brian Gladman, 29th January 2011 diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/vsyasm.props b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/vsyasm.props new file mode 100644 index 0000000000..89476f2e3b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/vsyasm.props @@ -0,0 +1,27 @@ + + + + Midl + CustomBuild + + + _SelectedFiles;$(YASMDependsOn) + + + $(VCInstallDir)bin\ + + + + False + $(IntDir) + 0 + 0 + "$(YasmPath)"vsyasm.exe -Xvc -f $(Platform) [AllOptions] [AdditionalOptions] [Inputs] + %(ObjectFile) + Assembling %(Filename)%(Extension) + false + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/vsyasm.targets b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/vsyasm.targets new file mode 100644 index 0000000000..c86180dd87 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/vsyasm.targets @@ -0,0 +1,108 @@ + + + + + + _YASM + + + + $(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml + + + + + + + + @(YASM, '|') + + + + + + + + + $(ComputeLinkInputsTargets); + ComputeYASMOutput; + + + $(ComputeLibInputsTargets); + ComputeYASMOutput; + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/vsyasm.vcxproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/vsyasm.vcxproj new file mode 100644 index 0000000000..a5ed26043e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/vsyasm.vcxproj @@ -0,0 +1,275 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {7FDD85BB-CC86-442B-A425-989B5B296ED5} + vsyasm + + + + Application + false + MultiByte + + + Application + false + MultiByte + + + Application + false + MultiByte + + + Application + false + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + $(Platform)\$(Configuration)/yasm.tlb + + + + + Disabled + .;../..;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_LIB;HAVE_CONFIG_H;VC;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)vsyasm.exe + true + true + $(OutDir)$(ProjectName).pdb + Console + false + + + MachineX86 + + + + + X64 + $(Platform)\$(Configuration)/yasm.tlb + + + + + Disabled + .;../..;%(AdditionalIncludeDirectories) + _DEBUG;_LIB;HAVE_CONFIG_H;VC;WIN64;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)vsyasm.exe + true + true + $(OutDir)$(TargetName).pdb + Console + false + + + MachineX64 + + + + + $(Platform)\$(Configuration)/yasm.tlb + + + + + Full + Default + true + .;../..;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_LIB;HAVE_CONFIG_H;VC;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)vsyasm.exe + true + true + $(OutDir)$(ProjectName).pdb + Console + false + + + MachineX86 + + + + + X64 + $(Platform)\$(Configuration)/yasm.tlb + + + + + Full + OnlyExplicitInline + .;../..;%(AdditionalIncludeDirectories) + NDEBUG;_LIB;HAVE_CONFIG_H;VC;WIN64;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)vsyasm.exe + true + $(OutDir)$(TargetName).pdb + Console + false + + + MachineX64 + true + + + + + + + + + {29fe7874-1256-4ad6-b889-68e399dc9608} + false + + + {d715a3d4-efaa-442e-ad8b-5b4ff64e1dd6} + false + + + + + + + + + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/vsyasm.xml b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/vsyasm.xml new file mode 100644 index 0000000000..860bce8d14 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/vsyasm.xml @@ -0,0 +1,283 @@ + + + + + + + + + + + + + General + + + + + + Symbols + + + + + + Files + + + + + + Command Line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Execute Before + + + Specifies the targets for the build customization to run before. + + + + + + + + + + + + Execute After + + + Specifies the targets for the build customization to run after. + + + + + + + + + + + + + + + + + + Additional Options + + + Additional Options + + + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/yasm.sln b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/yasm.sln new file mode 100644 index 0000000000..306c7b10c2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/yasm.sln @@ -0,0 +1,140 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{825AC694-358C-4D8D-92DE-33A2691978CE}" + ProjectSection(SolutionItems) = preProject + crt_secure_no_deprecate.vsprops = crt_secure_no_deprecate.vsprops + readme.vc10.txt = readme.vc10.txt + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libyasm", "libyasm\libyasm.vcxproj", "{29FE7874-1256-4AD6-B889-68E399DC9608}" + ProjectSection(ProjectDependencies) = postProject + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2} = {B545983B-8EE0-4A7B-A67A-E749EEAE62A2} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "modules", "modules\modules.vcxproj", "{D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "yasm", "yasm.vcxproj", "{34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genmacro", "genmacro\genmacro.vcxproj", "{225700A5-07B8-434E-AD61-555278BF6733}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genversion", "genversion\genversion.vcxproj", "{B545983B-8EE0-4A7B-A67A-E749EEAE62A2}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "re2c", "re2c\re2c.vcxproj", "{3C58BE13-50A3-4583-984D-D8902B3D7713}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genperf", "genperf\genperf.vcxproj", "{C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genmodule", "genmodule\genmodule.vcxproj", "{F0E8B707-00C5-4FF2-B8EF-7C39817132A0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genstring", "genstring\genstring.vcxproj", "{021CEB0A-F721-4F59-B349-9CEEAF244459}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ytasm", "ytasm.vcxproj", "{2162937B-0DBD-4450-B45F-DF578D8E7508}" + ProjectSection(ProjectDependencies) = postProject + {021CEB0A-F721-4F59-B349-9CEEAF244459} = {021CEB0A-F721-4F59-B349-9CEEAF244459} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vsyasm", "vsyasm.vcxproj", "{7FDD85BB-CC86-442B-A425-989B5B296ED5}" + ProjectSection(ProjectDependencies) = postProject + {021CEB0A-F721-4F59-B349-9CEEAF244459} = {021CEB0A-F721-4F59-B349-9CEEAF244459} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {29FE7874-1256-4AD6-B889-68E399DC9608}.Debug|Win32.ActiveCfg = Debug|Win32 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Debug|Win32.Build.0 = Debug|Win32 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Debug|x64.ActiveCfg = Debug|x64 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Debug|x64.Build.0 = Debug|x64 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Release|Win32.ActiveCfg = Release|Win32 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Release|Win32.Build.0 = Release|Win32 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Release|x64.ActiveCfg = Release|x64 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Release|x64.Build.0 = Release|x64 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Debug|Win32.ActiveCfg = Debug|Win32 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Debug|Win32.Build.0 = Debug|Win32 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Debug|x64.ActiveCfg = Debug|x64 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Debug|x64.Build.0 = Debug|x64 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Release|Win32.ActiveCfg = Release|Win32 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Release|Win32.Build.0 = Release|Win32 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Release|x64.ActiveCfg = Release|x64 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Release|x64.Build.0 = Release|x64 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Debug|Win32.ActiveCfg = Debug|Win32 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Debug|Win32.Build.0 = Debug|Win32 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Debug|x64.ActiveCfg = Debug|x64 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Debug|x64.Build.0 = Debug|x64 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Release|Win32.ActiveCfg = Release|Win32 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Release|Win32.Build.0 = Release|Win32 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Release|x64.ActiveCfg = Release|x64 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Release|x64.Build.0 = Release|x64 + {225700A5-07B8-434E-AD61-555278BF6733}.Debug|Win32.ActiveCfg = Debug|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Debug|Win32.Build.0 = Debug|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Debug|x64.ActiveCfg = Debug|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Debug|x64.Build.0 = Debug|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Release|Win32.ActiveCfg = Release|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Release|Win32.Build.0 = Release|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Release|x64.ActiveCfg = Release|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Release|x64.Build.0 = Release|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Debug|Win32.ActiveCfg = Debug|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Debug|Win32.Build.0 = Debug|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Debug|x64.ActiveCfg = Debug|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Debug|x64.Build.0 = Debug|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Release|Win32.ActiveCfg = Release|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Release|Win32.Build.0 = Release|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Release|x64.ActiveCfg = Release|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Release|x64.Build.0 = Release|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Debug|Win32.ActiveCfg = Debug|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Debug|Win32.Build.0 = Debug|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Debug|x64.ActiveCfg = Debug|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Debug|x64.Build.0 = Debug|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Release|Win32.ActiveCfg = Release|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Release|Win32.Build.0 = Release|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Release|x64.ActiveCfg = Release|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Release|x64.Build.0 = Release|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Debug|Win32.ActiveCfg = Debug|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Debug|Win32.Build.0 = Debug|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Debug|x64.ActiveCfg = Debug|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Debug|x64.Build.0 = Debug|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Release|Win32.ActiveCfg = Release|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Release|Win32.Build.0 = Release|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Release|x64.ActiveCfg = Release|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Release|x64.Build.0 = Release|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Debug|Win32.ActiveCfg = Debug|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Debug|Win32.Build.0 = Debug|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Debug|x64.ActiveCfg = Debug|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Debug|x64.Build.0 = Debug|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Release|Win32.ActiveCfg = Release|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Release|Win32.Build.0 = Release|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Release|x64.ActiveCfg = Release|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Release|x64.Build.0 = Release|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Debug|Win32.ActiveCfg = Debug|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Debug|Win32.Build.0 = Debug|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Debug|x64.ActiveCfg = Debug|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Debug|x64.Build.0 = Debug|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Release|Win32.ActiveCfg = Release|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Release|Win32.Build.0 = Release|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Release|x64.ActiveCfg = Release|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Release|x64.Build.0 = Release|Win32 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Debug|Win32.ActiveCfg = Debug|Win32 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Debug|Win32.Build.0 = Debug|Win32 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Debug|x64.ActiveCfg = Debug|x64 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Debug|x64.Build.0 = Debug|x64 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Release|Win32.ActiveCfg = Release|Win32 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Release|Win32.Build.0 = Release|Win32 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Release|x64.ActiveCfg = Release|x64 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Release|x64.Build.0 = Release|x64 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Debug|Win32.ActiveCfg = Debug|Win32 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Debug|Win32.Build.0 = Debug|Win32 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Debug|x64.ActiveCfg = Debug|x64 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Debug|x64.Build.0 = Debug|x64 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Release|Win32.ActiveCfg = Release|Win32 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Release|Win32.Build.0 = Release|Win32 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Release|x64.ActiveCfg = Release|x64 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/yasm.vcxproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/yasm.vcxproj new file mode 100644 index 0000000000..9379d70a7b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/yasm.vcxproj @@ -0,0 +1,279 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5} + yasm + + + + Application + false + MultiByte + + + Application + false + MultiByte + + + Application + false + MultiByte + + + Application + false + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + $(Platform)\$(Configuration)/yasm.tlb + + + + + Disabled + .;../..;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_LIB;HAVE_CONFIG_H;VC;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)yasm.exe + true + true + $(OutDir)$(ProjectName).pdb + Console + false + + + MachineX86 + + + + + X64 + $(Platform)\$(Configuration)/yasm.tlb + + + + + Disabled + .;../..;%(AdditionalIncludeDirectories) + _DEBUG;_LIB;HAVE_CONFIG_H;VC;WIN64;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)yasm.exe + true + true + $(OutDir)$(TargetName).pdb + Console + false + + + MachineX64 + + + + + $(Platform)\$(Configuration)/yasm.tlb + + + + + Full + Default + true + .;../..;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_LIB;HAVE_CONFIG_H;VC;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)yasm.exe + true + true + $(OutDir)$(ProjectName).pdb + Console + false + + + MachineX86 + + + + + X64 + $(Platform)\$(Configuration)/yasm.tlb + + + + + Full + OnlyExplicitInline + .;../..;%(AdditionalIncludeDirectories) + NDEBUG;_LIB;HAVE_CONFIG_H;VC;WIN64;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)yasm.exe + true + $(OutDir)$(TargetName).pdb + Console + false + + + MachineX64 + true + + + + + + + + + + + + + + + + + {021ceb0a-f721-4f59-b349-9ceeaf244459} + false + + + {29fe7874-1256-4ad6-b889-68e399dc9608} + false + + + {d715a3d4-efaa-442e-ad8b-5b4ff64e1dd6} + false + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/yasm.vcxproj.filters b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/yasm.vcxproj.filters new file mode 100644 index 0000000000..df5419b83b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/yasm.vcxproj.filters @@ -0,0 +1,41 @@ + + + + + {51f0d88e-1373-4bf8-a72e-c79706d37f8b} + h;hpp;hxx;hm;inl + + + {db67b411-6f59-462c-9c20-75024c6b3912} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/ytasm.vcxproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/ytasm.vcxproj new file mode 100644 index 0000000000..d45cdf4843 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc10/ytasm.vcxproj @@ -0,0 +1,274 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {2162937B-0DBD-4450-B45F-DF578D8E7508} + ytasm + + + + Application + false + MultiByte + + + Application + false + MultiByte + + + Application + false + MultiByte + + + Application + false + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + $(Platform)\$(Configuration)/yasm.tlb + + + + + Disabled + .;../..;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_LIB;HAVE_CONFIG_H;VC;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)ytasm.exe + true + true + $(OutDir)$(ProjectName).pdb + Console + false + + + MachineX86 + + + + + X64 + $(Platform)\$(Configuration)/yasm.tlb + + + + + Disabled + .;../..;%(AdditionalIncludeDirectories) + _DEBUG;_LIB;HAVE_CONFIG_H;VC;WIN64;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)ytasm.exe + true + true + $(OutDir)$(TargetName).pdb + Console + false + + + MachineX64 + + + + + $(Platform)\$(Configuration)/yasm.tlb + + + + + Full + Default + true + .;../..;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_LIB;HAVE_CONFIG_H;VC;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)ytasm.exe + true + true + $(OutDir)$(ProjectName).pdb + Console + false + + + MachineX86 + + + + + X64 + $(Platform)\$(Configuration)/yasm.tlb + + + + + Full + OnlyExplicitInline + .;../..;%(AdditionalIncludeDirectories) + NDEBUG;_LIB;HAVE_CONFIG_H;VC;WIN64;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)ytasm.exe + true + $(OutDir)$(TargetName).pdb + Console + false + + + MachineX64 + true + + + + + + + + + + + + + + + + {29fe7874-1256-4ad6-b889-68e399dc9608} + false + + + {d715a3d4-efaa-442e-ad8b-5b4ff64e1dd6} + false + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/YASM-VERSION.h b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/YASM-VERSION.h new file mode 100644 index 0000000000..8624b44ff0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/YASM-VERSION.h @@ -0,0 +1,2 @@ +#define PACKAGE_STRING "yasm 1.3.0" +#define PACKAGE_VERSION "1.3.0" diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/config.h b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/config.h new file mode 100644 index 0000000000..8515ac5a33 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/config.h @@ -0,0 +1,170 @@ +#include "YASM-VERSION.h" +#define yasm__splitpath(path, tail) yasm__splitpath_win(path, tail) +#define yasm__abspath(path) yasm__abspath_win(path) +#define yasm__combpath(from, to) yasm__combpath_win(from, to) + +/* Command name to run C preprocessor */ +#define CPP_PROG "cpp" + +/* */ +/* #undef ENABLE_NLS */ + +/* Define if you have the `abort' function. */ +#define HAVE_ABORT 1 + +/* */ +/* #undef HAVE_CATGETS */ + +/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the + CoreFoundation framework. */ +/* #undef HAVE_CFLOCALECOPYCURRENT */ + +/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */ + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +/* #undef HAVE_DCGETTEXT */ + +/* Define to 1 if you have the header file. */ +#define HAVE_DIRECT_H 1 + +/* Define to 1 if you have the `getcwd' function. */ +#define HAVE_GETCWD 1 + +/* */ +/* #undef HAVE_GETTEXT */ + +/* Define if you have the GNU C Library */ +/* #undef HAVE_GNU_C_LIBRARY */ + +/* Define if you have the iconv() function. */ +/* #undef HAVE_ICONV */ + +/* Define if you have the header file. */ +/* #undef HAVE_INTTYPES_H */ + +/* */ +/* #undef HAVE_LC_MESSAGES */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_LIBGEN_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_MEMORY_H */ + +/* Define if you have the `mergesort' function. */ +/* #undef HAVE_MERGESORT */ + +/* Define to 1 if you have the `popen' function. */ +/* #undef HAVE_POPEN */ + +/* Define if you have the header file. */ +/* #undef HAVE_STDINT_H */ + +/* Define if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* */ +/* #undef HAVE_STPCPY */ + +/* Define if you have the `strcasecmp' function. */ +/* #undef HAVE_STRCASECMP */ + +/* Define if you have the `strcmpi' function. */ +/* #undef HAVE_STRCMPI */ + +/* Define if you have the `stricmp' function. */ +/* #undefine HAVE_STRICMP */ + +/* Define if you have the header file. */ +/* #undef HAVE_STRINGS_H */ + +/* Define if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define if you have the `strncasecmp' function. */ +/* #undef HAVE_STRNCASECMP */ + +/* Define if you have the `strsep' function. */ +/* #undef HAVE_STRSEP */ + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_STAT_H */ + +/* Define if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define if you have the `toascii' function. */ +#define HAVE_TOASCII 1 +#define toascii __toascii + +/* Define if you have the header file. */ +/* #undef HAVE_UNISTD_H */ + +/* Define to 1 if you have the `vsnprintf' function. */ +/* #undef HAVE_VSNPRINTF */ + +/* Define to 1 if you have the `_stricmp' function. */ +#define HAVE__STRICMP 1 + +/* Name of package */ +#define PACKAGE "yasm" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "bug-yasm@tortall.net" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "yasm" + +/* Define to the full name and version of this package. */ +/*#define PACKAGE_STRING "yasm HEAD"*/ + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "yasm" + +/* Define to the version of this package. */ +/*#define PACKAGE_VERSION "HEAD"*/ + +/* Define if the C compiler supports function prototypes. */ +#define PROTOTYPES 1 + +/* The size of a `char', as computed by sizeof. */ +/* #undef SIZEOF_CHAR */ + +/* The size of a `int', as computed by sizeof. */ +/* #undef SIZEOF_INT */ + +/* The size of a `long', as computed by sizeof. */ +/* #undef SIZEOF_LONG */ + +/* The size of a `short', as computed by sizeof. */ +/* #undef SIZEOF_SHORT */ + +/* The size of a `void*', as computed by sizeof. */ +/* #undef SIZEOF_VOIDP */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Version number of package */ +#define VERSION "HEAD" + +/* Define if using the dmalloc debugging malloc package */ +/* #undef WITH_DMALLOC */ + +/* Define like PROTOTYPES; this can be used by system headers. */ +#define __PROTOTYPES 1 + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ + +/* Define as `__inline' if that's what the C compiler calls it, or to nothing + if it is not supported. */ +#ifndef __cplusplus +/* #undef inline */ +#endif + +/* Define to `unsigned' if doesn't define. */ +/* #undef size_t */ diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/crt_secure_no_deprecate.props b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/crt_secure_no_deprecate.props new file mode 100644 index 0000000000..777d6d0ad0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/crt_secure_no_deprecate.props @@ -0,0 +1,11 @@ + + + + <_ProjectFileVersion>10.0.21006.1 + + + + _CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/crt_secure_no_deprecate.vsprops b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/crt_secure_no_deprecate.vsprops new file mode 100644 index 0000000000..56ab506f91 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/crt_secure_no_deprecate.vsprops @@ -0,0 +1,11 @@ + + + + diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/libyasm/libyasm.vcxproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/libyasm/libyasm.vcxproj new file mode 100644 index 0000000000..f258e02726 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/libyasm/libyasm.vcxproj @@ -0,0 +1,277 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {29FE7874-1256-4AD6-B889-68E399DC9608} + libyasm + + + + StaticLibrary + false + MultiByte + v120 + + + StaticLibrary + false + MultiByte + v120 + + + StaticLibrary + false + MultiByte + v120 + + + StaticLibrary + false + MultiByte + v120 + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + + Full + Default + ..;../../..;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_LIB;HAVE_CONFIG_H;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libyasm.lib + true + + + + + X64 + + + Full + Default + ..;../../..;%(AdditionalIncludeDirectories) + NDEBUG;_LIB;HAVE_CONFIG_H;WIN64;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libyasm.lib + true + + + + + Disabled + ..;../../..;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_LIB;HAVE_CONFIG_H;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libyasm.lib + true + + + + + X64 + + + Disabled + ..;../../..;%(AdditionalIncludeDirectories) + _DEBUG;_LIB;HAVE_CONFIG_H;WIN64;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)libyasm.lib + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {f0e8b707-00c5-4ff2-b8ef-7c39817132a0} + false + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/libyasm/libyasm.vcxproj.filters b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/libyasm/libyasm.vcxproj.filters new file mode 100644 index 0000000000..9bdf13a485 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/libyasm/libyasm.vcxproj.filters @@ -0,0 +1,200 @@ + + + + + {4ca3b698-9d01-4e4e-ae00-5c98da045efe} + h;hpp;hxx;hm;inl + + + {68607062-982d-4251-9a1a-30f76474983d} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/modules/modules.vcxproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/modules/modules.vcxproj new file mode 100644 index 0000000000..1385bb618f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/modules/modules.vcxproj @@ -0,0 +1,324 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6} + modules + + + + StaticLibrary + false + MultiByte + v120 + + + StaticLibrary + false + MultiByte + v120 + + + StaticLibrary + false + MultiByte + v120 + + + StaticLibrary + false + MultiByte + v120 + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + + Full + Default + ..;../../..;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_LIB;HAVE_CONFIG_H;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)modules.lib + true + + + + + + + + + X64 + + + Full + Default + ..;../../..;%(AdditionalIncludeDirectories) + NDEBUG;_LIB;HAVE_CONFIG_H;WIN64;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)modules.lib + true + + + + + Disabled + ..;../../..;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_LIB;HAVE_CONFIG_H;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)modules.lib + true + + + + + X64 + + + Disabled + ..;../../..;%(AdditionalIncludeDirectories) + _DEBUG;_LIB;HAVE_CONFIG_H;WIN64;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)modules.lib + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {225700a5-07b8-434e-ad61-555278bf6733} + false + + + {c45a8b59-8b59-4d5d-a8e8-fb090f8dd619} + false + + + {29fe7874-1256-4ad6-b889-68e399dc9608} + false + + + {3c58be13-50a3-4583-984d-d8902b3d7713} + false + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/modules/modules.vcxproj.filters b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/modules/modules.vcxproj.filters new file mode 100644 index 0000000000..e6ff3addc5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/modules/modules.vcxproj.filters @@ -0,0 +1,256 @@ + + + + + {39c89f91-d860-4396-a49f-86b8b7a51c33} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + {be0cdf28-cbed-4774-b3cc-b63e4e3fa0a9} + + + {491cc60a-889b-4f53-aae9-f4d7d6aa667a} + + + {c084015d-3c3e-4379-8746-ae5cffcec79e} + + + {3333e0b3-e95f-44f6-9000-58d4da368360} + + + {528f2955-ceba-4691-a36c-054f119e3dcc} + + + {81686d52-eb71-4d4a-a830-66c45afb808f} + + + {98fe1e43-3794-4639-bf29-14b0c569754f} + + + {6b3956d4-0bff-4e8e-af61-a7e59b476fa4} + + + {446fad62-ac17-49e9-8263-33481f04f182} + + + {33fb7fc8-61f9-428d-9c94-7a4912fbb678} + + + {48fc77ec-7d78-4c0a-bfc2-9aa76faf5d7f} + + + + + Source Files\parsers + + + Source Files\arch + + + Source Files\arch + + + Source Files\arch + + + Source Files\arch + + + Source Files\arch + + + Source Files\arch + + + Source Files\arch + + + Source Files\dbgfmts + + + Source Files\dbgfmts + + + Source Files\dbgfmts + + + Source Files\dbgfmts + + + Source Files\dbgfmts + + + Source Files\dbgfmts + + + Source Files\dbgfmts + + + Source Files\dbgfmts + + + Source Files\dbgfmts + + + Source Files\listfmts\nasm + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\parsers + + + Source Files\parsers + + + Source Files\parsers + + + Source Files\parsers + + + Source Files\parsers + + + Source Files\preprocs\cpp + + + Source Files\preprocs\gas + + + Source Files\preprocs\gas + + + Source Files\preprocs\nasm + + + Source Files\preprocs\nasm + + + Source Files\preprocs\nasm + + + Source Files\preprocs\nasm + + + Source Files\preprocs\raw + + + Source Files\parsers + + + Source Files\arch + + + Source Files\arch + + + Source Files\objfmts + + + + + Source Files\arch + + + Source Files\arch + + + Source Files\dbgfmts + + + Source Files\dbgfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\objfmts + + + Source Files\parsers + + + Source Files\parsers + + + Source Files\preprocs\gas + + + Source Files\preprocs\nasm + + + Source Files\preprocs\nasm + + + Source Files\preprocs\nasm + + + Source Files\preprocs\nasm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/out_copy_rename.bat b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/out_copy_rename.bat new file mode 100644 index 0000000000..3179b59aad --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/out_copy_rename.bat @@ -0,0 +1,42 @@ +@echo off +if not exist %1 goto nofile +if exist %2 goto copy + +echo creating directory %2 +md %2 > nul + +:copy +set str=%2 +for /f "useback tokens=*" %%a in ('%str%') do set str=%%~a +set str=%str:~-1% +if %str% == "\" goto hasbackslash + +if not exist %2\%3 goto cpy +fc %1 %2\%3 > nul && if not %errorlevel 1 goto exit +echo overwriting %2\%3 with %1 +copy %1 %2\%3 > nul +goto exit + +:cpy +echo copying %1 to %2\%3 +copy %1 %2\%3 > nul +goto exit + +:hasbackslash +if not exist %2%3 goto cpy2 +fc %1 %2%3 > nul && if not %errorlevel 1 goto exit +echo overwriting %2%3 with %1 +copy %1 %2%3 > nul +goto exit + +:cpy2 +echo copying %1 to %2%3 +copy %1 %2%3 > nul +goto exit + +:nofile +echo %1 not found + +:exit + + diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/readme.vc12.txt b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/readme.vc12.txt new file mode 100644 index 0000000000..10c84f1a47 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/readme.vc12.txt @@ -0,0 +1,106 @@ +Building YASM with Microsoft Visual Studio 2010 (C/C++ v10) +----------------------------------------------------------- + +This note describes how to build YASM using Microsoft Visual +Studio 2013 (C/C++ v12). + +1. YASM Download +---------------- + +First YASM needs to be downloaded and the files placed within +a suitable directory, which will be called here but can +be named and located as you wish. + +2. Building YASM with Microsoft 2013 (VC12) +------------------------------------------- + +Now locate and double click on the yasm.sln solution file in +the 'Mkfiles/vc12' subdirectory to open the build project in +the Visual Studio 2010 IDE and then select: + + win32 or x64 build + release or debug build + +as appropriate to build the YASM binaries that you need. + +4. Using YASM with Visual Sudio 2013 and VC++ version 12 +-------------------------------------------------------- + +The YASM version vsyasm.exe is designed specifically for use +with the 2010 and later versions of Visual Studio. To tell +Visual Studio where to find vsyasm.exe, the environment +variable YASMPATH can be set to the absolute path of the +directory in which vsyasm.exe is located (this path should +include the final backslash). + +Alternatively you can find the directory (or directories) +where the VC++ compiler binaries are located and put copies +of the vsyasm.exe binary in these directories. The typical +location on 64-bit Windows is: + +C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin + +On 32-bit Windows it is normally at: + +C:\Program Files\Microsoft Visual Studio 12.0\VC\bin + +Depending on your system you can use either the win32 or the +x64 version of vsyasm.exe, which must be named vsyasm.exe. + +To use the new custom tools facility in Visual Studio 2010, you +need to place a copy of three files - yasm.props, yasm.targets +and yasm.xml - into a location where they can be found by the +Visual Studio build customisation processes. There are several +ways to do this: + + a. put these files in the MSBUILD customisation directory, + which is typically at: + + C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations + + b. put them in a convenient location and set this path in the + 'Build Customisations Search Path' in the Visual Studio + 'Projects and Solutions|VC++ Project Settings' item in + the 'Tools|Options' menu; + + c. put them in a convenient location and set this path in the + 'Build Customisation dialogue (discussed later). + +To use YASM in a project, right click on the project in the Solution +Explorer and select 'Build Customisations..'. This will give you a +dialog box that allows you to select YASM as an assembler (note that +your assembler files need to have the extension '.asm'). If you have +used option c. above, you will need to let the dialogue find them +using the 'Find Existing' button below the dialogue. + +To assemble a file with YASM, select the Property Page for the file +and the select 'Yasm Assembler' in the Tool dialog entry. Then click +'Apply' and an additional property page entry will appear and enable +YASM settings to be established. + +5. A Linker Issue +----------------- + +There appears to be a linker bug in the VC++ linker that prevents +symbols with absolute addresses being linked in DLL builds. This +means, for example, that LEA instructions of the general form: + + lea, rax,[rax+symbol] + +cannot be used for DLL builds. The following general form +has to be used instead: + + lea rcx,[symbol wrt rip] + lea rax,[rax+rcx] + +This limitation may also cause problems with other instruction +that use absolute addresses. + +6. Acknowledgements +------------------- + +I am most grateful for the fantastic support that Peter Johnson, +YASM's creator, has given me in tracking down issues in using +YASM for the production of Windows x64 code. + + Brian Gladman, 6th April 2013 diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/vsyasm.props b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/vsyasm.props new file mode 100644 index 0000000000..80b93c7e28 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/vsyasm.props @@ -0,0 +1,27 @@ + + + + Midl + CustomBuild + + + _SelectedFiles;$(YASMDependsOn) + + + $(VCInstallDir)bin\ + + + + False + $(IntDir) + 0 + 0 + "$(YasmPath)"vsyasm.exe -Xvc -f $(Platform) [AllOptions] [AdditionalOptions] [Inputs] + %(ObjectFile) + Assembling %(Filename)%(Extension) + false + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/vsyasm.targets b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/vsyasm.targets new file mode 100644 index 0000000000..3c084119b1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/vsyasm.targets @@ -0,0 +1,108 @@ + + + + + + _YASM + + + + $(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml + + + + + + + + @(YASM, '|') + + + + + + + + + $(ComputeLinkInputsTargets); + ComputeYASMOutput; + + + $(ComputeLibInputsTargets); + ComputeYASMOutput; + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/vsyasm.vcxproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/vsyasm.vcxproj new file mode 100644 index 0000000000..b34d8e664b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/vsyasm.vcxproj @@ -0,0 +1,279 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {7FDD85BB-CC86-442B-A425-989B5B296ED5} + vsyasm + + + + Application + false + MultiByte + v120 + + + Application + false + MultiByte + v120 + + + Application + false + MultiByte + v120 + + + Application + false + MultiByte + v120 + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + $(Platform)\$(Configuration)/yasm.tlb + + + + + Disabled + .;../..;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_LIB;HAVE_CONFIG_H;VC;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)vsyasm.exe + true + true + $(OutDir)$(ProjectName).pdb + Console + false + + + MachineX86 + + + + + X64 + $(Platform)\$(Configuration)/yasm.tlb + + + + + Disabled + .;../..;%(AdditionalIncludeDirectories) + _DEBUG;_LIB;HAVE_CONFIG_H;VC;WIN64;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)vsyasm.exe + true + true + $(OutDir)$(TargetName).pdb + Console + false + + + MachineX64 + + + + + $(Platform)\$(Configuration)/yasm.tlb + + + + + Full + Default + true + .;../..;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_LIB;HAVE_CONFIG_H;VC;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)vsyasm.exe + true + true + $(OutDir)$(ProjectName).pdb + Console + false + + + MachineX86 + + + + + X64 + $(Platform)\$(Configuration)/yasm.tlb + + + + + Full + OnlyExplicitInline + .;../..;%(AdditionalIncludeDirectories) + NDEBUG;_LIB;HAVE_CONFIG_H;VC;WIN64;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)vsyasm.exe + true + $(OutDir)$(TargetName).pdb + Console + false + + + MachineX64 + true + + + + + + + + + {29fe7874-1256-4ad6-b889-68e399dc9608} + false + + + {d715a3d4-efaa-442e-ad8b-5b4ff64e1dd6} + false + + + + + + + + + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/vsyasm.xml b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/vsyasm.xml new file mode 100644 index 0000000000..cd08cbba3f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/vsyasm.xml @@ -0,0 +1,283 @@ + + + + + + + + + + + + + General + + + + + + Symbols + + + + + + Files + + + + + + Command Line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Execute Before + + + Specifies the targets for the build customization to run before. + + + + + + + + + + + + Execute After + + + Specifies the targets for the build customization to run after. + + + + + + + + + + + + + + + + + + Additional Options + + + Additional Options + + + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/yasm.sln b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/yasm.sln new file mode 100644 index 0000000000..dec8fd4737 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/yasm.sln @@ -0,0 +1,142 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{825AC694-358C-4D8D-92DE-33A2691978CE}" + ProjectSection(SolutionItems) = preProject + crt_secure_no_deprecate.vsprops = crt_secure_no_deprecate.vsprops + readme.vc10.txt = readme.vc10.txt + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libyasm", "libyasm\libyasm.vcxproj", "{29FE7874-1256-4AD6-B889-68E399DC9608}" + ProjectSection(ProjectDependencies) = postProject + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2} = {B545983B-8EE0-4A7B-A67A-E749EEAE62A2} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "modules", "modules\modules.vcxproj", "{D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "yasm", "yasm.vcxproj", "{34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genmacro", "genmacro\genmacro.vcxproj", "{225700A5-07B8-434E-AD61-555278BF6733}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genversion", "genversion\genversion.vcxproj", "{B545983B-8EE0-4A7B-A67A-E749EEAE62A2}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "re2c", "re2c\re2c.vcxproj", "{3C58BE13-50A3-4583-984D-D8902B3D7713}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genperf", "genperf\genperf.vcxproj", "{C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genmodule", "genmodule\genmodule.vcxproj", "{F0E8B707-00C5-4FF2-B8EF-7C39817132A0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genstring", "genstring\genstring.vcxproj", "{021CEB0A-F721-4F59-B349-9CEEAF244459}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ytasm", "ytasm.vcxproj", "{2162937B-0DBD-4450-B45F-DF578D8E7508}" + ProjectSection(ProjectDependencies) = postProject + {021CEB0A-F721-4F59-B349-9CEEAF244459} = {021CEB0A-F721-4F59-B349-9CEEAF244459} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vsyasm", "vsyasm.vcxproj", "{7FDD85BB-CC86-442B-A425-989B5B296ED5}" + ProjectSection(ProjectDependencies) = postProject + {021CEB0A-F721-4F59-B349-9CEEAF244459} = {021CEB0A-F721-4F59-B349-9CEEAF244459} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {29FE7874-1256-4AD6-B889-68E399DC9608}.Debug|Win32.ActiveCfg = Debug|Win32 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Debug|Win32.Build.0 = Debug|Win32 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Debug|x64.ActiveCfg = Debug|x64 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Debug|x64.Build.0 = Debug|x64 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Release|Win32.ActiveCfg = Release|Win32 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Release|Win32.Build.0 = Release|Win32 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Release|x64.ActiveCfg = Release|x64 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Release|x64.Build.0 = Release|x64 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Debug|Win32.ActiveCfg = Debug|Win32 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Debug|Win32.Build.0 = Debug|Win32 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Debug|x64.ActiveCfg = Debug|x64 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Debug|x64.Build.0 = Debug|x64 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Release|Win32.ActiveCfg = Release|Win32 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Release|Win32.Build.0 = Release|Win32 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Release|x64.ActiveCfg = Release|x64 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Release|x64.Build.0 = Release|x64 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Debug|Win32.ActiveCfg = Debug|Win32 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Debug|Win32.Build.0 = Debug|Win32 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Debug|x64.ActiveCfg = Debug|x64 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Debug|x64.Build.0 = Debug|x64 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Release|Win32.ActiveCfg = Release|Win32 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Release|Win32.Build.0 = Release|Win32 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Release|x64.ActiveCfg = Release|x64 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Release|x64.Build.0 = Release|x64 + {225700A5-07B8-434E-AD61-555278BF6733}.Debug|Win32.ActiveCfg = Debug|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Debug|Win32.Build.0 = Debug|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Debug|x64.ActiveCfg = Debug|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Debug|x64.Build.0 = Debug|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Release|Win32.ActiveCfg = Release|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Release|Win32.Build.0 = Release|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Release|x64.ActiveCfg = Release|x64 + {225700A5-07B8-434E-AD61-555278BF6733}.Release|x64.Build.0 = Release|x64 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Debug|Win32.ActiveCfg = Debug|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Debug|Win32.Build.0 = Debug|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Debug|x64.ActiveCfg = Debug|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Debug|x64.Build.0 = Debug|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Release|Win32.ActiveCfg = Release|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Release|Win32.Build.0 = Release|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Release|x64.ActiveCfg = Release|x64 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Release|x64.Build.0 = Release|x64 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Debug|Win32.ActiveCfg = Debug|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Debug|Win32.Build.0 = Debug|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Debug|x64.ActiveCfg = Debug|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Debug|x64.Build.0 = Debug|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Release|Win32.ActiveCfg = Release|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Release|Win32.Build.0 = Release|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Release|x64.ActiveCfg = Release|x64 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Release|x64.Build.0 = Release|x64 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Debug|Win32.ActiveCfg = Debug|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Debug|Win32.Build.0 = Debug|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Debug|x64.ActiveCfg = Debug|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Debug|x64.Build.0 = Debug|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Release|Win32.ActiveCfg = Release|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Release|Win32.Build.0 = Release|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Release|x64.ActiveCfg = Release|x64 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Release|x64.Build.0 = Release|x64 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Debug|Win32.ActiveCfg = Debug|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Debug|Win32.Build.0 = Debug|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Debug|x64.ActiveCfg = Debug|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Debug|x64.Build.0 = Debug|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Release|Win32.ActiveCfg = Release|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Release|Win32.Build.0 = Release|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Release|x64.ActiveCfg = Release|x64 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Release|x64.Build.0 = Release|x64 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Debug|Win32.ActiveCfg = Debug|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Debug|Win32.Build.0 = Debug|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Debug|x64.ActiveCfg = Debug|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Debug|x64.Build.0 = Debug|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Release|Win32.ActiveCfg = Release|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Release|Win32.Build.0 = Release|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Release|x64.ActiveCfg = Release|x64 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Release|x64.Build.0 = Release|x64 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Debug|Win32.ActiveCfg = Debug|Win32 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Debug|Win32.Build.0 = Debug|Win32 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Debug|x64.ActiveCfg = Debug|x64 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Debug|x64.Build.0 = Debug|x64 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Release|Win32.ActiveCfg = Release|Win32 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Release|Win32.Build.0 = Release|Win32 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Release|x64.ActiveCfg = Release|x64 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Release|x64.Build.0 = Release|x64 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Debug|Win32.ActiveCfg = Debug|Win32 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Debug|Win32.Build.0 = Debug|Win32 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Debug|x64.ActiveCfg = Debug|x64 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Debug|x64.Build.0 = Debug|x64 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Release|Win32.ActiveCfg = Release|Win32 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Release|Win32.Build.0 = Release|Win32 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Release|x64.ActiveCfg = Release|x64 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/yasm.vcxproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/yasm.vcxproj new file mode 100644 index 0000000000..1867249194 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/yasm.vcxproj @@ -0,0 +1,283 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5} + yasm + + + + Application + false + MultiByte + v120 + + + Application + false + MultiByte + v120 + + + Application + false + MultiByte + v120 + + + Application + false + MultiByte + v120 + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + $(Platform)\$(Configuration)/yasm.tlb + + + + + Disabled + .;../..;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_LIB;HAVE_CONFIG_H;VC;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)yasm.exe + true + true + $(OutDir)$(ProjectName).pdb + Console + false + + + MachineX86 + + + + + X64 + $(Platform)\$(Configuration)/yasm.tlb + + + + + Disabled + .;../..;%(AdditionalIncludeDirectories) + _DEBUG;_LIB;HAVE_CONFIG_H;VC;WIN64;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)yasm.exe + true + true + $(OutDir)$(TargetName).pdb + Console + false + + + MachineX64 + + + + + $(Platform)\$(Configuration)/yasm.tlb + + + + + Full + Default + true + .;../..;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_LIB;HAVE_CONFIG_H;VC;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)yasm.exe + true + true + $(OutDir)$(ProjectName).pdb + Console + false + + + MachineX86 + + + + + X64 + $(Platform)\$(Configuration)/yasm.tlb + + + + + Full + OnlyExplicitInline + .;../..;%(AdditionalIncludeDirectories) + NDEBUG;_LIB;HAVE_CONFIG_H;VC;WIN64;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)yasm.exe + true + $(OutDir)$(TargetName).pdb + Console + false + + + MachineX64 + true + + + + + + + + + + + + + + + + + {021ceb0a-f721-4f59-b349-9ceeaf244459} + false + + + {29fe7874-1256-4ad6-b889-68e399dc9608} + false + + + {d715a3d4-efaa-442e-ad8b-5b4ff64e1dd6} + false + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/yasm.vcxproj.filters b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/yasm.vcxproj.filters new file mode 100644 index 0000000000..04941c2276 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/yasm.vcxproj.filters @@ -0,0 +1,41 @@ + + + + + {51f0d88e-1373-4bf8-a72e-c79706d37f8b} + h;hpp;hxx;hm;inl + + + {db67b411-6f59-462c-9c20-75024c6b3912} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/ytasm.vcxproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/ytasm.vcxproj new file mode 100644 index 0000000000..24d1869e7d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc12/ytasm.vcxproj @@ -0,0 +1,278 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {2162937B-0DBD-4450-B45F-DF578D8E7508} + ytasm + + + + Application + false + MultiByte + v120 + + + Application + false + MultiByte + v120 + + + Application + false + MultiByte + v120 + + + Application + false + MultiByte + v120 + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.21006.1 + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false + + + + $(Platform)\$(Configuration)/yasm.tlb + + + + + Disabled + .;../..;%(AdditionalIncludeDirectories) + _DEBUG;WIN32;_LIB;HAVE_CONFIG_H;VC;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)ytasm.exe + true + true + $(OutDir)$(ProjectName).pdb + Console + false + + + MachineX86 + + + + + X64 + $(Platform)\$(Configuration)/yasm.tlb + + + + + Disabled + .;../..;%(AdditionalIncludeDirectories) + _DEBUG;_LIB;HAVE_CONFIG_H;VC;WIN64;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + ProgramDatabase + Default + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)ytasm.exe + true + true + $(OutDir)$(TargetName).pdb + Console + false + + + MachineX64 + + + + + $(Platform)\$(Configuration)/yasm.tlb + + + + + Full + Default + true + .;../..;%(AdditionalIncludeDirectories) + NDEBUG;WIN32;_LIB;HAVE_CONFIG_H;VC;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)ytasm.exe + true + true + $(OutDir)$(ProjectName).pdb + Console + false + + + MachineX86 + + + + + X64 + $(Platform)\$(Configuration)/yasm.tlb + + + + + Full + OnlyExplicitInline + .;../..;%(AdditionalIncludeDirectories) + NDEBUG;_LIB;HAVE_CONFIG_H;VC;WIN64;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + Default + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)ytasm.exe + true + $(OutDir)$(TargetName).pdb + Console + false + + + MachineX64 + true + + + + + + + + + + + + + + + + {29fe7874-1256-4ad6-b889-68e399dc9608} + false + + + {d715a3d4-efaa-442e-ad8b-5b4ff64e1dd6} + false + + + + + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/YASM-VERSION.h b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/YASM-VERSION.h new file mode 100644 index 0000000000..8624b44ff0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/YASM-VERSION.h @@ -0,0 +1,2 @@ +#define PACKAGE_STRING "yasm 1.3.0" +#define PACKAGE_VERSION "1.3.0" diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/config.h b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/config.h new file mode 100644 index 0000000000..efb7cbe4d6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/config.h @@ -0,0 +1,170 @@ +#include "YASM-VERSION.h" +#define yasm__splitpath(path, tail) yasm__splitpath_win(path, tail) +#define yasm__abspath(path) yasm__abspath_win(path) +#define yasm__combpath(from, to) yasm__combpath_win(from, to) + +/* Command name to run C preprocessor */ +#define CPP_PROG "cpp" + +/* */ +/* #undef ENABLE_NLS */ + +/* Define if you have the `abort' function. */ +#define HAVE_ABORT 1 + +/* */ +/* #undef HAVE_CATGETS */ + +/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the + CoreFoundation framework. */ +/* #undef HAVE_CFLOCALECOPYCURRENT */ + +/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */ + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +/* #undef HAVE_DCGETTEXT */ + +/* Define to 1 if you have the header file. */ +#define HAVE_DIRECT_H 1 + +/* Define to 1 if you have the `getcwd' function. */ +#define HAVE_GETCWD 1 + +/* */ +/* #undef HAVE_GETTEXT */ + +/* Define if you have the GNU C Library */ +/* #undef HAVE_GNU_C_LIBRARY */ + +/* Define if you have the iconv() function. */ +/* #undef HAVE_ICONV */ + +/* Define if you have the header file. */ +/* #undef HAVE_INTTYPES_H */ + +/* */ +/* #undef HAVE_LC_MESSAGES */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_LIBGEN_H */ + +/* Define if you have the header file. */ +/* #undef HAVE_MEMORY_H */ + +/* Define if you have the `mergesort' function. */ +/* #undef HAVE_MERGESORT */ + +/* Define to 1 if you have the `popen' function. */ +/* #undef HAVE_POPEN */ + +/* Define if you have the header file. */ +/* #undef HAVE_STDINT_H */ + +/* Define if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* */ +/* #undef HAVE_STPCPY */ + +/* Define if you have the `strcasecmp' function. */ +/* #undef HAVE_STRCASECMP */ + +/* Define if you have the `strcmpi' function. */ +/* #undef HAVE_STRCMPI */ + +/* Define if you have the `stricmp' function. */ +/* #undefine HAVE_STRICMP */ + +/* Define if you have the header file. */ +/* #undef HAVE_STRINGS_H */ + +/* Define if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define if you have the `strncasecmp' function. */ +/* #undef HAVE_STRNCASECMP */ + +/* Define if you have the `strsep' function. */ +/* #undef HAVE_STRSEP */ + +/* Define if you have the header file. */ +/* #undef HAVE_SYS_STAT_H */ + +/* Define if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define if you have the `toascii' function. */ +#define HAVE_TOASCII 1 +#define toascii __toascii + +/* Define if you have the header file. */ +/* #undef HAVE_UNISTD_H */ + +/* Define to 1 if you have the `vsnprintf' function. */ +/* #undef HAVE_VSNPRINTF */ + +/* Define to 1 if you have the `_stricmp' function. */ +#define HAVE__STRICMP 1 + +/* Name of package */ +#define PACKAGE "yasm" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "bug-yasm@tortall.net" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "yasm" + +/* Define to the full name and version of this package. */ +/*#define PACKAGE_STRING "yasm HEAD"*/ + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "yasm" + +/* Define to the version of this package. */ +/*#define PACKAGE_VERSION "HEAD"*/ + +/* Define if the C compiler supports function prototypes. */ +#define PROTOTYPES 1 + +/* The size of a `char', as computed by sizeof. */ +/* #undef SIZEOF_CHAR */ + +/* The size of a `int', as computed by sizeof. */ +/* #undef SIZEOF_INT */ + +/* The size of a `long', as computed by sizeof. */ +/* #undef SIZEOF_LONG */ + +/* The size of a `short', as computed by sizeof. */ +/* #undef SIZEOF_SHORT */ + +/* The size of a `void*', as computed by sizeof. */ +/* #undef SIZEOF_VOIDP */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Version number of package */ +#define VERSION "HEAD" + +/* Define if using the dmalloc debugging malloc package */ +/* #undef WITH_DMALLOC */ + +/* Define like PROTOTYPES; this can be used by system headers. */ +#define __PROTOTYPES 1 + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ + +/* Define as `__inline' if that's what the C compiler calls it, or to nothing + if it is not supported. */ +#ifndef __cplusplus +/* #undef inline */ +#endif + +/* Define to `unsigned' if doesn't define. */ +/* #undef size_t */ diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/crt_secure_no_deprecate.vsprops b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/crt_secure_no_deprecate.vsprops new file mode 100644 index 0000000000..d61ba30aff --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/crt_secure_no_deprecate.vsprops @@ -0,0 +1,11 @@ + + + + diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genmacro/genmacro.vcproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genmacro/genmacro.vcproj new file mode 100644 index 0000000000..9d34e2ef83 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genmacro/genmacro.vcproj @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genmacro/run.bat b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genmacro/run.bat new file mode 100644 index 0000000000..d2fbb98c30 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genmacro/run.bat @@ -0,0 +1,5 @@ +cd ..\..\.. +%1 nasm-version.c nasm_version_mac version.mac +%1 nasm-macros.c nasm_standard_mac modules\parsers\nasm\nasm-std.mac +%1 win64-nasm.c win64_nasm_stdmac modules\objfmts\coff\win64-nasm.mac +%1 win64-gas.c win64_gas_stdmac modules\objfmts\coff\win64-gas.mac diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genmodule/genmodule.vcproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genmodule/genmodule.vcproj new file mode 100644 index 0000000000..affc9735b4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genmodule/genmodule.vcproj @@ -0,0 +1,202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genmodule/run.bat b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genmodule/run.bat new file mode 100644 index 0000000000..e34a41694e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genmodule/run.bat @@ -0,0 +1,3 @@ +@echo off +cd ..\..\.. +%1 libyasm\module.in Makefile.am diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genperf/genperf.vcproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genperf/genperf.vcproj new file mode 100644 index 0000000000..ab6e9e4e1a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genperf/genperf.vcproj @@ -0,0 +1,234 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genperf/run.bat b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genperf/run.bat new file mode 100644 index 0000000000..9c22b57e75 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genperf/run.bat @@ -0,0 +1,22 @@ +cd ..\..\.. +@echo off +for /f "usebackq tokens=1*" %%f in (`reg query HKCR\Python.File\shell\open\command`) do (set _my_=%%f %%g) +goto next%errorlevel% + +:next1 +echo Building without Python ... +goto therest + +:next0 +echo Building with Python ... +set _res_=%_my_:*REG_SZ=% +set _end_=%_res_:*exe"=% +call set _python_=%%_res_:%_end_%=%% +call %_python_% modules\arch\x86\gen_x86_insn.py + +:therest +@echo on +%1 x86insn_nasm.gperf x86insn_nasm.c +%1 x86insn_gas.gperf x86insn_gas.c +%1 modules\arch\x86\x86cpu.gperf x86cpu.c +%1 modules\arch\x86\x86regtmod.gperf x86regtmod.c diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genstring/genstring.vcproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genstring/genstring.vcproj new file mode 100644 index 0000000000..368346e837 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genstring/genstring.vcproj @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genstring/run.bat b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genstring/run.bat new file mode 100644 index 0000000000..5864b1dc18 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genstring/run.bat @@ -0,0 +1,2 @@ +cd ..\..\.. +%1 license_msg license.c COPYING diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genversion/genversion.vcproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genversion/genversion.vcproj new file mode 100644 index 0000000000..f5a01f9737 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genversion/genversion.vcproj @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genversion/run.bat b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genversion/run.bat new file mode 100644 index 0000000000..30edf8f1bd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/genversion/run.bat @@ -0,0 +1,2 @@ +cd ..\..\.. +%1 version.mac diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/libyasm-stdint.h b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/libyasm-stdint.h new file mode 100644 index 0000000000..fed61b337b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/libyasm-stdint.h @@ -0,0 +1,8 @@ +#ifndef _UINTPTR_T_DEFINED +#ifdef _WIN64 +#include +#else +typedef unsigned long uintptr_t; +#endif +#define _UINTPTR_T_DEFINED +#endif diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/libyasm/libyasm.vcproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/libyasm/libyasm.vcproj new file mode 100644 index 0000000000..95e3deff81 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/libyasm/libyasm.vcproj @@ -0,0 +1,572 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/modules/modules.vcproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/modules/modules.vcproj new file mode 100644 index 0000000000..0aa18f0675 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/modules/modules.vcproj @@ -0,0 +1,616 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/re2c/re2c.vcproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/re2c/re2c.vcproj new file mode 100644 index 0000000000..45bc3e3671 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/re2c/re2c.vcproj @@ -0,0 +1,278 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/re2c/run.bat b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/re2c/run.bat new file mode 100644 index 0000000000..cde2a7b6c8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/re2c/run.bat @@ -0,0 +1,4 @@ +cd ..\..\..\ +%1 -s -o lc3bid.c modules\arch\lc3b\lc3bid.re +%1 -b -o nasm-token.c modules\parsers\nasm\nasm-token.re +%1 -b -o gas-token.c modules\parsers\gas\gas-token.re diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/readme.vc9.txt b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/readme.vc9.txt new file mode 100644 index 0000000000..14b21d69b6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/readme.vc9.txt @@ -0,0 +1,132 @@ + +Building YASM with Microsoft Visual Studio 2008 (C/C++ v9) +---------------------------------------------------------- + +This note describes how to build YASM using Microsoft Visual +Studio 2008 (C/C++ v9). It also provides a way of using +these files to build YASM with Visual Studio 2005 (C/C++ v8). + +1. The Compiler +--------------- + +If you want to build the 64-bit version of YASM you will need +to install the Visual Studio 2008 64-bit tools, which may not +be installed by default. + +2. YASM Download +---------------- + +First YASM needs to be downloaded and the files placed within +a suitable directory, which will be called here but can +be named and located as you wish. + +3. Building YASM with Microsoft VC9 +----------------------------------- + +Now locate and double click on the yasm.sln solution file in +the 'Mkfiles/vc9' subdirectory to open the build project in +the Visual Studio 2008 IDE and then select: + + win32 or x64 build + release or debug build + +as appropriate to build the YASM binaries that you need. + +4. Using YASM with Visual Sudio 2008 and VC++ version 9 +------------------------------------------------------- + +1. Firstly you need to locate the directory (or directories) +where the VC++ compiler binaries are located and put copies +of the appropriate yasm.exe binary in these directories. A +typical location is: + +C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin + +Depending on your system you can use either the win32 or the +x64 version of YASM. + +2. To use the new custom tools facility in Visual Studio 2008, +you need to place a copy of the yasm.rules file in the Visual +Studio 2008 VC project defaults directory, which is typically +located at: + +C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC + \VCProjectDefaults + +This allows you to configure YASM as an assembler within the VC++ +IDE. To use YASM in a project, right click on the project in the +Solution Explorer and select 'Custom Build Rules..'. This will +give you a dialog box that allows you to select YASM as an +assembler (note that your assembler files need to have the +extension '.asm'). + +To assemble a file with YASM, select the Property Page for the +file and the select 'Yasm Assembler' in the Tool dialog entry. +Then click 'Apply' and an additional property page entry will +appear and enable YASM settings to be established. + +As alternative to placing the yasm.rules files as described +above is to set the rules file path in the Visual Studio 2008 +settings dialogue. + +5. A Linker Issue +----------------- + +There appears to be a linker bug in the VC++ v9 linker that +prevents symbols with absolute addresses being linked in DLL +builds. This means, for example, that LEA instructions of +the general form: + + lea, rax,[rax+symbol] + +cannot be used for DLL builds. The following general form +has to be used instead: + + lea rcx,[symbol wrt rip] + lea rax,[rax+rcx] + +This limitation may also cause problems with other instruction +that use absolute addresses. + +6. Building with Visual Studio 2005 +----------------------------------- + +The Python program vc98_swap.py will convert VC9 build projects +into those needed for Visual Studio 2005 (VC8). It will also +convert files that have been converted in this way back into their +original form. It does this conversion by looking for *.vcproj +and *.sln files in the current working directory and its sub-directories and changing the following line in each *.vcproj +file: + + Version="9.00" + +to: + + Version="8.00" + +or vice versa. + +The lines + + Microsoft Visual Studio Solution File, Format Version 10.00 + # Visual Studio 2008 + +in *.sln files are changed to: + + Microsoft Visual Studio Solution File, Format Version 9.00 + # Visual Studio 2005 + +or vice versa. + +Because it acts recursively on all sub-directories of this +directory it is important not to run it at a directory level +in which not all projects are to be converted. + +7. Acknowledgements +------------------- + +I am most grateful for the fantastic support that Peter Johnson, +YASM's creator, has given me in tracking down issues in using +YASM for the production of Windows x64 code. + + Brian Gladman, 10th October 2008 diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/vc98_swap.py b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/vc98_swap.py new file mode 100644 index 0000000000..d5237a2f16 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/vc98_swap.py @@ -0,0 +1,52 @@ + +# Convert between Visual Studio 2008 and 2005 Project Files +# (with thanks to Tommi Vainikainen) + +l05 = "# Visual Studio 2005\n" +l08 = "# Visual Studio 2008\n" +l09 = "Microsoft Visual Studio Solution File, Format Version 9.00\n" +l10 = "Microsoft Visual Studio Solution File, Format Version 10.00\n" + +import os, shutil, string, fileinput, sys + +def vcproj_convert(sp) : + for l in fileinput.input(sp, inplace = 1) : + p8 = l.find("Version=\"8.00\"") + p9 = l.find("Version=\"9.00\"") + if p8 != -1 or p9 != -1 : + if p8 != -1 : + l = l[ : p8 + 9] + '9' + l[ p8 + 10 : ] + else : + l = l[ : p9 + 9] + '8' + l[ p9 + 10 : ] + sys.stdout.write(l) + +def sln_convert(sp) : + cnt = 0 + for l in fileinput.input(sp, inplace = 1) : + cnt = cnt + 1 + if cnt < 3 : + p09 = l.find(l09) + p10 = l.find(l10) + if p09 != -1 or p10 != -1 : + if p09 != -1 : + l = l10 + else : + l = l09 + p05 = l.find(l05) + p08 = l.find(l08) + if p05 != -1 or p08 != -1 : + if p05 != -1 : + l = l08 + else : + l = l05 + sys.stdout.write(l) + +if os.getcwd().endswith('Mkfiles\\vc9') : + for root, dirs, files in os.walk("./") : + for file in files : + if file.endswith(".sln") : + sln_convert(os.path.join(root, file)) + if file.endswith(".vcproj") : + vcproj_convert(os.path.join(root, file)) +else : + print "This script must be run in the 'Mkfiles\vc9' directory" diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/vsyasm.vcproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/vsyasm.vcproj new file mode 100644 index 0000000000..215d8eddfb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/vsyasm.vcproj @@ -0,0 +1,406 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/yasm.rules b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/yasm.rules new file mode 100644 index 0000000000..2514ae0a12 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/yasm.rules @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/yasm.sln b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/yasm.sln new file mode 100644 index 0000000000..e74fc823f5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/yasm.sln @@ -0,0 +1,157 @@ +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{825AC694-358C-4D8D-92DE-33A2691978CE}" + ProjectSection(SolutionItems) = preProject + crt_secure_no_deprecate.vsprops = crt_secure_no_deprecate.vsprops + readme.vc8.txt = readme.vc8.txt + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libyasm", "libyasm\libyasm.vcproj", "{29FE7874-1256-4AD6-B889-68E399DC9608}" + ProjectSection(ProjectDependencies) = postProject + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0} = {F0E8B707-00C5-4FF2-B8EF-7C39817132A0} + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2} = {B545983B-8EE0-4A7B-A67A-E749EEAE62A2} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "modules", "modules\modules.vcproj", "{D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}" + ProjectSection(ProjectDependencies) = postProject + {3C58BE13-50A3-4583-984D-D8902B3D7713} = {3C58BE13-50A3-4583-984D-D8902B3D7713} + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619} = {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619} + {29FE7874-1256-4AD6-B889-68E399DC9608} = {29FE7874-1256-4AD6-B889-68E399DC9608} + {225700A5-07B8-434E-AD61-555278BF6733} = {225700A5-07B8-434E-AD61-555278BF6733} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "yasm", "yasm.vcproj", "{34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}" + ProjectSection(ProjectDependencies) = postProject + {021CEB0A-F721-4F59-B349-9CEEAF244459} = {021CEB0A-F721-4F59-B349-9CEEAF244459} + {29FE7874-1256-4AD6-B889-68E399DC9608} = {29FE7874-1256-4AD6-B889-68E399DC9608} + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6} = {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genmacro", "genmacro\genmacro.vcproj", "{225700A5-07B8-434E-AD61-555278BF6733}" + ProjectSection(ProjectDependencies) = postProject + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2} = {B545983B-8EE0-4A7B-A67A-E749EEAE62A2} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genversion", "genversion\genversion.vcproj", "{B545983B-8EE0-4A7B-A67A-E749EEAE62A2}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "re2c", "re2c\re2c.vcproj", "{3C58BE13-50A3-4583-984D-D8902B3D7713}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genperf", "genperf\genperf.vcproj", "{C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genmodule", "genmodule\genmodule.vcproj", "{F0E8B707-00C5-4FF2-B8EF-7C39817132A0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "genstring", "genstring\genstring.vcproj", "{021CEB0A-F721-4F59-B349-9CEEAF244459}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ytasm", "ytasm.vcproj", "{2162937B-0DBD-4450-B45F-DF578D8E7508}" + ProjectSection(ProjectDependencies) = postProject + {29FE7874-1256-4AD6-B889-68E399DC9608} = {29FE7874-1256-4AD6-B889-68E399DC9608} + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6} = {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vsyasm", "vsyasm.vcproj", "{7FDD85BB-CC86-442B-A425-989B5B296ED5}" + ProjectSection(ProjectDependencies) = postProject + {29FE7874-1256-4AD6-B889-68E399DC9608} = {29FE7874-1256-4AD6-B889-68E399DC9608} + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6} = {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {29FE7874-1256-4AD6-B889-68E399DC9608}.Debug|Win32.ActiveCfg = Debug|Win32 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Debug|Win32.Build.0 = Debug|Win32 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Debug|x64.ActiveCfg = Debug|x64 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Debug|x64.Build.0 = Debug|x64 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Release|Win32.ActiveCfg = Release|Win32 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Release|Win32.Build.0 = Release|Win32 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Release|x64.ActiveCfg = Release|x64 + {29FE7874-1256-4AD6-B889-68E399DC9608}.Release|x64.Build.0 = Release|x64 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Debug|Win32.ActiveCfg = Debug|Win32 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Debug|Win32.Build.0 = Debug|Win32 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Debug|x64.ActiveCfg = Debug|x64 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Debug|x64.Build.0 = Debug|x64 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Release|Win32.ActiveCfg = Release|Win32 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Release|Win32.Build.0 = Release|Win32 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Release|x64.ActiveCfg = Release|x64 + {D715A3D4-EFAA-442E-AD8B-5B4FF64E1DD6}.Release|x64.Build.0 = Release|x64 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Debug|Win32.ActiveCfg = Debug|Win32 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Debug|Win32.Build.0 = Debug|Win32 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Debug|x64.ActiveCfg = Debug|x64 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Debug|x64.Build.0 = Debug|x64 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Release|Win32.ActiveCfg = Release|Win32 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Release|Win32.Build.0 = Release|Win32 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Release|x64.ActiveCfg = Release|x64 + {34EB1BEB-C2D6-4A52-82B7-7ACD714A30D5}.Release|x64.Build.0 = Release|x64 + {225700A5-07B8-434E-AD61-555278BF6733}.Debug|Win32.ActiveCfg = Debug|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Debug|Win32.Build.0 = Debug|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Debug|x64.ActiveCfg = Debug|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Debug|x64.Build.0 = Debug|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Release|Win32.ActiveCfg = Release|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Release|Win32.Build.0 = Release|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Release|x64.ActiveCfg = Release|Win32 + {225700A5-07B8-434E-AD61-555278BF6733}.Release|x64.Build.0 = Release|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Debug|Win32.ActiveCfg = Debug|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Debug|Win32.Build.0 = Debug|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Debug|x64.ActiveCfg = Debug|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Debug|x64.Build.0 = Debug|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Release|Win32.ActiveCfg = Release|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Release|Win32.Build.0 = Release|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Release|x64.ActiveCfg = Release|Win32 + {B545983B-8EE0-4A7B-A67A-E749EEAE62A2}.Release|x64.Build.0 = Release|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Debug|Win32.ActiveCfg = Debug|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Debug|Win32.Build.0 = Debug|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Debug|x64.ActiveCfg = Debug|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Debug|x64.Build.0 = Debug|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Release|Win32.ActiveCfg = Release|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Release|Win32.Build.0 = Release|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Release|x64.ActiveCfg = Release|Win32 + {3C58BE13-50A3-4583-984D-D8902B3D7713}.Release|x64.Build.0 = Release|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Debug|Win32.ActiveCfg = Debug|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Debug|Win32.Build.0 = Debug|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Debug|x64.ActiveCfg = Debug|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Debug|x64.Build.0 = Debug|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Release|Win32.ActiveCfg = Release|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Release|Win32.Build.0 = Release|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Release|x64.ActiveCfg = Release|Win32 + {C45A8B59-8B59-4D5D-A8E8-FB090F8DD619}.Release|x64.Build.0 = Release|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Debug|Win32.ActiveCfg = Debug|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Debug|Win32.Build.0 = Debug|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Debug|x64.ActiveCfg = Debug|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Debug|x64.Build.0 = Debug|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Release|Win32.ActiveCfg = Release|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Release|Win32.Build.0 = Release|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Release|x64.ActiveCfg = Release|Win32 + {F0E8B707-00C5-4FF2-B8EF-7C39817132A0}.Release|x64.Build.0 = Release|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Debug|Win32.ActiveCfg = Debug|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Debug|Win32.Build.0 = Debug|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Debug|x64.ActiveCfg = Debug|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Debug|x64.Build.0 = Debug|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Release|Win32.ActiveCfg = Release|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Release|Win32.Build.0 = Release|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Release|x64.ActiveCfg = Release|Win32 + {021CEB0A-F721-4F59-B349-9CEEAF244459}.Release|x64.Build.0 = Release|Win32 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Debug|Win32.ActiveCfg = Debug|Win32 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Debug|Win32.Build.0 = Debug|Win32 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Debug|x64.ActiveCfg = Debug|x64 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Debug|x64.Build.0 = Debug|x64 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Release|Win32.ActiveCfg = Release|Win32 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Release|Win32.Build.0 = Release|Win32 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Release|x64.ActiveCfg = Release|x64 + {2162937B-0DBD-4450-B45F-DF578D8E7508}.Release|x64.Build.0 = Release|x64 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Debug|Win32.ActiveCfg = Debug|Win32 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Debug|Win32.Build.0 = Debug|Win32 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Debug|x64.ActiveCfg = Debug|x64 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Debug|x64.Build.0 = Debug|x64 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Release|Win32.ActiveCfg = Release|Win32 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Release|Win32.Build.0 = Release|Win32 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Release|x64.ActiveCfg = Release|x64 + {7FDD85BB-CC86-442B-A425-989B5B296ED5}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/yasm.vcproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/yasm.vcproj new file mode 100644 index 0000000000..ad47244433 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/yasm.vcproj @@ -0,0 +1,410 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/ytasm.vcproj b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/ytasm.vcproj new file mode 100644 index 0000000000..b638a40f65 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/Mkfiles/vc9/ytasm.vcproj @@ -0,0 +1,410 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third-party/yasm/yasm-1.3.0/NEWS b/third-party/yasm/yasm-1.3.0/NEWS new file mode 100644 index 0000000000..e69de29bb2 diff --git a/third-party/yasm/yasm-1.3.0/README b/third-party/yasm/yasm-1.3.0/README new file mode 100644 index 0000000000..e69de29bb2 diff --git a/third-party/yasm/yasm-1.3.0/YASM-VERSION-GEN.sh b/third-party/yasm/yasm-1.3.0/YASM-VERSION-GEN.sh new file mode 100755 index 0000000000..33469507ad --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/YASM-VERSION-GEN.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +YVF=YASM-VERSION-FILE +DEF_VER=v1.3.0 + +LF=' +' + +# First see if there is a version file (included in release tarballs), +# then try git-describe, then default. +if test -f version +then + VN=$(cat version) || VN="$DEF_VER" +elif test -d .git -o -f .git && + VN=$(git describe --match "v[0-9]*" --abbrev=4 HEAD 2>/dev/null) && + case "$VN" in + *$LF*) (exit 1) ;; + v[0-9]*) + git update-index -q --refresh + test -z "$(git diff-index --name-only HEAD --)" || + VN="$VN-dirty" ;; + esac +then + VN=$(echo "$VN" | sed -e 's/-/./g'); +else + VN="$DEF_VER" +fi + +VN=$(expr "$VN" : v*'\(.*\)') + +if test -r $YVF +then + VC=$(cat $YVF) +else + VC=unset +fi +test "$VN" = "$VC" || { + echo >&2 "$VN" + echo "$VN" >$YVF + echo "#define PACKAGE_STRING \"yasm $VN\"" > YASM-VERSION.h + echo "#define PACKAGE_VERSION \"$VN\"" >> YASM-VERSION.h +} diff --git a/third-party/yasm/yasm-1.3.0/aclocal.m4 b/third-party/yasm/yasm-1.3.0/aclocal.m4 new file mode 100644 index 0000000000..30b76b8664 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/aclocal.m4 @@ -0,0 +1,1511 @@ +# generated automatically by aclocal 1.14.1 -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# intlmacosx.m4 serial 5 (gettext-0.18.2) +dnl Copyright (C) 2004-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Checks for special options needed on Mac OS X. +dnl Defines INTL_MACOSX_LIBS. +AC_DEFUN([gt_INTL_MACOSX], +[ + dnl Check for API introduced in Mac OS X 10.2. + AC_CACHE_CHECK([for CFPreferencesCopyAppValue], + [gt_cv_func_CFPreferencesCopyAppValue], + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[CFPreferencesCopyAppValue(NULL, NULL)]])], + [gt_cv_func_CFPreferencesCopyAppValue=yes], + [gt_cv_func_CFPreferencesCopyAppValue=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], + [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) + fi + dnl Check for API introduced in Mac OS X 10.3. + AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[CFLocaleCopyCurrent();]])], + [gt_cv_func_CFLocaleCopyCurrent=yes], + [gt_cv_func_CFLocaleCopyCurrent=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], + [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + AC_SUBST([INTL_MACOSX_LIBS]) +]) + +# Copyright (C) 2002-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.14' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.14.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.14.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +AC_DEFUN([AM_WITH_DMALLOC], +[AC_MSG_CHECKING([if malloc debugging is wanted]) +AC_ARG_WITH([dmalloc], +[AS_HELP_STRING([--with-dmalloc], + [use dmalloc, as in http://www.dmalloc.com])], +[if test "$withval" = yes; then + AC_MSG_RESULT([yes]) + AC_DEFINE([WITH_DMALLOC], [1], + [Define if using the dmalloc debugging malloc package]) + LIBS="$LIBS -ldmalloc" + LDFLAGS="$LDFLAGS -g" +else + AC_MSG_RESULT([no]) +fi], [AC_MSG_RESULT([no])]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless 'enable' is passed literally. +# For symmetry, 'disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], + [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], + am_maintainer_other[ make rules and dependencies not useful + (and sometimes confusing) to the casual installer])], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# --------------------------------------------------------------------------- +# Adds support for distributing Python modules and packages. To +# install modules, copy them to $(pythondir), using the python_PYTHON +# automake variable. To install a package with the same name as the +# automake package, install to $(pkgpythondir), or use the +# pkgpython_PYTHON automake variable. +# +# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as +# locations to install python extension modules (shared libraries). +# Another macro is required to find the appropriate flags to compile +# extension modules. +# +# If your package is configured with a different prefix to python, +# users will have to add the install directory to the PYTHONPATH +# environment variable, or create a .pth file (see the python +# documentation for details). +# +# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will +# cause an error if the version of python installed on the system +# doesn't meet the requirement. MINIMUM-VERSION should consist of +# numbers and dots only. +AC_DEFUN([AM_PATH_PYTHON], + [ + dnl Find a Python interpreter. Python versions prior to 2.0 are not + dnl supported. (2.0 was released on October 16, 2000). + m4_define_default([_AM_PYTHON_INTERPRETER_LIST], +[python python2 python3 python3.3 python3.2 python3.1 python3.0 python2.7 dnl + python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0]) + + AC_ARG_VAR([PYTHON], [the Python interpreter]) + + m4_if([$1],[],[ + dnl No version check is needed. + # Find any Python interpreter. + if test -z "$PYTHON"; then + AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) + fi + am_display_PYTHON=python + ], [ + dnl A version check is needed. + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + AC_MSG_CHECKING([whether $PYTHON version is >= $1]) + AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([Python interpreter is too old])]) + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + AC_CACHE_CHECK([for a Python interpreter with version >= $1], + [am_cv_pathless_PYTHON],[ + for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do + test "$am_cv_pathless_PYTHON" = none && break + AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) + done]) + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + ]) + + if test "$PYTHON" = :; then + dnl Run any user-specified action, or abort. + m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) + else + + dnl Query Python for its version number. Getting [:3] seems to be + dnl the best way to do this; it's what "site.py" does in the standard + dnl library. + + AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], + [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) + AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) + + dnl Use the values of $prefix and $exec_prefix for the corresponding + dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made + dnl distinct variables so they can be overridden if need be. However, + dnl general consensus is that you shouldn't need this ability. + + AC_SUBST([PYTHON_PREFIX], ['${prefix}']) + AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) + + dnl At times (like when building shared libraries) you may want + dnl to know which OS platform Python thinks this is. + + AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], + [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) + AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) + + # Just factor out some code duplication. + am_python_setup_sysconfig="\ +import sys +# Prefer sysconfig over distutils.sysconfig, for better compatibility +# with python 3.x. See automake bug#10227. +try: + import sysconfig +except ImportError: + can_use_sysconfig = 0 +else: + can_use_sysconfig = 1 +# Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs: +# +try: + from platform import python_implementation + if python_implementation() == 'CPython' and sys.version[[:3]] == '2.7': + can_use_sysconfig = 0 +except ImportError: + pass" + + dnl Set up 4 directories: + + dnl pythondir -- where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behavior + dnl is more consistent with lispdir.m4 for example. + dnl Query distutils for this directory. + AC_CACHE_CHECK([for $am_display_PYTHON script directory], + [am_cv_python_pythondir], + [if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c " +$am_python_setup_sysconfig +if can_use_sysconfig: + sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'}) +else: + from distutils import sysconfig + sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix') +sys.stdout.write(sitedir)"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pythondir], [$am_cv_python_pythondir]) + + dnl pkgpythondir -- $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + + AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) + + dnl pyexecdir -- directory for installing python extension modules + dnl (shared libraries) + dnl Query distutils for this directory. + AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], + [am_cv_python_pyexecdir], + [if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c " +$am_python_setup_sysconfig +if can_use_sysconfig: + sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'}) +else: + from distutils import sysconfig + sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix') +sys.stdout.write(sitedir)"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) + + dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) + + AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) + + dnl Run any user-specified action. + $2 + fi + +]) + + +# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# --------------------------------------------------------------------------- +# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. +# Run ACTION-IF-FALSE otherwise. +# This test uses sys.hexversion instead of the string equivalent (first +# word of sys.version), in order to cope with versions such as 2.2c1. +# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). +AC_DEFUN([AM_PYTHON_CHECK_VERSION], + [prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] +sys.exit(sys.hexversion < minverhex)" + AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/ax_create_stdint_h.m4]) +m4_include([m4/cython.m4]) +m4_include([m4/gettext.m4]) +m4_include([m4/iconv.m4]) +m4_include([m4/lib-ld.m4]) +m4_include([m4/lib-link.m4]) +m4_include([m4/lib-prefix.m4]) +m4_include([m4/nls.m4]) +m4_include([m4/po.m4]) +m4_include([m4/progtest.m4]) +m4_include([m4/pythonhead.m4]) diff --git a/third-party/yasm/yasm-1.3.0/cmake/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/cmake/CMakeLists.txt new file mode 100644 index 0000000000..5e4ef796e1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/cmake/CMakeLists.txt @@ -0,0 +1 @@ +ADD_SUBDIRECTORY(modules) diff --git a/third-party/yasm/yasm-1.3.0/cmake/modules/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/cmake/modules/CMakeLists.txt new file mode 100644 index 0000000000..e4351fc9e2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/cmake/modules/CMakeLists.txt @@ -0,0 +1,2 @@ +FILE(GLOB cmakeFiles "${CMAKE_CURRENT_SOURCE_DIR}/*.cmake") + diff --git a/third-party/yasm/yasm-1.3.0/cmake/modules/DummyCFile.c b/third-party/yasm/yasm-1.3.0/cmake/modules/DummyCFile.c new file mode 100644 index 0000000000..f8b643afbf --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/cmake/modules/DummyCFile.c @@ -0,0 +1,4 @@ +int main() +{ + return 0; +} diff --git a/third-party/yasm/yasm-1.3.0/cmake/modules/VersionGen.cmake b/third-party/yasm/yasm-1.3.0/cmake/modules/VersionGen.cmake new file mode 100644 index 0000000000..f10ce33c43 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/cmake/modules/VersionGen.cmake @@ -0,0 +1,78 @@ +# Redistribution and use is allowed according to the terms of the BSD license. +# +# Copyright (c) 2011 Peter Johnson + +macro (VERSION_GEN _version _version_file _default_version) + set (_vn "v${_default_version}") + + # First see if there is a version file (included in release tarballs), + # then try git-describe, then default. + if (EXISTS "${CMAKE_SOURCE_DIR}/version") + file (STRINGS "${CMAKE_SOURCE_DIR}/version" _version_strs LIMIT_COUNT 1) + list (GET _version_strs 0 _version_strs0) + if (NOT (${_version_strs0} STREQUAL "")) + set (_vn "v${_version_strs0}") + endif (NOT (${_version_strs0} STREQUAL "")) + elseif (EXISTS "${CMAKE_SOURCE_DIR}/.git") + execute_process (COMMAND git describe --match "v[0-9]*" --abbrev=4 HEAD + RESULT_VARIABLE _git_result + OUTPUT_VARIABLE _git_vn + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + + if (_git_result EQUAL 0) + # Special handling until we get a more recent tag on the master + # branch + if (_git_vn MATCHES "^v0[.]1[.]0") + execute_process (COMMAND git merge-base v${_default_version} HEAD + OUTPUT_VARIABLE _merge_base + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + #message (STATUS "Merge base: ${_merge_base}") + + execute_process (COMMAND git rev-list ${_merge_base}..HEAD + OUTPUT_VARIABLE _rev_list + ERROR_QUIET) + string (REGEX MATCHALL "[^\n]*\n" _rev_list_lines "${_rev_list}") + #message (STATUS "Rev list: ${_rev_list_lines}") + list (LENGTH _rev_list_lines _vn1) + + execute_process (COMMAND git rev-list --max-count=1 --abbrev-commit --abbrev=4 HEAD + OUTPUT_VARIABLE _vn2 + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + + set (_git_vn "v${_default_version}-${_vn1}-g${_vn2}") + endif (_git_vn MATCHES "^v0[.]1[.]0") + + # Append -dirty if there are local changes + execute_process (COMMAND git update-index -q --refresh) + execute_process (COMMAND git diff-index --name-only HEAD -- + OUTPUT_VARIABLE _git_vn_dirty) + if (_git_vn_dirty) + set (_git_vn "${_git_vn}-dirty") + endif (_git_vn_dirty) + + # Substitute . for - in the result + string (REPLACE "-" "." _vn "${_git_vn}") + endif (_git_result EQUAL 0) + endif (EXISTS "${CMAKE_SOURCE_DIR}/version") + + # Strip leading "v" from version + #message (STATUS "_vn: ${_vn}") + string (REGEX REPLACE "^v*(.+)" "\\1" _vn "${_vn}") + + # Update version file if required + if (EXISTS ${_version_file}) + file (STRINGS ${_version_file} _version_strs LIMIT_COUNT 1) + list (GET _version_strs 0 _vc) + else (EXISTS ${_version_file}) + set (_vc "unset") + endif (EXISTS ${_version_file}) + if (NOT ("${_vn}" STREQUAL "${_vc}")) + file (WRITE ${_version_file} "${_vn}") + endif (NOT ("${_vn}" STREQUAL "${_vc}")) + + # Set output version variable + set (${_version} ${_vn}) +endmacro (VERSION_GEN) diff --git a/third-party/yasm/yasm-1.3.0/cmake/modules/YasmMacros.cmake b/third-party/yasm/yasm-1.3.0/cmake/modules/YasmMacros.cmake new file mode 100644 index 0000000000..e6006b31c8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/cmake/modules/YasmMacros.cmake @@ -0,0 +1,86 @@ +# Portions based on kdelibs KDE4Macros.cmake: +# +# Copyright (c) 2006, 2007, Alexander Neundorf, +# Copyright (c) 2006, 2007, Laurent Montel, +# Copyright (c) 2007 Matthias Kretz +# +# Redistribution and use is allowed according to the terms of the BSD license. +# +# Changes for Yasm Copyright (c) 2007 Peter Johnson + +# add a unit test, which is executed when running make test +# it will be built with RPATH pointing to the build dir +# The targets are always created, but only built for the "all" +# target if the option YASM_BUILD_TESTS is enabled. Otherwise the rules for +# the target are created but not built by default. You can build them by +# manually building the target. +# The name of the target can be specified using TESTNAME , if it is +# not given the macro will default to the +macro (YASM_ADD_UNIT_TEST _test_NAME) + set(_srcList ${ARGN}) + set(_targetName ${_test_NAME}) + if( ${ARGV1} STREQUAL "TESTNAME" ) + set(_targetName ${ARGV2}) + LIST(REMOVE_AT _srcList 0 1) + endif( ${ARGV1} STREQUAL "TESTNAME" ) + yasm_add_test_executable( ${_test_NAME} ${_srcList} ) + add_test( ${_targetName} ${EXECUTABLE_OUTPUT_PATH}/${_test_NAME} ) +endmacro (YASM_ADD_UNIT_TEST) + +# add an test executable +# it will be built with RPATH pointing to the build dir +# The targets are always created, but only built for the "all" +# target if the option YASM_BUILD_TESTS is enabled. Otherwise the rules for +# the target are created but not built by default. You can build them by +# manually building the target. +macro (YASM_ADD_TEST_EXECUTABLE _target_NAME) + + set(_add_executable_param) + + if (NOT YASM_BUILD_TESTS) + set(_add_executable_param EXCLUDE_FROM_ALL) + endif (NOT YASM_BUILD_TESTS) + + set( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} ) + + set(_SRCS ${ARGN}) + add_executable(${_target_NAME} ${_add_executable_param} ${_SRCS}) + + set_target_properties(${_target_NAME} PROPERTIES + SKIP_BUILD_RPATH FALSE + BUILD_WITH_INSTALL_RPATH FALSE) + +endmacro (YASM_ADD_TEST_EXECUTABLE) + +macro (YASM_ADD_MODULE _module_NAME) + list(APPEND YASM_MODULES_SRC ${ARGN}) + list(APPEND YASM_MODULES ${_module_NAME}) +endmacro (YASM_ADD_MODULE) + +macro (YASM_GENPERF _in_NAME _out_NAME) + add_custom_command( + OUTPUT ${_out_NAME} + COMMAND $ ${_in_NAME} ${_out_NAME} + DEPENDS genperf + MAIN_DEPENDENCY ${_in_NAME} + ) +endmacro (YASM_GENPERF) + +macro (YASM_RE2C _in_NAME _out_NAME) + add_custom_command( + OUTPUT ${_out_NAME} + COMMAND $ ${ARGN} -o ${_out_NAME} ${_in_NAME} + DEPENDS re2c + MAIN_DEPENDENCY ${_in_NAME} + ) +endmacro (YASM_RE2C) + +macro (YASM_GENMACRO _in_NAME _out_NAME _var_NAME) + add_custom_command( + OUTPUT ${_out_NAME} + COMMAND $ ${_out_NAME} ${_var_NAME} ${_in_NAME} + DEPENDS genmacro + MAIN_DEPENDENCY ${_in_NAME} + ) +endmacro (YASM_GENMACRO) + diff --git a/third-party/yasm/yasm-1.3.0/config.h.cmake b/third-party/yasm/yasm-1.3.0/config.h.cmake new file mode 100644 index 0000000000..e0026778d9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/config.h.cmake @@ -0,0 +1,48 @@ +/* config.h. Generated by cmake from config.h.cmake */ + +#define CMAKE_BUILD 1 + +/* Define if shared libs are being built */ +#cmakedefine BUILD_SHARED_LIBS 1 + +/* Define if messsage translations are enabled */ +#cmakedefine ENABLE_NLS 1 + +/* */ +#undef HAVE_GETTEXT + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_LIBGEN_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_UNISTD_H 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_DIRECT_H 1 + +/* Define to 1 if you have the `getcwd' function. */ +#cmakedefine HAVE_GETCWD 1 + +/* Define to 1 if you have the `toascii' function. */ +#cmakedefine HAVE_TOASCII 1 + +/* Name of package */ +#define PACKAGE "yasm" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "bug-yasm@tortall.net" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "yasm" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "@PACKAGE_STRING@" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "@PACKAGE_VERSION@" + +#define VERSION PACKAGE_VERSION + +/* Command name to run C preprocessor */ +#define CPP_PROG "@CPP_PROG@" + diff --git a/third-party/yasm/yasm-1.3.0/config.h.in b/third-party/yasm/yasm-1.3.0/config.h.in new file mode 100644 index 0000000000..22949ec00e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/config.h.in @@ -0,0 +1,172 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Command name to run C preprocessor */ +#undef CPP_PROG + +/* */ +#undef ENABLE_NLS + +/* Define to 1 if you have the `abort' function. */ +#undef HAVE_ABORT + +/* */ +#undef HAVE_CATGETS + +/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the + CoreFoundation framework. */ +#undef HAVE_CFLOCALECOPYCURRENT + +/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +#undef HAVE_CFPREFERENCESCOPYAPPVALUE + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +#undef HAVE_DCGETTEXT + +/* Define to 1 if you have the header file. */ +#undef HAVE_DIRECT_H + +/* Define to 1 if you have the `ftruncate' function. */ +#undef HAVE_FTRUNCATE + +/* Define to 1 if you have the `getcwd' function. */ +#undef HAVE_GETCWD + +/* */ +#undef HAVE_GETTEXT + +/* Define to 1 if you have the GNU C Library */ +#undef HAVE_GNU_C_LIBRARY + +/* Define if you have the iconv() function and it works. */ +#undef HAVE_ICONV + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* */ +#undef HAVE_LC_MESSAGES + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIBGEN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `mergesort' function. */ +#undef HAVE_MERGESORT + +/* Define to 1 if you have the `popen' function. */ +#undef HAVE_POPEN + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* */ +#undef HAVE_STPCPY + +/* Define to 1 if you have the `strcasecmp' function. */ +#undef HAVE_STRCASECMP + +/* Define to 1 if you have the `strcmpi' function. */ +#undef HAVE_STRCMPI + +/* Define to 1 if you have the `stricmp' function. */ +#undef HAVE_STRICMP + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strncasecmp' function. */ +#undef HAVE_STRNCASECMP + +/* Define to 1 if you have the `strsep' function. */ +#undef HAVE_STRSEP + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the `toascii' function. */ +#undef HAVE_TOASCII + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `vsnprintf' function. */ +#undef HAVE_VSNPRINTF + +/* Define to 1 if you have the `_stricmp' function. */ +#undef HAVE__STRICMP + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if the C compiler supports function prototypes. */ +#undef PROTOTYPES + +/* The size of `char', as computed by sizeof. */ +#undef SIZEOF_CHAR + +/* The size of `int', as computed by sizeof. */ +#undef SIZEOF_INT + +/* The size of `long', as computed by sizeof. */ +#undef SIZEOF_LONG + +/* The size of `short', as computed by sizeof. */ +#undef SIZEOF_SHORT + +/* The size of `void*', as computed by sizeof. */ +#undef SIZEOF_VOIDP + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* Define if using the dmalloc debugging malloc package */ +#undef WITH_DMALLOC + +/* Define like PROTOTYPES; this can be used by system headers. */ +#undef __PROTOTYPES + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + +/* Define to `unsigned int' if does not define. */ +#undef size_t diff --git a/third-party/yasm/yasm-1.3.0/config/compile b/third-party/yasm/yasm-1.3.0/config/compile new file mode 100755 index 0000000000..531136b068 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/config/compile @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# 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 2, 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 . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/third-party/yasm/yasm-1.3.0/config/config.guess b/third-party/yasm/yasm-1.3.0/config/config.guess new file mode 100644 index 0000000000..d622a44e55 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/config/config.guess @@ -0,0 +1,1530 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011, 2012 Free Software Foundation, Inc. + +timestamp='2012-02-10' + +# This file 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 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 +# 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 . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/third-party/yasm/yasm-1.3.0/config/config.rpath b/third-party/yasm/yasm-1.3.0/config/config.rpath new file mode 100755 index 0000000000..c38b914d6b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/config/config.rpath @@ -0,0 +1,690 @@ +#! /bin/sh +# Output a system dependent set of variables, describing how to set the +# run time search path of shared libraries in an executable. +# +# Copyright 1996-2013 Free Software Foundation, Inc. +# Taken from GNU libtool, 2001 +# Originally by Gordon Matzigkeit , 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld +# should be set by the caller. +# +# The set of defined variables is at the end of this script. + +# Known limitations: +# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer +# than 256 bytes, otherwise the compiler driver will dump core. The only +# known workaround is to choose shorter directory names for the build +# directory and/or the installation directory. + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +shrext=.so + +host="$1" +host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +# Code taken from libtool.m4's _LT_CC_BASENAME. + +for cc_temp in $CC""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` + +# Code taken from libtool.m4's _LT_COMPILER_PIC. + +wl= +if test "$GCC" = yes; then + wl='-Wl,' +else + case "$host_os" in + aix*) + wl='-Wl,' + ;; + mingw* | cygwin* | pw32* | os2* | cegcc*) + ;; + hpux9* | hpux10* | hpux11*) + wl='-Wl,' + ;; + irix5* | irix6* | nonstopux*) + wl='-Wl,' + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + ecc*) + wl='-Wl,' + ;; + icc* | ifort*) + wl='-Wl,' + ;; + lf95*) + wl='-Wl,' + ;; + nagfor*) + wl='-Wl,-Wl,,' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + wl='-Wl,' + ;; + ccc*) + wl='-Wl,' + ;; + xl* | bgxl* | bgf* | mpixl*) + wl='-Wl,' + ;; + como) + wl='-lopt=' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + wl= + ;; + *Sun\ C*) + wl='-Wl,' + ;; + esac + ;; + esac + ;; + newsos6) + ;; + *nto* | *qnx*) + ;; + osf3* | osf4* | osf5*) + wl='-Wl,' + ;; + rdos*) + ;; + solaris*) + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + wl='-Qoption ld ' + ;; + *) + wl='-Wl,' + ;; + esac + ;; + sunos4*) + wl='-Qoption ld ' + ;; + sysv4 | sysv4.2uw2* | sysv4.3*) + wl='-Wl,' + ;; + sysv4*MP*) + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + wl='-Wl,' + ;; + unicos*) + wl='-Wl,' + ;; + uts4*) + ;; + esac +fi + +# Code taken from libtool.m4's _LT_LINKER_SHLIBS. + +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no + +case "$host_os" in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + # Unlike libtool, we use -rpath here, not --rpath, since the documented + # option of GNU ld is called -rpath, not --rpath. + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + case "$host_os" in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + fi + ;; + amigaos*) + case "$host_cpu" in + powerpc) + ;; + m68k) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32* | cegcc*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + haiku*) + ;; + interix[3-9]*) + hardcode_direct=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + netbsd*) + ;; + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + else + ld_shlibs=no + fi + ;; + esac + ;; + sunos4*) + hardcode_direct=yes + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + esac + if test "$ld_shlibs" = no; then + hardcode_libdir_flag_spec= + fi +else + case "$host_os" in + aix3*) + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + else + aix_use_runtimelinking=no + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + fi + hardcode_direct=yes + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + fi + # Begin _LT_AC_SYS_LIBPATH_AIX. + echo 'int main () { return 0; }' > conftest.c + ${CC} ${LDFLAGS} conftest.c -o conftest + aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + fi + if test -z "$aix_libpath"; then + aix_libpath="/usr/lib:/lib" + fi + rm -f conftest.c conftest + # End _LT_AC_SYS_LIBPATH_AIX. + if test "$aix_use_runtimelinking" = yes; then + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + else + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + fi + fi + ;; + amigaos*) + case "$host_cpu" in + powerpc) + ;; + m68k) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + bsdi[45]*) + ;; + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + libext=lib + ;; + darwin* | rhapsody*) + hardcode_direct=no + if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then + : + else + ld_shlibs=no + fi + ;; + dgux*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + freebsd2.2*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + freebsd2*) + hardcode_direct=yes + hardcode_minus_L=yes + ;; + freebsd* | dragonfly*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + hpux9*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + hpux10*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + hpux11*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + ;; + *) + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + irix5* | irix6* | nonstopux*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + netbsd*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + newsos6) + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + *nto* | *qnx*) + ;; + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + else + case "$host_os" in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + osf3*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + osf4* | osf5*) + if test "$GCC" = yes; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + # Both cc and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + solaris*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + sunos4*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + sysv4) + case $host_vendor in + sni) + hardcode_direct=yes # is this really true??? + ;; + siemens) + hardcode_direct=no + ;; + motorola) + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + ;; + sysv4.3*) + ;; + sysv4*MP*) + if test -d /usr/nec; then + ld_shlibs=yes + fi + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + ;; + sysv5* | sco3.2v5* | sco5v6*) + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator=':' + ;; + uts4*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + *) + ld_shlibs=no + ;; + esac +fi + +# Check dynamic linker characteristics +# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. +# Unlike libtool.m4, here we don't care about _all_ names of the library, but +# only about the one the linker finds when passed -lNAME. This is the last +# element of library_names_spec in libtool.m4, or possibly two of them if the +# linker has special search rules. +library_names_spec= # the last element of library_names_spec in libtool.m4 +libname_spec='lib$name' +case "$host_os" in + aix3*) + library_names_spec='$libname.a' + ;; + aix[4-9]*) + library_names_spec='$libname$shrext' + ;; + amigaos*) + case "$host_cpu" in + powerpc*) + library_names_spec='$libname$shrext' ;; + m68k) + library_names_spec='$libname.a' ;; + esac + ;; + beos*) + library_names_spec='$libname$shrext' + ;; + bsdi[45]*) + library_names_spec='$libname$shrext' + ;; + cygwin* | mingw* | pw32* | cegcc*) + shrext=.dll + library_names_spec='$libname.dll.a $libname.lib' + ;; + darwin* | rhapsody*) + shrext=.dylib + library_names_spec='$libname$shrext' + ;; + dgux*) + library_names_spec='$libname$shrext' + ;; + freebsd* | dragonfly*) + case "$host_os" in + freebsd[123]*) + library_names_spec='$libname$shrext$versuffix' ;; + *) + library_names_spec='$libname$shrext' ;; + esac + ;; + gnu*) + library_names_spec='$libname$shrext' + ;; + haiku*) + library_names_spec='$libname$shrext' + ;; + hpux9* | hpux10* | hpux11*) + case $host_cpu in + ia64*) + shrext=.so + ;; + hppa*64*) + shrext=.sl + ;; + *) + shrext=.sl + ;; + esac + library_names_spec='$libname$shrext' + ;; + interix[3-9]*) + library_names_spec='$libname$shrext' + ;; + irix5* | irix6* | nonstopux*) + library_names_spec='$libname$shrext' + case "$host_os" in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; + *) libsuff= shlibsuff= ;; + esac + ;; + esac + ;; + linux*oldld* | linux*aout* | linux*coff*) + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + library_names_spec='$libname$shrext' + ;; + knetbsd*-gnu) + library_names_spec='$libname$shrext' + ;; + netbsd*) + library_names_spec='$libname$shrext' + ;; + newsos6) + library_names_spec='$libname$shrext' + ;; + *nto* | *qnx*) + library_names_spec='$libname$shrext' + ;; + openbsd*) + library_names_spec='$libname$shrext$versuffix' + ;; + os2*) + libname_spec='$name' + shrext=.dll + library_names_spec='$libname.a' + ;; + osf3* | osf4* | osf5*) + library_names_spec='$libname$shrext' + ;; + rdos*) + ;; + solaris*) + library_names_spec='$libname$shrext' + ;; + sunos4*) + library_names_spec='$libname$shrext$versuffix' + ;; + sysv4 | sysv4.3*) + library_names_spec='$libname$shrext' + ;; + sysv4*MP*) + library_names_spec='$libname$shrext' + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + library_names_spec='$libname$shrext' + ;; + tpf*) + library_names_spec='$libname$shrext' + ;; + uts4*) + library_names_spec='$libname$shrext' + ;; +esac + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` +shlibext=`echo "$shrext" | sed -e 's,^\.,,'` +escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` + +LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | be32 | be64 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | epiphany \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 \ + | ns16k | ns32k \ + | open8 \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i386-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/third-party/yasm/yasm-1.3.0/config/depcomp b/third-party/yasm/yasm-1.3.0/config/depcomp new file mode 100755 index 0000000000..4ebd5b3a2f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/config/depcomp @@ -0,0 +1,791 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2013-05-30.07; # UTC + +# Copyright (C) 1999-2013 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 2, 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 . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputting dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Avoid interferences from the environment. +gccflag= dashmflag= + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The second -e expression handles DOS-style file names with drive + # letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the "deleted header file" problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. +## Some versions of gcc put a space before the ':'. On the theory +## that the space means something, we add a space to the output as +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like '#:fec' to the end of the + # dependency line. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" + # The second pass generates a dummy entry for each header file. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" + ;; + +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts '$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using '\' : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi + + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; + +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for ':' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. + "$@" $dashmflag | + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/third-party/yasm/yasm-1.3.0/config/install-sh b/third-party/yasm/yasm-1.3.0/config/install-sh new file mode 100755 index 0000000000..377bb8687f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/config/install-sh @@ -0,0 +1,527 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2011-11-20.07; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# 'make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/third-party/yasm/yasm-1.3.0/config/missing b/third-party/yasm/yasm-1.3.0/config/missing new file mode 100755 index 0000000000..db98974ff5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/config/missing @@ -0,0 +1,215 @@ +#! /bin/sh +# Common wrapper for a few potentially missing GNU programs. + +scriptversion=2013-10-28.13; # UTC + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard , 1996. + +# 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 2, 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 . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try '$0 --help' for more information" + exit 1 +fi + +case $1 in + + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; + + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" + exit 1 + ;; + +esac + +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi + +perl_URL=http://www.perl.org/ +flex_URL=http://flex.sourceforge.net/ +gnu_software_URL=http://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'autom4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" + ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/third-party/yasm/yasm-1.3.0/config/mkinstalldirs b/third-party/yasm/yasm-1.3.0/config/mkinstalldirs new file mode 100755 index 0000000000..ef7e16fdaf --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/config/mkinstalldirs @@ -0,0 +1,161 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy + +scriptversion=2006-05-11.19 + +# Original author: Noah Friedman +# Created: 1993-05-16 +# Public domain. +# +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' +IFS=" "" $nl" +errstatus=0 +dirmode= + +usage="\ +Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... + +Create each directory DIR (with mode MODE, if specified), including all +leading file name components. + +Report bugs to ." + +# process command line arguments +while test $# -gt 0 ; do + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" + exit $? + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --version) + echo "$0 $scriptversion" + exit $? + ;; + --) # stop option processing + shift + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in + 0) exit 0 ;; +esac + +# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and +# mkdir -p a/c at the same time, both will detect that a is missing, +# one will create a, then the other will try to create a and die with +# a "File exists" error. This is a problem when calling mkinstalldirs +# from a parallel make. We use --version in the probe to restrict +# ourselves to GNU mkdir, which is thread-safe. +case $dirmode in + '') + if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + test -d ./-p && rmdir ./-p + test -d ./--version && rmdir ./--version + fi + ;; + *) + if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && + test ! -d ./--version; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + else + # Clean up after NextStep and OpenStep mkdir. + for d in ./-m ./-p ./--version "./$dirmode"; + do + test -d $d && rmdir $d + done + fi + ;; +esac + +for file +do + case $file in + /*) pathcomp=/ ;; + *) pathcomp= ;; + esac + oIFS=$IFS + IFS=/ + set fnord $file + shift + IFS=$oIFS + + for d + do + test "x$d" = x && continue + + pathcomp=$pathcomp$d + case $pathcomp in + -*) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + lasterr= + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp=$pathcomp/ + done +done + +exit $errstatus + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/third-party/yasm/yasm-1.3.0/config/test-driver b/third-party/yasm/yasm-1.3.0/config/test-driver new file mode 100755 index 0000000000..d30605660a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/config/test-driver @@ -0,0 +1,139 @@ +#! /bin/sh +# test-driver - basic testsuite driver script. + +scriptversion=2013-07-13.22; # UTC + +# Copyright (C) 2011-2013 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 2, 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 . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +# Make unconditional expansion of undefined variables an error. This +# helps a lot in preventing typo-related bugs. +set -u + +usage_error () +{ + echo "$0: $*" >&2 + print_usage >&2 + exit 2 +} + +print_usage () +{ + cat <$log_file 2>&1 +estatus=$? +if test $enable_hard_errors = no && test $estatus -eq 99; then + estatus=1 +fi + +case $estatus:$expect_failure in + 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; + 0:*) col=$grn res=PASS recheck=no gcopy=no;; + 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; + 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; + *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; + *:*) col=$red res=FAIL recheck=yes gcopy=yes;; +esac + +# Report outcome to console. +echo "${col}${res}${std}: $test_name" + +# Register the test result, and other relevant metadata. +echo ":test-result: $res" > $trs_file +echo ":global-test-result: $res" >> $trs_file +echo ":recheck: $recheck" >> $trs_file +echo ":copy-in-global-log: $gcopy" >> $trs_file + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/third-party/yasm/yasm-1.3.0/configure b/third-party/yasm/yasm-1.3.0/configure new file mode 100755 index 0000000000..d58618be91 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/configure @@ -0,0 +1,10699 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for yasm 1.3.0. +# +# Report bugs to . +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: bug-yasm@tortall.net about your system, including any +$0: error possibly output before this message. Then install +$0: a modern shell, or manually run the script under such a +$0: shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='yasm' +PACKAGE_TARNAME='yasm' +PACKAGE_VERSION='1.3.0' +PACKAGE_STRING='yasm 1.3.0' +PACKAGE_BUGREPORT='bug-yasm@tortall.net' +PACKAGE_URL='' + +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +gt_needs= +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +HAVE_PYTHON_BINDINGS_FALSE +HAVE_PYTHON_BINDINGS_TRUE +HAVE_PYTHON_FALSE +HAVE_PYTHON_TRUE +PYTHON_INCLUDES +pkgpyexecdir +pyexecdir +pkgpythondir +pythondir +PYTHON_PLATFORM +PYTHON_EXEC_PREFIX +PYTHON_PREFIX +PYTHON_VERSION +PYTHON +CPP_FOR_HOST +CCLD_FOR_BUILD +CC_FOR_BUILD +MORE_CFLAGS +GCC +ARCH +POSUB +LTLIBINTL +LIBINTL +INTLLIBS +LTLIBICONV +LIBICONV +INTL_MACOSX_LIBS +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +XGETTEXT_EXTRA_OPTIONS +MSGMERGE +XGETTEXT_015 +XGETTEXT +GMSGFMT_015 +MSGFMT_015 +GMSGFMT +MSGFMT +GETTEXT_MACRO_VERSION +USE_NLS +SED +EGREP +GREP +BUILD_MAN_FALSE +BUILD_MAN_TRUE +XMLTO +RANLIB +ac_ct_AR +AR +LN_S +CPP +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_maintainer_mode +enable_debug +enable_warnerror +enable_profiling +enable_gcov +enable_python +enable_python_bindings +enable_dependency_tracking +with_dmalloc +enable_nls +with_gnu_ld +enable_rpath +with_libiconv_prefix +with_libintl_prefix +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +CC_FOR_BUILD +CCLD_FOR_BUILD +CPP_FOR_HOST +PYTHON' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures yasm 1.3.0 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/yasm] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of yasm 1.3.0:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-maintainer-mode + enable make rules and dependencies not useful (and + sometimes confusing) to the casual installer + --enable-debug Turn on debugging and compile time warnings + --enable-warnerror Treat GCC warnings as errors + --enable-profiling Enable profiling (requires GCC) + --enable-gcov Enable gcov code coverage (requires GCC) + --enable-python Enable Python-requiring portions of build + --enable-python-bindings + Build Python bindings + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --disable-nls do not use Native Language Support + --disable-rpath do not hardcode runtime library paths + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-dmalloc use dmalloc, as in http://www.dmalloc.com + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib + --without-libiconv-prefix don't search for libiconv in includedir and libdir + --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib + --without-libintl-prefix don't search for libintl in includedir and libdir + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + CC_FOR_BUILD + build system C compiler + CCLD_FOR_BUILD + build system C linker frontend + CPP_FOR_HOST + host system C preprocessor + PYTHON the Python interpreter + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +yasm configure 1.3.0 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ----------------------------------- ## +## Report this to bug-yasm@tortall.net ## +## ----------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type + +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 &5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by yasm $as_me 1.3.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +gt_needs="$gt_needs " +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +#AC_CONFIG_SRCDIR([src/main.c]) +ac_aux_dir= +for ac_dir in config "$srcdir"/config; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +ac_config_headers="$ac_config_headers config.h" + + +am__api_version='1.14' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='yasm' + VERSION='1.3.0' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + +# +# autoconf command-line options +# +# Check whether --enable-debug was given. +if test "${enable_debug+set}" = set; then : + enableval=$enable_debug; case "${enableval}" in + yes) debugging="yes" ;; + no) debugging="no" ;; + *) as_fn_error $? "bad value ${enableval} for --enable-debug" "$LINENO" 5 ;; +esac +fi + + +# Check whether --enable-warnerror was given. +if test "${enable_warnerror+set}" = set; then : + enableval=$enable_warnerror; case "${enableval}" in + yes) warnerror="yes" ;; + no) warnerror="no" ;; + *) as_fn_error $? "bad value ${enableval} for --enable-warnerror" "$LINENO" 5 ;; +esac +fi + + +# Check whether --enable-profiling was given. +if test "${enable_profiling+set}" = set; then : + enableval=$enable_profiling; case "${enableval}" in + yes) profiling="yes" ;; + no) profiling="no" ;; + *) as_fn_error $? "bad value ${enableval} for --enable-profiling" "$LINENO" 5 ;; +esac +fi + + +# Check whether --enable-gcov was given. +if test "${enable_gcov+set}" = set; then : + enableval=$enable_gcov; case "${enableval}" in + yes) gcov="yes" ;; + no) gcov="no" ;; + *) as_fn_error $? "bad value ${enableval} for --enable-gcov" "$LINENO" 5 ;; +esac +fi + + +# Check whether --enable-python was given. +if test "${enable_python+set}" = set; then : + enableval=$enable_python; case "${enableval}" in + yes) enable_python="yes" ;; + no) enable_python="no" ;; + *) as_fn_error $? "bad value ${enableval} for --enable-python" "$LINENO" 5 ;; +esac +else + enable_python="auto" +fi + + +# Check whether --enable-python-bindings was given. +if test "${enable_python_bindings+set}" = set; then : + enableval=$enable_python_bindings; case "${enableval}" in + yes) enable_python_bindings="yes" ;; + no) enable_python_bindings="no" ;; + *) as_fn_error $? "bad value ${enableval} for --enable-python-bindings" "$LINENO" 5 ;; +esac +else + enable_python_bindings="no" +fi + + +# +# Checks for programs. +# +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + case $ac_cv_prog_cc_stdc in #( + no) : + ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if ${ac_cv_prog_cc_c99+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +#include + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c99" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 +else + ac_cv_prog_cc_stdc=no +fi + +fi + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 +$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } + if ${ac_cv_prog_cc_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +fi + + case $ac_cv_prog_cc_stdc in #( + no) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; #( + '') : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 +$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; +esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +#automake default ARFLAGS to "cru" +if test -n "$ac_tool_prefix"; then + for ac_prog in $AR ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in $AR ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="ar" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + +# REQUIRE a standard (ANSI/ISO) C compiler +if test "$ac_cv_prog_cc_stdc" = no; then + as_fn_error $? "A standard (ANSI/ISO C89) C compiler is required." "$LINENO" 5 +fi + +# Check for xmlto (for rendering manpages, needed only for development) +for ac_prog in $XMLTO xmlto +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_XMLTO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$XMLTO"; then + ac_cv_prog_XMLTO="$XMLTO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_XMLTO="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +XMLTO=$ac_cv_prog_XMLTO +if test -n "$XMLTO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLTO" >&5 +$as_echo "$XMLTO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$XMLTO" && break +done +test -n "$XMLTO" || XMLTO=":" + +if test "$XMLTO" = ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmlto not found, manpages will not be rebuilt." >&5 +$as_echo "$as_me: WARNING: xmlto not found, manpages will not be rebuilt." >&2;} +fi + if test "$XMLTO" != ":"; then + BUILD_MAN_TRUE= + BUILD_MAN_FALSE='#' +else + BUILD_MAN_TRUE='#' + BUILD_MAN_FALSE= +fi + + +# Check for compiler output filename suffixes. + + + +# +# Checks for libraries. +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if malloc debugging is wanted" >&5 +$as_echo_n "checking if malloc debugging is wanted... " >&6; } + +# Check whether --with-dmalloc was given. +if test "${with_dmalloc+set}" = set; then : + withval=$with_dmalloc; if test "$withval" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define WITH_DMALLOC 1" >>confdefs.h + + LIBS="$LIBS -ldmalloc" + LDFLAGS="$LDFLAGS -g" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +# +# Checks for header files. +# + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in strings.h libgen.h unistd.h direct.h sys/stat.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +# REQUIRE standard C headers +if test "$ac_cv_header_stdc" != yes; then + as_fn_error $? "Standard (ANSI/ISO C89) header files are required." "$LINENO" 5 +fi + +# +# Checks for typedefs, structures, and compiler characteristics. +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if ${ac_cv_c_const+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + +#ifndef __cplusplus + /* Ultrix mips cc rejects this sort of thing. */ + typedef int charset[2]; + const charset cs = { 0, 0 }; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this sort of thing. */ + char tx; + char *t = &tx; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; } bx; + struct s *b = &bx; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_const=yes +else + ac_cv_c_const=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +$as_echo "#define const /**/" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for function prototypes" >&5 +$as_echo_n "checking for function prototypes... " >&6; } +if test "$ac_cv_prog_cc_c89" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define PROTOTYPES 1" >>confdefs.h + + +$as_echo "#define __PROTOTYPES 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + +# ------ AX CREATE STDINT H ------------------------------------- +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint types" >&5 +$as_echo_n "checking for stdint types... " >&6; } +ac_stdint_h=`echo libyasm-stdint.h` +# try to shortcircuit - if the default include path of the compiler +# can find a "stdint.h" header then we assume that all compilers can. +if ${ac_cv_header_stdint_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + +old_CXXFLAGS="$CXXFLAGS" ; CXXFLAGS="" +old_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS="" +old_CFLAGS="$CFLAGS" ; CFLAGS="" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +int_least32_t v = 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_stdint_result="(assuming C99 compatible system)" + ac_cv_header_stdint_t="stdint.h"; +else + ac_cv_header_stdint_t="" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CXXFLAGS="$old_CXXFLAGS" +CPPFLAGS="$old_CPPFLAGS" +CFLAGS="$old_CFLAGS" +fi + + +v="... $ac_cv_header_stdint_h" +if test "$ac_stdint_h" = "stdint.h" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: (are you sure you want them in ./stdint.h?)" >&5 +$as_echo "(are you sure you want them in ./stdint.h?)" >&6; } +elif test "$ac_stdint_h" = "inttypes.h" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: (are you sure you want them in ./inttypes.h?)" >&5 +$as_echo "(are you sure you want them in ./inttypes.h?)" >&6; } +elif test "_$ac_cv_header_stdint_t" = "_" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: (putting them into $ac_stdint_h)$v" >&5 +$as_echo "(putting them into $ac_stdint_h)$v" >&6; } +else + ac_cv_header_stdint="$ac_cv_header_stdint_t" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint (shortcircuit)" >&5 +$as_echo "$ac_cv_header_stdint (shortcircuit)" >&6; } +fi + +if test "_$ac_cv_header_stdint_t" = "_" ; then # can not shortcircuit.. + + +inttype_headers=`echo | sed -e 's/,/ /g'` + +ac_cv_stdint_result="(no helpful system typedefs seen)" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uintptr_t" >&5 +$as_echo_n "checking for stdint uintptr_t... " >&6; } +if ${ac_cv_header_stdint_x+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5 +$as_echo "(..)" >&6; } + for i in stdint.h inttypes.h sys/inttypes.h $inttype_headers ; do + unset ac_cv_type_uintptr_t + unset ac_cv_type_uint64_t + ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "#include <$i> +" +if test "x$ac_cv_type_uintptr_t" = xyes; then : + ac_cv_header_stdint_x=$i +else + continue +fi + + ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include<$i> +" +if test "x$ac_cv_type_uint64_t" = xyes; then : + and64="/uint64_t" +else + and64="" +fi + + break; + done + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uintptr_t" >&5 +$as_echo_n "checking for stdint uintptr_t... " >&6; } + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_x" >&5 +$as_echo "$ac_cv_header_stdint_x" >&6; } + + +if test "_$ac_cv_header_stdint_x" = "_" ; then + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uint32_t" >&5 +$as_echo_n "checking for stdint uint32_t... " >&6; } +if ${ac_cv_header_stdint_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5 +$as_echo "(..)" >&6; } + for i in inttypes.h sys/inttypes.h stdint.h $inttype_headers ; do + unset ac_cv_type_uint32_t + unset ac_cv_type_uint64_t + ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "#include <$i> +" +if test "x$ac_cv_type_uint32_t" = xyes; then : + ac_cv_header_stdint_o=$i +else + continue +fi + + ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include<$i> +" +if test "x$ac_cv_type_uint64_t" = xyes; then : + and64="/uint64_t" +else + and64="" +fi + + break; + done + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uint32_t" >&5 +$as_echo_n "checking for stdint uint32_t... " >&6; } + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_o" >&5 +$as_echo "$ac_cv_header_stdint_o" >&6; } + +fi + +if test "_$ac_cv_header_stdint_x" = "_" ; then +if test "_$ac_cv_header_stdint_o" = "_" ; then + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint u_int32_t" >&5 +$as_echo_n "checking for stdint u_int32_t... " >&6; } +if ${ac_cv_header_stdint_u+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5 +$as_echo "(..)" >&6; } + for i in sys/types.h inttypes.h sys/inttypes.h $inttype_headers ; do + unset ac_cv_type_u_int32_t + unset ac_cv_type_u_int64_t + ac_fn_c_check_type "$LINENO" "u_int32_t" "ac_cv_type_u_int32_t" "#include <$i> +" +if test "x$ac_cv_type_u_int32_t" = xyes; then : + ac_cv_header_stdint_u=$i +else + continue +fi + + ac_fn_c_check_type "$LINENO" "u_int64_t" "ac_cv_type_u_int64_t" "#include<$i> +" +if test "x$ac_cv_type_u_int64_t" = xyes; then : + and64="/u_int64_t" +else + and64="" +fi + + break; + done + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint u_int32_t" >&5 +$as_echo_n "checking for stdint u_int32_t... " >&6; } + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_u" >&5 +$as_echo "$ac_cv_header_stdint_u" >&6; } + +fi fi + +if test "_$ac_cv_header_stdint_x" = "_" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint datatype model" >&5 +$as_echo_n "checking for stdint datatype model... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5 +$as_echo "(..)" >&6; } + + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5 +$as_echo_n "checking size of char... " >&6; } +if ${ac_cv_sizeof_char+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_char" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (char) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_char=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5 +$as_echo "$ac_cv_sizeof_char" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_CHAR $ac_cv_sizeof_char +_ACEOF + + + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 +$as_echo_n "checking size of short... " >&6; } +if ${ac_cv_sizeof_short+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_short" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (short) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_short=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 +$as_echo "$ac_cv_sizeof_short" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_SHORT $ac_cv_sizeof_short +_ACEOF + + + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 +$as_echo_n "checking size of int... " >&6; } +if ${ac_cv_sizeof_int+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_int" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (int) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_int=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 +$as_echo "$ac_cv_sizeof_int" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INT $ac_cv_sizeof_int +_ACEOF + + + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +$as_echo_n "checking size of long... " >&6; } +if ${ac_cv_sizeof_long+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (long) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_long=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +$as_echo "$ac_cv_sizeof_long" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG $ac_cv_sizeof_long +_ACEOF + + + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void*" >&5 +$as_echo_n "checking size of void*... " >&6; } +if ${ac_cv_sizeof_voidp+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_voidp" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (void*) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_voidp=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_voidp" >&5 +$as_echo "$ac_cv_sizeof_voidp" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_VOIDP $ac_cv_sizeof_voidp +_ACEOF + + + ac_cv_char_data_model="" + ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_char" + ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_short" + ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_int" + ac_cv_long_data_model="" + ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_int" + ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_long" + ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_voidp" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking data model" >&5 +$as_echo_n "checking data model... " >&6; } + case "$ac_cv_char_data_model/$ac_cv_long_data_model" in + 122/242) ac_cv_data_model="IP16" ; n="standard 16bit machine" ;; + 122/244) ac_cv_data_model="LP32" ; n="standard 32bit machine" ;; + 122/*) ac_cv_data_model="i16" ; n="unusual int16 model" ;; + 124/444) ac_cv_data_model="ILP32" ; n="standard 32bit unixish" ;; + 124/488) ac_cv_data_model="LP64" ; n="standard 64bit unixish" ;; + 124/448) ac_cv_data_model="LLP64" ; n="unusual 64bit unixish" ;; + 124/*) ac_cv_data_model="i32" ; n="unusual int32 model" ;; + 128/888) ac_cv_data_model="ILP64" ; n="unusual 64bit numeric" ;; + 128/*) ac_cv_data_model="i64" ; n="unusual int64 model" ;; + 222/*2) ac_cv_data_model="DSP16" ; n="strict 16bit dsptype" ;; + 333/*3) ac_cv_data_model="DSP24" ; n="strict 24bit dsptype" ;; + 444/*4) ac_cv_data_model="DSP32" ; n="strict 32bit dsptype" ;; + 666/*6) ac_cv_data_model="DSP48" ; n="strict 48bit dsptype" ;; + 888/*8) ac_cv_data_model="DSP64" ; n="strict 64bit dsptype" ;; + 222/*|333/*|444/*|666/*|888/*) : + ac_cv_data_model="iDSP" ; n="unusual dsptype" ;; + *) ac_cv_data_model="none" ; n="very unusual model" ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_data_model ($ac_cv_long_data_model, $n)" >&5 +$as_echo "$ac_cv_data_model ($ac_cv_long_data_model, $n)" >&6; } + +fi + +if test "_$ac_cv_header_stdint_x" != "_" ; then + ac_cv_header_stdint="$ac_cv_header_stdint_x" +elif test "_$ac_cv_header_stdint_o" != "_" ; then + ac_cv_header_stdint="$ac_cv_header_stdint_o" +elif test "_$ac_cv_header_stdint_u" != "_" ; then + ac_cv_header_stdint="$ac_cv_header_stdint_u" +else + ac_cv_header_stdint="stddef.h" +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for extra inttypes in chosen header" >&5 +$as_echo_n "checking for extra inttypes in chosen header... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ($ac_cv_header_stdint)" >&5 +$as_echo "($ac_cv_header_stdint)" >&6; } +unset ac_cv_type_int_least32_t +unset ac_cv_type_int_fast32_t +ac_fn_c_check_type "$LINENO" "int_least32_t" "ac_cv_type_int_least32_t" "#include <$ac_cv_header_stdint> +" +if test "x$ac_cv_type_int_least32_t" = xyes; then : + +fi + +ac_fn_c_check_type "$LINENO" "int_fast32_t" "ac_cv_type_int_fast32_t" "#include<$ac_cv_header_stdint> +" +if test "x$ac_cv_type_int_fast32_t" = xyes; then : + +fi + +ac_fn_c_check_type "$LINENO" "intmax_t" "ac_cv_type_intmax_t" "#include <$ac_cv_header_stdint> +" +if test "x$ac_cv_type_intmax_t" = xyes; then : + +fi + + +fi # shortcircut to system "stdint.h" +# ------------------ PREPARE VARIABLES ------------------------------ +#if test "$GCC" = "yes" ; then +#ac_cv_stdint_message="using gnu compiler "`$CC --version | head -1` +#else +ac_cv_stdint_message="using $CC" +#fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: make use of $ac_cv_header_stdint in $ac_stdint_h $ac_cv_stdint_result" >&5 +$as_echo "make use of $ac_cv_header_stdint in $ac_stdint_h $ac_cv_stdint_result" >&6; } + +# ----------------- DONE inttypes.h checks START header ------------- +ac_config_commands="$ac_config_commands $ac_stdint_h" + + + +# +# Checks for library functions. +# +for ac_func in abort toascii vsnprintf +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +for ac_func in strsep mergesort getcwd +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +for ac_func in popen ftruncate +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +# Look for the case-insensitive comparison functions +for ac_func in strcasecmp strncasecmp stricmp _stricmp strcmpi +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +# +# Check for gettext() and other i18n/l10n things. +# +ALL_LINGUAS="" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } + # Check whether --enable-nls was given. +if test "${enable_nls+set}" = set; then : + enableval=$enable_nls; USE_NLS=$enableval +else + USE_NLS=yes +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } + + + + + GETTEXT_MACRO_VERSION=0.18 + + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$MSGFMT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test "$MSGFMT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 +$as_echo "$MSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GMSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT +if test -n "$GMSGFMT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 +$as_echo "$GMSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac + + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XGETTEXT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$XGETTEXT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 +$as_echo "$XGETTEXT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + rm -f messages.po + + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgmerge", so it can be a program name with args. +set dummy msgmerge; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGMERGE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$MSGMERGE" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then + ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" + ;; +esac +fi +MSGMERGE="$ac_cv_path_MSGMERGE" +if test "$MSGMERGE" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 +$as_echo "$MSGMERGE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$localedir" || localedir='${datadir}/locale' + + + test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= + + + ac_config_commands="$ac_config_commands po-directories" + + + + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` + while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${acl_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$acl_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${acl_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$acl_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$acl_cv_prog_gnu_ld + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 +$as_echo_n "checking for shared library run path origin... " >&6; } +if ${acl_cv_rpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 +$as_echo "$acl_cv_rpath" >&6; } + wl="$acl_cv_wl" + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + # Check whether --enable-rpath was given. +if test "${enable_rpath+set}" = set; then : + enableval=$enable_rpath; : +else + enable_rpath=yes +fi + + + + + acl_libdirstem=lib + acl_libdirstem2= + case "$host_os" in + solaris*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 +$as_echo_n "checking for 64-bit host... " >&6; } +if ${gl_cv_solaris_64bit+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _LP64 +sixtyfour bits +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sixtyfour bits" >/dev/null 2>&1; then : + gl_cv_solaris_64bit=yes +else + gl_cv_solaris_64bit=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 +$as_echo "$gl_cv_solaris_64bit" >&6; } + if test $gl_cv_solaris_64bit = yes; then + acl_libdirstem=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem2=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + esac + fi + ;; + *) + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" + + + + + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then : + withval=$with_libiconv_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBICONV= + LTLIBICONV= + INCICONV= + LIBICONV_PREFIX= + HAVE_LIBICONV= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='iconv ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" + ;; + esac + done + fi + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" + done + fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 +$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } +if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +CFPreferencesCopyAppValue(NULL, NULL) + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_CFPreferencesCopyAppValue=yes +else + gt_cv_func_CFPreferencesCopyAppValue=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 +$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + +$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 +$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } +if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +CFLocaleCopyCurrent(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_CFLocaleCopyCurrent=yes +else + gt_cv_func_CFLocaleCopyCurrent=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 +$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + +$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h + + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + + + + + + + LIBINTL= + LTLIBINTL= + POSUB= + + case " $gt_needs " in + *" need-formatstring-macros "*) gt_api_version=3 ;; + *" need-ngettext "*) gt_api_version=2 ;; + *) gt_api_version=1 ;; + esac + gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" + gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" + + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + + + if test $gt_api_version -ge 3; then + gt_revision_test_code=' +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +' + else + gt_revision_test_code= + fi + if test $gt_api_version -ge 2; then + gt_expression_test_code=' + * ngettext ("", "", 0)' + else + gt_expression_test_code= + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 +$as_echo_n "checking for GNU gettext in libc... " >&6; } +if eval \${$gt_func_gnugettext_libc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings; + +int +main () +{ + +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$gt_func_gnugettext_libc=yes" +else + eval "$gt_func_gnugettext_libc=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$gt_func_gnugettext_libc + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + + + + + + am_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCICONV; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 +$as_echo_n "checking for iconv... " >&6; } +if ${am_cv_func_iconv+:} false; then : + $as_echo_n "(cached) " >&6 +else + + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_func_iconv=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_lib_iconv=yes + am_cv_func_iconv=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$am_save_LIBS" + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 +$as_echo "$am_cv_func_iconv" >&6; } + if test "$am_cv_func_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 +$as_echo_n "checking for working iconv... " >&6; } +if ${am_cv_func_iconv_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + if test "$cross_compiling" = yes; then : + + case "$host_os" in + aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; + *) am_cv_func_iconv_works="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +int main () +{ + int result = 0; + /* Test against AIX 5.1 bug: Failures are not distinguishable from successful + returns. */ + { + iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); + if (cd_utf8_to_88591 != (iconv_t)(-1)) + { + static const char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 1; + iconv_close (cd_utf8_to_88591); + } + } + /* Test against Solaris 10 bug: Failures are not distinguishable from + successful returns. */ + { + iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); + if (cd_ascii_to_88591 != (iconv_t)(-1)) + { + static const char input[] = "\263"; + char buf[10]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_ascii_to_88591, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 2; + iconv_close (cd_ascii_to_88591); + } + } + /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static const char input[] = "\304"; + static char buf[2] = { (char)0xDE, (char)0xAD }; + const char *inptr = input; + size_t inbytesleft = 1; + char *outptr = buf; + size_t outbytesleft = 1; + size_t res = iconv (cd_88591_to_utf8, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) + result |= 4; + iconv_close (cd_88591_to_utf8); + } + } +#if 0 /* This bug could be worked around by the caller. */ + /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_88591_to_utf8, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + result |= 8; + iconv_close (cd_88591_to_utf8); + } + } +#endif + /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is + provided. */ + if (/* Try standardized names. */ + iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) + /* Try IRIX, OSF/1 names. */ + && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) + /* Try AIX names. */ + && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) + /* Try HP-UX names. */ + && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) + result |= 16; + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + am_cv_func_iconv_works=yes +else + am_cv_func_iconv_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + LIBS="$am_save_LIBS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 +$as_echo "$am_cv_func_iconv_works" >&6; } + case "$am_cv_func_iconv_works" in + *no) am_func_iconv=no am_cv_lib_iconv=no ;; + *) am_func_iconv=yes ;; + esac + else + am_func_iconv=no am_cv_lib_iconv=no + fi + if test "$am_func_iconv" = yes; then + +$as_echo "#define HAVE_ICONV 1" >>confdefs.h + + fi + if test "$am_cv_lib_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 +$as_echo_n "checking how to link with libiconv... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 +$as_echo "$LIBICONV" >&6; } + else + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + + + + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libintl-prefix was given. +if test "${with_libintl_prefix+set}" = set; then : + withval=$with_libintl_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBINTL= + LTLIBINTL= + INCINTL= + LIBINTL_PREFIX= + HAVE_LIBINTL= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='intl ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'intl'; then + LIBINTL_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'intl'; then + LIBINTL_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" + ;; + esac + done + fi + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" + done + fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 +$as_echo_n "checking for GNU gettext in libintl... " >&6; } +if eval \${$gt_func_gnugettext_libintl+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); + +int +main () +{ + +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$gt_func_gnugettext_libintl=yes" +else + eval "$gt_func_gnugettext_libintl=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); + +int +main () +{ + +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + eval "$gt_func_gnugettext_libintl=yes" + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS" +fi +eval ac_res=\$$gt_func_gnugettext_libintl + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + fi + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ + || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + + + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + +$as_echo "#define ENABLE_NLS 1" >>confdefs.h + + else + USE_NLS=no + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 +$as_echo_n "checking whether to use NLS... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } + if test "$USE_NLS" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 +$as_echo_n "checking where the gettext function comes from... " >&6; } + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + gt_source="external libintl" + else + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 +$as_echo "$gt_source" >&6; } + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 +$as_echo_n "checking how to link with libintl... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 +$as_echo "$LIBINTL" >&6; } + + for element in $INCINTL; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + fi + + +$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h + + +$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h + + fi + + POSUB=po + fi + + + + INTLLIBS="$LIBINTL" + + + + + + +# autoheader templates for AM_GNU_GETTEXT checks. + + + + + + +# Check for GNU C Library + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU C Library" >&5 +$as_echo_n "checking for GNU C Library... " >&6; } +if ${yasm_cv_header_gnulib+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #ifdef __GNU_LIBRARY__ + gnulib + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "gnulib" >/dev/null 2>&1; then : + yasm_cv_header_gnulib=yes +else + yasm_cv_header_gnulib=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $yasm_cv_header_gnulib" >&5 +$as_echo "$yasm_cv_header_gnulib" >&6; } +if test "$yasm_cv_header_gnulib" = yes; then + $as_echo "#define HAVE_GNU_C_LIBRARY 1" >>confdefs.h + +fi + +# Force x86 architecture only for now. +ARCH=x86 + + + +# Require things for --enable-maintainer-mode option. +if test "$USE_MAINTAINER_MODE" = "yes"; then + # Enable debugging + if test "$debugging" != "no"; then + debugging=yes + fi + + # Enable more warnings + if test "$GCC" = "yes"; then + MORE_CFLAGS="$MORE_CFLAGS -W" + MORE_CFLAGS="$MORE_CFLAGS -Waggregate-return" + MORE_CFLAGS="$MORE_CFLAGS -Wbad-function-cast" + MORE_CFLAGS="$MORE_CFLAGS -Wcast-align" + MORE_CFLAGS="$MORE_CFLAGS -Wcast-qual" + MORE_CFLAGS="$MORE_CFLAGS -Wchar-subscripts" +# MORE_CFLAGS="$MORE_CFLAGS -Wconversion" +# MORE_CFLAGS="$MORE_CFLAGS -Wdeclaration-after-statement" +# MORE_CFLAGS="$MORE_CFLAGS -Wendif-labels" + MORE_CFLAGS="$MORE_CFLAGS -Winline" + MORE_CFLAGS="$MORE_CFLAGS -Wmissing-declarations" + MORE_CFLAGS="$MORE_CFLAGS -Wmissing-prototypes" + MORE_CFLAGS="$MORE_CFLAGS -Wnested-externs" + MORE_CFLAGS="$MORE_CFLAGS -Wpointer-arith" + MORE_CFLAGS="$MORE_CFLAGS -Wreturn-type" + MORE_CFLAGS="$MORE_CFLAGS -Wshadow" + MORE_CFLAGS="$MORE_CFLAGS -Wsign-compare" + MORE_CFLAGS="$MORE_CFLAGS -Wstrict-prototypes" + MORE_CFLAGS="$MORE_CFLAGS -Wswitch" + MORE_CFLAGS="$MORE_CFLAGS -Wwrite-strings" + MORE_CFLAGS="$MORE_CFLAGS -Wno-undef" +# MORE_CFLAGS="$MORE_CFLAGS -Wno-unused" + MORE_CFLAGS="$MORE_CFLAGS -Wno-unused-parameter" + fi +fi + +# +# Add some more CFLAGS for various options. +# + +if test "$debugging" = "no" ; then + + CFLAGS="`echo $CFLAGS' ' | sed -e 's/-g[0-9] //g' | sed -e 's/-g//g'`" + +fi + +# Turn warnings into errors +if test "$warnerror" = "yes"; then + if test "$GCC" = "yes"; then + MORE_CFLAGS="$MORE_CFLAGS -Werror" + fi +fi + +# Enable output of profiling information +if test "$profiling" = "yes"; then + if test "$GCC" = "yes"; then + MORE_CFLAGS="$MORE_CFLAGS -pg" + fi +fi + +# Enable output of gcov information +if test "$gcov" = "yes"; then + if test "$GCC" = "yes"; then + MORE_CFLAGS="$MORE_CFLAGS -fprofile-arcs -ftest-coverage" + fi +fi + +# If we're using GCC, then we can turn on -ansi -pedantic -Wall too. +if test "$USE_MAINTAINER_MODE" = "yes"; then + if test "$GCC" = yes; then + MORE_CFLAGS="-ansi -pedantic -Wall $MORE_CFLAGS" + fi +fi + + + + +if test "${build}" != "${host}" ; then + CC_FOR_BUILD=${CC_FOR_BUILD-cc} + CCLD_FOR_BUILD=${CCLD_FOR_BUILD-cc} +else + CC_FOR_BUILD="\$(CC)" + CCLD_FOR_BUILD="\$(CC)" +fi + + + + +if test "$build" != "$target" || test "$build" != "$host"; then + CPP_PROG="${CPP_FOR_HOST-cc -E}" +else + CPP_PROG="${CPP}" +fi + +cat >>confdefs.h <<_ACEOF +#define CPP_PROG "${CPP_PROG}" +_ACEOF + + +# Detect if we have Python +if test x$enable_python = xno; then + have_python=no +else + { $as_echo "$as_me:${as_lineno-$LINENO}: Checking for Python" >&5 +$as_echo "$as_me: Checking for Python" >&6;} + have_python=no + + + + + + + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version is >= 2.4" >&5 +$as_echo_n "checking whether $PYTHON version is >= 2.4... " >&6; } + prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '2.4'.split('.'))) + [0, 0, 0] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] +sys.exit(sys.hexversion < minverhex)" + if { echo "$as_me:$LINENO: $PYTHON -c "$prog"" >&5 + ($PYTHON -c "$prog") >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "Python interpreter is too old" "$LINENO" 5 +fi + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 2.4" >&5 +$as_echo_n "checking for a Python interpreter with version >= 2.4... " >&6; } +if ${am_cv_pathless_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else + + for am_cv_pathless_PYTHON in python python2 python3 python3.3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do + test "$am_cv_pathless_PYTHON" = none && break + prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '2.4'.split('.'))) + [0, 0, 0] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] +sys.exit(sys.hexversion < minverhex)" + if { echo "$as_me:$LINENO: $am_cv_pathless_PYTHON -c "$prog"" >&5 + ($am_cv_pathless_PYTHON -c "$prog") >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then : + break +fi + done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_pathless_PYTHON" >&5 +$as_echo "$am_cv_pathless_PYTHON" >&6; } + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + # Extract the first word of "$am_cv_pathless_PYTHON", so it can be a program name with args. +set dummy $am_cv_pathless_PYTHON; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + + + if test "$PYTHON" = :; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Python not found" >&5 +$as_echo "$as_me: WARNING: Python not found" >&2;} + else + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 +$as_echo_n "checking for $am_display_PYTHON version... " >&6; } +if ${am_cv_python_version+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 +$as_echo "$am_cv_python_version" >&6; } + PYTHON_VERSION=$am_cv_python_version + + + + PYTHON_PREFIX='${prefix}' + + PYTHON_EXEC_PREFIX='${exec_prefix}' + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 +$as_echo_n "checking for $am_display_PYTHON platform... " >&6; } +if ${am_cv_python_platform+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 +$as_echo "$am_cv_python_platform" >&6; } + PYTHON_PLATFORM=$am_cv_python_platform + + + # Just factor out some code duplication. + am_python_setup_sysconfig="\ +import sys +# Prefer sysconfig over distutils.sysconfig, for better compatibility +# with python 3.x. See automake bug#10227. +try: + import sysconfig +except ImportError: + can_use_sysconfig = 0 +else: + can_use_sysconfig = 1 +# Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs: +# +try: + from platform import python_implementation + if python_implementation() == 'CPython' and sys.version[:3] == '2.7': + can_use_sysconfig = 0 +except ImportError: + pass" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 +$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } +if ${am_cv_python_pythondir+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c " +$am_python_setup_sysconfig +if can_use_sysconfig: + sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'}) +else: + from distutils import sysconfig + sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix') +sys.stdout.write(sitedir)"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 +$as_echo "$am_cv_python_pythondir" >&6; } + pythondir=$am_cv_python_pythondir + + + + pkgpythondir=\${pythondir}/$PACKAGE + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 +$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } +if ${am_cv_python_pyexecdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c " +$am_python_setup_sysconfig +if can_use_sysconfig: + sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'}) +else: + from distutils import sysconfig + sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix') +sys.stdout.write(sitedir)"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 +$as_echo "$am_cv_python_pyexecdir" >&6; } + pyexecdir=$am_cv_python_pyexecdir + + + + pkgpyexecdir=\${pyexecdir}/$PACKAGE + + + + fi + + + + if test -z "$PYTHON" || test "$PYTHON" = : ; then + have_python=no + else + have_python=yes + fi + + if test x$have_python = xno ; then + if test x$enable_python = xyes ; then + as_fn_error $? "Python explicitly requested, but a suitable Python version was not found" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find a suitable version of Python" >&5 +$as_echo "$as_me: WARNING: Could not find a suitable version of Python" >&2;} + fi + fi +fi + +# Detect if we can build Python bindings +# (needs Python, Python headers, and Cython) +if test x$enable_python_bindings = xno; then + have_python_bindings=no +else + { $as_echo "$as_me:${as_lineno-$LINENO}: Checking to see if we can build Python bindings" >&5 +$as_echo "$as_me: Checking to see if we can build Python bindings" >&6;} + have_python_bindings=no + if test x$have_python = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Cython >= 0.11.3" >&5 +$as_echo_n "checking for Cython >= 0.11.3... " >&6; } + prog="import re, sys +from Cython.Compiler.Version import version +def get_int(arg): + matched = re.match(r'\d+', arg) + if matched is None: + return 0 + else: + return int(matched.group(0)) +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +ver = map(get_int, version.rstrip('abcdefghijklmnopqrstuvwxyz').split('.')) + [0, 0, 0] +verhex = 0 +for i in range(0, 4): verhex = (verhex << 8) + ver[i] +minver = map(get_int, '0.11.3'.split('.')) + [0, 0, 0] +minverhex = 0 +for i in range(0, 4): minverhex = (minverhex << 8) + minver[i] +sys.exit(verhex < minverhex)" + if { echo "$as_me:$LINENO: $PYTHON -c "$prog"" >&5 + ($PYTHON -c "$prog") >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + have_cython=yes +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + have_cython=no +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for headers required to compile python extensions" >&5 +$as_echo_n "checking for headers required to compile python extensions... " >&6; } +py_prefix=`$PYTHON -c "import sys; print sys.prefix"` +py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"` +PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" +if test "$py_prefix" != "$py_exec_prefix"; then + PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}" +fi + +save_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } +have_python_headers=yes +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } +have_python_headers=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +CPPFLAGS="$save_CPPFLAGS" + + + if test x$have_cython = xyes -a x$have_python_headers = xyes ; then + have_python_bindings=yes + fi + fi + + if test x$have_python_bindings = xno ; then + if test x$enable_python_bindings = xyes ; then + as_fn_error $? "Building Python bindings explicitly requested, but can't build Python bindings because either Cython, Python headers or a suitable Python version was not found" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Couldn't find either Cython, the Python headers or a suitable version of Python, not building Python bindings" >&5 +$as_echo "$as_me: WARNING: Couldn't find either Cython, the Python headers or a suitable version of Python, not building Python bindings" >&2;} + fi + fi +fi + + if test x$have_python = xyes; then + HAVE_PYTHON_TRUE= + HAVE_PYTHON_FALSE='#' +else + HAVE_PYTHON_TRUE='#' + HAVE_PYTHON_FALSE= +fi + + if test x$have_python_bindings = xyes; then + HAVE_PYTHON_BINDINGS_TRUE= + HAVE_PYTHON_BINDINGS_FALSE='#' +else + HAVE_PYTHON_BINDINGS_TRUE='#' + HAVE_PYTHON_BINDINGS_FALSE= +fi + + +ac_config_files="$ac_config_files Makefile po/Makefile.in" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUILD_MAN_TRUE}" && test -z "${BUILD_MAN_FALSE}"; then + as_fn_error $? "conditional \"BUILD_MAN\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_PYTHON_TRUE}" && test -z "${HAVE_PYTHON_FALSE}"; then + as_fn_error $? "conditional \"HAVE_PYTHON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_PYTHON_BINDINGS_TRUE}" && test -z "${HAVE_PYTHON_BINDINGS_FALSE}"; then + as_fn_error $? "conditional \"HAVE_PYTHON_BINDINGS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by yasm $as_me 1.3.0, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +yasm config.status 1.3.0 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" +# variables for create stdint.h replacement +PACKAGE="$PACKAGE" +VERSION="$VERSION" +ac_stdint_h="$ac_stdint_h" +_ac_stdint_h=`$as_echo "_$PACKAGE-$ac_stdint_h" | $as_tr_cpp` +ac_cv_stdint_message="$ac_cv_stdint_message" +ac_cv_header_stdint_t="$ac_cv_header_stdint_t" +ac_cv_header_stdint_x="$ac_cv_header_stdint_x" +ac_cv_header_stdint_o="$ac_cv_header_stdint_o" +ac_cv_header_stdint_u="$ac_cv_header_stdint_u" +ac_cv_type_uint64_t="$ac_cv_type_uint64_t" +ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t" +ac_cv_char_data_model="$ac_cv_char_data_model" +ac_cv_long_data_model="$ac_cv_long_data_model" +ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t" +ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t" +ac_cv_type_intmax_t="$ac_cv_type_intmax_t" + +# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake < 1.5. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "$ac_stdint_h") CONFIG_COMMANDS="$CONFIG_COMMANDS $ac_stdint_h" ;; + "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "$ac_stdint_h":C) +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_stdint_h : $_ac_stdint_h" >&5 +$as_echo "$as_me: creating $ac_stdint_h : $_ac_stdint_h" >&6;} +ac_stdint=$tmp/_stdint.h + +echo "#ifndef" $_ac_stdint_h >$ac_stdint +echo "#define" $_ac_stdint_h "1" >>$ac_stdint +echo "#ifndef" _GENERATED_STDINT_H >>$ac_stdint +echo "#define" _GENERATED_STDINT_H '"'$PACKAGE $VERSION'"' >>$ac_stdint +echo "/* generated $ac_cv_stdint_message */" >>$ac_stdint +if test "_$ac_cv_header_stdint_t" != "_" ; then +echo "#define _STDINT_HAVE_STDINT_H" "1" >>$ac_stdint +echo "#include " >>$ac_stdint +echo "#endif" >>$ac_stdint +echo "#endif" >>$ac_stdint +else + +cat >>$ac_stdint < +#else +#include + +/* .................... configured part ............................ */ + +STDINT_EOF + +echo "/* whether we have a C99 compatible stdint header file */" >>$ac_stdint +if test "_$ac_cv_header_stdint_x" != "_" ; then + ac_header="$ac_cv_header_stdint_x" + echo "#define _STDINT_HEADER_INTPTR" '"'"$ac_header"'"' >>$ac_stdint +else + echo "/* #undef _STDINT_HEADER_INTPTR */" >>$ac_stdint +fi + +echo "/* whether we have a C96 compatible inttypes header file */" >>$ac_stdint +if test "_$ac_cv_header_stdint_o" != "_" ; then + ac_header="$ac_cv_header_stdint_o" + echo "#define _STDINT_HEADER_UINT32" '"'"$ac_header"'"' >>$ac_stdint +else + echo "/* #undef _STDINT_HEADER_UINT32 */" >>$ac_stdint +fi + +echo "/* whether we have a BSD compatible inet types header */" >>$ac_stdint +if test "_$ac_cv_header_stdint_u" != "_" ; then + ac_header="$ac_cv_header_stdint_u" + echo "#define _STDINT_HEADER_U_INT32" '"'"$ac_header"'"' >>$ac_stdint +else + echo "/* #undef _STDINT_HEADER_U_INT32 */" >>$ac_stdint +fi + +echo "" >>$ac_stdint + +if test "_$ac_header" != "_" ; then if test "$ac_header" != "stddef.h" ; then + echo "#include <$ac_header>" >>$ac_stdint + echo "" >>$ac_stdint +fi fi + +echo "/* which 64bit typedef has been found */" >>$ac_stdint +if test "$ac_cv_type_uint64_t" = "yes" ; then +echo "#define _STDINT_HAVE_UINT64_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_UINT64_T */" >>$ac_stdint +fi +if test "$ac_cv_type_u_int64_t" = "yes" ; then +echo "#define _STDINT_HAVE_U_INT64_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_U_INT64_T */" >>$ac_stdint +fi +echo "" >>$ac_stdint + +echo "/* which type model has been detected */" >>$ac_stdint +if test "_$ac_cv_char_data_model" != "_" ; then +echo "#define _STDINT_CHAR_MODEL" "$ac_cv_char_data_model" >>$ac_stdint +echo "#define _STDINT_LONG_MODEL" "$ac_cv_long_data_model" >>$ac_stdint +else +echo "/* #undef _STDINT_CHAR_MODEL // skipped */" >>$ac_stdint +echo "/* #undef _STDINT_LONG_MODEL // skipped */" >>$ac_stdint +fi +echo "" >>$ac_stdint + +echo "/* whether int_least types were detected */" >>$ac_stdint +if test "$ac_cv_type_int_least32_t" = "yes"; then +echo "#define _STDINT_HAVE_INT_LEAST32_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_INT_LEAST32_T */" >>$ac_stdint +fi +echo "/* whether int_fast types were detected */" >>$ac_stdint +if test "$ac_cv_type_int_fast32_t" = "yes"; then +echo "#define _STDINT_HAVE_INT_FAST32_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_INT_FAST32_T */" >>$ac_stdint +fi +echo "/* whether intmax_t type was detected */" >>$ac_stdint +if test "$ac_cv_type_intmax_t" = "yes"; then +echo "#define _STDINT_HAVE_INTMAX_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_INTMAX_T */" >>$ac_stdint +fi +echo "" >>$ac_stdint + + cat >>$ac_stdint <= 199901L +#define _HAVE_UINT64_T +#define _HAVE_LONGLONG_UINT64_T +typedef long long int64_t; +typedef unsigned long long uint64_t; + +#elif !defined __STRICT_ANSI__ +#if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__ +#define _HAVE_UINT64_T +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; + +#elif defined __GNUC__ || defined __MWERKS__ || defined __ELF__ +/* note: all ELF-systems seem to have loff-support which needs 64-bit */ +#if !defined _NO_LONGLONG +#define _HAVE_UINT64_T +#define _HAVE_LONGLONG_UINT64_T +typedef long long int64_t; +typedef unsigned long long uint64_t; +#endif + +#elif defined __alpha || (defined __mips && defined _ABIN32) +#if !defined _NO_LONGLONG +typedef long int64_t; +typedef unsigned long uint64_t; +#endif + /* compiler/cpu type to define int64_t */ +#endif +#endif +#endif + +#if defined _STDINT_HAVE_U_INT_TYPES +/* int8_t int16_t int32_t defined by inet code, redeclare the u_intXX types */ +typedef u_int8_t uint8_t; +typedef u_int16_t uint16_t; +typedef u_int32_t uint32_t; + +/* glibc compatibility */ +#ifndef __int8_t_defined +#define __int8_t_defined +#endif +#endif + +#ifdef _STDINT_NEED_INT_MODEL_T +/* we must guess all the basic types. Apart from byte-adressable system, */ +/* there a few 32-bit-only dsp-systems that we guard with BYTE_MODEL 8-} */ +/* (btw, those nibble-addressable systems are way off, or so we assume) */ + + +#if defined _STDINT_BYTE_MODEL +#if _STDINT_LONG_MODEL+0 == 242 +/* 2:4:2 = IP16 = a normal 16-bit system */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned long uint32_t; +#ifndef __int8_t_defined +#define __int8_t_defined +typedef char int8_t; +typedef short int16_t; +typedef long int32_t; +#endif +#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL == 444 +/* 2:4:4 = LP32 = a 32-bit system derived from a 16-bit */ +/* 4:4:4 = ILP32 = a normal 32-bit system */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#ifndef __int8_t_defined +#define __int8_t_defined +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +#endif +#elif _STDINT_LONG_MODEL+0 == 484 || _STDINT_LONG_MODEL+0 == 488 +/* 4:8:4 = IP32 = a 32-bit system prepared for 64-bit */ +/* 4:8:8 = LP64 = a normal 64-bit system */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#ifndef __int8_t_defined +#define __int8_t_defined +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +#endif +/* this system has a "long" of 64bit */ +#ifndef _HAVE_UINT64_T +#define _HAVE_UINT64_T +typedef unsigned long uint64_t; +typedef long int64_t; +#endif +#elif _STDINT_LONG_MODEL+0 == 448 +/* LLP64 a 64-bit system derived from a 32-bit system */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#ifndef __int8_t_defined +#define __int8_t_defined +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +#endif +/* assuming the system has a "long long" */ +#ifndef _HAVE_UINT64_T +#define _HAVE_UINT64_T +#define _HAVE_LONGLONG_UINT64_T +typedef unsigned long long uint64_t; +typedef long long int64_t; +#endif +#else +#define _STDINT_NO_INT32_T +#endif +#else +#define _STDINT_NO_INT8_T +#define _STDINT_NO_INT32_T +#endif +#endif + +/* + * quote from SunOS-5.8 sys/inttypes.h: + * Use at your own risk. As of February 1996, the committee is squarely + * behind the fixed sized types; the "least" and "fast" types are still being + * discussed. The probability that the "fast" types may be removed before + * the standard is finalized is high enough that they are not currently + * implemented. + */ + +#if defined _STDINT_NEED_INT_LEAST_T +typedef int8_t int_least8_t; +typedef int16_t int_least16_t; +typedef int32_t int_least32_t; +#ifdef _HAVE_UINT64_T +typedef int64_t int_least64_t; +#endif + +typedef uint8_t uint_least8_t; +typedef uint16_t uint_least16_t; +typedef uint32_t uint_least32_t; +#ifdef _HAVE_UINT64_T +typedef uint64_t uint_least64_t; +#endif + /* least types */ +#endif + +#if defined _STDINT_NEED_INT_FAST_T +typedef int8_t int_fast8_t; +typedef int int_fast16_t; +typedef int32_t int_fast32_t; +#ifdef _HAVE_UINT64_T +typedef int64_t int_fast64_t; +#endif + +typedef uint8_t uint_fast8_t; +typedef unsigned uint_fast16_t; +typedef uint32_t uint_fast32_t; +#ifdef _HAVE_UINT64_T +typedef uint64_t uint_fast64_t; +#endif + /* fast types */ +#endif + +#ifdef _STDINT_NEED_INTMAX_T +#ifdef _HAVE_UINT64_T +typedef int64_t intmax_t; +typedef uint64_t uintmax_t; +#else +typedef long intmax_t; +typedef unsigned long uintmax_t; +#endif +#endif + +#ifdef _STDINT_NEED_INTPTR_T +#ifndef __intptr_t_defined +#define __intptr_t_defined +/* we encourage using "long" to store pointer values, never use "int" ! */ +#if _STDINT_LONG_MODEL+0 == 242 || _STDINT_LONG_MODEL+0 == 484 +typedef unsinged int uintptr_t; +typedef int intptr_t; +#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL+0 == 444 +typedef unsigned long uintptr_t; +typedef long intptr_t; +#elif _STDINT_LONG_MODEL+0 == 448 && defined _HAVE_UINT64_T +typedef uint64_t uintptr_t; +typedef int64_t intptr_t; +#else /* matches typical system types ILP32 and LP64 - but not IP16 or LLP64 */ +typedef unsigned long uintptr_t; +typedef long intptr_t; +#endif +#endif +#endif + +/* The ISO C99 standard specifies that in C++ implementations these + should only be defined if explicitly requested. */ +#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS +#ifndef UINT32_C + +/* Signed. */ +# define INT8_C(c) c +# define INT16_C(c) c +# define INT32_C(c) c +# ifdef _HAVE_LONGLONG_UINT64_T +# define INT64_C(c) c ## L +# else +# define INT64_C(c) c ## LL +# endif + +/* Unsigned. */ +# define UINT8_C(c) c ## U +# define UINT16_C(c) c ## U +# define UINT32_C(c) c ## U +# ifdef _HAVE_LONGLONG_UINT64_T +# define UINT64_C(c) c ## UL +# else +# define UINT64_C(c) c ## ULL +# endif + +/* Maximal type. */ +# ifdef _HAVE_LONGLONG_UINT64_T +# define INTMAX_C(c) c ## L +# define UINTMAX_C(c) c ## UL +# else +# define INTMAX_C(c) c ## LL +# define UINTMAX_C(c) c ## ULL +# endif + + /* literalnumbers */ +#endif +#endif + +/* These limits are merily those of a two complement byte-oriented system */ + +/* Minimum of signed integral types. */ +# define INT8_MIN (-128) +# define INT16_MIN (-32767-1) +# define INT32_MIN (-2147483647-1) +# define INT64_MIN (-__INT64_C(9223372036854775807)-1) +/* Maximum of signed integral types. */ +# define INT8_MAX (127) +# define INT16_MAX (32767) +# define INT32_MAX (2147483647) +# define INT64_MAX (__INT64_C(9223372036854775807)) + +/* Maximum of unsigned integral types. */ +# define UINT8_MAX (255) +# define UINT16_MAX (65535) +# define UINT32_MAX (4294967295U) +# define UINT64_MAX (__UINT64_C(18446744073709551615)) + +/* Minimum of signed integral types having a minimum size. */ +# define INT_LEAST8_MIN INT8_MIN +# define INT_LEAST16_MIN INT16_MIN +# define INT_LEAST32_MIN INT32_MIN +# define INT_LEAST64_MIN INT64_MIN +/* Maximum of signed integral types having a minimum size. */ +# define INT_LEAST8_MAX INT8_MAX +# define INT_LEAST16_MAX INT16_MAX +# define INT_LEAST32_MAX INT32_MAX +# define INT_LEAST64_MAX INT64_MAX + +/* Maximum of unsigned integral types having a minimum size. */ +# define UINT_LEAST8_MAX UINT8_MAX +# define UINT_LEAST16_MAX UINT16_MAX +# define UINT_LEAST32_MAX UINT32_MAX +# define UINT_LEAST64_MAX UINT64_MAX + + /* shortcircuit*/ +#endif + /* once */ +#endif +#endif +STDINT_EOF +fi + if cmp -s $ac_stdint_h $ac_stdint 2>/dev/null; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_stdint_h is unchanged" >&5 +$as_echo "$as_me: $ac_stdint_h is unchanged" >&6;} + else + ac_dir=`$as_dirname -- "$ac_stdint_h" || +$as_expr X"$ac_stdint_h" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_stdint_h" : 'X\(//\)[^/]' \| \ + X"$ac_stdint_h" : 'X\(//\)$' \| \ + X"$ac_stdint_h" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_stdint_h" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + rm -f $ac_stdint_h + mv $ac_stdint $ac_stdint_h + fi + ;; + "po-directories":C) + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + gt_tab=`printf '\t'` + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/third-party/yasm/yasm-1.3.0/configure.ac b/third-party/yasm/yasm-1.3.0/configure.ac new file mode 100644 index 0000000000..01b61097ff --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/configure.ac @@ -0,0 +1,313 @@ +# Process this file with autoconf to produce a configure script. + +# +# autoconf setup +# +AC_PREREQ(2.53) +AC_INIT([yasm], + m4_esyscmd([./YASM-VERSION-GEN.sh && tr -d '\n' + #ifdef __GNU_LIBRARY__ + gnulib + #endif + ], yasm_cv_header_gnulib=yes, yasm_cv_header_gnulib=no)) +if test "$yasm_cv_header_gnulib" = yes; then + AC_DEFINE([HAVE_GNU_C_LIBRARY]) +fi + +# Force x86 architecture only for now. +ARCH=x86 +AC_SUBST([ARCH]) +AC_SUBST([GCC]) + +# Require things for --enable-maintainer-mode option. +if test "$USE_MAINTAINER_MODE" = "yes"; then + # Enable debugging + if test "$debugging" != "no"; then + debugging=yes + fi + + # Enable more warnings + if test "$GCC" = "yes"; then + MORE_CFLAGS="$MORE_CFLAGS -W" + MORE_CFLAGS="$MORE_CFLAGS -Waggregate-return" + MORE_CFLAGS="$MORE_CFLAGS -Wbad-function-cast" + MORE_CFLAGS="$MORE_CFLAGS -Wcast-align" + MORE_CFLAGS="$MORE_CFLAGS -Wcast-qual" + MORE_CFLAGS="$MORE_CFLAGS -Wchar-subscripts" +# MORE_CFLAGS="$MORE_CFLAGS -Wconversion" +# MORE_CFLAGS="$MORE_CFLAGS -Wdeclaration-after-statement" +# MORE_CFLAGS="$MORE_CFLAGS -Wendif-labels" + MORE_CFLAGS="$MORE_CFLAGS -Winline" + MORE_CFLAGS="$MORE_CFLAGS -Wmissing-declarations" + MORE_CFLAGS="$MORE_CFLAGS -Wmissing-prototypes" + MORE_CFLAGS="$MORE_CFLAGS -Wnested-externs" + MORE_CFLAGS="$MORE_CFLAGS -Wpointer-arith" + MORE_CFLAGS="$MORE_CFLAGS -Wreturn-type" + MORE_CFLAGS="$MORE_CFLAGS -Wshadow" + MORE_CFLAGS="$MORE_CFLAGS -Wsign-compare" + MORE_CFLAGS="$MORE_CFLAGS -Wstrict-prototypes" + MORE_CFLAGS="$MORE_CFLAGS -Wswitch" + MORE_CFLAGS="$MORE_CFLAGS -Wwrite-strings" + MORE_CFLAGS="$MORE_CFLAGS -Wno-undef" +# MORE_CFLAGS="$MORE_CFLAGS -Wno-unused" + MORE_CFLAGS="$MORE_CFLAGS -Wno-unused-parameter" + fi +fi + +# +# Add some more CFLAGS for various options. +# + +if test "$debugging" = "no" ; then + changequote(,) + CFLAGS="`echo $CFLAGS' ' | sed -e 's/-g[0-9] //g' | sed -e 's/-g//g'`" + changequote([,]) +fi + +# Turn warnings into errors +if test "$warnerror" = "yes"; then + if test "$GCC" = "yes"; then + MORE_CFLAGS="$MORE_CFLAGS -Werror" + fi +fi + +# Enable output of profiling information +if test "$profiling" = "yes"; then + if test "$GCC" = "yes"; then + MORE_CFLAGS="$MORE_CFLAGS -pg" + fi +fi + +# Enable output of gcov information +if test "$gcov" = "yes"; then + if test "$GCC" = "yes"; then + MORE_CFLAGS="$MORE_CFLAGS -fprofile-arcs -ftest-coverage" + fi +fi + +# If we're using GCC, then we can turn on -ansi -pedantic -Wall too. +if test "$USE_MAINTAINER_MODE" = "yes"; then + if test "$GCC" = yes; then + MORE_CFLAGS="-ansi -pedantic -Wall $MORE_CFLAGS" + fi +fi +AC_SUBST(MORE_CFLAGS) + +AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler]) +AC_ARG_VAR(CCLD_FOR_BUILD,[build system C linker frontend]) +if test "${build}" != "${host}" ; then + CC_FOR_BUILD=${CC_FOR_BUILD-cc} + CCLD_FOR_BUILD=${CCLD_FOR_BUILD-cc} +else + CC_FOR_BUILD="\$(CC)" + CCLD_FOR_BUILD="\$(CC)" +fi +AC_SUBST(CC_FOR_BUILD) +AC_SUBST(CCLD_FOR_BUILD) + +AC_ARG_VAR(CPP_FOR_HOST,[host system C preprocessor]) +if test "$build" != "$target" || test "$build" != "$host"; then + CPP_PROG="${CPP_FOR_HOST-cc -E}" +else + CPP_PROG="${CPP}" +fi +AC_DEFINE_UNQUOTED([CPP_PROG], "${CPP_PROG}", [Command name to run C preprocessor]) + +# Detect if we have Python +if test x$enable_python = xno; then + have_python=no +else + AC_MSG_NOTICE([Checking for Python]) + have_python=no + AM_PATH_PYTHON(2.4,[],[AC_MSG_WARN([Python not found])]) + + if test -z "$PYTHON" || test "$PYTHON" = : ; then + have_python=no + else + have_python=yes + fi + + if test x$have_python = xno ; then + if test x$enable_python = xyes ; then + AC_MSG_ERROR([Python explicitly requested, but a suitable Python version was not found]) + else + AC_MSG_WARN([Could not find a suitable version of Python]) + fi + fi +fi + +# Detect if we can build Python bindings +# (needs Python, Python headers, and Cython) +if test x$enable_python_bindings = xno; then + have_python_bindings=no +else + AC_MSG_NOTICE([Checking to see if we can build Python bindings]) + have_python_bindings=no + if test x$have_python = xyes; then + AC_MSG_CHECKING([for Cython >= 0.11.3]) + CYTHON_CHECK_VERSION(0.11.3, [AC_MSG_RESULT(yes) + have_cython=yes], + [AC_MSG_RESULT(no) + have_cython=no]) + + AM_CHECK_PYTHON_HEADERS(have_python_headers=yes,have_python_headers=no) + + if test x$have_cython = xyes -a x$have_python_headers = xyes ; then + have_python_bindings=yes + fi + fi + + if test x$have_python_bindings = xno ; then + if test x$enable_python_bindings = xyes ; then + AC_MSG_ERROR([Building Python bindings explicitly requested, but can't build Python bindings because either Cython, Python headers or a suitable Python version was not found]) + else + AC_MSG_WARN([Couldn't find either Cython, the Python headers or a suitable version of Python, not building Python bindings]) + fi + fi +fi + +AM_CONDITIONAL(HAVE_PYTHON, test x$have_python = xyes) +AM_CONDITIONAL(HAVE_PYTHON_BINDINGS, test x$have_python_bindings = xyes) + +AC_CONFIG_FILES([Makefile + po/Makefile.in +]) +AC_OUTPUT diff --git a/third-party/yasm/yasm-1.3.0/frontends/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/frontends/CMakeLists.txt new file mode 100644 index 0000000000..9858b6165b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/CMakeLists.txt @@ -0,0 +1,3 @@ +ADD_SUBDIRECTORY(yasm) +ADD_SUBDIRECTORY(tasm) +ADD_SUBDIRECTORY(vsyasm) diff --git a/third-party/yasm/yasm-1.3.0/frontends/Makefile.inc b/third-party/yasm/yasm-1.3.0/frontends/Makefile.inc new file mode 100644 index 0000000000..295639e8ae --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/Makefile.inc @@ -0,0 +1,7 @@ +EXTRA_DIST += frontends/yasm/Makefile.inc +EXTRA_DIST += frontends/tasm/Makefile.inc +EXTRA_DIST += frontends/vsyasm/Makefile.inc + +include frontends/yasm/Makefile.inc +include frontends/tasm/Makefile.inc +include frontends/vsyasm/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/frontends/tasm/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/frontends/tasm/CMakeLists.txt new file mode 100644 index 0000000000..e275ab8401 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/tasm/CMakeLists.txt @@ -0,0 +1,37 @@ +INCLUDE_DIRECTORIES( + ${CMAKE_CURRENT_BINARY_DIR} + ${yasm_SOURCE_DIR}/frontends/yasm + ) + +ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/license.c + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/frontends/yasm/genstring.py + license_msg + ${CMAKE_CURRENT_BINARY_DIR}/license.c + ${CMAKE_SOURCE_DIR}/COPYING + MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/COPYING + DEPENDS ${CMAKE_SOURCE_DIR}/frontends/yasm/genstring.py + ) + +SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}) + +IF(BUILD_SHARED_LIBS) + ADD_EXECUTABLE(ytasm + tasm.c + tasm-options.c + ${yasm_SOURCE_DIR}/frontends/yasm/yasm-plugin.c + ) + TARGET_LINK_LIBRARIES(ytasm libyasm ${LIBDL}) +ELSE(BUILD_SHARED_LIBS) + ADD_EXECUTABLE(ytasm + tasm.c + tasm-options.c + ) + TARGET_LINK_LIBRARIES(ytasm yasmstd libyasm) +ENDIF(BUILD_SHARED_LIBS) + +SET_SOURCE_FILES_PROPERTIES(tasm.c PROPERTIES + OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/license.c + ) + +INSTALL(TARGETS ytasm RUNTIME DESTINATION bin) diff --git a/third-party/yasm/yasm-1.3.0/frontends/tasm/Makefile.inc b/third-party/yasm/yasm-1.3.0/frontends/tasm/Makefile.inc new file mode 100644 index 0000000000..9826e1b9b9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/tasm/Makefile.inc @@ -0,0 +1,7 @@ +bin_PROGRAMS += ytasm + +ytasm_SOURCES = frontends/tasm/tasm.c +ytasm_SOURCES += frontends/tasm/tasm-options.c +ytasm_SOURCES += frontends/tasm/tasm-options.h + +ytasm_LDADD = libyasm.a $(INTLLIBS) diff --git a/third-party/yasm/yasm-1.3.0/frontends/tasm/tasm-options.c b/third-party/yasm/yasm-1.3.0/frontends/tasm/tasm-options.c new file mode 100644 index 0000000000..57c3bdfd15 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/tasm/tasm-options.c @@ -0,0 +1,127 @@ +/* + * Generic Options Support Header File + * + * Copyright (c) 2001 Stanislav Karchebny + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of other contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 +#include + +#include "tasm-options.h" + + +#ifdef __DEBUG__ +#define DEBUG(x) fprintf ## x ; +#else +#define DEBUG(x) +#endif + + +/* Options Parser */ +int +parse_cmdline(int argc, char **argv, opt_option *options, size_t nopts, + void (*print_error) (const char *fmt, ...)) +{ + int errors = 0, warnings = 0; + size_t i; + int got_it; + + DEBUG((stderr, "parse_cmdline: entered\n")); + + fail: + while (--argc) { + argv++; + + if (argv[0][0] == '/' && argv[0][1]) { /* opt */ + got_it = 0; + for (i = 0; i < nopts; i++) { + char *cmd = &argv[0][1]; + size_t len = strlen(options[i].opt); + if (yasm__strncasecmp(cmd, options[i].opt, len) == 0) { + char *param; + + param = &argv[0][1+len]; + if (options[i].takes_param) { + if (param[0] == '\0') { + print_error( + _("option `-%c' needs an argument!"), + options[i].opt); + errors++; + goto fail; + } else { + argc--; + argv++; + } + } else + param = NULL; + + if (!options[i].handler(cmd, param, options[i].extra)) + got_it = 1; + break; + } + } + if (!got_it) { + print_error(_("warning: unrecognized option `%s'"), + argv[0]); + warnings++; + } + } else { /* not an option, then it should be a file or something */ + + if (not_an_option_handler(argv[0])) + errors++; + } + } + + DEBUG((stderr, "parse_cmdline: finished\n")); + return errors; +} + +void +help_msg(const char *msg, const char *tail, opt_option *options, size_t nopts) +{ + char optbuf[100]; + size_t i; + + printf("%s", gettext(msg)); + + for (i = 0; i < nopts; i++) { + optbuf[0] = 0; + + if (options[i].takes_param) { + if (options[i].opt) + sprintf(optbuf, "/%s <%s>", options[i].opt, + options[i].param_desc ? options[i]. + param_desc : _("param")); + } else { + if (options[i].opt) + sprintf(optbuf, "/%s", options[i].opt); + } + + printf(" %-22s %s\n", optbuf, gettext(options[i].description)); + } + + printf("%s", gettext(tail)); +} diff --git a/third-party/yasm/yasm-1.3.0/frontends/tasm/tasm-options.h b/third-party/yasm/yasm-1.3.0/frontends/tasm/tasm-options.h new file mode 100644 index 0000000000..082409fc24 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/tasm/tasm-options.h @@ -0,0 +1,69 @@ +/* + * Generic Options Support Header File + * + * Copyright (c) 2001 Stanislav Karchebny + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + */ +#ifndef TASM_OPTIONS_H +#define TASM_OPTIONS_H + +/* an option structure + * operate on either -sopt, --lopt, -sopt or --lopt= + */ +typedef struct opt_option_s +{ + /* option */ + const char *opt; + + /* !=0 if option requires parameter, 0 if not */ + int takes_param; + + int (*handler) (char *cmd, /*@null@*/ char *param, int extra); + int extra; /* extra value for handler */ + + /* description to use in help_msg() */ + /*@observer@*/ const char *description; + + /* optional description for the param taken (NULL if not present) */ + /* (short - will be printed after option sopt/lopt) */ + /*@observer@*/ /*@null@*/ const char *param_desc; +} opt_option; + +/* handle everything that is not an option */ +int not_an_option_handler(char *param); + +/* parse command line calling handlers when appropriate + * argc, argv - pass directly from main(argc,argv) + * options - array of options + * nopts - options count + */ +int parse_cmdline(int argc, char **argv, opt_option *options, size_t nopts, + void (*print_error) (const char *fmt, ...)); + +/* display help message msg followed by list of options in options and followed + * by tail + */ +void help_msg(const char *msg, const char *tail, opt_option *options, + size_t nopts); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/frontends/tasm/tasm.c b/third-party/yasm/yasm-1.3.0/frontends/tasm/tasm.c new file mode 100644 index 0000000000..58954b6457 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/tasm/tasm.c @@ -0,0 +1,1009 @@ +/* + * Program entry point, command line parsing + * + * Copyright (C) 2001-2008 Peter Johnson + * Copyright (C) 2007-2008 Samuel Thibault + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include +#include +#include +#include + +#ifdef HAVE_LIBGEN_H +#include +#endif + +#include "tasm-options.h" + +#if defined(CMAKE_BUILD) && defined(BUILD_SHARED_LIBS) +#include "yasm-plugin.h" +#endif + +#include "license.c" + +#define DEFAULT_OBJFMT_MODULE "bin" + +#if defined(CMAKE_BUILD) && !defined(BUILD_SHARED_LIBS) +void yasm_init_plugin(void); +#endif + +/*@null@*/ /*@only@*/ static char *obj_filename = NULL, *in_filename = NULL; +/*@null@*/ /*@only@*/ static char *list_filename = NULL, *xref_filename = NULL; +/*@null@*/ /*@only@*/ static char *machine_name = NULL; +static int special_options = 0; +static int segment_ordering = 0; +static int cross_reference = 0; +static int floating_point = 0; +static int listing = 0; +static int expanded_listing = 0; +static int case_sensitivity = 0; +static int valid_length = -1; +/*@null@*/ /*@dependent@*/ static yasm_arch *cur_arch = NULL; +/*@null@*/ /*@dependent@*/ static const yasm_arch_module * + cur_arch_module = NULL; +/*@null@*/ /*@dependent@*/ static const yasm_parser_module * + cur_parser_module = NULL; +/*@null@*/ /*@dependent@*/ static yasm_preproc *cur_preproc = NULL; +/*@null@*/ /*@dependent@*/ static const yasm_preproc_module * + cur_preproc_module = NULL; +/*@null@*/ static char *objfmt_keyword = NULL; +/*@null@*/ /*@dependent@*/ static const yasm_objfmt_module * + cur_objfmt_module = NULL; +/*@null@*/ /*@dependent@*/ static const yasm_dbgfmt_module * + cur_dbgfmt_module = NULL; +/*@null@*/ /*@dependent@*/ static yasm_listfmt *cur_listfmt = NULL; +/*@null@*/ /*@dependent@*/ static const yasm_listfmt_module * + cur_listfmt_module = NULL; +static int warning_error = 0; /* warnings being treated as errors */ +static FILE *errfile; +/*@null@*/ /*@only@*/ static char *error_filename = NULL; + +/*@null@*/ /*@dependent@*/ static FILE *open_file(const char *filename, + const char *mode); +static void check_errors(/*@only@*/ yasm_errwarns *errwarns, + /*@only@*/ yasm_object *object, + /*@only@*/ yasm_linemap *linemap); +static void cleanup(/*@null@*/ /*@only@*/ yasm_object *object); + +/* Forward declarations: cmd line parser handlers */ +static int opt_special_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_segment_ordering_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_cross_reference_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_floating_point_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_ignore(char *cmd, /*@null@*/ char *param, int extra); +static int opt_listing_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_case_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_valid_length_handler(char *cmd, /*@null@*/ char *param, int extra); + +static int opt_warning_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_preproc_option(char *cmd, /*@null@*/ char *param, int extra); +static int opt_exe_handler(char *cmd, /*@null@*/ char *param, int extra); + +static /*@only@*/ char *replace_extension(const char *orig, /*@null@*/ + const char *ext, const char *def); +static void print_error(const char *fmt, ...); + +static /*@exits@*/ void handle_yasm_int_error(const char *file, + unsigned int line, + const char *message); +static /*@exits@*/ void handle_yasm_fatal(const char *message, va_list va); +static const char *handle_yasm_gettext(const char *msgid); +static void print_yasm_error(const char *filename, unsigned long line, + const char *msg, /*@null@*/ const char *xref_fn, + unsigned long xref_line, + /*@null@*/ const char *xref_msg); +static void print_yasm_warning(const char *filename, unsigned long line, + const char *msg); + +static void apply_preproc_builtins(void); +static void apply_preproc_standard_macros(const yasm_stdmac *stdmacs); +static void apply_preproc_saved_options(void); +static void print_list_keyword_desc(const char *name, const char *keyword); + +/* values for special_options */ +#define SPECIAL_SHOW_HELP 0x01 +#define SPECIAL_SHOW_VERSION 0x02 +#define SPECIAL_SHOW_LICENSE 0x04 + +#define SEGMENT_ORDERING_ALPHABETIC 0x01 +#define SEGMENT_ORDERING_SOURCE 0x02 + +#define FP_EMULATED 0x01 +#define FP_REAL 0x02 + +#define CASE_ALL 0x01 +#define CASE_GLOBALS 0x02 +#define CASE_NONE 0x04 + +#define DEBUG_FULL 0x01 +#define DEBUG_LINES 0x02 +#define DEBUG_NONE 0x04 + +/* command line options */ +static opt_option options[] = +{ + { "version", 0, opt_special_handler, SPECIAL_SHOW_VERSION, + N_("show version text"), NULL }, + { "license", 0, opt_special_handler, SPECIAL_SHOW_LICENSE, + N_("show license text"), NULL }, + { "a", 0, opt_segment_ordering_handler, SEGMENT_ORDERING_ALPHABETIC, + N_("Alphabetic segment ordering"), NULL }, + { "s", 0, opt_segment_ordering_handler, SEGMENT_ORDERING_SOURCE, + N_("Source segment ordering"), NULL }, + + { "c", 0, opt_cross_reference_handler, 0, + N_("Generate cross-reference in listing"), NULL }, + + { "d", 1, opt_preproc_option, 2, + N_("pre-define a macro, optionally to value"), N_("macro[=value]") }, + + { "e", 0, opt_floating_point_handler, FP_EMULATED, + N_("Emulated floating-point instructions (not supported)"), NULL }, + { "r", 0, opt_floating_point_handler, FP_REAL, + N_("Real floating-point instructions"), NULL }, + + { "h", 0, opt_special_handler, SPECIAL_SHOW_HELP, + N_("show help text"), NULL }, + { "?", 0, opt_special_handler, SPECIAL_SHOW_HELP, + N_("show help text"), NULL }, + + { "i", 1, opt_preproc_option, 0, + N_("add include path"), N_("path") }, + + { "j", 1, opt_ignore, 0, + N_("Jam in an assemble directive CMD (eg. /jIDEAL) (not supported)"), NULL }, + + { "k", 1, opt_ignore, 0, + N_("Hash table capacity (ignored)"), N_("# symbols") }, + + { "l", 0, opt_listing_handler, 0, + N_("Generate listing"), N_("l=normal listing, la=expanded listing") }, + + { "ml", 0, opt_case_handler, CASE_ALL, + N_("Case sensitivity on all symbols"), NULL }, + { "mx", 0, opt_case_handler, CASE_GLOBALS, + N_("Case sensitivity on global symbols"), NULL }, + { "mu", 0, opt_case_handler, CASE_NONE, + N_("No case sensitivity on symbols"), NULL }, + { "mv", 0, opt_valid_length_handler, 0, + N_("Set maximum valid length for symbols"), N_("length") }, + + { "m", 1, opt_ignore, 0, + N_("Allow multiple passes to resolve forward reference (ignored)"), N_("number of passes") }, + + { "n", 0, opt_ignore, 0, + N_("Suppress symbol tables in listing"), NULL }, + + { "o", 0, opt_ignore, 0, + N_("Object code"), N_("os: standard, o: standard w/overlays, op: Phar Lap, oi: IBM") }, + + { "p", 0, opt_ignore, 0, + N_("Check for code segment overrides in protected mode"), NULL }, + { "q", 0, opt_ignore, 0, + N_("Suppress OBJ records not needed for linking (ignored)"), NULL }, + { "t", 0, opt_ignore, 0, + N_("Suppress messages if successful assembly"), NULL }, + { "u", 0, opt_ignore, 0, + N_("Set version emulation"), N_("Version") }, + { "w", 1, opt_warning_handler, 0, + N_("Set warning level"), N_("w0=none, w1=w2=warnings on, w-xxx/w+xxx=disable/enable warning xxx") }, + { "x", 0, opt_ignore, 0, + N_("Include false conditionals in listing"), NULL }, + { "zi", 0, opt_ignore, DEBUG_FULL, + N_("Full debug info"), NULL }, + { "zd", 0, opt_ignore, DEBUG_LINES, + N_("Line numbers debug info"), NULL }, + { "zn", 0, opt_ignore, DEBUG_NONE, + N_("No debug info"), NULL }, + { "z", 0, opt_ignore, 0, + N_("Display source line with error message (ignored)"), NULL }, + + { "b", 0, opt_exe_handler, 0, + N_("Build a (very) basic .exe file"), NULL }, +}; + +/* version message */ +/*@observer@*/ static const char *version_msg[] = { + PACKAGE_STRING, + "Compiled on " __DATE__ ".", + "Copyright (c) 2001-2010 Peter Johnson and other Yasm developers.", + "Run yasm --license for licensing overview and summary." +}; + +/* help messages */ +/*@observer@*/ static const char *help_head = N_( + "usage: tasm [option]* source [,object] [,listing] [,xref] \n" + "Options:\n"); +/*@observer@*/ static const char *help_tail = N_( + "\n" + "source is asm source to be assembled.\n" + "\n" + "Sample invocation:\n" + " tasm /zi source.asm\n" + "\n" + "Report bugs to bug-yasm@tortall.net\n"); + +/* parsed command line storage until appropriate modules have been loaded */ +typedef STAILQ_HEAD(constcharparam_head, constcharparam) constcharparam_head; + +typedef struct constcharparam { + STAILQ_ENTRY(constcharparam) link; + const char *param; + int id; +} constcharparam; + +static constcharparam_head preproc_options; + +static int +do_assemble(void) +{ + yasm_object *object; + const char *base_filename; + /*@null@*/ FILE *obj = NULL; + yasm_arch_create_error arch_error; + yasm_linemap *linemap; + yasm_errwarns *errwarns = yasm_errwarns_create(); + int i, matched; + + /* Initialize line map */ + linemap = yasm_linemap_create(); + yasm_linemap_set(linemap, in_filename, 0, 1, 1); + + /* determine the object filename if not specified */ + if (!obj_filename) { + if (in_filename == NULL) + /* Default to yasm.out if no obj filename specified */ + obj_filename = yasm__xstrdup("yasm.out"); + else { + /* replace (or add) extension to base filename */ + yasm__splitpath(in_filename, &base_filename); + if (base_filename[0] == '\0') + obj_filename = yasm__xstrdup("yasm.out"); + else + obj_filename = replace_extension(base_filename, + "obj", + "yasm.out"); + } + } + + cur_arch = yasm_arch_create(cur_arch_module, machine_name, + cur_parser_module->keyword, &arch_error); + if (!cur_arch) { + switch (arch_error) { + case YASM_ARCH_CREATE_BAD_MACHINE: + print_error(_("%s: `%s' is not a valid %s for %s `%s'"), + _("FATAL"), machine_name, _("machine"), + _("architecture"), cur_arch_module->keyword); + break; + case YASM_ARCH_CREATE_BAD_PARSER: + print_error(_("%s: `%s' is not a valid %s for %s `%s'"), + _("FATAL"), cur_parser_module->keyword, + _("parser"), _("architecture"), + cur_arch_module->keyword); + break; + default: + print_error(_("%s: unknown architecture error"), _("FATAL")); + } + + return EXIT_FAILURE; + } + + /* Create object */ + object = yasm_object_create(in_filename, obj_filename, cur_arch, + cur_objfmt_module, cur_dbgfmt_module); + if (!object) { + yasm_error_class eclass; + unsigned long xrefline; + /*@only@*/ /*@null@*/ char *estr, *xrefstr; + + yasm_error_fetch(&eclass, &estr, &xrefline, &xrefstr); + print_error("%s: %s", _("FATAL"), estr); + yasm_xfree(estr); + yasm_xfree(xrefstr); + + cleanup(object); + return EXIT_FAILURE; + } + + /* Get a fresh copy of objfmt_module as it may have changed. */ + cur_objfmt_module = ((yasm_objfmt_base *)object->objfmt)->module; + + /* Check to see if the requested preprocessor is in the allowed list + * for the active parser. + */ + matched = 0; + for (i=0; cur_parser_module->preproc_keywords[i]; i++) + if (yasm__strcasecmp(cur_parser_module->preproc_keywords[i], + cur_preproc_module->keyword) == 0) + matched = 1; + if (!matched) { + print_error(_("%s: `%s' is not a valid %s for %s `%s'"), _("FATAL"), + cur_preproc_module->keyword, _("preprocessor"), + _("parser"), cur_parser_module->keyword); + cleanup(object); + return EXIT_FAILURE; + } + + cur_preproc = yasm_preproc_create(cur_preproc_module, in_filename, + object->symtab, linemap, errwarns); + + apply_preproc_builtins(); + apply_preproc_standard_macros(cur_parser_module->stdmacs); + apply_preproc_standard_macros(cur_objfmt_module->stdmacs); + apply_preproc_saved_options(); + + /* Get initial x86 BITS setting from object format */ + if (strcmp(cur_arch_module->keyword, "x86") == 0) { + yasm_arch_set_var(cur_arch, "mode_bits", + cur_objfmt_module->default_x86_mode_bits); + } + + /* Parse! */ + cur_parser_module->do_parse(object, cur_preproc, list_filename != NULL, + linemap, errwarns); + + check_errors(errwarns, object, linemap); + + /* Finalize parse */ + yasm_object_finalize(object, errwarns); + check_errors(errwarns, object, linemap); + + /* Optimize */ + yasm_object_optimize(object, errwarns); + check_errors(errwarns, object, linemap); + + /* generate any debugging information */ + yasm_dbgfmt_generate(object, linemap, errwarns); + check_errors(errwarns, object, linemap); + + /* open the object file for output (if not already opened by dbg objfmt) */ + if (!obj && strcmp(cur_objfmt_module->keyword, "dbg") != 0) { + obj = open_file(obj_filename, "wb"); + if (!obj) { + cleanup(object); + return EXIT_FAILURE; + } + } + + /* Write the object file */ + yasm_objfmt_output(object, obj?obj:stderr, + strcmp(cur_dbgfmt_module->keyword, "null"), errwarns); + + /* Close object file */ + if (obj) + fclose(obj); + + /* If we had an error at this point, we also need to delete the output + * object file (to make sure it's not left newer than the source). + */ + if (yasm_errwarns_num_errors(errwarns, warning_error) > 0) + remove(obj_filename); + check_errors(errwarns, object, linemap); + + /* Open and write the list file */ + if (list_filename) { + FILE *list = open_file(list_filename, "wt"); + if (!list) { + cleanup(object); + return EXIT_FAILURE; + } + /* Initialize the list format */ + cur_listfmt = yasm_listfmt_create(cur_listfmt_module, in_filename, + obj_filename); + yasm_listfmt_output(cur_listfmt, list, linemap, cur_arch); + fclose(list); + } + + yasm_errwarns_output_all(errwarns, linemap, warning_error, + print_yasm_error, print_yasm_warning); + + yasm_linemap_destroy(linemap); + yasm_errwarns_destroy(errwarns); + cleanup(object); + return EXIT_SUCCESS; +} + +/* main function */ +/*@-globstate -unrecog@*/ +int +main(int argc, char *argv[]) +{ + size_t i; + + errfile = stderr; + +#if defined(HAVE_SETLOCALE) && defined(HAVE_LC_MESSAGES) + setlocale(LC_MESSAGES, ""); +#endif +#if defined(LOCALEDIR) + bindtextdomain(PACKAGE, LOCALEDIR); +#endif + textdomain(PACKAGE); + + /* Initialize errwarn handling */ + yasm_internal_error_ = handle_yasm_int_error; + yasm_fatal = handle_yasm_fatal; + yasm_gettext_hook = handle_yasm_gettext; + yasm_errwarn_initialize(); + + /* Initialize BitVector (needed for intnum/floatnum). */ + if (BitVector_Boot() != ErrCode_Ok) { + print_error(_("%s: could not initialize BitVector"), _("FATAL")); + return EXIT_FAILURE; + } + + /* Initialize intnum and floatnum */ + yasm_intnum_initialize(); + yasm_floatnum_initialize(); + +#ifdef CMAKE_BUILD + /* Load standard modules */ +#ifdef BUILD_SHARED_LIBS + if (!load_plugin("yasmstd")) { + print_error(_("%s: could not load standard modules"), _("FATAL")); + return EXIT_FAILURE; + } +#else + yasm_init_plugin(); +#endif +#endif + + /* Initialize parameter storage */ + STAILQ_INIT(&preproc_options); + + if (parse_cmdline(argc, argv, options, NELEMS(options), print_error)) + return EXIT_FAILURE; + + switch (special_options) { + case SPECIAL_SHOW_HELP: + /* Does gettext calls internally */ + help_msg(help_head, help_tail, options, NELEMS(options)); + return EXIT_SUCCESS; + case SPECIAL_SHOW_VERSION: + for (i=0; idefault_machine_keyword); + + /* Check for arch help */ + if (machine_name && strcmp(machine_name, "help") == 0) { + const yasm_arch_machine *m = cur_arch_module->machines; + printf(_("Available %s for %s `%s':\n"), _("machines"), + _("architecture"), cur_arch_module->keyword); + while (m->keyword && m->name) { + print_list_keyword_desc(m->name, m->keyword); + m++; + } + return EXIT_SUCCESS; + } + + cur_parser_module = yasm_load_parser("tasm"); + if (!cur_parser_module) { + print_error(_("%s: could not load %s"), _("FATAL"), + _("parser")); + cleanup(NULL); + return EXIT_FAILURE; + } + + /* If not already specified, default to the parser's default preproc. */ + if (!cur_preproc_module) { + cur_preproc_module = + yasm_load_preproc(cur_parser_module->default_preproc_keyword); + if (!cur_preproc_module) { + print_error(_("%s: could not load default %s"), _("FATAL"), + _("preprocessor")); + cleanup(NULL); + return EXIT_FAILURE; + } + } + + /* Determine input filename and open input file. */ + if (!in_filename) { + print_error(_("No input files specified")); + return EXIT_FAILURE; + } + + /* If list file enabled, make sure we have a list format loaded. */ + if (list_filename) { + /* use nasm as the list format. */ + cur_listfmt_module = yasm_load_listfmt("nasm"); + } + + /* If not already specified, default to null as the debug format. */ + if (!cur_dbgfmt_module) { + cur_dbgfmt_module = yasm_load_dbgfmt("null"); + if (!cur_dbgfmt_module) { + print_error(_("%s: could not load default %s"), _("FATAL"), + _("debug format")); + return EXIT_FAILURE; + } + } + + return do_assemble(); +} +/*@=globstate =unrecog@*/ + +/* Open the object file. Returns 0 on failure. */ +static FILE * +open_file(const char *filename, const char *mode) +{ + FILE *f; + + f = fopen(filename, mode); + if (!f) + print_error(_("could not open file `%s'"), filename); + return f; +} + +static void +check_errors(yasm_errwarns *errwarns, yasm_object *object, + yasm_linemap *linemap) +{ + if (yasm_errwarns_num_errors(errwarns, warning_error) > 0) { + yasm_errwarns_output_all(errwarns, linemap, warning_error, + print_yasm_error, print_yasm_warning); + yasm_linemap_destroy(linemap); + yasm_errwarns_destroy(errwarns); + cleanup(object); + exit(EXIT_FAILURE); + } +} + +/* Define DO_FREE to 1 to enable deallocation of all data structures. + * Useful for detecting memory leaks, but slows down execution unnecessarily + * (as the OS will free everything we miss here). + */ +#define DO_FREE 1 + +/* Cleans up all allocated structures. */ +static void +cleanup(yasm_object *object) +{ + if (DO_FREE) { + if (cur_listfmt) + yasm_listfmt_destroy(cur_listfmt); + if (cur_preproc) + yasm_preproc_destroy(cur_preproc); + if (object) + yasm_object_destroy(object); + + yasm_floatnum_cleanup(); + yasm_intnum_cleanup(); + + yasm_errwarn_cleanup(); + + BitVector_Shutdown(); + } + + if (DO_FREE) { + if (in_filename) + yasm_xfree(in_filename); + if (obj_filename) + yasm_xfree(obj_filename); + if (list_filename) + yasm_xfree(list_filename); + if (xref_filename) + yasm_xfree(xref_filename); + if (machine_name) + yasm_xfree(machine_name); + if (objfmt_keyword) + yasm_xfree(objfmt_keyword); + } + + if (errfile != stderr && errfile != stdout) + fclose(errfile); +#if defined(CMAKE_BUILD) && defined(BUILD_SHARED_LIBS) + unload_plugins(); +#endif +} + +/* + * Command line options handlers + */ +static char ** const filenames[] = { + &in_filename, &obj_filename, &list_filename, &xref_filename, NULL +}, ** const * cur_filename = &filenames[0]; + +static int filename_handler(char *param) { + if (!*cur_filename) { + print_error(_("error: too many files on command line.")); + return 1; + } + + if (*param) + **cur_filename = yasm__xstrdup(param); + + return 0; +} +int +not_an_option_handler(char *param) { + char *c, *d = param; + + while ((c = strchr(d, ','))) { + *c = '\0'; + if (filename_handler(d)) + return 1; + d = c + 1; + cur_filename++; + } + filename_handler(d); + return 0; +} + +static int +opt_special_handler(/*@unused@*/ char *cmd, /*@unused@*/ char *param, int extra) +{ + if (special_options == 0) + special_options = extra; + return 0; +} + +static int +opt_segment_ordering_handler(/*@unused@*/ char *cmd, /*@unused@*/ char *param, int extra) +{ + segment_ordering = extra; + return 0; +} + +static int +opt_cross_reference_handler(/*@unused@*/ char *cmd, /*@unused@*/ char *param, int extra) +{ + cross_reference = 1; + return 0; +} + +static int +opt_floating_point_handler(/*@unused@*/ char *cmd, /*@unused@*/ char *param, int extra) +{ + floating_point = extra; + return 0; +} + +static int +opt_ignore(/*@unused@*/ char *cmd, /*@unused@*/ char *param, int extra) +{ + return 0; +} + +static int +opt_listing_handler(/*@unused@*/ char *cmd, /*@unused@*/ char *param, int extra) +{ + if (param && param[0]) { + if (param[0] != 'a') + return 1; + expanded_listing = 1; + } + listing = 1; + return 0; +} + +static int +opt_case_handler(/*@unused@*/ char *cmd, /*@unused@*/ char *param, int extra) +{ + case_sensitivity = extra; + return 0; +} + +static int +opt_valid_length_handler(/*@unused@*/ char *cmd, /*@unused@*/ char *param, int extra) +{ + valid_length = atoi(param); + return 0; +} + +static int +opt_warning_handler(char *cmd, /*@unused@*/ char *param, int extra) +{ + /* is it disabling the warning instead of enabling? */ + void (*action)(yasm_warn_class wclass) = NULL; + + if (cmd[0] == '0') { + /* /w0, disable warnings */ + yasm_warn_disable_all(); + return 0; + } + + if (cmd[0] == '1' || cmd[0] == '2') { + /* /w[12], enable warnings */ + yasm_warn_enable(YASM_WARN_UNREC_CHAR); + yasm_warn_enable(YASM_WARN_ORPHAN_LABEL); + yasm_warn_enable(YASM_WARN_UNINIT_CONTENTS); + return 0; + } + + /* detect no- prefix to disable the warning */ + if (cmd[0] == '-') { + action = yasm_warn_disable; + } else if (cmd[0] == '+') { + action = yasm_warn_enable; + } else return 1; + + /* skip past '+/-' */ + cmd++; + + if (cmd[0] == '\0') + /* just /w- or /w+, so definitely not valid */ + return 1; + else if (strcmp(cmd, "error") == 0) + warning_error = (action == yasm_warn_enable); + else if (strcmp(cmd, "unrecognized-char") == 0) + action(YASM_WARN_UNREC_CHAR); + else if (strcmp(cmd, "orphan-labels") == 0) + action(YASM_WARN_ORPHAN_LABEL); + else if (strcmp(cmd, "uninit-contents") == 0) + action(YASM_WARN_UNINIT_CONTENTS); + else if (strcmp(cmd, "size-override") == 0) + action(YASM_WARN_SIZE_OVERRIDE); + else + return 1; + + return 0; +} + +static int +opt_preproc_option(/*@unused@*/ char *cmd, char *param, int extra) +{ + constcharparam *cp; + cp = yasm_xmalloc(sizeof(constcharparam)); + cp->param = param; + cp->id = extra; + STAILQ_INSERT_TAIL(&preproc_options, cp, link); + return 0; +} + +static int +opt_exe_handler(char *cmd, /*@unused@*/ char *param, int extra) +{ + objfmt_keyword = yasm__xstrdup("dosexe"); + return 0; +} + +static void +apply_preproc_builtins() +{ + char *predef; + + if (!objfmt_keyword) + objfmt_keyword = yasm__xstrdup(DEFAULT_OBJFMT_MODULE); + + /* Define standard YASM assembly-time macro constants */ + predef = yasm_xmalloc(strlen("__YASM_OBJFMT__=") + + strlen(objfmt_keyword) + 1); + strcpy(predef, "__YASM_OBJFMT__="); + strcat(predef, objfmt_keyword); + yasm_preproc_define_builtin(cur_preproc, predef); + yasm_xfree(predef); +} + +static void +apply_preproc_standard_macros(const yasm_stdmac *stdmacs) +{ + int i, matched; + + if (!stdmacs) + return; + + matched = -1; + for (i=0; stdmacs[i].parser; i++) + if (yasm__strcasecmp(stdmacs[i].parser, + cur_parser_module->keyword) == 0 && + yasm__strcasecmp(stdmacs[i].preproc, + cur_preproc_module->keyword) == 0) + matched = i; + if (matched >= 0 && stdmacs[matched].macros) + yasm_preproc_add_standard(cur_preproc, stdmacs[matched].macros); +} + +static void +apply_preproc_saved_options() +{ + constcharparam *cp, *cpnext; + + void (*funcs[3])(yasm_preproc *, const char *); + funcs[0] = cur_preproc_module->add_include_file; + funcs[1] = cur_preproc_module->predefine_macro; + funcs[2] = cur_preproc_module->undefine_macro; + + STAILQ_FOREACH(cp, &preproc_options, link) { + if (0 <= cp->id && cp->id < 3 && funcs[cp->id]) + funcs[cp->id](cur_preproc, cp->param); + } + + cp = STAILQ_FIRST(&preproc_options); + while (cp != NULL) { + cpnext = STAILQ_NEXT(cp, link); + yasm_xfree(cp); + cp = cpnext; + } + STAILQ_INIT(&preproc_options); +} + +/* Replace extension on a filename (or append one if none is present). + * If output filename would be identical to input (same extension out as in), + * returns (copy of) def. + * A NULL ext means the trailing '.' should NOT be included, whereas a "" ext + * means the trailing '.' should be included. + */ +static char * +replace_extension(const char *orig, /*@null@*/ const char *ext, + const char *def) +{ + char *out, *outext; + size_t deflen, outlen; + + /* allocate enough space for full existing name + extension */ + outlen = strlen(orig) + 2; + if (ext) + outlen += strlen(ext) + 1; + deflen = strlen(def) + 1; + if (outlen < deflen) + outlen = deflen; + out = yasm_xmalloc(outlen); + + strcpy(out, orig); + outext = strrchr(out, '.'); + if (outext) { + /* Existing extension: make sure it's not the same as the replacement + * (as we don't want to overwrite the source file). + */ + outext++; /* advance past '.' */ + if (ext && strcmp(outext, ext) == 0) { + outext = NULL; /* indicate default should be used */ + print_error( + _("file name already ends in `.%s': output will be in `%s'"), + ext, def); + } + } else { + /* No extension: make sure the output extension is not empty + * (again, we don't want to overwrite the source file). + */ + if (!ext) + print_error( + _("file name already has no extension: output will be in `%s'"), + def); + else { + outext = strrchr(out, '\0'); /* point to end of the string */ + *outext++ = '.'; /* append '.' */ + } + } + + /* replace extension or use default name */ + if (outext) { + if (!ext) { + /* Back up and replace '.' with string terminator */ + outext--; + *outext = '\0'; + } else + strcpy(outext, ext); + } else + strcpy(out, def); + + return out; +} + +void +print_list_keyword_desc(const char *name, const char *keyword) +{ + printf("%4s%-12s%s\n", "", keyword, name); +} + +static void +print_error(const char *fmt, ...) +{ + va_list va; + fprintf(errfile, "tasm: "); + va_start(va, fmt); + vfprintf(errfile, fmt, va); + va_end(va); + fputc('\n', errfile); +} + +static /*@exits@*/ void +handle_yasm_int_error(const char *file, unsigned int line, const char *message) +{ + fprintf(stderr, _("INTERNAL ERROR at %s, line %u: %s\n"), file, line, + gettext(message)); +#ifdef HAVE_ABORT + abort(); +#else + exit(EXIT_FAILURE); +#endif +} + +static /*@exits@*/ void +handle_yasm_fatal(const char *fmt, va_list va) +{ + fprintf(errfile, "**%s**: ", _("Fatal")); + vfprintf(errfile, gettext(fmt), va); + fputc('\n', errfile); + exit(EXIT_FAILURE); +} + +static const char * +handle_yasm_gettext(const char *msgid) +{ + return gettext(msgid); +} + +static void +print_yasm_error(const char *filename, unsigned long line, const char *msg, + const char *xref_fn, unsigned long xref_line, + const char *xref_msg) +{ + if (line) + fprintf(errfile, "**%s** %s(%lu) %s\n", _("Error"), filename, line, msg); + else + fprintf(errfile, "**%s** %s %s\n", _("Error"), filename, msg); + + if (/* xref_fn && */ xref_msg) { + if (xref_line) + fprintf(errfile, "**%s** %s(%lu) %s\n", _("Error"), filename, xref_line, xref_msg); + else + fprintf(errfile, "**%s** %s %s\n", _("Error"), filename, xref_msg); + } +} + +static void +print_yasm_warning(const char *filename, unsigned long line, const char *msg) +{ + if (line) + fprintf(errfile, "*%s* %s(%lu) %s\n", _("Warning"), filename, line, msg); + else + fprintf(errfile, "*%s* %s %s\n", _("Warning"), filename, msg); +} diff --git a/third-party/yasm/yasm-1.3.0/frontends/vsyasm/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/frontends/vsyasm/CMakeLists.txt new file mode 100644 index 0000000000..6815b18d8f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/vsyasm/CMakeLists.txt @@ -0,0 +1,37 @@ +INCLUDE_DIRECTORIES( + ${CMAKE_CURRENT_BINARY_DIR} + ${yasm_SOURCE_DIR}/frontends/yasm + ) + +ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/license.c + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/frontends/yasm/genstring.py + license_msg + ${CMAKE_CURRENT_BINARY_DIR}/license.c + ${CMAKE_SOURCE_DIR}/COPYING + MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/COPYING + DEPENDS ${CMAKE_SOURCE_DIR}/frontends/yasm/genstring.py + ) + +SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}) + +IF(BUILD_SHARED_LIBS) + ADD_EXECUTABLE(vsyasm + vsyasm.c + ${yasm_SOURCE_DIR}/frontends/yasm/yasm-options.c + ${yasm_SOURCE_DIR}/frontends/yasm/yasm-plugin.c + ) + TARGET_LINK_LIBRARIES(vsyasm libyasm ${LIBDL}) +ELSE(BUILD_SHARED_LIBS) + ADD_EXECUTABLE(vsyasm + vsyasm.c + ${yasm_SOURCE_DIR}/frontends/yasm/yasm-options.c + ) + TARGET_LINK_LIBRARIES(vsyasm yasmstd libyasm) +ENDIF(BUILD_SHARED_LIBS) + +SET_SOURCE_FILES_PROPERTIES(vsyasm.c PROPERTIES + OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/license.c + ) + +INSTALL(TARGETS vsyasm RUNTIME DESTINATION bin) diff --git a/third-party/yasm/yasm-1.3.0/frontends/vsyasm/Makefile.inc b/third-party/yasm/yasm-1.3.0/frontends/vsyasm/Makefile.inc new file mode 100644 index 0000000000..df8d9cf756 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/vsyasm/Makefile.inc @@ -0,0 +1,9 @@ +bin_PROGRAMS += vsyasm + +vsyasm_SOURCES = frontends/vsyasm/vsyasm.c +vsyasm_SOURCES += frontends/yasm/yasm-options.c +vsyasm_SOURCES += frontends/yasm/yasm-options.h + +$(srcdir)/frontends/vsyasm/vsyasm.c: license.c + +vsyasm_LDADD = libyasm.a $(INTLLIBS) diff --git a/third-party/yasm/yasm-1.3.0/frontends/vsyasm/vsyasm.c b/third-party/yasm/yasm-1.3.0/frontends/vsyasm/vsyasm.c new file mode 100644 index 0000000000..905145fa15 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/vsyasm/vsyasm.c @@ -0,0 +1,1424 @@ +/* + * Program entry point, command line parsing + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include +#include +#include +#include + +#ifdef HAVE_LIBGEN_H +#include +#endif + +#include "frontends/yasm/yasm-options.h" + +#if defined(CMAKE_BUILD) && defined(BUILD_SHARED_LIBS) +#include "frontends/yasm/yasm-plugin.h" +#endif + +#include "license.c" + +#if defined(CMAKE_BUILD) && !defined(BUILD_SHARED_LIBS) +void yasm_init_plugin(void); +#endif + +/*@null@*/ /*@only@*/ static char *objdir_pathname = NULL; +/*@null@*/ /*@only@*/ static char *global_prefix = NULL, *global_suffix = NULL; +/*@null@*/ /*@only@*/ static char *listdir_pathname = NULL; +/*@null@*/ /*@only@*/ static char *mapdir_pathname = NULL; +/*@null@*/ /*@only@*/ static char *objext = NULL; +/*@null@*/ /*@only@*/ static char *listext = NULL, *mapext = NULL; +/*@null@*/ /*@only@*/ static char *machine_name = NULL; +static int special_options = 0; +/*@null@*/ /*@dependent@*/ static const yasm_arch_module * + cur_arch_module = NULL; +/*@null@*/ /*@dependent@*/ static const yasm_parser_module * + cur_parser_module = NULL; +/*@null@*/ /*@dependent@*/ static const yasm_preproc_module * + cur_preproc_module = NULL; +/*@null@*/ static char *objfmt_keyword = NULL; +/*@null@*/ /*@dependent@*/ static const yasm_objfmt_module * + cur_objfmt_module = NULL; +/*@null@*/ /*@dependent@*/ static const yasm_dbgfmt_module * + cur_dbgfmt_module = NULL; +/*@null@*/ /*@dependent@*/ static const yasm_listfmt_module * + cur_listfmt_module = NULL; +static unsigned int force_strict = 0; +static int warning_error = 0; /* warnings being treated as errors */ +static FILE *errfile; +/*@null@*/ /*@only@*/ static char *error_filename = NULL; +static enum { + EWSTYLE_GNU = 0, + EWSTYLE_VC +} ewmsg_style = EWSTYLE_GNU; + +/*@null@*/ /*@dependent@*/ static FILE *open_file(const char *filename, + const char *mode); +static int check_errors(/*@only@*/ yasm_errwarns *errwarns, + /*@only@*/ yasm_object *object, + /*@only@*/ yasm_linemap *linemap, + /*@only@*/ yasm_preproc *preproc, + /*@only@*/ yasm_arch *arch); +static void cleanup(void); +static void free_input_filenames(void); + +/* Forward declarations: cmd line parser handlers */ +static int opt_special_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_arch_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_parser_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_preproc_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_objfmt_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_dbgfmt_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_listfmt_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_listdir_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_objdir_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_mapdir_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_listext_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_objext_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_mapext_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_machine_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_strict_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_warning_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_error_file(char *cmd, /*@null@*/ char *param, int extra); +static int opt_error_stdout(char *cmd, /*@null@*/ char *param, int extra); +static int opt_include_option(char *cmd, /*@null@*/ char *param, int extra); +static int opt_preproc_option(char *cmd, /*@null@*/ char *param, int extra); +static int opt_ewmsg_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_prefix_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_suffix_handler(char *cmd, /*@null@*/ char *param, int extra); +#if defined(CMAKE_BUILD) && defined(BUILD_SHARED_LIBS) +static int opt_plugin_handler(char *cmd, /*@null@*/ char *param, int extra); +#endif + +static /*@only@*/ char *replace_extension(const char *orig, /*@null@*/ + const char *ext); +static void print_error(const char *fmt, ...); + +static /*@exits@*/ void handle_yasm_int_error(const char *file, + unsigned int line, + const char *message); +static /*@exits@*/ void handle_yasm_fatal(const char *message, va_list va); +static const char *handle_yasm_gettext(const char *msgid); +static void print_yasm_error(const char *filename, unsigned long line, + const char *msg, /*@null@*/ const char *xref_fn, + unsigned long xref_line, + /*@null@*/ const char *xref_msg); +static void print_yasm_warning(const char *filename, unsigned long line, + const char *msg); + +static void apply_preproc_builtins(yasm_preproc *preproc); +static void apply_preproc_standard_macros(yasm_preproc *preproc, + const yasm_stdmac *stdmacs); +static void apply_preproc_saved_options(yasm_preproc *preproc); +static void free_preproc_saved_options(void); +static void print_list_keyword_desc(const char *name, const char *keyword); + +/* values for special_options */ +#define SPECIAL_SHOW_HELP 0x01 +#define SPECIAL_SHOW_VERSION 0x02 +#define SPECIAL_SHOW_LICENSE 0x04 +#define SPECIAL_LISTED 0x08 + +/* command line options */ +static opt_option options[] = +{ + { 0, "version", 0, opt_special_handler, SPECIAL_SHOW_VERSION, + N_("show version text"), NULL }, + { 0, "license", 0, opt_special_handler, SPECIAL_SHOW_LICENSE, + N_("show license text"), NULL }, + { 'h', "help", 0, opt_special_handler, SPECIAL_SHOW_HELP, + N_("show help text"), NULL }, + { 'a', "arch", 1, opt_arch_handler, 0, + N_("select architecture (list with -a help)"), N_("arch") }, + { 'p', "parser", 1, opt_parser_handler, 0, + N_("select parser (list with -p help)"), N_("parser") }, + { 'r', "preproc", 1, opt_preproc_handler, 0, + N_("select preprocessor (list with -r help)"), N_("preproc") }, + { 'f', "oformat", 1, opt_objfmt_handler, 0, + N_("select object format (list with -f help)"), N_("format") }, + { 'g', "dformat", 1, opt_dbgfmt_handler, 0, + N_("select debugging format (list with -g help)"), N_("debug") }, + { 'L', "lformat", 1, opt_listfmt_handler, 0, + N_("select list format (list with -L help)"), N_("list") }, + { 'l', "list", 1, opt_listdir_handler, 0, + N_("name of list-file output directory"), N_("pathname") }, + { 'o', "objdir", 1, opt_objdir_handler, 0, + N_("name of object-file output directory"), N_("pathname") }, + { 0, "mapdir", 1, opt_mapdir_handler, 0, + N_("name of map-file output directory"), N_("pathname") }, + { 0, "listext", 1, opt_listext_handler, 0, + N_("list-file extension (default `lst')"), N_("ext") }, + { 0, "objext", 1, opt_objext_handler, 0, + N_("object-file extension (default is by object format)"), N_("ext") }, + { 0, "mapext", 1, opt_mapext_handler, 0, + N_("map-file extension (default `map')"), N_("ext") }, + { 'm', "machine", 1, opt_machine_handler, 0, + N_("select machine (list with -m help)"), N_("machine") }, + { 0, "force-strict", 0, opt_strict_handler, 0, + N_("treat all sized operands as if `strict' was used"), NULL }, + { 'w', NULL, 0, opt_warning_handler, 1, + N_("inhibits warning messages"), NULL }, + { 'W', NULL, 0, opt_warning_handler, 0, + N_("enables/disables warning"), NULL }, + { 'E', NULL, 1, opt_error_file, 0, + N_("redirect error messages to file"), N_("file") }, + { 's', NULL, 0, opt_error_stdout, 0, + N_("redirect error messages to stdout"), NULL }, + { 'i', NULL, 1, opt_include_option, 0, + N_("add include path"), N_("path") }, + { 'I', NULL, 1, opt_include_option, 0, + N_("add include path"), N_("path") }, + { 'P', NULL, 1, opt_preproc_option, 0, + N_("pre-include file"), N_("filename") }, + { 'd', NULL, 1, opt_preproc_option, 1, + N_("pre-define a macro, optionally to value"), N_("macro[=value]") }, + { 'D', NULL, 1, opt_preproc_option, 1, + N_("pre-define a macro, optionally to value"), N_("macro[=value]") }, + { 'u', NULL, 1, opt_preproc_option, 2, + N_("undefine a macro"), N_("macro") }, + { 'U', NULL, 1, opt_preproc_option, 2, + N_("undefine a macro"), N_("macro") }, + { 'X', NULL, 1, opt_ewmsg_handler, 0, + N_("select error/warning message style (`gnu' or `vc')"), N_("style") }, + { 0, "prefix", 1, opt_prefix_handler, 0, + N_("prepend argument to name of all external symbols"), N_("prefix") }, + { 0, "suffix", 1, opt_suffix_handler, 0, + N_("append argument to name of all external symbols"), N_("suffix") }, + { 0, "postfix", 1, opt_suffix_handler, 0, + N_("append argument to name of all external symbols"), N_("suffix") }, +#if defined(CMAKE_BUILD) && defined(BUILD_SHARED_LIBS) + { 'N', "plugin", 1, opt_plugin_handler, 0, + N_("load plugin module"), N_("plugin") }, +#endif +}; + +/* version message */ +/*@observer@*/ static const char *version_msg[] = { + PACKAGE_STRING, + "Compiled on " __DATE__ ".", + "Copyright (c) 2001-2010 Peter Johnson and other Yasm developers.", + "Run yasm --license for licensing overview and summary." +}; + +/* help messages */ +/*@observer@*/ static const char *help_head = N_( + "usage: vsyasm [option]* file...\n" + "Options:\n"); +/*@observer@*/ static const char *help_tail = N_( + "\n" + "Files are asm sources to be assembled.\n" + "\n" + "Sample invocation:\n" + " vsyasm -f win64 -o objdir source1.asm source2.asm\n" + "\n" + "All options apply to all files.\n" + "\n" + "Report bugs to bug-yasm@tortall.net\n"); + +/* parsed command line storage until appropriate modules have been loaded */ +typedef STAILQ_HEAD(constcharparam_head, constcharparam) constcharparam_head; + +typedef struct constcharparam { + STAILQ_ENTRY(constcharparam) link; + const char *param; + int id; +} constcharparam; + +static constcharparam_head preproc_options; +static constcharparam_head input_files; +static int num_input_files = 0; + +static int +do_assemble(const char *in_filename) +{ + yasm_object *object; + const char *base_filename; + char *fn = NULL; + char *obj_filename, *list_filename = NULL, *map_filename = NULL; + /*@null@*/ FILE *obj = NULL; + yasm_arch_create_error arch_error; + yasm_linemap *linemap; + yasm_arch *arch = NULL; + yasm_preproc *preproc = NULL; + yasm_errwarns *errwarns = yasm_errwarns_create(); + int i, matched; + + /* Initialize line map */ + linemap = yasm_linemap_create(); + yasm_linemap_set(linemap, in_filename, 0, 1, 1); + + /* determine the output filenames */ + /* replace (or add) extension to base filename */ + yasm__splitpath(in_filename, &base_filename); + if (base_filename[0] != '\0') + fn = replace_extension(base_filename, objext); + if (!fn) + { + print_error(_("could not determine output filename for `%s'"), + in_filename); + return EXIT_FAILURE; + } + obj_filename = yasm__combpath(objdir_pathname, fn); + yasm_xfree(fn); + + if (listdir_pathname) { + fn = replace_extension(base_filename, listext); + if (!fn) + { + print_error(_("could not determine list filename for `%s'"), + in_filename); + return EXIT_FAILURE; + } + list_filename = yasm__combpath(listdir_pathname, fn); + yasm_xfree(fn); + } + + if (mapdir_pathname) { + fn = replace_extension(base_filename, mapext); + if (!fn) + { + print_error(_("could not determine map filename for `%s'"), + in_filename); + return EXIT_FAILURE; + } + map_filename = yasm__combpath(mapdir_pathname, fn); + yasm_xfree(fn); + } + + /* Set up architecture using machine and parser. */ + if (!machine_name) { + /* If we're using x86 and the default objfmt bits is 64, default the + * machine to amd64. When we get more arches with multiple machines, + * we should do this in a more modular fashion. + */ + if (strcmp(cur_arch_module->keyword, "x86") == 0 && + cur_objfmt_module->default_x86_mode_bits == 64) + machine_name = yasm__xstrdup("amd64"); + else + machine_name = + yasm__xstrdup(cur_arch_module->default_machine_keyword); + } + + arch = yasm_arch_create(cur_arch_module, machine_name, + cur_parser_module->keyword, &arch_error); + if (!arch) { + switch (arch_error) { + case YASM_ARCH_CREATE_BAD_MACHINE: + print_error(_("%s: `%s' is not a valid %s for %s `%s'"), + _("FATAL"), machine_name, _("machine"), + _("architecture"), cur_arch_module->keyword); + break; + case YASM_ARCH_CREATE_BAD_PARSER: + print_error(_("%s: `%s' is not a valid %s for %s `%s'"), + _("FATAL"), cur_parser_module->keyword, + _("parser"), _("architecture"), + cur_arch_module->keyword); + break; + default: + print_error(_("%s: unknown architecture error"), _("FATAL")); + } + + return EXIT_FAILURE; + } + + /* Create object */ + object = yasm_object_create(in_filename, obj_filename, arch, + cur_objfmt_module, cur_dbgfmt_module); + if (!object) { + yasm_error_class eclass; + unsigned long xrefline; + /*@only@*/ /*@null@*/ char *estr, *xrefstr; + + yasm_error_fetch(&eclass, &estr, &xrefline, &xrefstr); + print_error("%s: %s", _("FATAL"), estr); + yasm_xfree(estr); + yasm_xfree(xrefstr); + return EXIT_FAILURE; + } + + /* Get a fresh copy of objfmt_module as it may have changed. */ + cur_objfmt_module = ((yasm_objfmt_base *)object->objfmt)->module; + + /* Check to see if the requested preprocessor is in the allowed list + * for the active parser. + */ + matched = 0; + for (i=0; cur_parser_module->preproc_keywords[i]; i++) + if (yasm__strcasecmp(cur_parser_module->preproc_keywords[i], + cur_preproc_module->keyword) == 0) + matched = 1; + if (!matched) { + print_error(_("%s: `%s' is not a valid %s for %s `%s'"), _("FATAL"), + cur_preproc_module->keyword, _("preprocessor"), + _("parser"), cur_parser_module->keyword); + yasm_object_destroy(object); + return EXIT_FAILURE; + } + + if (global_prefix) + yasm_object_set_global_prefix(object, global_prefix); + if (global_suffix) + yasm_object_set_global_suffix(object, global_suffix); + + preproc = yasm_preproc_create(cur_preproc_module, in_filename, + object->symtab, linemap, errwarns); + + apply_preproc_builtins(preproc); + apply_preproc_standard_macros(preproc, cur_parser_module->stdmacs); + apply_preproc_standard_macros(preproc, cur_objfmt_module->stdmacs); + apply_preproc_saved_options(preproc); + + /* Get initial x86 BITS setting from object format */ + if (strcmp(cur_arch_module->keyword, "x86") == 0) { + yasm_arch_set_var(arch, "mode_bits", + cur_objfmt_module->default_x86_mode_bits); + } + + yasm_arch_set_var(arch, "force_strict", force_strict); + + /* Try to enable the map file via a map NASM directive. This is + * somewhat of a hack. + */ + if (map_filename) { + const yasm_directive *dir = &cur_objfmt_module->directives[0]; + matched = 0; + for (; dir && dir->name; dir++) { + if (yasm__strcasecmp(dir->name, "map") == 0 && + yasm__strcasecmp(dir->parser, "nasm") == 0) { + yasm_valparamhead vps; + yasm_valparam *vp; + matched = 1; + yasm_vps_initialize(&vps); + vp = yasm_vp_create_string(NULL, yasm__xstrdup(map_filename)); + yasm_vps_append(&vps, vp); + dir->handler(object, &vps, NULL, 0); + yasm_vps_delete(&vps); + } + } + if (!matched) { + print_error( + _("warning: object format `%s' does not support map files"), + cur_objfmt_module->keyword); + } + } + + /* Parse! */ + cur_parser_module->do_parse(object, preproc, list_filename != NULL, + linemap, errwarns); + + if (check_errors(errwarns, object, linemap, preproc, arch) == EXIT_FAILURE) + return EXIT_FAILURE; + + /* Finalize parse */ + yasm_object_finalize(object, errwarns); + if (check_errors(errwarns, object, linemap, preproc, arch) == EXIT_FAILURE) + return EXIT_FAILURE; + + /* Optimize */ + yasm_object_optimize(object, errwarns); + if (check_errors(errwarns, object, linemap, preproc, arch) == EXIT_FAILURE) + return EXIT_FAILURE; + + /* generate any debugging information */ + yasm_dbgfmt_generate(object, linemap, errwarns); + if (check_errors(errwarns, object, linemap, preproc, arch) == EXIT_FAILURE) + return EXIT_FAILURE; + + /* open the object file for output (if not already opened by dbg objfmt) */ + if (!obj && strcmp(cur_objfmt_module->keyword, "dbg") != 0) { + obj = open_file(obj_filename, "wb"); + if (!obj) { + yasm_preproc_destroy(preproc); + yasm_object_destroy(object); + yasm_linemap_destroy(linemap); + yasm_errwarns_destroy(errwarns); + return EXIT_FAILURE; + } + } + + /* Write the object file */ + yasm_objfmt_output(object, obj?obj:stderr, + strcmp(cur_dbgfmt_module->keyword, "null"), errwarns); + + /* Close object file */ + if (obj) + fclose(obj); + + /* If we had an error at this point, we also need to delete the output + * object file (to make sure it's not left newer than the source). + */ + if (yasm_errwarns_num_errors(errwarns, warning_error) > 0) + remove(obj_filename); + if (check_errors(errwarns, object, linemap, preproc, arch) == EXIT_FAILURE) + return EXIT_FAILURE; + + /* Open and write the list file */ + if (list_filename) { + yasm_listfmt *cur_listfmt; + FILE *list = open_file(list_filename, "wt"); + if (!list) { + yasm_preproc_destroy(preproc); + yasm_object_destroy(object); + yasm_linemap_destroy(linemap); + yasm_errwarns_destroy(errwarns); + return EXIT_FAILURE; + } + /* Initialize the list format */ + cur_listfmt = yasm_listfmt_create(cur_listfmt_module, in_filename, + obj_filename); + yasm_listfmt_output(cur_listfmt, list, linemap, arch); + yasm_listfmt_destroy(cur_listfmt); + fclose(list); + } + + yasm_errwarns_output_all(errwarns, linemap, warning_error, + print_yasm_error, print_yasm_warning); + + yasm_preproc_destroy(preproc); + yasm_object_destroy(object); + yasm_linemap_destroy(linemap); + yasm_errwarns_destroy(errwarns); + + yasm_xfree(obj_filename); + yasm_xfree(map_filename); + yasm_xfree(list_filename); + return EXIT_SUCCESS; +} + +/* main function */ +/*@-globstate -unrecog@*/ +int +main(int argc, char *argv[]) +{ + size_t i; + constcharparam *infile; + + errfile = stderr; + +#if defined(HAVE_SETLOCALE) && defined(HAVE_LC_MESSAGES) + setlocale(LC_MESSAGES, ""); +#endif +#if defined(LOCALEDIR) + bindtextdomain(PACKAGE, LOCALEDIR); +#endif + textdomain(PACKAGE); + + /* Initialize errwarn handling */ + yasm_internal_error_ = handle_yasm_int_error; + yasm_fatal = handle_yasm_fatal; + yasm_gettext_hook = handle_yasm_gettext; + yasm_errwarn_initialize(); + + /* Initialize BitVector (needed for intnum/floatnum). */ + if (BitVector_Boot() != ErrCode_Ok) { + print_error(_("%s: could not initialize BitVector"), _("FATAL")); + return EXIT_FAILURE; + } + + /* Initialize intnum and floatnum */ + yasm_intnum_initialize(); + yasm_floatnum_initialize(); + +#ifdef CMAKE_BUILD + /* Load standard modules */ +#ifdef BUILD_SHARED_LIBS + if (!load_plugin("yasmstd")) { + print_error(_("%s: could not load standard modules"), _("FATAL")); + return EXIT_FAILURE; + } +#else + yasm_init_plugin(); +#endif +#endif + + /* Initialize parameter storage */ + STAILQ_INIT(&preproc_options); + STAILQ_INIT(&input_files); + + if (parse_cmdline(argc, argv, options, NELEMS(options), print_error)) + return EXIT_FAILURE; + + switch (special_options) { + case SPECIAL_SHOW_HELP: + /* Does gettext calls internally */ + help_msg(help_head, help_tail, options, NELEMS(options)); + return EXIT_SUCCESS; + case SPECIAL_SHOW_VERSION: + for (i=0; imachines; + printf(_("Available %s for %s `%s':\n"), _("machines"), + _("architecture"), cur_arch_module->keyword); + while (m->keyword && m->name) { + print_list_keyword_desc(m->name, m->keyword); + m++; + } + return EXIT_SUCCESS; + } + + /* Default to NASM as the parser */ + if (!cur_parser_module) { + cur_parser_module = yasm_load_parser("nasm"); + if (!cur_parser_module) { + print_error(_("%s: could not load default %s"), _("FATAL"), + _("parser")); + cleanup(); + return EXIT_FAILURE; + } + } + + /* If not already specified, default to the parser's default preproc. */ + if (!cur_preproc_module) { + cur_preproc_module = + yasm_load_preproc(cur_parser_module->default_preproc_keyword); + if (!cur_preproc_module) { + print_error(_("%s: could not load default %s"), _("FATAL"), + _("preprocessor")); + cleanup(); + return EXIT_FAILURE; + } + } + + /* Determine input filenames. */ + if (STAILQ_EMPTY(&input_files)) { + print_error(_("No input files specified")); + return EXIT_FAILURE; + } + + /* If list file enabled, make sure we have a list format loaded. */ + if (listdir_pathname) { + /* If not already specified, default to nasm as the list format. */ + if (!cur_listfmt_module) { + cur_listfmt_module = yasm_load_listfmt("nasm"); + if (!cur_listfmt_module) { + print_error(_("%s: could not load default %s"), _("FATAL"), + _("list format")); + return EXIT_FAILURE; + } + } + } + + /* If not already specified, default to null as the debug format. */ + if (!cur_dbgfmt_module) { + cur_dbgfmt_module = yasm_load_dbgfmt("null"); + if (!cur_dbgfmt_module) { + print_error(_("%s: could not load default %s"), _("FATAL"), + _("debug format")); + return EXIT_FAILURE; + } + } + + /* If not already specified, output to the current directory. */ + if (!objdir_pathname) + objdir_pathname = yasm__xstrdup("./"); + else if ((i = yasm__createpath(objdir_pathname)) > 0 && + num_input_files > 1) { + objdir_pathname[i] = '/'; + objdir_pathname[i+1] = '\0'; + } + + /* Create other output directories if necessary */ + if (listdir_pathname && (i = yasm__createpath(listdir_pathname)) > 0 && + num_input_files > 1) { + listdir_pathname[i] = '/'; + listdir_pathname[i+1] = '\0'; + } + if (mapdir_pathname && (i = yasm__createpath(mapdir_pathname)) > 0 && + num_input_files > 1) { + mapdir_pathname[i] = '/'; + mapdir_pathname[i+1] = '\0'; + } + + /* If not already specified, set file extensions */ + if (!objext && cur_objfmt_module->extension) + objext = yasm__xstrdup(cur_objfmt_module->extension); + if (!listext) + listext = yasm__xstrdup("lst"); + if (!mapext) + mapext = yasm__xstrdup("map"); + + /* Assemble each input file. Terminate on first error. */ + STAILQ_FOREACH(infile, &input_files, link) + { + if (do_assemble(infile->param) == EXIT_FAILURE) { + cleanup(); + return EXIT_FAILURE; + } + } + cleanup(); + return EXIT_SUCCESS; +} +/*@=globstate =unrecog@*/ + +/* Open the object file. Returns 0 on failure. */ +static FILE * +open_file(const char *filename, const char *mode) +{ + FILE *f; + + f = fopen(filename, mode); + if (!f) + print_error(_("could not open file `%s'"), filename); + return f; +} + +static int +check_errors(yasm_errwarns *errwarns, yasm_object *object, + yasm_linemap *linemap, yasm_preproc *preproc, yasm_arch *arch) +{ + if (yasm_errwarns_num_errors(errwarns, warning_error) > 0) { + yasm_errwarns_output_all(errwarns, linemap, warning_error, + print_yasm_error, print_yasm_warning); + yasm_preproc_destroy(preproc); + yasm_object_destroy(object); + yasm_linemap_destroy(linemap); + yasm_errwarns_destroy(errwarns); + return EXIT_FAILURE; + } + return EXIT_SUCCESS; +} + +/* Define DO_FREE to 1 to enable deallocation of all data structures. + * Useful for detecting memory leaks, but slows down execution unnecessarily + * (as the OS will free everything we miss here). + */ +#define DO_FREE 1 + +/* Cleans up all allocated structures. */ +static void +cleanup(void) +{ + if (DO_FREE) { + yasm_floatnum_cleanup(); + yasm_intnum_cleanup(); + + yasm_errwarn_cleanup(); + + BitVector_Shutdown(); + } + + if (DO_FREE) { + free_input_filenames(); + if (objdir_pathname) + yasm_xfree(objdir_pathname); + if (listdir_pathname) + yasm_xfree(listdir_pathname); + if (mapdir_pathname) + yasm_xfree(mapdir_pathname); + if (objext) + yasm_xfree(objext); + if (listext) + yasm_xfree(listext); + if (mapext) + yasm_xfree(mapext); + if (machine_name) + yasm_xfree(machine_name); + if (objfmt_keyword) + yasm_xfree(objfmt_keyword); + free_preproc_saved_options(); + } + + if (errfile != stderr && errfile != stdout) + fclose(errfile); +#if defined(CMAKE_BUILD) && defined(BUILD_SHARED_LIBS) + unload_plugins(); +#endif +} + +static void +free_input_filenames(void) +{ + constcharparam *cp, *cpnext; + cp = STAILQ_FIRST(&input_files); + while (cp != NULL) { + cpnext = STAILQ_NEXT(cp, link); + yasm_xfree(cp); + cp = cpnext; + } + STAILQ_INIT(&input_files); +} + +/* + * Command line options handlers + */ +int +not_an_option_handler(char *param) +{ + constcharparam *cp; + cp = yasm_xmalloc(sizeof(constcharparam)); + cp->param = param; + cp->id = 0; + STAILQ_INSERT_TAIL(&input_files, cp, link); + ++num_input_files; + return 0; +} + +int +other_option_handler(char *option) +{ + /* Accept, but ignore, -O and -Onnn, for compatibility with NASM. */ + if (option[0] == '-' && option[1] == 'O') { + int n = 2; + for (;;) { + if (option[n] == '\0') + return 0; + if (!isdigit(option[n])) + return 1; + n++; + } + } + return 1; +} + +static int +opt_special_handler(/*@unused@*/ char *cmd, /*@unused@*/ char *param, int extra) +{ + if (special_options == 0) + special_options = extra; + return 0; +} + +static int +opt_arch_handler(/*@unused@*/ char *cmd, char *param, /*@unused@*/ int extra) +{ + assert(param != NULL); + cur_arch_module = yasm_load_arch(param); + if (!cur_arch_module) { + if (!strcmp("help", param)) { + printf(_("Available yasm %s:\n"), _("architectures")); + yasm_list_arch(print_list_keyword_desc); + special_options = SPECIAL_LISTED; + return 0; + } + print_error(_("%s: unrecognized %s `%s'"), _("FATAL"), + _("architecture"), param); + exit(EXIT_FAILURE); + } + return 0; +} + +static int +opt_parser_handler(/*@unused@*/ char *cmd, char *param, /*@unused@*/ int extra) +{ + assert(param != NULL); + cur_parser_module = yasm_load_parser(param); + if (!cur_parser_module) { + if (!strcmp("help", param)) { + printf(_("Available yasm %s:\n"), _("parsers")); + yasm_list_parser(print_list_keyword_desc); + special_options = SPECIAL_LISTED; + return 0; + } + print_error(_("%s: unrecognized %s `%s'"), _("FATAL"), _("parser"), + param); + exit(EXIT_FAILURE); + } + return 0; +} + +static int +opt_preproc_handler(/*@unused@*/ char *cmd, char *param, /*@unused@*/ int extra) +{ + assert(param != NULL); + cur_preproc_module = yasm_load_preproc(param); + if (!cur_preproc_module) { + if (!strcmp("help", param)) { + printf(_("Available yasm %s:\n"), _("preprocessors")); + yasm_list_preproc(print_list_keyword_desc); + special_options = SPECIAL_LISTED; + return 0; + } + print_error(_("%s: unrecognized %s `%s'"), _("FATAL"), + _("preprocessor"), param); + exit(EXIT_FAILURE); + } + return 0; +} + +static int +opt_objfmt_handler(/*@unused@*/ char *cmd, char *param, /*@unused@*/ int extra) +{ + size_t i; + assert(param != NULL); + cur_objfmt_module = yasm_load_objfmt(param); + if (!cur_objfmt_module) { + if (!strcmp("help", param)) { + printf(_("Available yasm %s:\n"), _("object formats")); + yasm_list_objfmt(print_list_keyword_desc); + special_options = SPECIAL_LISTED; + return 0; + } + print_error(_("%s: unrecognized %s `%s'"), _("FATAL"), + _("object format"), param); + exit(EXIT_FAILURE); + } + if (objfmt_keyword) + yasm_xfree(objfmt_keyword); + objfmt_keyword = yasm__xstrdup(param); + for (i=0; iparam = param; + cp->id = extra; + STAILQ_INSERT_TAIL(&preproc_options, cp, link); + return 0; +} + +static int +opt_ewmsg_handler(/*@unused@*/ char *cmd, char *param, /*@unused@*/ int extra) +{ + if (yasm__strcasecmp(param, "gnu") == 0 || + yasm__strcasecmp(param, "gcc") == 0) { + ewmsg_style = EWSTYLE_GNU; + } else if (yasm__strcasecmp(param, "vc") == 0) { + ewmsg_style = EWSTYLE_VC; + } else + print_error(_("warning: unrecognized message style `%s'"), param); + + return 0; +} + +static int +opt_prefix_handler(/*@unused@*/ char *cmd, char *param, /*@unused@*/ int extra) +{ + if (global_prefix) + yasm_xfree(global_prefix); + + assert(param != NULL); + global_prefix = yasm__xstrdup(param); + + return 0; +} + +static int +opt_suffix_handler(/*@unused@*/ char *cmd, char *param, /*@unused@*/ int extra) +{ + if (global_suffix) + yasm_xfree(global_suffix); + + assert(param != NULL); + global_suffix = yasm__xstrdup(param); + + return 0; +} + +#if defined(CMAKE_BUILD) && defined(BUILD_SHARED_LIBS) +static int +opt_plugin_handler(/*@unused@*/ char *cmd, char *param, + /*@unused@*/ int extra) +{ + if (!load_plugin(param)) + print_error(_("warning: could not load plugin `%s'"), param); + return 0; +} +#endif + +static void +apply_preproc_builtins(yasm_preproc *preproc) +{ + char *predef; + + /* Define standard YASM assembly-time macro constants */ + predef = yasm_xmalloc(strlen("__YASM_OBJFMT__=") + + strlen(objfmt_keyword) + 1); + strcpy(predef, "__YASM_OBJFMT__="); + strcat(predef, objfmt_keyword); + yasm_preproc_define_builtin(preproc, predef); + yasm_xfree(predef); +} + +static void +apply_preproc_standard_macros(yasm_preproc *preproc, const yasm_stdmac *stdmacs) +{ + int i, matched; + + if (!stdmacs) + return; + + matched = -1; + for (i=0; stdmacs[i].parser; i++) + if (yasm__strcasecmp(stdmacs[i].parser, + cur_parser_module->keyword) == 0 && + yasm__strcasecmp(stdmacs[i].preproc, + cur_preproc_module->keyword) == 0) + matched = i; + if (matched >= 0 && stdmacs[matched].macros) + yasm_preproc_add_standard(preproc, stdmacs[matched].macros); +} + +static void +apply_preproc_saved_options(yasm_preproc *preproc) +{ + constcharparam *cp; + + void (*funcs[3])(yasm_preproc *, const char *); + funcs[0] = cur_preproc_module->add_include_file; + funcs[1] = cur_preproc_module->predefine_macro; + funcs[2] = cur_preproc_module->undefine_macro; + + STAILQ_FOREACH(cp, &preproc_options, link) { + if (0 <= cp->id && cp->id < 3 && funcs[cp->id]) + funcs[cp->id](preproc, cp->param); + } +} + +static void +free_preproc_saved_options(void) +{ + constcharparam *cp, *cpnext; + cp = STAILQ_FIRST(&preproc_options); + while (cp != NULL) { + cpnext = STAILQ_NEXT(cp, link); + yasm_xfree(cp); + cp = cpnext; + } + STAILQ_INIT(&preproc_options); +} + +/* Replace extension on a filename (or append one if none is present). + * If output filename would be identical to input (same extension out as in), + * returns NULL. + * A NULL ext means the trailing '.' should NOT be included, whereas a "" ext + * means the trailing '.' should be included. + */ +static char * +replace_extension(const char *orig, /*@null@*/ const char *ext) +{ + char *out, *outext; + size_t outlen; + + /* allocate enough space for full existing name + extension */ + outlen = strlen(orig) + 2; + if (ext) + outlen += strlen(ext) + 1; + out = yasm_xmalloc(outlen); + + strcpy(out, orig); + outext = strrchr(out, '.'); + if (outext) { + /* Existing extension: make sure it's not the same as the replacement + * (as we don't want to overwrite the source file). + */ + outext++; /* advance past '.' */ + if (ext && strcmp(outext, ext) == 0) { + outext = NULL; /* indicate default should be used */ + print_error(_("file name already ends in `.%s'"), ext); + } + } else { + /* No extension: make sure the output extension is not empty + * (again, we don't want to overwrite the source file). + */ + if (!ext) { + outext = NULL; + print_error(_("file name already has no extension")); + } else { + outext = strrchr(out, '\0'); /* point to end of the string */ + *outext++ = '.'; /* append '.' */ + } + } + + /* replace extension or use default name */ + if (outext) { + if (!ext) { + /* Back up and replace '.' with string terminator */ + outext--; + *outext = '\0'; + } else + strcpy(outext, ext); + } else + return NULL; + + return out; +} + +void +print_list_keyword_desc(const char *name, const char *keyword) +{ + printf("%4s%-12s%s\n", "", keyword, name); +} + +static void +print_error(const char *fmt, ...) +{ + va_list va; + fprintf(errfile, "vsyasm: "); + va_start(va, fmt); + vfprintf(errfile, fmt, va); + va_end(va); + fputc('\n', errfile); +} + +static /*@exits@*/ void +handle_yasm_int_error(const char *file, unsigned int line, const char *message) +{ + fprintf(stderr, _("INTERNAL ERROR at %s, line %u: %s\n"), file, line, + gettext(message)); +#ifdef HAVE_ABORT + abort(); +#else + exit(EXIT_FAILURE); +#endif +} + +static /*@exits@*/ void +handle_yasm_fatal(const char *fmt, va_list va) +{ + fprintf(errfile, "vsyasm: %s: ", _("FATAL")); + vfprintf(errfile, gettext(fmt), va); + fputc('\n', errfile); + exit(EXIT_FAILURE); +} + +static const char * +handle_yasm_gettext(const char *msgid) +{ + return gettext(msgid); +} + +static const char *fmt[2] = { + "%s:%lu: %s%s\n", /* GNU */ + "%s(%lu) : %s%s\n" /* VC */ +}; + +static const char *fmt_noline[2] = { + "%s: %s%s\n", /* GNU */ + "%s : %s%s\n" /* VC */ +}; + +static void +print_yasm_error(const char *filename, unsigned long line, const char *msg, + const char *xref_fn, unsigned long xref_line, + const char *xref_msg) +{ + if (line) + fprintf(errfile, fmt[ewmsg_style], filename, line, _("error: "), msg); + else + fprintf(errfile, fmt_noline[ewmsg_style], filename, _("error: "), msg); + + if (xref_fn && xref_msg) { + if (xref_line) + fprintf(errfile, fmt[ewmsg_style], xref_fn, xref_line, _("error: "), + xref_msg); + else + fprintf(errfile, fmt_noline[ewmsg_style], xref_fn, _("error: "), + xref_msg); + } +} + +static void +print_yasm_warning(const char *filename, unsigned long line, const char *msg) +{ + if (line) + fprintf(errfile, fmt[ewmsg_style], filename, line, _("warning: "), + msg); + else + fprintf(errfile, fmt_noline[ewmsg_style], filename, _("warning: "), + msg); +} diff --git a/third-party/yasm/yasm-1.3.0/frontends/yasm/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/frontends/yasm/CMakeLists.txt new file mode 100644 index 0000000000..b11d7f8228 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/yasm/CMakeLists.txt @@ -0,0 +1,34 @@ +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) + +ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/license.c + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/genstring.py + license_msg + ${CMAKE_CURRENT_BINARY_DIR}/license.c + ${CMAKE_SOURCE_DIR}/COPYING + MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/COPYING + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/genstring.py + ) + +SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}) + +IF(BUILD_SHARED_LIBS) + ADD_EXECUTABLE(yasm + yasm.c + yasm-options.c + yasm-plugin.c + ) + TARGET_LINK_LIBRARIES(yasm libyasm ${LIBDL}) +ELSE(BUILD_SHARED_LIBS) + ADD_EXECUTABLE(yasm + yasm.c + yasm-options.c + ) + TARGET_LINK_LIBRARIES(yasm yasmstd libyasm) +ENDIF(BUILD_SHARED_LIBS) + +SET_SOURCE_FILES_PROPERTIES(yasm.c PROPERTIES + OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/license.c + ) + +INSTALL(TARGETS yasm RUNTIME DESTINATION bin) diff --git a/third-party/yasm/yasm-1.3.0/frontends/yasm/Makefile.inc b/third-party/yasm/yasm-1.3.0/frontends/yasm/Makefile.inc new file mode 100644 index 0000000000..ff73f9529a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/yasm/Makefile.inc @@ -0,0 +1,23 @@ +bin_PROGRAMS += yasm +dist_man_MANS += yasm.1 + +if BUILD_MAN +yasm.1: frontends/yasm/yasm.xml + $(XMLTO) -o $(top_builddir) man $(srcdir)/frontends/yasm/yasm.xml +endif + +yasm_SOURCES = frontends/yasm/yasm.c +yasm_SOURCES += frontends/yasm/yasm-options.c +yasm_SOURCES += frontends/yasm/yasm-options.h + +$(srcdir)/frontends/yasm/yasm.c: license.c + +license.c: $(srcdir)/COPYING genstring$(EXEEXT) + $(top_builddir)/genstring$(EXEEXT) license_msg $@ $(srcdir)/COPYING + +BUILT_SOURCES += license.c +CLEANFILES += license.c + +yasm_LDADD = libyasm.a $(INTLLIBS) + +EXTRA_DIST += frontends/yasm/yasm.xml diff --git a/third-party/yasm/yasm-1.3.0/frontends/yasm/genstring.py b/third-party/yasm/yasm-1.3.0/frontends/yasm/genstring.py new file mode 100755 index 0000000000..5e8bf8a13f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/yasm/genstring.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +# Generate array-of-const-string from text file. +# +# Copyright (C) 2006-2007 Peter Johnson +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. +import sys + +def lprint(s, f = sys.stdout, e = '\n') : + f.write(s + e) + +def file_to_string(fout, str_name, fin_name): + from os.path import basename + lprint("/* This file auto-generated from %s by genstring.py - don't edit it */\n" % basename(fin_name), f=fout) + lprint("static const char* %s[] = {" % str_name, f=fout) + lprint("\n".join(' "%s",' % + l.strip().replace('\\', '\\\\').replace('"', '\\"') + for l in open(fin_name)), + f=fout) + lprint("};", f=fout) + +if __name__ == "__main__": + if len(sys.argv) != 4: + lprint("Usage: genstring.py ", f=sys.stderr) + sys.exit(2) + file_to_string(open(sys.argv[2], "w"), sys.argv[1], sys.argv[3]) diff --git a/third-party/yasm/yasm-1.3.0/frontends/yasm/yasm-options.c b/third-party/yasm/yasm-1.3.0/frontends/yasm/yasm-options.c new file mode 100644 index 0000000000..eff6ba9a00 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/yasm/yasm-options.c @@ -0,0 +1,216 @@ +/* + * Generic Options Support Header File + * + * Copyright (c) 2001 Stanislav Karchebny + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of other contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 +#include + +#include "yasm-options.h" + + +#ifdef __DEBUG__ +#define DEBUG(x) fprintf ## x ; +#else +#define DEBUG(x) +#endif + + +/* Options Parser */ +int +parse_cmdline(int argc, char **argv, opt_option *options, size_t nopts, + void (*print_error) (const char *fmt, ...)) +{ + int errors = 0, warnings = 0; + size_t i; + int got_it; + + DEBUG((stderr, "parse_cmdline: entered\n")); + + fail: + while (--argc) { + argv++; + + if (argv[0][0] == '-') { /* opt */ + got_it = 0; + if (argv[0][1] == '-') { /* lopt */ + if (argv[0][2] == '\0') { /* --, end of options */ + /* Handle rest of args as non-options */ + while (--argc) { + argv++; + if (not_an_option_handler(argv[0])) + errors++; + } + return errors; + } + + for (i = 0; i < nopts; i++) { + size_t optlen; + if (options[i].lopt && + strncmp(&argv[0][2], options[i].lopt, + (optlen = strlen(options[i].lopt))) == 0) { + char *param; + char c = argv[0][2 + optlen]; + + if (c != '\0' && c != '=' && !isspace(c)) + continue; + + if (options[i].takes_param) { + param = strchr(&argv[0][2], '='); + if (!param) { + print_error( + _("option `--%s' needs an argument!"), + options[i].lopt); + errors++; + goto fail; + } else { + *param = '\0'; + param++; + } + } else + param = NULL; + + if (!options[i]. + handler(&argv[0][2], param, options[i].extra)) + got_it = 1; + break; + } + } + if (!got_it && !other_option_handler(argv[0])) + got_it = 1; + if (!got_it) { + print_error(_("warning: unrecognized option `%s'"), + argv[0]); + warnings++; + } + } else if (argv[0][1] == '\0') { /* just -, is non-option */ + if (not_an_option_handler(argv[0])) + errors++; + } else { /* sopt */ + for (i = 0; i < nopts; i++) { + if (argv[0][1] == options[i].sopt) { + char *cmd = &argv[0][1]; + char *param; + + if (options[i].takes_param) { + param = argv[1]; + if (argv[0][2] != '\0') + param = &argv[0][2]; + else if (param == NULL || *param == '-') { + print_error( + _("option `-%c' needs an argument!"), + options[i].sopt); + errors++; + goto fail; + } else { + argc--; + argv++; + } + } else + param = NULL; + + if (!options[i].handler(cmd, param, options[i].extra)) + got_it = 1; + break; + } + } + if (!got_it && !other_option_handler(argv[0])) + got_it = 1; + if (!got_it) { + print_error(_("warning: unrecognized option `%s'"), + argv[0]); + warnings++; + } + } + } else { /* not an option, then it should be a file or something */ + + if (not_an_option_handler(argv[0])) + errors++; + } + } + + DEBUG((stderr, "parse_cmdline: finished\n")); + return errors; +} + +void +help_msg(const char *msg, const char *tail, opt_option *options, size_t nopts) +{ + char optbuf[100], optopt[100]; + size_t i; + + printf("%s", gettext(msg)); + + for (i = 0; i < nopts; i++) { + size_t shortopt_len = 0; + size_t longopt_len = 0; + + optbuf[0] = 0; + optopt[0] = 0; + + if (options[i].takes_param) { + if (options[i].sopt) { + sprintf(optbuf, "-%c <%s>", options[i].sopt, + options[i].param_desc ? options[i]. + param_desc : _("param")); + shortopt_len = strlen(optbuf); + } + if (options[i].sopt && options[i].lopt) + strcat(optbuf, ", "); + if (options[i].lopt) { + sprintf(optopt, "--%s=<%s>", options[i].lopt, + options[i].param_desc ? options[i]. + param_desc : _("param")); + strcat(optbuf, optopt); + longopt_len = strlen(optbuf); + } + } else { + if (options[i].sopt) { + sprintf(optbuf, "-%c", options[i].sopt); + shortopt_len = strlen(optbuf); + } + if (options[i].sopt && options[i].lopt) + strcat(optbuf, ", "); + if (options[i].lopt) { + sprintf(optopt, "--%s", options[i].lopt); + strcat(optbuf, optopt); + longopt_len = strlen(optbuf); + } + } + + /* split [-s ], [--long ] if it destroys columns */ + if (shortopt_len && longopt_len && longopt_len > 22) { + optbuf[shortopt_len] = '\0'; + printf(" %-22s %s\n", optopt, gettext(options[i].description)); + printf(" %s\n", optbuf); + } + else + printf(" %-22s %s\n", optbuf, gettext(options[i].description)); + } + + printf("%s", gettext(tail)); +} diff --git a/third-party/yasm/yasm-1.3.0/frontends/yasm/yasm-options.h b/third-party/yasm/yasm-1.3.0/frontends/yasm/yasm-options.h new file mode 100644 index 0000000000..63c4fbeae1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/yasm/yasm-options.h @@ -0,0 +1,75 @@ +/* + * Generic Options Support Header File + * + * Copyright (c) 2001 Stanislav Karchebny + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + */ +#ifndef YASM_OPTIONS_H +#define YASM_OPTIONS_H + +/* an option structure + * operate on either -sopt, --lopt, -sopt or --lopt= + */ +typedef struct opt_option_s +{ + /* short option letter if present, 0 otherwise */ + char sopt; + + /* long option name if present, NULL otherwise */ + /*@null@*/ const char *lopt; + + /* !=0 if option requires parameter, 0 if not */ + int takes_param; + + int (*handler) (char *cmd, /*@null@*/ char *param, int extra); + int extra; /* extra value for handler */ + + /* description to use in help_msg() */ + /*@observer@*/ const char *description; + + /* optional description for the param taken (NULL if not present) */ + /* (short - will be printed after option sopt/lopt) */ + /*@observer@*/ /*@null@*/ const char *param_desc; +} opt_option; + +/* handle everything that is not an option */ +int not_an_option_handler(char *param); + +/* handle possibly other special-case options; no parameters allowed */ +int other_option_handler(char *option); + +/* parse command line calling handlers when appropriate + * argc, argv - pass directly from main(argc,argv) + * options - array of options + * nopts - options count + */ +int parse_cmdline(int argc, char **argv, opt_option *options, size_t nopts, + void (*print_error) (const char *fmt, ...)); + +/* display help message msg followed by list of options in options and followed + * by tail + */ +void help_msg(const char *msg, const char *tail, opt_option *options, + size_t nopts); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/frontends/yasm/yasm-plugin.c b/third-party/yasm/yasm-1.3.0/frontends/yasm/yasm-plugin.c new file mode 100644 index 0000000000..c64edc32f0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/yasm/yasm-plugin.c @@ -0,0 +1,126 @@ +/* + * Semi-portable (Windows and Unix) plugin loading + * + * Copyright (C) 2008 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "libyasm-stdint.h" +#include "yasm-plugin.h" + +#if defined(_MSC_VER) +#include +#elif defined(__GNUC__) +#include +#endif + +static void **loaded_plugins = NULL; +static int num_loaded_plugins = 0; + +static void * +load_dll(const char *name) +{ +#if defined(_MSC_VER) + return LoadLibrary(name); +#elif defined(__GNUC__) + return dlopen(name, RTLD_NOW); +#else + return NULL; +#endif +} + +int +load_plugin(const char *name) +{ + char *path; + void *lib = NULL; + void (*init_plugin) (void) = NULL; + + /* Load library */ + + path = yasm_xmalloc(strlen(name)+10); +#if defined(_MSC_VER) + strcpy(path, name); + strcat(path, ".dll"); + lib = load_dll(path); +#elif defined(__GNUC__) + strcpy(path, "lib"); + strcat(path, name); + strcat(path, ".so"); + lib = load_dll(path); + if (!lib) { + strcpy(path, name); + strcat(path, ".so"); + lib = load_dll(path); + } +#endif + yasm_xfree(path); + if (!lib) + lib = load_dll(name); + + if (!lib) + return 0; /* Didn't load successfully */ + + /* Add to array of loaded plugins */ + loaded_plugins = + yasm_xrealloc(loaded_plugins, (num_loaded_plugins+1)*sizeof(void *)); + loaded_plugins[num_loaded_plugins] = lib; + num_loaded_plugins++; + + /* Get yasm_init_plugin() function and run it */ + +#if defined(_MSC_VER) + init_plugin = + (void (*)(void))GetProcAddress((HINSTANCE)lib, "yasm_init_plugin"); +#elif defined(__GNUC__) + init_plugin = (void (*)(void))(uintptr_t)dlsym(lib, "yasm_init_plugin"); +#endif + + if (!init_plugin) + return 0; /* Didn't load successfully */ + + init_plugin(); + return 1; +} + +void +unload_plugins(void) +{ + int i; + + if (!loaded_plugins) + return; + + for (i = 0; i < num_loaded_plugins; i++) { +#if defined(_MSC_VER) + FreeLibrary((HINSTANCE)loaded_plugins[i]); +#elif defined(__GNUC__) + dlclose(loaded_plugins[i]); +#endif + } + yasm_xfree(loaded_plugins); + num_loaded_plugins = 0; +} diff --git a/third-party/yasm/yasm-1.3.0/frontends/yasm/yasm-plugin.h b/third-party/yasm/yasm-1.3.0/frontends/yasm/yasm-plugin.h new file mode 100644 index 0000000000..efb1bf513a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/yasm/yasm-plugin.h @@ -0,0 +1,34 @@ +/* + * Semi-portable (Windows and Unix) plugin loading + * + * Copyright (C) 2008 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + */ +#ifndef YASM_PLUGIN_H +#define YASM_PLUGIN_H + +/* Load a plugin. Returns 0 on failure. */ +int load_plugin(const char *name); +void unload_plugins(void); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/frontends/yasm/yasm.c b/third-party/yasm/yasm-1.3.0/frontends/yasm/yasm.c new file mode 100644 index 0000000000..ff4c59e281 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/yasm/yasm.c @@ -0,0 +1,1417 @@ +/* + * Program entry point, command line parsing + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include +#include +#include +#include + +#ifdef HAVE_LIBGEN_H +#include +#endif + +#include "yasm-options.h" + +#if defined(CMAKE_BUILD) && defined(BUILD_SHARED_LIBS) +#include "yasm-plugin.h" +#endif + +#include "license.c" + +/* Preprocess-only buffer size */ +#define PREPROC_BUF_SIZE 16384 + +/*@null@*/ /*@only@*/ static char *obj_filename = NULL, *in_filename = NULL; +/*@null@*/ /*@only@*/ static char *global_prefix = NULL, *global_suffix = NULL; +/*@null@*/ /*@only@*/ static char *list_filename = NULL, *map_filename = NULL; +/*@null@*/ /*@only@*/ static char *machine_name = NULL; +static int special_options = 0; +/*@null@*/ /*@dependent@*/ static yasm_arch *cur_arch = NULL; +/*@null@*/ /*@dependent@*/ static const yasm_arch_module * + cur_arch_module = NULL; +/*@null@*/ /*@dependent@*/ static const yasm_parser_module * + cur_parser_module = NULL; +/*@null@*/ /*@dependent@*/ static yasm_preproc *cur_preproc = NULL; +/*@null@*/ /*@dependent@*/ static const yasm_preproc_module * + cur_preproc_module = NULL; +/*@null@*/ static char *objfmt_keyword = NULL; +/*@null@*/ /*@dependent@*/ static const yasm_objfmt_module * + cur_objfmt_module = NULL; +/*@null@*/ /*@dependent@*/ static const yasm_dbgfmt_module * + cur_dbgfmt_module = NULL; +/*@null@*/ /*@dependent@*/ static yasm_listfmt *cur_listfmt = NULL; +/*@null@*/ /*@dependent@*/ static const yasm_listfmt_module * + cur_listfmt_module = NULL; +static int preproc_only = 0; +static unsigned int force_strict = 0; +static int generate_make_dependencies = 0; +static int warning_error = 0; /* warnings being treated as errors */ +static FILE *errfile; +/*@null@*/ /*@only@*/ static char *error_filename = NULL; +static enum { + EWSTYLE_GNU = 0, + EWSTYLE_VC +} ewmsg_style = EWSTYLE_GNU; + +/*@null@*/ /*@dependent@*/ static FILE *open_file(const char *filename, + const char *mode); +static void check_errors(/*@only@*/ yasm_errwarns *errwarns, + /*@only@*/ yasm_object *object, + /*@only@*/ yasm_linemap *linemap); +static void cleanup(/*@null@*/ /*@only@*/ yasm_object *object); + +/* Forward declarations: cmd line parser handlers */ +static int opt_special_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_arch_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_parser_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_preproc_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_objfmt_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_dbgfmt_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_listfmt_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_listfile_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_objfile_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_mapfile_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_machine_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_strict_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_warning_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_error_file(char *cmd, /*@null@*/ char *param, int extra); +static int opt_error_stdout(char *cmd, /*@null@*/ char *param, int extra); +static int preproc_only_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_include_option(char *cmd, /*@null@*/ char *param, int extra); +static int opt_preproc_option(char *cmd, /*@null@*/ char *param, int extra); +static int opt_ewmsg_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_makedep_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_prefix_handler(char *cmd, /*@null@*/ char *param, int extra); +static int opt_suffix_handler(char *cmd, /*@null@*/ char *param, int extra); +#if defined(CMAKE_BUILD) && defined(BUILD_SHARED_LIBS) +static int opt_plugin_handler(char *cmd, /*@null@*/ char *param, int extra); +#endif + +#if defined(CMAKE_BUILD) && !defined(BUILD_SHARED_LIBS) +void yasm_init_plugin(void); +#endif + +static /*@only@*/ char *replace_extension(const char *orig, /*@null@*/ + const char *ext, const char *def); +static void print_error(const char *fmt, ...); + +static /*@exits@*/ void handle_yasm_int_error(const char *file, + unsigned int line, + const char *message); +static /*@exits@*/ void handle_yasm_fatal(const char *message, va_list va); +static const char *handle_yasm_gettext(const char *msgid); +static void print_yasm_error(const char *filename, unsigned long line, + const char *msg, /*@null@*/ const char *xref_fn, + unsigned long xref_line, + /*@null@*/ const char *xref_msg); +static void print_yasm_warning(const char *filename, unsigned long line, + const char *msg); + +static void apply_preproc_builtins(void); +static void apply_preproc_standard_macros(const yasm_stdmac *stdmacs); +static void apply_preproc_saved_options(void); +static void print_list_keyword_desc(const char *name, const char *keyword); + +/* values for special_options */ +#define SPECIAL_SHOW_HELP 0x01 +#define SPECIAL_SHOW_VERSION 0x02 +#define SPECIAL_SHOW_LICENSE 0x04 +#define SPECIAL_LISTED 0x08 + +/* command line options */ +static opt_option options[] = +{ + { 0, "version", 0, opt_special_handler, SPECIAL_SHOW_VERSION, + N_("show version text"), NULL }, + { 0, "license", 0, opt_special_handler, SPECIAL_SHOW_LICENSE, + N_("show license text"), NULL }, + { 'h', "help", 0, opt_special_handler, SPECIAL_SHOW_HELP, + N_("show help text"), NULL }, + { 'a', "arch", 1, opt_arch_handler, 0, + N_("select architecture (list with -a help)"), N_("arch") }, + { 'p', "parser", 1, opt_parser_handler, 0, + N_("select parser (list with -p help)"), N_("parser") }, + { 'r', "preproc", 1, opt_preproc_handler, 0, + N_("select preprocessor (list with -r help)"), N_("preproc") }, + { 'f', "oformat", 1, opt_objfmt_handler, 0, + N_("select object format (list with -f help)"), N_("format") }, + { 'g', "dformat", 1, opt_dbgfmt_handler, 0, + N_("select debugging format (list with -g help)"), N_("debug") }, + { 'L', "lformat", 1, opt_listfmt_handler, 0, + N_("select list format (list with -L help)"), N_("list") }, + { 'l', "list", 1, opt_listfile_handler, 0, + N_("name of list-file output"), N_("listfile") }, + { 'o', "objfile", 1, opt_objfile_handler, 0, + N_("name of object-file output"), N_("filename") }, + { 0, "mapfile", 1, opt_mapfile_handler, 0, + N_("name of map-file output"), N_("filename") }, + { 'm', "machine", 1, opt_machine_handler, 0, + N_("select machine (list with -m help)"), N_("machine") }, + { 0, "force-strict", 0, opt_strict_handler, 0, + N_("treat all sized operands as if `strict' was used"), NULL }, + { 'w', NULL, 0, opt_warning_handler, 1, + N_("inhibits warning messages"), NULL }, + { 'W', NULL, 0, opt_warning_handler, 0, + N_("enables/disables warning"), NULL }, + { 'M', NULL, 0, opt_makedep_handler, 0, + N_("generate Makefile dependencies on stdout"), NULL }, + { 'E', NULL, 1, opt_error_file, 0, + N_("redirect error messages to file"), N_("file") }, + { 's', NULL, 0, opt_error_stdout, 0, + N_("redirect error messages to stdout"), NULL }, + { 'e', "preproc-only", 0, preproc_only_handler, 0, + N_("preprocess only (writes output to stdout by default)"), NULL }, + { 'i', NULL, 1, opt_include_option, 0, + N_("add include path"), N_("path") }, + { 'I', NULL, 1, opt_include_option, 0, + N_("add include path"), N_("path") }, + { 'P', NULL, 1, opt_preproc_option, 0, + N_("pre-include file"), N_("filename") }, + { 'd', NULL, 1, opt_preproc_option, 1, + N_("pre-define a macro, optionally to value"), N_("macro[=value]") }, + { 'D', NULL, 1, opt_preproc_option, 1, + N_("pre-define a macro, optionally to value"), N_("macro[=value]") }, + { 'u', NULL, 1, opt_preproc_option, 2, + N_("undefine a macro"), N_("macro") }, + { 'U', NULL, 1, opt_preproc_option, 2, + N_("undefine a macro"), N_("macro") }, + { 'X', NULL, 1, opt_ewmsg_handler, 0, + N_("select error/warning message style (`gnu' or `vc')"), N_("style") }, + { 0, "prefix", 1, opt_prefix_handler, 0, + N_("prepend argument to name of all external symbols"), N_("prefix") }, + { 0, "suffix", 1, opt_suffix_handler, 0, + N_("append argument to name of all external symbols"), N_("suffix") }, + { 0, "postfix", 1, opt_suffix_handler, 0, + N_("append argument to name of all external symbols"), N_("suffix") }, +#if defined(CMAKE_BUILD) && defined(BUILD_SHARED_LIBS) + { 'N', "plugin", 1, opt_plugin_handler, 0, + N_("load plugin module"), N_("plugin") }, +#endif +}; + +/* version message */ +/*@observer@*/ static const char *version_msg[] = { + PACKAGE_STRING, + "Compiled on " __DATE__ ".", + "Copyright (c) 2001-2014 Peter Johnson and other Yasm developers.", + "Run yasm --license for licensing overview and summary." +}; + +/* help messages */ +/*@observer@*/ static const char *help_head = N_( + "usage: yasm [option]* file\n" + "Options:\n"); +/*@observer@*/ static const char *help_tail = N_( + "\n" + "Files are asm sources to be assembled.\n" + "\n" + "Sample invocation:\n" + " yasm -f elf -o object.o source.asm\n" + "\n" + "Report bugs to bug-yasm@tortall.net\n"); + +/* parsed command line storage until appropriate modules have been loaded */ +typedef STAILQ_HEAD(constcharparam_head, constcharparam) constcharparam_head; + +typedef struct constcharparam { + STAILQ_ENTRY(constcharparam) link; + const char *param; + int id; +} constcharparam; + +static constcharparam_head preproc_options; + +static int +do_preproc_only(void) +{ + yasm_linemap *linemap; + char *preproc_buf; + size_t got; + const char *base_filename; + FILE *out = NULL; + yasm_errwarns *errwarns = yasm_errwarns_create(); + + /* Initialize line map */ + linemap = yasm_linemap_create(); + yasm_linemap_set(linemap, in_filename, 0, 1, 1); + + /* Default output to stdout if not specified or generating dependency + makefiles */ + if (!obj_filename || generate_make_dependencies) { + out = stdout; + + /* determine the object filename if not specified, but we need a + file name for the makefile rule */ + if (generate_make_dependencies && !obj_filename) { + if (in_filename == NULL) + /* Default to yasm.out if no obj filename specified */ + obj_filename = yasm__xstrdup("yasm.out"); + else { + /* replace (or add) extension to base filename */ + yasm__splitpath(in_filename, &base_filename); + if (base_filename[0] == '\0') + obj_filename = yasm__xstrdup("yasm.out"); + else + obj_filename = replace_extension(base_filename, + cur_objfmt_module->extension, "yasm.out"); + } + } + } else { + /* Open output (object) file */ + out = open_file(obj_filename, "wt"); + if (!out) + return EXIT_FAILURE; + } + + /* Create preprocessor */ + cur_preproc = yasm_preproc_create(cur_preproc_module, in_filename, NULL, + linemap, errwarns); + + /* Apply macros */ + apply_preproc_builtins(); + apply_preproc_standard_macros(cur_parser_module->stdmacs); + apply_preproc_standard_macros(cur_objfmt_module->stdmacs); + apply_preproc_saved_options(); + + /* Pre-process until done */ + if (generate_make_dependencies) { + size_t totlen; + + preproc_buf = yasm_xmalloc(PREPROC_BUF_SIZE); + + fprintf(stdout, "%s: %s", obj_filename, in_filename); + totlen = strlen(obj_filename)+2+strlen(in_filename); + + while ((got = yasm_preproc_get_included_file(cur_preproc, preproc_buf, + PREPROC_BUF_SIZE)) != 0) { + totlen += got; + if (totlen > 72) { + fputs(" \\\n ", stdout); + totlen = 2; + } + fputc(' ', stdout); + fwrite(preproc_buf, got, 1, stdout); + } + fputc('\n', stdout); + yasm_xfree(preproc_buf); + } else { + while ((preproc_buf = yasm_preproc_get_line(cur_preproc)) != NULL) { + fputs(preproc_buf, out); + fputc('\n', out); + yasm_xfree(preproc_buf); + } + } + + if (out != stdout) + fclose(out); + + if (yasm_errwarns_num_errors(errwarns, warning_error) > 0) { + yasm_errwarns_output_all(errwarns, linemap, warning_error, + print_yasm_error, print_yasm_warning); + if (out != stdout) + remove(obj_filename); + yasm_linemap_destroy(linemap); + yasm_errwarns_destroy(errwarns); + cleanup(NULL); + return EXIT_FAILURE; + } + + yasm_errwarns_output_all(errwarns, linemap, warning_error, + print_yasm_error, print_yasm_warning); + yasm_linemap_destroy(linemap); + yasm_errwarns_destroy(errwarns); + cleanup(NULL); + return EXIT_SUCCESS; +} + +static int +do_assemble(void) +{ + yasm_object *object; + const char *base_filename; + /*@null@*/ FILE *obj = NULL; + yasm_arch_create_error arch_error; + yasm_linemap *linemap; + yasm_errwarns *errwarns = yasm_errwarns_create(); + int i, matched; + const char *machine; + + /* Initialize line map */ + linemap = yasm_linemap_create(); + yasm_linemap_set(linemap, in_filename, 0, 1, 1); + + /* determine the object filename if not specified */ + if (!obj_filename) { + if (in_filename == NULL) + /* Default to yasm.out if no obj filename specified */ + obj_filename = yasm__xstrdup("yasm.out"); + else { + /* replace (or add) extension to base filename */ + yasm__splitpath(in_filename, &base_filename); + if (base_filename[0] == '\0') + obj_filename = yasm__xstrdup("yasm.out"); + else + obj_filename = replace_extension(base_filename, + cur_objfmt_module->extension, + "yasm.out"); + } + } + + /* Set up architecture using machine and parser. */ + if (!machine_name) { + /* If we're using x86 and the default objfmt bits is 64, default the + * machine to amd64. When we get more arches with multiple machines, + * we should do this in a more modular fashion. + */ + if (strcmp(cur_arch_module->keyword, "x86") == 0 && + cur_objfmt_module->default_x86_mode_bits == 64) + machine_name = yasm__xstrdup("amd64"); + else + machine_name = + yasm__xstrdup(cur_arch_module->default_machine_keyword); + } + + /* If we're using amd64 and the default objfmt is elfx32, change the + * machine to "x32". + */ + if (strcmp(machine_name, "amd64") == 0 && + strcmp(cur_objfmt_module->keyword, "elfx32") == 0) + machine = "x32"; + else + machine = machine_name; + + cur_arch = yasm_arch_create(cur_arch_module, machine, + cur_parser_module->keyword, &arch_error); + if (!cur_arch) { + switch (arch_error) { + case YASM_ARCH_CREATE_BAD_MACHINE: + print_error(_("%s: `%s' is not a valid %s for %s `%s'"), + _("FATAL"), machine_name, _("machine"), + _("architecture"), cur_arch_module->keyword); + break; + case YASM_ARCH_CREATE_BAD_PARSER: + print_error(_("%s: `%s' is not a valid %s for %s `%s'"), + _("FATAL"), cur_parser_module->keyword, + _("parser"), _("architecture"), + cur_arch_module->keyword); + break; + default: + print_error(_("%s: unknown architecture error"), _("FATAL")); + } + + return EXIT_FAILURE; + } + + /* Create object */ + object = yasm_object_create(in_filename, obj_filename, cur_arch, + cur_objfmt_module, cur_dbgfmt_module); + if (!object) { + yasm_error_class eclass; + unsigned long xrefline; + /*@only@*/ /*@null@*/ char *estr, *xrefstr; + + yasm_error_fetch(&eclass, &estr, &xrefline, &xrefstr); + print_error("%s: %s", _("FATAL"), estr); + yasm_xfree(estr); + yasm_xfree(xrefstr); + + cleanup(object); + return EXIT_FAILURE; + } + + /* Get a fresh copy of objfmt_module as it may have changed. */ + cur_objfmt_module = ((yasm_objfmt_base *)object->objfmt)->module; + + /* Check to see if the requested preprocessor is in the allowed list + * for the active parser. + */ + matched = 0; + for (i=0; cur_parser_module->preproc_keywords[i]; i++) + { + if (yasm__strcasecmp(cur_parser_module->preproc_keywords[i], + cur_preproc_module->keyword) == 0) { + matched = 1; + break; + } + } + + if (!matched) { + print_error(_("%s: `%s' is not a valid %s for %s `%s'"), _("FATAL"), + cur_preproc_module->keyword, _("preprocessor"), + _("parser"), cur_parser_module->keyword); + cleanup(object); + return EXIT_FAILURE; + } + + if (global_prefix) + yasm_object_set_global_prefix(object, global_prefix); + if (global_suffix) + yasm_object_set_global_suffix(object, global_suffix); + + cur_preproc = yasm_preproc_create(cur_preproc_module, in_filename, + object->symtab, linemap, errwarns); + + apply_preproc_builtins(); + apply_preproc_standard_macros(cur_parser_module->stdmacs); + apply_preproc_standard_macros(cur_objfmt_module->stdmacs); + apply_preproc_saved_options(); + + /* Get initial x86 BITS setting from object format */ + if (strcmp(cur_arch_module->keyword, "x86") == 0) { + yasm_arch_set_var(cur_arch, "mode_bits", + cur_objfmt_module->default_x86_mode_bits); + } + + yasm_arch_set_var(cur_arch, "force_strict", force_strict); + + /* Try to enable the map file via a map NASM directive. This is + * somewhat of a hack. + */ + if (map_filename) { + const yasm_directive *dir = &cur_objfmt_module->directives[0]; + matched = 0; + for (; dir && dir->name; dir++) { + if (yasm__strcasecmp(dir->name, "map") == 0 && + yasm__strcasecmp(dir->parser, "nasm") == 0) { + yasm_valparamhead vps; + yasm_valparam *vp; + matched = 1; + yasm_vps_initialize(&vps); + vp = yasm_vp_create_string(NULL, yasm__xstrdup(map_filename)); + yasm_vps_append(&vps, vp); + dir->handler(object, &vps, NULL, 0); + yasm_vps_delete(&vps); + } + } + if (!matched) { + print_error( + _("warning: object format `%s' does not support map files"), + cur_objfmt_module->keyword); + } + } + + /* Parse! */ + cur_parser_module->do_parse(object, cur_preproc, list_filename != NULL, + linemap, errwarns); + + check_errors(errwarns, object, linemap); + + /* Finalize parse */ + yasm_object_finalize(object, errwarns); + check_errors(errwarns, object, linemap); + + /* Optimize */ + yasm_object_optimize(object, errwarns); + check_errors(errwarns, object, linemap); + + /* generate any debugging information */ + yasm_dbgfmt_generate(object, linemap, errwarns); + check_errors(errwarns, object, linemap); + + /* open the object file for output (if not already opened by dbg objfmt) */ + if (!obj && strcmp(cur_objfmt_module->keyword, "dbg") != 0) { + obj = open_file(obj_filename, "wb"); + if (!obj) { + cleanup(object); + return EXIT_FAILURE; + } + } + + /* Write the object file */ + yasm_objfmt_output(object, obj?obj:stderr, + strcmp(cur_dbgfmt_module->keyword, "null"), errwarns); + + /* Close object file */ + if (obj) + fclose(obj); + + /* If we had an error at this point, we also need to delete the output + * object file (to make sure it's not left newer than the source). + */ + if (yasm_errwarns_num_errors(errwarns, warning_error) > 0) + remove(obj_filename); + check_errors(errwarns, object, linemap); + + /* Open and write the list file */ + if (list_filename) { + FILE *list = open_file(list_filename, "wt"); + if (!list) { + cleanup(object); + return EXIT_FAILURE; + } + /* Initialize the list format */ + cur_listfmt = yasm_listfmt_create(cur_listfmt_module, in_filename, + obj_filename); + yasm_listfmt_output(cur_listfmt, list, linemap, cur_arch); + fclose(list); + } + + yasm_errwarns_output_all(errwarns, linemap, warning_error, + print_yasm_error, print_yasm_warning); + + yasm_linemap_destroy(linemap); + yasm_errwarns_destroy(errwarns); + cleanup(object); + return EXIT_SUCCESS; +} + +/* main function */ +/*@-globstate -unrecog@*/ +int +main(int argc, char *argv[]) +{ + size_t i; + + errfile = stderr; + +#if defined(HAVE_SETLOCALE) && defined(HAVE_LC_MESSAGES) + setlocale(LC_MESSAGES, ""); +#endif +#if defined(LOCALEDIR) + bindtextdomain(PACKAGE, LOCALEDIR); +#endif + textdomain(PACKAGE); + + /* Initialize errwarn handling */ + yasm_internal_error_ = handle_yasm_int_error; + yasm_fatal = handle_yasm_fatal; + yasm_gettext_hook = handle_yasm_gettext; + yasm_errwarn_initialize(); + + /* Initialize BitVector (needed for intnum/floatnum). */ + if (BitVector_Boot() != ErrCode_Ok) { + print_error(_("%s: could not initialize BitVector"), _("FATAL")); + return EXIT_FAILURE; + } + + /* Initialize intnum and floatnum */ + yasm_intnum_initialize(); + yasm_floatnum_initialize(); + +#ifdef CMAKE_BUILD + /* Load standard modules */ +#ifdef BUILD_SHARED_LIBS + if (!load_plugin("yasmstd")) { + print_error(_("%s: could not load standard modules"), _("FATAL")); + return EXIT_FAILURE; + } +#else + yasm_init_plugin(); +#endif +#endif + + /* Initialize parameter storage */ + STAILQ_INIT(&preproc_options); + + if (parse_cmdline(argc, argv, options, NELEMS(options), print_error)) + return EXIT_FAILURE; + + switch (special_options) { + case SPECIAL_SHOW_HELP: + /* Does gettext calls internally */ + help_msg(help_head, help_tail, options, NELEMS(options)); + return EXIT_SUCCESS; + case SPECIAL_SHOW_VERSION: + for (i=0; imachines; + printf(_("Available %s for %s `%s':\n"), _("machines"), + _("architecture"), cur_arch_module->keyword); + while (m->keyword && m->name) { + print_list_keyword_desc(m->name, m->keyword); + m++; + } + return EXIT_SUCCESS; + } + + /* Default to NASM as the parser */ + if (!cur_parser_module) { + cur_parser_module = yasm_load_parser("nasm"); + if (!cur_parser_module) { + print_error(_("%s: could not load default %s"), _("FATAL"), + _("parser")); + cleanup(NULL); + return EXIT_FAILURE; + } + } + + /* If not already specified, default to the parser's default preproc. */ + if (!cur_preproc_module) { + cur_preproc_module = + yasm_load_preproc(cur_parser_module->default_preproc_keyword); + if (!cur_preproc_module) { + print_error(_("%s: could not load default %s"), _("FATAL"), + _("preprocessor")); + cleanup(NULL); + return EXIT_FAILURE; + } + } + + /* Determine input filename and open input file. */ + if (!in_filename) { + print_error(_("No input files specified")); + return EXIT_FAILURE; + } + + /* handle preproc-only case here */ + if (preproc_only) + return do_preproc_only(); + + /* If list file enabled, make sure we have a list format loaded. */ + if (list_filename) { + /* If not already specified, default to nasm as the list format. */ + if (!cur_listfmt_module) { + cur_listfmt_module = yasm_load_listfmt("nasm"); + if (!cur_listfmt_module) { + print_error(_("%s: could not load default %s"), _("FATAL"), + _("list format")); + return EXIT_FAILURE; + } + } + } + + /* If not already specified, default to null as the debug format. */ + if (!cur_dbgfmt_module) { + cur_dbgfmt_module = yasm_load_dbgfmt("null"); + if (!cur_dbgfmt_module) { + print_error(_("%s: could not load default %s"), _("FATAL"), + _("debug format")); + return EXIT_FAILURE; + } + } + + return do_assemble(); +} +/*@=globstate =unrecog@*/ + +/* Open the object file. Returns 0 on failure. */ +static FILE * +open_file(const char *filename, const char *mode) +{ + FILE *f; + + f = fopen(filename, mode); + if (!f) + print_error(_("could not open file `%s'"), filename); + return f; +} + +static void +check_errors(yasm_errwarns *errwarns, yasm_object *object, + yasm_linemap *linemap) +{ + if (yasm_errwarns_num_errors(errwarns, warning_error) > 0) { + yasm_errwarns_output_all(errwarns, linemap, warning_error, + print_yasm_error, print_yasm_warning); + yasm_linemap_destroy(linemap); + yasm_errwarns_destroy(errwarns); + cleanup(object); + exit(EXIT_FAILURE); + } +} + +/* Define DO_FREE to 1 to enable deallocation of all data structures. + * Useful for detecting memory leaks, but slows down execution unnecessarily + * (as the OS will free everything we miss here). + */ +#define DO_FREE 1 + +/* Cleans up all allocated structures. */ +static void +cleanup(yasm_object *object) +{ + if (DO_FREE) { + if (cur_listfmt) + yasm_listfmt_destroy(cur_listfmt); + if (cur_preproc) + yasm_preproc_destroy(cur_preproc); + if (object) + yasm_object_destroy(object); + + yasm_floatnum_cleanup(); + yasm_intnum_cleanup(); + + yasm_errwarn_cleanup(); + + BitVector_Shutdown(); + } + + if (DO_FREE) { + if (in_filename) + yasm_xfree(in_filename); + if (obj_filename) + yasm_xfree(obj_filename); + if (list_filename) + yasm_xfree(list_filename); + if (map_filename) + yasm_xfree(map_filename); + if (machine_name) + yasm_xfree(machine_name); + if (objfmt_keyword) + yasm_xfree(objfmt_keyword); + } + + if (errfile != stderr && errfile != stdout) + fclose(errfile); +#if defined(CMAKE_BUILD) && defined(BUILD_SHARED_LIBS) + unload_plugins(); +#endif +} + +/* + * Command line options handlers + */ +int +not_an_option_handler(char *param) +{ + if (in_filename) { + print_error( + _("warning: can open only one input file, only the last file will be processed")); + yasm_xfree(in_filename); + } + + in_filename = yasm__xstrdup(param); + + return 0; +} + +int +other_option_handler(char *option) +{ + /* Accept, but ignore, -O and -Onnn, for compatibility with NASM. */ + if (option[0] == '-' && option[1] == 'O') { + int n = 2; + for (;;) { + if (option[n] == '\0') + return 0; + if (!isdigit(option[n])) + return 1; + n++; + } + } + return 1; +} + +static int +opt_special_handler(/*@unused@*/ char *cmd, /*@unused@*/ char *param, int extra) +{ + if (special_options == 0) + special_options = extra; + return 0; +} + +static int +opt_arch_handler(/*@unused@*/ char *cmd, char *param, /*@unused@*/ int extra) +{ + assert(param != NULL); + cur_arch_module = yasm_load_arch(param); + if (!cur_arch_module) { + if (!strcmp("help", param)) { + printf(_("Available yasm %s:\n"), _("architectures")); + yasm_list_arch(print_list_keyword_desc); + special_options = SPECIAL_LISTED; + return 0; + } + print_error(_("%s: unrecognized %s `%s'"), _("FATAL"), + _("architecture"), param); + exit(EXIT_FAILURE); + } + return 0; +} + +static int +opt_parser_handler(/*@unused@*/ char *cmd, char *param, /*@unused@*/ int extra) +{ + assert(param != NULL); + cur_parser_module = yasm_load_parser(param); + if (!cur_parser_module) { + if (!strcmp("help", param)) { + printf(_("Available yasm %s:\n"), _("parsers")); + yasm_list_parser(print_list_keyword_desc); + special_options = SPECIAL_LISTED; + return 0; + } + print_error(_("%s: unrecognized %s `%s'"), _("FATAL"), _("parser"), + param); + exit(EXIT_FAILURE); + } + return 0; +} + +static int +opt_preproc_handler(/*@unused@*/ char *cmd, char *param, /*@unused@*/ int extra) +{ + assert(param != NULL); + cur_preproc_module = yasm_load_preproc(param); + if (!cur_preproc_module) { + if (!strcmp("help", param)) { + printf(_("Available yasm %s:\n"), _("preprocessors")); + yasm_list_preproc(print_list_keyword_desc); + special_options = SPECIAL_LISTED; + return 0; + } + print_error(_("%s: unrecognized %s `%s'"), _("FATAL"), + _("preprocessor"), param); + exit(EXIT_FAILURE); + } + return 0; +} + +static int +opt_objfmt_handler(/*@unused@*/ char *cmd, char *param, /*@unused@*/ int extra) +{ + size_t i; + assert(param != NULL); + cur_objfmt_module = yasm_load_objfmt(param); + if (!cur_objfmt_module) { + if (!strcmp("help", param)) { + printf(_("Available yasm %s:\n"), _("object formats")); + yasm_list_objfmt(print_list_keyword_desc); + special_options = SPECIAL_LISTED; + return 0; + } + print_error(_("%s: unrecognized %s `%s'"), _("FATAL"), + _("object format"), param); + exit(EXIT_FAILURE); + } + if (objfmt_keyword) + yasm_xfree(objfmt_keyword); + objfmt_keyword = yasm__xstrdup(param); + for (i=0; iparam = param; + cp->id = extra; + STAILQ_INSERT_TAIL(&preproc_options, cp, link); + return 0; +} + +static int +opt_ewmsg_handler(/*@unused@*/ char *cmd, char *param, /*@unused@*/ int extra) +{ + if (yasm__strcasecmp(param, "gnu") == 0 || + yasm__strcasecmp(param, "gcc") == 0) { + ewmsg_style = EWSTYLE_GNU; + } else if (yasm__strcasecmp(param, "vc") == 0) { + ewmsg_style = EWSTYLE_VC; + } else + print_error(_("warning: unrecognized message style `%s'"), param); + + return 0; +} + +static int +opt_makedep_handler(/*@unused@*/ char *cmd, /*@unused@*/ char *param, + /*@unused@*/ int extra) +{ + /* Also set preproc_only to 1, we don't want to generate code */ + preproc_only = 1; + generate_make_dependencies = 1; + + return 0; +} + +static int +opt_prefix_handler(/*@unused@*/ char *cmd, char *param, /*@unused@*/ int extra) +{ + if (global_prefix) + yasm_xfree(global_prefix); + + assert(param != NULL); + global_prefix = yasm__xstrdup(param); + + return 0; +} + +static int +opt_suffix_handler(/*@unused@*/ char *cmd, char *param, /*@unused@*/ int extra) +{ + if (global_suffix) + yasm_xfree(global_suffix); + + assert(param != NULL); + global_suffix = yasm__xstrdup(param); + + return 0; +} + +#if defined(CMAKE_BUILD) && defined(BUILD_SHARED_LIBS) +static int +opt_plugin_handler(/*@unused@*/ char *cmd, char *param, + /*@unused@*/ int extra) +{ + if (!load_plugin(param)) + print_error(_("warning: could not load plugin `%s'"), param); + return 0; +} +#endif + +static void +apply_preproc_builtins() +{ + char *predef; + + /* Define standard YASM assembly-time macro constants */ + predef = yasm_xmalloc(strlen("__YASM_OBJFMT__=") + + strlen(objfmt_keyword) + 1); + strcpy(predef, "__YASM_OBJFMT__="); + strcat(predef, objfmt_keyword); + yasm_preproc_define_builtin(cur_preproc, predef); + yasm_xfree(predef); +} + +static void +apply_preproc_standard_macros(const yasm_stdmac *stdmacs) +{ + int i, matched; + + if (!stdmacs) + return; + + matched = -1; + for (i=0; stdmacs[i].parser; i++) + if (yasm__strcasecmp(stdmacs[i].parser, + cur_parser_module->keyword) == 0 && + yasm__strcasecmp(stdmacs[i].preproc, + cur_preproc_module->keyword) == 0) + matched = i; + if (matched >= 0 && stdmacs[matched].macros) + yasm_preproc_add_standard(cur_preproc, stdmacs[matched].macros); +} + +static void +apply_preproc_saved_options() +{ + constcharparam *cp, *cpnext; + + void (*funcs[3])(yasm_preproc *, const char *); + funcs[0] = cur_preproc_module->add_include_file; + funcs[1] = cur_preproc_module->predefine_macro; + funcs[2] = cur_preproc_module->undefine_macro; + + STAILQ_FOREACH(cp, &preproc_options, link) { + if (0 <= cp->id && cp->id < 3 && funcs[cp->id]) + funcs[cp->id](cur_preproc, cp->param); + } + + cp = STAILQ_FIRST(&preproc_options); + while (cp != NULL) { + cpnext = STAILQ_NEXT(cp, link); + yasm_xfree(cp); + cp = cpnext; + } + STAILQ_INIT(&preproc_options); +} + +/* Replace extension on a filename (or append one if none is present). + * If output filename would be identical to input (same extension out as in), + * returns (copy of) def. + * A NULL ext means the trailing '.' should NOT be included, whereas a "" ext + * means the trailing '.' should be included. + */ +static char * +replace_extension(const char *orig, /*@null@*/ const char *ext, + const char *def) +{ + char *out, *outext; + size_t deflen, outlen; + + /* allocate enough space for full existing name + extension */ + outlen = strlen(orig) + 2; + if (ext) + outlen += strlen(ext) + 1; + deflen = strlen(def) + 1; + if (outlen < deflen) + outlen = deflen; + out = yasm_xmalloc(outlen); + + strcpy(out, orig); + outext = strrchr(out, '.'); + if (outext) { + /* Existing extension: make sure it's not the same as the replacement + * (as we don't want to overwrite the source file). + */ + outext++; /* advance past '.' */ + if (ext && strcmp(outext, ext) == 0) { + outext = NULL; /* indicate default should be used */ + print_error( + _("file name already ends in `.%s': output will be in `%s'"), + ext, def); + } + } else { + /* No extension: make sure the output extension is not empty + * (again, we don't want to overwrite the source file). + */ + if (!ext) + print_error( + _("file name already has no extension: output will be in `%s'"), + def); + else { + outext = strrchr(out, '\0'); /* point to end of the string */ + *outext++ = '.'; /* append '.' */ + } + } + + /* replace extension or use default name */ + if (outext) { + if (!ext) { + /* Back up and replace '.' with string terminator */ + outext--; + *outext = '\0'; + } else + strcpy(outext, ext); + } else + strcpy(out, def); + + return out; +} + +void +print_list_keyword_desc(const char *name, const char *keyword) +{ + printf("%4s%-12s%s\n", "", keyword, name); +} + +static void +print_error(const char *fmt, ...) +{ + va_list va; + fprintf(errfile, "yasm: "); + va_start(va, fmt); + vfprintf(errfile, fmt, va); + va_end(va); + fputc('\n', errfile); +} + +static /*@exits@*/ void +handle_yasm_int_error(const char *file, unsigned int line, const char *message) +{ + fprintf(stderr, _("INTERNAL ERROR at %s, line %u: %s\n"), file, line, + gettext(message)); +#ifdef HAVE_ABORT + abort(); +#else + exit(EXIT_FAILURE); +#endif +} + +static /*@exits@*/ void +handle_yasm_fatal(const char *fmt, va_list va) +{ + fprintf(errfile, "yasm: %s: ", _("FATAL")); + vfprintf(errfile, gettext(fmt), va); + fputc('\n', errfile); + exit(EXIT_FAILURE); +} + +static const char * +handle_yasm_gettext(const char *msgid) +{ + return gettext(msgid); +} + +static const char *fmt[2] = { + "%s:%lu: %s%s\n", /* GNU */ + "%s(%lu) : %s%s\n" /* VC */ +}; + +static const char *fmt_noline[2] = { + "%s: %s%s\n", /* GNU */ + "%s : %s%s\n" /* VC */ +}; + +static void +print_yasm_error(const char *filename, unsigned long line, const char *msg, + const char *xref_fn, unsigned long xref_line, + const char *xref_msg) +{ + if (line) + fprintf(errfile, fmt[ewmsg_style], filename, line, _("error: "), msg); + else + fprintf(errfile, fmt_noline[ewmsg_style], filename, _("error: "), msg); + + if (xref_fn && xref_msg) { + if (xref_line) + fprintf(errfile, fmt[ewmsg_style], xref_fn, xref_line, _("error: "), + xref_msg); + else + fprintf(errfile, fmt_noline[ewmsg_style], xref_fn, _("error: "), + xref_msg); + } +} + +static void +print_yasm_warning(const char *filename, unsigned long line, const char *msg) +{ + if (line) + fprintf(errfile, fmt[ewmsg_style], filename, line, _("warning: "), + msg); + else + fprintf(errfile, fmt_noline[ewmsg_style], filename, _("warning: "), + msg); +} diff --git a/third-party/yasm/yasm-1.3.0/frontends/yasm/yasm.xml b/third-party/yasm/yasm-1.3.0/frontends/yasm/yasm.xml new file mode 100644 index 0000000000..0f074628c8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/frontends/yasm/yasm.xml @@ -0,0 +1,552 @@ + + + + + + + The Yasm Modular Assembler + April 2007 + Yasm + + Peter + Johnson + +

peter@tortall.net
+ + + + + 2004 + 2005 + 2006 + 2007 + Peter Johnson + + + + + yasm + 1 + + + + yasm + The Yasm Modular Assembler + + + + + yasm + + + + + + + + + + infile + + + + yasm + + + + + + + + Description + + The Yasm Modular Assembler is a portable, retargetable + assembler written under the new (2 or 3 clause) BSD + license. Yasm currently supports the x86 and AMD64 instruction + sets, accepts NASM and GAS assembler syntaxes, outputs binary, + ELF32, ELF64, COFF, Win32, and Win64 object formats, and generates + source debugging information in STABS, DWARF 2, and CodeView 8 + formats. + + YASM consists of the yasm command, libyasm, + the core backend library, and a large number of modules. + Currently, libyasm and the loadable modules are statically built + into the yasm executable. + + The yasm command assembles the file infile + and directs output to the file outfile + if specified. If outfile is not + specified, yasm will derive a default output + file name from the name of its input file, usually by appending + .o or .obj, or by + removing all extensions for a raw binary file. Failing that, the + output file name will be yasm.out. + + If called with an infile of + -, yasm assembles the standard + input and directs output to the file + outfile, or + yasm.out if no + outfile is specified. + + + + Options + + Many options may be given in one of two forms: either a dash + followed by a single letter, or two dashes followed by a long + option name. Options are listed in alphabetical order. + + + General Options + + + + or + : Select + target architecture + + + Selects the target architecture. The default architecture + is x86, which supports both the IA-32 and + derivatives and AMD64 instruction sets. To print a list of + available architectures to standard output, use + help as arch. See + + + yasm_arch + 7 + + + for a list of supported architectures. + + + + + or + : + Select object format + + + Selects the output object format. The default object + format is bin, which is a flat format binary + with no relocation. To print a list of available object + formats to standard output, use help as + format. See + + + yasm_objfmts + 7 + + + for a list of supported object formats. + + + + + or + : + Select debugging format + + + Selects the debugging format for debug information. + Debugging information can be used by a debugger to associate + executable code back to the source file or get data structure + and type information. Available debug formats vary between + different object formats; yasm will error + when an invalid combination is selected. The default object + format is selected by the object format. To print a list of + available debugging formats to standard output, use + help as debug. See + + + yasm_dbgfmts + 7 + + + for a list of supported debugging formats. + + + + + or + : + Select list file format + + + Selects the format/style of the output list file. List + files typically intermix the original source with the machine + code generated by the assembler. The default list format is + nasm, which mimics the NASM list file format. + To print a list of available list file formats to standard + output, use help as + list. + + + + + or + : + Specify list filename + + + Specifies the name of the output list file. If this + option is not used, no list file is generated. + + + + + or + : + Select target machine architecture + + + Selects the target machine architecture. Essentially a + subtype of the selected architecture, the machine type selects + between major subsets of an architecture. For example, for the + x86 architecture, the two available machines are + x86, which is used for the IA-32 and derivative + 32-bit instruction set, and amd64, which is used + for the 64-bit instruction set. This differentiation is + required to generate the proper object file for relocatable + object formats such as COFF and ELF. To print a list of + available machines for a given architecture to standard output, + use help as machine + and the given architecture using . See + + + yasm_arch + 7 + + + for more details. + + + + + or + : + Specify object filename + + + Specifies the name of the output file, overriding any + default name generated by Yasm. + + + + + or + : + Select parser + + + Selects the parser (the assembler syntax). The default + parser is nasm, which emulates the syntax of + NASM, the Netwide Assembler. Another available parser is + gas, which emulates the syntax of GNU AS. To + print a list of available parsers to standard output, use + help as parser. See + + + yasm_parsers + 7 + + + for a list of supported parsers. + + + + + or + : + Select preprocessor + + + Selects the preprocessor to use on the input file before + passing it to the parser. Preprocessors often provide macro + functionality that is not included in the main parser. The + default preprocessor is nasm, which is an + imported version of the actual NASM preprocessor. A + raw preprocessor is also available, which simply + skips the preprocessing step, passing the input file directly + to the parser. To print a list of available preprocessors to + standard output, use help as + preproc. + + + + + or : Print a + summary of options + + + Prints a summary of invocation options. All other options + are ignored, and no output file is generated. + + + + + : Get the Yasm version + + + This option causes Yasm to prints the version number of + Yasm as well as a license summary to standard output. All + other options are ignored, and no output file is + generated. + + + + + + + Warning Options + + options have two contrary forms: + and + . Only the + non-default forms are shown here. + + The warning options are handled in the order given on the + command line, so if is followed by + , all warnings are turned off + except for orphan-labels. + + + + : Inhibit all warning messages + + + This option causes Yasm to inhibit all warning messages. + As discussed above, this option may be followed by other + options to re-enable specified warnings. + + + + + : Treat warnings as errors + + + This option causes Yasm to treat all warnings as errors. + Normally warnings do not prevent an object file from being + generated and do not result in a failure exit status from + yasm, whereas errors do. This option makes + warnings equivalent to errors in terms of this behavior. + + + + + : Do not warn on + unrecognized input characters + + + Causes Yasm to not warn on unrecognized characters found + in the input. Normally Yasm will generate a warning for any + non-ASCII character found in the input file. + + + + + : Warn on labels lacking a + trailing option + + + When using the NASM-compatible parser, causes Yasm to warn + about labels found alone on a line without a trailing colon. + While these are legal labels in NASM syntax, they may be + unintentional, due to typos or macro definition + ordering. + + + + + : + Change error/warning reporting style + + + Selects a specific output style for error and warning + messages. The default is gnu style, which + mimics the output of gcc. The + vc style is also available, which mimics the + output of Microsoft's Visual C++ compiler. + + This option is available so that Yasm integrates more + naturally into IDE environments such as Visual Studio or Emacs, allowing the IDE to + correctly recognize the error/warning message as such and link + back to the offending line of source code. + + + + + + + Preprocessor Options + + While these preprocessor options theoretically will affect + any preprocessor, the only preprocessor currently in Yasm is the + nasm preprocessor. + + + + : Pre-define a + macro + + + Pre-defines a single-line macro. The value is optional + (if no value is given, the macro is still defined, but to an + empty value). + + + + + or : + Only preprocess + + + Stops assembly after the preprocessing stage; preprocessed + output is sent to the specified output name or, if no output + name is specified, the standard output. No object file is + produced. + + + + + : Add + include file path + + + Adds directory path to the + search path for include files. The search path defaults to + only including the directory in which the source file + resides. + + + + + : + Pre-include a file + + + Pre-includes file filename, + making it look as though filename + was prepended to the input. Can be useful for prepending + multi-line macros that the can't + support. + + + + + : + Undefine a macro + + + Undefines a single-line macro (may be either a built-in + macro or one defined earlier in the command line with + . + + + + + + + + + Examples + + To assemble NASM syntax, 32-bit x86 source + source.asm into ELF file + source.o, warning on orphan labels: + + yasm -f elf32 -Worphan-labels source.asm + + To assemble NASM syntax AMD64 source + x.asm into Win64 file + object.obj: + + yasm -f win64 -o object.obj x.asm + + To assemble already preprocessed NASM syntax x86 source + y.asm into flat binary file + y.com: + + yasm -f bin -r raw -o y.com y.asm + + + + Diagnostics + + The yasm command exits 0 on success, and + nonzero if an error occurs. + + + + Compatibility + + Yasm's NASM parser and preprocessor, while they strive to be + as compatible as possible with NASM, have a few incompatibilities + due to YASM's different internal structure. + + Yasm's GAS parser and preprocessor are missing a number of + features present in GNU AS. + + + + Restrictions + + As object files are often architecture and machine dependent, + not all combinations of object formats, architectures, and machines + are legal; trying to use an invalid combination will result in an + error. + + There is no support for symbol maps. + + + + See Also + + + yasm_arch + 7 + , + + yasm_dbgfmts + 7 + , + + yasm_objfmts + 7 + , + + yasm_parsers + 7 + + + Related tools: + + as + 1 + , + + ld + 1 + , + + nasm + 1 + + + + + Bugs + + When using the x86 architecture, it is overly + easy to generate AMD64 code (using the BITS + 64 directive) and generate a 32-bit object file (by + failing to specify or selecting a 64-bit + object format such as ELF64 on the command line). + + diff --git a/third-party/yasm/yasm-1.3.0/genstring.c b/third-party/yasm/yasm-1.3.0/genstring.c new file mode 100644 index 0000000000..a66e2f56d2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/genstring.c @@ -0,0 +1,102 @@ +/* + * + * Generate array-of-const-string from text file. + * + * Copyright (C) 2006-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 +#include +#include + +#define MAXLINE 1024 + +int +main(int argc, char *argv[]) +{ + FILE *in, *out; + int i; + char *str; + char *strp; + size_t len; + + if (argc < 4) { + fprintf(stderr, "Usage: %s [ ...]\n", + argv[0]); + return EXIT_FAILURE; + } + + out = fopen(argv[2], "wt"); + + if (!out) { + fprintf(stderr, "Could not open `%s'.\n", argv[2]); + return EXIT_FAILURE; + } + + str = malloc(MAXLINE); + + fprintf(out, "/* This file auto-generated from %s by genstring.c" + " - don't edit it */\n\n" + "static const char *%s[] = {\n", argv[3], argv[1]); + + for (i=3; i 0 && (strp[len-1] == ' ' || strp[len-1] == '\t' || + strp[len-1] == '\n')) { + strp[len-1] = '\0'; + len--; + } + + /* output as string to output file */ + fprintf(out, " \""); + while (*strp != '\0') { + if (*strp == '\\' || *strp == '"') + fputc('\\', out); + fputc(*strp, out); + strp++; + } + fprintf(out, "\",\n"); + } + + fclose(in); + } + + fprintf(out, "};\n"); + fclose(out); + + free(str); + + return EXIT_SUCCESS; +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm-stdint.h.cmake b/third-party/yasm/yasm-1.3.0/libyasm-stdint.h.cmake new file mode 100644 index 0000000000..3759a0355a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm-stdint.h.cmake @@ -0,0 +1,46 @@ +#ifndef YASM_STDINT_H +#define YASM_STDINT_H + +#cmakedefine HAVE_STDINT_H + +#ifdef HAVE_STDINT_H +#include +#elif defined(_MSC_VER) + +#ifndef _UINTPTR_T_DEFINED +#ifdef _WIN64 +#include +#else +typedef unsigned long uintptr_t; +#endif +#define _UINTPTR_T_DEFINED +#endif + +#else +typedef unsigned long uintptr_t; +#endif + +#ifndef BUILD_SHARED_LIBS +#cmakedefine BUILD_SHARED_LIBS +#define BUILD_SHARED_LIBS_UNDEF +#endif + +#ifndef YASM_LIB_DECL +# if defined(BUILD_SHARED_LIBS) && defined(_MSC_VER) +# ifdef YASM_LIB_SOURCE +# define YASM_LIB_DECL __declspec(dllexport) +# else +# define YASM_LIB_DECL __declspec(dllimport) +# endif +# else +# define YASM_LIB_DECL +# endif +#endif + +#undef HAVE_STDINT_H +#ifdef BUILD_SHARED_LIBS_UNDEF +#undef BUILD_SHARED_LIBS +#undef BUILD_SHARED_LIBS_UNDEF +#endif + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm.h b/third-party/yasm/yasm-1.3.0/libyasm.h new file mode 100644 index 0000000000..f52c133b39 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm.h @@ -0,0 +1,75 @@ +/** + * \file libyasm.h + * \brief YASM library primary header file. + * + * \license + * Copyright (C) 2003-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_LIB_H +#define YASM_LIB_H + +#ifdef YASM_PYXELATOR +typedef struct __FILE FILE; +typedef struct __va_list va_list; +typedef unsigned long size_t; +typedef unsigned long uintptr_t; +#else +#include +#include +#include +#endif + +#include + +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/libyasm/CMakeLists.txt new file mode 100644 index 0000000000..bd9b7b2889 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/CMakeLists.txt @@ -0,0 +1,80 @@ +SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}) + +ADD_LIBRARY(libyasm + assocdat.c + bitvect.c + bc-align.c + bc-data.c + bc-incbin.c + bc-org.c + bc-reserve.c + bytecode.c + cmake-module.c + errwarn.c + expr.c + file.c + floatnum.c + hamt.c + insn.c + intnum.c + inttree.c + linemap.c + md5.c + mergesort.c + phash.c + section.c + strcasecmp.c + strsep.c + symrec.c + valparam.c + value.c + xmalloc.c + xstrdup.c + ) +IF(BUILD_SHARED_LIBS) + SET_TARGET_PROPERTIES(libyasm PROPERTIES + OUTPUT_NAME "yasm" + COMPILE_FLAGS -DYASM_LIB_SOURCE + ) +ELSE(BUILD_SHARED_LIBS) + SET_TARGET_PROPERTIES(libyasm PROPERTIES + COMPILE_FLAGS -DYASM_LIB_SOURCE + ) +ENDIF(BUILD_SHARED_LIBS) + +INSTALL(TARGETS libyasm + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + ) + +INSTALL(FILES + arch.h + assocdat.h + bitvect.h + bytecode.h + compat-queue.h + coretype.h + dbgfmt.h + errwarn.h + expr.h + file.h + floatnum.h + hamt.h + insn.h + intnum.h + inttree.h + linemap.h + listfmt.h + md5.h + module.h + objfmt.h + parser.h + phash.h + preproc.h + section.h + symrec.h + valparam.h + value.h + DESTINATION include/libyasm + ) diff --git a/third-party/yasm/yasm-1.3.0/libyasm/Makefile.inc b/third-party/yasm/yasm-1.3.0/libyasm/Makefile.inc new file mode 100644 index 0000000000..042dd3904e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/Makefile.inc @@ -0,0 +1,80 @@ +libyasm_a_SOURCES += libyasm/assocdat.c +libyasm_a_SOURCES += libyasm/bitvect.c +libyasm_a_SOURCES += libyasm/bc-align.c +libyasm_a_SOURCES += libyasm/bc-data.c +libyasm_a_SOURCES += libyasm/bc-incbin.c +libyasm_a_SOURCES += libyasm/bc-org.c +libyasm_a_SOURCES += libyasm/bc-reserve.c +libyasm_a_SOURCES += libyasm/bytecode.c +libyasm_a_SOURCES += libyasm/errwarn.c +libyasm_a_SOURCES += libyasm/expr.c +libyasm_a_SOURCES += libyasm/file.c +libyasm_a_SOURCES += libyasm/floatnum.c +libyasm_a_SOURCES += libyasm/hamt.c +libyasm_a_SOURCES += libyasm/insn.c +libyasm_a_SOURCES += libyasm/intnum.c +libyasm_a_SOURCES += libyasm/inttree.c +libyasm_a_SOURCES += libyasm/linemap.c +libyasm_a_SOURCES += libyasm/md5.c +libyasm_a_SOURCES += libyasm/mergesort.c +libyasm_a_SOURCES += libyasm/phash.c +libyasm_a_SOURCES += libyasm/section.c +libyasm_a_SOURCES += libyasm/strcasecmp.c +libyasm_a_SOURCES += libyasm/strsep.c +libyasm_a_SOURCES += libyasm/symrec.c +libyasm_a_SOURCES += libyasm/valparam.c +libyasm_a_SOURCES += libyasm/value.c +libyasm_a_SOURCES += libyasm/xmalloc.c +libyasm_a_SOURCES += libyasm/xstrdup.c +nodist_libyasm_a_SOURCES += module.c + +module.c: $(top_srcdir)/libyasm/module.in genmodule$(EXEEXT) Makefile + $(top_builddir)/genmodule$(EXEEXT) $(top_srcdir)/libyasm/module.in Makefile + +CLEANFILES += module.c + +noinst_PROGRAMS += genmodule + +genmodule_SOURCES = +EXTRA_DIST += libyasm/genmodule.c +genmodule_LDADD = genmodule.$(OBJEXT) +genmodule_LINK = $(CCLD_FOR_BUILD) -o $@ + +genmodule.$(OBJEXT): libyasm/genmodule.c + $(CC_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) -c -o $@ `test -f libyasm/genmodule.c || echo '$(srcdir)/'`libyasm/genmodule.c + +EXTRA_DIST += libyasm/module.in + +modincludedir = $(includedir)/libyasm + +modinclude_HEADERS = libyasm/arch.h +modinclude_HEADERS += libyasm/assocdat.h +modinclude_HEADERS += libyasm/bitvect.h +modinclude_HEADERS += libyasm/bytecode.h +modinclude_HEADERS += libyasm/compat-queue.h +modinclude_HEADERS += libyasm/coretype.h +modinclude_HEADERS += libyasm/dbgfmt.h +modinclude_HEADERS += libyasm/errwarn.h +modinclude_HEADERS += libyasm/expr.h +modinclude_HEADERS += libyasm/file.h +modinclude_HEADERS += libyasm/floatnum.h +modinclude_HEADERS += libyasm/hamt.h +modinclude_HEADERS += libyasm/insn.h +modinclude_HEADERS += libyasm/intnum.h +modinclude_HEADERS += libyasm/inttree.h +modinclude_HEADERS += libyasm/linemap.h +modinclude_HEADERS += libyasm/listfmt.h +modinclude_HEADERS += libyasm/md5.h +modinclude_HEADERS += libyasm/module.h +modinclude_HEADERS += libyasm/objfmt.h +modinclude_HEADERS += libyasm/parser.h +modinclude_HEADERS += libyasm/phash.h +modinclude_HEADERS += libyasm/preproc.h +modinclude_HEADERS += libyasm/section.h +modinclude_HEADERS += libyasm/symrec.h +modinclude_HEADERS += libyasm/valparam.h +modinclude_HEADERS += libyasm/value.h + +EXTRA_DIST += libyasm/tests/Makefile.inc + +include libyasm/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/libyasm/arch.h b/third-party/yasm/yasm-1.3.0/libyasm/arch.h new file mode 100644 index 0000000000..3da9f9fca3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/arch.h @@ -0,0 +1,495 @@ +/** + * \file libyasm/arch.h + * \brief YASM architecture interface. + * + * \license + * Copyright (C) 2002-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_ARCH_H +#define YASM_ARCH_H + +/** Errors that may be returned by yasm_arch_module::create(). */ +typedef enum yasm_arch_create_error { + YASM_ARCH_CREATE_OK = 0, /**< No error. */ + YASM_ARCH_CREATE_BAD_MACHINE, /**< Unrecognized machine name. */ + YASM_ARCH_CREATE_BAD_PARSER /**< Unrecognized parser name. */ +} yasm_arch_create_error; + +/** Return values for yasm_arch_module::parse_check_insnprefix(). */ +typedef enum yasm_arch_insnprefix { + YASM_ARCH_NOTINSNPREFIX = 0, /**< Unrecognized */ + YASM_ARCH_INSN, /**< An instruction */ + YASM_ARCH_PREFIX /**< An instruction prefix */ +} yasm_arch_insnprefix; + +/** Types of registers / target modifiers that may be returned by + * yasm_arch_module::parse_check_regtmod(). + */ +typedef enum yasm_arch_regtmod { + YASM_ARCH_NOTREGTMOD = 0, /**< Unrecognized */ + YASM_ARCH_REG, /**< A "normal" register */ + YASM_ARCH_REGGROUP, /**< A group of indexable registers */ + YASM_ARCH_SEGREG, /**< A segment register */ + YASM_ARCH_TARGETMOD /**< A target modifier (for jumps) */ +} yasm_arch_regtmod; + +#ifndef YASM_DOXYGEN +/** Base #yasm_arch structure. Must be present as the first element in any + * #yasm_arch implementation. + */ +typedef struct yasm_arch_base { + /** #yasm_arch_module implementation for this architecture. */ + const struct yasm_arch_module *module; +} yasm_arch_base; +#endif + +/** YASM machine subtype. A number of different machine types may be + * associated with a single architecture. These may be specific CPU's, but + * the ABI used to interface with the architecture should be the primary + * differentiator between machines. Some object formats (ELF) use the machine + * to determine parameters within the generated output. + */ +typedef struct yasm_arch_machine { + /** One-line description of the machine. */ + const char *name; + + /** Keyword used to select machine. */ + const char *keyword; +} yasm_arch_machine; + +/** YASM architecture module interface. + * \note All "data" in parser-related functions (yasm_arch_parse_*) needs to + * start the parse initialized to 0 to make it okay for a parser-related + * function to use/check previously stored data to see if it's been + * called before on the same piece of data. + */ +typedef struct yasm_arch_module { + /** One-line description of the architecture. + * Call yasm_arch_name() to get the name of a particular #yasm_arch. + */ + const char *name; + + /** Keyword used to select architecture. + * Call yasm_arch_keyword() to get the keyword of a particular #yasm_arch. + */ + const char *keyword; + + /** NULL-terminated list of directives. NULL if none. */ + /*@null@*/ const yasm_directive *directives; + + /** Create architecture. + * Module-level implementation of yasm_arch_create(). + * Call yasm_arch_create() instead of calling this function. + */ + /*@only@*/ yasm_arch * (*create) (const char *machine, const char *parser, + /*@out@*/ yasm_arch_create_error *error); + + /** Module-level implementation of yasm_arch_destroy(). + * Call yasm_arch_destroy() instead of calling this function. + */ + void (*destroy) (/*@only@*/ yasm_arch *arch); + + /** Module-level implementation of yasm_arch_get_machine(). + * Call yasm_arch_get_machine() instead of calling this function. + */ + const char * (*get_machine) (const yasm_arch *arch); + + /** Module-level implementation of yasm_arch_get_address_size(). + * Call yasm_arch_get_address_size() instead of calling this function. + */ + unsigned int (*get_address_size) (const yasm_arch *arch); + + /** Module-level implementation of yasm_arch_set_var(). + * Call yasm_arch_set_var() instead of calling this function. + */ + int (*set_var) (yasm_arch *arch, const char *var, unsigned long val); + + /** Module-level implementation of yasm_arch_parse_check_insnprefix(). + * Call yasm_arch_parse_check_insnprefix() instead of calling this function. + */ + yasm_arch_insnprefix (*parse_check_insnprefix) + (yasm_arch *arch, const char *id, size_t id_len, unsigned long line, + /*@out@*/ /*@only@*/ yasm_bytecode **bc, /*@out@*/ uintptr_t *prefix); + + /** Module-level implementation of yasm_arch_parse_check_regtmod(). + * Call yasm_arch_parse_check_regtmod() instead of calling this function. + */ + yasm_arch_regtmod (*parse_check_regtmod) + (yasm_arch *arch, const char *id, size_t id_len, + /*@out@*/ uintptr_t *data); + + /** Module-level implementation of yasm_arch_get_fill(). + * Call yasm_arch_get_fill() instead of calling this function. + */ + const unsigned char ** (*get_fill) (const yasm_arch *arch); + + /** Module-level implementation of yasm_arch_floatnum_tobytes(). + * Call yasm_arch_floatnum_tobytes() instead of calling this function. + */ + int (*floatnum_tobytes) (yasm_arch *arch, const yasm_floatnum *flt, + unsigned char *buf, size_t destsize, + size_t valsize, size_t shift, int warn); + + /** Module-level implementation of yasm_arch_intnum_tobytes(). + * Call yasm_arch_intnum_tobytes() instead of calling this function. + */ + int (*intnum_tobytes) (yasm_arch *arch, const yasm_intnum *intn, + unsigned char *buf, size_t destsize, size_t valsize, + int shift, const yasm_bytecode *bc, + int warn); + + /** Module-level implementation of yasm_arch_get_reg_size(). + * Call yasm_arch_get_reg_size() instead of calling this function. + */ + unsigned int (*get_reg_size) (yasm_arch *arch, uintptr_t reg); + + /** Module-level implementation of yasm_arch_reggroup_get_reg(). + * Call yasm_arch_reggroup_get_reg() instead of calling this function. + */ + uintptr_t (*reggroup_get_reg) (yasm_arch *arch, uintptr_t reggroup, + unsigned long regindex); + + /** Module-level implementation of yasm_arch_reg_print(). + * Call yasm_arch_reg_print() instead of calling this function. + */ + void (*reg_print) (yasm_arch *arch, uintptr_t reg, FILE *f); + + /** Module-level implementation of yasm_arch_segreg_print(). + * Call yasm_arch_segreg_print() instead of calling this function. + */ + void (*segreg_print) (yasm_arch *arch, uintptr_t segreg, FILE *f); + + /** Module-level implementation of yasm_arch_ea_create(). + * Call yasm_arch_ea_create() instead of calling this function. + */ + yasm_effaddr * (*ea_create) (yasm_arch *arch, /*@keep@*/ yasm_expr *e); + + /** Module-level implementation of yasm_arch_ea_destroy(). + * Call yasm_arch_ea_destroy() instead of calling this function. + */ + void (*ea_destroy) (/*@only@*/ yasm_effaddr *ea); + + /** Module-level implementation of yasm_arch_ea_print(). + * Call yasm_arch_ea_print() instead of calling this function. + */ + void (*ea_print) (const yasm_effaddr *ea, FILE *f, int indent_level); + + /** Module-level implementation of yasm_arch_create_empty_insn(). + * Call yasm_arch_create_empty_insn() instead of calling this function. + */ + /*@only@*/ yasm_bytecode * (*create_empty_insn) (yasm_arch *arch, + unsigned long line); + + /** NULL-terminated list of machines for this architecture. + * Call yasm_arch_get_machine() to get the active machine of a particular + * #yasm_arch. + */ + const yasm_arch_machine *machines; + + /** Default machine keyword. + * Call yasm_arch_get_machine() to get the active machine of a particular + * #yasm_arch. + */ + const char *default_machine_keyword; + + /** Canonical "word" size in bits. + * Call yasm_arch_wordsize() to get the word size of a particular + * #yasm_arch. + */ + unsigned int wordsize; + + /** Worst case minimum instruction length in bytes. + * Call yasm_arch_min_insn_len() to get the minimum instruction length of + * a particular #yasm_arch. + */ + unsigned int min_insn_len; +} yasm_arch_module; + +/** Get the one-line description of an architecture. + * \param arch architecture + * \return One-line description of architecture. + */ +const char *yasm_arch_name(const yasm_arch *arch); + +/** Get the keyword used to select an architecture. + * \param arch architecture + * \return Architecture keyword. + */ +const char *yasm_arch_keyword(const yasm_arch *arch); + +/** Get the word size of an architecture. + * \param arch architecture + * \return Word size (in bits). + */ +unsigned int yasm_arch_wordsize(const yasm_arch *arch); + +/** Get the minimum instruction length of an architecture. + * \param arch architecture + * \return Minimum instruction length (in bytes). + */ +unsigned int yasm_arch_min_insn_len(const yasm_arch *arch); + +/** Create architecture. + * \param module architecture module + * \param machine keyword of machine in use (must be one listed in + * #yasm_arch_module.machines) + * \param parser keyword of parser in use + * \param error error return value + * \return NULL on error (error returned in error parameter), otherwise new + * architecture. + */ +/*@only@*/ yasm_arch *yasm_arch_create(const yasm_arch_module *module, + const char *machine, const char *parser, + /*@out@*/ yasm_arch_create_error *error); + +/** Clean up, free any architecture-allocated memory. + * \param arch architecture + */ +void yasm_arch_destroy(/*@only@*/ yasm_arch *arch); + +/** Get architecture's active machine name. + * \param arch architecture + * \return Active machine name. + */ +const char *yasm_arch_get_machine(const yasm_arch *arch); + +/** Get architecture's active address size, in bits. + * \param arch architecture + * \return Active address size (in bits). + */ +unsigned int yasm_arch_get_address_size(const yasm_arch *arch); + +/** Set any arch-specific variables. For example, "mode_bits" in x86. + * \param arch architecture + * \param var variable name + * \param val value to set + * \return Zero on success, non-zero on failure (variable does not exist). + */ +int yasm_arch_set_var(yasm_arch *arch, const char *var, unsigned long val); + +/** Check an generic identifier to see if it matches architecture specific + * names for instructions or instruction prefixes. Unrecognized identifiers + * should return #YASM_ARCH_NOTINSNPREFIX so they can be treated as normal + * symbols. Any additional data beyond just the type (almost always necessary) + * should be returned into the space provided by the data parameter. + * \param arch architecture + * \param id identifier as in the input file + * \param id_len length of id string + * \param line virtual line + * \param bc for instructions, yasm_insn-based bytecode is returned + * (and NULL otherwise) + * \param prefix for prefixes, yasm_arch-specific value is returned + * (and 0 otherwise) + * \return Identifier type (#YASM_ARCH_NOTINSNPREFIX if unrecognized) + */ +yasm_arch_insnprefix yasm_arch_parse_check_insnprefix + (yasm_arch *arch, const char *id, size_t id_len, unsigned long line, + /*@out@*/ /*@only@*/ yasm_bytecode **bc, /*@out@*/ uintptr_t *prefix); + +/** Check an generic identifier to see if it matches architecture specific + * names for registers or target modifiers. Unrecognized identifiers should + * return #YASM_ARCH_NOTREGTMOD. Any additional data beyond just the type + * (almost always necessary) should be returned into the space provided by the + * data parameter. + * \param arch architecture + * \param id identifier as in the input file + * \param id_len length of id string + * \param data extra identification information (yasm_arch-specific) + * [output] + * \return Identifier type (#YASM_ARCH_NOTREGTMOD if unrecognized) + */ +yasm_arch_regtmod yasm_arch_parse_check_regtmod + (yasm_arch *arch, const char *id, size_t id_len, + /*@out@*/ uintptr_t *data); + +/** Get NOP fill patterns for 1-15 bytes of fill. + * \param arch architecture + * \return 16-entry array of arrays; [0] is unused, [1] - [15] point to arrays + * of 1-15 bytes (respectively) in length. + */ +const unsigned char **yasm_arch_get_fill(const yasm_arch *arch); + +/** Output #yasm_floatnum to buffer. Puts the value into the least + * significant bits of the destination, or may be shifted into more + * significant bits by the shift parameter. The destination bits are + * cleared before being set. + * Architecture-specific because of endianness. + * \param arch architecture + * \param flt floating point value + * \param buf buffer to write into + * \param destsize destination size (in bytes) + * \param valsize size (in bits) + * \param shift left shift (in bits) + * \param warn enables standard overflow/underflow warnings + * \return Nonzero on error. + */ +int yasm_arch_floatnum_tobytes(yasm_arch *arch, const yasm_floatnum *flt, + unsigned char *buf, size_t destsize, + size_t valsize, size_t shift, int warn); + +/** Output #yasm_intnum to buffer. Puts the value into the least + * significant bits of the destination, or may be shifted into more + * significant bits by the shift parameter. The destination bits are + * cleared before being set. + * \param arch architecture + * \param intn integer value + * \param buf buffer to write into + * \param destsize destination size (in bytes) + * \param valsize size (in bits) + * \param shift left shift (in bits); may be negative to specify right + * shift (standard warnings include truncation to boundary) + * \param bc bytecode being output ("parent" of value) + * \param warn enables standard warnings (value doesn't fit into + * valsize bits) + * \return Nonzero on error. + */ +int yasm_arch_intnum_tobytes(yasm_arch *arch, const yasm_intnum *intn, + unsigned char *buf, size_t destsize, + size_t valsize, int shift, + const yasm_bytecode *bc, int warn); + +/** Get the equivalent size of a register in bits. + * \param arch architecture + * \param reg register + * \return 0 if there is no suitable equivalent size, otherwise the size. + */ +unsigned int yasm_arch_get_reg_size(yasm_arch *arch, uintptr_t reg); + +/** Get a specific register of a register group, based on the register + * group and the index within the group. + * \param arch architecture + * \param reggroup register group + * \param regindex register index + * \return 0 if regindex is not valid for that register group, otherwise the + * specific register value. + */ +uintptr_t yasm_arch_reggroup_get_reg(yasm_arch *arch, uintptr_t reggroup, + unsigned long regindex); + +/** Print a register. For debugging purposes. + * \param arch architecture + * \param reg register + * \param f file + */ +void yasm_arch_reg_print(yasm_arch *arch, uintptr_t reg, FILE *f); + +/** Print a segment register. For debugging purposes. + * \param arch architecture + * \param segreg segment register + * \param f file + */ +void yasm_arch_segreg_print(yasm_arch *arch, uintptr_t segreg, FILE *f); + +/** Create an effective address from an expression. + * \param arch architecture + * \param e expression (kept, do not delete) + * \return Newly allocated effective address. + */ +yasm_effaddr *yasm_arch_ea_create(yasm_arch *arch, /*@keep@*/ yasm_expr *e); + +/** Delete (free allocated memory for) an effective address. + * \param arch architecture + * \param ea effective address (only pointer to it). + */ +void yasm_arch_ea_destroy(yasm_arch *arch, /*@only@*/ yasm_effaddr *ea); + +/** Print an effective address. For debugging purposes. + * \param arch architecture + * \param ea effective address + * \param f file + * \param indent_level indentation level + */ +void yasm_arch_ea_print(const yasm_arch *arch, const yasm_effaddr *ea, + FILE *f, int indent_level); + +/** Create a bytecode that represents a single empty (0 length) instruction. + * This is used for handling solitary prefixes. + * \param arch architecture + * \param line virtual line (from yasm_linemap) + * \return Newly allocated bytecode. + */ +/*@only@*/ yasm_bytecode *yasm_arch_create_empty_insn(yasm_arch *arch, + unsigned long line); + +#ifndef YASM_DOXYGEN + +/* Inline macro implementations for arch functions */ + +#define yasm_arch_name(arch) \ + (((yasm_arch_base *)arch)->module->name) +#define yasm_arch_keyword(arch) \ + (((yasm_arch_base *)arch)->module->keyword) +#define yasm_arch_wordsize(arch) \ + (((yasm_arch_base *)arch)->module->wordsize) +#define yasm_arch_min_insn_len(arch) \ + (((yasm_arch_base *)arch)->module->min_insn_len) + +#define yasm_arch_create(module, machine, parser, error) \ + module->create(machine, parser, error) + +#define yasm_arch_destroy(arch) \ + ((yasm_arch_base *)arch)->module->destroy(arch) +#define yasm_arch_get_machine(arch) \ + ((yasm_arch_base *)arch)->module->get_machine(arch) +#define yasm_arch_get_address_size(arch) \ + ((yasm_arch_base *)arch)->module->get_address_size(arch) +#define yasm_arch_set_var(arch, var, val) \ + ((yasm_arch_base *)arch)->module->set_var(arch, var, val) +#define yasm_arch_parse_check_insnprefix(arch, id, id_len, line, bc, prefix) \ + ((yasm_arch_base *)arch)->module->parse_check_insnprefix \ + (arch, id, id_len, line, bc, prefix) +#define yasm_arch_parse_check_regtmod(arch, id, id_len, data) \ + ((yasm_arch_base *)arch)->module->parse_check_regtmod \ + (arch, id, id_len, data) +#define yasm_arch_get_fill(arch) \ + ((yasm_arch_base *)arch)->module->get_fill(arch) +#define yasm_arch_floatnum_tobytes(arch, flt, buf, destsize, valsize, shift, \ + warn) \ + ((yasm_arch_base *)arch)->module->floatnum_tobytes \ + (arch, flt, buf, destsize, valsize, shift, warn) +#define yasm_arch_intnum_tobytes(arch, intn, buf, destsize, valsize, shift, \ + bc, warn) \ + ((yasm_arch_base *)arch)->module->intnum_tobytes \ + (arch, intn, buf, destsize, valsize, shift, bc, warn) +#define yasm_arch_get_reg_size(arch, reg) \ + ((yasm_arch_base *)arch)->module->get_reg_size(arch, reg) +#define yasm_arch_reggroup_get_reg(arch, regg, regi) \ + ((yasm_arch_base *)arch)->module->reggroup_get_reg(arch, regg, regi) +#define yasm_arch_reg_print(arch, reg, f) \ + ((yasm_arch_base *)arch)->module->reg_print(arch, reg, f) +#define yasm_arch_segreg_print(arch, segreg, f) \ + ((yasm_arch_base *)arch)->module->segreg_print(arch, segreg, f) +#define yasm_arch_ea_create(arch, e) \ + ((yasm_arch_base *)arch)->module->ea_create(arch, e) +#define yasm_arch_ea_destroy(arch, ea) \ + ((yasm_arch_base *)arch)->module->ea_destroy(ea) +#define yasm_arch_ea_print(arch, ea, f, i) \ + ((yasm_arch_base *)arch)->module->ea_print(ea, f, i) +#define yasm_arch_create_empty_insn(arch, line) \ + ((yasm_arch_base *)arch)->module->create_empty_insn(arch, line) + +#endif + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/assocdat.c b/third-party/yasm/yasm-1.3.0/libyasm/assocdat.c new file mode 100644 index 0000000000..560093685e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/assocdat.c @@ -0,0 +1,138 @@ +/* + * YASM associated data storage (libyasm internal use) + * + * Copyright (C) 2003-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 "util.h" + +#include "coretype.h" +#include "assocdat.h" + + +typedef struct assoc_data_item { + const yasm_assoc_data_callback *callback; + void *data; +} assoc_data_item; + +struct yasm__assoc_data { + assoc_data_item *vector; + size_t size; + size_t alloc; +}; + + +yasm__assoc_data * +yasm__assoc_data_create(void) +{ + yasm__assoc_data *assoc_data = yasm_xmalloc(sizeof(yasm__assoc_data)); + + assoc_data->size = 0; + assoc_data->alloc = 2; + assoc_data->vector = yasm_xmalloc(assoc_data->alloc * + sizeof(assoc_data_item)); + + return assoc_data; +} + +void * +yasm__assoc_data_get(yasm__assoc_data *assoc_data, + const yasm_assoc_data_callback *callback) +{ + size_t i; + + if (!assoc_data) + return NULL; + + for (i=0; isize; i++) { + if (assoc_data->vector[i].callback == callback) + return assoc_data->vector[i].data; + } + return NULL; +} + +yasm__assoc_data * +yasm__assoc_data_add(yasm__assoc_data *assoc_data_arg, + const yasm_assoc_data_callback *callback, void *data) +{ + yasm__assoc_data *assoc_data; + assoc_data_item *item = NULL; + size_t i; + + /* Create a new assoc_data if necessary */ + if (assoc_data_arg) + assoc_data = assoc_data_arg; + else + assoc_data = yasm__assoc_data_create(); + + /* See if there's already assocated data for this callback */ + for (i=0; isize; i++) { + if (assoc_data->vector[i].callback == callback) { + item = &assoc_data->vector[i]; + break; + } + } + + /* No? Then append a new one */ + if (!item) { + assoc_data->size++; + if (assoc_data->size > assoc_data->alloc) { + assoc_data->alloc *= 2; + assoc_data->vector = + yasm_xrealloc(assoc_data->vector, + assoc_data->alloc * sizeof(assoc_data_item)); + } + item = &assoc_data->vector[assoc_data->size-1]; + item->callback = callback; + item->data = NULL; + } + + /* Delete existing data (if any) */ + if (item->data && item->data != data) + item->callback->destroy(item->data); + + item->data = data; + + return assoc_data; +} + +void +yasm__assoc_data_destroy(yasm__assoc_data *assoc_data) +{ + size_t i; + + if (!assoc_data) + return; + + for (i=0; isize; i++) + assoc_data->vector[i].callback->destroy(assoc_data->vector[i].data); + yasm_xfree(assoc_data->vector); + yasm_xfree(assoc_data); +} + +void +yasm__assoc_data_print(const yasm__assoc_data *assoc_data, FILE *f, + int indent_level) +{ + /*TODO*/ +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/assocdat.h b/third-party/yasm/yasm-1.3.0/libyasm/assocdat.h new file mode 100644 index 0000000000..cf42386775 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/assocdat.h @@ -0,0 +1,76 @@ +/** + * \file assocdat.h + * \brief YASM associated data storage (libyasm internal use) + * + * \license + * Copyright (C) 2003-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_ASSOCDAT_H +#define YASM_ASSOCDAT_H + +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +/** Associated data container. */ +typedef struct yasm__assoc_data yasm__assoc_data; + +/** Create an associated data container. */ +YASM_LIB_DECL +/*@only@*/ yasm__assoc_data *yasm__assoc_data_create(void); + +/** Get associated data for a data callback. + * \param assoc_data container of associated data + * \param callback callback used when adding data + * \return Associated data (NULL if none). + */ +YASM_LIB_DECL +/*@dependent@*/ /*@null@*/ void *yasm__assoc_data_get + (/*@null@*/ yasm__assoc_data *assoc_data, + const yasm_assoc_data_callback *callback); + +/** Add associated data to a associated data container. + * \attention Deletes any existing associated data for that data callback. + * \param assoc_data container of associated data + * \param callback callback + * \param data data to associate + */ +YASM_LIB_DECL +/*@only@*/ yasm__assoc_data *yasm__assoc_data_add + (/*@null@*/ /*@only@*/ yasm__assoc_data *assoc_data, + const yasm_assoc_data_callback *callback, + /*@only@*/ /*@null@*/ void *data); + +/** Destroy all associated data in a container. */ +YASM_LIB_DECL +void yasm__assoc_data_destroy + (/*@null@*/ /*@only@*/ yasm__assoc_data *assoc_data); + +/** Print all associated data in a container. */ +YASM_LIB_DECL +void yasm__assoc_data_print(const yasm__assoc_data *assoc_data, FILE *f, + int indent_level); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/bc-align.c b/third-party/yasm/yasm-1.3.0/libyasm/bc-align.c new file mode 100644 index 0000000000..2a47882ef0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/bc-align.c @@ -0,0 +1,245 @@ +/* + * Align bytecode + * + * Copyright (C) 2005-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 "util.h" + +#include "libyasm-stdint.h" +#include "coretype.h" + +#include "errwarn.h" +#include "intnum.h" +#include "expr.h" + +#include "bytecode.h" + + +typedef struct bytecode_align { + /*@only@*/ yasm_expr *boundary; /* alignment boundary */ + + /* What to fill intervening locations with, NULL if using code_fill */ + /*@only@*/ /*@null@*/ yasm_expr *fill; + + /* Maximum number of bytes to skip, NULL if no maximum. */ + /*@only@*/ /*@null@*/ yasm_expr *maxskip; + + /* Code fill, NULL if using 0 fill */ + /*@null@*/ const unsigned char **code_fill; +} bytecode_align; + +static void bc_align_destroy(void *contents); +static void bc_align_print(const void *contents, FILE *f, int indent_level); +static void bc_align_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc); +static int bc_align_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data); +static int bc_align_expand(yasm_bytecode *bc, int span, long old_val, + long new_val, /*@out@*/ long *neg_thres, + /*@out@*/ long *pos_thres); +static int bc_align_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +static const yasm_bytecode_callback bc_align_callback = { + bc_align_destroy, + bc_align_print, + bc_align_finalize, + NULL, + bc_align_calc_len, + bc_align_expand, + bc_align_tobytes, + YASM_BC_SPECIAL_OFFSET +}; + + +static void +bc_align_destroy(void *contents) +{ + bytecode_align *align = (bytecode_align *)contents; + if (align->boundary) + yasm_expr_destroy(align->boundary); + if (align->fill) + yasm_expr_destroy(align->fill); + if (align->maxskip) + yasm_expr_destroy(align->maxskip); + yasm_xfree(contents); +} + +static void +bc_align_print(const void *contents, FILE *f, int indent_level) +{ + const bytecode_align *align = (const bytecode_align *)contents; + fprintf(f, "%*s_Align_\n", indent_level, ""); + fprintf(f, "%*sBoundary=", indent_level, ""); + yasm_expr_print(align->boundary, f); + fprintf(f, "\n%*sFill=", indent_level, ""); + yasm_expr_print(align->fill, f); + fprintf(f, "\n%*sMax Skip=", indent_level, ""); + yasm_expr_print(align->maxskip, f); + fprintf(f, "\n"); +} + +static void +bc_align_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc) +{ + bytecode_align *align = (bytecode_align *)bc->contents; + if (!yasm_expr_get_intnum(&align->boundary, 0)) + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("align boundary must be a constant")); + if (align->fill && !yasm_expr_get_intnum(&align->fill, 0)) + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("align fill must be a constant")); + if (align->maxskip && !yasm_expr_get_intnum(&align->maxskip, 0)) + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("align maximum skip must be a constant")); +} + +static int +bc_align_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + long neg_thres = 0; + long pos_thres = 0; + + if (bc_align_expand(bc, 0, 0, (long)bc->offset, &neg_thres, + &pos_thres) < 0) + return -1; + + return 0; +} + +static int +bc_align_expand(yasm_bytecode *bc, int span, long old_val, long new_val, + /*@out@*/ long *neg_thres, /*@out@*/ long *pos_thres) +{ + bytecode_align *align = (bytecode_align *)bc->contents; + unsigned long end; + unsigned long boundary = + yasm_intnum_get_uint(yasm_expr_get_intnum(&align->boundary, 0)); + + if (boundary == 0) { + bc->len = 0; + *pos_thres = new_val; + return 0; + } + + end = (unsigned long)new_val; + if ((unsigned long)new_val & (boundary-1)) + end = ((unsigned long)new_val & ~(boundary-1)) + boundary; + + *pos_thres = (long)end; + bc->len = end - (unsigned long)new_val; + + if (align->maxskip) { + unsigned long maxskip = + yasm_intnum_get_uint(yasm_expr_get_intnum(&align->maxskip, 0)); + if (bc->len > maxskip) { + *pos_thres = (long)end-maxskip-1; + bc->len = 0; + } + } + return 1; +} + +static int +bc_align_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@unused@*/ yasm_output_reloc_func output_reloc) +{ + bytecode_align *align = (bytecode_align *)bc->contents; + unsigned long len; + unsigned long boundary = + yasm_intnum_get_uint(yasm_expr_get_intnum(&align->boundary, 0)); + + if (boundary == 0) + return 0; + else { + unsigned long end = bc->offset; + if (bc->offset & (boundary-1)) + end = (bc->offset & ~(boundary-1)) + boundary; + len = end - bc->offset; + if (len == 0) + return 0; + if (align->maxskip) { + unsigned long maxskip = + yasm_intnum_get_uint(yasm_expr_get_intnum(&align->maxskip, 0)); + if (len > maxskip) + return 0; + } + } + + if (align->fill) { + unsigned long v; + v = yasm_intnum_get_uint(yasm_expr_get_intnum(&align->fill, 0)); + memset(*bufp, (int)v, len); + *bufp += len; + } else if (align->code_fill) { + unsigned long maxlen = 15; + while (!align->code_fill[maxlen] && maxlen>0) + maxlen--; + if (maxlen == 0) { + yasm_error_set(YASM_ERROR_GENERAL, + N_("could not find any code alignment size")); + return 1; + } + + /* Fill with maximum code fill as much as possible */ + while (len > maxlen) { + memcpy(*bufp, align->code_fill[maxlen], maxlen); + *bufp += maxlen; + len -= maxlen; + } + + if (!align->code_fill[len]) { + yasm_error_set(YASM_ERROR_VALUE, + N_("invalid alignment size %d"), len); + return 1; + } + /* Handle rest of code fill */ + memcpy(*bufp, align->code_fill[len], len); + *bufp += len; + } else { + /* Just fill with 0 */ + memset(*bufp, 0, len); + *bufp += len; + } + return 0; +} + +yasm_bytecode * +yasm_bc_create_align(yasm_expr *boundary, yasm_expr *fill, + yasm_expr *maxskip, const unsigned char **code_fill, + unsigned long line) +{ + bytecode_align *align = yasm_xmalloc(sizeof(bytecode_align)); + + align->boundary = boundary; + align->fill = fill; + align->maxskip = maxskip; + align->code_fill = code_fill; + + return yasm_bc_create_common(&bc_align_callback, align, line); +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/bc-data.c b/third-party/yasm/yasm-1.3.0/libyasm/bc-data.c new file mode 100644 index 0000000000..ebbdd6f97d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/bc-data.c @@ -0,0 +1,600 @@ +/* + * Data (and LEB128) bytecode + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 "util.h" + +#include "libyasm-stdint.h" +#include "coretype.h" + +#include "errwarn.h" +#include "intnum.h" +#include "expr.h" +#include "value.h" + +#include "bytecode.h" +#include "arch.h" + + +struct yasm_dataval { + /*@reldef@*/ STAILQ_ENTRY(yasm_dataval) link; + + enum { DV_EMPTY, DV_VALUE, DV_RAW, DV_ULEB128, DV_SLEB128, DV_RESERVE } + type; + + union { + yasm_value val; + struct { + /*@only@*/ unsigned char *contents; + unsigned long len; + } raw; + } data; + + /* number of times data is repeated, NULL=1. */ + /*@only@*/ /*@null@*/ yasm_expr *multiple; +}; + +typedef struct bytecode_data { + /* converted data (linked list) */ + yasm_datavalhead datahead; + + int item_size; +} bytecode_data; + +static void bc_data_destroy(void *contents); +static void bc_data_print(const void *contents, FILE *f, int indent_level); +static void bc_data_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc); +static int bc_data_item_size(yasm_bytecode *bc); +static int bc_data_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data); +static int bc_data_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +static const yasm_bytecode_callback bc_data_callback = { + bc_data_destroy, + bc_data_print, + bc_data_finalize, + bc_data_item_size, + bc_data_calc_len, + yasm_bc_expand_common, + bc_data_tobytes, + 0 +}; + + +static void +bc_data_destroy(void *contents) +{ + bytecode_data *bc_data = (bytecode_data *)contents; + yasm_dvs_delete(&bc_data->datahead); + yasm_xfree(contents); +} + +static void +bc_data_print(const void *contents, FILE *f, int indent_level) +{ + const bytecode_data *bc_data = (const bytecode_data *)contents; + fprintf(f, "%*s_Data_\n", indent_level, ""); + fprintf(f, "%*sElements:\n", indent_level+1, ""); + yasm_dvs_print(&bc_data->datahead, f, indent_level+2); +} + +static void +bc_data_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc) +{ + bytecode_data *bc_data = (bytecode_data *)bc->contents; + yasm_dataval *dv; + yasm_intnum *intn; + + /* Convert values from simple expr to value. */ + STAILQ_FOREACH(dv, &bc_data->datahead, link) { + switch (dv->type) { + case DV_VALUE: + if (yasm_value_finalize(&dv->data.val, prev_bc)) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("data expression too complex")); + return; + } + break; + case DV_ULEB128: + case DV_SLEB128: + intn = yasm_expr_get_intnum(&dv->data.val.abs, 0); + if (!intn) { + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("LEB128 requires constant values")); + return; + } + /* Warn for negative values in unsigned environment. + * This could be an error instead: the likelihood this is + * desired is very low! + */ + if (yasm_intnum_sign(intn) == -1 && dv->type == DV_ULEB128) + yasm_warn_set(YASM_WARN_GENERAL, + N_("negative value in unsigned LEB128")); + break; + default: + break; + } + if (dv->multiple) { + yasm_value val; + if (yasm_value_finalize_expr(&val, dv->multiple, prev_bc, 0)) + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("multiple expression too complex")); + else if (val.rel) + yasm_error_set(YASM_ERROR_NOT_ABSOLUTE, + N_("multiple expression not absolute")); + dv->multiple = val.abs; + } + } +} + +static int +bc_data_item_size(yasm_bytecode *bc) +{ + bytecode_data *bc_data = (bytecode_data *)bc->contents; + return bc_data->item_size; +} + +static int +bc_data_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + bytecode_data *bc_data = (bytecode_data *)bc->contents; + yasm_dataval *dv; + yasm_intnum *intn; + unsigned long len = 0; + unsigned long multiple; + + /* Count up element sizes, rounding up string length. */ + STAILQ_FOREACH(dv, &bc_data->datahead, link) { + switch (dv->type) { + case DV_EMPTY: + len = 0; + break; + case DV_VALUE: + len = dv->data.val.size/8; + break; + case DV_RAW: + len = dv->data.raw.len; + break; + case DV_ULEB128: + case DV_SLEB128: + intn = yasm_expr_get_intnum(&dv->data.val.abs, 0); + if (!intn) + yasm_internal_error(N_("non-constant in data_tobytes")); + len = yasm_intnum_size_leb128(intn, dv->type == DV_SLEB128); + break; + case DV_RESERVE: + len = dv->data.val.size/8; + break; + } + + if (!yasm_dv_get_multiple(dv, &multiple)) + len *= multiple; + + bc->len += len; + } + + return 0; +} + +static int +bc_data_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@unused@*/ yasm_output_reloc_func output_reloc) +{ + bytecode_data *bc_data = (bytecode_data *)bc->contents; + yasm_dataval *dv; + yasm_intnum *intn; + unsigned int val_len; + unsigned long multiple, i; + + STAILQ_FOREACH(dv, &bc_data->datahead, link) { + if (yasm_dv_get_multiple(dv, &multiple) || multiple == 0) + continue; + switch (dv->type) { + case DV_EMPTY: + break; + case DV_VALUE: + val_len = dv->data.val.size/8; + for (i=0; idata.val, *bufp, val_len, + (unsigned long)(*bufp-bufstart), bc, 1, + d)) + return 1; + *bufp += val_len; + } + break; + case DV_RAW: + for (i=0; idata.raw.contents, dv->data.raw.len); + *bufp += dv->data.raw.len; + } + break; + case DV_ULEB128: + case DV_SLEB128: + intn = yasm_expr_get_intnum(&dv->data.val.abs, 234); + if (!intn) + yasm_internal_error(N_("non-constant in data_tobytes")); + for (i=0; itype == DV_SLEB128); + } + case DV_RESERVE: + val_len = dv->data.val.size/8; + for (i=0; idatahead); + data->item_size = size; + + /* Prescan input data for length, etc. Careful: this needs to be + * precisely paired with the second loop. + */ + STAILQ_FOREACH(dv, datahead, link) { + if (dv->multiple && dv->type != DV_EMPTY && len > 0) { + /* Flush previous data */ + dvo = yasm_dv_create_raw(yasm_xmalloc(len), len); + STAILQ_INSERT_TAIL(&data->datahead, dvo, link); + len = 0; + } + switch (dv->type) { + case DV_EMPTY: + break; + case DV_VALUE: + case DV_ULEB128: + case DV_SLEB128: + intn = yasm_expr_get_intnum(&dv->data.val.abs, 0); + if (intn && dv->type == DV_VALUE && (arch || size == 1)) + len += size; + else if (intn && dv->type == DV_ULEB128) + len += yasm_intnum_size_leb128(intn, 0); + else if (intn && dv->type == DV_SLEB128) + len += yasm_intnum_size_leb128(intn, 1); + else { + if (len > 0) { + /* Create bytecode for all previous len */ + dvo = yasm_dv_create_raw(yasm_xmalloc(len), len); + STAILQ_INSERT_TAIL(&data->datahead, dvo, link); + len = 0; + } + + /* Create bytecode for this value */ + dvo = yasm_xmalloc(sizeof(yasm_dataval)); + STAILQ_INSERT_TAIL(&data->datahead, dvo, link); + dvo->multiple = dv->multiple; + } + break; + case DV_RAW: + rlen = dv->data.raw.len; + /* find count, rounding up to nearest multiple of size */ + rlen = (rlen + size - 1) / size; + len += rlen*size; + break; + case DV_RESERVE: + len += size; + break; + } + + if (dv->multiple && dv->type != DV_EMPTY && len > 0) { + /* Flush this data */ + dvo = yasm_dv_create_raw(yasm_xmalloc(len), len); + STAILQ_INSERT_TAIL(&data->datahead, dvo, link); + dvo->multiple = dv->multiple; + len = 0; + } + + if (append_zero) + len++; + } + + /* Create final dataval for any trailing length */ + if (len > 0) { + dvo = yasm_dv_create_raw(yasm_xmalloc(len), len); + STAILQ_INSERT_TAIL(&data->datahead, dvo, link); + } + + /* Second iteration: copy data and delete input datavals. */ + dv = STAILQ_FIRST(datahead); + dvo = STAILQ_FIRST(&data->datahead); + len = 0; + while (dv && dvo) { + if (dv->multiple && dv->type != DV_EMPTY && len > 0) { + dvo = STAILQ_NEXT(dvo, link); + len = 0; + } + switch (dv->type) { + case DV_EMPTY: + break; + case DV_VALUE: + case DV_ULEB128: + case DV_SLEB128: + intn = yasm_expr_get_intnum(&dv->data.val.abs, 0); + if (intn && dv->type == DV_VALUE && (arch || size == 1)) { + if (size == 1) + yasm_intnum_get_sized(intn, + &dvo->data.raw.contents[len], + 1, 8, 0, 0, 1); + else + yasm_arch_intnum_tobytes(arch, intn, + &dvo->data.raw.contents[len], + size, size*8, 0, bc, 1); + yasm_value_delete(&dv->data.val); + len += size; + } else if (intn && dv->type == DV_ULEB128) { + len += yasm_intnum_get_leb128(intn, + &dvo->data.raw.contents[len], + 0); + yasm_value_delete(&dv->data.val); + } else if (intn && dv->type == DV_SLEB128) { + len += yasm_intnum_get_leb128(intn, + &dvo->data.raw.contents[len], + 1); + yasm_value_delete(&dv->data.val); + } else { + if (len > 0) + dvo = STAILQ_NEXT(dvo, link); + dvo->type = dv->type; + dvo->data.val = dv->data.val; /* structure copy */ + dvo->data.val.size = size*8; /* remember size */ + dvo = STAILQ_NEXT(dvo, link); + len = 0; + } + break; + case DV_RAW: + rlen = dv->data.raw.len; + memcpy(&dvo->data.raw.contents[len], dv->data.raw.contents, + rlen); + yasm_xfree(dv->data.raw.contents); + len += rlen; + /* pad with 0's to nearest multiple of size */ + rlen %= size; + if (rlen > 0) { + rlen = size-rlen; + for (i=0; idata.raw.contents[len++] = 0; + } + break; + case DV_RESERVE: + memset(&dvo->data.raw.contents[len], 0, size); + len += size; + break; + } + + if (dv->multiple && dv->type != DV_EMPTY && len > 0) { + dvo = STAILQ_NEXT(dvo, link); + len = 0; + } + + if (append_zero) + dvo->data.raw.contents[len++] = 0; + dv2 = STAILQ_NEXT(dv, link); + yasm_xfree(dv); + dv = dv2; + } + + return bc; +} + +yasm_bytecode * +yasm_bc_create_leb128(yasm_datavalhead *datahead, int sign, unsigned long line) +{ + yasm_dataval *dv; + + /* Convert all values into LEB type, error on strings/raws */ + STAILQ_FOREACH(dv, datahead, link) { + switch (dv->type) { + case DV_VALUE: + dv->type = sign ? DV_SLEB128 : DV_ULEB128; + break; + case DV_RAW: + yasm_error_set(YASM_ERROR_VALUE, + N_("LEB128 does not allow string constants")); + break; + default: + break; + } + } + + return yasm_bc_create_data(datahead, 0, 0, 0, line); +} + +yasm_dataval * +yasm_dv_create_expr(yasm_expr *e) +{ + yasm_dataval *retval = yasm_xmalloc(sizeof(yasm_dataval)); + + retval->type = DV_VALUE; + yasm_value_initialize(&retval->data.val, e, 0); + retval->multiple = NULL; + + return retval; +} + +yasm_dataval * +yasm_dv_create_raw(unsigned char *contents, unsigned long len) +{ + yasm_dataval *retval = yasm_xmalloc(sizeof(yasm_dataval)); + + retval->type = DV_RAW; + retval->data.raw.contents = contents; + retval->data.raw.len = len; + retval->multiple = NULL; + + return retval; +} + +yasm_dataval * +yasm_dv_create_reserve(void) +{ + yasm_dataval *retval = yasm_xmalloc(sizeof(yasm_dataval)); + + retval->type = DV_RESERVE; + retval->multiple = NULL; + + return retval; +} + +yasm_value * +yasm_dv_get_value(yasm_dataval *dv) +{ + if (dv->type != DV_VALUE) + return NULL; + return &dv->data.val; +} + +void +yasm_dv_set_multiple(yasm_dataval *dv, yasm_expr *e) +{ + if (dv->multiple) + dv->multiple = yasm_expr_create_tree( dv->multiple, YASM_EXPR_MUL, e, + e->line); + else + dv->multiple = e; +} + +int +yasm_dv_get_multiple(yasm_dataval *dv, unsigned long *multiple) +{ + /*@dependent@*/ /*@null@*/ const yasm_intnum *num; + + *multiple = 1; + if (dv->multiple) { + num = yasm_expr_get_intnum(&dv->multiple, 0); + if (!num) { + yasm_error_set(YASM_ERROR_VALUE, + N_("could not determine multiple")); + return 1; + } + if (yasm_intnum_sign(num) < 0) { + yasm_error_set(YASM_ERROR_VALUE, N_("multiple is negative")); + return 1; + } + *multiple = yasm_intnum_get_uint(num); + } + return 0; +} + +void +yasm_dvs_delete(yasm_datavalhead *headp) +{ + yasm_dataval *cur, *next; + + cur = STAILQ_FIRST(headp); + while (cur) { + next = STAILQ_NEXT(cur, link); + switch (cur->type) { + case DV_VALUE: + yasm_value_delete(&cur->data.val); + break; + case DV_RAW: + yasm_xfree(cur->data.raw.contents); + break; + default: + break; + } + if (cur->multiple) + yasm_expr_destroy(cur->multiple); + yasm_xfree(cur); + cur = next; + } + STAILQ_INIT(headp); +} + +yasm_dataval * +yasm_dvs_append(yasm_datavalhead *headp, yasm_dataval *dv) +{ + if (dv) { + STAILQ_INSERT_TAIL(headp, dv, link); + return dv; + } + return (yasm_dataval *)NULL; +} + +void +yasm_dvs_print(const yasm_datavalhead *head, FILE *f, int indent_level) +{ + yasm_dataval *cur; + unsigned long i; + + STAILQ_FOREACH(cur, head, link) { + fprintf(f, "%*sMultiple=", indent_level, ""); + if (!cur->multiple) + fprintf(f, "nil (1)"); + else + yasm_expr_print(cur->multiple, f); + switch (cur->type) { + case DV_EMPTY: + fprintf(f, "%*sEmpty\n", indent_level, ""); + break; + case DV_VALUE: + fprintf(f, "%*sValue:\n", indent_level, ""); + yasm_value_print(&cur->data.val, f, indent_level+1); + break; + case DV_RAW: + fprintf(f, "%*sLength=%lu\n", indent_level, "", + cur->data.raw.len); + fprintf(f, "%*sBytes=[", indent_level, ""); + for (i=0; idata.raw.len; i++) + fprintf(f, "0x%02x, ", cur->data.raw.contents[i]); + fprintf(f, "]\n"); + break; + case DV_ULEB128: + fprintf(f, "%*sULEB128 value:\n", indent_level, ""); + yasm_value_print(&cur->data.val, f, indent_level+1); + break; + case DV_SLEB128: + fprintf(f, "%*sSLEB128 value:\n", indent_level, ""); + yasm_value_print(&cur->data.val, f, indent_level+1); + break; + case DV_RESERVE: + fprintf(f, "%*sReserved\n", indent_level, ""); + break; + } + } +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/bc-incbin.c b/third-party/yasm/yasm-1.3.0/libyasm/bc-incbin.c new file mode 100644 index 0000000000..a8fec7d6ce --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/bc-incbin.c @@ -0,0 +1,265 @@ +/* + * Incbin bytecode + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 "util.h" + +#include "libyasm-stdint.h" +#include "coretype.h" + +#include "linemap.h" + +#include "errwarn.h" +#include "intnum.h" +#include "expr.h" +#include "value.h" + +#include "bytecode.h" + +#include "file.h" + + +typedef struct bytecode_incbin { + /*@only@*/ char *filename; /* file to include data from */ + const char *from; /* filename of what contained incbin */ + + /* starting offset to read from (NULL=0) */ + /*@only@*/ /*@null@*/ yasm_expr *start; + + /* maximum number of bytes to read (NULL=no limit) */ + /*@only@*/ /*@null@*/ yasm_expr *maxlen; +} bytecode_incbin; + +static void bc_incbin_destroy(void *contents); +static void bc_incbin_print(const void *contents, FILE *f, int indent_level); +static void bc_incbin_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc); +static int bc_incbin_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data); +static int bc_incbin_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +static const yasm_bytecode_callback bc_incbin_callback = { + bc_incbin_destroy, + bc_incbin_print, + bc_incbin_finalize, + NULL, + bc_incbin_calc_len, + yasm_bc_expand_common, + bc_incbin_tobytes, + 0 +}; + + +static void +bc_incbin_destroy(void *contents) +{ + bytecode_incbin *incbin = (bytecode_incbin *)contents; + yasm_xfree(incbin->filename); + yasm_expr_destroy(incbin->start); + yasm_expr_destroy(incbin->maxlen); + yasm_xfree(contents); +} + +static void +bc_incbin_print(const void *contents, FILE *f, int indent_level) +{ + const bytecode_incbin *incbin = (const bytecode_incbin *)contents; + fprintf(f, "%*s_IncBin_\n", indent_level, ""); + fprintf(f, "%*sFilename=`%s'\n", indent_level, "", + incbin->filename); + fprintf(f, "%*sStart=", indent_level, ""); + if (!incbin->start) + fprintf(f, "nil (0)"); + else + yasm_expr_print(incbin->start, f); + fprintf(f, "%*sMax Len=", indent_level, ""); + if (!incbin->maxlen) + fprintf(f, "nil (unlimited)"); + else + yasm_expr_print(incbin->maxlen, f); + fprintf(f, "\n"); +} + +static void +bc_incbin_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc) +{ + bytecode_incbin *incbin = (bytecode_incbin *)bc->contents; + yasm_value val; + + if (yasm_value_finalize_expr(&val, incbin->start, prev_bc, 0)) + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("start expression too complex")); + else if (val.rel) + yasm_error_set(YASM_ERROR_NOT_ABSOLUTE, + N_("start expression not absolute")); + incbin->start = val.abs; + + if (yasm_value_finalize_expr(&val, incbin->maxlen, prev_bc, 0)) + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("maximum length expression too complex")); + else if (val.rel) + yasm_error_set(YASM_ERROR_NOT_ABSOLUTE, + N_("maximum length expression not absolute")); + incbin->maxlen = val.abs; +} + +static int +bc_incbin_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + bytecode_incbin *incbin = (bytecode_incbin *)bc->contents; + FILE *f; + /*@dependent@*/ /*@null@*/ const yasm_intnum *num; + unsigned long start = 0, maxlen = 0xFFFFFFFFUL, flen; + + /* Try to convert start to integer value */ + if (incbin->start) { + num = yasm_expr_get_intnum(&incbin->start, 0); + if (num) + start = yasm_intnum_get_uint(num); + if (!num) { + /* FIXME */ + yasm_error_set(YASM_ERROR_NOT_IMPLEMENTED, + N_("incbin does not yet understand non-constant")); + return -1; + } + } + + /* Try to convert maxlen to integer value */ + if (incbin->maxlen) { + num = yasm_expr_get_intnum(&incbin->maxlen, 0); + if (num) + maxlen = yasm_intnum_get_uint(num); + if (!num) { + /* FIXME */ + yasm_error_set(YASM_ERROR_NOT_IMPLEMENTED, + N_("incbin does not yet understand non-constant")); + return -1; + } + } + + /* Open file and determine its length */ + f = yasm_fopen_include(incbin->filename, incbin->from, "rb", NULL); + if (!f) { + yasm_error_set(YASM_ERROR_IO, + N_("`incbin': unable to open file `%s'"), + incbin->filename); + return -1; + } + if (fseek(f, 0L, SEEK_END) < 0) { + yasm_error_set(YASM_ERROR_IO, + N_("`incbin': unable to seek on file `%s'"), + incbin->filename); + return -1; + } + flen = (unsigned long)ftell(f); + fclose(f); + + /* Compute length of incbin from start, maxlen, and len */ + if (start > flen) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("`incbin': start past end of file `%s'"), + incbin->filename); + start = flen; + } + flen -= start; + if (incbin->maxlen) + if (maxlen < flen) + flen = maxlen; + bc->len += flen; + return 0; +} + +static int +bc_incbin_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@unused@*/ yasm_output_reloc_func output_reloc) +{ + bytecode_incbin *incbin = (bytecode_incbin *)bc->contents; + FILE *f; + /*@dependent@*/ /*@null@*/ const yasm_intnum *num; + unsigned long start = 0; + + /* Convert start to integer value */ + if (incbin->start) { + num = yasm_expr_get_intnum(&incbin->start, 0); + if (!num) + yasm_internal_error( + N_("could not determine start in bc_tobytes_incbin")); + start = yasm_intnum_get_uint(num); + } + + /* Open file */ + f = yasm_fopen_include(incbin->filename, incbin->from, "rb", NULL); + if (!f) { + yasm_error_set(YASM_ERROR_IO, N_("`incbin': unable to open file `%s'"), + incbin->filename); + return 1; + } + + /* Seek to start of data */ + if (fseek(f, (long)start, SEEK_SET) < 0) { + yasm_error_set(YASM_ERROR_IO, + N_("`incbin': unable to seek on file `%s'"), + incbin->filename); + fclose(f); + return 1; + } + + /* Read len bytes */ + if (fread(*bufp, 1, (size_t)bc->len, f) < (size_t)bc->len) { + yasm_error_set(YASM_ERROR_IO, + N_("`incbin': unable to read %lu bytes from file `%s'"), + bc->len, incbin->filename); + fclose(f); + return 1; + } + + *bufp += bc->len; + fclose(f); + return 0; +} + +yasm_bytecode * +yasm_bc_create_incbin(char *filename, yasm_expr *start, yasm_expr *maxlen, + yasm_linemap *linemap, unsigned long line) +{ + bytecode_incbin *incbin = yasm_xmalloc(sizeof(bytecode_incbin)); + unsigned long xline; + + /* Find from filename based on line number */ + yasm_linemap_lookup(linemap, line, &incbin->from, &xline); + + /*@-mustfree@*/ + incbin->filename = filename; + incbin->start = start; + incbin->maxlen = maxlen; + /*@=mustfree@*/ + + return yasm_bc_create_common(&bc_incbin_callback, incbin, line); +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/bc-org.c b/third-party/yasm/yasm-1.3.0/libyasm/bc-org.c new file mode 100644 index 0000000000..7ef96c8412 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/bc-org.c @@ -0,0 +1,152 @@ +/* + * ORG bytecode + * + * Copyright (C) 2005-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 "util.h" + +#include "libyasm-stdint.h" +#include "coretype.h" +#include "file.h" + +#include "errwarn.h" +#include "intnum.h" +#include "expr.h" +#include "value.h" + +#include "bytecode.h" + + +typedef struct bytecode_org { + unsigned long start; /* target starting offset within section */ + unsigned long fill; /* fill value */ +} bytecode_org; + +static void bc_org_destroy(void *contents); +static void bc_org_print(const void *contents, FILE *f, int indent_level); +static void bc_org_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc); +static int bc_org_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data); +static int bc_org_expand(yasm_bytecode *bc, int span, long old_val, + long new_val, /*@out@*/ long *neg_thres, + /*@out@*/ long *pos_thres); +static int bc_org_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +static const yasm_bytecode_callback bc_org_callback = { + bc_org_destroy, + bc_org_print, + bc_org_finalize, + NULL, + bc_org_calc_len, + bc_org_expand, + bc_org_tobytes, + YASM_BC_SPECIAL_OFFSET +}; + + +static void +bc_org_destroy(void *contents) +{ + yasm_xfree(contents); +} + +static void +bc_org_print(const void *contents, FILE *f, int indent_level) +{ + const bytecode_org *org = (const bytecode_org *)contents; + fprintf(f, "%*s_Org_\n", indent_level, ""); + fprintf(f, "%*sStart=%lu\n", indent_level, "", org->start); +} + +static void +bc_org_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc) +{ +} + +static int +bc_org_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + bytecode_org *org = (bytecode_org *)bc->contents; + long neg_thres = 0; + long pos_thres = org->start; + + if (bc_org_expand(bc, 0, 0, (long)bc->offset, &neg_thres, &pos_thres) < 0) + return -1; + + return 0; +} + +static int +bc_org_expand(yasm_bytecode *bc, int span, long old_val, long new_val, + /*@out@*/ long *neg_thres, /*@out@*/ long *pos_thres) +{ + bytecode_org *org = (bytecode_org *)bc->contents; + + /* Check for overrun */ + if ((unsigned long)new_val > org->start) { + yasm_error_set(YASM_ERROR_GENERAL, + N_("ORG overlap with already existing data")); + return -1; + } + + /* Generate space to start offset */ + bc->len = org->start - new_val; + return 1; +} + +static int +bc_org_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@unused@*/ yasm_output_reloc_func output_reloc) +{ + bytecode_org *org = (bytecode_org *)bc->contents; + unsigned long len, i; + + /* Sanity check for overrun */ + if (bc->offset > org->start) { + yasm_error_set(YASM_ERROR_GENERAL, + N_("ORG overlap with already existing data")); + return 1; + } + len = org->start - bc->offset; + for (i=0; ifill); /* XXX: handle more than 8 bit? */ + return 0; +} + +yasm_bytecode * +yasm_bc_create_org(unsigned long start, unsigned long fill, unsigned long line) +{ + bytecode_org *org = yasm_xmalloc(sizeof(bytecode_org)); + + org->start = start; + org->fill = fill; + + return yasm_bc_create_common(&bc_org_callback, org, line); +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/bc-reserve.c b/third-party/yasm/yasm-1.3.0/libyasm/bc-reserve.c new file mode 100644 index 0000000000..197175b4e5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/bc-reserve.c @@ -0,0 +1,152 @@ +/* + * Bytecode utility functions + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 "util.h" + +#include "libyasm-stdint.h" +#include "coretype.h" + +#include "errwarn.h" +#include "intnum.h" +#include "expr.h" +#include "value.h" + +#include "bytecode.h" + + +typedef struct bytecode_reserve { + /*@only@*/ /*@null@*/ yasm_expr *numitems; /* number of items to reserve */ + unsigned int itemsize; /* size of each item (in bytes) */ +} bytecode_reserve; + +static void bc_reserve_destroy(void *contents); +static void bc_reserve_print(const void *contents, FILE *f, int indent_level); +static void bc_reserve_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc); +static int bc_reserve_elem_size(yasm_bytecode *bc); +static int bc_reserve_calc_len(yasm_bytecode *bc, + yasm_bc_add_span_func add_span, + void *add_span_data); +static int bc_reserve_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +static const yasm_bytecode_callback bc_reserve_callback = { + bc_reserve_destroy, + bc_reserve_print, + bc_reserve_finalize, + bc_reserve_elem_size, + bc_reserve_calc_len, + yasm_bc_expand_common, + bc_reserve_tobytes, + YASM_BC_SPECIAL_RESERVE +}; + + +static void +bc_reserve_destroy(void *contents) +{ + bytecode_reserve *reserve = (bytecode_reserve *)contents; + yasm_expr_destroy(reserve->numitems); + yasm_xfree(contents); +} + +static void +bc_reserve_print(const void *contents, FILE *f, int indent_level) +{ + const bytecode_reserve *reserve = (const bytecode_reserve *)contents; + fprintf(f, "%*s_Reserve_\n", indent_level, ""); + fprintf(f, "%*sNum Items=", indent_level, ""); + yasm_expr_print(reserve->numitems, f); + fprintf(f, "\n%*sItem Size=%u\n", indent_level, "", reserve->itemsize); +} + +static void +bc_reserve_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc) +{ + bytecode_reserve *reserve = (bytecode_reserve *)bc->contents; + /* multiply reserve expression into multiple */ + if (!bc->multiple) + bc->multiple = reserve->numitems; + else + bc->multiple = yasm_expr_create_tree(bc->multiple, YASM_EXPR_MUL, + reserve->numitems, bc->line); + reserve->numitems = NULL; +} + +static int +bc_reserve_elem_size(yasm_bytecode *bc) +{ + bytecode_reserve *reserve = (bytecode_reserve *)bc->contents; + return reserve->itemsize; +} + +static int +bc_reserve_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + bytecode_reserve *reserve = (bytecode_reserve *)bc->contents; + bc->len += reserve->itemsize; + return 0; +} + +static int +bc_reserve_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@unused@*/ yasm_output_reloc_func output_reloc) +{ + yasm_internal_error(N_("bc_reserve_tobytes called")); + /*@notreached@*/ + return 1; +} + +yasm_bytecode * +yasm_bc_create_reserve(yasm_expr *numitems, unsigned int itemsize, + unsigned long line) +{ + bytecode_reserve *reserve = yasm_xmalloc(sizeof(bytecode_reserve)); + + /*@-mustfree@*/ + reserve->numitems = numitems; + /*@=mustfree@*/ + reserve->itemsize = itemsize; + + return yasm_bc_create_common(&bc_reserve_callback, reserve, line); +} + +const yasm_expr * +yasm_bc_reserve_numitems(yasm_bytecode *bc, unsigned int *itemsize) +{ + bytecode_reserve *reserve; + + if (bc->callback != &bc_reserve_callback) + return NULL; + + reserve = (bytecode_reserve *)bc->contents; + *itemsize = reserve->itemsize; + return reserve->numitems; +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/bitvect.c b/third-party/yasm/yasm-1.3.0/libyasm/bitvect.c new file mode 100644 index 0000000000..dfb08252b0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/bitvect.c @@ -0,0 +1,4045 @@ +#include "util.h" + +#include "coretype.h" + +/*****************************************************************************/ +/* MODULE NAME: BitVector.c MODULE TYPE: (adt) */ +/*****************************************************************************/ +/* MODULE IMPORTS: */ +/*****************************************************************************/ +#include /* MODULE TYPE: (sys) */ +#include /* MODULE TYPE: (sys) */ +#include /* MODULE TYPE: (sys) */ +/*****************************************************************************/ +/* MODULE INTERFACE: */ +/*****************************************************************************/ +#include "bitvect.h" + +/* ToolBox.h */ +#define and && /* logical (boolean) operators: lower case */ +#define or || +#define not ! + +#define AND & /* binary (bitwise) operators: UPPER CASE */ +#define OR | +#define XOR ^ +#define NOT ~ +#define SHL << +#define SHR >> + +#ifdef ENABLE_MODULO +#define mod % /* arithmetic operators */ +#endif + +#define blockdef(name,size) unsigned char name[size] +#define blocktypedef(name,size) typedef unsigned char name[size] + +/*****************************************************************************/ +/* MODULE RESOURCES: */ +/*****************************************************************************/ + +#define bits_(BitVector) *(BitVector-3) +#define size_(BitVector) *(BitVector-2) +#define mask_(BitVector) *(BitVector-1) + +#define ERRCODE_TYPE "sizeof(word) > sizeof(size_t)" +#define ERRCODE_BITS "bits(word) != sizeof(word)*8" +#define ERRCODE_WORD "bits(word) < 16" +#define ERRCODE_LONG "bits(word) > bits(long)" +#define ERRCODE_POWR "bits(word) != 2^x" +#define ERRCODE_LOGA "bits(word) != 2^ld(bits(word))" +#define ERRCODE_NULL "unable to allocate memory" +#define ERRCODE_INDX "index out of range" +#define ERRCODE_ORDR "minimum > maximum index" +#define ERRCODE_SIZE "bit vector size mismatch" +#define ERRCODE_PARS "input string syntax error" +#define ERRCODE_OVFL "numeric overflow error" +#define ERRCODE_SAME "result vector(s) must be distinct" +#define ERRCODE_EXPO "exponent must be positive" +#define ERRCODE_ZERO "division by zero error" +#define ERRCODE_OOPS "unexpected internal error - please contact author" + +const N_int BitVector_BYTENORM[256] = +{ + 0x00, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, 0x03, + 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04, /* 0x00 */ + 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04, + 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, /* 0x10 */ + 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04, + 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, /* 0x20 */ + 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, + 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, /* 0x30 */ + 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04, + 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, /* 0x40 */ + 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, + 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, /* 0x50 */ + 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, + 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, /* 0x60 */ + 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, + 0x04, 0x05, 0x05, 0x06, 0x05, 0x06, 0x06, 0x07, /* 0x70 */ + 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04, + 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, /* 0x80 */ + 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, + 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, /* 0x90 */ + 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, + 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, /* 0xA0 */ + 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, + 0x04, 0x05, 0x05, 0x06, 0x05, 0x06, 0x06, 0x07, /* 0xB0 */ + 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, + 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, /* 0xC0 */ + 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, + 0x04, 0x05, 0x05, 0x06, 0x05, 0x06, 0x06, 0x07, /* 0xD0 */ + 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, + 0x04, 0x05, 0x05, 0x06, 0x05, 0x06, 0x06, 0x07, /* 0xE0 */ + 0x04, 0x05, 0x05, 0x06, 0x05, 0x06, 0x06, 0x07, + 0x05, 0x06, 0x06, 0x07, 0x06, 0x07, 0x07, 0x08 /* 0xF0 */ +}; + +/*****************************************************************************/ +/* MODULE IMPLEMENTATION: */ +/*****************************************************************************/ + + /**********************************************/ + /* global implementation-intrinsic constants: */ + /**********************************************/ + +#define BIT_VECTOR_HIDDEN_WORDS 3 + + /*****************************************************************/ + /* global machine-dependent constants (set by "BitVector_Boot"): */ + /*****************************************************************/ + +static N_word BITS; /* = # of bits in machine word (must be power of 2) */ +static N_word MODMASK; /* = BITS - 1 (mask for calculating modulo BITS) */ +static N_word LOGBITS; /* = ld(BITS) (logarithmus dualis) */ +static N_word FACTOR; /* = ld(BITS / 8) (ld of # of bytes) */ + +static N_word LSB = 1; /* = mask for least significant bit */ +static N_word MSB; /* = mask for most significant bit */ + +static N_word LONGBITS; /* = # of bits in unsigned long */ + +static N_word LOG10; /* = logarithm to base 10 of BITS - 1 */ +static N_word EXP10; /* = largest possible power of 10 in signed int */ + + /********************************************************************/ + /* global bit mask table for fast access (set by "BitVector_Boot"): */ + /********************************************************************/ + +static wordptr BITMASKTAB; + + /*****************************/ + /* global macro definitions: */ + /*****************************/ + +#define BIT_VECTOR_ZERO_WORDS(target,count) \ + while (count-- > 0) *target++ = 0; + +#define BIT_VECTOR_FILL_WORDS(target,fill,count) \ + while (count-- > 0) *target++ = fill; + +#define BIT_VECTOR_FLIP_WORDS(target,flip,count) \ + while (count-- > 0) *target++ ^= flip; + +#define BIT_VECTOR_COPY_WORDS(target,source,count) \ + while (count-- > 0) *target++ = *source++; + +#define BIT_VECTOR_BACK_WORDS(target,source,count) \ + { target += count; source += count; while (count-- > 0) *--target = *--source; } + +#define BIT_VECTOR_CLR_BIT(address,index) \ + *(address+(index>>LOGBITS)) &= NOT BITMASKTAB[index AND MODMASK]; + +#define BIT_VECTOR_SET_BIT(address,index) \ + *(address+(index>>LOGBITS)) |= BITMASKTAB[index AND MODMASK]; + +#define BIT_VECTOR_TST_BIT(address,index) \ + ((*(address+(index>>LOGBITS)) AND BITMASKTAB[index AND MODMASK]) != 0) + +#define BIT_VECTOR_FLP_BIT(address,index,mask) \ + (mask = BITMASKTAB[index AND MODMASK]), \ + (((*(addr+(index>>LOGBITS)) ^= mask) AND mask) != 0) + +#define BIT_VECTOR_DIGITIZE(type,value,digit) \ + value = (type) ((digit = value) / 10); \ + digit -= value * 10; \ + digit += (type) '0'; + + /*********************************************************/ + /* private low-level functions (potentially dangerous!): */ + /*********************************************************/ + +static N_word power10(N_word x) +{ + N_word y = 1; + + while (x-- > 0) y *= 10; + return(y); +} + +static void BIT_VECTOR_zro_words(wordptr addr, N_word count) +{ + BIT_VECTOR_ZERO_WORDS(addr,count) +} + +static void BIT_VECTOR_cpy_words(wordptr target, wordptr source, N_word count) +{ + BIT_VECTOR_COPY_WORDS(target,source,count) +} + +static void BIT_VECTOR_mov_words(wordptr target, wordptr source, N_word count) +{ + if (target != source) + { + if (target < source) BIT_VECTOR_COPY_WORDS(target,source,count) + else BIT_VECTOR_BACK_WORDS(target,source,count) + } +} + +static void BIT_VECTOR_ins_words(wordptr addr, N_word total, N_word count, + boolean clear) +{ + N_word length; + + if ((total > 0) and (count > 0)) + { + if (count > total) count = total; + length = total - count; + if (length > 0) BIT_VECTOR_mov_words(addr+count,addr,length); + if (clear) BIT_VECTOR_zro_words(addr,count); + } +} + +static void BIT_VECTOR_del_words(wordptr addr, N_word total, N_word count, + boolean clear) +{ + N_word length; + + if ((total > 0) and (count > 0)) + { + if (count > total) count = total; + length = total - count; + if (length > 0) BIT_VECTOR_mov_words(addr,addr+count,length); + if (clear) BIT_VECTOR_zro_words(addr+length,count); + } +} + +static void BIT_VECTOR_reverse(charptr string, N_word length) +{ + charptr last; + N_char temp; + + if (length > 1) + { + last = string + length - 1; + while (string < last) + { + temp = *string; + *string = *last; + *last = temp; + string++; + last--; + } + } +} + +static N_word BIT_VECTOR_int2str(charptr string, N_word value) +{ + N_word length; + N_word digit; + charptr work; + + work = string; + if (value > 0) + { + length = 0; + while (value > 0) + { + BIT_VECTOR_DIGITIZE(N_word,value,digit) + *work++ = (N_char) digit; + length++; + } + BIT_VECTOR_reverse(string,length); + } + else + { + length = 1; + *work++ = (N_char) '0'; + } + return(length); +} + +static N_word BIT_VECTOR_str2int(charptr string, N_word *value) +{ + N_word length; + N_word digit; + + *value = 0; + length = 0; + digit = (N_word) *string++; + /* separate because isdigit() is likely a macro! */ + while (isdigit((int)digit) != 0) + { + length++; + digit -= (N_word) '0'; + if (*value) *value *= 10; + *value += digit; + digit = (N_word) *string++; + } + return(length); +} + + /********************************************/ + /* routine to convert error code to string: */ + /********************************************/ + +const char * BitVector_Error(ErrCode error) +{ + switch (error) + { + case ErrCode_Ok: return( NULL ); break; + case ErrCode_Type: return( ERRCODE_TYPE ); break; + case ErrCode_Bits: return( ERRCODE_BITS ); break; + case ErrCode_Word: return( ERRCODE_WORD ); break; + case ErrCode_Long: return( ERRCODE_LONG ); break; + case ErrCode_Powr: return( ERRCODE_POWR ); break; + case ErrCode_Loga: return( ERRCODE_LOGA ); break; + case ErrCode_Null: return( ERRCODE_NULL ); break; + case ErrCode_Indx: return( ERRCODE_INDX ); break; + case ErrCode_Ordr: return( ERRCODE_ORDR ); break; + case ErrCode_Size: return( ERRCODE_SIZE ); break; + case ErrCode_Pars: return( ERRCODE_PARS ); break; + case ErrCode_Ovfl: return( ERRCODE_OVFL ); break; + case ErrCode_Same: return( ERRCODE_SAME ); break; + case ErrCode_Expo: return( ERRCODE_EXPO ); break; + case ErrCode_Zero: return( ERRCODE_ZERO ); break; + default: return( ERRCODE_OOPS ); break; + } +} + + /*****************************************/ + /* automatic self-configuration routine: */ + /*****************************************/ + + /*******************************************************/ + /* */ + /* MUST be called once prior to any other function */ + /* to initialize the machine dependent constants */ + /* of this package! (But call only ONCE, or you */ + /* will suffer memory leaks!) */ + /* */ + /*******************************************************/ + +ErrCode BitVector_Boot(void) +{ + N_long longsample = 1L; + N_word sample = LSB; + N_word lsb; + + if (sizeof(N_word) > sizeof(size_t)) return(ErrCode_Type); + + BITS = 1; + while (sample <<= 1) BITS++; /* determine # of bits in a machine word */ + + if (BITS != (sizeof(N_word) << 3)) return(ErrCode_Bits); + + if (BITS < 16) return(ErrCode_Word); + + LONGBITS = 1; + while (longsample <<= 1) LONGBITS++; /* = # of bits in an unsigned long */ + + if (BITS > LONGBITS) return(ErrCode_Long); + + LOGBITS = 0; + sample = BITS; + lsb = (sample AND LSB); + while ((sample >>= 1) and (not lsb)) + { + LOGBITS++; + lsb = (sample AND LSB); + } + + if (sample) return(ErrCode_Powr); /* # of bits is not a power of 2! */ + + if (BITS != (LSB << LOGBITS)) return(ErrCode_Loga); + + MODMASK = BITS - 1; + FACTOR = LOGBITS - 3; /* ld(BITS / 8) = ld(BITS) - ld(8) = ld(BITS) - 3 */ + MSB = (LSB << MODMASK); + + BITMASKTAB = (wordptr) yasm_xmalloc((size_t) (BITS << FACTOR)); + + if (BITMASKTAB == NULL) return(ErrCode_Null); + + for ( sample = 0; sample < BITS; sample++ ) + { + BITMASKTAB[sample] = (LSB << sample); + } + + LOG10 = (N_word) (MODMASK * 0.30103); /* = (BITS - 1) * ( ln 2 / ln 10 ) */ + EXP10 = power10(LOG10); + + return(ErrCode_Ok); +} + +void BitVector_Shutdown(void) +{ + if (BITMASKTAB) yasm_xfree(BITMASKTAB); +} + +N_word BitVector_Size(N_int bits) /* bit vector size (# of words) */ +{ + N_word size; + + size = bits >> LOGBITS; + if (bits AND MODMASK) size++; + return(size); +} + +N_word BitVector_Mask(N_int bits) /* bit vector mask (unused bits) */ +{ + N_word mask; + + mask = bits AND MODMASK; + if (mask) mask = (N_word) ~(~0L << mask); else mask = (N_word) ~0L; + return(mask); +} + +const char * BitVector_Version(void) +{ + return("6.4"); +} + +N_int BitVector_Word_Bits(void) +{ + return(BITS); +} + +N_int BitVector_Long_Bits(void) +{ + return(LONGBITS); +} + +/********************************************************************/ +/* */ +/* WARNING: Do not "free()" constant character strings, i.e., */ +/* don't call "BitVector_Dispose()" for strings returned */ +/* by "BitVector_Error()" or "BitVector_Version()"! */ +/* */ +/* ONLY call this function for strings allocated with "malloc()", */ +/* i.e., the strings returned by the functions "BitVector_to_*()" */ +/* and "BitVector_Block_Read()"! */ +/* */ +/********************************************************************/ + +void BitVector_Dispose(charptr string) /* free string */ +{ + if (string != NULL) yasm_xfree((voidptr) string); +} + +void BitVector_Destroy(wordptr addr) /* free bitvec */ +{ + if (addr != NULL) + { + addr -= BIT_VECTOR_HIDDEN_WORDS; + yasm_xfree((voidptr) addr); + } +} + +void BitVector_Destroy_List(listptr list, N_int count) /* free list */ +{ + listptr slot; + + if (list != NULL) + { + slot = list; + while (count-- > 0) + { + BitVector_Destroy(*slot++); + } + free((voidptr) list); + } +} + +wordptr BitVector_Create(N_int bits, boolean clear) /* malloc */ +{ + N_word size; + N_word mask; + N_word bytes; + wordptr addr; + wordptr zero; + + size = BitVector_Size(bits); + mask = BitVector_Mask(bits); + bytes = (size + BIT_VECTOR_HIDDEN_WORDS) << FACTOR; + addr = (wordptr) yasm_xmalloc((size_t) bytes); + if (addr != NULL) + { + *addr++ = bits; + *addr++ = size; + *addr++ = mask; + if (clear) + { + zero = addr; + BIT_VECTOR_ZERO_WORDS(zero,size) + } + } + return(addr); +} + +listptr BitVector_Create_List(N_int bits, boolean clear, N_int count) +{ + listptr list = NULL; + listptr slot; + wordptr addr; + N_int i; + + if (count > 0) + { + list = (listptr) malloc(sizeof(wordptr) * count); + if (list != NULL) + { + slot = list; + for ( i = 0; i < count; i++ ) + { + addr = BitVector_Create(bits,clear); + if (addr == NULL) + { + BitVector_Destroy_List(list,i); + return(NULL); + } + *slot++ = addr; + } + } + } + return(list); +} + +wordptr BitVector_Resize(wordptr oldaddr, N_int bits) /* realloc */ +{ + N_word bytes; + N_word oldsize; + N_word oldmask; + N_word newsize; + N_word newmask; + wordptr newaddr; + wordptr source; + wordptr target; + + oldsize = size_(oldaddr); + oldmask = mask_(oldaddr); + newsize = BitVector_Size(bits); + newmask = BitVector_Mask(bits); + if (oldsize > 0) *(oldaddr+oldsize-1) &= oldmask; + if (newsize <= oldsize) + { + newaddr = oldaddr; + bits_(newaddr) = bits; + size_(newaddr) = newsize; + mask_(newaddr) = newmask; + if (newsize > 0) *(newaddr+newsize-1) &= newmask; + } + else + { + bytes = (newsize + BIT_VECTOR_HIDDEN_WORDS) << FACTOR; + newaddr = (wordptr) yasm_xmalloc((size_t) bytes); + if (newaddr != NULL) + { + *newaddr++ = bits; + *newaddr++ = newsize; + *newaddr++ = newmask; + target = newaddr; + source = oldaddr; + newsize -= oldsize; + BIT_VECTOR_COPY_WORDS(target,source,oldsize) + BIT_VECTOR_ZERO_WORDS(target,newsize) + } + BitVector_Destroy(oldaddr); + } + return(newaddr); +} + +wordptr BitVector_Shadow(wordptr addr) /* makes new, same size but empty */ +{ + return( BitVector_Create(bits_(addr),true) ); +} + +wordptr BitVector_Clone(wordptr addr) /* makes exact duplicate */ +{ + N_word bits; + wordptr twin; + + bits = bits_(addr); + twin = BitVector_Create(bits,false); + if ((twin != NULL) and (bits > 0)) + BIT_VECTOR_cpy_words(twin,addr,size_(addr)); + return(twin); +} + +wordptr BitVector_Concat(wordptr X, wordptr Y) /* returns concatenation */ +{ + /* BEWARE that X = most significant part, Y = least significant part! */ + + N_word bitsX; + N_word bitsY; + N_word bitsZ; + wordptr Z; + + bitsX = bits_(X); + bitsY = bits_(Y); + bitsZ = bitsX + bitsY; + Z = BitVector_Create(bitsZ,false); + if ((Z != NULL) and (bitsZ > 0)) + { + BIT_VECTOR_cpy_words(Z,Y,size_(Y)); + BitVector_Interval_Copy(Z,X,bitsY,0,bitsX); + *(Z+size_(Z)-1) &= mask_(Z); + } + return(Z); +} + +void BitVector_Copy(wordptr X, wordptr Y) /* X = Y */ +{ + N_word sizeX = size_(X); + N_word sizeY = size_(Y); + N_word maskX = mask_(X); + N_word maskY = mask_(Y); + N_word fill = 0; + wordptr lastX; + wordptr lastY; + + if ((X != Y) and (sizeX > 0)) + { + lastX = X + sizeX - 1; + if (sizeY > 0) + { + lastY = Y + sizeY - 1; + if ( (*lastY AND (maskY AND NOT (maskY >> 1))) == 0 ) *lastY &= maskY; + else + { + fill = (N_word) ~0L; + *lastY |= NOT maskY; + } + while ((sizeX > 0) and (sizeY > 0)) + { + *X++ = *Y++; + sizeX--; + sizeY--; + } + *lastY &= maskY; + } + while (sizeX-- > 0) *X++ = fill; + *lastX &= maskX; + } +} + +void BitVector_Empty(wordptr addr) /* X = {} clr all */ +{ + N_word size = size_(addr); + + BIT_VECTOR_ZERO_WORDS(addr,size) +} + +void BitVector_Fill(wordptr addr) /* X = ~{} set all */ +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + N_word fill = (N_word) ~0L; + + if (size > 0) + { + BIT_VECTOR_FILL_WORDS(addr,fill,size) + *(--addr) &= mask; + } +} + +void BitVector_Flip(wordptr addr) /* X = ~X flip all */ +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + N_word flip = (N_word) ~0L; + + if (size > 0) + { + BIT_VECTOR_FLIP_WORDS(addr,flip,size) + *(--addr) &= mask; + } +} + +void BitVector_Primes(wordptr addr) +{ + N_word bits = bits_(addr); + N_word size = size_(addr); + wordptr work; + N_word temp; + N_word i,j; + + if (size > 0) + { + temp = 0xAAAA; + i = BITS >> 4; + while (--i > 0) + { + temp <<= 16; + temp |= 0xAAAA; + } + i = size; + work = addr; + *work++ = temp XOR 0x0006; + while (--i > 0) *work++ = temp; + for ( i = 3; (j = i * i) < bits; i += 2 ) + { + for ( ; j < bits; j += i ) BIT_VECTOR_CLR_BIT(addr,j) + } + *(addr+size-1) &= mask_(addr); + } +} + +void BitVector_Reverse(wordptr X, wordptr Y) +{ + N_word bits = bits_(X); + N_word mask; + N_word bit; + N_word value; + + if (bits > 0) + { + if (X == Y) BitVector_Interval_Reverse(X,0,bits-1); + else if (bits == bits_(Y)) + { +/* mask = mask_(Y); */ +/* mask &= NOT (mask >> 1); */ + mask = BITMASKTAB[(bits-1) AND MODMASK]; + Y += size_(Y) - 1; + value = 0; + bit = LSB; + while (bits-- > 0) + { + if ((*Y AND mask) != 0) + { + value |= bit; + } + if (not (mask >>= 1)) + { + Y--; + mask = MSB; + } + if (not (bit <<= 1)) + { + *X++ = value; + value = 0; + bit = LSB; + } + } + if (bit > LSB) *X = value; + } + } +} + +void BitVector_Interval_Empty(wordptr addr, N_int lower, N_int upper) +{ /* X = X \ [lower..upper] */ + N_word bits = bits_(addr); + N_word size = size_(addr); + wordptr loaddr; + wordptr hiaddr; + N_word lobase; + N_word hibase; + N_word lomask; + N_word himask; + N_word diff; + + if ((size > 0) and (lower < bits) and (upper < bits) and (lower <= upper)) + { + lobase = lower >> LOGBITS; + hibase = upper >> LOGBITS; + diff = hibase - lobase; + loaddr = addr + lobase; + hiaddr = addr + hibase; + + lomask = (N_word) (~0L << (lower AND MODMASK)); + himask = (N_word) ~((~0L << (upper AND MODMASK)) << 1); + + if (diff == 0) + { + *loaddr &= NOT (lomask AND himask); + } + else + { + *loaddr++ &= NOT lomask; + while (--diff > 0) + { + *loaddr++ = 0; + } + *hiaddr &= NOT himask; + } + } +} + +void BitVector_Interval_Fill(wordptr addr, N_int lower, N_int upper) +{ /* X = X + [lower..upper] */ + N_word bits = bits_(addr); + N_word size = size_(addr); + N_word fill = (N_word) ~0L; + wordptr loaddr; + wordptr hiaddr; + N_word lobase; + N_word hibase; + N_word lomask; + N_word himask; + N_word diff; + + if ((size > 0) and (lower < bits) and (upper < bits) and (lower <= upper)) + { + lobase = lower >> LOGBITS; + hibase = upper >> LOGBITS; + diff = hibase - lobase; + loaddr = addr + lobase; + hiaddr = addr + hibase; + + lomask = (N_word) (~0L << (lower AND MODMASK)); + himask = (N_word) ~((~0L << (upper AND MODMASK)) << 1); + + if (diff == 0) + { + *loaddr |= (lomask AND himask); + } + else + { + *loaddr++ |= lomask; + while (--diff > 0) + { + *loaddr++ = fill; + } + *hiaddr |= himask; + } + *(addr+size-1) &= mask_(addr); + } +} + +void BitVector_Interval_Flip(wordptr addr, N_int lower, N_int upper) +{ /* X = X ^ [lower..upper] */ + N_word bits = bits_(addr); + N_word size = size_(addr); + N_word flip = (N_word) ~0L; + wordptr loaddr; + wordptr hiaddr; + N_word lobase; + N_word hibase; + N_word lomask; + N_word himask; + N_word diff; + + if ((size > 0) and (lower < bits) and (upper < bits) and (lower <= upper)) + { + lobase = lower >> LOGBITS; + hibase = upper >> LOGBITS; + diff = hibase - lobase; + loaddr = addr + lobase; + hiaddr = addr + hibase; + + lomask = (N_word) (~0L << (lower AND MODMASK)); + himask = (N_word) ~((~0L << (upper AND MODMASK)) << 1); + + if (diff == 0) + { + *loaddr ^= (lomask AND himask); + } + else + { + *loaddr++ ^= lomask; + while (--diff > 0) + { + *loaddr++ ^= flip; + } + *hiaddr ^= himask; + } + *(addr+size-1) &= mask_(addr); + } +} + +void BitVector_Interval_Reverse(wordptr addr, N_int lower, N_int upper) +{ + N_word bits = bits_(addr); + wordptr loaddr; + wordptr hiaddr; + N_word lomask; + N_word himask; + + if ((bits > 0) and (lower < bits) and (upper < bits) and (lower < upper)) + { + loaddr = addr + (lower >> LOGBITS); + hiaddr = addr + (upper >> LOGBITS); + lomask = BITMASKTAB[lower AND MODMASK]; + himask = BITMASKTAB[upper AND MODMASK]; + for ( bits = upper - lower + 1; bits > 1; bits -= 2 ) + { + if (((*loaddr AND lomask) != 0) XOR ((*hiaddr AND himask) != 0)) + { + *loaddr ^= lomask; /* swap bits only if they differ! */ + *hiaddr ^= himask; + } + if (not (lomask <<= 1)) + { + lomask = LSB; + loaddr++; + } + if (not (himask >>= 1)) + { + himask = MSB; + hiaddr--; + } + } + } +} + +boolean BitVector_interval_scan_inc(wordptr addr, N_int start, + N_intptr min, N_intptr max) +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + N_word offset; + N_word bitmask; + N_word value; + boolean empty; + + if ((size == 0) or (start >= bits_(addr))) return(FALSE); + + *min = start; + *max = start; + + offset = start >> LOGBITS; + + *(addr+size-1) &= mask; + + addr += offset; + size -= offset; + + bitmask = BITMASKTAB[start AND MODMASK]; + mask = NOT (bitmask OR (bitmask - 1)); + + value = *addr++; + if ((value AND bitmask) == 0) + { + value &= mask; + if (value == 0) + { + offset++; + empty = TRUE; + while (empty and (--size > 0)) + { + if ((value = *addr++)) empty = false; else offset++; + } + if (empty) return(FALSE); + } + start = offset << LOGBITS; + bitmask = LSB; + mask = value; + while (not (mask AND LSB)) + { + bitmask <<= 1; + mask >>= 1; + start++; + } + mask = NOT (bitmask OR (bitmask - 1)); + *min = start; + *max = start; + } + value = NOT value; + value &= mask; + if (value == 0) + { + offset++; + empty = TRUE; + while (empty and (--size > 0)) + { + if ((value = NOT *addr++)) empty = false; else offset++; + } + if (empty) value = LSB; + } + start = offset << LOGBITS; + while (not (value AND LSB)) + { + value >>= 1; + start++; + } + *max = --start; + return(TRUE); +} + +boolean BitVector_interval_scan_dec(wordptr addr, N_int start, + N_intptr min, N_intptr max) +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + N_word offset; + N_word bitmask; + N_word value; + boolean empty; + + if ((size == 0) or (start >= bits_(addr))) return(FALSE); + + *min = start; + *max = start; + + offset = start >> LOGBITS; + + if (offset >= size) return(FALSE); + + *(addr+size-1) &= mask; + + addr += offset; + size = ++offset; + + bitmask = BITMASKTAB[start AND MODMASK]; + mask = (bitmask - 1); + + value = *addr--; + if ((value AND bitmask) == 0) + { + value &= mask; + if (value == 0) + { + offset--; + empty = TRUE; + while (empty and (--size > 0)) + { + if ((value = *addr--)) empty = false; else offset--; + } + if (empty) return(FALSE); + } + start = offset << LOGBITS; + bitmask = MSB; + mask = value; + while (not (mask AND MSB)) + { + bitmask >>= 1; + mask <<= 1; + start--; + } + mask = (bitmask - 1); + *max = --start; + *min = start; + } + value = NOT value; + value &= mask; + if (value == 0) + { + offset--; + empty = TRUE; + while (empty and (--size > 0)) + { + if ((value = NOT *addr--)) empty = false; else offset--; + } + if (empty) value = MSB; + } + start = offset << LOGBITS; + while (not (value AND MSB)) + { + value <<= 1; + start--; + } + *min = start; + return(TRUE); +} + +void BitVector_Interval_Copy(wordptr X, wordptr Y, N_int Xoffset, + N_int Yoffset, N_int length) +{ + N_word bitsX = bits_(X); + N_word bitsY = bits_(Y); + N_word source = 0; /* silence compiler warning */ + N_word target = 0; /* silence compiler warning */ + N_word s_lo_base; + N_word s_hi_base; + N_word s_lo_bit; + N_word s_hi_bit; + N_word s_base; + N_word s_lower = 0; /* silence compiler warning */ + N_word s_upper = 0; /* silence compiler warning */ + N_word s_bits; + N_word s_min; + N_word s_max; + N_word t_lo_base; + N_word t_hi_base; + N_word t_lo_bit; + N_word t_hi_bit; + N_word t_base; + N_word t_lower = 0; /* silence compiler warning */ + N_word t_upper = 0; /* silence compiler warning */ + N_word t_bits; + N_word t_min; + N_word mask; + N_word bits; + N_word sel; + boolean ascending; + boolean notfirst; + wordptr Z = X; + + if ((length > 0) and (Xoffset < bitsX) and (Yoffset < bitsY)) + { + if ((Xoffset + length) > bitsX) length = bitsX - Xoffset; + if ((Yoffset + length) > bitsY) length = bitsY - Yoffset; + + ascending = (Xoffset <= Yoffset); + + s_lo_base = Yoffset >> LOGBITS; + s_lo_bit = Yoffset AND MODMASK; + Yoffset += --length; + s_hi_base = Yoffset >> LOGBITS; + s_hi_bit = Yoffset AND MODMASK; + + t_lo_base = Xoffset >> LOGBITS; + t_lo_bit = Xoffset AND MODMASK; + Xoffset += length; + t_hi_base = Xoffset >> LOGBITS; + t_hi_bit = Xoffset AND MODMASK; + + if (ascending) + { + s_base = s_lo_base; + t_base = t_lo_base; + } + else + { + s_base = s_hi_base; + t_base = t_hi_base; + } + s_bits = 0; + t_bits = 0; + Y += s_base; + X += t_base; + notfirst = FALSE; + while (TRUE) + { + if (t_bits == 0) + { + if (notfirst) + { + *X = target; + if (ascending) + { + if (t_base == t_hi_base) break; + t_base++; + X++; + } + else + { + if (t_base == t_lo_base) break; + t_base--; + X--; + } + } + sel = ((t_base == t_hi_base) << 1) OR (t_base == t_lo_base); + switch (sel) + { + case 0: + t_lower = 0; + t_upper = BITS - 1; + t_bits = BITS; + target = 0; + break; + case 1: + t_lower = t_lo_bit; + t_upper = BITS - 1; + t_bits = BITS - t_lo_bit; + mask = (N_word) (~0L << t_lower); + target = *X AND NOT mask; + break; + case 2: + t_lower = 0; + t_upper = t_hi_bit; + t_bits = t_hi_bit + 1; + mask = (N_word) ((~0L << t_upper) << 1); + target = *X AND mask; + break; + case 3: + t_lower = t_lo_bit; + t_upper = t_hi_bit; + t_bits = t_hi_bit - t_lo_bit + 1; + mask = (N_word) (~0L << t_lower); + mask &= (N_word) ~((~0L << t_upper) << 1); + target = *X AND NOT mask; + break; + } + } + if (s_bits == 0) + { + if (notfirst) + { + if (ascending) + { + if (s_base == s_hi_base) break; + s_base++; + Y++; + } + else + { + if (s_base == s_lo_base) break; + s_base--; + Y--; + } + } + source = *Y; + sel = ((s_base == s_hi_base) << 1) OR (s_base == s_lo_base); + switch (sel) + { + case 0: + s_lower = 0; + s_upper = BITS - 1; + s_bits = BITS; + break; + case 1: + s_lower = s_lo_bit; + s_upper = BITS - 1; + s_bits = BITS - s_lo_bit; + break; + case 2: + s_lower = 0; + s_upper = s_hi_bit; + s_bits = s_hi_bit + 1; + break; + case 3: + s_lower = s_lo_bit; + s_upper = s_hi_bit; + s_bits = s_hi_bit - s_lo_bit + 1; + break; + } + } + notfirst = TRUE; + if (s_bits > t_bits) + { + bits = t_bits - 1; + if (ascending) + { + s_min = s_lower; + s_max = s_lower + bits; + } + else + { + s_max = s_upper; + s_min = s_upper - bits; + } + t_min = t_lower; + } + else + { + bits = s_bits - 1; + if (ascending) t_min = t_lower; + else t_min = t_upper - bits; + s_min = s_lower; + s_max = s_upper; + } + bits++; + mask = (N_word) (~0L << s_min); + mask &= (N_word) ~((~0L << s_max) << 1); + if (s_min == t_min) target |= (source AND mask); + else + { + if (s_min < t_min) target |= (source AND mask) << (t_min-s_min); + else target |= (source AND mask) >> (s_min-t_min); + } + if (ascending) + { + s_lower += bits; + t_lower += bits; + } + else + { + s_upper -= bits; + t_upper -= bits; + } + s_bits -= bits; + t_bits -= bits; + } + *(Z+size_(Z)-1) &= mask_(Z); + } +} + + +wordptr BitVector_Interval_Substitute(wordptr X, wordptr Y, + N_int Xoffset, N_int Xlength, + N_int Yoffset, N_int Ylength) +{ + N_word Xbits = bits_(X); + N_word Ybits = bits_(Y); + N_word limit; + N_word diff; + + if ((Xoffset <= Xbits) and (Yoffset <= Ybits)) + { + limit = Xoffset + Xlength; + if (limit > Xbits) + { + limit = Xbits; + Xlength = Xbits - Xoffset; + } + if ((Yoffset + Ylength) > Ybits) + { + Ylength = Ybits - Yoffset; + } + if (Xlength == Ylength) + { + if ((Ylength > 0) and ((X != Y) or (Xoffset != Yoffset))) + { + BitVector_Interval_Copy(X,Y,Xoffset,Yoffset,Ylength); + } + } + else /* Xlength != Ylength */ + { + if (Xlength > Ylength) + { + diff = Xlength - Ylength; + if (Ylength > 0) BitVector_Interval_Copy(X,Y,Xoffset,Yoffset,Ylength); + if (limit < Xbits) BitVector_Delete(X,Xoffset+Ylength,diff,FALSE); + if ((X = BitVector_Resize(X,Xbits-diff)) == NULL) return(NULL); + } + else /* Ylength > Xlength ==> Ylength > 0 */ + { + diff = Ylength - Xlength; + if (X != Y) + { + if ((X = BitVector_Resize(X,Xbits+diff)) == NULL) return(NULL); + if (limit < Xbits) BitVector_Insert(X,limit,diff,FALSE); + BitVector_Interval_Copy(X,Y,Xoffset,Yoffset,Ylength); + } + else /* in-place */ + { + if ((Y = X = BitVector_Resize(X,Xbits+diff)) == NULL) return(NULL); + if (limit >= Xbits) + { + BitVector_Interval_Copy(X,Y,Xoffset,Yoffset,Ylength); + } + else /* limit < Xbits */ + { + BitVector_Insert(X,limit,diff,FALSE); + if ((Yoffset+Ylength) <= limit) + { + BitVector_Interval_Copy(X,Y,Xoffset,Yoffset,Ylength); + } + else /* overlaps or lies above critical area */ + { + if (limit <= Yoffset) + { + Yoffset += diff; + BitVector_Interval_Copy(X,Y,Xoffset,Yoffset,Ylength); + } + else /* Yoffset < limit */ + { + Xlength = limit - Yoffset; + BitVector_Interval_Copy(X,Y,Xoffset,Yoffset,Xlength); + Yoffset = Xoffset + Ylength; /* = limit + diff */ + Xoffset += Xlength; + Ylength -= Xlength; + BitVector_Interval_Copy(X,Y,Xoffset,Yoffset,Ylength); + } + } + } + } + } + } + } + return(X); +} + +boolean BitVector_is_empty(wordptr addr) /* X == {} ? */ +{ + N_word size = size_(addr); + boolean r = TRUE; + + if (size > 0) + { + *(addr+size-1) &= mask_(addr); + while (r and (size-- > 0)) r = ( *addr++ == 0 ); + } + return(r); +} + +boolean BitVector_is_full(wordptr addr) /* X == ~{} ? */ +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + boolean r = FALSE; + wordptr last; + + if (size > 0) + { + r = TRUE; + last = addr + size - 1; + *last |= NOT mask; + while (r and (size-- > 0)) r = ( NOT *addr++ == 0 ); + *last &= mask; + } + return(r); +} + +boolean BitVector_equal(wordptr X, wordptr Y) /* X == Y ? */ +{ + N_word size = size_(X); + N_word mask = mask_(X); + boolean r = FALSE; + + if (bits_(X) == bits_(Y)) + { + r = TRUE; + if (size > 0) + { + *(X+size-1) &= mask; + *(Y+size-1) &= mask; + while (r and (size-- > 0)) r = (*X++ == *Y++); + } + } + return(r); +} + +Z_int BitVector_Lexicompare(wordptr X, wordptr Y) /* X <,=,> Y ? */ +{ /* unsigned */ + N_word bitsX = bits_(X); + N_word bitsY = bits_(Y); + N_word size = size_(X); + boolean r = TRUE; + + if (bitsX == bitsY) + { + if (size > 0) + { + X += size; + Y += size; + while (r and (size-- > 0)) r = (*(--X) == *(--Y)); + } + if (r) return((Z_int) 0); + else + { + if (*X < *Y) return((Z_int) -1); else return((Z_int) 1); + } + } + else + { + if (bitsX < bitsY) return((Z_int) -1); else return((Z_int) 1); + } +} + +Z_int BitVector_Compare(wordptr X, wordptr Y) /* X <,=,> Y ? */ +{ /* signed */ + N_word bitsX = bits_(X); + N_word bitsY = bits_(Y); + N_word size = size_(X); + N_word mask = mask_(X); + N_word sign; + boolean r = TRUE; + + if (bitsX == bitsY) + { + if (size > 0) + { + X += size; + Y += size; + mask &= NOT (mask >> 1); + if ((sign = (*(X-1) AND mask)) != (*(Y-1) AND mask)) + { + if (sign) return((Z_int) -1); else return((Z_int) 1); + } + while (r and (size-- > 0)) r = (*(--X) == *(--Y)); + } + if (r) return((Z_int) 0); + else + { + if (*X < *Y) return((Z_int) -1); else return((Z_int) 1); + } + } + else + { + if (bitsX < bitsY) return((Z_int) -1); else return((Z_int) 1); + } +} + +charptr BitVector_to_Hex(wordptr addr) +{ + N_word bits = bits_(addr); + N_word size = size_(addr); + N_word value; + N_word count; + N_word digit; + N_word length; + charptr string; + + length = bits >> 2; + if (bits AND 0x0003) length++; + string = (charptr) yasm_xmalloc((size_t) (length+1)); + if (string == NULL) return(NULL); + string += length; + *string = (N_char) '\0'; + if (size > 0) + { + *(addr+size-1) &= mask_(addr); + while ((size-- > 0) and (length > 0)) + { + value = *addr++; + count = BITS >> 2; + while ((count-- > 0) and (length > 0)) + { + digit = value AND 0x000F; + if (digit > 9) digit += (N_word) 'A' - 10; + else digit += (N_word) '0'; + *(--string) = (N_char) digit; length--; + if ((count > 0) and (length > 0)) value >>= 4; + } + } + } + return(string); +} + +ErrCode BitVector_from_Hex(wordptr addr, charptr string) +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + boolean ok = TRUE; + size_t length; + N_word value; + N_word count; + int digit; + + if (size > 0) + { + length = strlen((char *) string); + string += length; + while (size-- > 0) + { + value = 0; + for ( count = 0; (ok and (length > 0) and (count < BITS)); count += 4 ) + { + digit = (int) *(--string); length--; + /* separate because toupper() is likely a macro! */ + digit = toupper(digit); + if (digit == '_') + count -= 4; + else if ((ok = (isxdigit(digit) != 0))) + { + if (digit >= (int) 'A') digit -= (int) 'A' - 10; + else digit -= (int) '0'; + value |= (((N_word) digit) << count); + } + } + *addr++ = value; + } + *(--addr) &= mask; + } + if (ok) return(ErrCode_Ok); + else return(ErrCode_Pars); +} + +ErrCode BitVector_from_Oct(wordptr addr, charptr string) +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + boolean ok = TRUE; + size_t length; + N_word value; + N_word value_fill = 0; + N_word count; + Z_word count_fill = 0; + int digit = 0; + + if (size > 0) + { + length = strlen((char *) string); + string += length; + while (size-- > 0) + { + value = value_fill; + for ( count = count_fill; (ok and (length > 0) and (count < BITS)); count += 3 ) + { + digit = (int) *(--string); length--; + if (digit == '_') + count -= 3; + else if ((ok = (isdigit(digit) && digit != '8' && digit != '9')) != 0) + { + digit -= (int) '0'; + value |= (((N_word) digit) << count); + } + } + count_fill = (Z_word)count-(Z_word)BITS; + if (count_fill > 0) + value_fill = (((N_word) digit) >> (3-count_fill)); + else + value_fill = 0; + *addr++ = value; + } + *(--addr) &= mask; + } + if (ok) return(ErrCode_Ok); + else return(ErrCode_Pars); +} + +charptr BitVector_to_Bin(wordptr addr) +{ + N_word size = size_(addr); + N_word value; + N_word count; + N_word digit; + N_word length; + charptr string; + + length = bits_(addr); + string = (charptr) yasm_xmalloc((size_t) (length+1)); + if (string == NULL) return(NULL); + string += length; + *string = (N_char) '\0'; + if (size > 0) + { + *(addr+size-1) &= mask_(addr); + while (size-- > 0) + { + value = *addr++; + count = BITS; + if (count > length) count = length; + while (count-- > 0) + { + digit = value AND 0x0001; + digit += (N_word) '0'; + *(--string) = (N_char) digit; length--; + if (count > 0) value >>= 1; + } + } + } + return(string); +} + +ErrCode BitVector_from_Bin(wordptr addr, charptr string) +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + boolean ok = TRUE; + size_t length; + N_word value; + N_word count; + int digit; + + if (size > 0) + { + length = strlen((char *) string); + string += length; + while (size-- > 0) + { + value = 0; + for ( count = 0; (ok and (length > 0) and (count < BITS)); count++ ) + { + digit = (int) *(--string); length--; + switch (digit) + { + case (int) '0': + break; + case (int) '1': + value |= BITMASKTAB[count]; + break; + case (int) '_': + count--; + break; + default: + ok = FALSE; + break; + } + } + *addr++ = value; + } + *(--addr) &= mask; + } + if (ok) return(ErrCode_Ok); + else return(ErrCode_Pars); +} + +charptr BitVector_to_Dec(wordptr addr) +{ + N_word bits = bits_(addr); + N_word length; + N_word digits; + N_word count; + N_word q; + N_word r; + boolean loop; + charptr result; + charptr string; + wordptr quot; + wordptr rest; + wordptr temp; + wordptr base; + Z_int sign; + + length = (N_word) (bits / 3.3); /* digits = bits * ln(2) / ln(10) */ + length += 2; /* compensate for truncating & provide space for minus sign */ + result = (charptr) yasm_xmalloc((size_t) (length+1)); /* remember the '\0'! */ + if (result == NULL) return(NULL); + string = result; + sign = BitVector_Sign(addr); + if ((bits < 4) or (sign == 0)) + { + if (bits > 0) digits = *addr; else digits = (N_word) 0; + if (sign < 0) digits = ((N_word)(-((Z_word)digits))) AND mask_(addr); + *string++ = (N_char) digits + (N_char) '0'; + digits = 1; + } + else + { + quot = BitVector_Create(bits,FALSE); + if (quot == NULL) + { + BitVector_Dispose(result); + return(NULL); + } + rest = BitVector_Create(bits,FALSE); + if (rest == NULL) + { + BitVector_Dispose(result); + BitVector_Destroy(quot); + return(NULL); + } + temp = BitVector_Create(bits,FALSE); + if (temp == NULL) + { + BitVector_Dispose(result); + BitVector_Destroy(quot); + BitVector_Destroy(rest); + return(NULL); + } + base = BitVector_Create(bits,TRUE); + if (base == NULL) + { + BitVector_Dispose(result); + BitVector_Destroy(quot); + BitVector_Destroy(rest); + BitVector_Destroy(temp); + return(NULL); + } + if (sign < 0) BitVector_Negate(quot,addr); + else BitVector_Copy(quot,addr); + digits = 0; + *base = EXP10; + loop = (bits >= BITS); + do + { + if (loop) + { + BitVector_Copy(temp,quot); + if (BitVector_Div_Pos(quot,temp,base,rest)) + { + BitVector_Dispose(result); /* emergency exit */ + BitVector_Destroy(quot); + BitVector_Destroy(rest); /* should never occur */ + BitVector_Destroy(temp); /* under normal operation */ + BitVector_Destroy(base); + return(NULL); + } + loop = not BitVector_is_empty(quot); + q = *rest; + } + else q = *quot; + count = LOG10; + while (((loop and (count-- > 0)) or ((not loop) and (q != 0))) and + (digits < length)) + { + if (q != 0) + { + BIT_VECTOR_DIGITIZE(N_word,q,r) + } + else r = (N_word) '0'; + *string++ = (N_char) r; + digits++; + } + } + while (loop and (digits < length)); + BitVector_Destroy(quot); + BitVector_Destroy(rest); + BitVector_Destroy(temp); + BitVector_Destroy(base); + } + if ((sign < 0) and (digits < length)) + { + *string++ = (N_char) '-'; + digits++; + } + *string = (N_char) '\0'; + BIT_VECTOR_reverse(result,digits); + return(result); +} + +struct BitVector_from_Dec_static_data { + wordptr term; + wordptr base; + wordptr prod; + wordptr rank; + wordptr temp; +}; + +BitVector_from_Dec_static_data *BitVector_from_Dec_static_Boot(N_word bits) +{ + BitVector_from_Dec_static_data *data; + + data = yasm_xmalloc(sizeof(BitVector_from_Dec_static_data)); + + if (bits > 0) + { + data->term = BitVector_Create(BITS,FALSE); + data->base = BitVector_Create(BITS,FALSE); + data->prod = BitVector_Create(bits,FALSE); + data->rank = BitVector_Create(bits,FALSE); + data->temp = BitVector_Create(bits,FALSE); + } else { + data->term = NULL; + data->base = NULL; + data->prod = NULL; + data->rank = NULL; + data->temp = NULL; + } + return data; +} + +void BitVector_from_Dec_static_Shutdown(BitVector_from_Dec_static_data *data) +{ + if (data) { + BitVector_Destroy(data->term); + BitVector_Destroy(data->base); + BitVector_Destroy(data->prod); + BitVector_Destroy(data->rank); + BitVector_Destroy(data->temp); + } + yasm_xfree(data); +} + +ErrCode BitVector_from_Dec_static(BitVector_from_Dec_static_data *data, + wordptr addr, charptr string) +{ + ErrCode error = ErrCode_Ok; + N_word bits = bits_(addr); + N_word mask = mask_(addr); + boolean init = (bits > BITS); + boolean minus; + boolean shift; + boolean carry; + wordptr term; + wordptr base; + wordptr prod; + wordptr rank; + wordptr temp; + N_word accu; + N_word powr; + N_word count; + size_t length; + int digit; + + if (bits > 0) + { + term = data->term; + base = data->base; + prod = data->prod; + rank = data->rank; + temp = data->temp; + + length = strlen((char *) string); + if (length == 0) return(ErrCode_Pars); + digit = (int) *string; + if ((minus = (digit == (int) '-')) or + (digit == (int) '+')) + { + string++; + if (--length == 0) return(ErrCode_Pars); + } + string += length; + if (init) + { + BitVector_Empty(prod); + BitVector_Empty(rank); + } + BitVector_Empty(addr); + *base = EXP10; + shift = FALSE; + while ((not error) and (length > 0)) + { + accu = 0; + powr = 1; + count = LOG10; + while ((not error) and (length > 0) and (count-- > 0)) + { + digit = (int) *(--string); length--; + /* separate because isdigit() is likely a macro! */ + if (isdigit(digit) != 0) + { + accu += ((N_word) digit - (N_word) '0') * powr; + powr *= 10; + } + else error = ErrCode_Pars; + } + if (not error) + { + if (shift) + { + *term = accu; + BitVector_Copy(temp,rank); + error = BitVector_Mul_Pos(prod,temp,term,FALSE); + } + else + { + *prod = accu; + if ((not init) and ((accu AND NOT mask) != 0)) error = ErrCode_Ovfl; + } + if (not error) + { + carry = FALSE; + BitVector_compute(addr,addr,prod,FALSE,&carry); + /* ignores sign change (= overflow) but not */ + /* numbers too large (= carry) for resulting bit vector */ + if (carry) error = ErrCode_Ovfl; + else + { + if (length > 0) + { + if (shift) + { + BitVector_Copy(temp,rank); + error = BitVector_Mul_Pos(rank,temp,base,FALSE); + } + else + { + *rank = *base; + shift = TRUE; + } + } + } + } + } + } + if (not error and minus) + { + BitVector_Negate(addr,addr); + if ((*(addr + size_(addr) - 1) AND mask AND NOT (mask >> 1)) == 0) + error = ErrCode_Ovfl; + } + } + return(error); +} + +ErrCode BitVector_from_Dec(wordptr addr, charptr string) +{ + ErrCode error = ErrCode_Ok; + N_word bits = bits_(addr); + N_word mask = mask_(addr); + boolean init = (bits > BITS); + boolean minus; + boolean shift; + boolean carry; + wordptr term; + wordptr base; + wordptr prod; + wordptr rank; + wordptr temp; + N_word accu; + N_word powr; + N_word count; + size_t length; + int digit; + + if (bits > 0) + { + length = strlen((char *) string); + if (length == 0) return(ErrCode_Pars); + digit = (int) *string; + if ((minus = (digit == (int) '-')) or + (digit == (int) '+')) + { + string++; + if (--length == 0) return(ErrCode_Pars); + } + string += length; + term = BitVector_Create(BITS,FALSE); + if (term == NULL) + { + return(ErrCode_Null); + } + base = BitVector_Create(BITS,FALSE); + if (base == NULL) + { + BitVector_Destroy(term); + return(ErrCode_Null); + } + prod = BitVector_Create(bits,init); + if (prod == NULL) + { + BitVector_Destroy(term); + BitVector_Destroy(base); + return(ErrCode_Null); + } + rank = BitVector_Create(bits,init); + if (rank == NULL) + { + BitVector_Destroy(term); + BitVector_Destroy(base); + BitVector_Destroy(prod); + return(ErrCode_Null); + } + temp = BitVector_Create(bits,FALSE); + if (temp == NULL) + { + BitVector_Destroy(term); + BitVector_Destroy(base); + BitVector_Destroy(prod); + BitVector_Destroy(rank); + return(ErrCode_Null); + } + BitVector_Empty(addr); + *base = EXP10; + shift = FALSE; + while ((not error) and (length > 0)) + { + accu = 0; + powr = 1; + count = LOG10; + while ((not error) and (length > 0) and (count-- > 0)) + { + digit = (int) *(--string); length--; + /* separate because isdigit() is likely a macro! */ + if (isdigit(digit) != 0) + { + accu += ((N_word) digit - (N_word) '0') * powr; + powr *= 10; + } + else error = ErrCode_Pars; + } + if (not error) + { + if (shift) + { + *term = accu; + BitVector_Copy(temp,rank); + error = BitVector_Mul_Pos(prod,temp,term,FALSE); + } + else + { + *prod = accu; + if ((not init) and ((accu AND NOT mask) != 0)) error = ErrCode_Ovfl; + } + if (not error) + { + carry = FALSE; + BitVector_compute(addr,addr,prod,FALSE,&carry); + /* ignores sign change (= overflow) but not */ + /* numbers too large (= carry) for resulting bit vector */ + if (carry) error = ErrCode_Ovfl; + else + { + if (length > 0) + { + if (shift) + { + BitVector_Copy(temp,rank); + error = BitVector_Mul_Pos(rank,temp,base,FALSE); + } + else + { + *rank = *base; + shift = TRUE; + } + } + } + } + } + } + BitVector_Destroy(term); + BitVector_Destroy(base); + BitVector_Destroy(prod); + BitVector_Destroy(rank); + BitVector_Destroy(temp); + if (not error and minus) + { + BitVector_Negate(addr,addr); + if ((*(addr + size_(addr) - 1) AND mask AND NOT (mask >> 1)) == 0) + error = ErrCode_Ovfl; + } + } + return(error); +} + +charptr BitVector_to_Enum(wordptr addr) +{ + N_word bits = bits_(addr); + N_word sample; + N_word length; + N_word digits; + N_word factor; + N_word power; + N_word start; + N_word min; + N_word max; + charptr string; + charptr target; + boolean comma; + + if (bits > 0) + { + sample = bits - 1; /* greatest possible index */ + length = 2; /* account for index 0 and terminating '\0' */ + digits = 1; /* account for intervening dashes and commas */ + factor = 1; + power = 10; + while (sample >= (power-1)) + { + length += ++digits * factor * 6; /* 9,90,900,9000,... (9*2/3 = 6) */ + factor = power; + power *= 10; + } + if (sample > --factor) + { + sample -= factor; + factor = (N_word) ( sample / 3 ); + factor = (factor << 1) + (sample - (factor * 3)); + length += ++digits * factor; + } + } + else length = 1; + string = (charptr) yasm_xmalloc((size_t) length); + if (string == NULL) return(NULL); + start = 0; + comma = FALSE; + target = string; + while ((start < bits) and BitVector_interval_scan_inc(addr,start,&min,&max)) + { + start = max + 2; + if (comma) *target++ = (N_char) ','; + if (min == max) + { + target += BIT_VECTOR_int2str(target,min); + } + else + { + if (min+1 == max) + { + target += BIT_VECTOR_int2str(target,min); + *target++ = (N_char) ','; + target += BIT_VECTOR_int2str(target,max); + } + else + { + target += BIT_VECTOR_int2str(target,min); + *target++ = (N_char) '-'; + target += BIT_VECTOR_int2str(target,max); + } + } + comma = TRUE; + } + *target = (N_char) '\0'; + return(string); +} + +ErrCode BitVector_from_Enum(wordptr addr, charptr string) +{ + ErrCode error = ErrCode_Ok; + N_word bits = bits_(addr); + N_word state = 1; + N_word token; + N_word indx = 0; /* silence compiler warning */ + N_word start = 0; /* silence compiler warning */ + + if (bits > 0) + { + BitVector_Empty(addr); + while ((not error) and (state != 0)) + { + token = (N_word) *string; + /* separate because isdigit() is likely a macro! */ + if (isdigit((int)token) != 0) + { + string += BIT_VECTOR_str2int(string,&indx); + if (indx < bits) token = (N_word) '0'; + else error = ErrCode_Indx; + } + else string++; + if (not error) + switch (state) + { + case 1: + switch (token) + { + case (N_word) '0': + state = 2; + break; + case (N_word) '\0': + state = 0; + break; + default: + error = ErrCode_Pars; + break; + } + break; + case 2: + switch (token) + { + case (N_word) '-': + start = indx; + state = 3; + break; + case (N_word) ',': + BIT_VECTOR_SET_BIT(addr,indx) + state = 5; + break; + case (N_word) '\0': + BIT_VECTOR_SET_BIT(addr,indx) + state = 0; + break; + default: + error = ErrCode_Pars; + break; + } + break; + case 3: + switch (token) + { + case (N_word) '0': + if (start < indx) + BitVector_Interval_Fill(addr,start,indx); + else if (start == indx) + BIT_VECTOR_SET_BIT(addr,indx) + else error = ErrCode_Ordr; + state = 4; + break; + default: + error = ErrCode_Pars; + break; + } + break; + case 4: + switch (token) + { + case (N_word) ',': + state = 5; + break; + case (N_word) '\0': + state = 0; + break; + default: + error = ErrCode_Pars; + break; + } + break; + case 5: + switch (token) + { + case (N_word) '0': + state = 2; + break; + default: + error = ErrCode_Pars; + break; + } + break; + } + } + } + return(error); +} + +void BitVector_Bit_Off(wordptr addr, N_int indx) /* X = X \ {x} */ +{ + if (indx < bits_(addr)) BIT_VECTOR_CLR_BIT(addr,indx) +} + +void BitVector_Bit_On(wordptr addr, N_int indx) /* X = X + {x} */ +{ + if (indx < bits_(addr)) BIT_VECTOR_SET_BIT(addr,indx) +} + +boolean BitVector_bit_flip(wordptr addr, N_int indx) /* X=(X+{x})\(X*{x}) */ +{ + N_word mask; + + if (indx < bits_(addr)) return( BIT_VECTOR_FLP_BIT(addr,indx,mask) ); + else return( FALSE ); +} + +boolean BitVector_bit_test(wordptr addr, N_int indx) /* {x} in X ? */ +{ + if (indx < bits_(addr)) return( BIT_VECTOR_TST_BIT(addr,indx) ); + else return( FALSE ); +} + +void BitVector_Bit_Copy(wordptr addr, N_int indx, boolean bit) +{ + if (indx < bits_(addr)) + { + if (bit) BIT_VECTOR_SET_BIT(addr,indx) + else BIT_VECTOR_CLR_BIT(addr,indx) + } +} + +void BitVector_LSB(wordptr addr, boolean bit) +{ + if (bits_(addr) > 0) + { + if (bit) *addr |= LSB; + else *addr &= NOT LSB; + } +} + +void BitVector_MSB(wordptr addr, boolean bit) +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + + if (size-- > 0) + { + if (bit) *(addr+size) |= mask AND NOT (mask >> 1); + else *(addr+size) &= NOT mask OR (mask >> 1); + } +} + +boolean BitVector_lsb_(wordptr addr) +{ + if (size_(addr) > 0) return( (*addr AND LSB) != 0 ); + else return( FALSE ); +} + +boolean BitVector_msb_(wordptr addr) +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + + if (size-- > 0) + return( (*(addr+size) AND (mask AND NOT (mask >> 1))) != 0 ); + else + return( FALSE ); +} + +boolean BitVector_rotate_left(wordptr addr) +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + N_word msb; + boolean carry_in; + boolean carry_out = FALSE; + + if (size > 0) + { + msb = mask AND NOT (mask >> 1); + carry_in = ((*(addr+size-1) AND msb) != 0); + while (size-- > 1) + { + carry_out = ((*addr AND MSB) != 0); + *addr <<= 1; + if (carry_in) *addr |= LSB; + carry_in = carry_out; + addr++; + } + carry_out = ((*addr AND msb) != 0); + *addr <<= 1; + if (carry_in) *addr |= LSB; + *addr &= mask; + } + return(carry_out); +} + +boolean BitVector_rotate_right(wordptr addr) +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + N_word msb; + boolean carry_in; + boolean carry_out = FALSE; + + if (size > 0) + { + msb = mask AND NOT (mask >> 1); + carry_in = ((*addr AND LSB) != 0); + addr += size-1; + *addr &= mask; + carry_out = ((*addr AND LSB) != 0); + *addr >>= 1; + if (carry_in) *addr |= msb; + carry_in = carry_out; + addr--; + size--; + while (size-- > 0) + { + carry_out = ((*addr AND LSB) != 0); + *addr >>= 1; + if (carry_in) *addr |= MSB; + carry_in = carry_out; + addr--; + } + } + return(carry_out); +} + +boolean BitVector_shift_left(wordptr addr, boolean carry_in) +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + N_word msb; + boolean carry_out = carry_in; + + if (size > 0) + { + msb = mask AND NOT (mask >> 1); + while (size-- > 1) + { + carry_out = ((*addr AND MSB) != 0); + *addr <<= 1; + if (carry_in) *addr |= LSB; + carry_in = carry_out; + addr++; + } + carry_out = ((*addr AND msb) != 0); + *addr <<= 1; + if (carry_in) *addr |= LSB; + *addr &= mask; + } + return(carry_out); +} + +boolean BitVector_shift_right(wordptr addr, boolean carry_in) +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + N_word msb; + boolean carry_out = carry_in; + + if (size > 0) + { + msb = mask AND NOT (mask >> 1); + addr += size-1; + *addr &= mask; + carry_out = ((*addr AND LSB) != 0); + *addr >>= 1; + if (carry_in) *addr |= msb; + carry_in = carry_out; + addr--; + size--; + while (size-- > 0) + { + carry_out = ((*addr AND LSB) != 0); + *addr >>= 1; + if (carry_in) *addr |= MSB; + carry_in = carry_out; + addr--; + } + } + return(carry_out); +} + +void BitVector_Move_Left(wordptr addr, N_int bits) +{ + N_word count; + N_word words; + + if (bits > 0) + { + count = bits AND MODMASK; + words = bits >> LOGBITS; + if (bits >= bits_(addr)) BitVector_Empty(addr); + else + { + while (count-- > 0) BitVector_shift_left(addr,0); + BitVector_Word_Insert(addr,0,words,TRUE); + } + } +} + +void BitVector_Move_Right(wordptr addr, N_int bits) +{ + N_word count; + N_word words; + + if (bits > 0) + { + count = bits AND MODMASK; + words = bits >> LOGBITS; + if (bits >= bits_(addr)) BitVector_Empty(addr); + else + { + while (count-- > 0) BitVector_shift_right(addr,0); + BitVector_Word_Delete(addr,0,words,TRUE); + } + } +} + +void BitVector_Insert(wordptr addr, N_int offset, N_int count, boolean clear) +{ + N_word bits = bits_(addr); + N_word last; + + if ((count > 0) and (offset < bits)) + { + last = offset + count; + if (last < bits) + { + BitVector_Interval_Copy(addr,addr,last,offset,(bits-last)); + } + else last = bits; + if (clear) BitVector_Interval_Empty(addr,offset,(last-1)); + } +} + +void BitVector_Delete(wordptr addr, N_int offset, N_int count, boolean clear) +{ + N_word bits = bits_(addr); + N_word last; + + if ((count > 0) and (offset < bits)) + { + last = offset + count; + if (last < bits) + { + BitVector_Interval_Copy(addr,addr,offset,last,(bits-last)); + } + else count = bits - offset; + if (clear) BitVector_Interval_Empty(addr,(bits-count),(bits-1)); + } +} + +boolean BitVector_increment(wordptr addr) /* X++ */ +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + wordptr last = addr + size - 1; + boolean carry = TRUE; + + if (size > 0) + { + *last |= NOT mask; + while (carry and (size-- > 0)) + { + carry = (++(*addr++) == 0); + } + *last &= mask; + } + return(carry); +} + +boolean BitVector_decrement(wordptr addr) /* X-- */ +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + wordptr last = addr + size - 1; + boolean carry = TRUE; + + if (size > 0) + { + *last &= mask; + while (carry and (size-- > 0)) + { + carry = (*addr == 0); + --(*addr++); + } + *last &= mask; + } + return(carry); +} + +boolean BitVector_compute(wordptr X, wordptr Y, wordptr Z, boolean minus, boolean *carry) +{ + N_word size = size_(X); + N_word mask = mask_(X); + N_word vv = 0; + N_word cc; + N_word mm; + N_word yy; + N_word zz; + N_word lo; + N_word hi; + + if (size > 0) + { + if (minus) cc = (*carry == 0); + else cc = (*carry != 0); + /* deal with (size-1) least significant full words first: */ + while (--size > 0) + { + yy = *Y++; + if (minus) zz = (N_word) NOT ( Z ? *Z++ : 0 ); + else zz = (N_word) ( Z ? *Z++ : 0 ); + lo = (yy AND LSB) + (zz AND LSB) + cc; + hi = (yy >> 1) + (zz >> 1) + (lo >> 1); + cc = ((hi AND MSB) != 0); + *X++ = (hi << 1) OR (lo AND LSB); + } + /* deal with most significant word (may be used only partially): */ + yy = *Y AND mask; + if (minus) zz = (N_word) NOT ( Z ? *Z : 0 ); + else zz = (N_word) ( Z ? *Z : 0 ); + zz &= mask; + if (mask == LSB) /* special case, only one bit used */ + { + vv = cc; + lo = yy + zz + cc; + cc = (lo >> 1); + vv ^= cc; + *X = lo AND LSB; + } + else + { + if (NOT mask) /* not all bits are used, but more than one */ + { + mm = (mask >> 1); + vv = (yy AND mm) + (zz AND mm) + cc; + mm = mask AND NOT mm; + lo = yy + zz + cc; + cc = (lo >> 1); + vv ^= cc; + vv &= mm; + cc &= mm; + *X = lo AND mask; + } + else /* other special case, all bits are used */ + { + mm = NOT MSB; + lo = (yy AND mm) + (zz AND mm) + cc; + vv = lo AND MSB; + hi = ((yy AND MSB) >> 1) + ((zz AND MSB) >> 1) + (vv >> 1); + cc = hi AND MSB; + vv ^= cc; + *X = (hi << 1) OR (lo AND mm); + } + } + if (minus) *carry = (cc == 0); + else *carry = (cc != 0); + } + return(vv != 0); +} + +boolean BitVector_add(wordptr X, wordptr Y, wordptr Z, boolean *carry) +{ + return(BitVector_compute(X,Y,Z,FALSE,carry)); +} + +boolean BitVector_sub(wordptr X, wordptr Y, wordptr Z, boolean *carry) +{ + return(BitVector_compute(X,Y,Z,TRUE,carry)); +} + +boolean BitVector_inc(wordptr X, wordptr Y) +{ + boolean carry = TRUE; + + return(BitVector_compute(X,Y,NULL,FALSE,&carry)); +} + +boolean BitVector_dec(wordptr X, wordptr Y) +{ + boolean carry = TRUE; + + return(BitVector_compute(X,Y,NULL,TRUE,&carry)); +} + +void BitVector_Negate(wordptr X, wordptr Y) +{ + N_word size = size_(X); + N_word mask = mask_(X); + boolean carry = TRUE; + + if (size > 0) + { + while (size-- > 0) + { + *X = NOT *Y++; + if (carry) + { + carry = (++(*X) == 0); + } + X++; + } + *(--X) &= mask; + } +} + +void BitVector_Absolute(wordptr X, wordptr Y) +{ + N_word size = size_(Y); + N_word mask = mask_(Y); + + if (size > 0) + { + if (*(Y+size-1) AND (mask AND NOT (mask >> 1))) BitVector_Negate(X,Y); + else BitVector_Copy(X,Y); + } +} + +Z_int BitVector_Sign(wordptr addr) +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + wordptr last = addr + size - 1; + boolean r = TRUE; + + if (size > 0) + { + *last &= mask; + while (r and (size-- > 0)) r = ( *addr++ == 0 ); + } + if (r) return((Z_int) 0); + else + { + if (*last AND (mask AND NOT (mask >> 1))) return((Z_int) -1); + else return((Z_int) 1); + } +} + +ErrCode BitVector_Mul_Pos(wordptr X, wordptr Y, wordptr Z, boolean strict) +{ + N_word mask; + N_word limit; + N_word count; + Z_long last; + wordptr sign; + boolean carry; + boolean overflow; + boolean ok = TRUE; + + /* + Requirements: + - X, Y and Z must be distinct + - X and Y must have equal sizes (whereas Z may be any size!) + - Z should always contain the SMALLER of the two factors Y and Z + Constraints: + - The contents of Y (and of X, of course) are destroyed + (only Z is preserved!) + */ + + if ((X == Y) or (X == Z) or (Y == Z)) return(ErrCode_Same); + if (bits_(X) != bits_(Y)) return(ErrCode_Size); + BitVector_Empty(X); + if (BitVector_is_empty(Y)) return(ErrCode_Ok); /* exit also taken if bits_(Y)==0 */ + if ((last = Set_Max(Z)) < 0L) return(ErrCode_Ok); + limit = (N_word) last; + sign = Y + size_(Y) - 1; + mask = mask_(Y); + *sign &= mask; + mask &= NOT (mask >> 1); + for ( count = 0; (ok and (count <= limit)); count++ ) + { + if ( BIT_VECTOR_TST_BIT(Z,count) ) + { + carry = false; + overflow = BitVector_compute(X,X,Y,false,&carry); + if (strict) ok = not (carry or overflow); + else ok = not carry; + } + if (ok and (count < limit)) + { + carry = BitVector_shift_left(Y,0); + if (strict) + { + overflow = ((*sign AND mask) != 0); + ok = not (carry or overflow); + } + else ok = not carry; + } + } + if (ok) return(ErrCode_Ok); else return(ErrCode_Ovfl); +} + +ErrCode BitVector_Multiply(wordptr X, wordptr Y, wordptr Z) +{ + ErrCode error = ErrCode_Ok; + N_word bit_x = bits_(X); + N_word bit_y = bits_(Y); + N_word bit_z = bits_(Z); + N_word size; + N_word mask; + N_word msb; + wordptr ptr_y; + wordptr ptr_z; + boolean sgn_x; + boolean sgn_y; + boolean sgn_z; + boolean zero; + wordptr A; + wordptr B; + + /* + Requirements: + - Y and Z must have equal sizes + - X must have at least the same size as Y and Z but may be larger (!) + Features: + - The contents of Y and Z are preserved + - X may be identical with Y or Z (or both!) + (in-place multiplication is possible!) + */ + + if ((bit_y != bit_z) or (bit_x < bit_y)) return(ErrCode_Size); + if (BitVector_is_empty(Y) or BitVector_is_empty(Z)) + { + BitVector_Empty(X); + } + else + { + A = BitVector_Create(bit_y,FALSE); + if (A == NULL) return(ErrCode_Null); + B = BitVector_Create(bit_z,FALSE); + if (B == NULL) { BitVector_Destroy(A); return(ErrCode_Null); } + size = size_(Y); + mask = mask_(Y); + msb = (mask AND NOT (mask >> 1)); + sgn_y = (((*(Y+size-1) &= mask) AND msb) != 0); + sgn_z = (((*(Z+size-1) &= mask) AND msb) != 0); + sgn_x = sgn_y XOR sgn_z; + if (sgn_y) BitVector_Negate(A,Y); else BitVector_Copy(A,Y); + if (sgn_z) BitVector_Negate(B,Z); else BitVector_Copy(B,Z); + ptr_y = A + size; + ptr_z = B + size; + zero = TRUE; + while (zero and (size-- > 0)) + { + zero &= (*(--ptr_y) == 0); + zero &= (*(--ptr_z) == 0); + } + if (*ptr_y > *ptr_z) + { + if (bit_x > bit_y) + { + A = BitVector_Resize(A,bit_x); + if (A == NULL) { BitVector_Destroy(B); return(ErrCode_Null); } + } + error = BitVector_Mul_Pos(X,A,B,TRUE); + } + else + { + if (bit_x > bit_z) + { + B = BitVector_Resize(B,bit_x); + if (B == NULL) { BitVector_Destroy(A); return(ErrCode_Null); } + } + error = BitVector_Mul_Pos(X,B,A,TRUE); + } + if ((not error) and sgn_x) BitVector_Negate(X,X); + BitVector_Destroy(A); + BitVector_Destroy(B); + } + return(error); +} + +ErrCode BitVector_Div_Pos(wordptr Q, wordptr X, wordptr Y, wordptr R) +{ + N_word bits = bits_(Q); + N_word mask; + wordptr addr; + Z_long last; + boolean flag; + boolean copy = FALSE; /* flags whether valid rest is in R (0) or X (1) */ + + /* + Requirements: + - All bit vectors must have equal sizes + - Q, X, Y and R must all be distinct bit vectors + - Y must be non-zero (of course!) + Constraints: + - The contents of X (and Q and R, of course) are destroyed + (only Y is preserved!) + */ + + if ((bits != bits_(X)) or (bits != bits_(Y)) or (bits != bits_(R))) + return(ErrCode_Size); + if ((Q == X) or (Q == Y) or (Q == R) or (X == Y) or (X == R) or (Y == R)) + return(ErrCode_Same); + if (BitVector_is_empty(Y)) + return(ErrCode_Zero); + + BitVector_Empty(R); + BitVector_Copy(Q,X); + if ((last = Set_Max(Q)) < 0L) return(ErrCode_Ok); + bits = (N_word) ++last; + while (bits-- > 0) + { + addr = Q + (bits >> LOGBITS); + mask = BITMASKTAB[bits AND MODMASK]; + flag = ((*addr AND mask) != 0); + if (copy) + { + BitVector_shift_left(X,flag); + flag = FALSE; + BitVector_compute(R,X,Y,TRUE,&flag); + } + else + { + BitVector_shift_left(R,flag); + flag = FALSE; + BitVector_compute(X,R,Y,TRUE,&flag); + } + if (flag) *addr &= NOT mask; + else + { + *addr |= mask; + copy = not copy; + } + } + if (copy) BitVector_Copy(R,X); + return(ErrCode_Ok); +} + +ErrCode BitVector_Divide(wordptr Q, wordptr X, wordptr Y, wordptr R) +{ + ErrCode error = ErrCode_Ok; + N_word bits = bits_(Q); + N_word size = size_(Q); + N_word mask = mask_(Q); + N_word msb = (mask AND NOT (mask >> 1)); + boolean sgn_q; + boolean sgn_x; + boolean sgn_y; + wordptr A; + wordptr B; + + /* + Requirements: + - All bit vectors must have equal sizes + - Q and R must be two distinct bit vectors + - Y must be non-zero (of course!) + Features: + - The contents of X and Y are preserved + - Q may be identical with X or Y (or both) + (in-place division is possible!) + - R may be identical with X or Y (or both) + (but not identical with Q!) + */ + + if ((bits != bits_(X)) or (bits != bits_(Y)) or (bits != bits_(R))) + return(ErrCode_Size); + if (Q == R) + return(ErrCode_Same); + if (BitVector_is_empty(Y)) + return(ErrCode_Zero); + + if (BitVector_is_empty(X)) + { + BitVector_Empty(Q); + BitVector_Empty(R); + } + else + { + A = BitVector_Create(bits,FALSE); + if (A == NULL) return(ErrCode_Null); + B = BitVector_Create(bits,FALSE); + if (B == NULL) { BitVector_Destroy(A); return(ErrCode_Null); } + size--; + sgn_x = (((*(X+size) &= mask) AND msb) != 0); + sgn_y = (((*(Y+size) &= mask) AND msb) != 0); + sgn_q = sgn_x XOR sgn_y; + if (sgn_x) BitVector_Negate(A,X); else BitVector_Copy(A,X); + if (sgn_y) BitVector_Negate(B,Y); else BitVector_Copy(B,Y); + if (not (error = BitVector_Div_Pos(Q,A,B,R))) + { + if (sgn_q) BitVector_Negate(Q,Q); + if (sgn_x) BitVector_Negate(R,R); + } + BitVector_Destroy(A); + BitVector_Destroy(B); + } + return(error); +} + +ErrCode BitVector_GCD(wordptr X, wordptr Y, wordptr Z) +{ + ErrCode error = ErrCode_Ok; + N_word bits = bits_(X); + N_word size = size_(X); + N_word mask = mask_(X); + N_word msb = (mask AND NOT (mask >> 1)); + boolean sgn_a; + boolean sgn_b; + boolean sgn_r; + wordptr Q; + wordptr R; + wordptr A; + wordptr B; + wordptr T; + + /* + Requirements: + - All bit vectors must have equal sizes + Features: + - The contents of Y and Z are preserved + - X may be identical with Y or Z (or both) + (in-place is possible!) + - GCD(0,z) == GCD(z,0) == z + - negative values are handled correctly + */ + + if ((bits != bits_(Y)) or (bits != bits_(Z))) return(ErrCode_Size); + if (BitVector_is_empty(Y)) + { + if (X != Z) BitVector_Copy(X,Z); + return(ErrCode_Ok); + } + if (BitVector_is_empty(Z)) + { + if (X != Y) BitVector_Copy(X,Y); + return(ErrCode_Ok); + } + Q = BitVector_Create(bits,false); + if (Q == NULL) + { + return(ErrCode_Null); + } + R = BitVector_Create(bits,FALSE); + if (R == NULL) + { + BitVector_Destroy(Q); + return(ErrCode_Null); + } + A = BitVector_Create(bits,FALSE); + if (A == NULL) + { + BitVector_Destroy(Q); + BitVector_Destroy(R); + return(ErrCode_Null); + } + B = BitVector_Create(bits,FALSE); + if (B == NULL) + { + BitVector_Destroy(Q); + BitVector_Destroy(R); + BitVector_Destroy(A); + return(ErrCode_Null); + } + size--; + sgn_a = (((*(Y+size) &= mask) AND msb) != 0); + sgn_b = (((*(Z+size) &= mask) AND msb) != 0); + if (sgn_a) BitVector_Negate(A,Y); else BitVector_Copy(A,Y); + if (sgn_b) BitVector_Negate(B,Z); else BitVector_Copy(B,Z); + while (not error) + { + if (not (error = BitVector_Div_Pos(Q,A,B,R))) + { + if (BitVector_is_empty(R)) break; + T = A; sgn_r = sgn_a; + A = B; sgn_a = sgn_b; + B = R; sgn_b = sgn_r; + R = T; + } + } + if (not error) + { + if (sgn_b) BitVector_Negate(X,B); else BitVector_Copy(X,B); + } + BitVector_Destroy(Q); + BitVector_Destroy(R); + BitVector_Destroy(A); + BitVector_Destroy(B); + return(error); +} + +ErrCode BitVector_GCD2(wordptr U, wordptr V, wordptr W, wordptr X, wordptr Y) +{ + ErrCode error = ErrCode_Ok; + N_word bits = bits_(U); + N_word size = size_(U); + N_word mask = mask_(U); + N_word msb = (mask AND NOT (mask >> 1)); + boolean minus; + boolean carry; + boolean sgn_q; + boolean sgn_r; + boolean sgn_a; + boolean sgn_b; + boolean sgn_x; + boolean sgn_y; + listptr L; + wordptr Q; + wordptr R; + wordptr A; + wordptr B; + wordptr T; + wordptr X1; + wordptr X2; + wordptr X3; + wordptr Y1; + wordptr Y2; + wordptr Y3; + wordptr Z; + + /* + Requirements: + - All bit vectors must have equal sizes + - U, V, and W must all be distinct bit vectors + Features: + - The contents of X and Y are preserved + - U, V and W may be identical with X or Y (or both, + provided that U, V and W are mutually distinct) + (i.e., in-place is possible!) + - GCD(0,z) == GCD(z,0) == z + - negative values are handled correctly + */ + + if ((bits != bits_(V)) or + (bits != bits_(W)) or + (bits != bits_(X)) or + (bits != bits_(Y))) + { + return(ErrCode_Size); + } + if ((U == V) or (U == W) or (V == W)) + { + return(ErrCode_Same); + } + if (BitVector_is_empty(X)) + { + if (U != Y) BitVector_Copy(U,Y); + BitVector_Empty(V); + BitVector_Empty(W); + *W = 1; + return(ErrCode_Ok); + } + if (BitVector_is_empty(Y)) + { + if (U != X) BitVector_Copy(U,X); + BitVector_Empty(V); + BitVector_Empty(W); + *V = 1; + return(ErrCode_Ok); + } + if ((L = BitVector_Create_List(bits,false,11)) == NULL) + { + return(ErrCode_Null); + } + Q = L[0]; + R = L[1]; + A = L[2]; + B = L[3]; + X1 = L[4]; + X2 = L[5]; + X3 = L[6]; + Y1 = L[7]; + Y2 = L[8]; + Y3 = L[9]; + Z = L[10]; + size--; + sgn_a = (((*(X+size) &= mask) AND msb) != 0); + sgn_b = (((*(Y+size) &= mask) AND msb) != 0); + if (sgn_a) BitVector_Negate(A,X); else BitVector_Copy(A,X); + if (sgn_b) BitVector_Negate(B,Y); else BitVector_Copy(B,Y); + BitVector_Empty(X1); + BitVector_Empty(X2); + *X1 = 1; + BitVector_Empty(Y1); + BitVector_Empty(Y2); + *Y2 = 1; + sgn_x = false; + sgn_y = false; + while (not error) + { + if ((error = BitVector_Div_Pos(Q,A,B,R))) + { + break; + } + if (BitVector_is_empty(R)) + { + break; + } + sgn_q = sgn_a XOR sgn_b; + + if (sgn_x) BitVector_Negate(Z,X2); else BitVector_Copy(Z,X2); + if ((error = BitVector_Mul_Pos(X3,Z,Q,true))) + { + break; + } + minus = not (sgn_x XOR sgn_q); + carry = 0; + if (BitVector_compute(X3,X1,X3,minus,&carry)) + { + error = ErrCode_Ovfl; + break; + } + sgn_x = (((*(X3+size) &= mask) AND msb) != 0); + + if (sgn_y) BitVector_Negate(Z,Y2); else BitVector_Copy(Z,Y2); + if ((error = BitVector_Mul_Pos(Y3,Z,Q,true))) + { + break; + } + minus = not (sgn_y XOR sgn_q); + carry = 0; + if (BitVector_compute(Y3,Y1,Y3,minus,&carry)) + { + error = ErrCode_Ovfl; + break; + } + sgn_y = (((*(Y3+size) &= mask) AND msb) != 0); + + T = A; sgn_r = sgn_a; + A = B; sgn_a = sgn_b; + B = R; sgn_b = sgn_r; + R = T; + + T = X1; + X1 = X2; + X2 = X3; + X3 = T; + + T = Y1; + Y1 = Y2; + Y2 = Y3; + Y3 = T; + } + if (not error) + { + if (sgn_b) BitVector_Negate(U,B); else BitVector_Copy(U,B); + BitVector_Copy(V,X2); + BitVector_Copy(W,Y2); + } + BitVector_Destroy_List(L,11); + return(error); +} + +ErrCode BitVector_Power(wordptr X, wordptr Y, wordptr Z) +{ + ErrCode error = ErrCode_Ok; + N_word bits = bits_(X); + boolean first = TRUE; + Z_long last; + N_word limit; + N_word count; + wordptr T; + + /* + Requirements: + - X must have at least the same size as Y but may be larger (!) + - X may not be identical with Z + - Z must be positive + Features: + - The contents of Y and Z are preserved + */ + + if (X == Z) return(ErrCode_Same); + if (bits < bits_(Y)) return(ErrCode_Size); + if (BitVector_msb_(Z)) return(ErrCode_Expo); + if ((last = Set_Max(Z)) < 0L) + { + if (bits < 2) return(ErrCode_Ovfl); + BitVector_Empty(X); + *X |= LSB; + return(ErrCode_Ok); /* anything ^ 0 == 1 */ + } + if (BitVector_is_empty(Y)) + { + if (X != Y) BitVector_Empty(X); + return(ErrCode_Ok); /* 0 ^ anything not zero == 0 */ + } + T = BitVector_Create(bits,FALSE); + if (T == NULL) return(ErrCode_Null); + limit = (N_word) last; + for ( count = 0; ((!error) and (count <= limit)); count++ ) + { + if ( BIT_VECTOR_TST_BIT(Z,count) ) + { + if (first) + { + first = FALSE; + if (count) { BitVector_Copy(X,T); } + else { if (X != Y) BitVector_Copy(X,Y); } + } + else error = BitVector_Multiply(X,T,X); /* order important because T > X */ + } + if ((!error) and (count < limit)) + { + if (count) error = BitVector_Multiply(T,T,T); + else error = BitVector_Multiply(T,Y,Y); + } + } + BitVector_Destroy(T); + return(error); +} + +void BitVector_Block_Store(wordptr addr, charptr buffer, N_int length) +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + N_word value; + N_word count; + + /* provide translation for independence of endian-ness: */ + if (size > 0) + { + while (size-- > 0) + { + value = 0; + for ( count = 0; (length > 0) and (count < BITS); count += 8 ) + { + value |= (((N_word) *buffer++) << count); length--; + } + *addr++ = value; + } + *(--addr) &= mask; + } +} + +charptr BitVector_Block_Read(wordptr addr, N_intptr length) +{ + N_word size = size_(addr); + N_word value; + N_word count; + charptr buffer; + charptr target; + + /* provide translation for independence of endian-ness: */ + *length = size << FACTOR; + buffer = (charptr) yasm_xmalloc((size_t) ((*length)+1)); + if (buffer == NULL) return(NULL); + target = buffer; + if (size > 0) + { + *(addr+size-1) &= mask_(addr); + while (size-- > 0) + { + value = *addr++; + count = BITS >> 3; + while (count-- > 0) + { + *target++ = (N_char) (value AND 0x00FF); + if (count > 0) value >>= 8; + } + } + } + *target = (N_char) '\0'; + return(buffer); +} + +void BitVector_Word_Store(wordptr addr, N_int offset, N_int value) +{ + N_word size = size_(addr); + + if (size > 0) + { + if (offset < size) *(addr+offset) = value; + *(addr+size-1) &= mask_(addr); + } +} + +N_int BitVector_Word_Read(wordptr addr, N_int offset) +{ + N_word size = size_(addr); + + if (size > 0) + { + *(addr+size-1) &= mask_(addr); + if (offset < size) return( *(addr+offset) ); + } + return( (N_int) 0 ); +} + +void BitVector_Word_Insert(wordptr addr, N_int offset, N_int count, + boolean clear) +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + wordptr last = addr+size-1; + + if (size > 0) + { + *last &= mask; + if (offset > size) offset = size; + BIT_VECTOR_ins_words(addr+offset,size-offset,count,clear); + *last &= mask; + } +} + +void BitVector_Word_Delete(wordptr addr, N_int offset, N_int count, + boolean clear) +{ + N_word size = size_(addr); + N_word mask = mask_(addr); + wordptr last = addr+size-1; + + if (size > 0) + { + *last &= mask; + if (offset > size) offset = size; + BIT_VECTOR_del_words(addr+offset,size-offset,count,clear); + *last &= mask; + } +} + +void BitVector_Chunk_Store(wordptr addr, N_int chunksize, N_int offset, + N_long value) +{ + N_word bits = bits_(addr); + N_word mask; + N_word temp; + + if ((chunksize > 0) and (offset < bits)) + { + if (chunksize > LONGBITS) chunksize = LONGBITS; + if ((offset + chunksize) > bits) chunksize = bits - offset; + addr += offset >> LOGBITS; + offset &= MODMASK; + while (chunksize > 0) + { + mask = (N_word) (~0L << offset); + bits = offset + chunksize; + if (bits < BITS) + { + mask &= (N_word) ~(~0L << bits); + bits = chunksize; + } + else bits = BITS - offset; + temp = (N_word) (value << offset); + temp &= mask; + *addr &= NOT mask; + *addr++ |= temp; + value >>= bits; + chunksize -= bits; + offset = 0; + } + } +} + +N_long BitVector_Chunk_Read(wordptr addr, N_int chunksize, N_int offset) +{ + N_word bits = bits_(addr); + N_word chunkbits = 0; + N_long value = 0L; + N_long temp; + N_word mask; + + if ((chunksize > 0) and (offset < bits)) + { + if (chunksize > LONGBITS) chunksize = LONGBITS; + if ((offset + chunksize) > bits) chunksize = bits - offset; + addr += offset >> LOGBITS; + offset &= MODMASK; + while (chunksize > 0) + { + bits = offset + chunksize; + if (bits < BITS) + { + mask = (N_word) ~(~0L << bits); + bits = chunksize; + } + else + { + mask = (N_word) ~0L; + bits = BITS - offset; + } + temp = (N_long) ((*addr++ AND mask) >> offset); + value |= temp << chunkbits; + chunkbits += bits; + chunksize -= bits; + offset = 0; + } + } + return(value); +} + + /*******************/ + /* set operations: */ + /*******************/ + +void Set_Union(wordptr X, wordptr Y, wordptr Z) /* X = Y + Z */ +{ + N_word bits = bits_(X); + N_word size = size_(X); + N_word mask = mask_(X); + + if ((size > 0) and (bits == bits_(Y)) and (bits == bits_(Z))) + { + while (size-- > 0) *X++ = *Y++ OR *Z++; + *(--X) &= mask; + } +} + +void Set_Intersection(wordptr X, wordptr Y, wordptr Z) /* X = Y * Z */ +{ + N_word bits = bits_(X); + N_word size = size_(X); + N_word mask = mask_(X); + + if ((size > 0) and (bits == bits_(Y)) and (bits == bits_(Z))) + { + while (size-- > 0) *X++ = *Y++ AND *Z++; + *(--X) &= mask; + } +} + +void Set_Difference(wordptr X, wordptr Y, wordptr Z) /* X = Y \ Z */ +{ + N_word bits = bits_(X); + N_word size = size_(X); + N_word mask = mask_(X); + + if ((size > 0) and (bits == bits_(Y)) and (bits == bits_(Z))) + { + while (size-- > 0) *X++ = *Y++ AND NOT *Z++; + *(--X) &= mask; + } +} + +void Set_ExclusiveOr(wordptr X, wordptr Y, wordptr Z) /* X=(Y+Z)\(Y*Z) */ +{ + N_word bits = bits_(X); + N_word size = size_(X); + N_word mask = mask_(X); + + if ((size > 0) and (bits == bits_(Y)) and (bits == bits_(Z))) + { + while (size-- > 0) *X++ = *Y++ XOR *Z++; + *(--X) &= mask; + } +} + +void Set_Complement(wordptr X, wordptr Y) /* X = ~Y */ +{ + N_word size = size_(X); + N_word mask = mask_(X); + + if ((size > 0) and (bits_(X) == bits_(Y))) + { + while (size-- > 0) *X++ = NOT *Y++; + *(--X) &= mask; + } +} + + /******************/ + /* set functions: */ + /******************/ + +boolean Set_subset(wordptr X, wordptr Y) /* X subset Y ? */ +{ + N_word size = size_(X); + boolean r = FALSE; + + if ((size > 0) and (bits_(X) == bits_(Y))) + { + r = TRUE; + while (r and (size-- > 0)) r = ((*X++ AND NOT *Y++) == 0); + } + return(r); +} + +N_int Set_Norm(wordptr addr) /* = | X | */ +{ + byteptr byte; + N_word bytes; + N_int n; + + byte = (byteptr) addr; + bytes = size_(addr) << FACTOR; + n = 0; + while (bytes-- > 0) + { + n += BitVector_BYTENORM[*byte++]; + } + return(n); +} + +N_int Set_Norm2(wordptr addr) /* = | X | */ +{ + N_word size = size_(addr); + N_word w0,w1; + N_int n,k; + + n = 0; + while (size-- > 0) + { + k = 0; + w1 = NOT (w0 = *addr++); + while (w0 and w1) + { + w0 &= w0 - 1; + w1 &= w1 - 1; + k++; + } + if (w0 == 0) n += k; + else n += BITS - k; + } + return(n); +} + +N_int Set_Norm3(wordptr addr) /* = | X | */ +{ + N_word size = size_(addr); + N_int count = 0; + N_word c; + + while (size-- > 0) + { + c = *addr++; + while (c) + { + c &= c - 1; + count++; + } + } + return(count); +} + +Z_long Set_Min(wordptr addr) /* = min(X) */ +{ + boolean empty = TRUE; + N_word size = size_(addr); + N_word i = 0; + N_word c = 0; /* silence compiler warning */ + + while (empty and (size-- > 0)) + { + if ((c = *addr++)) empty = false; else i++; + } + if (empty) return((Z_long) LONG_MAX); /* plus infinity */ + i <<= LOGBITS; + while (not (c AND LSB)) + { + c >>= 1; + i++; + } + return((Z_long) i); +} + +Z_long Set_Max(wordptr addr) /* = max(X) */ +{ + boolean empty = TRUE; + N_word size = size_(addr); + N_word i = size; + N_word c = 0; /* silence compiler warning */ + + addr += size-1; + while (empty and (size-- > 0)) + { + if ((c = *addr--)) empty = false; else i--; + } + if (empty) return((Z_long) LONG_MIN); /* minus infinity */ + i <<= LOGBITS; + while (not (c AND MSB)) + { + c <<= 1; + i--; + } + return((Z_long) --i); +} + + /**********************************/ + /* matrix-of-booleans operations: */ + /**********************************/ + +void Matrix_Multiplication(wordptr X, N_int rowsX, N_int colsX, + wordptr Y, N_int rowsY, N_int colsY, + wordptr Z, N_int rowsZ, N_int colsZ) +{ + N_word i; + N_word j; + N_word k; + N_word indxX; + N_word indxY; + N_word indxZ; + N_word termX; + N_word termY; + N_word sum; + + if ((colsY == rowsZ) and (rowsX == rowsY) and (colsX == colsZ) and + (bits_(X) == rowsX*colsX) and + (bits_(Y) == rowsY*colsY) and + (bits_(Z) == rowsZ*colsZ)) + { + for ( i = 0; i < rowsY; i++ ) + { + termX = i * colsX; + termY = i * colsY; + for ( j = 0; j < colsZ; j++ ) + { + indxX = termX + j; + sum = 0; + for ( k = 0; k < colsY; k++ ) + { + indxY = termY + k; + indxZ = k * colsZ + j; + if ( BIT_VECTOR_TST_BIT(Y,indxY) && + BIT_VECTOR_TST_BIT(Z,indxZ) ) sum ^= 1; + } + if (sum) BIT_VECTOR_SET_BIT(X,indxX) + else BIT_VECTOR_CLR_BIT(X,indxX) + } + } + } +} + +void Matrix_Product(wordptr X, N_int rowsX, N_int colsX, + wordptr Y, N_int rowsY, N_int colsY, + wordptr Z, N_int rowsZ, N_int colsZ) +{ + N_word i; + N_word j; + N_word k; + N_word indxX; + N_word indxY; + N_word indxZ; + N_word termX; + N_word termY; + N_word sum; + + if ((colsY == rowsZ) and (rowsX == rowsY) and (colsX == colsZ) and + (bits_(X) == rowsX*colsX) and + (bits_(Y) == rowsY*colsY) and + (bits_(Z) == rowsZ*colsZ)) + { + for ( i = 0; i < rowsY; i++ ) + { + termX = i * colsX; + termY = i * colsY; + for ( j = 0; j < colsZ; j++ ) + { + indxX = termX + j; + sum = 0; + for ( k = 0; k < colsY; k++ ) + { + indxY = termY + k; + indxZ = k * colsZ + j; + if ( BIT_VECTOR_TST_BIT(Y,indxY) && + BIT_VECTOR_TST_BIT(Z,indxZ) ) sum |= 1; + } + if (sum) BIT_VECTOR_SET_BIT(X,indxX) + else BIT_VECTOR_CLR_BIT(X,indxX) + } + } + } +} + +void Matrix_Closure(wordptr addr, N_int rows, N_int cols) +{ + N_word i; + N_word j; + N_word k; + N_word ii; + N_word ij; + N_word ik; + N_word kj; + N_word termi; + N_word termk; + + if ((rows == cols) and (bits_(addr) == rows*cols)) + { + for ( i = 0; i < rows; i++ ) + { + ii = i * cols + i; + BIT_VECTOR_SET_BIT(addr,ii) + } + for ( k = 0; k < rows; k++ ) + { + termk = k * cols; + for ( i = 0; i < rows; i++ ) + { + termi = i * cols; + ik = termi + k; + for ( j = 0; j < rows; j++ ) + { + ij = termi + j; + kj = termk + j; + if ( BIT_VECTOR_TST_BIT(addr,ik) && + BIT_VECTOR_TST_BIT(addr,kj) ) + BIT_VECTOR_SET_BIT(addr,ij) + } + } + } + } +} + +void Matrix_Transpose(wordptr X, N_int rowsX, N_int colsX, + wordptr Y, N_int rowsY, N_int colsY) +{ + N_word i; + N_word j; + N_word ii; + N_word ij; + N_word ji; + N_word addii; + N_word addij; + N_word addji; + N_word bitii; + N_word bitij; + N_word bitji; + N_word termi; + N_word termj; + boolean swap; + + /* BEWARE that "in-place" is ONLY possible if the matrix is quadratic!! */ + + if ((rowsX == colsY) and (colsX == rowsY) and + (bits_(X) == rowsX*colsX) and + (bits_(Y) == rowsY*colsY)) + { + if (rowsY == colsY) /* in-place is possible! */ + { + for ( i = 0; i < rowsY; i++ ) + { + termi = i * colsY; + for ( j = 0; j < i; j++ ) + { + termj = j * colsX; + ij = termi + j; + ji = termj + i; + addij = ij >> LOGBITS; + addji = ji >> LOGBITS; + bitij = BITMASKTAB[ij AND MODMASK]; + bitji = BITMASKTAB[ji AND MODMASK]; + swap = ((*(Y+addij) AND bitij) != 0); + if ((*(Y+addji) AND bitji) != 0) + *(X+addij) |= bitij; + else + *(X+addij) &= NOT bitij; + if (swap) + *(X+addji) |= bitji; + else + *(X+addji) &= NOT bitji; + } + ii = termi + i; + addii = ii >> LOGBITS; + bitii = BITMASKTAB[ii AND MODMASK]; + if ((*(Y+addii) AND bitii) != 0) + *(X+addii) |= bitii; + else + *(X+addii) &= NOT bitii; + } + } + else /* rowsX != colsX, in-place is NOT possible! */ + { + for ( i = 0; i < rowsY; i++ ) + { + termi = i * colsY; + for ( j = 0; j < colsY; j++ ) + { + termj = j * colsX; + ij = termi + j; + ji = termj + i; + addij = ij >> LOGBITS; + addji = ji >> LOGBITS; + bitij = BITMASKTAB[ij AND MODMASK]; + bitji = BITMASKTAB[ji AND MODMASK]; + if ((*(Y+addij) AND bitij) != 0) + *(X+addji) |= bitji; + else + *(X+addji) &= NOT bitji; + } + } + } + } +} + +/*****************************************************************************/ +/* VERSION: 6.4 */ +/*****************************************************************************/ +/* VERSION HISTORY: */ +/*****************************************************************************/ +/* */ +/* Version 6.4 03.10.04 Added C++ comp. directives. Improved "Norm()". */ +/* Version 6.3 28.09.02 Added "Create_List()" and "GCD2()". */ +/* Version 6.2 15.09.02 Overhauled error handling. Fixed "GCD()". */ +/* Version 6.1 08.10.01 Make VMS linker happy: _lsb,_msb => _lsb_,_msb_ */ +/* Version 6.0 08.10.00 Corrected overflow handling. */ +/* Version 5.8 14.07.00 Added "Power()". Changed "Copy()". */ +/* Version 5.7 19.05.99 Quickened "Div_Pos()". Added "Product()". */ +/* Version 5.6 02.11.98 Leading zeros eliminated in "to_Hex()". */ +/* Version 5.5 21.09.98 Fixed bug of uninitialized "error" in Multiply. */ +/* Version 5.4 07.09.98 Fixed bug of uninitialized "error" in Divide. */ +/* Version 5.3 12.05.98 Improved Norm. Completed history. */ +/* Version 5.2 31.03.98 Improved Norm. */ +/* Version 5.1 09.03.98 No changes. */ +/* Version 5.0 01.03.98 Major additions and rewrite. */ +/* Version 4.2 16.07.97 Added is_empty, is_full. */ +/* Version 4.1 30.06.97 Added word-ins/del, move-left/right, inc/dec. */ +/* Version 4.0 23.04.97 Rewrite. Added bit shift and bool. matrix ops. */ +/* Version 3.2 04.02.97 Added interval methods. */ +/* Version 3.1 21.01.97 Fixed bug on 64 bit machines. */ +/* Version 3.0 12.01.97 Added flip. */ +/* Version 2.0 14.12.96 Efficiency and consistency improvements. */ +/* Version 1.1 08.01.96 Added Resize and ExclusiveOr. */ +/* Version 1.0 14.12.95 First version under UNIX (with Perl module). */ +/* Version 0.9 01.11.93 First version of C library under MS-DOS. */ +/* Version 0.1 ??.??.89 First version in Turbo Pascal under CP/M. */ +/* */ +/*****************************************************************************/ +/* AUTHOR: */ +/*****************************************************************************/ +/* */ +/* Steffen Beyer */ +/* mailto:sb@engelschall.com */ +/* http://www.engelschall.com/u/sb/download/ */ +/* */ +/*****************************************************************************/ +/* COPYRIGHT: */ +/*****************************************************************************/ +/* */ +/* Copyright (c) 1995 - 2004 by Steffen Beyer. */ +/* All rights reserved. */ +/* */ +/*****************************************************************************/ +/* LICENSE: */ +/*****************************************************************************/ +/* This package is free software; you can use, modify and redistribute */ +/* it under the same terms as Perl itself, i.e., under the terms of */ +/* the "Artistic License" or the "GNU General Public License". */ +/* */ +/* The C library at the core of this Perl module can additionally */ +/* be used, modified and redistributed under the terms of the */ +/* "GNU Library General Public License". */ +/* */ +/*****************************************************************************/ +/* ARTISTIC LICENSE: */ +/*****************************************************************************/ +/* + The "Artistic License" + + Preamble + +The intent of this document is to state the conditions under which a +Package may be copied, such that the Copyright Holder maintains some +semblance of artistic control over the development of the package, +while giving the users of the package the right to use and distribute +the Package in a more-or-less customary fashion, plus the right to make +reasonable modifications. + +Definitions: + + "Package" refers to the collection of files distributed by the + Copyright Holder, and derivatives of that collection of files + created through textual modification. + + "Standard Version" refers to such a Package if it has not been + modified, or has been modified in accordance with the wishes + of the Copyright Holder as specified below. + + "Copyright Holder" is whoever is named in the copyright or + copyrights for the package. + + "You" is you, if you're thinking about copying or distributing + this Package. + + "Reasonable copying fee" is whatever you can justify on the + basis of media cost, duplication charges, time of people involved, + and so on. (You will not be required to justify it to the + Copyright Holder, but only to the computing community at large + as a market that must bear the fee.) + + "Freely Available" means that no fee is charged for the item + itself, though there may be fees involved in handling the item. + It also means that recipients of the item may redistribute it + under the same conditions they received it. + +1. You may make and give away verbatim copies of the source form of the +Standard Version of this Package without restriction, provided that you +duplicate all of the original copyright notices and associated disclaimers. + +2. You may apply bug fixes, portability fixes and other modifications +derived from the Public Domain or from the Copyright Holder. A Package +modified in such a way shall still be considered the Standard Version. + +3. You may otherwise modify your copy of this Package in any way, provided +that you insert a prominent notice in each changed file stating how and +when you changed that file, and provided that you do at least ONE of the +following: + + a) place your modifications in the Public Domain or otherwise make them + Freely Available, such as by posting said modifications to Usenet or + an equivalent medium, or placing the modifications on a major archive + site such as uunet.uu.net, or by allowing the Copyright Holder to include + your modifications in the Standard Version of the Package. + + b) use the modified Package only within your corporation or organization. + + c) rename any non-standard executables so the names do not conflict + with standard executables, which must also be provided, and provide + a separate manual page for each non-standard executable that clearly + documents how it differs from the Standard Version. + + d) make other distribution arrangements with the Copyright Holder. + +4. You may distribute the programs of this Package in object code or +executable form, provided that you do at least ONE of the following: + + a) distribute a Standard Version of the executables and library files, + together with instructions (in the manual page or equivalent) on where + to get the Standard Version. + + b) accompany the distribution with the machine-readable source of + the Package with your modifications. + + c) give non-standard executables non-standard names, and clearly + document the differences in manual pages (or equivalent), together + with instructions on where to get the Standard Version. + + d) make other distribution arrangements with the Copyright Holder. + +5. You may charge a reasonable copying fee for any distribution of this +Package. You may charge any fee you choose for support of this +Package. You may not charge a fee for this Package itself. However, +you may distribute this Package in aggregate with other (possibly +commercial) programs as part of a larger (possibly commercial) software +distribution provided that you do not advertise this Package as a +product of your own. You may embed this Package's interpreter within +an executable of yours (by linking); this shall be construed as a mere +form of aggregation, provided that the complete Standard Version of the +interpreter is so embedded. + +6. The scripts and library files supplied as input to or produced as +output from the programs of this Package do not automatically fall +under the copyright of this Package, but belong to whoever generated +them, and may be sold commercially, and may be aggregated with this +Package. If such scripts or library files are aggregated with this +Package via the so-called "undump" or "unexec" methods of producing a +binary executable image, then distribution of such an image shall +neither be construed as a distribution of this Package nor shall it +fall under the restrictions of Paragraphs 3 and 4, provided that you do +not represent such an executable image as a Standard Version of this +Package. + +7. C subroutines (or comparably compiled subroutines in other +languages) supplied by you and linked into this Package in order to +emulate subroutines and variables of the language defined by this +Package shall not be considered part of this Package, but are the +equivalent of input as in Paragraph 6, provided these subroutines do +not change the language in any way that would cause it to fail the +regression tests for the language. + +8. Aggregation of this Package with a commercial distribution is always +permitted provided that the use of this Package is embedded; that is, +when no overt attempt is made to make this Package's interfaces visible +to the end user of the commercial distribution. Such use shall not be +construed as a distribution of this Package. + +9. The name of the Copyright Holder may not be used to endorse or promote +products derived from this software without specific prior written permission. + +10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + The End +*/ +/*****************************************************************************/ +/* GNU GENERAL PUBLIC LICENSE: */ +/*****************************************************************************/ +/* 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 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 General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU 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. */ +/* */ +/*****************************************************************************/ +/* GNU LIBRARY GENERAL PUBLIC LICENSE: */ +/*****************************************************************************/ +/* This library is free software; you can redistribute it and/or */ +/* modify it under the terms of the GNU Library General Public */ +/* License as published by the Free Software Foundation; either */ +/* version 2 of the License, or (at your option) any later version. */ +/* */ +/* This 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 */ +/* Library General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU Library General Public */ +/* License along with this library; if not, write to the */ +/* Free Software Foundation, Inc., */ +/* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/* */ +/* or download a copy from ftp://ftp.gnu.org/pub/gnu/COPYING.LIB-2.0 */ +/* */ +/*****************************************************************************/ diff --git a/third-party/yasm/yasm-1.3.0/libyasm/bitvect.h b/third-party/yasm/yasm-1.3.0/libyasm/bitvect.h new file mode 100644 index 0000000000..3aee3a5319 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/bitvect.h @@ -0,0 +1,666 @@ +#ifndef YASM_BITVECT_H +#define YASM_BITVECT_H +/*****************************************************************************/ +/* MODULE NAME: BitVector.h MODULE TYPE: (adt) */ +/*****************************************************************************/ +/* MODULE IMPORTS: */ +/*****************************************************************************/ + +/* ToolBox.h */ +/*****************************************************************************/ +/* NOTE: The type names that have been chosen here are somewhat weird on */ +/* purpose, in order to avoid name clashes with system header files */ +/* and your own application(s) which might - directly or indirectly - */ +/* include this definitions file. */ +/*****************************************************************************/ +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +typedef unsigned char N_char; +typedef unsigned char N_byte; +typedef unsigned short N_short; +typedef unsigned short N_shortword; +typedef unsigned int N_int; +typedef unsigned int N_word; +typedef unsigned long N_long; +typedef unsigned long N_longword; + +/* Mnemonic 1: The natural numbers, N = { 0, 1, 2, 3, ... } */ +/* Mnemonic 2: Nnnn = u_N_signed, _N_ot signed */ + +typedef signed char Z_char; +typedef signed char Z_byte; +typedef signed short Z_short; +typedef signed short Z_shortword; +typedef signed int Z_int; +typedef signed int Z_word; +typedef signed long Z_long; +typedef signed long Z_longword; + +/* Mnemonic 1: The whole numbers, Z = { 0, -1, 1, -2, 2, -3, 3, ... } */ +/* Mnemonic 2: Zzzz = Ssss_igned */ + +typedef void *voidptr; +typedef N_char *charptr; +typedef N_byte *byteptr; +typedef N_short *shortptr; +typedef N_shortword *shortwordptr; +typedef N_int *intptr; +typedef N_word *wordptr; +typedef N_long *longptr; +typedef N_longword *longwordptr; + +typedef N_char *N_charptr; +typedef N_byte *N_byteptr; +typedef N_short *N_shortptr; +typedef N_shortword *N_shortwordptr; +typedef N_int *N_intptr; +typedef N_word *N_wordptr; +typedef N_long *N_longptr; +typedef N_longword *N_longwordptr; + +typedef Z_char *Z_charptr; +typedef Z_byte *Z_byteptr; +typedef Z_short *Z_shortptr; +typedef Z_shortword *Z_shortwordptr; +typedef Z_int *Z_intptr; +typedef Z_word *Z_wordptr; +typedef Z_long *Z_longptr; +typedef Z_longword *Z_longwordptr; + +#ifndef FALSE +#define FALSE (0!=0) +#endif + +#ifndef TRUE +#define TRUE (0==0) +#endif + +#ifdef __cplusplus + typedef bool boolean; +#else + #ifdef MACOS_TRADITIONAL + #define boolean Boolean + #else + typedef enum boolean { false = FALSE, true = TRUE } boolean; + #endif +#endif + +/*****************************************************************************/ +/* MODULE INTERFACE: */ +/*****************************************************************************/ + +typedef enum ErrCode + { + ErrCode_Ok = 0, /* everything went allright */ + + ErrCode_Type, /* types word and size_t have incompatible sizes */ + ErrCode_Bits, /* bits of word and sizeof(word) are inconsistent */ + ErrCode_Word, /* size of word is less than 16 bits */ + ErrCode_Long, /* size of word is greater than size of long */ + ErrCode_Powr, /* number of bits of word is not a power of two */ + ErrCode_Loga, /* error in calculation of logarithm */ + + ErrCode_Null, /* unable to allocate memory */ + + ErrCode_Indx, /* index out of range */ + ErrCode_Ordr, /* minimum > maximum index */ + ErrCode_Size, /* bit vector size mismatch */ + ErrCode_Pars, /* input string syntax error */ + ErrCode_Ovfl, /* numeric overflow error */ + ErrCode_Same, /* operands must be distinct */ + ErrCode_Expo, /* exponent must be positive */ + ErrCode_Zero /* division by zero error */ + } ErrCode; + +typedef wordptr *listptr; + +/* ===> MISCELLANEOUS BASIC FUNCTIONS: <=== */ + +YASM_LIB_DECL +const char * BitVector_Error (ErrCode error); /* return string for err code */ + +YASM_LIB_DECL +ErrCode BitVector_Boot (void); /* 0 = ok, 1..7 = error */ +YASM_LIB_DECL +void BitVector_Shutdown (void); /* undo Boot */ + +YASM_LIB_DECL +N_word BitVector_Size (N_int bits); /* bit vector size (# of words) */ +YASM_LIB_DECL +N_word BitVector_Mask (N_int bits); /* bit vector mask (unused bits) */ + +/* ===> CLASS METHODS: <=== */ + +YASM_LIB_DECL +const char * BitVector_Version (void); /* returns version string */ + +YASM_LIB_DECL +N_int BitVector_Word_Bits (void); /* return # of bits in machine word */ +YASM_LIB_DECL +N_int BitVector_Long_Bits (void); /* return # of bits in unsigned long */ + +/* ===> CONSTRUCTOR METHODS: <=== */ + +YASM_LIB_DECL +/*@only@*/ wordptr BitVector_Create (N_int bits, boolean clear); /* malloc */ +YASM_LIB_DECL +listptr BitVector_Create_List(N_int bits, boolean clear, N_int count); + +YASM_LIB_DECL +wordptr BitVector_Resize (wordptr oldaddr, N_int bits); /* realloc */ + +YASM_LIB_DECL +wordptr BitVector_Shadow (wordptr addr); /* make new same size but empty */ +YASM_LIB_DECL +wordptr BitVector_Clone (wordptr addr); /* make exact duplicate */ + +YASM_LIB_DECL +wordptr BitVector_Concat (wordptr X, wordptr Y); /* return concatenation */ + +/* ===> DESTRUCTOR METHODS: <=== */ + +YASM_LIB_DECL +void BitVector_Dispose (/*@only@*/ /*@out@*/ charptr string); /* string */ +YASM_LIB_DECL +void BitVector_Destroy (/*@only@*/ wordptr addr); /* bitvec */ +YASM_LIB_DECL +void BitVector_Destroy_List (listptr list, N_int count); /* list */ + +/* ===> OBJECT METHODS: <=== */ + +/* ===> bit vector copy function: */ + +YASM_LIB_DECL +void BitVector_Copy (wordptr X, wordptr Y); /* X = Y */ + +/* ===> bit vector initialization: */ + +YASM_LIB_DECL +void BitVector_Empty (wordptr addr); /* X = {} */ +YASM_LIB_DECL +void BitVector_Fill (wordptr addr); /* X = ~{} */ +YASM_LIB_DECL +void BitVector_Flip (wordptr addr); /* X = ~X */ + +YASM_LIB_DECL +void BitVector_Primes (wordptr addr); + +/* ===> miscellaneous functions: */ + +YASM_LIB_DECL +void BitVector_Reverse (wordptr X, wordptr Y); + +/* ===> bit vector interval operations and functions: */ + +YASM_LIB_DECL +void BitVector_Interval_Empty (/*@out@*/ wordptr addr, N_int lower, N_int upper); +YASM_LIB_DECL +void BitVector_Interval_Fill (/*@out@*/ wordptr addr, N_int lower, N_int upper); +YASM_LIB_DECL +void BitVector_Interval_Flip (/*@out@*/ wordptr addr, N_int lower, N_int upper); +YASM_LIB_DECL +void BitVector_Interval_Reverse (/*@out@*/ wordptr addr, N_int lower, N_int upper); + +YASM_LIB_DECL +boolean BitVector_interval_scan_inc (wordptr addr, N_int start, + N_intptr min, N_intptr max); +YASM_LIB_DECL +boolean BitVector_interval_scan_dec (wordptr addr, N_int start, + N_intptr min, N_intptr max); + +YASM_LIB_DECL +void BitVector_Interval_Copy (/*@out@*/ wordptr X, wordptr Y, N_int Xoffset, + N_int Yoffset, N_int length); + +YASM_LIB_DECL +wordptr BitVector_Interval_Substitute(/*@out@*/ wordptr X, wordptr Y, + N_int Xoffset, N_int Xlength, + N_int Yoffset, N_int Ylength); + +/* ===> bit vector test functions: */ + +YASM_LIB_DECL +boolean BitVector_is_empty (wordptr addr); /* X == {} ? */ +YASM_LIB_DECL +boolean BitVector_is_full (wordptr addr); /* X == ~{} ? */ + +YASM_LIB_DECL +boolean BitVector_equal (wordptr X, wordptr Y); /* X == Y ? */ +YASM_LIB_DECL +Z_int BitVector_Lexicompare(wordptr X, wordptr Y); /* X <,=,> Y ? */ +YASM_LIB_DECL +Z_int BitVector_Compare (wordptr X, wordptr Y); /* X <,=,> Y ? */ + +/* ===> bit vector string conversion functions: */ + +YASM_LIB_DECL +/*@only@*/ charptr BitVector_to_Hex (wordptr addr); +YASM_LIB_DECL +ErrCode BitVector_from_Hex (/*@out@*/wordptr addr, charptr string); + +YASM_LIB_DECL +ErrCode BitVector_from_Oct(/*@out@*/ wordptr addr, charptr string); + +YASM_LIB_DECL +/*@only@*/ charptr BitVector_to_Bin (wordptr addr); +YASM_LIB_DECL +ErrCode BitVector_from_Bin (/*@out@*/ wordptr addr, charptr string); + +YASM_LIB_DECL +/*@only@*/ charptr BitVector_to_Dec (wordptr addr); +YASM_LIB_DECL +ErrCode BitVector_from_Dec (/*@out@*/ wordptr addr, charptr string); + +typedef struct BitVector_from_Dec_static_data BitVector_from_Dec_static_data; +YASM_LIB_DECL +BitVector_from_Dec_static_data *BitVector_from_Dec_static_Boot(N_word bits); +YASM_LIB_DECL +void BitVector_from_Dec_static_Shutdown(/*@null@*/ BitVector_from_Dec_static_data *data); +YASM_LIB_DECL +ErrCode BitVector_from_Dec_static(BitVector_from_Dec_static_data *data, + /*@out@*/ wordptr addr, charptr string); + +YASM_LIB_DECL +/*@only@*/ charptr BitVector_to_Enum (wordptr addr); +YASM_LIB_DECL +ErrCode BitVector_from_Enum (/*@out@*/ wordptr addr, charptr string); + +/* ===> bit vector bit operations, functions & tests: */ + +YASM_LIB_DECL +void BitVector_Bit_Off (/*@out@*/ wordptr addr, N_int indx); /* X = X \ {x} */ +YASM_LIB_DECL +void BitVector_Bit_On (/*@out@*/ wordptr addr, N_int indx); /* X = X + {x} */ +YASM_LIB_DECL +boolean BitVector_bit_flip (/*@out@*/ wordptr addr, N_int indx); /* (X+{x})\(X*{x}) */ + +YASM_LIB_DECL +boolean BitVector_bit_test (wordptr addr, N_int indx); /* {x} in X ? */ + +YASM_LIB_DECL +void BitVector_Bit_Copy (/*@out@*/ wordptr addr, N_int indx, boolean bit); + +/* ===> bit vector bit shift & rotate functions: */ + +YASM_LIB_DECL +void BitVector_LSB (/*@out@*/ wordptr addr, boolean bit); +YASM_LIB_DECL +void BitVector_MSB (/*@out@*/ wordptr addr, boolean bit); +YASM_LIB_DECL +boolean BitVector_lsb_ (wordptr addr); +YASM_LIB_DECL +boolean BitVector_msb_ (wordptr addr); +YASM_LIB_DECL +boolean /*@alt void@*/ BitVector_rotate_left (wordptr addr); +YASM_LIB_DECL +boolean /*@alt void@*/ BitVector_rotate_right (wordptr addr); +YASM_LIB_DECL +boolean /*@alt void@*/ BitVector_shift_left (wordptr addr, boolean carry_in); +YASM_LIB_DECL +boolean /*@alt void@*/ BitVector_shift_right (wordptr addr, boolean carry_in); +YASM_LIB_DECL +void BitVector_Move_Left (wordptr addr, N_int bits); +YASM_LIB_DECL +void BitVector_Move_Right (wordptr addr, N_int bits); + +/* ===> bit vector insert/delete bits: */ + +YASM_LIB_DECL +void BitVector_Insert (wordptr addr, N_int offset, N_int count, + boolean clear); +YASM_LIB_DECL +void BitVector_Delete (wordptr addr, N_int offset, N_int count, + boolean clear); + +/* ===> bit vector arithmetic: */ + +YASM_LIB_DECL +boolean /*@alt void@*/ BitVector_increment (wordptr addr); /* X++ */ +YASM_LIB_DECL +boolean /*@alt void@*/ BitVector_decrement (wordptr addr); /* X-- */ + +YASM_LIB_DECL +boolean /*@alt void@*/ BitVector_compute (wordptr X, wordptr Y, wordptr Z, boolean minus, + boolean *carry); +YASM_LIB_DECL +boolean /*@alt void@*/ BitVector_add (wordptr X, wordptr Y, wordptr Z, boolean *carry); +YASM_LIB_DECL +boolean /*@alt void@*/ BitVector_sub (wordptr X, wordptr Y, wordptr Z, boolean *carry); +YASM_LIB_DECL +boolean /*@alt void@*/ BitVector_inc (wordptr X, wordptr Y); +YASM_LIB_DECL +boolean /*@alt void@*/ BitVector_dec (wordptr X, wordptr Y); + +YASM_LIB_DECL +void BitVector_Negate (wordptr X, wordptr Y); +YASM_LIB_DECL +void BitVector_Absolute (wordptr X, wordptr Y); +YASM_LIB_DECL +Z_int BitVector_Sign (wordptr addr); +YASM_LIB_DECL +ErrCode BitVector_Mul_Pos (wordptr X, wordptr Y, wordptr Z, boolean strict); +YASM_LIB_DECL +ErrCode BitVector_Multiply (wordptr X, wordptr Y, wordptr Z); +YASM_LIB_DECL +ErrCode BitVector_Div_Pos (wordptr Q, wordptr X, wordptr Y, wordptr R); +YASM_LIB_DECL +ErrCode BitVector_Divide (wordptr Q, wordptr X, wordptr Y, wordptr R); +YASM_LIB_DECL +ErrCode BitVector_GCD (wordptr X, wordptr Y, wordptr Z); +YASM_LIB_DECL +ErrCode BitVector_GCD2 (wordptr U, wordptr V, wordptr W, /* O */ + wordptr X, wordptr Y); /* I */ +YASM_LIB_DECL +ErrCode BitVector_Power (wordptr X, wordptr Y, wordptr Z); + +/* ===> direct memory access functions: */ + +YASM_LIB_DECL +void BitVector_Block_Store(wordptr addr, charptr buffer, N_int length); +YASM_LIB_DECL +charptr BitVector_Block_Read (wordptr addr, /*@out@*/ N_intptr length); + +/* ===> word array functions: */ + +YASM_LIB_DECL +void BitVector_Word_Store (wordptr addr, N_int offset, N_int value); +YASM_LIB_DECL +N_int BitVector_Word_Read (wordptr addr, N_int offset); + +YASM_LIB_DECL +void BitVector_Word_Insert(wordptr addr, N_int offset, N_int count, + boolean clear); +YASM_LIB_DECL +void BitVector_Word_Delete(wordptr addr, N_int offset, N_int count, + boolean clear); + +/* ===> arbitrary size chunk functions: */ + +YASM_LIB_DECL +void BitVector_Chunk_Store(wordptr addr, N_int chunksize, + N_int offset, N_long value); +YASM_LIB_DECL +N_long BitVector_Chunk_Read (wordptr addr, N_int chunksize, + N_int offset); + +/* ===> set operations: */ + +YASM_LIB_DECL +void Set_Union (wordptr X, wordptr Y, wordptr Z); /* X = Y + Z */ +YASM_LIB_DECL +void Set_Intersection (wordptr X, wordptr Y, wordptr Z); /* X = Y * Z */ +YASM_LIB_DECL +void Set_Difference (wordptr X, wordptr Y, wordptr Z); /* X = Y \ Z */ +YASM_LIB_DECL +void Set_ExclusiveOr (wordptr X, wordptr Y, wordptr Z); /*(Y+Z)\(Y*Z)*/ +YASM_LIB_DECL +void Set_Complement (wordptr X, wordptr Y); /* X = ~Y */ + +/* ===> set functions: */ + +YASM_LIB_DECL +boolean Set_subset (wordptr X, wordptr Y); /* X in Y ? */ + +YASM_LIB_DECL +N_int Set_Norm (wordptr addr); /* = | X | */ +YASM_LIB_DECL +N_int Set_Norm2 (wordptr addr); /* = | X | */ +YASM_LIB_DECL +N_int Set_Norm3 (wordptr addr); /* = | X | */ +YASM_LIB_DECL +Z_long Set_Min (wordptr addr); /* = min(X) */ +YASM_LIB_DECL +Z_long Set_Max (wordptr addr); /* = max(X) */ + +/* ===> matrix-of-booleans operations: */ + +YASM_LIB_DECL +void Matrix_Multiplication(wordptr X, N_int rowsX, N_int colsX, + wordptr Y, N_int rowsY, N_int colsY, + wordptr Z, N_int rowsZ, N_int colsZ); + +YASM_LIB_DECL +void Matrix_Product (wordptr X, N_int rowsX, N_int colsX, + wordptr Y, N_int rowsY, N_int colsY, + wordptr Z, N_int rowsZ, N_int colsZ); + +YASM_LIB_DECL +void Matrix_Closure (wordptr addr, N_int rows, N_int cols); + +YASM_LIB_DECL +void Matrix_Transpose (wordptr X, N_int rowsX, N_int colsX, + wordptr Y, N_int rowsY, N_int colsY); + +/*****************************************************************************/ +/* VERSION: 6.4 */ +/*****************************************************************************/ +/* VERSION HISTORY: */ +/*****************************************************************************/ +/* */ +/* Version 6.4 03.10.04 Added C++ comp. directives. Improved "Norm()". */ +/* Version 6.3 28.09.02 Added "Create_List()" and "GCD2()". */ +/* Version 6.2 15.09.02 Overhauled error handling. Fixed "GCD()". */ +/* Version 6.1 08.10.01 Make VMS linker happy: _lsb,_msb => _lsb_,_msb_ */ +/* Version 6.0 08.10.00 Corrected overflow handling. */ +/* Version 5.8 14.07.00 Added "Power()". Changed "Copy()". */ +/* Version 5.7 19.05.99 Quickened "Div_Pos()". Added "Product()". */ +/* Version 5.6 02.11.98 Leading zeros eliminated in "to_Hex()". */ +/* Version 5.5 21.09.98 Fixed bug of uninitialized "error" in Multiply. */ +/* Version 5.4 07.09.98 Fixed bug of uninitialized "error" in Divide. */ +/* Version 5.3 12.05.98 Improved Norm. Completed history. */ +/* Version 5.2 31.03.98 Improved Norm. */ +/* Version 5.1 09.03.98 No changes. */ +/* Version 5.0 01.03.98 Major additions and rewrite. */ +/* Version 4.2 16.07.97 Added is_empty, is_full. */ +/* Version 4.1 30.06.97 Added word-ins/del, move-left/right, inc/dec. */ +/* Version 4.0 23.04.97 Rewrite. Added bit shift and bool. matrix ops. */ +/* Version 3.2 04.02.97 Added interval methods. */ +/* Version 3.1 21.01.97 Fixed bug on 64 bit machines. */ +/* Version 3.0 12.01.97 Added flip. */ +/* Version 2.0 14.12.96 Efficiency and consistency improvements. */ +/* Version 1.1 08.01.96 Added Resize and ExclusiveOr. */ +/* Version 1.0 14.12.95 First version under UNIX (with Perl module). */ +/* Version 0.9 01.11.93 First version of C library under MS-DOS. */ +/* Version 0.1 ??.??.89 First version in Turbo Pascal under CP/M. */ +/* */ +/*****************************************************************************/ +/* AUTHOR: */ +/*****************************************************************************/ +/* */ +/* Steffen Beyer */ +/* mailto:sb@engelschall.com */ +/* http://www.engelschall.com/u/sb/download/ */ +/* */ +/*****************************************************************************/ +/* COPYRIGHT: */ +/*****************************************************************************/ +/* */ +/* Copyright (c) 1995 - 2004 by Steffen Beyer. */ +/* All rights reserved. */ +/* */ +/*****************************************************************************/ +/* LICENSE: */ +/*****************************************************************************/ +/* This package is free software; you can use, modify and redistribute */ +/* it under the same terms as Perl itself, i.e., under the terms of */ +/* the "Artistic License" or the "GNU General Public License". */ +/* */ +/* The C library at the core of this Perl module can additionally */ +/* be used, modified and redistributed under the terms of the */ +/* "GNU Library General Public License". */ +/* */ +/*****************************************************************************/ +/* ARTISTIC LICENSE: */ +/*****************************************************************************/ +/* + The "Artistic License" + + Preamble + +The intent of this document is to state the conditions under which a +Package may be copied, such that the Copyright Holder maintains some +semblance of artistic control over the development of the package, +while giving the users of the package the right to use and distribute +the Package in a more-or-less customary fashion, plus the right to make +reasonable modifications. + +Definitions: + + "Package" refers to the collection of files distributed by the + Copyright Holder, and derivatives of that collection of files + created through textual modification. + + "Standard Version" refers to such a Package if it has not been + modified, or has been modified in accordance with the wishes + of the Copyright Holder as specified below. + + "Copyright Holder" is whoever is named in the copyright or + copyrights for the package. + + "You" is you, if you're thinking about copying or distributing + this Package. + + "Reasonable copying fee" is whatever you can justify on the + basis of media cost, duplication charges, time of people involved, + and so on. (You will not be required to justify it to the + Copyright Holder, but only to the computing community at large + as a market that must bear the fee.) + + "Freely Available" means that no fee is charged for the item + itself, though there may be fees involved in handling the item. + It also means that recipients of the item may redistribute it + under the same conditions they received it. + +1. You may make and give away verbatim copies of the source form of the +Standard Version of this Package without restriction, provided that you +duplicate all of the original copyright notices and associated disclaimers. + +2. You may apply bug fixes, portability fixes and other modifications +derived from the Public Domain or from the Copyright Holder. A Package +modified in such a way shall still be considered the Standard Version. + +3. You may otherwise modify your copy of this Package in any way, provided +that you insert a prominent notice in each changed file stating how and +when you changed that file, and provided that you do at least ONE of the +following: + + a) place your modifications in the Public Domain or otherwise make them + Freely Available, such as by posting said modifications to Usenet or + an equivalent medium, or placing the modifications on a major archive + site such as uunet.uu.net, or by allowing the Copyright Holder to include + your modifications in the Standard Version of the Package. + + b) use the modified Package only within your corporation or organization. + + c) rename any non-standard executables so the names do not conflict + with standard executables, which must also be provided, and provide + a separate manual page for each non-standard executable that clearly + documents how it differs from the Standard Version. + + d) make other distribution arrangements with the Copyright Holder. + +4. You may distribute the programs of this Package in object code or +executable form, provided that you do at least ONE of the following: + + a) distribute a Standard Version of the executables and library files, + together with instructions (in the manual page or equivalent) on where + to get the Standard Version. + + b) accompany the distribution with the machine-readable source of + the Package with your modifications. + + c) give non-standard executables non-standard names, and clearly + document the differences in manual pages (or equivalent), together + with instructions on where to get the Standard Version. + + d) make other distribution arrangements with the Copyright Holder. + +5. You may charge a reasonable copying fee for any distribution of this +Package. You may charge any fee you choose for support of this +Package. You may not charge a fee for this Package itself. However, +you may distribute this Package in aggregate with other (possibly +commercial) programs as part of a larger (possibly commercial) software +distribution provided that you do not advertise this Package as a +product of your own. You may embed this Package's interpreter within +an executable of yours (by linking); this shall be construed as a mere +form of aggregation, provided that the complete Standard Version of the +interpreter is so embedded. + +6. The scripts and library files supplied as input to or produced as +output from the programs of this Package do not automatically fall +under the copyright of this Package, but belong to whoever generated +them, and may be sold commercially, and may be aggregated with this +Package. If such scripts or library files are aggregated with this +Package via the so-called "undump" or "unexec" methods of producing a +binary executable image, then distribution of such an image shall +neither be construed as a distribution of this Package nor shall it +fall under the restrictions of Paragraphs 3 and 4, provided that you do +not represent such an executable image as a Standard Version of this +Package. + +7. C subroutines (or comparably compiled subroutines in other +languages) supplied by you and linked into this Package in order to +emulate subroutines and variables of the language defined by this +Package shall not be considered part of this Package, but are the +equivalent of input as in Paragraph 6, provided these subroutines do +not change the language in any way that would cause it to fail the +regression tests for the language. + +8. Aggregation of this Package with a commercial distribution is always +permitted provided that the use of this Package is embedded; that is, +when no overt attempt is made to make this Package's interfaces visible +to the end user of the commercial distribution. Such use shall not be +construed as a distribution of this Package. + +9. The name of the Copyright Holder may not be used to endorse or promote +products derived from this software without specific prior written permission. + +10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + The End +*/ +/*****************************************************************************/ +/* GNU GENERAL PUBLIC LICENSE: */ +/*****************************************************************************/ +/* 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 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 General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU 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. */ +/* */ +/*****************************************************************************/ +/* GNU LIBRARY GENERAL PUBLIC LICENSE: */ +/*****************************************************************************/ +/* */ +/* This library is free software; you can redistribute it and/or */ +/* modify it under the terms of the GNU Library General Public */ +/* License as published by the Free Software Foundation; either */ +/* version 2 of the License, or (at your option) any later version. */ +/* */ +/* This 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 */ +/* Library General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU Library General Public */ +/* License along with this library; if not, write to the */ +/* Free Software Foundation, Inc., */ +/* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/* */ +/* or download a copy from ftp://ftp.gnu.org/pub/gnu/COPYING.LIB-2.0 */ +/* */ +/*****************************************************************************/ +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/bytecode.c b/third-party/yasm/yasm-1.3.0/libyasm/bytecode.c new file mode 100644 index 0000000000..f864bae0aa --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/bytecode.c @@ -0,0 +1,386 @@ +/* + * Bytecode utility functions + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 "util.h" + +#include "libyasm-stdint.h" +#include "coretype.h" + +#include "errwarn.h" +#include "intnum.h" +#include "expr.h" +#include "value.h" +#include "symrec.h" + +#include "bytecode.h" + + +void +yasm_bc_set_multiple(yasm_bytecode *bc, yasm_expr *e) +{ + if (bc->multiple) + bc->multiple = yasm_expr_create_tree(bc->multiple, YASM_EXPR_MUL, e, + e->line); + else + bc->multiple = e; +} + +void +yasm_bc_finalize_common(yasm_bytecode *bc, yasm_bytecode *prev_bc) +{ +} + +int +yasm_bc_calc_len_common(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + yasm_internal_error(N_("bytecode length cannot be calculated")); + /*@unreached@*/ + return 0; +} + +int +yasm_bc_expand_common(yasm_bytecode *bc, int span, long old_val, long new_val, + /*@out@*/ long *neg_thres, /*@out@*/ long *pos_thres) +{ + yasm_internal_error(N_("bytecode does not have any dependent spans")); + /*@unreached@*/ + return 0; +} + +int +yasm_bc_tobytes_common(yasm_bytecode *bc, unsigned char **buf, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc) +{ + yasm_internal_error(N_("bytecode cannot be converted to bytes")); + /*@unreached@*/ + return 0; +} + +void +yasm_bc_transform(yasm_bytecode *bc, const yasm_bytecode_callback *callback, + void *contents) +{ + if (bc->callback) + bc->callback->destroy(bc->contents); + bc->callback = callback; + bc->contents = contents; +} + +yasm_bytecode * +yasm_bc_create_common(const yasm_bytecode_callback *callback, void *contents, + unsigned long line) +{ + yasm_bytecode *bc = yasm_xmalloc(sizeof(yasm_bytecode)); + + bc->callback = callback; + bc->section = NULL; + bc->multiple = (yasm_expr *)NULL; + bc->len = 0; + bc->mult_int = 1; + bc->line = line; + bc->offset = ~0UL; /* obviously incorrect / uninitialized value */ + bc->symrecs = NULL; + bc->contents = contents; + + return bc; +} + +yasm_section * +yasm_bc_get_section(yasm_bytecode *bc) +{ + return bc->section; +} + +void +yasm_bc__add_symrec(yasm_bytecode *bc, yasm_symrec *sym) +{ + if (!bc->symrecs) { + bc->symrecs = yasm_xmalloc(2*sizeof(yasm_symrec *)); + bc->symrecs[0] = sym; + bc->symrecs[1] = NULL; + } else { + /* Very inefficient implementation for large numbers of symbols. But + * that would be very unusual, so use the simple algorithm instead. + */ + size_t count = 1; + while (bc->symrecs[count]) + count++; + bc->symrecs = yasm_xrealloc(bc->symrecs, + (count+2)*sizeof(yasm_symrec *)); + bc->symrecs[count] = sym; + bc->symrecs[count+1] = NULL; + } +} + +void +yasm_bc_destroy(yasm_bytecode *bc) +{ + if (!bc) + return; + + if (bc->callback) + bc->callback->destroy(bc->contents); + yasm_expr_destroy(bc->multiple); + if (bc->symrecs) + yasm_xfree(bc->symrecs); + yasm_xfree(bc); +} + +void +yasm_bc_print(const yasm_bytecode *bc, FILE *f, int indent_level) +{ + if (!bc->callback) + fprintf(f, "%*s_Empty_\n", indent_level, ""); + else + bc->callback->print(bc->contents, f, indent_level); + fprintf(f, "%*sMultiple=", indent_level, ""); + if (!bc->multiple) + fprintf(f, "nil (1)"); + else + yasm_expr_print(bc->multiple, f); + fprintf(f, "\n%*sLength=%lu\n", indent_level, "", bc->len); + fprintf(f, "%*sLine Index=%lu\n", indent_level, "", bc->line); + fprintf(f, "%*sOffset=%lx\n", indent_level, "", bc->offset); +} + +void +yasm_bc_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc) +{ + if (bc->callback) + bc->callback->finalize(bc, prev_bc); + if (bc->multiple) { + yasm_value val; + + if (yasm_value_finalize_expr(&val, bc->multiple, prev_bc, 0)) + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("multiple expression too complex")); + else if (val.rel) + yasm_error_set(YASM_ERROR_NOT_ABSOLUTE, + N_("multiple expression not absolute")); + /* Finalize creates NULL output if value=0, but bc->multiple is NULL + * if value=1 (this difference is to make the common case small). + * However, this means we need to set bc->multiple explicitly to 0 + * here if val.abs is NULL. + */ + if (val.abs) + bc->multiple = val.abs; + else + bc->multiple = yasm_expr_create_ident( + yasm_expr_int(yasm_intnum_create_uint(0)), bc->line); + } +} + +/*@null@*/ yasm_intnum * +yasm_calc_bc_dist(yasm_bytecode *precbc1, yasm_bytecode *precbc2) +{ + unsigned long dist2, dist1; + yasm_intnum *intn; + + if (precbc1->section != precbc2->section) + return NULL; + + dist1 = yasm_bc_next_offset(precbc1); + dist2 = yasm_bc_next_offset(precbc2); + if (dist2 < dist1) { + intn = yasm_intnum_create_uint(dist1 - dist2); + yasm_intnum_calc(intn, YASM_EXPR_NEG, NULL); + return intn; + } + dist2 -= dist1; + return yasm_intnum_create_uint(dist2); +} + +unsigned long +yasm_bc_next_offset(yasm_bytecode *precbc) +{ + return precbc->offset + precbc->len*precbc->mult_int; +} + +int +yasm_bc_elem_size(yasm_bytecode *bc) +{ + if (!bc->callback) { + yasm_internal_error(N_("got empty bytecode in yasm_bc_elem_size")); + return 0; + } else if (!bc->callback->elem_size) + return 0; + else + return bc->callback->elem_size(bc); +} + +int +yasm_bc_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + int retval = 0; + + bc->len = 0; + + if (!bc->callback) + yasm_internal_error(N_("got empty bytecode in yasm_bc_calc_len")); + else + retval = bc->callback->calc_len(bc, add_span, add_span_data); + + /* Check for multiples */ + bc->mult_int = 1; + if (bc->multiple) { + /*@dependent@*/ /*@null@*/ const yasm_intnum *num; + + num = yasm_expr_get_intnum(&bc->multiple, 0); + if (num) { + if (yasm_intnum_sign(num) < 0) { + yasm_error_set(YASM_ERROR_VALUE, N_("multiple is negative")); + retval = -1; + } else + bc->mult_int = yasm_intnum_get_int(num); + } else { + if (yasm_expr__contains(bc->multiple, YASM_EXPR_FLOAT)) { + yasm_error_set(YASM_ERROR_VALUE, + N_("expression must not contain floating point value")); + retval = -1; + } else { + yasm_value value; + yasm_value_initialize(&value, bc->multiple, 0); + add_span(add_span_data, bc, 0, &value, 0, 0); + bc->mult_int = 0; /* assume 0 to start */ + } + } + } + + /* If we got an error somewhere along the line, clear out any calc len */ + if (retval < 0) + bc->len = 0; + + return retval; +} + +int +yasm_bc_expand(yasm_bytecode *bc, int span, long old_val, long new_val, + /*@out@*/ long *neg_thres, /*@out@*/ long *pos_thres) +{ + if (span == 0) { + bc->mult_int = new_val; + return 1; + } + if (!bc->callback) { + yasm_internal_error(N_("got empty bytecode in yasm_bc_expand")); + /*@unreached@*/ + return -1; + } else + return bc->callback->expand(bc, span, old_val, new_val, neg_thres, + pos_thres); +} + +/*@null@*/ /*@only@*/ unsigned char * +yasm_bc_tobytes(yasm_bytecode *bc, unsigned char *buf, unsigned long *bufsize, + /*@out@*/ int *gap, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc) + /*@sets *buf@*/ +{ + /*@only@*/ /*@null@*/ unsigned char *mybuf = NULL; + unsigned char *bufstart; + unsigned char *origbuf, *destbuf; + long i; + int error = 0; + + long mult; + if (yasm_bc_get_multiple(bc, &mult, 1) || mult == 0) { + *bufsize = 0; + return NULL; + } + bc->mult_int = mult; + + /* special case for reserve bytecodes */ + if (bc->callback->special == YASM_BC_SPECIAL_RESERVE) { + *bufsize = bc->len*bc->mult_int; + *gap = 1; + return NULL; /* we didn't allocate a buffer */ + } + *gap = 0; + + if (*bufsize < bc->len*bc->mult_int) { + mybuf = yasm_xmalloc(bc->len*bc->mult_int); + destbuf = mybuf; + } else + destbuf = buf; + bufstart = destbuf; + + *bufsize = bc->len*bc->mult_int; + + if (!bc->callback) + yasm_internal_error(N_("got empty bytecode in bc_tobytes")); + else for (i=0; imult_int; i++) { + origbuf = destbuf; + error = bc->callback->tobytes(bc, &destbuf, bufstart, d, output_value, + output_reloc); + + if (!error && ((unsigned long)(destbuf - origbuf) != bc->len)) + yasm_internal_error( + N_("written length does not match optimized length")); + } + + return mybuf; +} + +int +yasm_bc_get_multiple(yasm_bytecode *bc, long *multiple, int calc_bc_dist) +{ + /*@dependent@*/ /*@null@*/ const yasm_intnum *num; + + *multiple = 1; + if (bc->multiple) { + num = yasm_expr_get_intnum(&bc->multiple, calc_bc_dist); + if (!num) { + yasm_error_set(YASM_ERROR_VALUE, + N_("could not determine multiple")); + return 1; + } + if (yasm_intnum_sign(num) < 0) { + yasm_error_set(YASM_ERROR_VALUE, N_("multiple is negative")); + return 1; + } + *multiple = yasm_intnum_get_int(num); + } + return 0; +} + +const yasm_expr * +yasm_bc_get_multiple_expr(const yasm_bytecode *bc) +{ + return bc->multiple; +} + +yasm_insn * +yasm_bc_get_insn(yasm_bytecode *bc) +{ + if (bc->callback->special != YASM_BC_SPECIAL_INSN) + return NULL; + return (yasm_insn *)bc->contents; +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/bytecode.h b/third-party/yasm/yasm-1.3.0/libyasm/bytecode.h new file mode 100644 index 0000000000..47cd26244b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/bytecode.h @@ -0,0 +1,638 @@ +/** + * \file libyasm/bytecode.h + * \brief YASM bytecode interface. + * + * \license + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_BYTECODE_H +#define YASM_BYTECODE_H + +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +/** A data value (opaque type). */ +typedef struct yasm_dataval yasm_dataval; +/** A list of data values. */ +typedef struct yasm_datavalhead yasm_datavalhead; + +/** Linked list of data values. */ +/*@reldef@*/ STAILQ_HEAD(yasm_datavalhead, yasm_dataval); + +/** Add a dependent span for a bytecode. + * \param add_span_data add_span_data passed into bc_calc_len() + * \param bc bytecode containing span + * \param id non-zero identifier for span; may be any non-zero value + * if <0, expand is called for any change; + * if >0, expand is only called when exceeds threshold + * \param value dependent value for bytecode expansion + * \param neg_thres negative threshold for long/short decision + * \param pos_thres positive threshold for long/short decision + */ +typedef void (*yasm_bc_add_span_func) + (void *add_span_data, yasm_bytecode *bc, int id, const yasm_value *value, + long neg_thres, long pos_thres); + +/** Bytecode callback structure. Any implementation of a specific bytecode + * must implement these functions and this callback structure. The bytecode + * implementation-specific data is stored in #yasm_bytecode.contents. + */ +typedef struct yasm_bytecode_callback { + /** Destroys the implementation-specific data. + * Called from yasm_bc_destroy(). + * \param contents #yasm_bytecode.contents + */ + void (*destroy) (/*@only@*/ void *contents); + + /** Prints the implementation-specific data (for debugging purposes). + * Called from yasm_bc_print(). + * \param contents #yasm_bytecode.contents + * \param f file + * \param indent_level indentation level + */ + void (*print) (const void *contents, FILE *f, int indent_level); + + /** Finalizes the bytecode after parsing. Called from yasm_bc_finalize(). + * A generic fill-in for this is yasm_bc_finalize_common(). + * \param bc bytecode + * \param prev_bc bytecode directly preceding bc + */ + void (*finalize) (yasm_bytecode *bc, yasm_bytecode *prev_bc); + + /** Return elements size of a data bytecode. + * This function should return the size of each elements of a data + * bytecode, for proper dereference of symbols attached to it. + * \param bc bytecode + * \return 0 if element size is unknown. + */ + int (*elem_size) (yasm_bytecode *bc); + + /** Calculates the minimum size of a bytecode. + * Called from yasm_bc_calc_len(). + * A generic fill-in for this is yasm_bc_calc_len_common(), but as this + * function internal errors when called, be very careful when using it! + * This function should simply add to bc->len and not set it directly + * (it's initialized by yasm_bc_calc_len() prior to passing control to + * this function). + * + * \param bc bytecode + * \param add_span function to call to add a span + * \param add_span_data extra data to be passed to add_span function + * \return 0 if no error occurred, nonzero if there was an error + * recognized (and output) during execution. + * \note May store to bytecode updated expressions. + */ + int (*calc_len) (yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data); + + /** Recalculates the bytecode's length based on an expanded span length. + * Called from yasm_bc_expand(). + * A generic fill-in for this is yasm_bc_expand_common(), but as this + * function internal errors when called, if used, ensure that calc_len() + * never adds a span. + * This function should simply add to bc->len to increase the length by + * a delta amount. + * \param bc bytecode + * \param span span ID (as given to add_span in calc_len) + * \param old_val previous span value + * \param new_val new span value + * \param neg_thres negative threshold for long/short decision + * (returned) + * \param pos_thres positive threshold for long/short decision + * (returned) + * \return 0 if bc no longer dependent on this span's length, negative if + * there was an error recognized (and output) during execution, + * and positive if bc size may increase for this span further + * based on the new negative and positive thresholds returned. + * \note May store to bytecode updated expressions. + */ + int (*expand) (yasm_bytecode *bc, int span, long old_val, long new_val, + /*@out@*/ long *neg_thres, /*@out@*/ long *pos_thres); + + /** Convert a bytecode into its byte representation. + * Called from yasm_bc_tobytes(). + * A generic fill-in for this is yasm_bc_tobytes_common(), but as this + * function internal errors when called, be very careful when using it! + * \param bc bytecode + * \param bufp byte representation destination buffer; + * should be incremented as it's written to, + * so that on return its delta from the + * passed-in buf matches the bytecode length + * (it's okay not to do this if an error + * indication is returned) + * \param bufstart For calculating the correct offset parameter for + * the \a output_value calls: *bufp - bufstart. + * \param d data to pass to each call to + * output_value/output_reloc + * \param output_value function to call to convert values into their byte + * representation + * \param output_reloc function to call to output relocation entries + * for a single sym + * \return Nonzero on error, 0 on success. + * \note May result in non-reversible changes to the bytecode, but it's + * preferable if calling this function twice would result in the + * same output. + */ + int (*tobytes) (yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + + /** Special bytecode classifications. Most bytecode types should use + * #YASM_BC_SPECIAL_NONE. Others cause special handling to kick in + * in various parts of yasm. + */ + enum yasm_bytecode_special_type { + YASM_BC_SPECIAL_NONE = 0, + + /** Bytecode reserves space instead of outputting data. */ + YASM_BC_SPECIAL_RESERVE, + + /** Adjusts offset instead of calculating len. */ + YASM_BC_SPECIAL_OFFSET, + + /** Instruction bytecode. */ + YASM_BC_SPECIAL_INSN + } special; +} yasm_bytecode_callback; + +/** A bytecode. */ +struct yasm_bytecode { + /** Bytecodes are stored as a singly linked list, with tail insertion. + * \see section.h (#yasm_section). + */ + /*@reldef@*/ STAILQ_ENTRY(yasm_bytecode) link; + + /** The bytecode callback structure for this bytecode. May be NULL + * during partial initialization. + */ + /*@null@*/ const yasm_bytecode_callback *callback; + + /** Pointer to section containing bytecode; NULL if not part of a + * section. + */ + /*@dependent@*/ /*@null@*/ yasm_section *section; + + /** Number of times bytecode is repeated. + * NULL=1 (to save space in the common case). + */ + /*@only@*/ /*@null@*/ yasm_expr *multiple; + + /** Total length of entire bytecode (not including multiple copies). */ + unsigned long len; + + /** Number of copies, integer version. */ + long mult_int; + + /** Line number where bytecode was defined. */ + unsigned long line; + + /** Offset of bytecode from beginning of its section. + * 0-based, ~0UL (e.g. all 1 bits) if unknown. + */ + unsigned long offset; + + /** Unique integer index of bytecode. Used during optimization. */ + unsigned long bc_index; + + /** NULL-terminated array of labels that point to this bytecode (as the + * bytecode previous to the label). NULL if no labels point here. + */ + /*@null@*/ yasm_symrec **symrecs; + + /** Implementation-specific data (type identified by callback). */ + void *contents; +}; + +/** Create a bytecode of any specified type. + * \param callback bytecode callback functions, if NULL, creates empty + * bytecode (may not be resolved or output) + * \param contents type-specific data + * \param line virtual line (from yasm_linemap) + * \return Newly allocated bytecode of the specified type. + */ +YASM_LIB_DECL +/*@only@*/ yasm_bytecode *yasm_bc_create_common + (/*@null@*/ const yasm_bytecode_callback *callback, + /*@only@*/ /*@null@*/ void *contents, unsigned long line); + +/** Transform a bytecode of any type into a different type. + * \param bc bytecode to transform + * \param callback new bytecode callback function + * \param contents new type-specific data + */ +YASM_LIB_DECL +void yasm_bc_transform(yasm_bytecode *bc, + const yasm_bytecode_callback *callback, + void *contents); + +/** Common bytecode callback finalize function, for where no finalization + * is ever required for this type of bytecode. + */ +YASM_LIB_DECL +void yasm_bc_finalize_common(yasm_bytecode *bc, yasm_bytecode *prev_bc); + +/** Common bytecode callback calc_len function, for where the bytecode has + * no calculatable length. Causes an internal error if called. + */ +YASM_LIB_DECL +int yasm_bc_calc_len_common(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data); + +/** Common bytecode callback expand function, for where the bytecode is + * always short (calc_len never calls add_span). Causes an internal + * error if called. + */ +YASM_LIB_DECL +int yasm_bc_expand_common + (yasm_bytecode *bc, int span, long old_val, long new_val, + /*@out@*/ long *neg_thres, /*@out@*/ long *pos_thres); + +/** Common bytecode callback tobytes function, for where the bytecode + * cannot be converted to bytes. Causes an internal error if called. + */ +YASM_LIB_DECL +int yasm_bc_tobytes_common + (yasm_bytecode *bc, unsigned char **bufp, unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +/** Get the next bytecode in a linked list of bytecodes. + * \param bc bytecode + * \return Next bytecode. + */ +#define yasm_bc__next(bc) STAILQ_NEXT(bc, link) + +/** Set multiple field of a bytecode. + * A bytecode can be repeated a number of times when output. This function + * sets that multiple. + * \param bc bytecode + * \param e multiple (kept, do not free) + */ +YASM_LIB_DECL +void yasm_bc_set_multiple(yasm_bytecode *bc, /*@keep@*/ yasm_expr *e); + +/** Create a bytecode containing data value(s). + * \param datahead list of data values (kept, do not free) + * \param size storage size (in bytes) for each data value + * \param append_zero append a single zero byte after each data value + * (if non-zero) + * \param arch architecture (optional); if provided, data items + * are directly simplified to bytes if possible + * \param line virtual line (from yasm_linemap) + * \return Newly allocated bytecode. + */ +YASM_LIB_DECL +/*@only@*/ yasm_bytecode *yasm_bc_create_data + (yasm_datavalhead *datahead, unsigned int size, int append_zero, + /*@null@*/ yasm_arch *arch, unsigned long line); + +/** Create a bytecode containing LEB128-encoded data value(s). + * \param datahead list of data values (kept, do not free) + * \param sign signedness (1=signed, 0=unsigned) of each data value + * \param line virtual line (from yasm_linemap) + * \return Newly allocated bytecode. + */ +YASM_LIB_DECL +/*@only@*/ yasm_bytecode *yasm_bc_create_leb128 + (yasm_datavalhead *datahead, int sign, unsigned long line); + +/** Create a bytecode reserving space. + * \param numitems number of reserve "items" (kept, do not free) + * \param itemsize reserved size (in bytes) for each item + * \param line virtual line (from yasm_linemap) + * \return Newly allocated bytecode. + */ +YASM_LIB_DECL +/*@only@*/ yasm_bytecode *yasm_bc_create_reserve + (/*@only@*/ yasm_expr *numitems, unsigned int itemsize, + unsigned long line); + +/** Get the number of items and itemsize for a reserve bytecode. If bc + * is not a reserve bytecode, returns NULL. + * \param bc bytecode + * \param itemsize reserved size (in bytes) for each item (returned) + * \return NULL if bc is not a reserve bytecode, otherwise an expression + * for the number of items to reserve. + */ +YASM_LIB_DECL +/*@null@*/ const yasm_expr *yasm_bc_reserve_numitems + (yasm_bytecode *bc, /*@out@*/ unsigned int *itemsize); + +/** Create a bytecode that includes a binary file verbatim. + * \param filename path to binary file (kept, do not free) + * \param start starting location in file (in bytes) to read data from + * (kept, do not free); may be NULL to indicate 0 + * \param maxlen maximum number of bytes to read from the file (kept, do + * do not free); may be NULL to indicate no maximum + * \param linemap line mapping repository + * \param line virtual line (from yasm_linemap) for the bytecode + * \return Newly allocated bytecode. + */ +YASM_LIB_DECL +/*@only@*/ yasm_bytecode *yasm_bc_create_incbin + (/*@only@*/ char *filename, /*@only@*/ /*@null@*/ yasm_expr *start, + /*@only@*/ /*@null@*/ yasm_expr *maxlen, yasm_linemap *linemap, + unsigned long line); + +/** Create a bytecode that aligns the following bytecode to a boundary. + * \param boundary byte alignment (must be a power of two) + * \param fill fill data (if NULL, code_fill or 0 is used) + * \param maxskip maximum number of bytes to skip + * \param code_fill code fill data (if NULL, 0 is used) + * \param line virtual line (from yasm_linemap) + * \return Newly allocated bytecode. + * \note The precedence on generated fill is as follows: + * - from fill parameter (if not NULL) + * - from code_fill parameter (if not NULL) + * - 0 + */ +YASM_LIB_DECL +/*@only@*/ yasm_bytecode *yasm_bc_create_align + (/*@keep@*/ yasm_expr *boundary, /*@keep@*/ /*@null@*/ yasm_expr *fill, + /*@keep@*/ /*@null@*/ yasm_expr *maxskip, + /*@null@*/ const unsigned char **code_fill, unsigned long line); + +/** Create a bytecode that puts the following bytecode at a fixed section + * offset. + * \param start section offset of following bytecode + * \param fill fill value + * \param line virtual line (from yasm_linemap) + * \return Newly allocated bytecode. + */ +YASM_LIB_DECL +/*@only@*/ yasm_bytecode *yasm_bc_create_org + (unsigned long start, unsigned long fill, unsigned long line); + +/** Get the section that contains a particular bytecode. + * \param bc bytecode + * \return Section containing bc (can be NULL if bytecode is not part of a + * section). + */ +YASM_LIB_DECL +/*@dependent@*/ /*@null@*/ yasm_section *yasm_bc_get_section + (yasm_bytecode *bc); + +/** Add to the list of symrecs that reference a bytecode. For symrec use + * only. + * \param bc bytecode + * \param sym symbol + */ +YASM_LIB_DECL +void yasm_bc__add_symrec(yasm_bytecode *bc, /*@dependent@*/ yasm_symrec *sym); + +/** Delete (free allocated memory for) a bytecode. + * \param bc bytecode (only pointer to it); may be NULL + */ +YASM_LIB_DECL +void yasm_bc_destroy(/*@only@*/ /*@null@*/ yasm_bytecode *bc); + +/** Print a bytecode. For debugging purposes. + * \param f file + * \param indent_level indentation level + * \param bc bytecode + */ +YASM_LIB_DECL +void yasm_bc_print(const yasm_bytecode *bc, FILE *f, int indent_level); + +/** Finalize a bytecode after parsing. + * \param bc bytecode + * \param prev_bc bytecode directly preceding bc in a list of bytecodes + */ +YASM_LIB_DECL +void yasm_bc_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc); + +/** Determine the distance between the starting offsets of two bytecodes. + * \param precbc1 preceding bytecode to the first bytecode + * \param precbc2 preceding bytecode to the second bytecode + * \return Distance in bytes between the two bytecodes (bc2-bc1), or NULL if + * the distance was indeterminate. + * \warning Only valid /after/ optimization. + */ +YASM_LIB_DECL +/*@null@*/ /*@only@*/ yasm_intnum *yasm_calc_bc_dist + (yasm_bytecode *precbc1, yasm_bytecode *precbc2); + +/** Get the offset of the next bytecode (the next bytecode doesn't have to + * actually exist). + * \param precbc preceding bytecode + * \return Offset of the next bytecode in bytes. + * \warning Only valid /after/ optimization. + */ +YASM_LIB_DECL +unsigned long yasm_bc_next_offset(yasm_bytecode *precbc); + +/** Return elemens size of a data bytecode. + * Returns the size of each elements of a data bytecode, for proper dereference + * of symbols attached to it. + * \param bc bytecode + * \return 0 if element size is unknown + */ +YASM_LIB_DECL +int yasm_bc_elem_size(yasm_bytecode *bc); + +/** Resolve EQUs in a bytecode and calculate its minimum size. + * Generates dependent bytecode spans for cases where, if the length spanned + * increases, it could cause the bytecode size to increase. + * Any bytecode multiple is NOT included in the length or spans generation; + * this must be handled at a higher level. + * \param bc bytecode + * \param add_span function to call to add a span + * \param add_span_data extra data to be passed to add_span function + * \return 0 if no error occurred, nonzero if there was an error recognized + * (and output) during execution. + * \note May store to bytecode updated expressions and the short length. + */ +YASM_LIB_DECL +int yasm_bc_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data); + +/** Recalculate a bytecode's length based on an expanded span length. + * \param bc bytecode + * \param span span ID (as given to yasm_bc_add_span_func in + * yasm_bc_calc_len) + * \param old_val previous span value + * \param new_val new span value + * \param neg_thres negative threshold for long/short decision (returned) + * \param pos_thres positive threshold for long/short decision (returned) + * \return 0 if bc no longer dependent on this span's length, negative if + * there was an error recognized (and output) during execution, and + * positive if bc size may increase for this span further based on the + * new negative and positive thresholds returned. + * \note May store to bytecode updated expressions and the updated length. + */ +YASM_LIB_DECL +int yasm_bc_expand(yasm_bytecode *bc, int span, long old_val, long new_val, + /*@out@*/ long *neg_thres, /*@out@*/ long *pos_thres); + +/** Convert a bytecode into its byte representation. + * \param bc bytecode + * \param buf byte representation destination buffer + * \param bufsize size of buf (in bytes) prior to call; size of the + * generated data after call + * \param gap if nonzero, indicates the data does not really need to + * exist in the object file; if nonzero, contents of buf + * are undefined [output] + * \param d data to pass to each call to output_value/output_reloc + * \param output_value function to call to convert values into their byte + * representation + * \param output_reloc function to call to output relocation entries + * for a single sym + * \return Newly allocated buffer that should be used instead of buf for + * reading the byte representation, or NULL if buf was big enough to + * hold the entire byte representation. + * \note Calling twice on the same bytecode may \em not produce the same + * results on the second call, as calling this function may result in + * non-reversible changes to the bytecode. + */ +YASM_LIB_DECL +/*@null@*/ /*@only@*/ unsigned char *yasm_bc_tobytes + (yasm_bytecode *bc, unsigned char *buf, unsigned long *bufsize, + /*@out@*/ int *gap, void *d, yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc) + /*@sets *buf@*/; + +/** Get the bytecode multiple value as an integer. + * \param bc bytecode + * \param multiple multiple value (output) + * \param calc_bc_dist nonzero if distances between bytecodes should be + * calculated, 0 if error should be returned in this case + * \return 1 on error (set with yasm_error_set), 0 on success. + */ +YASM_LIB_DECL +int yasm_bc_get_multiple(yasm_bytecode *bc, /*@out@*/ long *multiple, + int calc_bc_dist); + +/** Get the bytecode multiple value as an expression. + * \param bc bytecode + * \return Bytecode multiple, NULL if =1. + */ +YASM_LIB_DECL +const yasm_expr *yasm_bc_get_multiple_expr(const yasm_bytecode *bc); + +/** Get a #yasm_insn structure from an instruction bytecode (if possible). + * \param bc bytecode + * \return Instruction details if bytecode is an instruction bytecode, + * otherwise NULL. + */ +YASM_LIB_DECL +/*@dependent@*/ /*@null@*/ yasm_insn *yasm_bc_get_insn(yasm_bytecode *bc); + +/** Create a new data value from an expression. + * \param expn expression + * \return Newly allocated data value. + */ +YASM_LIB_DECL +yasm_dataval *yasm_dv_create_expr(/*@keep@*/ yasm_expr *expn); + +/** Create a new data value from a string. + * \param contents string (may contain NULs) + * \param len length of string + * \return Newly allocated data value. + */ +YASM_LIB_DECL +yasm_dataval *yasm_dv_create_string(/*@keep@*/ char *contents, size_t len); + +/** Create a new data value from raw bytes data. + * \param contents raw data (may contain NULs) + * \param len length + * \return Newly allocated data value. + */ +YASM_LIB_DECL +yasm_dataval *yasm_dv_create_raw(/*@keep@*/ unsigned char *contents, + unsigned long len); + +/** Create a new uninitialized data value. + * \return Newly allocated data value. + */ +YASM_LIB_DECL +yasm_dataval *yasm_dv_create_reserve(void); + +#ifndef YASM_DOXYGEN +#define yasm_dv_create_string(s, l) yasm_dv_create_raw((unsigned char *)(s), \ + (unsigned long)(l)) +#endif + +/** Get the underlying value of a data value. + * \param dv data value + * \return Value, or null if non-value (e.g. string or raw). + */ +YASM_LIB_DECL +yasm_value *yasm_dv_get_value(yasm_dataval *dv); + +/** Set multiple field of a data value. + * A data value can be repeated a number of times when output. This function + * sets that multiple. + * \param dv data value + * \param e multiple (kept, do not free) + */ +YASM_LIB_DECL +void yasm_dv_set_multiple(yasm_dataval *dv, /*@keep@*/ yasm_expr *e); + +/** Get the data value multiple value as an unsigned long integer. + * \param dv data value + * \param multiple multiple value (output) + * \return 1 on error (set with yasm_error_set), 0 on success. + */ +YASM_LIB_DECL +int yasm_dv_get_multiple(yasm_dataval *dv, /*@out@*/ unsigned long *multiple); + +/** Initialize a list of data values. + * \param headp list of data values + */ +void yasm_dvs_initialize(yasm_datavalhead *headp); +#ifndef YASM_DOXYGEN +#define yasm_dvs_initialize(headp) STAILQ_INIT(headp) +#endif + +/** Delete (free allocated memory for) a list of data values. + * \param headp list of data values + */ +YASM_LIB_DECL +void yasm_dvs_delete(yasm_datavalhead *headp); + +/** Add data value to the end of a list of data values. + * \note Does not make a copy of the data value; so don't pass this function + * static or local variables, and discard the dv pointer after calling + * this function. + * \param headp data value list + * \param dv data value (may be NULL) + * \return If data value was actually appended (it wasn't NULL), the data + * value; otherwise NULL. + */ +YASM_LIB_DECL +/*@null@*/ yasm_dataval *yasm_dvs_append + (yasm_datavalhead *headp, /*@returned@*/ /*@null@*/ yasm_dataval *dv); + +/** Print a data value list. For debugging purposes. + * \param f file + * \param indent_level indentation level + * \param headp data value list + */ +YASM_LIB_DECL +void yasm_dvs_print(const yasm_datavalhead *headp, FILE *f, int indent_level); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/cmake-module.c b/third-party/yasm/yasm-1.3.0/libyasm/cmake-module.c new file mode 100644 index 0000000000..2ee39ca88f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/cmake-module.c @@ -0,0 +1,126 @@ +/* + * YASM module loader + * + * Copyright (C) 2004-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + + +typedef struct loaded_module { + const char *keyword; /* module keyword */ + void *data; /* associated data */ +} loaded_module; + +static HAMT *loaded_modules[] = {NULL, NULL, NULL, NULL, NULL, NULL}; + +static void +load_module_destroy(/*@only@*/ void *data) +{ + /* do nothing */ +} + +void * +yasm_load_module(yasm_module_type type, const char *keyword) +{ + if (!loaded_modules[type]) + return NULL; + return HAMT_search(loaded_modules[type], keyword); +} + +void +yasm_register_module(yasm_module_type type, const char *keyword, void *data) +{ + int replace = 1; + + assert(type < sizeof(loaded_modules)); + + if (!loaded_modules[type]) + loaded_modules[type] = HAMT_create(0, yasm_internal_error_); + + HAMT_insert(loaded_modules[type], keyword, data, &replace, + load_module_destroy); +} + +typedef struct { + yasm_module_type type; + void (*printfunc) (const char *name, const char *keyword); +} list_one_data; + +static int +yasm_list_one_module(void *node, void *d) +{ + list_one_data *data = (list_one_data *)d; + yasm_arch_module *arch; + yasm_dbgfmt_module *dbgfmt; + yasm_objfmt_module *objfmt; + yasm_listfmt_module *listfmt; + yasm_parser_module *parser; + yasm_preproc_module *preproc; + + switch (data->type) { + case YASM_MODULE_ARCH: + arch = node; + data->printfunc(arch->name, arch->keyword); + break; + case YASM_MODULE_DBGFMT: + dbgfmt = node; + data->printfunc(dbgfmt->name, dbgfmt->keyword); + break; + case YASM_MODULE_OBJFMT: + objfmt = node; + data->printfunc(objfmt->name, objfmt->keyword); + break; + case YASM_MODULE_LISTFMT: + listfmt = node; + data->printfunc(listfmt->name, listfmt->keyword); + break; + case YASM_MODULE_PARSER: + parser = node; + data->printfunc(parser->name, parser->keyword); + break; + case YASM_MODULE_PREPROC: + preproc = node; + data->printfunc(preproc->name, preproc->keyword); + break; + } + return 0; +} + +void +yasm_list_modules(yasm_module_type type, + void (*printfunc) (const char *name, const char *keyword)) +{ + list_one_data data; + + /* Go through available list, and try to load each one */ + if (!loaded_modules[type]) + return; + + data.type = type; + data.printfunc = printfunc; + + HAMT_traverse(loaded_modules[type], &data, yasm_list_one_module); +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/compat-queue.h b/third-party/yasm/yasm-1.3.0/libyasm/compat-queue.h new file mode 100644 index 0000000000..da9eff4694 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/compat-queue.h @@ -0,0 +1,456 @@ +/* + * implementation for systems that don't have it. + * + * Copyright (c) 1991, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS 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. + * + * @(#)queue.h 8.5 (Berkeley) 8/20/94 + * $FreeBSD: src/sys/sys/queue.h,v 1.32.2.4 2001/03/31 03:33:39 hsu Exp $ + */ + +#ifndef SYS_QUEUE_H +#define SYS_QUEUE_H + +/* + * This file defines four types of data structures: singly-linked lists, + * singly-linked tail queues, lists and tail queues. + * + * A singly-linked list is headed by a single forward pointer. The elements + * are singly linked for minimum space and pointer manipulation overhead at + * the expense of O(n) removal for arbitrary elements. New elements can be + * added to the list after an existing element or at the head of the list. + * Elements being removed from the head of the list should use the explicit + * macro for this purpose for optimum efficiency. A singly-linked list may + * only be traversed in the forward direction. Singly-linked lists are ideal + * for applications with large datasets and few or no removals or for + * implementing a LIFO queue. + * + * A singly-linked tail queue is headed by a pair of pointers, one to the + * head of the list and the other to the tail of the list. The elements are + * singly linked for minimum space and pointer manipulation overhead at the + * expense of O(n) removal for arbitrary elements. New elements can be added + * to the list after an existing element, at the head of the list, or at the + * end of the list. Elements being removed from the head of the tail queue + * should use the explicit macro for this purpose for optimum efficiency. + * A singly-linked tail queue may only be traversed in the forward direction. + * Singly-linked tail queues are ideal for applications with large datasets + * and few or no removals or for implementing a FIFO queue. + * + * A list is headed by a single forward pointer (or an array of forward + * pointers for a hash table header). The elements are doubly linked + * so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before + * or after an existing element or at the head of the list. A list + * may only be traversed in the forward direction. + * + * A tail queue is headed by a pair of pointers, one to the head of the + * list and the other to the tail of the list. The elements are doubly + * linked so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before or + * after an existing element, at the head of the list, or at the end of + * the list. A tail queue may be traversed in either direction. + * + * For details on the use of these macros, see the queue(3) manual page. + * + * + * SLIST LIST STAILQ TAILQ + * _HEAD + + + + + * _HEAD_INITIALIZER + + + + + * _ENTRY + + + + + * _INIT + + + + + * _EMPTY + + + + + * _FIRST + + + + + * _NEXT + + + + + * _PREV - - - + + * _LAST - - + + + * _FOREACH + + + + + * _FOREACH_SAFE + + + + + * _FOREACH_REVERSE - - - + + * _FOREACH_REVERSE_SAFE - - - + + * _INSERT_HEAD + + + + + * _INSERT_BEFORE - + - + + * _INSERT_AFTER + + + + + * _INSERT_TAIL - - + + + * _CONCAT - - + + + * _REMOVE_HEAD + - + - + * _REMOVE + + + + + * + */ + +/* + * Singly-linked List declarations. + */ +#define SLIST_HEAD(name, type) \ +struct name { \ + struct type *slh_first; /* first element */ \ +} + +#define SLIST_HEAD_INITIALIZER(head) \ + { NULL } + +#define SLIST_ENTRY(type) \ +struct { \ + struct type *sle_next; /* next element */ \ +} + +/* + * Singly-linked List functions. + */ +#define SLIST_EMPTY(head) ((head)->slh_first == NULL) + +#define SLIST_FIRST(head) ((head)->slh_first) + +#define SLIST_FOREACH(var, head, field) \ + for ((var) = SLIST_FIRST((head)); \ + (var); \ + (var) = SLIST_NEXT((var), field)) + +#define SLIST_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = SLIST_FIRST((head)); \ + (var) && ((tvar) = SLIST_NEXT((var), field), 1); \ + (var) = (tvar)) + +#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \ + for ((varp) = &SLIST_FIRST((head)); \ + ((var) = *(varp)) != NULL; \ + (varp) = &SLIST_NEXT((var), field)) + +#define SLIST_INIT(head) do { \ + SLIST_FIRST((head)) = NULL; \ +} while (0) + +#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ + SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field); \ + SLIST_NEXT((slistelm), field) = (elm); \ +} while (0) + +#define SLIST_INSERT_HEAD(head, elm, field) do { \ + SLIST_NEXT((elm), field) = SLIST_FIRST((head)); \ + SLIST_FIRST((head)) = (elm); \ +} while (0) + +#define SLIST_NEXT(elm, field) ((elm)->field.sle_next) + +#define SLIST_REMOVE(head, elm, type, field) do { \ + if (SLIST_FIRST((head)) == (elm)) { \ + SLIST_REMOVE_HEAD((head), field); \ + } \ + else { \ + struct type *curelm = SLIST_FIRST((head)); \ + while (SLIST_NEXT(curelm, field) != (elm)) \ + curelm = SLIST_NEXT(curelm, field); \ + SLIST_NEXT(curelm, field) = \ + SLIST_NEXT(SLIST_NEXT(curelm, field), field); \ + } \ +} while (0) + +#define SLIST_REMOVE_HEAD(head, field) do { \ + SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \ +} while (0) + +/* + * Singly-linked Tail queue declarations. + */ +#define STAILQ_HEAD(name, type) \ +struct name { \ + struct type *stqh_first;/* first element */ \ + struct type **stqh_last;/* addr of last next element */ \ +} + +#define STAILQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).stqh_first } + +#define STAILQ_ENTRY(type) \ +struct { \ + struct type *stqe_next; /* next element */ \ +} + +/* + * Singly-linked Tail queue functions. + */ +#define STAILQ_CONCAT(head1, head2) do { \ + if (!STAILQ_EMPTY((head2))) { \ + *(head1)->stqh_last = (head2)->stqh_first; \ + (head1)->stqh_last = (head2)->stqh_last; \ + STAILQ_INIT((head2)); \ + } \ +} while (0) + +#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL) + +#define STAILQ_FIRST(head) ((head)->stqh_first) + +#define STAILQ_FOREACH(var, head, field) \ + for((var) = STAILQ_FIRST((head)); \ + (var); \ + (var) = STAILQ_NEXT((var), field)) + + +#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = STAILQ_FIRST((head)); \ + (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) + +#define STAILQ_INIT(head) do { \ + STAILQ_FIRST((head)) = NULL; \ + (head)->stqh_last = &STAILQ_FIRST((head)); \ +} while (0) + +#define STAILQ_INSERT_AFTER(head, tqelm, elm, field) do { \ + if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\ + (head)->stqh_last = &STAILQ_NEXT((elm), field); \ + STAILQ_NEXT((tqelm), field) = (elm); \ +} while (0) + +#define STAILQ_INSERT_HEAD(head, elm, field) do { \ + if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \ + (head)->stqh_last = &STAILQ_NEXT((elm), field); \ + STAILQ_FIRST((head)) = (elm); \ +} while (0) + +#define STAILQ_INSERT_TAIL(head, elm, field) do { \ + STAILQ_NEXT((elm), field) = NULL; \ + *(head)->stqh_last = (elm); \ + (head)->stqh_last = &STAILQ_NEXT((elm), field); \ +} while (0) + +#define STAILQ_LAST(head, type, field) \ + (STAILQ_EMPTY((head)) ? \ + NULL : \ + ((struct type *) \ + ((char *)((head)->stqh_last) - offsetof(struct type, field)))) + +#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next) + +#define STAILQ_REMOVE(head, elm, type, field) do { \ + if (STAILQ_FIRST((head)) == (elm)) { \ + STAILQ_REMOVE_HEAD((head), field); \ + } \ + else { \ + struct type *curelm = STAILQ_FIRST((head)); \ + while (STAILQ_NEXT(curelm, field) != (elm)) \ + curelm = STAILQ_NEXT(curelm, field); \ + if ((STAILQ_NEXT(curelm, field) = \ + STAILQ_NEXT(STAILQ_NEXT(curelm, field), field)) == NULL)\ + (head)->stqh_last = &STAILQ_NEXT((curelm), field);\ + } \ +} while (0) + +#define STAILQ_REMOVE_HEAD(head, field) do { \ + if ((STAILQ_FIRST((head)) = \ + STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \ + (head)->stqh_last = &STAILQ_FIRST((head)); \ +} while (0) + +#define STAILQ_REMOVE_HEAD_UNTIL(head, elm, field) do { \ + if ((STAILQ_FIRST((head)) = STAILQ_NEXT((elm), field)) == NULL) \ + (head)->stqh_last = &STAILQ_FIRST((head)); \ +} while (0) + +/* + * List declarations. + */ +#define LIST_HEAD(name, type) \ +struct name { \ + struct type *lh_first; /* first element */ \ +} + +#define LIST_HEAD_INITIALIZER(head) \ + { NULL } + +#define LIST_ENTRY(type) \ +struct { \ + struct type *le_next; /* next element */ \ + struct type **le_prev; /* address of previous next element */ \ +} + +/* + * List functions. + */ + +#define LIST_EMPTY(head) ((head)->lh_first == NULL) + +#define LIST_FIRST(head) ((head)->lh_first) + +#define LIST_FOREACH(var, head, field) \ + for ((var) = LIST_FIRST((head)); \ + (var); \ + (var) = LIST_NEXT((var), field)) + +#define LIST_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = LIST_FIRST((head)); \ + (var) && ((tvar) = LIST_NEXT((var), field), 1); \ + (var) = (tvar)) + +#define LIST_INIT(head) do { \ + LIST_FIRST((head)) = NULL; \ +} while (0) + +#define LIST_INSERT_AFTER(listelm, elm, field) do { \ + if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\ + LIST_NEXT((listelm), field)->field.le_prev = \ + &LIST_NEXT((elm), field); \ + LIST_NEXT((listelm), field) = (elm); \ + (elm)->field.le_prev = &LIST_NEXT((listelm), field); \ +} while (0) + +#define LIST_INSERT_BEFORE(listelm, elm, field) do { \ + (elm)->field.le_prev = (listelm)->field.le_prev; \ + LIST_NEXT((elm), field) = (listelm); \ + *(listelm)->field.le_prev = (elm); \ + (listelm)->field.le_prev = &LIST_NEXT((elm), field); \ +} while (0) + +#define LIST_INSERT_HEAD(head, elm, field) do { \ + if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL) \ + LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\ + LIST_FIRST((head)) = (elm); \ + (elm)->field.le_prev = &LIST_FIRST((head)); \ +} while (0) + +#define LIST_NEXT(elm, field) ((elm)->field.le_next) + +#define LIST_REMOVE(elm, field) do { \ + if (LIST_NEXT((elm), field) != NULL) \ + LIST_NEXT((elm), field)->field.le_prev = \ + (elm)->field.le_prev; \ + *(elm)->field.le_prev = LIST_NEXT((elm), field); \ +} while (0) + +/* + * Tail queue declarations. + */ +#define TAILQ_HEAD(name, type) \ +struct name { \ + struct type *tqh_first; /* first element */ \ + struct type **tqh_last; /* addr of last next element */ \ +} + +#define TAILQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).tqh_first } + +#define TAILQ_ENTRY(type) \ +struct { \ + struct type *tqe_next; /* next element */ \ + struct type **tqe_prev; /* address of previous next element */ \ +} + +/* + * Tail queue functions. + */ +#define TAILQ_CONCAT(head1, head2, field) do { \ + if (!TAILQ_EMPTY(head2)) { \ + *(head1)->tqh_last = (head2)->tqh_first; \ + (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \ + (head1)->tqh_last = (head2)->tqh_last; \ + TAILQ_INIT((head2)); \ + } \ +} while (0) + +#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL) + +#define TAILQ_FIRST(head) ((head)->tqh_first) + +#define TAILQ_FOREACH(var, head, field) \ + for ((var) = TAILQ_FIRST((head)); \ + (var); \ + (var) = TAILQ_NEXT((var), field)) + +#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) + +#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ + for ((var) = TAILQ_LAST((head), headname); \ + (var); \ + (var) = TAILQ_PREV((var), headname, field)) + +#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ + for ((var) = TAILQ_LAST((head), headname); \ + (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \ + (var) = (tvar)) + +#define TAILQ_INIT(head) do { \ + TAILQ_FIRST((head)) = NULL; \ + (head)->tqh_last = &TAILQ_FIRST((head)); \ +} while (0) + +#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ + if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\ + TAILQ_NEXT((elm), field)->field.tqe_prev = \ + &TAILQ_NEXT((elm), field); \ + else { \ + (head)->tqh_last = &TAILQ_NEXT((elm), field); \ + } \ + TAILQ_NEXT((listelm), field) = (elm); \ + (elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field); \ +} while (0) + +#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ + (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ + TAILQ_NEXT((elm), field) = (listelm); \ + *(listelm)->field.tqe_prev = (elm); \ + (listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field); \ +} while (0) + +#define TAILQ_INSERT_HEAD(head, elm, field) do { \ + if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL) \ + TAILQ_FIRST((head))->field.tqe_prev = \ + &TAILQ_NEXT((elm), field); \ + else \ + (head)->tqh_last = &TAILQ_NEXT((elm), field); \ + TAILQ_FIRST((head)) = (elm); \ + (elm)->field.tqe_prev = &TAILQ_FIRST((head)); \ +} while (0) + +#define TAILQ_INSERT_TAIL(head, elm, field) do { \ + TAILQ_NEXT((elm), field) = NULL; \ + (elm)->field.tqe_prev = (head)->tqh_last; \ + *(head)->tqh_last = (elm); \ + (head)->tqh_last = &TAILQ_NEXT((elm), field); \ +} while (0) + +#define TAILQ_LAST(head, headname) \ + (*(((struct headname *)((head)->tqh_last))->tqh_last)) + +#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) + +#define TAILQ_PREV(elm, headname, field) \ + (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) + +#define TAILQ_REMOVE(head, elm, field) do { \ + if ((TAILQ_NEXT((elm), field)) != NULL) \ + TAILQ_NEXT((elm), field)->field.tqe_prev = \ + (elm)->field.tqe_prev; \ + else { \ + (head)->tqh_last = (elm)->field.tqe_prev; \ + } \ + *(elm)->field.tqe_prev = TAILQ_NEXT((elm), field); \ +} while (0) + +#endif /* !SYS_QUEUE_H */ diff --git a/third-party/yasm/yasm-1.3.0/libyasm/coretype.h b/third-party/yasm/yasm-1.3.0/libyasm/coretype.h new file mode 100644 index 0000000000..624e3c445c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/coretype.h @@ -0,0 +1,393 @@ +/** + * \file libyasm/coretype.h + * \brief YASM core types and utility functions. + * + * \license + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_CORETYPE_H +#define YASM_CORETYPE_H + +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +/** Architecture instance (mostly opaque type). \see arch.h for details. */ +typedef struct yasm_arch yasm_arch; +/** Preprocessor interface. \see preproc.h for details. */ +typedef struct yasm_preproc yasm_preproc; +/** Parser instance (mostly opaque type). \see parser.h for details. */ +typedef struct yasm_parser yasm_parser; +/** Object format interface. \see objfmt.h for details. */ +typedef struct yasm_objfmt yasm_objfmt; +/** Debug format interface. \see dbgfmt.h for details. */ +typedef struct yasm_dbgfmt yasm_dbgfmt; +/** List format interface. \see listfmt.h for details. */ +typedef struct yasm_listfmt yasm_listfmt; + +/** Object format module interface. \see objfmt.h for details. */ +typedef struct yasm_objfmt_module yasm_objfmt_module; +/** Debug format module interface. \see dbgfmt.h for details. */ +typedef struct yasm_dbgfmt_module yasm_dbgfmt_module; + +/** Standard macro structure for modules that allows association of a set of + * standard macros with a parser/preprocessor combination. + * A NULL-terminated array of these structures is used in a number of module + * interfaces. + */ +typedef struct yasm_stdmac { + const char *parser; /**< Parser keyword */ + const char *preproc; /**< Preprocessor keyword */ + + /** NULL-terminated array of standard macros. May be NULL if no standard + * macros should be added for this preprocessor. + */ + const char **macros; +} yasm_stdmac; + +/** YASM associated data callback structure. Many data structures can have + * arbitrary data associated with them. + */ +typedef struct yasm_assoc_data_callback { + /** Free memory allocated for associated data. + * \param data associated data + */ + void (*destroy) (/*@only@*/ void *data); + + /** Print a description of allocated data. For debugging purposes. + * \param data associated data + * \param f output file + * \param indent_level indentation level + */ + void (*print) (void *data, FILE *f, int indent_level); +} yasm_assoc_data_callback; + +/** Set of collected error/warnings (opaque type). + * \see errwarn.h for details. + */ +typedef struct yasm_errwarns yasm_errwarns; + +/** Bytecode. \see bytecode.h for details and related functions. */ +typedef struct yasm_bytecode yasm_bytecode; + +/** Object. \see section.h for details and related functions. */ +typedef struct yasm_object yasm_object; + +/** Section (opaque type). \see section.h for related functions. */ +typedef struct yasm_section yasm_section; + +/** Symbol table (opaque type). \see symrec.h for related functions. */ +typedef struct yasm_symtab yasm_symtab; + +/** Symbol record (opaque type). \see symrec.h for related functions. */ +typedef struct yasm_symrec yasm_symrec; + +/** Expression. \see expr.h for details and related functions. */ +typedef struct yasm_expr yasm_expr; +/** Integer value (opaque type). \see intnum.h for related functions. */ +typedef struct yasm_intnum yasm_intnum; +/** Floating point value (opaque type). + * \see floatnum.h for related functions. + */ +typedef struct yasm_floatnum yasm_floatnum; + +/** A value. May be absolute or relative. Outside the parser, yasm_expr + * should only be used for absolute exprs. Anything that could contain + * a relocatable value should use this structure instead. + * \see value.h for related functions. + */ +typedef struct yasm_value { + /** The absolute portion of the value. May contain *differences* between + * symrecs but not standalone symrecs. May be NULL if there is no + * absolute portion (e.g. the absolute portion is 0). + */ + /*@null@*/ /*@only@*/ yasm_expr *abs; + + /** The relative portion of the value. This is the portion that may + * need to generate a relocation. May be NULL if no relative portion. + */ + /*@null@*/ /*@dependent@*/ yasm_symrec *rel; + + /** What the relative portion is in reference to. NULL if the default. */ + /*@null@*/ /*@dependent@*/ yasm_symrec *wrt; + + /** If the segment of the relative portion should be used, not the + * relative portion itself. Boolean. + */ + unsigned int seg_of : 1; + + /** If the relative portion of the value should be shifted right + * (supported only by a few object formats). If just the absolute portion + * should be shifted, that must be in the abs expr, not here! + */ + unsigned int rshift : 7; + + /** Indicates the relative portion of the value should be relocated + * relative to the current assembly position rather than relative to the + * section start. "Current assembly position" here refers to the starting + * address of the bytecode containing this value. Boolean. + */ + unsigned int curpos_rel : 1; + + /** Indicates that curpos_rel was set due to IP-relative relocation; + * in some objfmt/arch combinations (e.g. win64/x86-amd64) this info + * is needed to generate special relocations. + */ + unsigned int ip_rel : 1; + + /** Indicates the value is a jump target address (rather than a simple + * data address). In some objfmt/arch combinations (e.g. macho/amd64) + * this info is needed to generate special relocations. + */ + unsigned int jump_target : 1; + + /** Indicates the relative portion of the value should be relocated + * relative to its own section start rather than relative to the + * section start of the bytecode containing this value. E.g. the value + * resulting from the relative portion should be the offset from its + * section start. Boolean. + */ + unsigned int section_rel : 1; + + /** Indicates overflow warnings have been disabled for this value. */ + unsigned int no_warn : 1; + + /** Sign of the value. Nonzero if the final value should be treated as + * signed, 0 if it should be treated as signed. + */ + unsigned int sign : 1; + + /** Size of the value, in bits. */ + unsigned int size : 8; +} yasm_value; + +/** Maximum value of #yasm_value.rshift */ +#define YASM_VALUE_RSHIFT_MAX 127 + +/** Line number mapping repository (opaque type). \see linemap.h for related + * functions. + */ +typedef struct yasm_linemap yasm_linemap; + +/** Value/parameter pair (opaque type). + * \see valparam.h for related functions. + */ +typedef struct yasm_valparam yasm_valparam; +/** List of value/parameters (opaque type). + * \see valparam.h for related functions. + */ +typedef struct yasm_valparamhead yasm_valparamhead; +/** Directive list entry. + * \see valparam.h for details and related functions. + */ +typedef struct yasm_directive yasm_directive; + +/** An effective address. + * \see insn.h for related functions. + */ +typedef struct yasm_effaddr yasm_effaddr; + +/** An instruction. + * \see insn.h for related functions. + */ +typedef struct yasm_insn yasm_insn; + +/** Expression operators usable in #yasm_expr expressions. */ +typedef enum yasm_expr_op { + YASM_EXPR_IDENT, /**< No operation, just a value. */ + YASM_EXPR_ADD, /**< Arithmetic addition (+). */ + YASM_EXPR_SUB, /**< Arithmetic subtraction (-). */ + YASM_EXPR_MUL, /**< Arithmetic multiplication (*). */ + YASM_EXPR_DIV, /**< Arithmetic unsigned division. */ + YASM_EXPR_SIGNDIV, /**< Arithmetic signed division. */ + YASM_EXPR_MOD, /**< Arithmetic unsigned modulus. */ + YASM_EXPR_SIGNMOD, /**< Arithmetic signed modulus. */ + YASM_EXPR_NEG, /**< Arithmetic negation (-). */ + YASM_EXPR_NOT, /**< Bitwise negation. */ + YASM_EXPR_OR, /**< Bitwise OR. */ + YASM_EXPR_AND, /**< Bitwise AND. */ + YASM_EXPR_XOR, /**< Bitwise XOR. */ + YASM_EXPR_XNOR, /**< Bitwise XNOR. */ + YASM_EXPR_NOR, /**< Bitwise NOR. */ + YASM_EXPR_SHL, /**< Shift left (logical). */ + YASM_EXPR_SHR, /**< Shift right (logical). */ + YASM_EXPR_LOR, /**< Logical OR. */ + YASM_EXPR_LAND, /**< Logical AND. */ + YASM_EXPR_LNOT, /**< Logical negation. */ + YASM_EXPR_LXOR, /**< Logical XOR. */ + YASM_EXPR_LXNOR, /**< Logical XNOR. */ + YASM_EXPR_LNOR, /**< Logical NOR. */ + YASM_EXPR_LT, /**< Less than comparison. */ + YASM_EXPR_GT, /**< Greater than comparison. */ + YASM_EXPR_EQ, /**< Equality comparison. */ + YASM_EXPR_LE, /**< Less than or equal to comparison. */ + YASM_EXPR_GE, /**< Greater than or equal to comparison. */ + YASM_EXPR_NE, /**< Not equal comparison. */ + YASM_EXPR_NONNUM, /**< Start of non-numeric operations (not an op). */ + YASM_EXPR_SEG, /**< SEG operator (gets segment portion of address). */ + YASM_EXPR_WRT, /**< WRT operator (gets offset of address relative to + * some other segment). */ + YASM_EXPR_SEGOFF /**< The ':' in segment:offset. */ +} yasm_expr_op; + +/** Convert yasm_value to its byte representation. Usually implemented by + * object formats to keep track of relocations and verify legal expressions. + * Must put the value into the least significant bits of the destination, + * unless shifted into more significant bits by the shift parameter. The + * destination bits must be cleared before being set. + * \param value value + * \param buf buffer for byte representation + * \param destsize destination size (in bytes) + * \param offset offset (in bytes) of the expr contents from the start + * of the bytecode (needed for relative) + * \param bc current bytecode (usually passed into higher-level + * calling function) + * \param warn enables standard warnings: zero for none; + * nonzero for overflow/underflow floating point warnings + * \param d objfmt-specific data (passed into higher-level calling + * function) + * \return Nonzero if an error occurred, 0 otherwise. + */ +typedef int (*yasm_output_value_func) + (yasm_value *value, /*@out@*/ unsigned char *buf, unsigned int destsize, + unsigned long offset, yasm_bytecode *bc, int warn, /*@null@*/ void *d); + +/** Convert a symbol reference to its byte representation. Usually implemented + * by object formats and debug formats to keep track of relocations generated + * by themselves. + * \param sym symbol + * \param bc current bytecode (usually passed into higher-level + * calling function) + * \param buf buffer for byte representation + * \param destsize destination size (in bytes) + * \param valsize size (in bits) + * \param warn enables standard warnings: zero for none; + * nonzero for overflow/underflow floating point warnings; + * negative for signed integer warnings, + * positive for unsigned integer warnings + * \param d objfmt-specific data (passed into higher-level calling + * function) + * \return Nonzero if an error occurred, 0 otherwise. + */ +typedef int (*yasm_output_reloc_func) + (yasm_symrec *sym, yasm_bytecode *bc, unsigned char *buf, + unsigned int destsize, unsigned int valsize, int warn, void *d); + +/** Sort an array using merge sort algorithm. + * \internal + * \param base base of array + * \param nmemb number of elements in array + * \param size size of each array element + * \param compar element comparison function + */ +YASM_LIB_DECL +int yasm__mergesort(void *base, size_t nmemb, size_t size, + int (*compar)(const void *, const void *)); + +/** Separate string by delimiters. + * \internal + * \param stringp string + * \param delim set of 1 or more delimiters + * \return First/next substring. + */ +YASM_LIB_DECL +/*@null@*/ char *yasm__strsep(char **stringp, const char *delim); + +/** Compare two strings, ignoring case differences. + * \internal + * \param s1 string 1 + * \param s2 string 2 + * \return 0 if strings are equal, -1 if s1s2. + */ +YASM_LIB_DECL +int yasm__strcasecmp(const char *s1, const char *s2); + +/** Compare portion of two strings, ignoring case differences. + * \internal + * \param s1 string 1 + * \param s2 string 2 + * \param n maximum number of characters to compare + * \return 0 if strings are equal, -1 if s1s2. + */ +YASM_LIB_DECL +int yasm__strncasecmp(const char *s1, const char *s2, size_t n); + +/** strdup() implementation using yasm_xmalloc(). + * \internal + * \param str string + * \return Newly allocated duplicate string. + */ +YASM_LIB_DECL +/*@only@*/ char *yasm__xstrdup(const char *str); + +/** strndup() implementation using yasm_xmalloc(). + * \internal + * \param str string + * \param max maximum number of characters to copy + * \return Newly allocated duplicate string. + */ +YASM_LIB_DECL +/*@only@*/ char *yasm__xstrndup(const char *str, size_t max); + +/** Error-checking memory allocation. A default implementation is provided + * that calls yasm_fatal() on allocation errors. + * A replacement should \em never return NULL. + * \param size number of bytes to allocate + * \return Allocated memory block. + */ +YASM_LIB_DECL +extern /*@only@*/ /*@out@*/ void * (*yasm_xmalloc) (size_t size); + +/** Error-checking memory allocation (with clear-to-0). A default + * implementation is provided that calls yasm_fatal() on allocation errors. + * A replacement should \em never return NULL. + * \param size number of elements to allocate + * \param elsize size (in bytes) of each element + * \return Allocated and cleared memory block. + */ +YASM_LIB_DECL +extern /*@only@*/ void * (*yasm_xcalloc) (size_t nelem, size_t elsize); + +/** Error-checking memory reallocation. A default implementation is provided + * that calls yasm_fatal() on allocation errors. A replacement should + * \em never return NULL. + * \param oldmem memory block to resize + * \param elsize new size, in bytes + * \return Re-allocated memory block. + */ +YASM_LIB_DECL +extern /*@only@*/ void * (*yasm_xrealloc) + (/*@only@*/ /*@out@*/ /*@returned@*/ /*@null@*/ void *oldmem, size_t size) + /*@modifies oldmem@*/; + +/** Error-checking memory deallocation. A default implementation is provided + * that calls yasm_fatal() on allocation errors. + * \param p memory block to free + */ +YASM_LIB_DECL +extern void (*yasm_xfree) (/*@only@*/ /*@out@*/ /*@null@*/ void *p) + /*@modifies p@*/; + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/dbgfmt.h b/third-party/yasm/yasm-1.3.0/libyasm/dbgfmt.h new file mode 100644 index 0000000000..8e038bbfdd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/dbgfmt.h @@ -0,0 +1,122 @@ +/** + * \file libyasm/dbgfmt.h + * \brief YASM debug format interface. + * + * \license + * Copyright (C) 2002-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_DBGFMT_H +#define YASM_DBGFMT_H + +#ifndef YASM_DOXYGEN +/** Base #yasm_dbgfmt structure. Must be present as the first element in any + * #yasm_dbgfmt implementation. + */ +typedef struct yasm_dbgfmt_base { + /** #yasm_dbgfmt_module implementation for this debug format. */ + const struct yasm_dbgfmt_module *module; +} yasm_dbgfmt_base; +#endif + +/** Debug format module interface. */ +struct yasm_dbgfmt_module { + /** One-line description of the debug format. */ + const char *name; + + /** Keyword used to select debug format. */ + const char *keyword; + + /** NULL-terminated list of directives. NULL if none. */ + /*@null@*/ const yasm_directive *directives; + + /** Create debug format. + * Module-level implementation of yasm_dbgfmt_create(). + * The filenames are provided solely for informational purposes. + * \param object object + * \return NULL if object format does not provide needed support. + */ + /*@null@*/ /*@only@*/ yasm_dbgfmt * (*create) (yasm_object *object); + + /** Module-level implementation of yasm_dbgfmt_destroy(). + * Call yasm_dbgfmt_destroy() instead of calling this function. + */ + void (*destroy) (/*@only@*/ yasm_dbgfmt *dbgfmt); + + /** Module-level implementation of yasm_dbgfmt_generate(). + * Call yasm_dbgfmt_generate() instead of calling this function. + */ + void (*generate) (yasm_object *object, yasm_linemap *linemap, + yasm_errwarns *errwarns); +}; + +/** Get the keyword used to select a debug format. + * \param dbgfmt debug format + * \return keyword + */ +const char *yasm_dbgfmt_keyword(const yasm_dbgfmt *dbgfmt); + +/** Initialize debug output for use. Must call before any other debug + * format functions. The filenames are provided solely for informational + * purposes. + * \param module debug format module + * \param object object to generate debugging information for + * \return NULL if object format does not provide needed support. + */ +/*@null@*/ /*@only@*/ yasm_dbgfmt *yasm_dbgfmt_create + (const yasm_dbgfmt_module *module, yasm_object *object); + +/** Cleans up any allocated debug format memory. + * \param dbgfmt debug format + */ +void yasm_dbgfmt_destroy(/*@only@*/ yasm_dbgfmt *dbgfmt); + +/** Generate debugging information bytecodes. + * \param object object + * \param linemap virtual/physical line mapping + * \param errwarns error/warning set + * \note Errors and warnings are stored into errwarns. + */ +void yasm_dbgfmt_generate(yasm_object *object, yasm_linemap *linemap, + yasm_errwarns *errwarns); + +#ifndef YASM_DOXYGEN + +/* Inline macro implementations for dbgfmt functions */ + +#define yasm_dbgfmt_keyword(dbgfmt) \ + (((yasm_dbgfmt_base *)dbgfmt)->module->keyword) + +#define yasm_dbgfmt_create(module, object) \ + module->create(object) + +#define yasm_dbgfmt_destroy(dbgfmt) \ + ((yasm_dbgfmt_base *)dbgfmt)->module->destroy(dbgfmt) +#define yasm_dbgfmt_generate(object, linemap, ews) \ + ((yasm_dbgfmt_base *)((object)->dbgfmt))->module->generate \ + (object, linemap, ews) + +#endif + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/errwarn.c b/third-party/yasm/yasm-1.3.0/libyasm/errwarn.c new file mode 100644 index 0000000000..d51a0debf4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/errwarn.c @@ -0,0 +1,529 @@ +/* + * Error and warning reporting and related functions. + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 "util.h" + +#include +#include + +#include "coretype.h" + +#include "linemap.h" +#include "errwarn.h" + + +#define MSG_MAXSIZE 1024 + +#if !defined(HAVE_TOASCII) || defined(lint) +# define toascii(c) ((c) & 0x7F) +#endif + +/* Default handlers for replacable functions */ +static /*@exits@*/ void def_internal_error_ + (const char *file, unsigned int line, const char *message); +static /*@exits@*/ void def_fatal(const char *message, va_list va); +static const char *def_gettext_hook(const char *msgid); + +/* Storage for errwarn's "extern" functions */ +/*@exits@*/ void (*yasm_internal_error_) + (const char *file, unsigned int line, const char *message) + = def_internal_error_; +/*@exits@*/ void (*yasm_fatal) (const char *message, va_list va) = def_fatal; +const char * (*yasm_gettext_hook) (const char *msgid) = def_gettext_hook; + +/* Error indicator */ +/* yasm_eclass is not static so that yasm_error_occurred macro can access it */ +yasm_error_class yasm_eclass; +static /*@only@*/ /*@null@*/ char *yasm_estr; +static unsigned long yasm_exrefline; +static /*@only@*/ /*@null@*/ char *yasm_exrefstr; + +/* Warning indicator */ +typedef struct warn { + /*@reldef@*/ STAILQ_ENTRY(warn) link; + + yasm_warn_class wclass; + /*@owned@*/ /*@null@*/ char *wstr; +} warn; +static STAILQ_HEAD(warn_head, warn) yasm_warns; + +/* Enabled warnings. See errwarn.h for a list. */ +static unsigned long warn_class_enabled; + +typedef struct errwarn_data { + /*@reldef@*/ SLIST_ENTRY(errwarn_data) link; + + enum { WE_UNKNOWN, WE_ERROR, WE_WARNING, WE_PARSERERROR } type; + + unsigned long line; + unsigned long xrefline; + /*@owned@*/ char *msg; + /*@owned@*/ char *xrefmsg; +} errwarn_data; + +struct yasm_errwarns { + /*@reldef@*/ SLIST_HEAD(errwarn_head, errwarn_data) errwarns; + + /* Total error count */ + unsigned int ecount; + + /* Total warning count */ + unsigned int wcount; + + /* Last inserted error/warning. Used to speed up insertions. */ + /*@null@*/ errwarn_data *previous_we; +}; + +/* Static buffer for use by conv_unprint(). */ +static char unprint[5]; + + +static const char * +def_gettext_hook(const char *msgid) +{ + return msgid; +} + +void +yasm_errwarn_initialize(void) +{ + /* Default enabled warnings. See errwarn.h for a list. */ + warn_class_enabled = + (1UL<previous_we; + first = SLIST_FIRST(&errwarns->errwarns); + if (!ins_we || !first) + action = INS_HEAD; + while (action == INS_NONE) { + next = SLIST_NEXT(ins_we, link); + if (line < ins_we->line) { + if (ins_we == first) + action = INS_HEAD; + else + ins_we = first; + } else if (!next) + action = INS_AFTER; + else if (line >= ins_we->line && line < next->line) + action = INS_AFTER; + else + ins_we = next; + } + + if (replace_parser_error && ins_we && ins_we->type == WE_PARSERERROR) { + /* overwrite last error */ + we = ins_we; + } else { + /* add a new error */ + we = yasm_xmalloc(sizeof(errwarn_data)); + + we->type = WE_UNKNOWN; + we->line = line; + we->xrefline = 0; + we->msg = NULL; + we->xrefmsg = NULL; + + if (action == INS_HEAD) + SLIST_INSERT_HEAD(&errwarns->errwarns, we, link); + else if (action == INS_AFTER) { + assert(ins_we != NULL); + SLIST_INSERT_AFTER(ins_we, we, link); + } else + yasm_internal_error(N_("Unexpected errwarn insert action")); + } + + /* Remember previous err/warn */ + errwarns->previous_we = we; + + return we; +} + +void +yasm_error_clear(void) +{ + if (yasm_estr) + yasm_xfree(yasm_estr); + if (yasm_exrefstr) + yasm_xfree(yasm_exrefstr); + yasm_eclass = YASM_ERROR_NONE; + yasm_estr = NULL; + yasm_exrefline = 0; + yasm_exrefstr = NULL; +} + +int +yasm_error_matches(yasm_error_class eclass) +{ + if (yasm_eclass == YASM_ERROR_NONE) + return eclass == YASM_ERROR_NONE; + if (yasm_eclass == YASM_ERROR_GENERAL) + return eclass == YASM_ERROR_GENERAL; + return (yasm_eclass & eclass) == eclass; +} + +void +yasm_error_set_va(yasm_error_class eclass, const char *format, va_list va) +{ + if (yasm_eclass != YASM_ERROR_NONE) + return; + + yasm_eclass = eclass; + yasm_estr = yasm_xmalloc(MSG_MAXSIZE+1); +#ifdef HAVE_VSNPRINTF + vsnprintf(yasm_estr, MSG_MAXSIZE, yasm_gettext_hook(format), va); +#else + vsprintf(yasm_estr, yasm_gettext_hook(format), va); +#endif +} + +void +yasm_error_set(yasm_error_class eclass, const char *format, ...) +{ + va_list va; + va_start(va, format); + yasm_error_set_va(eclass, format, va); + va_end(va); +} + +void +yasm_error_set_xref_va(unsigned long xrefline, const char *format, va_list va) +{ + if (yasm_eclass != YASM_ERROR_NONE) + return; + + yasm_exrefline = xrefline; + + yasm_exrefstr = yasm_xmalloc(MSG_MAXSIZE+1); +#ifdef HAVE_VSNPRINTF + vsnprintf(yasm_exrefstr, MSG_MAXSIZE, yasm_gettext_hook(format), va); +#else + vsprintf(yasm_exrefstr, yasm_gettext_hook(format), va); +#endif +} + +void +yasm_error_set_xref(unsigned long xrefline, const char *format, ...) +{ + va_list va; + va_start(va, format); + yasm_error_set_xref_va(xrefline, format, va); + va_end(va); +} + +void +yasm_error_fetch(yasm_error_class *eclass, char **str, unsigned long *xrefline, + char **xrefstr) +{ + *eclass = yasm_eclass; + *str = yasm_estr; + *xrefline = yasm_exrefline; + *xrefstr = yasm_exrefstr; + yasm_eclass = YASM_ERROR_NONE; + yasm_estr = NULL; + yasm_exrefline = 0; + yasm_exrefstr = NULL; +} + +void yasm_warn_clear(void) +{ + /* Delete all error/warnings */ + while (!STAILQ_EMPTY(&yasm_warns)) { + warn *w = STAILQ_FIRST(&yasm_warns); + + if (w->wstr) + yasm_xfree(w->wstr); + + STAILQ_REMOVE_HEAD(&yasm_warns, link); + yasm_xfree(w); + } +} + +yasm_warn_class +yasm_warn_occurred(void) +{ + if (STAILQ_EMPTY(&yasm_warns)) + return YASM_WARN_NONE; + return STAILQ_FIRST(&yasm_warns)->wclass; +} + +void +yasm_warn_set_va(yasm_warn_class wclass, const char *format, va_list va) +{ + warn *w; + + if (!(warn_class_enabled & (1UL<wclass = wclass; + w->wstr = yasm_xmalloc(MSG_MAXSIZE+1); +#ifdef HAVE_VSNPRINTF + vsnprintf(w->wstr, MSG_MAXSIZE, yasm_gettext_hook(format), va); +#else + vsprintf(w->wstr, yasm_gettext_hook(format), va); +#endif + STAILQ_INSERT_TAIL(&yasm_warns, w, link); +} + +void +yasm_warn_set(yasm_warn_class wclass, const char *format, ...) +{ + va_list va; + va_start(va, format); + yasm_warn_set_va(wclass, format, va); + va_end(va); +} + +void +yasm_warn_fetch(yasm_warn_class *wclass, char **str) +{ + warn *w = STAILQ_FIRST(&yasm_warns); + + if (!w) { + *wclass = YASM_WARN_NONE; + *str = NULL; + return; + } + + *wclass = w->wclass; + *str = w->wstr; + + STAILQ_REMOVE_HEAD(&yasm_warns, link); + yasm_xfree(w); +} + +void +yasm_warn_enable(yasm_warn_class num) +{ + warn_class_enabled |= (1UL<errwarns); + errwarns->ecount = 0; + errwarns->wcount = 0; + errwarns->previous_we = NULL; + return errwarns; +} + +void +yasm_errwarns_destroy(yasm_errwarns *errwarns) +{ + errwarn_data *we; + + /* Delete all error/warnings */ + while (!SLIST_EMPTY(&errwarns->errwarns)) { + we = SLIST_FIRST(&errwarns->errwarns); + if (we->msg) + yasm_xfree(we->msg); + if (we->xrefmsg) + yasm_xfree(we->xrefmsg); + + SLIST_REMOVE_HEAD(&errwarns->errwarns, link); + yasm_xfree(we); + } + + yasm_xfree(errwarns); +} + +void +yasm_errwarn_propagate(yasm_errwarns *errwarns, unsigned long line) +{ + if (yasm_eclass != YASM_ERROR_NONE) { + errwarn_data *we = errwarn_data_new(errwarns, line, 1); + yasm_error_class eclass; + + yasm_error_fetch(&eclass, &we->msg, &we->xrefline, &we->xrefmsg); + if (eclass != YASM_ERROR_GENERAL + && (eclass & YASM_ERROR_PARSE) == YASM_ERROR_PARSE) + we->type = WE_PARSERERROR; + else + we->type = WE_ERROR; + errwarns->ecount++; + } + + while (!STAILQ_EMPTY(&yasm_warns)) { + errwarn_data *we = errwarn_data_new(errwarns, line, 0); + yasm_warn_class wclass; + + yasm_warn_fetch(&wclass, &we->msg); + we->type = WE_WARNING; + errwarns->wcount++; + } +} + +unsigned int +yasm_errwarns_num_errors(yasm_errwarns *errwarns, int warning_as_error) +{ + if (warning_as_error) + return errwarns->ecount+errwarns->wcount; + else + return errwarns->ecount; +} + +void +yasm_errwarns_output_all(yasm_errwarns *errwarns, yasm_linemap *lm, + int warning_as_error, + yasm_print_error_func print_error, + yasm_print_warning_func print_warning) +{ + errwarn_data *we; + const char *filename, *xref_filename; + unsigned long line, xref_line; + + /* If we're treating warnings as errors, tell the user about it. */ + if (warning_as_error && warning_as_error != 2) { + print_error("", 0, + yasm_gettext_hook(N_("warnings being treated as errors")), + NULL, 0, NULL); + warning_as_error = 2; + } + + /* Output error/warnings. */ + SLIST_FOREACH(we, &errwarns->errwarns, link) { + /* Output error/warning */ + yasm_linemap_lookup(lm, we->line, &filename, &line); + if (we->xrefline) + yasm_linemap_lookup(lm, we->xrefline, &xref_filename, &xref_line); + else { + xref_filename = NULL; + xref_line = 0; + } + if (we->type == WE_ERROR || we->type == WE_PARSERERROR) + print_error(filename, line, we->msg, xref_filename, xref_line, + we->xrefmsg); + else + print_warning(filename, line, we->msg); + } +} + +void +yasm__fatal(const char *message, ...) +{ + va_list va; + va_start(va, message); + yasm_fatal(message, va); + /*@notreached@*/ + va_end(va); +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/errwarn.h b/third-party/yasm/yasm-1.3.0/libyasm/errwarn.h new file mode 100644 index 0000000000..ede2f2872e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/errwarn.h @@ -0,0 +1,348 @@ +/** + * \file libyasm/errwarn.h + * \brief YASM error and warning reporting interface. + * + * \license + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_ERRWARN_H +#define YASM_ERRWARN_H + +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +/** Warning classes (that may be enabled/disabled). */ +typedef enum yasm_warn_class { + YASM_WARN_NONE = 0, /**< No warning */ + YASM_WARN_GENERAL, /**< Non-specific warnings */ + YASM_WARN_UNREC_CHAR, /**< Unrecognized characters (while tokenizing) */ + YASM_WARN_PREPROC, /**< Preprocessor warnings */ + YASM_WARN_ORPHAN_LABEL, /**< Label alone on a line without a colon */ + YASM_WARN_UNINIT_CONTENTS, /**< Uninitialized space in code/data section */ + YASM_WARN_SIZE_OVERRIDE,/**< Double size override */ + YASM_WARN_IMPLICIT_SIZE_OVERRIDE /**< Implicit size override */ +} yasm_warn_class; + +/** Error classes. Bitmask-based to support limited subclassing. */ +typedef enum yasm_error_class { + YASM_ERROR_NONE = 0x0000, /**< No error */ + YASM_ERROR_GENERAL = 0xFFFF, /**< Non-specific */ + YASM_ERROR_ARITHMETIC = 0x0001, /**< Arithmetic error (general) */ + YASM_ERROR_OVERFLOW = 0x8001, /**< Arithmetic overflow */ + YASM_ERROR_FLOATING_POINT = 0x4001, /**< Floating point error */ + YASM_ERROR_ZERO_DIVISION = 0x2001, /**< Divide-by-zero */ + YASM_ERROR_ASSERTION = 0x0002, /**< Assertion error */ + YASM_ERROR_VALUE = 0x0004, /**< Value inappropriate + * (e.g. not in range) */ + YASM_ERROR_NOT_ABSOLUTE = 0x8004, /**< Absolute expression required */ + YASM_ERROR_TOO_COMPLEX = 0x4004, /**< Expression too complex */ + YASM_ERROR_NOT_CONSTANT = 0x2004, /**< Constant expression required */ + YASM_ERROR_IO = 0x0008, /**< I/O error */ + YASM_ERROR_NOT_IMPLEMENTED = 0x0010, /**< Not implemented error */ + YASM_ERROR_TYPE = 0x0020, /**< Type error */ + YASM_ERROR_SYNTAX = 0x0040, /**< Syntax error */ + YASM_ERROR_PARSE = 0x8040 /**< Parser error */ +} yasm_error_class; + +/** Initialize any internal data structures. */ +YASM_LIB_DECL +void yasm_errwarn_initialize(void); + +/** Clean up any memory allocated by yasm_errwarn_initialize() or other + * functions. + */ +YASM_LIB_DECL +void yasm_errwarn_cleanup(void); + +/** Reporting point of internal errors. These are usually due to sanity + * check failures in the code. + * \warning This function must NOT return to calling code; exit or longjmp + * instead. + * \param file source file (ala __FILE__) + * \param line source line (ala __LINE__) + * \param message internal error message + */ +YASM_LIB_DECL +extern /*@exits@*/ void (*yasm_internal_error_) + (const char *file, unsigned int line, const char *message); + +/** Easily-callable version of yasm_internal_error_(). Automatically uses + * __FILE__ and __LINE__ as the file and line. + * \param message internal error message + */ +#define yasm_internal_error(message) \ + yasm_internal_error_(__FILE__, __LINE__, message) + +/** Reporting point of fatal errors. + * \warning This function must NOT return to calling code; exit or longjmp + * instead. + * \param message fatal error message + * \param va va_list argument list for message + */ +YASM_LIB_DECL +extern /*@exits@*/ void (*yasm_fatal) (const char *message, va_list va); + +/** Reporting point of fatal errors, with variable arguments (internal only). + * \warning This function calls #yasm_fatal, and thus does not return to the + * calling code. + * \param message fatal error message + * \param ... argument list for message + */ +YASM_LIB_DECL +/*@exits@*/ void yasm__fatal(const char *message, ...); + +/** Unconditionally clear the error indicator, freeing any associated data. + * Has no effect if the error indicator is not set. + */ +YASM_LIB_DECL +void yasm_error_clear(void); + +/** Get the error indicator. YASM_ERROR_NONE is returned if no error has + * been set. Note that as YASM_ERROR_NONE is 0, the return value can also + * be treated as a boolean value. + * \return Current error indicator. + */ +yasm_error_class yasm_error_occurred(void); + +/** Check the error indicator against an error class. To check if any error + * has been set, check against the YASM_ERROR_GENERAL class. This function + * properly checks error subclasses. + * \param eclass base error class to check against + * \return Nonzero if error indicator is set and a subclass of eclass, 0 + * otherwise. + */ +YASM_LIB_DECL +int yasm_error_matches(yasm_error_class eclass); + +#ifndef YASM_DOXYGEN +YASM_LIB_DECL +extern yasm_error_class yasm_eclass; +#define yasm_error_occurred() yasm_eclass +#endif + +/** Set the error indicator (va_list version). Has no effect if the error + * indicator is already set. + * \param eclass error class + * \param format printf format string + * \param va argument list for format + */ +YASM_LIB_DECL +void yasm_error_set_va(yasm_error_class eclass, const char *format, va_list va); + +/** Set the error indicator. Has no effect if the error indicator is already + * set. + * \param eclass error class + * \param format printf format string + * \param ... argument list for format + */ +YASM_LIB_DECL +void yasm_error_set(yasm_error_class eclass, const char *format, ...) + /*@printflike@*/; + +/** Set a cross-reference for a new error (va_list version). Has no effect + * if the error indicator is already set (e.g. with yasm_error_set()). This + * function must be called prior to its corresponding yasm_error_set() call. + * \param xrefline virtual line to cross-reference to (should not be 0) + * \param format printf format string + * \param va argument list for format + */ +YASM_LIB_DECL +void yasm_error_set_xref_va(unsigned long xrefline, const char *format, + va_list va); + +/** Set a cross-reference for a new error. Has no effect if the error + * indicator is already set (e.g. with yasm_error_set()). This function + * must be called prior to its corresponding yasm_error_set() call. + * \param xrefline virtual line to cross-reference to (should not be 0) + * \param format printf format string + * \param ... argument list for format + */ +YASM_LIB_DECL +void yasm_error_set_xref(unsigned long xrefline, const char *format, ...) + /*@printflike@*/; + +/** Fetch the error indicator and all associated data. If the error + * indicator is set, the output pointers are set to the current error + * indicator values, and the error indicator is cleared. + * The code using this function is then responsible for yasm_xfree()'ing + * str and xrefstr (if non-NULL). If the error indicator is not set, + * all output values are set to 0 (including eclass, which is set to + * YASM_ERROR_NONE). + * \param eclass error class (output) + * \param str error message + * \param xrefline virtual line used for cross-referencing (0 if no xref) + * \param xrefstr cross-reference error message (NULL if no xref) + */ +YASM_LIB_DECL +void yasm_error_fetch(/*@out@*/ yasm_error_class *eclass, + /*@out@*/ /*@only@*/ /*@null@*/ char **str, + /*@out@*/ unsigned long *xrefline, + /*@out@*/ /*@only@*/ /*@null@*/ char **xrefstr); + +/** Unconditionally clear all warning indicators, freeing any associated data. + * Has no effect if no warning indicators have been set. + */ +YASM_LIB_DECL +void yasm_warn_clear(void); + +/** Get the first warning indicator. YASM_WARN_NONE is returned if no warning + * has been set. Note that as YASM_WARN_NONE is 0, the return value can also + * be treated as a boolean value. + * \return First warning indicator. + */ +YASM_LIB_DECL +yasm_warn_class yasm_warn_occurred(void); + +/** Add a warning indicator (va_list version). + * \param wclass warning class + * \param format printf format string + * \param va argument list for format + */ +YASM_LIB_DECL +void yasm_warn_set_va(yasm_warn_class wclass, const char *format, va_list va); + +/** Add a warning indicator. + * \param wclass warning class + * \param format printf format string + * \param ... argument list for format + */ +YASM_LIB_DECL +void yasm_warn_set(yasm_warn_class wclass, const char *format, ...) + /*@printflike@*/; + +/** Fetch the first warning indicator and all associated data. If there + * is at least one warning indicator, the output pointers are set to the + * first warning indicator values, and first warning indicator is removed. + * The code using this function is then responsible for yasm_xfree()'ing + * str and xrefstr (if non-NULL). If there is no warning indicator set, + * all output values are set to 0 (including wclass, which is set to + * YASM_WARN_NONE). + * \param wclass warning class (output) + * \param str warning message + */ +YASM_LIB_DECL +void yasm_warn_fetch(/*@out@*/ yasm_warn_class *wclass, + /*@out@*/ /*@only@*/ char **str); + +/** Enable a class of warnings. + * \param wclass warning class + */ +YASM_LIB_DECL +void yasm_warn_enable(yasm_warn_class wclass); + +/** Disable a class of warnings. + * \param wclass warning class + */ +YASM_LIB_DECL +void yasm_warn_disable(yasm_warn_class wclass); + +/** Disable all classes of warnings. */ +YASM_LIB_DECL +void yasm_warn_disable_all(void); + +/** Create an error/warning set for collection of multiple error/warnings. + * \return Newly allocated set. + */ +YASM_LIB_DECL +/*@only@*/ yasm_errwarns *yasm_errwarns_create(void); + +/** Destroy an error/warning set. + * \param errwarns error/warning set + */ +YASM_LIB_DECL +void yasm_errwarns_destroy(/*@only@*/ yasm_errwarns *errwarns); + +/** Propagate error indicator and warning indicator(s) to an error/warning set. + * Has no effect if the error indicator and warning indicator are not set. + * Does not print immediately; yasm_errwarn_output_all() outputs + * accumulated errors and warnings. + * Generally multiple errors on the same line will be reported, but errors + * of class YASM_ERROR_PARSE will get overwritten by any other class on the + * same line. + * \param errwarns error/warning set + * \param line virtual line + */ +YASM_LIB_DECL +void yasm_errwarn_propagate(yasm_errwarns *errwarns, unsigned long line); + +/** Get total number of errors logged. + * \param errwarns error/warning set + * \param warning_as_error if nonzero, warnings are treated as errors. + * \return Number of errors. + */ +YASM_LIB_DECL +unsigned int yasm_errwarns_num_errors(yasm_errwarns *errwarns, + int warning_as_error); + +/** Print out an error. + * \param fn filename of source file + * \param line line number + * \param msg error message + * \param xref_fn cross-referenced source filename + * \param xref_line cross-referenced line number + * \param xref_msg cross-referenced error message + */ +typedef void (*yasm_print_error_func) + (const char *fn, unsigned long line, const char *msg, + /*@null@*/ const char *xref_fn, unsigned long xref_line, + /*@null@*/ const char *xref_msg); + +/** Print out a warning. + * \param fn filename of source file + * \param line line number + * \param msg warning message + */ +typedef void (*yasm_print_warning_func) + (const char *fn, unsigned long line, const char *msg); + +/** Outputs error/warning set in sorted order (sorted by virtual line number). + * \param errwarns error/warning set + * \param lm line map (to convert virtual lines into filename/line pairs) + * \param warning_as_error if nonzero, treat warnings as errors. + * \param print_error function called to print out errors + * \param print_warning function called to print out warnings + */ +YASM_LIB_DECL +void yasm_errwarns_output_all + (yasm_errwarns *errwarns, yasm_linemap *lm, int warning_as_error, + yasm_print_error_func print_error, yasm_print_warning_func print_warning); + +/** Convert a possibly unprintable character into a printable string. + * \internal + * \param ch possibly unprintable character + * \return Printable string representation (static buffer). + */ +YASM_LIB_DECL +char *yasm__conv_unprint(int ch); + +/** Hook for library users to map to gettext() if GNU gettext is being used. + * \param msgid message catalog identifier + * \return Translated message. + */ +YASM_LIB_DECL +extern const char * (*yasm_gettext_hook) (const char *msgid); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/expr.c b/third-party/yasm/yasm-1.3.0/libyasm/expr.c new file mode 100644 index 0000000000..c2c868ede2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/expr.c @@ -0,0 +1,1516 @@ +/* + * Expression handling + * + * Copyright (C) 2001-2007 Michael Urman, Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 "util.h" + +#include "libyasm-stdint.h" +#include "coretype.h" +#include "bitvect.h" + +#include "errwarn.h" +#include "intnum.h" +#include "floatnum.h" +#include "expr.h" +#include "symrec.h" + +#include "bytecode.h" +#include "section.h" + +#include "arch.h" + + +static /*@only@*/ yasm_expr *expr_level_op + (/*@returned@*/ /*@only@*/ yasm_expr *e, int fold_const, + int simplify_ident, int simplify_reg_mul); +static int expr_traverse_nodes_post(/*@null@*/ yasm_expr *e, + /*@null@*/ void *d, + int (*func) (/*@null@*/ yasm_expr *e, + /*@null@*/ void *d)); +static void expr_delete_term(yasm_expr__item *term, int recurse); + +/* Bitmap of used items. We should really never need more than 2 at a time, + * so 31 is pretty much overkill. + */ +static unsigned long itempool_used = 0; +static yasm_expr__item itempool[31]; + +/* allocate a new expression node, with children as defined. + * If it's a unary operator, put the element in left and set right=NULL. */ +/*@-compmempass@*/ +yasm_expr * +yasm_expr_create(yasm_expr_op op, yasm_expr__item *left, + yasm_expr__item *right, unsigned long line) +{ + yasm_expr *ptr, *sube; + unsigned long z; + ptr = yasm_xmalloc(sizeof(yasm_expr)); + + ptr->op = op; + ptr->numterms = 0; + ptr->terms[0].type = YASM_EXPR_NONE; + ptr->terms[1].type = YASM_EXPR_NONE; + if (left) { + ptr->terms[0] = *left; /* structure copy */ + z = (unsigned long)(left-itempool); + if (z>=31) + yasm_internal_error(N_("could not find expritem in pool")); + itempool_used &= ~(1<numterms++; + + /* Search downward until we find something *other* than an + * IDENT, then bring it up to the current level. + */ + while (ptr->terms[0].type == YASM_EXPR_EXPR && + ptr->terms[0].data.expn->op == YASM_EXPR_IDENT) { + sube = ptr->terms[0].data.expn; + ptr->terms[0] = sube->terms[0]; /* structure copy */ + /*@-usereleased@*/ + yasm_xfree(sube); + /*@=usereleased@*/ + } + } else { + yasm_internal_error(N_("Right side of expression must exist")); + } + + if (right) { + ptr->terms[1] = *right; /* structure copy */ + z = (unsigned long)(right-itempool); + if (z>=31) + yasm_internal_error(N_("could not find expritem in pool")); + itempool_used &= ~(1<numterms++; + + /* Search downward until we find something *other* than an + * IDENT, then bring it up to the current level. + */ + while (ptr->terms[1].type == YASM_EXPR_EXPR && + ptr->terms[1].data.expn->op == YASM_EXPR_IDENT) { + sube = ptr->terms[1].data.expn; + ptr->terms[1] = sube->terms[0]; /* structure copy */ + /*@-usereleased@*/ + yasm_xfree(sube); + /*@=usereleased@*/ + } + } + + ptr->line = line; + + return expr_level_op(ptr, 1, 1, 0); +} +/*@=compmempass@*/ + +/* helpers */ +static yasm_expr__item * +expr_get_item(void) +{ + int z = 0; + unsigned long v = itempool_used & 0x7fffffff; + + while (v & 1) { + v >>= 1; + z++; + } + if (z>=31) + yasm_internal_error(N_("too many expritems")); + itempool_used |= 1<type = YASM_EXPR_PRECBC; + e->data.precbc = precbc; + return e; +} + +yasm_expr__item * +yasm_expr_sym(yasm_symrec *s) +{ + yasm_expr__item *e = expr_get_item(); + e->type = YASM_EXPR_SYM; + e->data.sym = s; + return e; +} + +yasm_expr__item * +yasm_expr_expr(yasm_expr *x) +{ + yasm_expr__item *e = expr_get_item(); + e->type = YASM_EXPR_EXPR; + e->data.expn = x; + return e; +} + +yasm_expr__item * +yasm_expr_int(yasm_intnum *i) +{ + yasm_expr__item *e = expr_get_item(); + e->type = YASM_EXPR_INT; + e->data.intn = i; + return e; +} + +yasm_expr__item * +yasm_expr_float(yasm_floatnum *f) +{ + yasm_expr__item *e = expr_get_item(); + e->type = YASM_EXPR_FLOAT; + e->data.flt = f; + return e; +} + +yasm_expr__item * +yasm_expr_reg(uintptr_t reg) +{ + yasm_expr__item *e = expr_get_item(); + e->type = YASM_EXPR_REG; + e->data.reg = reg; + return e; +} + +/* Transforms instances of symrec-symrec [symrec+(-1*symrec)] into single + * expritems if possible. Uses a simple n^2 algorithm because n is usually + * quite small. Also works for precbc-precbc (or symrec-precbc, + * precbc-symrec). + */ +static /*@only@*/ yasm_expr * +expr_xform_bc_dist_base(/*@returned@*/ /*@only@*/ yasm_expr *e, + /*@null@*/ void *cbd, + int (*callback) (yasm_expr__item *ei, + yasm_bytecode *precbc, + yasm_bytecode *precbc2, + void *cbd)) +{ + int i; + /*@dependent@*/ yasm_section *sect; + /*@dependent@*/ /*@null@*/ yasm_bytecode *precbc; + int numterms; + + /* Handle symrec-symrec in ADD exprs by looking for (-1*symrec) and + * symrec term pairs (where both symrecs are in the same segment). + */ + if (e->op != YASM_EXPR_ADD) + return e; + + for (i=0; inumterms; i++) { + int j; + yasm_expr *sube; + yasm_intnum *intn; + yasm_symrec *sym = NULL; + /*@dependent@*/ yasm_section *sect2; + /*@dependent@*/ /*@null@*/ yasm_bytecode *precbc2; + + /* First look for an (-1*symrec) term */ + if (e->terms[i].type != YASM_EXPR_EXPR) + continue; + sube = e->terms[i].data.expn; + if (sube->op != YASM_EXPR_MUL || sube->numterms != 2) + continue; + + if (sube->terms[0].type == YASM_EXPR_INT && + (sube->terms[1].type == YASM_EXPR_SYM || + sube->terms[1].type == YASM_EXPR_PRECBC)) { + intn = sube->terms[0].data.intn; + if (sube->terms[1].type == YASM_EXPR_PRECBC) + precbc = sube->terms[1].data.precbc; + else + sym = sube->terms[1].data.sym; + } else if ((sube->terms[0].type == YASM_EXPR_SYM || + sube->terms[0].type == YASM_EXPR_PRECBC) && + sube->terms[1].type == YASM_EXPR_INT) { + if (sube->terms[0].type == YASM_EXPR_PRECBC) + precbc = sube->terms[0].data.precbc; + else + sym = sube->terms[0].data.sym; + intn = sube->terms[1].data.intn; + } else + continue; + + if (!yasm_intnum_is_neg1(intn)) + continue; + + if (sym && !yasm_symrec_get_label(sym, &precbc)) + continue; + sect2 = yasm_bc_get_section(precbc); + + /* Now look for a symrec term in the same segment */ + for (j=0; jnumterms; j++) { + if (((e->terms[j].type == YASM_EXPR_SYM && + yasm_symrec_get_label(e->terms[j].data.sym, &precbc2)) || + (e->terms[j].type == YASM_EXPR_PRECBC && + (precbc2 = e->terms[j].data.precbc))) && + (sect = yasm_bc_get_section(precbc2)) && + sect == sect2 && + callback(&e->terms[j], precbc, precbc2, cbd)) { + /* Delete the matching (-1*symrec) term */ + yasm_expr_destroy(sube); + e->terms[i].type = YASM_EXPR_NONE; + break; /* stop looking for matching symrec term */ + } + } + } + + /* Clean up any deleted (EXPR_NONE) terms */ + numterms = 0; + for (i=0; inumterms; i++) { + if (e->terms[i].type != YASM_EXPR_NONE) + e->terms[numterms++] = e->terms[i]; /* structure copy */ + } + if (e->numterms != numterms) { + e->numterms = numterms; + e = yasm_xrealloc(e, sizeof(yasm_expr)+((numterms<2) ? 0 : + sizeof(yasm_expr__item)*(numterms-2))); + if (numterms == 1) + e->op = YASM_EXPR_IDENT; + } + + return e; +} + +static int +expr_xform_bc_dist_cb(yasm_expr__item *ei, yasm_bytecode *precbc, + yasm_bytecode *precbc2, /*@null@*/ void *d) +{ + yasm_intnum *dist = yasm_calc_bc_dist(precbc, precbc2); + if (!dist) + return 0; + /* Change the term to an integer */ + ei->type = YASM_EXPR_INT; + ei->data.intn = dist; + return 1; +} + +/* Transforms instances of symrec-symrec [symrec+(-1*symrec)] into integers if + * possible. + */ +static /*@only@*/ yasm_expr * +expr_xform_bc_dist(/*@returned@*/ /*@only@*/ yasm_expr *e) +{ + return expr_xform_bc_dist_base(e, NULL, expr_xform_bc_dist_cb); +} + +typedef struct bc_dist_subst_cbd { + void (*callback) (unsigned int subst, yasm_bytecode *precbc, + yasm_bytecode *precbc2, void *cbd); + void *cbd; + unsigned int subst; +} bc_dist_subst_cbd; + +static int +expr_bc_dist_subst_cb(yasm_expr__item *ei, yasm_bytecode *precbc, + yasm_bytecode *precbc2, /*@null@*/ void *d) +{ + bc_dist_subst_cbd *my_cbd = d; + assert(my_cbd != NULL); + /* Call higher-level callback */ + my_cbd->callback(my_cbd->subst, precbc, precbc2, my_cbd->cbd); + /* Change the term to an subst */ + ei->type = YASM_EXPR_SUBST; + ei->data.subst = my_cbd->subst; + my_cbd->subst++; + return 1; +} + +static yasm_expr * +expr_xform_bc_dist_subst(yasm_expr *e, void *d) +{ + return expr_xform_bc_dist_base(e, d, expr_bc_dist_subst_cb); +} + +int +yasm_expr__bc_dist_subst(yasm_expr **ep, void *cbd, + void (*callback) (unsigned int subst, + yasm_bytecode *precbc, + yasm_bytecode *precbc2, + void *cbd)) +{ + bc_dist_subst_cbd my_cbd; /* callback info for low-level callback */ + my_cbd.callback = callback; + my_cbd.cbd = cbd; + my_cbd.subst = 0; + *ep = yasm_expr__level_tree(*ep, 1, 1, 1, 0, &expr_xform_bc_dist_subst, + &my_cbd); + return my_cbd.subst; +} + +/* Negate just a single ExprItem by building a -1*ei subexpression */ +static void +expr_xform_neg_item(yasm_expr *e, yasm_expr__item *ei) +{ + yasm_expr *sube = yasm_xmalloc(sizeof(yasm_expr)); + + /* Build -1*ei subexpression */ + sube->op = YASM_EXPR_MUL; + sube->line = e->line; + sube->numterms = 2; + sube->terms[0].type = YASM_EXPR_INT; + sube->terms[0].data.intn = yasm_intnum_create_int(-1); + sube->terms[1] = *ei; /* structure copy */ + + /* Replace original ExprItem with subexp */ + ei->type = YASM_EXPR_EXPR; + ei->data.expn = sube; +} + +/* Negates e by multiplying by -1, with distribution over lower-precedence + * operators (eg ADD) and special handling to simplify result w/ADD, NEG, and + * others. + * + * Returns a possibly reallocated e. + */ +static /*@only@*/ yasm_expr * +expr_xform_neg_helper(/*@returned@*/ /*@only@*/ yasm_expr *e) +{ + yasm_expr *ne; + int i; + + switch (e->op) { + case YASM_EXPR_ADD: + /* distribute (recursively if expr) over terms */ + for (i=0; inumterms; i++) { + if (e->terms[i].type == YASM_EXPR_EXPR) + e->terms[i].data.expn = + expr_xform_neg_helper(e->terms[i].data.expn); + else + expr_xform_neg_item(e, &e->terms[i]); + } + break; + case YASM_EXPR_SUB: + /* change op to ADD, and recursively negate left side (if expr) */ + e->op = YASM_EXPR_ADD; + if (e->terms[0].type == YASM_EXPR_EXPR) + e->terms[0].data.expn = + expr_xform_neg_helper(e->terms[0].data.expn); + else + expr_xform_neg_item(e, &e->terms[0]); + break; + case YASM_EXPR_NEG: + /* Negating a negated value? Make it an IDENT. */ + e->op = YASM_EXPR_IDENT; + break; + case YASM_EXPR_IDENT: + /* Negating an ident? Change it into a MUL w/ -1 if there's no + * floatnums present below; if there ARE floatnums, recurse. + */ + if (e->terms[0].type == YASM_EXPR_FLOAT) + yasm_floatnum_calc(e->terms[0].data.flt, YASM_EXPR_NEG, NULL); + else if (e->terms[0].type == YASM_EXPR_INT) + yasm_intnum_calc(e->terms[0].data.intn, YASM_EXPR_NEG, NULL); + else if (e->terms[0].type == YASM_EXPR_EXPR && + yasm_expr__contains(e->terms[0].data.expn, YASM_EXPR_FLOAT)) + expr_xform_neg_helper(e->terms[0].data.expn); + else { + e->op = YASM_EXPR_MUL; + e->numterms = 2; + e->terms[1].type = YASM_EXPR_INT; + e->terms[1].data.intn = yasm_intnum_create_int(-1); + } + break; + default: + /* Everything else. MUL will be combined when it's leveled. + * Make a new expr (to replace e) with -1*e. + */ + ne = yasm_xmalloc(sizeof(yasm_expr)); + ne->op = YASM_EXPR_MUL; + ne->line = e->line; + ne->numterms = 2; + ne->terms[0].type = YASM_EXPR_INT; + ne->terms[0].data.intn = yasm_intnum_create_int(-1); + ne->terms[1].type = YASM_EXPR_EXPR; + ne->terms[1].data.expn = e; + return ne; + } + return e; +} + +/* Transforms negatives into expressions that are easier to combine: + * -x -> -1*x + * a-b -> a+(-1*b) + * + * Call post-order on an expression tree to transform the entire tree. + * + * Returns a possibly reallocated e. + */ +static /*@only@*/ yasm_expr * +expr_xform_neg(/*@returned@*/ /*@only@*/ yasm_expr *e) +{ + switch (e->op) { + case YASM_EXPR_NEG: + /* Turn -x into -1*x */ + e->op = YASM_EXPR_IDENT; + return expr_xform_neg_helper(e); + case YASM_EXPR_SUB: + /* Turn a-b into a+(-1*b) */ + + /* change op to ADD, and recursively negate right side (if expr) */ + e->op = YASM_EXPR_ADD; + if (e->terms[1].type == YASM_EXPR_EXPR) + e->terms[1].data.expn = + expr_xform_neg_helper(e->terms[1].data.expn); + else + expr_xform_neg_item(e, &e->terms[1]); + break; + default: + break; + } + + return e; +} + +/* Look for simple identities that make the entire result constant: + * 0*&x, -1|x, etc. + */ +static int +expr_is_constant(yasm_expr_op op, yasm_intnum *intn) +{ + int iszero = yasm_intnum_is_zero(intn); + return ((iszero && op == YASM_EXPR_MUL) || + (iszero && op == YASM_EXPR_AND) || + (iszero && op == YASM_EXPR_LAND) || + (yasm_intnum_is_neg1(intn) && op == YASM_EXPR_OR)); +} + +/* Look for simple "left" identities like 0+x, 1*x, etc. */ +static int +expr_can_destroy_int_left(yasm_expr_op op, yasm_intnum *intn) +{ + int iszero = yasm_intnum_is_zero(intn); + return ((yasm_intnum_is_pos1(intn) && op == YASM_EXPR_MUL) || + (iszero && op == YASM_EXPR_ADD) || + (yasm_intnum_is_neg1(intn) && op == YASM_EXPR_AND) || + (!iszero && op == YASM_EXPR_LAND) || + (iszero && op == YASM_EXPR_OR) || + (iszero && op == YASM_EXPR_LOR)); +} + +/* Look for simple "right" identities like x+|-0, x*&/1 */ +static int +expr_can_destroy_int_right(yasm_expr_op op, yasm_intnum *intn) +{ + int iszero = yasm_intnum_is_zero(intn); + int ispos1 = yasm_intnum_is_pos1(intn); + return ((ispos1 && op == YASM_EXPR_MUL) || + (ispos1 && op == YASM_EXPR_DIV) || + (iszero && op == YASM_EXPR_ADD) || + (iszero && op == YASM_EXPR_SUB) || + (yasm_intnum_is_neg1(intn) && op == YASM_EXPR_AND) || + (!iszero && op == YASM_EXPR_LAND) || + (iszero && op == YASM_EXPR_OR) || + (iszero && op == YASM_EXPR_LOR) || + (iszero && op == YASM_EXPR_SHL) || + (iszero && op == YASM_EXPR_SHR)); +} + +/* Check for and simplify identities. Returns new number of expr terms. + * Sets e->op = EXPR_IDENT if numterms ends up being 1. + * Uses numterms parameter instead of e->numterms for basis of "new" number + * of terms. + * Assumes int_term is *only* integer term in e. + * NOTE: Really designed to only be used by expr_level_op(). + */ +static int +expr_simplify_identity(yasm_expr *e, int numterms, int *int_term, + int simplify_reg_mul) +{ + int i; + int save_numterms; + + /* Don't do this step if it's 1*REG. Save and restore numterms so + * yasm_expr__contains() works correctly. + */ + save_numterms = e->numterms; + e->numterms = numterms; + if (simplify_reg_mul || e->op != YASM_EXPR_MUL + || !yasm_intnum_is_pos1(e->terms[*int_term].data.intn) + || !yasm_expr__contains(e, YASM_EXPR_REG)) { + /* Check for simple identities that delete the intnum. + * Don't delete if the intnum is the only thing in the expn. + */ + if ((*int_term == 0 && numterms > 1 && + expr_can_destroy_int_left(e->op, e->terms[0].data.intn)) || + (*int_term > 0 && + expr_can_destroy_int_right(e->op, + e->terms[*int_term].data.intn))) { + /* Delete the intnum */ + yasm_intnum_destroy(e->terms[*int_term].data.intn); + + /* Slide everything to its right over by 1 */ + if (*int_term != numterms-1) /* if it wasn't last.. */ + memmove(&e->terms[*int_term], &e->terms[*int_term+1], + (numterms-1-*int_term)*sizeof(yasm_expr__item)); + + /* Update numterms */ + numterms--; + *int_term = -1; /* no longer an int term */ + } + } + e->numterms = save_numterms; + + /* Check for simple identites that delete everything BUT the intnum. + * Don't bother if the intnum is the only thing in the expn. + */ + if (numterms > 1 && *int_term != -1 && + expr_is_constant(e->op, e->terms[*int_term].data.intn)) { + /* Loop through, deleting everything but the integer term */ + for (i=0; inumterms; i++) + if (i != *int_term) + expr_delete_term(&e->terms[i], 1); + + /* Move integer term to the first term (if not already there) */ + if (*int_term != 0) + e->terms[0] = e->terms[*int_term]; /* structure copy */ + + /* Set numterms to 1 */ + numterms = 1; + } + + /* Compute NOT, NEG, and LNOT on single intnum. */ + if (numterms == 1 && *int_term == 0 && + (e->op == YASM_EXPR_NOT || e->op == YASM_EXPR_NEG || + e->op == YASM_EXPR_LNOT)) + yasm_intnum_calc(e->terms[0].data.intn, e->op, NULL); + + /* Change expression to IDENT if possible. */ + if (numterms == 1) + e->op = YASM_EXPR_IDENT; + + /* Return the updated numterms */ + return numterms; +} + +/* Levels the expression tree starting at e. Eg: + * a+(b+c) -> a+b+c + * (a+b)+(c+d) -> a+b+c+d + * Naturally, only levels operators that allow more than two operand terms. + * NOTE: only does *one* level of leveling (no recursion). Should be called + * post-order on a tree to combine deeper levels. + * Also brings up any IDENT values into the current level (for ALL operators). + * Folds (combines by evaluation) *integer* constant values if fold_const != 0. + * + * Returns a possibly reallocated e. + */ +/*@-mustfree@*/ +static /*@only@*/ yasm_expr * +expr_level_op(/*@returned@*/ /*@only@*/ yasm_expr *e, int fold_const, + int simplify_ident, int simplify_reg_mul) +{ + int i, j, o, fold_numterms, level_numterms, level_fold_numterms; + int first_int_term = -1; + + /* Determine how many operands will need to be brought up (for leveling). + * Go ahead and bring up any IDENT'ed values. + */ + while (e->op == YASM_EXPR_IDENT && e->terms[0].type == YASM_EXPR_EXPR) { + yasm_expr *sube = e->terms[0].data.expn; + yasm_xfree(e); + e = sube; + } + + /* If non-numeric expression, don't fold constants. */ + if (e->op > YASM_EXPR_NONNUM) + fold_const = 0; + + level_numterms = e->numterms; + level_fold_numterms = 0; + for (i=0; inumterms; i++) { + /* Search downward until we find something *other* than an + * IDENT, then bring it up to the current level. + */ + while (e->terms[i].type == YASM_EXPR_EXPR && + e->terms[i].data.expn->op == YASM_EXPR_IDENT) { + yasm_expr *sube = e->terms[i].data.expn; + e->terms[i] = sube->terms[0]; + yasm_xfree(sube); + } + + if (e->terms[i].type == YASM_EXPR_EXPR && + e->terms[i].data.expn->op == e->op) { + /* It's an expression w/the same operator, add in its numterms. + * But don't forget to subtract one for the expr itself! + */ + level_numterms += e->terms[i].data.expn->numterms - 1; + + /* If we're folding constants, count up the number of constants + * that will be merged in. + */ + if (fold_const) + for (j=0; jterms[i].data.expn->numterms; j++) + if (e->terms[i].data.expn->terms[j].type == + YASM_EXPR_INT) + level_fold_numterms++; + } + + /* Find the first integer term (if one is present) if we're folding + * constants. + */ + if (fold_const && first_int_term == -1 && + e->terms[i].type == YASM_EXPR_INT) + first_int_term = i; + } + + /* Look for other integer terms if there's one and combine. + * Also eliminate empty spaces when combining and adjust numterms + * variables. + */ + fold_numterms = e->numterms; + if (first_int_term != -1) { + for (i=first_int_term+1, o=first_int_term+1; inumterms; i++) { + if (e->terms[i].type == YASM_EXPR_INT) { + yasm_intnum_calc(e->terms[first_int_term].data.intn, e->op, + e->terms[i].data.intn); + fold_numterms--; + level_numterms--; + /* make sure to delete folded intnum */ + yasm_intnum_destroy(e->terms[i].data.intn); + } else if (o != i) { + /* copy term if it changed places */ + e->terms[o++] = e->terms[i]; + } else + o++; + } + + if (simplify_ident) { + int new_fold_numterms; + /* Simplify identities and make IDENT if possible. */ + new_fold_numterms = + expr_simplify_identity(e, fold_numterms, &first_int_term, + simplify_reg_mul); + level_numterms -= fold_numterms-new_fold_numterms; + fold_numterms = new_fold_numterms; + } + if (fold_numterms == 1) + e->op = YASM_EXPR_IDENT; + } + + /* Only level operators that allow more than two operand terms. + * Also don't bother leveling if it's not necessary to bring up any terms. + */ + if ((e->op != YASM_EXPR_ADD && e->op != YASM_EXPR_MUL && + e->op != YASM_EXPR_OR && e->op != YASM_EXPR_AND && + e->op != YASM_EXPR_LOR && e->op != YASM_EXPR_LAND && + e->op != YASM_EXPR_LXOR && e->op != YASM_EXPR_XOR) || + level_numterms <= fold_numterms) { + /* Downsize e if necessary */ + if (fold_numterms < e->numterms && e->numterms > 2) + e = yasm_xrealloc(e, sizeof(yasm_expr)+((fold_numterms<2) ? 0 : + sizeof(yasm_expr__item)*(fold_numterms-2))); + /* Update numterms */ + e->numterms = fold_numterms; + return e; + } + + /* Adjust numterms for constant folding from terms being "pulled up". + * Careful: if there's no integer term in e, then save space for it. + */ + if (fold_const) { + level_numterms -= level_fold_numterms; + if (first_int_term == -1 && level_fold_numterms != 0) + level_numterms++; + } + + /* Alloc more (or conceivably less, but not usually) space for e */ + e = yasm_xrealloc(e, sizeof(yasm_expr)+((level_numterms<2) ? 0 : + sizeof(yasm_expr__item)*(level_numterms-2))); + + /* Copy up ExprItem's. Iterate from right to left to keep the same + * ordering as was present originally. + * Combine integer terms as necessary. + */ + for (i=fold_numterms-1, o=level_numterms-1; i>=0; i--) { + if (e->terms[i].type == YASM_EXPR_EXPR && + e->terms[i].data.expn->op == e->op) { + /* bring up subexpression */ + yasm_expr *sube = e->terms[i].data.expn; + + /* copy terms right to left */ + for (j=sube->numterms-1; j>=0; j--) { + if (fold_const && sube->terms[j].type == YASM_EXPR_INT) { + /* Need to fold it in.. but if there's no int term already, + * just copy into a new one. + */ + if (first_int_term == -1) { + first_int_term = o--; + e->terms[first_int_term] = sube->terms[j]; /* struc */ + } else { + yasm_intnum_calc(e->terms[first_int_term].data.intn, + e->op, sube->terms[j].data.intn); + /* make sure to delete folded intnum */ + yasm_intnum_destroy(sube->terms[j].data.intn); + } + } else { + if (o == first_int_term) + o--; + e->terms[o--] = sube->terms[j]; /* structure copy */ + } + } + + /* delete subexpression, but *don't delete nodes* (as we've just + * copied them!) + */ + yasm_xfree(sube); + } else if (o != i) { + /* copy operand if it changed places */ + if (o == first_int_term) + o--; + e->terms[o] = e->terms[i]; + /* If we moved the first_int_term, change first_int_num too */ + if (i == first_int_term) + first_int_term = o; + o--; + } else + o--; + } + + /* Simplify identities, make IDENT if possible, and save to e->numterms. */ + if (simplify_ident && first_int_term != -1) { + e->numterms = expr_simplify_identity(e, level_numterms, + &first_int_term, simplify_reg_mul); + } else { + e->numterms = level_numterms; + if (level_numterms == 1) + e->op = YASM_EXPR_IDENT; + } + + return e; +} +/*@=mustfree@*/ + +typedef SLIST_HEAD(yasm__exprhead, yasm__exprentry) yasm__exprhead; +typedef struct yasm__exprentry { + /*@reldef@*/ SLIST_ENTRY(yasm__exprentry) next; + /*@null@*/ const yasm_expr *e; +} yasm__exprentry; + +static yasm_expr * +expr_expand_equ(yasm_expr *e, yasm__exprhead *eh) +{ + int i; + yasm__exprentry ee; + + /* traverse terms */ + for (i=0; inumterms; i++) { + const yasm_expr *equ_expr; + + /* Expand equ's. */ + if (e->terms[i].type == YASM_EXPR_SYM && + (equ_expr = yasm_symrec_get_equ(e->terms[i].data.sym))) { + yasm__exprentry *np; + + /* Check for circular reference */ + SLIST_FOREACH(np, eh, next) { + if (np->e == equ_expr) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("circular reference detected")); + return e; + } + } + + e->terms[i].type = YASM_EXPR_EXPR; + e->terms[i].data.expn = yasm_expr_copy(equ_expr); + + /* Remember we saw this equ and recurse */ + ee.e = equ_expr; + SLIST_INSERT_HEAD(eh, &ee, next); + e->terms[i].data.expn = expr_expand_equ(e->terms[i].data.expn, eh); + SLIST_REMOVE_HEAD(eh, next); + } else if (e->terms[i].type == YASM_EXPR_EXPR) + /* Recurse */ + e->terms[i].data.expn = expr_expand_equ(e->terms[i].data.expn, eh); + } + + return e; +} + +static yasm_expr * +expr_level_tree(yasm_expr *e, int fold_const, int simplify_ident, + int simplify_reg_mul, int calc_bc_dist, + yasm_expr_xform_func expr_xform_extra, + void *expr_xform_extra_data) +{ + int i; + + e = expr_xform_neg(e); + + /* traverse terms */ + for (i=0; inumterms; i++) { + /* Recurse */ + if (e->terms[i].type == YASM_EXPR_EXPR) + e->terms[i].data.expn = + expr_level_tree(e->terms[i].data.expn, fold_const, + simplify_ident, simplify_reg_mul, calc_bc_dist, + expr_xform_extra, expr_xform_extra_data); + } + + /* Check for SEG of SEG:OFF, if we match, simplify to just the segment */ + if (e->op == YASM_EXPR_SEG && e->terms[0].type == YASM_EXPR_EXPR && + e->terms[0].data.expn->op == YASM_EXPR_SEGOFF) { + e->op = YASM_EXPR_IDENT; + e->terms[0].data.expn->op = YASM_EXPR_IDENT; + /* Destroy the second (offset) term */ + e->terms[0].data.expn->numterms = 1; + expr_delete_term(&e->terms[0].data.expn->terms[1], 1); + } + + /* do callback */ + e = expr_level_op(e, fold_const, simplify_ident, simplify_reg_mul); + if (calc_bc_dist || expr_xform_extra) { + if (calc_bc_dist) + e = expr_xform_bc_dist(e); + if (expr_xform_extra) + e = expr_xform_extra(e, expr_xform_extra_data); + e = expr_level_tree(e, fold_const, simplify_ident, simplify_reg_mul, + 0, NULL, NULL); + } + return e; +} + +/* Level an entire expn tree, expanding equ's as we go */ +yasm_expr * +yasm_expr__level_tree(yasm_expr *e, int fold_const, int simplify_ident, + int simplify_reg_mul, int calc_bc_dist, + yasm_expr_xform_func expr_xform_extra, + void *expr_xform_extra_data) +{ + yasm__exprhead eh; + SLIST_INIT(&eh); + + if (!e) + return 0; + + e = expr_expand_equ(e, &eh); + e = expr_level_tree(e, fold_const, simplify_ident, simplify_reg_mul, + calc_bc_dist, expr_xform_extra, expr_xform_extra_data); + + return e; +} + +/* Comparison function for expr_order_terms(). + * Assumes ExprType enum is in canonical order. + */ +static int +expr_order_terms_compare(const void *va, const void *vb) +{ + const yasm_expr__item *a = va, *b = vb; + return (a->type - b->type); +} + +/* Reorder terms of e into canonical order. Only reorders if reordering + * doesn't change meaning of expression. (eg, doesn't reorder SUB). + * Canonical order: REG, INT, FLOAT, SYM, EXPR. + * Multiple terms of a single type are kept in the same order as in + * the original expression. + * NOTE: Only performs reordering on *one* level (no recursion). + */ +void +yasm_expr__order_terms(yasm_expr *e) +{ + /* don't bother reordering if only one element */ + if (e->numterms == 1) + return; + + /* only reorder some types of operations */ + switch (e->op) { + case YASM_EXPR_ADD: + case YASM_EXPR_MUL: + case YASM_EXPR_OR: + case YASM_EXPR_AND: + case YASM_EXPR_XOR: + case YASM_EXPR_LOR: + case YASM_EXPR_LAND: + case YASM_EXPR_LXOR: + /* Use mergesort to sort. It's fast on already sorted values and a + * stable sort (multiple terms of same type are kept in the same + * order). + */ + yasm__mergesort(e->terms, (size_t)e->numterms, + sizeof(yasm_expr__item), expr_order_terms_compare); + break; + default: + break; + } +} + +static void +expr_item_copy(yasm_expr__item *dest, const yasm_expr__item *src) +{ + dest->type = src->type; + switch (src->type) { + case YASM_EXPR_SYM: + /* Symbols don't need to be copied */ + dest->data.sym = src->data.sym; + break; + case YASM_EXPR_PRECBC: + /* Nor do direct bytecode references */ + dest->data.precbc = src->data.precbc; + break; + case YASM_EXPR_EXPR: + dest->data.expn = yasm_expr__copy_except(src->data.expn, -1); + break; + case YASM_EXPR_INT: + dest->data.intn = yasm_intnum_copy(src->data.intn); + break; + case YASM_EXPR_FLOAT: + dest->data.flt = yasm_floatnum_copy(src->data.flt); + break; + case YASM_EXPR_REG: + dest->data.reg = src->data.reg; + break; + case YASM_EXPR_SUBST: + dest->data.subst = src->data.subst; + break; + default: + break; + } +} + +/* Copy entire expression EXCEPT for index "except" at *top level only*. */ +yasm_expr * +yasm_expr__copy_except(const yasm_expr *e, int except) +{ + yasm_expr *n; + int i; + + n = yasm_xmalloc(sizeof(yasm_expr) + + sizeof(yasm_expr__item)*(e->numterms<2?0:e->numterms-2)); + + n->op = e->op; + n->line = e->line; + n->numterms = e->numterms; + for (i=0; inumterms; i++) { + if (i != except) + expr_item_copy(&n->terms[i], &e->terms[i]); + } + + return n; +} + +static void +expr_delete_term(yasm_expr__item *term, int recurse) +{ + switch (term->type) { + case YASM_EXPR_INT: + yasm_intnum_destroy(term->data.intn); + break; + case YASM_EXPR_FLOAT: + yasm_floatnum_destroy(term->data.flt); + break; + case YASM_EXPR_EXPR: + if (recurse) + yasm_expr_destroy(term->data.expn); + break; + default: + break; + } +} + +static int +expr_destroy_each(/*@only@*/ yasm_expr *e, /*@unused@*/ void *d) +{ + int i; + for (i=0; inumterms; i++) + expr_delete_term(&e->terms[i], 0); + yasm_xfree(e); /* free ourselves */ + return 0; /* don't stop recursion */ +} + +/*@-mustfree@*/ +void +yasm_expr_destroy(yasm_expr *e) +{ + expr_traverse_nodes_post(e, NULL, expr_destroy_each); +} +/*@=mustfree@*/ + +int +yasm_expr_is_op(const yasm_expr *e, yasm_expr_op op) +{ + return (e->op == op); +} + +static int +expr_contains_callback(const yasm_expr__item *ei, void *d) +{ + yasm_expr__type *t = d; + return (ei->type & *t); +} + +int +yasm_expr__contains(const yasm_expr *e, yasm_expr__type t) +{ + return yasm_expr__traverse_leaves_in_const(e, &t, expr_contains_callback); +} + +typedef struct subst_cbd { + unsigned int num_items; + const yasm_expr__item *items; +} subst_cbd; + +static int +expr_subst_callback(yasm_expr__item *ei, void *d) +{ + subst_cbd *cbd = d; + if (ei->type != YASM_EXPR_SUBST) + return 0; + if (ei->data.subst >= cbd->num_items) + return 1; /* error */ + expr_item_copy(ei, &cbd->items[ei->data.subst]); + return 0; +} + +int +yasm_expr__subst(yasm_expr *e, unsigned int num_items, + const yasm_expr__item *items) +{ + subst_cbd cbd; + cbd.num_items = num_items; + cbd.items = items; + return yasm_expr__traverse_leaves_in(e, &cbd, expr_subst_callback); +} + +/* Traverse over expression tree, calling func for each operation AFTER the + * branches (if expressions) have been traversed (eg, postorder + * traversal). The data pointer d is passed to each func call. + * + * Stops early (and returns 1) if func returns 1. Otherwise returns 0. + */ +static int +expr_traverse_nodes_post(yasm_expr *e, void *d, + int (*func) (/*@null@*/ yasm_expr *e, + /*@null@*/ void *d)) +{ + int i; + + if (!e) + return 0; + + /* traverse terms */ + for (i=0; inumterms; i++) { + if (e->terms[i].type == YASM_EXPR_EXPR && + expr_traverse_nodes_post(e->terms[i].data.expn, d, func)) + return 1; + } + + /* do callback */ + return func(e, d); +} + +/* Traverse over expression tree in order, calling func for each leaf + * (non-operation). The data pointer d is passed to each func call. + * + * Stops early (and returns 1) if func returns 1. Otherwise returns 0. + */ +int +yasm_expr__traverse_leaves_in_const(const yasm_expr *e, void *d, + int (*func) (/*@null@*/ const yasm_expr__item *ei, /*@null@*/ void *d)) +{ + int i; + + if (!e) + return 0; + + for (i=0; inumterms; i++) { + if (e->terms[i].type == YASM_EXPR_EXPR) { + if (yasm_expr__traverse_leaves_in_const(e->terms[i].data.expn, d, + func)) + return 1; + } else { + if (func(&e->terms[i], d)) + return 1; + } + } + return 0; +} + +/* Traverse over expression tree in order, calling func for each leaf + * (non-operation). The data pointer d is passed to each func call. + * + * Stops early (and returns 1) if func returns 1. Otherwise returns 0. + */ +int +yasm_expr__traverse_leaves_in(yasm_expr *e, void *d, + int (*func) (/*@null@*/ yasm_expr__item *ei, /*@null@*/ void *d)) +{ + int i; + + if (!e) + return 0; + + for (i=0; inumterms; i++) { + if (e->terms[i].type == YASM_EXPR_EXPR) { + if (yasm_expr__traverse_leaves_in(e->terms[i].data.expn, d, func)) + return 1; + } else { + if (func(&e->terms[i], d)) + return 1; + } + } + return 0; +} + +yasm_expr * +yasm_expr_extract_deep_segoff(yasm_expr **ep) +{ + yasm_expr *retval; + yasm_expr *e = *ep; + int i; + + /* Try to extract at this level */ + retval = yasm_expr_extract_segoff(ep); + if (retval) + return retval; + + /* Not at this level? Search any expr children. */ + for (i=0; inumterms; i++) { + if (e->terms[i].type == YASM_EXPR_EXPR) { + retval = yasm_expr_extract_deep_segoff(&e->terms[i].data.expn); + if (retval) + return retval; + } + } + + /* Didn't find one */ + return NULL; +} + +yasm_expr * +yasm_expr_extract_segoff(yasm_expr **ep) +{ + yasm_expr *retval; + yasm_expr *e = *ep; + + /* If not SEG:OFF, we can't do this transformation */ + if (e->op != YASM_EXPR_SEGOFF) + return NULL; + + /* Extract the SEG portion out to its own expression */ + if (e->terms[0].type == YASM_EXPR_EXPR) + retval = e->terms[0].data.expn; + else { + /* Need to build IDENT expression to hold non-expression contents */ + retval = yasm_xmalloc(sizeof(yasm_expr)); + retval->op = YASM_EXPR_IDENT; + retval->numterms = 1; + retval->terms[0] = e->terms[0]; /* structure copy */ + } + + /* Delete the SEG: portion by changing the expression into an IDENT */ + e->op = YASM_EXPR_IDENT; + e->numterms = 1; + e->terms[0] = e->terms[1]; /* structure copy */ + + return retval; +} + +yasm_expr * +yasm_expr_extract_wrt(yasm_expr **ep) +{ + yasm_expr *retval; + yasm_expr *e = *ep; + + /* If not WRT, we can't do this transformation */ + if (e->op != YASM_EXPR_WRT) + return NULL; + + /* Extract the right side portion out to its own expression */ + if (e->terms[1].type == YASM_EXPR_EXPR) + retval = e->terms[1].data.expn; + else { + /* Need to build IDENT expression to hold non-expression contents */ + retval = yasm_xmalloc(sizeof(yasm_expr)); + retval->op = YASM_EXPR_IDENT; + retval->numterms = 1; + retval->terms[0] = e->terms[1]; /* structure copy */ + } + + /* Delete the right side portion by changing the expr into an IDENT */ + e->op = YASM_EXPR_IDENT; + e->numterms = 1; + + return retval; +} + +/*@-unqualifiedtrans -nullderef -nullstate -onlytrans@*/ +yasm_intnum * +yasm_expr_get_intnum(yasm_expr **ep, int calc_bc_dist) +{ + *ep = yasm_expr_simplify(*ep, calc_bc_dist); + + if ((*ep)->op == YASM_EXPR_IDENT && (*ep)->terms[0].type == YASM_EXPR_INT) + return (*ep)->terms[0].data.intn; + else + return (yasm_intnum *)NULL; +} +/*@=unqualifiedtrans =nullderef -nullstate -onlytrans@*/ + +/*@-unqualifiedtrans -nullderef -nullstate -onlytrans@*/ +const yasm_symrec * +yasm_expr_get_symrec(yasm_expr **ep, int simplify) +{ + if (simplify) + *ep = yasm_expr_simplify(*ep, 0); + + if ((*ep)->op == YASM_EXPR_IDENT && (*ep)->terms[0].type == YASM_EXPR_SYM) + return (*ep)->terms[0].data.sym; + else + return (yasm_symrec *)NULL; +} +/*@=unqualifiedtrans =nullderef -nullstate -onlytrans@*/ + +/*@-unqualifiedtrans -nullderef -nullstate -onlytrans@*/ +const uintptr_t * +yasm_expr_get_reg(yasm_expr **ep, int simplify) +{ + if (simplify) + *ep = yasm_expr_simplify(*ep, 0); + + if ((*ep)->op == YASM_EXPR_IDENT && (*ep)->terms[0].type == YASM_EXPR_REG) + return &((*ep)->terms[0].data.reg); + else + return NULL; +} +/*@=unqualifiedtrans =nullderef -nullstate -onlytrans@*/ + +void +yasm_expr_print(const yasm_expr *e, FILE *f) +{ + char opstr[8]; + int i; + + if (!e) { + fprintf(f, "(nil)"); + return; + } + + switch (e->op) { + case YASM_EXPR_ADD: + strcpy(opstr, "+"); + break; + case YASM_EXPR_SUB: + strcpy(opstr, "-"); + break; + case YASM_EXPR_MUL: + strcpy(opstr, "*"); + break; + case YASM_EXPR_DIV: + strcpy(opstr, "/"); + break; + case YASM_EXPR_SIGNDIV: + strcpy(opstr, "//"); + break; + case YASM_EXPR_MOD: + strcpy(opstr, "%"); + break; + case YASM_EXPR_SIGNMOD: + strcpy(opstr, "%%"); + break; + case YASM_EXPR_NEG: + fprintf(f, "-"); + opstr[0] = 0; + break; + case YASM_EXPR_NOT: + fprintf(f, "~"); + opstr[0] = 0; + break; + case YASM_EXPR_OR: + strcpy(opstr, "|"); + break; + case YASM_EXPR_AND: + strcpy(opstr, "&"); + break; + case YASM_EXPR_XOR: + strcpy(opstr, "^"); + break; + case YASM_EXPR_XNOR: + strcpy(opstr, "XNOR"); + break; + case YASM_EXPR_NOR: + strcpy(opstr, "NOR"); + break; + case YASM_EXPR_SHL: + strcpy(opstr, "<<"); + break; + case YASM_EXPR_SHR: + strcpy(opstr, ">>"); + break; + case YASM_EXPR_LOR: + strcpy(opstr, "||"); + break; + case YASM_EXPR_LAND: + strcpy(opstr, "&&"); + break; + case YASM_EXPR_LNOT: + strcpy(opstr, "!"); + break; + case YASM_EXPR_LXOR: + strcpy(opstr, "^^"); + break; + case YASM_EXPR_LXNOR: + strcpy(opstr, "LXNOR"); + break; + case YASM_EXPR_LNOR: + strcpy(opstr, "LNOR"); + break; + case YASM_EXPR_LT: + strcpy(opstr, "<"); + break; + case YASM_EXPR_GT: + strcpy(opstr, ">"); + break; + case YASM_EXPR_LE: + strcpy(opstr, "<="); + break; + case YASM_EXPR_GE: + strcpy(opstr, ">="); + break; + case YASM_EXPR_NE: + strcpy(opstr, "!="); + break; + case YASM_EXPR_EQ: + strcpy(opstr, "=="); + break; + case YASM_EXPR_SEG: + fprintf(f, "SEG "); + opstr[0] = 0; + break; + case YASM_EXPR_WRT: + strcpy(opstr, " WRT "); + break; + case YASM_EXPR_SEGOFF: + strcpy(opstr, ":"); + break; + case YASM_EXPR_IDENT: + opstr[0] = 0; + break; + default: + strcpy(opstr, " !UNK! "); + break; + } + for (i=0; inumterms; i++) { + switch (e->terms[i].type) { + case YASM_EXPR_PRECBC: + fprintf(f, "{%lx}", + yasm_bc_next_offset(e->terms[i].data.precbc)); + break; + case YASM_EXPR_SYM: + fprintf(f, "%s", yasm_symrec_get_name(e->terms[i].data.sym)); + break; + case YASM_EXPR_EXPR: + fprintf(f, "("); + yasm_expr_print(e->terms[i].data.expn, f); + fprintf(f, ")"); + break; + case YASM_EXPR_INT: + yasm_intnum_print(e->terms[i].data.intn, f); + break; + case YASM_EXPR_FLOAT: + yasm_floatnum_print(e->terms[i].data.flt, f); + break; + case YASM_EXPR_REG: + /* FIXME */ + /*yasm_arch_reg_print(arch, e->terms[i].data.reg, f);*/ + break; + case YASM_EXPR_SUBST: + fprintf(f, "[%u]", e->terms[i].data.subst); + break; + case YASM_EXPR_NONE: + break; + } + if (i < e->numterms-1) + fprintf(f, "%s", opstr); + } +} + +unsigned int +yasm_expr_size(const yasm_expr *e) +{ + int i; + int seen = 0; + unsigned int size = 0, newsize; + + if (e->op == YASM_EXPR_IDENT) { + if (e->terms[0].type == YASM_EXPR_SYM) + return yasm_symrec_get_size(e->terms[0].data.sym); + return 0; + } + if (e->op != YASM_EXPR_ADD && e->op != YASM_EXPR_SUB) + return 0; + + for (i=0; inumterms; i++) { + newsize = 0; + switch (e->terms[i].type) { + case YASM_EXPR_EXPR: + newsize = yasm_expr_size(e->terms[i].data.expn); + break; + case YASM_EXPR_SYM: + newsize = yasm_symrec_get_size(e->terms[i].data.sym); + break; + default: + break; + } + if (newsize) { + size = newsize; + if (seen) + /* either sum of idents (?!) or substract of idents */ + return 0; + seen = 1; + } + } + /* exactly one offset */ + return size; +} + +const char * +yasm_expr_segment(const yasm_expr *e) +{ + int i; + int seen = 0; + const char *segment = NULL; + + if (e->op == YASM_EXPR_IDENT) { + if (e->terms[0].type == YASM_EXPR_SYM) + return yasm_symrec_get_segment(e->terms[0].data.sym); + return NULL; + } + if (e->op != YASM_EXPR_ADD && e->op != YASM_EXPR_SUB) + return NULL; + + for (i=0; inumterms; i++) { + if ((e->op == YASM_EXPR_ADD || !i) && + e->terms[i].type == YASM_EXPR_EXPR) { + if ((segment = yasm_expr_segment(e->terms[i].data.expn))) { + if (seen) { + /* either sum of idents (?!) or substract of idents */ + return NULL; + } + seen = 1; + } + } + } + /* exactly one offset */ + return segment; +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/expr.h b/third-party/yasm/yasm-1.3.0/libyasm/expr.h new file mode 100644 index 0000000000..0de62dfed7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/expr.h @@ -0,0 +1,388 @@ +/** + * \file libyasm/expr.h + * \brief YASM expression interface. + * + * \license + * Copyright (C) 2001-2007 Michael Urman, Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_EXPR_H +#define YASM_EXPR_H + +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +/** Type of an expression item. Types are listed in canonical sorting order. + * See expr_order_terms(). + * Note #YASM_EXPR_PRECBC must be used carefully (in a-b pairs), as only + * symrecs can become the relative term in a #yasm_value. + */ +typedef enum yasm_expr__type { + YASM_EXPR_NONE = 0, /**< Nothing */ + YASM_EXPR_REG = 1<<0, /**< Register */ + YASM_EXPR_INT = 1<<1, /**< Integer value */ + YASM_EXPR_SUBST = 1<<2, /**< Substitution placeholder */ + YASM_EXPR_FLOAT = 1<<3, /**< Floating point value */ + YASM_EXPR_SYM = 1<<4, /**< Symbol */ + YASM_EXPR_PRECBC = 1<<5,/**< Direct bytecode ref (rather than via sym) */ + YASM_EXPR_EXPR = 1<<6 /**< Subexpression */ +} yasm_expr__type; + +/** Expression item. */ +typedef struct yasm_expr__item { + yasm_expr__type type; /**< Type */ + + /** Expression item data. Correct value depends on type. */ + union { + yasm_bytecode *precbc; /**< Direct bytecode ref (YASM_EXPR_PRECBC) */ + yasm_symrec *sym; /**< Symbol (YASM_EXPR_SYM) */ + yasm_expr *expn; /**< Subexpression (YASM_EXPR_EXPR) */ + yasm_intnum *intn; /**< Integer value (YASM_EXPR_INT) */ + yasm_floatnum *flt; /**< Floating point value (YASM_EXPR_FLOAT) */ + uintptr_t reg; /**< Register (YASM_EXPR_REG) */ + unsigned int subst; /**< Subst placeholder (YASM_EXPR_SUBST) */ + } data; +} yasm_expr__item; + +/** Expression. */ +struct yasm_expr { + yasm_expr_op op; /**< Operation. */ + unsigned long line; /**< Line number where expression was defined. */ + int numterms; /**< Number of terms in the expression. */ + + /** Terms of the expression. Structure may be extended to include more + * terms, as some operations may allow more than two operand terms + * (ADD, MUL, OR, AND, XOR). + */ + yasm_expr__item terms[2]; +}; + +/** Create a new expression e=a op b. + * \param op operation + * \param a expression item a + * \param b expression item b (optional depending on op) + * \param line virtual line (where expression defined) + * \return Newly allocated expression. + */ +YASM_LIB_DECL +/*@only@*/ yasm_expr *yasm_expr_create + (yasm_expr_op op, /*@only@*/ yasm_expr__item *a, + /*@only@*/ /*@null@*/ yasm_expr__item *b, unsigned long line); + +/** Create a new preceding-bytecode expression item. + * \param precbc preceding bytecode + * \return Newly allocated expression item. + */ +YASM_LIB_DECL +/*@only@*/ yasm_expr__item *yasm_expr_precbc(/*@keep@*/ yasm_bytecode *precbc); + +/** Create a new symbol expression item. + * \param sym symbol + * \return Newly allocated expression item. + */ +YASM_LIB_DECL +/*@only@*/ yasm_expr__item *yasm_expr_sym(/*@keep@*/ yasm_symrec *sym); + +/** Create a new expression expression item. + * \param e expression + * \return Newly allocated expression item. + */ +YASM_LIB_DECL +/*@only@*/ yasm_expr__item *yasm_expr_expr(/*@keep@*/ yasm_expr *e); + +/** Create a new intnum expression item. + * \param intn intnum + * \return Newly allocated expression item. + */ +YASM_LIB_DECL +/*@only@*/ yasm_expr__item *yasm_expr_int(/*@keep@*/ yasm_intnum *intn); + +/** Create a new floatnum expression item. + * \param flt floatnum + * \return Newly allocated expression item. + */ +YASM_LIB_DECL +/*@only@*/ yasm_expr__item *yasm_expr_float(/*@keep@*/ yasm_floatnum *flt); + +/** Create a new register expression item. + * \param reg register + * \return Newly allocated expression item. + */ +YASM_LIB_DECL +/*@only@*/ yasm_expr__item *yasm_expr_reg(uintptr_t reg); + +/** Create a new expression tree e=l op r. + * \param l expression for left side of new expression + * \param o operation + * \param r expression for right side of new expression + * \param i line index + * \return Newly allocated expression. + */ +#define yasm_expr_create_tree(l,o,r,i) \ + yasm_expr_create ((o), yasm_expr_expr(l), yasm_expr_expr(r), i) + +/** Create a new expression branch e=op r. + * \param o operation + * \param r expression for right side of new expression + * \param i line index + * \return Newly allocated expression. + */ +#define yasm_expr_create_branch(o,r,i) \ + yasm_expr_create ((o), yasm_expr_expr(r), (yasm_expr__item *)NULL, i) + +/** Create a new expression identity e=r. + * \param r expression for identity within new expression + * \param i line index + * \return Newly allocated expression. + */ +#define yasm_expr_create_ident(r,i) \ + yasm_expr_create (YASM_EXPR_IDENT, (r), (yasm_expr__item *)NULL, i) + +/** Duplicate an expression. + * \param e expression + * \return Newly allocated expression identical to e. + */ +yasm_expr *yasm_expr_copy(const yasm_expr *e); +#ifndef YASM_DOXYGEN +#define yasm_expr_copy(e) yasm_expr__copy_except(e, -1) +#endif + +/** Destroy (free allocated memory for) an expression. + * \param e expression + */ +YASM_LIB_DECL +void yasm_expr_destroy(/*@only@*/ /*@null@*/ yasm_expr *e); + +/** Determine if an expression is a specified operation (at the top level). + * \param e expression + * \param op operator + * \return Nonzero if the expression was the specified operation at the top + * level, zero otherwise. + */ +YASM_LIB_DECL +int yasm_expr_is_op(const yasm_expr *e, yasm_expr_op op); + +/** Extra transformation function for yasm_expr__level_tree(). + * \param e expression being simplified + * \param d data provided as expr_xform_extra_data to + * yasm_expr__level_tree() + * \return Transformed e. + */ +typedef /*@only@*/ yasm_expr * (*yasm_expr_xform_func) + (/*@returned@*/ /*@only@*/ yasm_expr *e, /*@null@*/ void *d); + +/** Level an entire expression tree. + * \internal + * \param e expression + * \param fold_const enable constant folding if nonzero + * \param simplify_ident simplify identities + * \param simplify_reg_mul simplify REG*1 identities + * \param calc_bc_dist nonzero if distances between bytecodes should be + * calculated, 0 if they should be left intact + * \param expr_xform_extra extra transformation function + * \param expr_xform_extra_data data to pass to expr_xform_extra + * \return Leveled expression. + */ +YASM_LIB_DECL +/*@only@*/ /*@null@*/ yasm_expr *yasm_expr__level_tree + (/*@returned@*/ /*@only@*/ /*@null@*/ yasm_expr *e, int fold_const, + int simplify_ident, int simplify_reg_mul, int calc_bc_dist, + /*@null@*/ yasm_expr_xform_func expr_xform_extra, + /*@null@*/ void *expr_xform_extra_data); + +/** Simplify an expression as much as possible. Eliminates extraneous + * branches and simplifies integer-only subexpressions. Simplified version + * of yasm_expr__level_tree(). + * \param e expression + * \param cbd if distance between bytecodes should be calculated + * \return Simplified expression. + */ +#define yasm_expr_simplify(e, cbd) \ + yasm_expr__level_tree(e, 1, 1, 1, cbd, NULL, NULL) + +/** Extract the segment portion of an expression containing SEG:OFF, leaving + * the offset. + * \param ep expression (pointer to) + * \return NULL if unable to extract a segment (expr does not contain a + * YASM_EXPR_SEGOFF operator), otherwise the segment expression. + * The input expression is modified such that on return, it's the + * offset expression. + */ +YASM_LIB_DECL +/*@only@*/ /*@null@*/ yasm_expr *yasm_expr_extract_deep_segoff(yasm_expr **ep); + +/** Extract the segment portion of a SEG:OFF expression, leaving the offset. + * \param ep expression (pointer to) + * \return NULL if unable to extract a segment (YASM_EXPR_SEGOFF not the + * top-level operator), otherwise the segment expression. The input + * expression is modified such that on return, it's the offset + * expression. + */ +YASM_LIB_DECL +/*@only@*/ /*@null@*/ yasm_expr *yasm_expr_extract_segoff(yasm_expr **ep); + +/** Extract the right portion (y) of a x WRT y expression, leaving the left + * portion (x). + * \param ep expression (pointer to) + * \return NULL if unable to extract (YASM_EXPR_WRT not the top-level + * operator), otherwise the right side of the WRT expression. The + * input expression is modified such that on return, it's the left side + * of the WRT expression. + */ +YASM_LIB_DECL +/*@only@*/ /*@null@*/ yasm_expr *yasm_expr_extract_wrt(yasm_expr **ep); + +/** Get the integer value of an expression if it's just an integer. + * \param ep expression (pointer to) + * \param calc_bc_dist nonzero if distances between bytecodes should be + * calculated, 0 if NULL should be returned in this case + * \return NULL if the expression is too complex (contains anything other than + * integers, ie floats, non-valued labels, registers); otherwise the + * intnum value of the expression. + */ +YASM_LIB_DECL +/*@dependent@*/ /*@null@*/ yasm_intnum *yasm_expr_get_intnum + (yasm_expr **ep, int calc_bc_dist); + +/** Get the symbol value of an expression if it's just a symbol. + * \param ep expression (pointer to) + * \param simplify if nonzero, simplify the expression first + * \return NULL if the expression is too complex; otherwise the symbol value of + * the expression. + */ +YASM_LIB_DECL +/*@dependent@*/ /*@null@*/ const yasm_symrec *yasm_expr_get_symrec + (yasm_expr **ep, int simplify); + +/** Get the register value of an expression if it's just a register. + * \param ep expression (pointer to) + * \param simplify if nonzero, simplify the expression first + * \return NULL if the expression is too complex; otherwise the register value + * of the expression. + */ +YASM_LIB_DECL +/*@dependent@*/ /*@null@*/ const uintptr_t *yasm_expr_get_reg + (yasm_expr **ep, int simplify); + +/** Print an expression. For debugging purposes. + * \param e expression + * \param f file + */ +YASM_LIB_DECL +void yasm_expr_print(/*@null@*/ const yasm_expr *e, FILE *f); + +/** Return the size of an expression, if the user provided it + * \param e expression + */ +YASM_LIB_DECL +unsigned int yasm_expr_size(const yasm_expr *e); + +/** Return the segment of an expression, if the user provided it + * \param e expression + */ +YASM_LIB_DECL +const char *yasm_expr_segment(const yasm_expr *e); + +/** Traverse over expression tree in order (const version). + * Calls func for each leaf (non-operation). + * \param e expression + * \param d data passed to each call to func + * \param func callback function + * \return Stops early (and returns 1) if func returns 1. + * Otherwise returns 0. + */ +YASM_LIB_DECL +int yasm_expr__traverse_leaves_in_const + (const yasm_expr *e, /*@null@*/ void *d, + int (*func) (/*@null@*/ const yasm_expr__item *ei, /*@null@*/ void *d)); + +/** Traverse over expression tree in order. + * Calls func for each leaf (non-operation). + * \param e expression + * \param d data passed to each call to func + * \param func callback function + * \return Stops early (and returns 1) if func returns 1. + * Otherwise returns 0. + */ +YASM_LIB_DECL +int yasm_expr__traverse_leaves_in + (yasm_expr *e, /*@null@*/ void *d, + int (*func) (/*@null@*/ yasm_expr__item *ei, /*@null@*/ void *d)); + +/** Reorder terms of e into canonical order. Only reorders if reordering + * doesn't change meaning of expression. (eg, doesn't reorder SUB). + * Canonical order: REG, INT, FLOAT, SYM, EXPR. + * Multiple terms of a single type are kept in the same order as in + * the original expression. + * \param e expression + * \note Only performs reordering on *one* level (no recursion). + */ +YASM_LIB_DECL +void yasm_expr__order_terms(yasm_expr *e); + +/** Copy entire expression EXCEPT for index "except" at *top level only*. + * \param e expression + * \param except term index not to copy; -1 to copy all terms + * \return Newly allocated copy of expression. + */ +YASM_LIB_DECL +yasm_expr *yasm_expr__copy_except(const yasm_expr *e, int except); + +/** Test if expression contains an item. Searches recursively into + * subexpressions. + * \param e expression + * \param t type of item to look for + * \return Nonzero if expression contains an item of type t, zero if not. + */ +YASM_LIB_DECL +int yasm_expr__contains(const yasm_expr *e, yasm_expr__type t); + +/** Transform symrec-symrec terms in expression into #YASM_EXPR_SUBST items. + * Calls the callback function for each symrec-symrec term. + * \param ep expression (pointer to) + * \param cbd callback data passed to callback function + * \param callback callback function: given subst index for bytecode + * pair, bytecode pair (bc2-bc1), and cbd (callback data) + * \return Number of transformations made. + */ +YASM_LIB_DECL +int yasm_expr__bc_dist_subst(yasm_expr **ep, void *cbd, + void (*callback) (unsigned int subst, + yasm_bytecode *precbc, + yasm_bytecode *precbc2, + void *cbd)); + +/** Substitute items into expr YASM_EXPR_SUBST items (by index). Items are + * copied, so caller is responsible for freeing array of items. + * \param e expression + * \param num_items number of items in items array + * \param items items array + * \return 1 on error (index out of range). + */ +YASM_LIB_DECL +int yasm_expr__subst(yasm_expr *e, unsigned int num_items, + const yasm_expr__item *items); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/file.c b/third-party/yasm/yasm-1.3.0/libyasm/file.c new file mode 100644 index 0000000000..fc7dab6c17 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/file.c @@ -0,0 +1,672 @@ +/* + * File helper functions. + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +/* Need either unistd.h or direct.h to prototype getcwd() and mkdir() */ +#ifdef HAVE_UNISTD_H +#include +#endif + +#ifdef HAVE_DIRECT_H +#include +#endif + +#ifdef _WIN32 +#include +#endif + +#ifdef HAVE_SYS_STAT_H +#include +#endif + +#include +#include + +#include "errwarn.h" +#include "file.h" + +#define BSIZE 8192 /* Fill block size */ + + +void +yasm_scanner_initialize(yasm_scanner *s) +{ + s->bot = NULL; + s->tok = NULL; + s->ptr = NULL; + s->cur = NULL; + s->lim = NULL; + s->top = NULL; + s->eof = NULL; +} + +void +yasm_scanner_delete(yasm_scanner *s) +{ + if (s->bot) { + yasm_xfree(s->bot); + s->bot = NULL; + } +} + +int +yasm_fill_helper(yasm_scanner *s, unsigned char **cursor, + size_t (*input_func) (void *d, unsigned char *buf, + size_t max), + void *input_func_data) +{ + size_t cnt; + int first = 0; + + if (s->eof) + return 0; + + cnt = s->tok - s->bot; + if (cnt > 0) { + memmove(s->bot, s->tok, (size_t)(s->lim - s->tok)); + s->tok = s->bot; + s->ptr -= cnt; + *cursor -= cnt; + s->lim -= cnt; + } + if (!s->bot) + first = 1; + if ((s->top - s->lim) < BSIZE) { + unsigned char *buf = yasm_xmalloc((size_t)(s->lim - s->bot) + BSIZE); + memcpy(buf, s->tok, (size_t)(s->lim - s->tok)); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + *cursor = &buf[*cursor - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[BSIZE]; + if (s->bot) + yasm_xfree(s->bot); + s->bot = buf; + } + if ((cnt = input_func(input_func_data, s->lim, BSIZE)) == 0) { + s->eof = &s->lim[cnt]; + *s->eof++ = '\n'; + } + s->lim += cnt; + return first; +} + +void +yasm_unescape_cstring(unsigned char *str, size_t *len) +{ + unsigned char *s = str; + unsigned char *o = str; + unsigned char t[4]; + + while ((size_t)(s-str)<*len) { + if (*s == '\\' && (size_t)(&s[1]-str)<*len) { + s++; + switch (*s) { + case 'b': *o = '\b'; s++; break; + case 'f': *o = '\f'; s++; break; + case 'n': *o = '\n'; s++; break; + case 'r': *o = '\r'; s++; break; + case 't': *o = '\t'; s++; break; + case 'x': + /* hex escape; grab last two digits */ + s++; + while ((size_t)(&s[2]-str)<*len && isxdigit(s[0]) + && isxdigit(s[1]) && isxdigit(s[2])) + s++; + if ((size_t)(s-str)<*len && isxdigit(*s)) { + t[0] = *s++; + t[1] = '\0'; + t[2] = '\0'; + if ((size_t)(s-str)<*len && isxdigit(*s)) + t[1] = *s++; + *o = (unsigned char)strtoul((char *)t, NULL, 16); + } else + *o = '\0'; + break; + default: + if (isdigit(*s)) { + int warn = 0; + /* octal escape */ + if (*s > '7') + warn = 1; + *o = *s++ - '0'; + if ((size_t)(s-str)<*len && isdigit(*s)) { + if (*s > '7') + warn = 1; + *o <<= 3; + *o += *s++ - '0'; + if ((size_t)(s-str)<*len && isdigit(*s)) { + if (*s > '7') + warn = 1; + *o <<= 3; + *o += *s++ - '0'; + } + } + if (warn) + yasm_warn_set(YASM_WARN_GENERAL, + N_("octal value out of range")); + } else + *o = *s++; + break; + } + o++; + } else + *o++ = *s++; + } + *len = o-str; +} + +size_t +yasm__splitpath_unix(const char *path, /*@out@*/ const char **tail) +{ + const char *s; + s = strrchr(path, '/'); + if (!s) { + /* No head */ + *tail = path; + return 0; + } + *tail = s+1; + /* Strip trailing ./ on path */ + while ((s-1)>=path && *(s-1) == '.' && *s == '/' + && !((s-2)>=path && *(s-2) == '.')) + s -= 2; + /* Strip trailing slashes on path (except leading) */ + while (s>path && *s == '/') + s--; + /* Return length of head */ + return s-path+1; +} + +size_t +yasm__splitpath_win(const char *path, /*@out@*/ const char **tail) +{ + const char *basepath = path; + const char *s; + + /* split off drive letter first, if any */ + if (isalpha(path[0]) && path[1] == ':') + basepath += 2; + + s = basepath; + while (*s != '\0') + s++; + while (s >= basepath && *s != '\\' && *s != '/') + s--; + if (s < basepath) { + *tail = basepath; + if (path == basepath) + return 0; /* No head */ + else + return 2; /* Drive letter is head */ + } + *tail = s+1; + /* Strip trailing .\ or ./ on path */ + while ((s-1)>=basepath && *(s-1) == '.' && (*s == '/' || *s == '\\') + && !((s-2)>=basepath && *(s-2) == '.')) + s -= 2; + /* Strip trailing slashes on path (except leading) */ + while (s>basepath && (*s == '/' || *s == '\\')) + s--; + /* Return length of head */ + return s-path+1; +} + +char * +yasm__getcwd(void) +{ + char *buf; + size_t size; + + size = 1024; + buf = yasm_xmalloc(size); + + if (getenv("YASM_TEST_SUITE")) { + strcpy(buf, "./"); + return buf; + } + + while (getcwd(buf, size-1) == NULL) { + if (errno != ERANGE) { + yasm__fatal(N_("could not determine current working directory")); + yasm_xfree(buf); + return NULL; + } + size *= 2; + buf = yasm_xrealloc(buf, size); + } + + /* append a '/' if not already present */ + size = strlen(buf); + if (buf[size-1] != '\\' && buf[size-1] != '/') { + buf[size] = '/'; + buf[size+1] = '\0'; + } + return buf; +} + +char * +yasm__abspath(const char *path) +{ + char *curdir, *abspath; + + curdir = yasm__getcwd(); + abspath = yasm__combpath(curdir, path); + yasm_xfree(curdir); + + return abspath; +} + +char * +yasm__combpath_unix(const char *from, const char *to) +{ + const char *tail; + size_t pathlen, i, j; + char *out; + + if (to[0] == '/') { + /* absolute "to" */ + out = yasm_xmalloc(strlen(to)+1); + /* Combine any double slashes when copying */ + for (j=0; *to; to++) { + if (*to == '/' && *(to+1) == '/') + continue; + out[j++] = *to; + } + out[j++] = '\0'; + return out; + } + + /* Get path component; note this strips trailing slash */ + pathlen = yasm__splitpath_unix(from, &tail); + + out = yasm_xmalloc(pathlen+strlen(to)+2); /* worst case maximum len */ + + /* Combine any double slashes when copying */ + for (i=0, j=0; i 0 && out[pathlen-1] != '/') + out[pathlen++] = '/'; + + /* Now scan from left to right through "to", stripping off "." and ".."; + * if we see "..", back up one directory in out unless last directory in + * out is also "..". + * + * Note this does NOT back through ..'s in the "from" path; this is just + * as well as that could skip symlinks (e.g. "foo/bar/.." might not be + * the same as "foo"). + */ + for (;;) { + if (to[0] == '.' && to[1] == '/') { + to += 2; /* current directory */ + while (*to == '/') + to++; /* strip off any additional slashes */ + } else if (pathlen == 0) + break; /* no more "from" path left, we're done */ + else if (to[0] == '.' && to[1] == '.' && to[2] == '/') { + if (pathlen >= 3 && out[pathlen-1] == '/' && out[pathlen-2] == '.' + && out[pathlen-3] == '.') { + /* can't ".." against a "..", so we're done. */ + break; + } + + to += 3; /* throw away "../" */ + while (*to == '/') + to++; /* strip off any additional slashes */ + + /* and back out last directory in "out" if not already at root */ + if (pathlen > 1) { + pathlen--; /* strip off trailing '/' */ + while (pathlen > 0 && out[pathlen-1] != '/') + pathlen--; + } + } else + break; + } + + /* Copy "to" to tail of output, and we're done */ + /* Combine any double slashes when copying */ + for (j=pathlen; *to; to++) { + if (*to == '/' && *(to+1) == '/') + continue; + out[j++] = *to; + } + out[j++] = '\0'; + + return out; +} + +char * +yasm__combpath_win(const char *from, const char *to) +{ + const char *tail; + size_t pathlen, i, j; + char *out; + + if ((isalpha(to[0]) && to[1] == ':') || (to[0] == '/' || to[0] == '\\')) { + /* absolute or drive letter "to" */ + out = yasm_xmalloc(strlen(to)+1); + /* Combine any double slashes when copying */ + for (j=0; *to; to++) { + if ((*to == '/' || *to == '\\') + && (*(to+1) == '/' || *(to+1) == '\\')) + continue; + if (*to == '/') + out[j++] = '\\'; + else + out[j++] = *to; + } + out[j++] = '\0'; + return out; + } + + /* Get path component; note this strips trailing slash */ + pathlen = yasm__splitpath_win(from, &tail); + + out = yasm_xmalloc(pathlen+strlen(to)+2); /* worst case maximum len */ + + /* Combine any double slashes when copying */ + for (i=0, j=0; i 0 && out[pathlen-1] != '\\' + && !(pathlen == 2 && isalpha(out[0]) && out[1] == ':')) + out[pathlen++] = '\\'; + + /* Now scan from left to right through "to", stripping off "." and ".."; + * if we see "..", back up one directory in out unless last directory in + * out is also "..". + * + * Note this does NOT back through ..'s in the "from" path; this is just + * as well as that could skip symlinks (e.g. "foo/bar/.." might not be + * the same as "foo"). + */ + for (;;) { + if (to[0] == '.' && (to[1] == '/' || to[1] == '\\')) { + to += 2; /* current directory */ + while (*to == '/' || *to == '\\') + to++; /* strip off any additional slashes */ + } else if (pathlen == 0 + || (pathlen == 2 && isalpha(out[0]) && out[1] == ':')) + break; /* no more "from" path left, we're done */ + else if (to[0] == '.' && to[1] == '.' + && (to[2] == '/' || to[2] == '\\')) { + if (pathlen >= 3 && out[pathlen-1] == '\\' + && out[pathlen-2] == '.' && out[pathlen-3] == '.') { + /* can't ".." against a "..", so we're done. */ + break; + } + + to += 3; /* throw away "../" (or "..\") */ + while (*to == '/' || *to == '\\') + to++; /* strip off any additional slashes */ + + /* and back out last directory in "out" if not already at root */ + if (pathlen > 1) { + pathlen--; /* strip off trailing '/' */ + while (pathlen > 0 && out[pathlen-1] != '\\') + pathlen--; + } + } else + break; + } + + /* Copy "to" to tail of output, and we're done */ + /* Combine any double slashes when copying */ + for (j=pathlen; *to; to++) { + if ((*to == '/' || *to == '\\') && (*(to+1) == '/' || *(to+1) == '\\')) + continue; + if (*to == '/') + out[j++] = '\\'; + else + out[j++] = *to; + } + out[j++] = '\0'; + + return out; +} + +size_t +yasm__createpath_common(const char *path, int win) +{ + const char *pp = path, *pe; + char *ts, *tp; + size_t len, lth; + + lth = len = strlen(path); + ts = tp = (char *) malloc(len + 1); + pe = pp + len; + while (pe > pp) { + if ((win && *pe == '\\') || *pe == '/') + break; + --pe; + --lth; + } + + while (pp <= pe) { + if (pp == pe || (win && *pp == '\\') || *pp == '/') { +#ifdef _WIN32 + struct _finddata_t fi; + intptr_t h; +#elif defined(HAVE_SYS_STAT_H) + struct stat fi; +#endif + *tp = '\0'; + +#ifdef _WIN32 + h = _findfirst(ts, &fi); + if (h != -1) { + if (fi.attrib != _A_SUBDIR) { + _findclose(h); + break; + } + } else if (errno == ENOENT) { + if (_mkdir(ts) == -1) { + _findclose(h); + lth = -1; + break; + } + } + _findclose(h); +#elif defined(HAVE_SYS_STAT_H) + if (stat(ts, &fi) != -1) { + if (!S_ISDIR(fi.st_mode)) + break; + } else if (errno == ENOENT) { + if (mkdir(ts, 0755) == -1) { + lth = 0; + break; + } + } +#else + break; +#endif + } + *tp++ = *pp++; + } + free(ts); + return lth; +} + +typedef struct incpath { + STAILQ_ENTRY(incpath) link; + /*@owned@*/ char *path; +} incpath; + +STAILQ_HEAD(incpath_head, incpath) incpaths = STAILQ_HEAD_INITIALIZER(incpaths); + +FILE * +yasm_fopen_include(const char *iname, const char *from, const char *mode, + char **oname) +{ + FILE *f; + char *combine; + incpath *np; + + /* Try directly relative to from first, then each of the include paths */ + if (from) { + combine = yasm__combpath(from, iname); + f = fopen(combine, mode); + if (f) { + if (oname) + *oname = combine; + else + yasm_xfree(combine); + return f; + } + yasm_xfree(combine); + } + + STAILQ_FOREACH(np, &incpaths, link) { + combine = yasm__combpath(np->path, iname); + f = fopen(combine, mode); + if (f) { + if (oname) + *oname = combine; + else + yasm_xfree(combine); + return f; + } + yasm_xfree(combine); + } + + if (oname) + *oname = NULL; + return NULL; +} + +void +yasm_delete_include_paths(void) +{ + incpath *n1, *n2; + + n1 = STAILQ_FIRST(&incpaths); + while (n1) { + n2 = STAILQ_NEXT(n1, link); + yasm_xfree(n1->path); + yasm_xfree(n1); + n1 = n2; + } + STAILQ_INIT(&incpaths); +} + +const char * +yasm_get_include_dir(void **iter) +{ + incpath *p = (incpath *)*iter; + + if (!p) + p = STAILQ_FIRST(&incpaths); + else + p = STAILQ_NEXT(p, link); + + *iter = p; + if (p) + return p->path; + else + return NULL; +} + +void +yasm_add_include_path(const char *path) +{ + incpath *np = yasm_xmalloc(sizeof(incpath)); + size_t len = strlen(path); + + np->path = yasm_xmalloc(len+2); + memcpy(np->path, path, len+1); + /* Add trailing slash if it is missing */ + if (path[len-1] != '\\' && path[len-1] != '/') { + np->path[len] = '/'; + np->path[len+1] = '\0'; + } + + STAILQ_INSERT_TAIL(&incpaths, np, link); +} + +size_t +yasm_fwrite_16_l(unsigned short val, FILE *f) +{ + if (fputc(val & 0xFF, f) == EOF) + return 0; + if (fputc((val >> 8) & 0xFF, f) == EOF) + return 0; + return 1; +} + +size_t +yasm_fwrite_32_l(unsigned long val, FILE *f) +{ + if (fputc((int)(val & 0xFF), f) == EOF) + return 0; + if (fputc((int)((val >> 8) & 0xFF), f) == EOF) + return 0; + if (fputc((int)((val >> 16) & 0xFF), f) == EOF) + return 0; + if (fputc((int)((val >> 24) & 0xFF), f) == EOF) + return 0; + return 1; +} + +size_t +yasm_fwrite_16_b(unsigned short val, FILE *f) +{ + if (fputc((val >> 8) & 0xFF, f) == EOF) + return 0; + if (fputc(val & 0xFF, f) == EOF) + return 0; + return 1; +} + +size_t +yasm_fwrite_32_b(unsigned long val, FILE *f) +{ + if (fputc((int)((val >> 24) & 0xFF), f) == EOF) + return 0; + if (fputc((int)((val >> 16) & 0xFF), f) == EOF) + return 0; + if (fputc((int)((val >> 8) & 0xFF), f) == EOF) + return 0; + if (fputc((int)(val & 0xFF), f) == EOF) + return 0; + return 1; +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/file.h b/third-party/yasm/yasm-1.3.0/libyasm/file.h new file mode 100644 index 0000000000..1e9b87b0d5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/file.h @@ -0,0 +1,525 @@ +/** + * \file libyasm/file.h + * \brief YASM file helpers. + * + * \license + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_FILE_H +#define YASM_FILE_H + +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +/** Re2c scanner state. */ +typedef struct yasm_scanner { + unsigned char *bot; /**< Bottom of scan buffer */ + unsigned char *tok; /**< Start of token */ + unsigned char *ptr; /**< Scan marker */ + unsigned char *cur; /**< Cursor (1 past end of token) */ + unsigned char *lim; /**< Limit of good data */ + unsigned char *top; /**< Top of scan buffer */ + unsigned char *eof; /**< End of file */ +} yasm_scanner; + +/** Initialize scanner state. + * \param scanner Re2c scanner state + */ +YASM_LIB_DECL +void yasm_scanner_initialize(yasm_scanner *scanner); + +/** Frees any memory used by scanner state; does not free state itself. + * \param scanner Re2c scanner state + */ +YASM_LIB_DECL +void yasm_scanner_delete(yasm_scanner *scanner); + +/** Fill a scanner state structure with data coming from an input function. + * \param scanner Re2c scanner state + * \param cursor Re2c scan cursor + * \param input_func Input function to read data; takes buffer and maximum + * number of bytes, returns number of bytes read. + * \param input_func_data Data to pass as the first parameter to input_func + * \return 1 if this was the first time this function was called on this + * scanner state, 0 otherwise. + */ +YASM_LIB_DECL +int yasm_fill_helper + (yasm_scanner *scanner, unsigned char **cursor, + size_t (*input_func) (void *d, unsigned char *buf, size_t max), + void *input_func_data); + +/** Unescape a string with C-style escapes. Handles b, f, n, r, t, and hex + * and octal escapes. String is updated in-place. + * Edge cases: + * - hex escapes: reads as many hex digits as possible, takes last 2 as value. + * - oct escapes: takes up to 3 digits 0-9 and scales appropriately, with + * warning. + * \param str C-style string (updated in place) + * \param len length of string (updated with new length) + */ +YASM_LIB_DECL +void yasm_unescape_cstring(unsigned char *str, size_t *len); + +/** Split a UNIX pathname into head (directory) and tail (base filename) + * portions. + * \internal + * \param path pathname + * \param tail (returned) base filename + * \return Length of head (directory). + */ +YASM_LIB_DECL +size_t yasm__splitpath_unix(const char *path, /*@out@*/ const char **tail); + +/** Split a Windows pathname into head (directory) and tail (base filename) + * portions. + * \internal + * \param path pathname + * \param tail (returned) base filename + * \return Length of head (directory). + */ +YASM_LIB_DECL +size_t yasm__splitpath_win(const char *path, /*@out@*/ const char **tail); + +/** Split a pathname into head (directory) and tail (base filename) portions. + * Unless otherwise defined, defaults to yasm__splitpath_unix(). + * \internal + * \param path pathname + * \param tail (returned) base filename + * \return Length of head (directory). + */ +#ifndef yasm__splitpath +# if defined (_WIN32) || defined (WIN32) || defined (__MSDOS__) || \ + defined (__DJGPP__) || defined (__OS2__) +# define yasm__splitpath(path, tail) yasm__splitpath_win(path, tail) +# else +# define yasm__splitpath(path, tail) yasm__splitpath_unix(path, tail) +# endif +#endif + +/** Get the current working directory. + * \internal + * \return Current working directory pathname (newly allocated). + */ +YASM_LIB_DECL +/*@only@*/ char *yasm__getcwd(void); + +/** Convert a relative or absolute pathname into an absolute pathname. + * \internal + * \param path pathname + * \return Absolute version of path (newly allocated). + */ +YASM_LIB_DECL +/*@only@*/ char *yasm__abspath(const char *path); + +/** Build a UNIX pathname that is equivalent to accessing the "to" pathname + * when you're in the directory containing "from". Result is relative if both + * from and to are relative. + * \internal + * \param from from pathname + * \param to to pathname + * \return Combined path (newly allocated). + */ +YASM_LIB_DECL +char *yasm__combpath_unix(const char *from, const char *to); + +/** Build a Windows pathname that is equivalent to accessing the "to" pathname + * when you're in the directory containing "from". Result is relative if both + * from and to are relative. + * \internal + * \param from from pathname + * \param to to pathname + * \return Combined path (newly allocated). + */ +YASM_LIB_DECL +char *yasm__combpath_win(const char *from, const char *to); + +/** Build a pathname that is equivalent to accessing the "to" pathname + * when you're in the directory containing "from". Result is relative if both + * from and to are relative. + * Unless otherwise defined, defaults to yasm__combpath_unix(). + * \internal + * \param from from pathname + * \param to to pathname + * \return Combined path (newly allocated). + */ +#ifndef yasm__combpath +# if defined (_WIN32) || defined (WIN32) || defined (__MSDOS__) || \ + defined (__DJGPP__) || defined (__OS2__) +# define yasm__combpath(from, to) yasm__combpath_win(from, to) +# else +# define yasm__combpath(from, to) yasm__combpath_unix(from, to) +# endif +#endif + +/** Recursively create tree of directories needed for pathname. + * \internal + * \param path pathname + * \param win handle windows paths + * \return Length of directory portion of pathname. + */ +YASM_LIB_DECL +size_t yasm__createpath_common(const char *path, int win); + +/** Recursively create tree of directories needed for pathname. + * Unless otherwise defined, defaults to yasm__createpath_unix(). + * \internal + * \param path pathname + * \return Length of directory portion of pathname. + */ +#ifndef yasm__createpath +# if defined (_WIN32) || defined (WIN32) || defined (__MSDOS__) || \ + defined (__DJGPP__) || defined (__OS2__) +# define yasm__createpath(path) yasm__createpath_common(path, 1) +# else +# define yasm__createpath(path) yasm__createpath_common(path, 0) +# endif +#endif + +/** Try to find and open an include file, searching through include paths. + * First iname is looked for relative to the directory containing "from", then + * it's looked for relative to each of the include paths. + * + * All pathnames may be either absolute or relative; from, oname, and + * include paths, if relative, are relative from the current working directory. + * + * First match wins; the full pathname (newly allocated) to the opened file + * is saved into oname, and the fopen'ed FILE * is returned. If not found, + * NULL is returned. + * + * \param iname file to include + * \param from file doing the including + * \param mode fopen mode string + * \param oname full pathname of included file (may be relative). NULL + * may be passed if this is unwanted. + * \return fopen'ed include file, or NULL if not found. + */ +YASM_LIB_DECL +/*@null@*/ FILE *yasm_fopen_include + (const char *iname, const char *from, const char *mode, + /*@null@*/ /*@out@*/ /*@only@*/ char **oname); + +/** Delete any stored include paths added by yasm_add_include_path(). + */ +YASM_LIB_DECL +void yasm_delete_include_paths(void); + +/** Iterate through include paths. +*/ +YASM_LIB_DECL +const char * yasm_get_include_dir(void **iter); + +/** Add an include path for use by yasm_fopen_include(). + * If path is relative, it is treated by yasm_fopen_include() as relative to + * the current working directory. + * + * \param path path to add + */ +YASM_LIB_DECL +void yasm_add_include_path(const char *path); + +/** Write an 8-bit value to a buffer, incrementing buffer pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 8-bit value + */ +#define YASM_WRITE_8(ptr, val) \ + *((ptr)++) = (unsigned char)((val) & 0xFF) + +/** Write a 16-bit value to a buffer in little endian, incrementing buffer + * pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 16-bit value + */ +#define YASM_WRITE_16_L(ptr, val) \ + do { \ + *((ptr)++) = (unsigned char)((val) & 0xFF); \ + *((ptr)++) = (unsigned char)(((val) >> 8) & 0xFF); \ + } while (0) + +/** Write a 32-bit value to a buffer in little endian, incrementing buffer + * pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 32-bit value + */ +#define YASM_WRITE_32_L(ptr, val) \ + do { \ + *((ptr)++) = (unsigned char)((val) & 0xFF); \ + *((ptr)++) = (unsigned char)(((val) >> 8) & 0xFF); \ + *((ptr)++) = (unsigned char)(((val) >> 16) & 0xFF); \ + *((ptr)++) = (unsigned char)(((val) >> 24) & 0xFF); \ + } while (0) + +/** Write a 16-bit value to a buffer in big endian, incrementing buffer + * pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 16-bit value + */ +#define YASM_WRITE_16_B(ptr, val) \ + do { \ + *((ptr)++) = (unsigned char)(((val) >> 8) & 0xFF); \ + *((ptr)++) = (unsigned char)((val) & 0xFF); \ + } while (0) + +/** Write a 32-bit value to a buffer in big endian, incrementing buffer + * pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 32-bit value + */ +#define YASM_WRITE_32_B(ptr, val) \ + do { \ + *((ptr)++) = (unsigned char)(((val) >> 24) & 0xFF); \ + *((ptr)++) = (unsigned char)(((val) >> 16) & 0xFF); \ + *((ptr)++) = (unsigned char)(((val) >> 8) & 0xFF); \ + *((ptr)++) = (unsigned char)((val) & 0xFF); \ + } while (0) + + +/** Write an 8-bit value to a buffer. Does not increment buffer pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 8-bit value + */ +#define YASM_SAVE_8(ptr, val) \ + *(ptr) = (unsigned char)((val) & 0xFF) + +/** Write a 16-bit value to a buffer in little endian. Does not increment + * buffer pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 16-bit value + */ +#define YASM_SAVE_16_L(ptr, val) \ + do { \ + *(ptr) = (unsigned char)((val) & 0xFF); \ + *((ptr)+1) = (unsigned char)(((val) >> 8) & 0xFF); \ + } while (0) + +/** Write a 32-bit value to a buffer in little endian. Does not increment + * buffer pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 32-bit value + */ +#define YASM_SAVE_32_L(ptr, val) \ + do { \ + *(ptr) = (unsigned char)((val) & 0xFF); \ + *((ptr)+1) = (unsigned char)(((val) >> 8) & 0xFF); \ + *((ptr)+2) = (unsigned char)(((val) >> 16) & 0xFF); \ + *((ptr)+3) = (unsigned char)(((val) >> 24) & 0xFF); \ + } while (0) + +/** Write a 16-bit value to a buffer in big endian. Does not increment buffer + * pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 16-bit value + */ +#define YASM_SAVE_16_B(ptr, val) \ + do { \ + *(ptr) = (unsigned char)(((val) >> 8) & 0xFF); \ + *((ptr)+1) = (unsigned char)((val) & 0xFF); \ + } while (0) + +/** Write a 32-bit value to a buffer in big endian. Does not increment buffer + * pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 32-bit value + */ +#define YASM_SAVE_32_B(ptr, val) \ + do { \ + *(ptr) = (unsigned char)(((val) >> 24) & 0xFF); \ + *((ptr)+1) = (unsigned char)(((val) >> 16) & 0xFF); \ + *((ptr)+2) = (unsigned char)(((val) >> 8) & 0xFF); \ + *((ptr)+3) = (unsigned char)((val) & 0xFF); \ + } while (0) + +/** Direct-to-file version of YASM_SAVE_16_L(). + * \note Using the macro multiple times with a single fwrite() call will + * probably be faster than calling this function many times. + * \param val 16-bit value + * \param f file + * \return 1 if the write was successful, 0 if not (just like fwrite()). + */ +YASM_LIB_DECL +size_t yasm_fwrite_16_l(unsigned short val, FILE *f); + +/** Direct-to-file version of YASM_SAVE_32_L(). + * \note Using the macro multiple times with a single fwrite() call will + * probably be faster than calling this function many times. + * \param val 32-bit value + * \param f file + * \return 1 if the write was successful, 0 if not (just like fwrite()). + */ +YASM_LIB_DECL +size_t yasm_fwrite_32_l(unsigned long val, FILE *f); + +/** Direct-to-file version of YASM_SAVE_16_B(). + * \note Using the macro multiple times with a single fwrite() call will + * probably be faster than calling this function many times. + * \param val 16-bit value + * \param f file + * \return 1 if the write was successful, 0 if not (just like fwrite()). + */ +YASM_LIB_DECL +size_t yasm_fwrite_16_b(unsigned short val, FILE *f); + +/** Direct-to-file version of YASM_SAVE_32_B(). + * \note Using the macro multiple times with a single fwrite() call will + * probably be faster than calling this function many times. + * \param val 32-bit value + * \param f file + * \return 1 if the write was successful, 0 if not (just like fwrite()). + */ +YASM_LIB_DECL +size_t yasm_fwrite_32_b(unsigned long val, FILE *f); + +/** Read an 8-bit value from a buffer, incrementing buffer pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 8-bit value + */ +#define YASM_READ_8(val, ptr) \ + (val) = *((ptr)++) & 0xFF + +/** Read a 16-bit value from a buffer in little endian, incrementing buffer + * pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 16-bit value + */ +#define YASM_READ_16_L(val, ptr) \ + do { \ + (val) = *((ptr)++) & 0xFF; \ + (val) |= (*((ptr)++) & 0xFF) << 8; \ + } while (0) + +/** Read a 32-bit value from a buffer in little endian, incrementing buffer + * pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 32-bit value + */ +#define YASM_READ_32_L(val, ptr) \ + do { \ + (val) = *((ptr)++) & 0xFF; \ + (val) |= (*((ptr)++) & 0xFF) << 8; \ + (val) |= (*((ptr)++) & 0xFF) << 16; \ + (val) |= (*((ptr)++) & 0xFF) << 24; \ + } while (0) + +/** Read a 16-bit value from a buffer in big endian, incrementing buffer + * pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 16-bit value + */ +#define YASM_READ_16_B(val, ptr) \ + do { \ + (val) = (*((ptr)++) & 0xFF) << 8; \ + (val) |= *((ptr)++) & 0xFF; \ + } while (0) + +/** Read a 32-bit value from a buffer in big endian, incrementing buffer + * pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 32-bit value + */ +#define YASM_READ_32_B(val, ptr) \ + do { \ + (val) = (*((ptr)++) & 0xFF) << 24; \ + (val) |= (*((ptr)++) & 0xFF) << 16; \ + (val) |= (*((ptr)++) & 0xFF) << 8; \ + (val) |= *((ptr)++) & 0xFF; \ + } while (0) + +/** Read an 8-bit value from a buffer. Does not increment buffer pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 8-bit value + */ +#define YASM_LOAD_8(val, ptr) \ + (val) = *(ptr) & 0xFF + +/** Read a 16-bit value from a buffer in little endian. Does not increment + * buffer pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 16-bit value + */ +#define YASM_LOAD_16_L(val, ptr) \ + do { \ + (val) = *(ptr) & 0xFF; \ + (val) |= (*((ptr)+1) & 0xFF) << 8; \ + } while (0) + +/** Read a 32-bit value from a buffer in little endian. Does not increment + * buffer pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 32-bit value + */ +#define YASM_LOAD_32_L(val, ptr) \ + do { \ + (val) = (unsigned long)(*(ptr) & 0xFF); \ + (val) |= (unsigned long)((*((ptr)+1) & 0xFF) << 8); \ + (val) |= (unsigned long)((*((ptr)+2) & 0xFF) << 16); \ + (val) |= (unsigned long)((*((ptr)+3) & 0xFF) << 24); \ + } while (0) + +/** Read a 16-bit value from a buffer in big endian. Does not increment buffer + * pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 16-bit value + */ +#define YASM_LOAD_16_B(val, ptr) \ + do { \ + (val) = (*(ptr) & 0xFF) << 8; \ + (val) |= *((ptr)+1) & 0xFF; \ + } while (0) + +/** Read a 32-bit value from a buffer in big endian. Does not increment buffer + * pointer. + * \note Only works properly if ptr is an (unsigned char *). + * \param ptr buffer + * \param val 32-bit value + */ +#define YASM_LOAD_32_B(val, ptr) \ + do { \ + (val) = (unsigned long)((*(ptr) & 0xFF) << 24); \ + (val) |= (unsigned long)((*((ptr)+1) & 0xFF) << 16); \ + (val) |= (unsigned long)((*((ptr)+2) & 0xFF) << 8); \ + (val) |= (unsigned long)(*((ptr)+3) & 0xFF); \ + } while (0) + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/floatnum.c b/third-party/yasm/yasm-1.3.0/libyasm/floatnum.c new file mode 100644 index 0000000000..ab67c2b2e4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/floatnum.c @@ -0,0 +1,760 @@ +/* + * Floating point number functions. + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Based on public-domain x86 assembly code by Randall Hyde (8/28/91). + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 "util.h" + +#include + +#include "coretype.h" +#include "bitvect.h" +#include "file.h" + +#include "errwarn.h" +#include "floatnum.h" + + +/* 97-bit internal floating point format: + * 0000000s eeeeeeee eeeeeeee m.....................................m + * Sign exponent mantissa (80 bits) + * 79 0 + * + * Only L.O. bit of Sign byte is significant. The rest is zero. + * Exponent is bias 32767. + * Mantissa does NOT have an implied one bit (it's explicit). + */ +struct yasm_floatnum { + /*@only@*/ wordptr mantissa; /* Allocated to MANT_BITS bits */ + unsigned short exponent; + unsigned char sign; + unsigned char flags; +}; + +/* constants describing parameters of internal floating point format */ +#define MANT_BITS 80 +#define MANT_BYTES 10 +#define MANT_SIGDIGITS 24 +#define EXP_BIAS 0x7FFF +#define EXP_INF 0xFFFF +#define EXP_MAX 0xFFFE +#define EXP_MIN 1 +#define EXP_ZERO 0 + +/* Flag settings for flags field */ +#define FLAG_ISZERO 1<<0 + +/* Note this structure integrates the floatnum structure */ +typedef struct POT_Entry_s { + yasm_floatnum f; + int dec_exponent; +} POT_Entry; + +/* "Source" for POT_Entry. */ +typedef struct POT_Entry_Source_s { + unsigned char mantissa[MANT_BYTES]; /* little endian mantissa */ + unsigned short exponent; /* Bias 32767 exponent */ +} POT_Entry_Source; + +/* Power of ten tables used by the floating point I/O routines. + * The POT_Table? arrays are built from the POT_Table?_Source arrays at + * runtime by POT_Table_Init(). + */ + +/* This table contains the powers of ten raised to negative powers of two: + * + * entry[12-n] = 10 ** (-2 ** n) for 0 <= n <= 12. + * entry[13] = 1.0 + */ +static /*@only@*/ POT_Entry *POT_TableN; +static POT_Entry_Source POT_TableN_Source[] = { + {{0xe3,0x2d,0xde,0x9f,0xce,0xd2,0xc8,0x04,0xdd,0xa6},0x4ad8}, /* 1e-4096 */ + {{0x25,0x49,0xe4,0x2d,0x36,0x34,0x4f,0x53,0xae,0xce},0x656b}, /* 1e-2048 */ + {{0xa6,0x87,0xbd,0xc0,0x57,0xda,0xa5,0x82,0xa6,0xa2},0x72b5}, /* 1e-1024 */ + {{0x33,0x71,0x1c,0xd2,0x23,0xdb,0x32,0xee,0x49,0x90},0x795a}, /* 1e-512 */ + {{0x91,0xfa,0x39,0x19,0x7a,0x63,0x25,0x43,0x31,0xc0},0x7cac}, /* 1e-256 */ + {{0x7d,0xac,0xa0,0xe4,0xbc,0x64,0x7c,0x46,0xd0,0xdd},0x7e55}, /* 1e-128 */ + {{0x24,0x3f,0xa5,0xe9,0x39,0xa5,0x27,0xea,0x7f,0xa8},0x7f2a}, /* 1e-64 */ + {{0xde,0x67,0xba,0x94,0x39,0x45,0xad,0x1e,0xb1,0xcf},0x7f94}, /* 1e-32 */ + {{0x2f,0x4c,0x5b,0xe1,0x4d,0xc4,0xbe,0x94,0x95,0xe6},0x7fc9}, /* 1e-16 */ + {{0xc2,0xfd,0xfc,0xce,0x61,0x84,0x11,0x77,0xcc,0xab},0x7fe4}, /* 1e-8 */ + {{0xc3,0xd3,0x2b,0x65,0x19,0xe2,0x58,0x17,0xb7,0xd1},0x7ff1}, /* 1e-4 */ + {{0x71,0x3d,0x0a,0xd7,0xa3,0x70,0x3d,0x0a,0xd7,0xa3},0x7ff8}, /* 1e-2 */ + {{0xcd,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc},0x7ffb}, /* 1e-1 */ + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80},0x7fff}, /* 1e-0 */ +}; + +/* This table contains the powers of ten raised to positive powers of two: + * + * entry[12-n] = 10 ** (2 ** n) for 0 <= n <= 12. + * entry[13] = 1.0 + * entry[-1] = entry[0]; + * + * There is a -1 entry since it is possible for the algorithm to back up + * before the table. This -1 entry is created at runtime by duplicating the + * 0 entry. + */ +static /*@only@*/ POT_Entry *POT_TableP; +static POT_Entry_Source POT_TableP_Source[] = { + {{0x4c,0xc9,0x9a,0x97,0x20,0x8a,0x02,0x52,0x60,0xc4},0xb525}, /* 1e+4096 */ + {{0x4d,0xa7,0xe4,0x5d,0x3d,0xc5,0x5d,0x3b,0x8b,0x9e},0x9a92}, /* 1e+2048 */ + {{0x0d,0x65,0x17,0x0c,0x75,0x81,0x86,0x75,0x76,0xc9},0x8d48}, /* 1e+1024 */ + {{0x65,0xcc,0xc6,0x91,0x0e,0xa6,0xae,0xa0,0x19,0xe3},0x86a3}, /* 1e+512 */ + {{0xbc,0xdd,0x8d,0xde,0xf9,0x9d,0xfb,0xeb,0x7e,0xaa},0x8351}, /* 1e+256 */ + {{0x6f,0xc6,0xdf,0x8c,0xe9,0x80,0xc9,0x47,0xba,0x93},0x81a8}, /* 1e+128 */ + {{0xbf,0x3c,0xd5,0xa6,0xcf,0xff,0x49,0x1f,0x78,0xc2},0x80d3}, /* 1e+64 */ + {{0x20,0xf0,0x9d,0xb5,0x70,0x2b,0xa8,0xad,0xc5,0x9d},0x8069}, /* 1e+32 */ + {{0x00,0x00,0x00,0x00,0x00,0x04,0xbf,0xc9,0x1b,0x8e},0x8034}, /* 1e+16 */ + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xbc,0xbe},0x8019}, /* 1e+8 */ + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x9c},0x800c}, /* 1e+4 */ + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8},0x8005}, /* 1e+2 */ + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa0},0x8002}, /* 1e+1 */ + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80},0x7fff}, /* 1e+0 */ +}; + + +static void +POT_Table_Init_Entry(/*@out@*/ POT_Entry *e, POT_Entry_Source *s, int dec_exp) +{ + /* Save decimal exponent */ + e->dec_exponent = dec_exp; + + /* Initialize mantissa */ + e->f.mantissa = BitVector_Create(MANT_BITS, FALSE); + BitVector_Block_Store(e->f.mantissa, s->mantissa, MANT_BYTES); + + /* Initialize exponent */ + e->f.exponent = s->exponent; + + /* Set sign to 0 (positive) */ + e->f.sign = 0; + + /* Clear flags */ + e->f.flags = 0; +} + +/*@-compdef@*/ +void +yasm_floatnum_initialize(void) +/*@globals undef POT_TableN, undef POT_TableP, POT_TableP_Source, + POT_TableN_Source @*/ +{ + int dec_exp = 1; + int i; + + /* Allocate space for two POT tables */ + POT_TableN = yasm_xmalloc(14*sizeof(POT_Entry)); + POT_TableP = yasm_xmalloc(15*sizeof(POT_Entry)); /* note 1 extra for -1 */ + + /* Initialize entry[0..12] */ + for (i=12; i>=0; i--) { + POT_Table_Init_Entry(&POT_TableN[i], &POT_TableN_Source[i], 0-dec_exp); + POT_Table_Init_Entry(&POT_TableP[i+1], &POT_TableP_Source[i], dec_exp); + dec_exp *= 2; /* Update decimal exponent */ + } + + /* Initialize entry[13] */ + POT_Table_Init_Entry(&POT_TableN[13], &POT_TableN_Source[13], 0); + POT_Table_Init_Entry(&POT_TableP[14], &POT_TableP_Source[13], 0); + + /* Initialize entry[-1] for POT_TableP */ + POT_Table_Init_Entry(&POT_TableP[0], &POT_TableP_Source[0], 4096); + + /* Offset POT_TableP so that [0] becomes [-1] */ + POT_TableP++; +} +/*@=compdef@*/ + +/*@-globstate@*/ +void +yasm_floatnum_cleanup(void) +{ + int i; + + /* Un-offset POT_TableP */ + POT_TableP--; + + for (i=0; i<14; i++) { + BitVector_Destroy(POT_TableN[i].f.mantissa); + BitVector_Destroy(POT_TableP[i].f.mantissa); + } + BitVector_Destroy(POT_TableP[14].f.mantissa); + + yasm_xfree(POT_TableN); + yasm_xfree(POT_TableP); +} +/*@=globstate@*/ + +static void +floatnum_normalize(yasm_floatnum *flt) +{ + long norm_amt; + + if (BitVector_is_empty(flt->mantissa)) { + flt->exponent = 0; + return; + } + + /* Look for the highest set bit, shift to make it the MSB, and adjust + * exponent. Don't let exponent go negative. */ + norm_amt = (MANT_BITS-1)-Set_Max(flt->mantissa); + if (norm_amt > (long)flt->exponent) + norm_amt = (long)flt->exponent; + BitVector_Move_Left(flt->mantissa, (N_int)norm_amt); + flt->exponent -= (unsigned short)norm_amt; +} + +/* acc *= op */ +static void +floatnum_mul(yasm_floatnum *acc, const yasm_floatnum *op) +{ + long expon; + wordptr product, op1, op2; + long norm_amt; + + /* Compute the new sign */ + acc->sign ^= op->sign; + + /* Check for multiply by 0 */ + if (BitVector_is_empty(acc->mantissa) || BitVector_is_empty(op->mantissa)) { + BitVector_Empty(acc->mantissa); + acc->exponent = EXP_ZERO; + return; + } + + /* Add exponents, checking for overflow/underflow. */ + expon = (((int)acc->exponent)-EXP_BIAS) + (((int)op->exponent)-EXP_BIAS); + expon += EXP_BIAS; + if (expon > EXP_MAX) { + /* Overflow; return infinity. */ + BitVector_Empty(acc->mantissa); + acc->exponent = EXP_INF; + return; + } else if (expon < EXP_MIN) { + /* Underflow; return zero. */ + BitVector_Empty(acc->mantissa); + acc->exponent = EXP_ZERO; + return; + } + + /* Add one to the final exponent, as the multiply shifts one extra time. */ + acc->exponent = (unsigned short)(expon+1); + + /* Allocate space for the multiply result */ + product = BitVector_Create((N_int)((MANT_BITS+1)*2), FALSE); + + /* Allocate 1-bit-longer fields to force the operands to be unsigned */ + op1 = BitVector_Create((N_int)(MANT_BITS+1), FALSE); + op2 = BitVector_Create((N_int)(MANT_BITS+1), FALSE); + + /* Make the operands unsigned after copying from original operands */ + BitVector_Copy(op1, acc->mantissa); + BitVector_MSB(op1, 0); + BitVector_Copy(op2, op->mantissa); + BitVector_MSB(op2, 0); + + /* Compute the product of the mantissas */ + BitVector_Multiply(product, op1, op2); + + /* Normalize the product. Note: we know the product is non-zero because + * both of the original operands were non-zero. + * + * Look for the highest set bit, shift to make it the MSB, and adjust + * exponent. Don't let exponent go negative. + */ + norm_amt = (MANT_BITS*2-1)-Set_Max(product); + if (norm_amt > (long)acc->exponent) + norm_amt = (long)acc->exponent; + BitVector_Move_Left(product, (N_int)norm_amt); + acc->exponent -= (unsigned short)norm_amt; + + /* Store the highest bits of the result */ + BitVector_Interval_Copy(acc->mantissa, product, 0, MANT_BITS, MANT_BITS); + + /* Free allocated variables */ + BitVector_Destroy(product); + BitVector_Destroy(op1); + BitVector_Destroy(op2); +} + +yasm_floatnum * +yasm_floatnum_create(const char *str) +{ + yasm_floatnum *flt; + int dec_exponent, dec_exp_add; /* decimal (powers of 10) exponent */ + int POT_index; + wordptr operand[2]; + int sig_digits; + int decimal_pt; + boolean carry; + + flt = yasm_xmalloc(sizeof(yasm_floatnum)); + + flt->mantissa = BitVector_Create(MANT_BITS, TRUE); + + /* allocate and initialize calculation variables */ + operand[0] = BitVector_Create(MANT_BITS, TRUE); + operand[1] = BitVector_Create(MANT_BITS, TRUE); + dec_exponent = 0; + sig_digits = 0; + decimal_pt = 1; + + /* set initial flags to 0 */ + flt->flags = 0; + + /* check for + or - character and skip */ + if (*str == '-') { + flt->sign = 1; + str++; + } else if (*str == '+') { + flt->sign = 0; + str++; + } else + flt->sign = 0; + + /* eliminate any leading zeros (which do not count as significant digits) */ + while (*str == '0') + str++; + + /* When we reach the end of the leading zeros, first check for a decimal + * point. If the number is of the form "0---0.0000" we need to get rid + * of the zeros after the decimal point and not count them as significant + * digits. + */ + if (*str == '.') { + str++; + while (*str == '0') { + str++; + dec_exponent--; + } + } else { + /* The number is of the form "yyy.xxxx" (where y <> 0). */ + while (isdigit(*str)) { + /* See if we've processed more than the max significant digits: */ + if (sig_digits < MANT_SIGDIGITS) { + /* Multiply mantissa by 10 [x = (x<<1)+(x<<3)] */ + BitVector_shift_left(flt->mantissa, 0); + BitVector_Copy(operand[0], flt->mantissa); + BitVector_Move_Left(flt->mantissa, 2); + carry = 0; + BitVector_add(operand[1], operand[0], flt->mantissa, &carry); + + /* Add in current digit */ + BitVector_Empty(operand[0]); + BitVector_Chunk_Store(operand[0], 4, 0, (N_long)(*str-'0')); + carry = 0; + BitVector_add(flt->mantissa, operand[1], operand[0], &carry); + } else { + /* Can't integrate more digits with mantissa, so instead just + * raise by a power of ten. + */ + dec_exponent++; + } + sig_digits++; + str++; + } + + if (*str == '.') + str++; + else + decimal_pt = 0; + } + + if (decimal_pt) { + /* Process the digits to the right of the decimal point. */ + while (isdigit(*str)) { + /* See if we've processed more than 19 significant digits: */ + if (sig_digits < 19) { + /* Raise by a power of ten */ + dec_exponent--; + + /* Multiply mantissa by 10 [x = (x<<1)+(x<<3)] */ + BitVector_shift_left(flt->mantissa, 0); + BitVector_Copy(operand[0], flt->mantissa); + BitVector_Move_Left(flt->mantissa, 2); + carry = 0; + BitVector_add(operand[1], operand[0], flt->mantissa, &carry); + + /* Add in current digit */ + BitVector_Empty(operand[0]); + BitVector_Chunk_Store(operand[0], 4, 0, (N_long)(*str-'0')); + carry = 0; + BitVector_add(flt->mantissa, operand[1], operand[0], &carry); + } + sig_digits++; + str++; + } + } + + if (*str == 'e' || *str == 'E') { + str++; + /* We just saw the "E" character, now read in the exponent value and + * add it into dec_exponent. + */ + dec_exp_add = 0; + sscanf(str, "%d", &dec_exp_add); + dec_exponent += dec_exp_add; + } + + /* Free calculation variables. */ + BitVector_Destroy(operand[1]); + BitVector_Destroy(operand[0]); + + /* Normalize the number, checking for 0 first. */ + if (BitVector_is_empty(flt->mantissa)) { + /* Mantissa is 0, zero exponent too. */ + flt->exponent = 0; + /* Set zero flag so output functions don't see 0 value as underflow. */ + flt->flags |= FLAG_ISZERO; + /* Return 0 value. */ + return flt; + } + /* Exponent if already norm. */ + flt->exponent = (unsigned short)(0x7FFF+(MANT_BITS-1)); + floatnum_normalize(flt); + + /* The number is normalized. Now multiply by 10 the number of times + * specified in DecExponent. This uses the power of ten tables to speed + * up this operation (and make it more accurate). + */ + if (dec_exponent > 0) { + POT_index = 0; + /* Until we hit 1.0 or finish exponent or overflow */ + while ((POT_index < 14) && (dec_exponent != 0) && + (flt->exponent != EXP_INF)) { + /* Find the first power of ten in the table which is just less than + * the exponent. + */ + while (dec_exponent < POT_TableP[POT_index].dec_exponent) + POT_index++; + + if (POT_index < 14) { + /* Subtract out what we're multiplying in from exponent */ + dec_exponent -= POT_TableP[POT_index].dec_exponent; + + /* Multiply by current power of 10 */ + floatnum_mul(flt, &POT_TableP[POT_index].f); + } + } + } else if (dec_exponent < 0) { + POT_index = 0; + /* Until we hit 1.0 or finish exponent or underflow */ + while ((POT_index < 14) && (dec_exponent != 0) && + (flt->exponent != EXP_ZERO)) { + /* Find the first power of ten in the table which is just less than + * the exponent. + */ + while (dec_exponent > POT_TableN[POT_index].dec_exponent) + POT_index++; + + if (POT_index < 14) { + /* Subtract out what we're multiplying in from exponent */ + dec_exponent -= POT_TableN[POT_index].dec_exponent; + + /* Multiply by current power of 10 */ + floatnum_mul(flt, &POT_TableN[POT_index].f); + } + } + } + + /* Round the result. (Don't round underflow or overflow). Also don't + * increment if this would cause the mantissa to wrap. + */ + if ((flt->exponent != EXP_INF) && (flt->exponent != EXP_ZERO) && + !BitVector_is_full(flt->mantissa)) + BitVector_increment(flt->mantissa); + + return flt; +} + +yasm_floatnum * +yasm_floatnum_copy(const yasm_floatnum *flt) +{ + yasm_floatnum *f = yasm_xmalloc(sizeof(yasm_floatnum)); + + f->mantissa = BitVector_Clone(flt->mantissa); + f->exponent = flt->exponent; + f->sign = flt->sign; + f->flags = flt->flags; + + return f; +} + +void +yasm_floatnum_destroy(yasm_floatnum *flt) +{ + BitVector_Destroy(flt->mantissa); + yasm_xfree(flt); +} + +int +yasm_floatnum_calc(yasm_floatnum *acc, yasm_expr_op op, + /*@unused@*/ yasm_floatnum *operand) +{ + if (op != YASM_EXPR_NEG) { + yasm_error_set(YASM_ERROR_FLOATING_POINT, + N_("Unsupported floating-point arithmetic operation")); + return 1; + } + acc->sign ^= 1; + return 0; +} + +int +yasm_floatnum_get_int(const yasm_floatnum *flt, unsigned long *ret_val) +{ + unsigned char t[4]; + + if (yasm_floatnum_get_sized(flt, t, 4, 32, 0, 0, 0)) { + *ret_val = 0xDEADBEEFUL; /* Obviously incorrect return value */ + return 1; + } + + YASM_LOAD_32_L(*ret_val, &t[0]); + return 0; +} + +/* Function used by conversion routines to actually perform the conversion. + * + * ptr -> the array to return the little-endian floating point value into. + * flt -> the floating point value to convert. + * byte_size -> the size in bytes of the output format. + * mant_bits -> the size in bits of the output mantissa. + * implicit1 -> does the output format have an implicit 1? 1=yes, 0=no. + * exp_bits -> the size in bits of the output exponent. + * + * Returns 0 on success, 1 if overflow, -1 if underflow. + */ +static int +floatnum_get_common(const yasm_floatnum *flt, /*@out@*/ unsigned char *ptr, + N_int byte_size, N_int mant_bits, int implicit1, + N_int exp_bits) +{ + long exponent = (long)flt->exponent; + wordptr output; + charptr buf; + unsigned int len; + unsigned int overflow = 0, underflow = 0; + int retval = 0; + long exp_bias = (1<<(exp_bits-1))-1; + long exp_inf = (1<mantissa, 0, + (N_int)((MANT_BITS-implicit1)-mant_bits), + mant_bits); + + /* round mantissa */ + if (BitVector_bit_test(flt->mantissa, (MANT_BITS-implicit1)-(mant_bits+1))) + BitVector_increment(output); + + if (BitVector_bit_test(output, mant_bits)) { + /* overflowed, so zero mantissa (and set explicit bit if necessary) */ + BitVector_Empty(output); + BitVector_Bit_Copy(output, mant_bits-1, !implicit1); + /* and up the exponent (checking for overflow) */ + if (exponent+1 >= EXP_INF) + overflow = 1; + else + exponent++; + } + + /* adjust the exponent to the output bias, checking for overflow */ + exponent -= EXP_BIAS-exp_bias; + if (exponent >= exp_inf) + overflow = 1; + else if (exponent <= 0) + underflow = 1; + + /* underflow and overflow both set!? */ + if (underflow && overflow) + yasm_internal_error(N_("Both underflow and overflow set")); + + /* check for underflow or overflow and set up appropriate output */ + if (underflow) { + BitVector_Empty(output); + exponent = 0; + if (!(flt->flags & FLAG_ISZERO)) + retval = -1; + } else if (overflow) { + BitVector_Empty(output); + exponent = exp_inf; + retval = 1; + } + + /* move exponent into place */ + BitVector_Chunk_Store(output, exp_bits, mant_bits, (N_long)exponent); + + /* merge in sign bit */ + BitVector_Bit_Copy(output, byte_size*8-1, flt->sign); + + /* get little-endian bytes */ + buf = BitVector_Block_Read(output, &len); + if (len < byte_size) + yasm_internal_error( + N_("Byte length of BitVector does not match bit length")); + + /* copy to output */ + memcpy(ptr, buf, byte_size*sizeof(unsigned char)); + + /* free allocated resources */ + yasm_xfree(buf); + + BitVector_Destroy(output); + + return retval; +} + +/* IEEE-754r "half precision" format: + * 16 bits: + * 15 9 Bit 0 + * | | | + * seee eemm mmmm mmmm + * + * e = bias 15 exponent + * s = sign bit + * m = mantissa bits, bit 10 is an implied one bit. + * + * IEEE-754 (Intel) "single precision" format: + * 32 bits: + * Bit 31 Bit 22 Bit 0 + * | | | + * seeeeeee emmmmmmm mmmmmmmm mmmmmmmm + * + * e = bias 127 exponent + * s = sign bit + * m = mantissa bits, bit 23 is an implied one bit. + * + * IEEE-754 (Intel) "double precision" format: + * 64 bits: + * bit 63 bit 51 bit 0 + * | | | + * seeeeeee eeeemmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm + * + * e = bias 1023 exponent. + * s = sign bit. + * m = mantissa bits. Bit 52 is an implied one bit. + * + * IEEE-754 (Intel) "extended precision" format: + * 80 bits: + * bit 79 bit 63 bit 0 + * | | | + * seeeeeee eeeeeeee mmmmmmmm m...m m...m m...m m...m m...m + * + * e = bias 16383 exponent + * m = 64 bit mantissa with NO implied bit! + * s = sign (for mantissa) + */ +int +yasm_floatnum_get_sized(const yasm_floatnum *flt, unsigned char *ptr, + size_t destsize, size_t valsize, size_t shift, + int bigendian, int warn) +{ + int retval; + if (destsize*8 != valsize || shift>0 || bigendian) { + /* TODO */ + yasm_internal_error(N_("unsupported floatnum functionality")); + } + switch (destsize) { + case 2: + retval = floatnum_get_common(flt, ptr, 2, 10, 1, 5); + break; + case 4: + retval = floatnum_get_common(flt, ptr, 4, 23, 1, 8); + break; + case 8: + retval = floatnum_get_common(flt, ptr, 8, 52, 1, 11); + break; + case 10: + retval = floatnum_get_common(flt, ptr, 10, 64, 0, 15); + break; + default: + yasm_internal_error(N_("Invalid float conversion size")); + /*@notreached@*/ + return 1; + } + if (warn) { + if (retval < 0) + yasm_warn_set(YASM_WARN_GENERAL, + N_("underflow in floating point expression")); + else if (retval > 0) + yasm_warn_set(YASM_WARN_GENERAL, + N_("overflow in floating point expression")); + } + return retval; +} + +/* 1 if the size is valid, 0 if it isn't */ +int +yasm_floatnum_check_size(/*@unused@*/ const yasm_floatnum *flt, size_t size) +{ + switch (size) { + case 16: + case 32: + case 64: + case 80: + return 1; + default: + return 0; + } +} + +void +yasm_floatnum_print(const yasm_floatnum *flt, FILE *f) +{ + unsigned char out[10]; + unsigned char *str; + int i; + + /* Internal format */ + str = BitVector_to_Hex(flt->mantissa); + fprintf(f, "%c %s *2^%04x\n", flt->sign?'-':'+', (char *)str, + flt->exponent); + yasm_xfree(str); + + /* 32-bit (single precision) format */ + fprintf(f, "32-bit: %d: ", + yasm_floatnum_get_sized(flt, out, 4, 32, 0, 0, 0)); + for (i=0; i<4; i++) + fprintf(f, "%02x ", out[i]); + fprintf(f, "\n"); + + /* 64-bit (double precision) format */ + fprintf(f, "64-bit: %d: ", + yasm_floatnum_get_sized(flt, out, 8, 64, 0, 0, 0)); + for (i=0; i<8; i++) + fprintf(f, "%02x ", out[i]); + fprintf(f, "\n"); + + /* 80-bit (extended precision) format */ + fprintf(f, "80-bit: %d: ", + yasm_floatnum_get_sized(flt, out, 10, 80, 0, 0, 0)); + for (i=0; i<10; i++) + fprintf(f, "%02x ", out[i]); + fprintf(f, "\n"); +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/floatnum.h b/third-party/yasm/yasm-1.3.0/libyasm/floatnum.h new file mode 100644 index 0000000000..d2c7042097 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/floatnum.h @@ -0,0 +1,131 @@ +/** + * \file libyasm/floatnum.h + * \brief YASM floating point (IEEE) interface. + * + * \license + * Copyright (C) 2001-2007 Peter Johnson + * + * Based on public-domain x86 assembly code by Randall Hyde (8/28/91). + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_FLOATNUM_H +#define YASM_FLOATNUM_H + +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +/** Initialize floatnum internal data structures. */ +YASM_LIB_DECL +void yasm_floatnum_initialize(void); + +/** Clean up internal floatnum allocations. */ +YASM_LIB_DECL +void yasm_floatnum_cleanup(void); + +/** Create a new floatnum from a decimal string. The input string must be in + * standard C representation ([+-]123.456e[-+]789). + * \param str floating point decimal string + * \return Newly allocated floatnum. + */ +YASM_LIB_DECL +/*@only@*/ yasm_floatnum *yasm_floatnum_create(const char *str); + +/** Duplicate a floatnum. + * \param flt floatnum + * \return Newly allocated floatnum with the same value as flt. + */ +YASM_LIB_DECL +/*@only@*/ yasm_floatnum *yasm_floatnum_copy(const yasm_floatnum *flt); + +/** Destroy (free allocated memory for) a floatnum. + * \param flt floatnum + */ +YASM_LIB_DECL +void yasm_floatnum_destroy(/*@only@*/ yasm_floatnum *flt); + +/** Floating point calculation function: acc = acc op operand. + * \note Not all operations in yasm_expr_op may be supported; unsupported + * operations will result in an error. + * \param acc floatnum accumulator + * \param op operation + * \param operand floatnum operand + * \return Nonzero on error. + */ +YASM_LIB_DECL +int yasm_floatnum_calc(yasm_floatnum *acc, yasm_expr_op op, + yasm_floatnum *operand); + +/** Convert a floatnum to single-precision and return as 32-bit value. + * The 32-bit value is a "standard" C value (eg, of unknown endian). + * \param flt floatnum + * \param ret_val pointer to storage for 32-bit output + * \return Nonzero if flt can't fit into single precision: -1 if underflow + * occurred, 1 if overflow occurred. + */ +YASM_LIB_DECL +int yasm_floatnum_get_int(const yasm_floatnum *flt, + /*@out@*/ unsigned long *ret_val); + +/** Output a #yasm_floatnum to buffer in little-endian or big-endian. Puts the + * value into the least significant bits of the destination, or may be shifted + * into more significant bits by the shift parameter. The destination bits are + * cleared before being set. [0] should be the first byte output to the file. + * \note Not all sizes are valid. Currently, only 32 (single-precision), 64 + * (double-precision), and 80 (extended-precision) are valid sizes. + * Use yasm_floatnum_check_size() to check for supported sizes. + * \param flt floatnum + * \param ptr pointer to storage for size bytes of output + * \param destsize destination size (in bytes) + * \param valsize size (in bits) + * \param shift left shift (in bits) + * \param bigendian endianness (nonzero=big, zero=little) + * \param warn enables standard overflow/underflow warnings + * \return Nonzero if flt can't fit into the specified precision: -1 if + * underflow occurred, 1 if overflow occurred. + */ +YASM_LIB_DECL +int yasm_floatnum_get_sized(const yasm_floatnum *flt, unsigned char *ptr, + size_t destsize, size_t valsize, size_t shift, + int bigendian, int warn); + +/** Basic check to see if size is valid for flt conversion (using + * yasm_floatnum_get_sized()). Doesn't actually check for underflow/overflow + * but rather checks for size=32,64,80 + * (at present). + * \param flt floatnum + * \param size number of bits of output space + * \return 1 if valid size, 0 if invalid size. + */ +YASM_LIB_DECL +int yasm_floatnum_check_size(const yasm_floatnum *flt, size_t size); + +/** Print various representations of a floatnum. For debugging purposes only. + * \param f file + * \param flt floatnum + */ +YASM_LIB_DECL +void yasm_floatnum_print(const yasm_floatnum *flt, FILE *f); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/genmodule.c b/third-party/yasm/yasm-1.3.0/libyasm/genmodule.c new file mode 100644 index 0000000000..867d93a5b2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/genmodule.c @@ -0,0 +1,228 @@ +/* + * + * Generate module.c from module.in and Makefile.am or Makefile. + * + * Copyright (C) 2004-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 +#include +#include +#include + +#include "compat-queue.h" + +#define OUTPUT "module.c" +#define MAXNAME 128 +#define MAXLINE 1024 +#define MAXMODULES 128 +#define MAXINCLUDES 256 + +typedef struct include { + STAILQ_ENTRY(include) link; + char *filename; +} include; + +int +main(int argc, char *argv[]) +{ + FILE *in, *out; + char *str; + int i; + size_t len; + char *strp; + char *modules[MAXMODULES]; + int num_modules = 0; + STAILQ_HEAD(includehead, include) includes = + STAILQ_HEAD_INITIALIZER(includes); + include *inc; + int isam = 0; + int linecont = 0; + + if (argc != 3) { + fprintf(stderr, "Usage: %s \n", argv[0]); + return EXIT_FAILURE; + } + + str = malloc(MAXLINE); + + /* Starting with initial input Makefile, look for include or + * YASM_MODULES += . Note this currently doesn't handle + * a relative starting path. + */ + len = strlen(argv[2]); + inc = malloc(sizeof(include)); + inc->filename = malloc(len+1); + strcpy(inc->filename, argv[2]); + STAILQ_INSERT_TAIL(&includes, inc, link); + + isam = argv[2][len-2] == 'a' && argv[2][len-1] == 'm'; + + while (!STAILQ_EMPTY(&includes)) { + inc = STAILQ_FIRST(&includes); + STAILQ_REMOVE_HEAD(&includes, link); + in = fopen(inc->filename, "rt"); + if (!in) { + fprintf(stderr, "Could not open `%s'.\n", inc->filename); + return EXIT_FAILURE; + } + free(inc->filename); + free(inc); + + while (fgets(str, MAXLINE, in)) { + /* Strip off any trailing whitespace */ + len = strlen(str); + if (len > 0) { + strp = &str[len-1]; + while (len > 0 && isspace(*strp)) { + *strp-- = '\0'; + len--; + } + } + + strp = str; + + /* Skip whitespace */ + while (isspace(*strp)) + strp++; + + /* Skip comments */ + if (*strp == '#') + continue; + + /* If line continuation, skip to continue copy */ + if (linecont) + goto keepgoing; + + /* Check for include if original input is .am file */ + if (isam && strncmp(strp, "include", 7) == 0 && isspace(strp[7])) { + strp += 7; + while (isspace(*strp)) + strp++; + /* Build new include and add to end of list */ + inc = malloc(sizeof(include)); + inc->filename = malloc(strlen(strp)+1); + strcpy(inc->filename, strp); + STAILQ_INSERT_TAIL(&includes, inc, link); + continue; + } + + /* Check for YASM_MODULES = or += */ + if (strncmp(strp, "YASM_MODULES", 12) != 0) + continue; + strp += 12; + while (isspace(*strp)) + strp++; + if (strncmp(strp, "+=", 2) != 0 && *strp != '=') + continue; + if (*strp == '+') + strp++; + strp++; + while (isspace(*strp)) + strp++; + +keepgoing: + /* Check for continuation */ + if (len > 0 && str[len-1] == '\\') { + str[len-1] = '\0'; + while (isspace(*strp)) + *strp-- = '\0'; + linecont = 1; + } else + linecont = 0; + + while (*strp != '\0') { + /* Copy module name */ + modules[num_modules] = malloc(MAXNAME); + len = 0; + while (*strp != '\0' && !isspace(*strp)) + modules[num_modules][len++] = *strp++; + modules[num_modules][len] = '\0'; + num_modules++; + + while (isspace(*strp)) + strp++; + } + } + fclose(in); + } + + out = fopen(OUTPUT, "wt"); + + if (!out) { + fprintf(stderr, "Could not open `%s'.\n", OUTPUT); + return EXIT_FAILURE; + } + + fprintf(out, "/* This file auto-generated by genmodule.c" + " - don't edit it */\n\n"); + + in = fopen(argv[1], "rt"); + if (!in) { + fprintf(stderr, "Could not open `%s'.\n", argv[1]); + fclose(out); + remove(OUTPUT); + return EXIT_FAILURE; + } + + len = 0; + while (fgets(str, MAXLINE, in)) { + if (strncmp(str, "MODULES_", 8) == 0) { + len = 0; + strp = str+8; + while (*strp != '\0' && *strp != '_') { + len++; + strp++; + } + *strp = '\0'; + + for (i=0; i + +#include "libyasm-stdint.h" +#include "coretype.h" +#include "hamt.h" + +struct HAMTEntry { + STAILQ_ENTRY(HAMTEntry) next; /* next hash table entry */ + /*@dependent@*/ const char *str; /* string being hashed */ + /*@owned@*/ void *data; /* data pointer being stored */ +}; + +typedef struct HAMTNode { + unsigned long BitMapKey; /* 32 bits, bitmap or hash key */ + uintptr_t BaseValue; /* Base of HAMTNode list or value */ +} HAMTNode; + +struct HAMT { + STAILQ_HEAD(HAMTEntryHead, HAMTEntry) entries; + HAMTNode *root; + /*@exits@*/ void (*error_func) (const char *file, unsigned int line, + const char *message); + unsigned long (*HashKey) (const char *key); + unsigned long (*ReHashKey) (const char *key, int Level); + int (*CmpKey) (const char *s1, const char *s2); +}; + +/* XXX make a portable version of this. This depends on the pointer being + * 4 or 2-byte aligned (as it uses the LSB of the pointer variable to store + * the subtrie flag! + */ +#define IsSubTrie(n) ((n)->BaseValue & 1) +#define SetSubTrie(h, n, v) do { \ + if ((uintptr_t)(v) & 1) \ + h->error_func(__FILE__, __LINE__, \ + N_("Subtrie is seen as subtrie before flag is set (misaligned?)")); \ + (n)->BaseValue = (uintptr_t)(v) | 1; \ + } while (0) +#define SetValue(h, n, v) do { \ + if ((uintptr_t)(v) & 1) \ + h->error_func(__FILE__, __LINE__, \ + N_("Value is seen as subtrie (misaligned?)")); \ + (n)->BaseValue = (uintptr_t)(v); \ + } while (0) +#define GetSubTrie(n) (HAMTNode *)(((n)->BaseValue | 1) ^ 1) + +static unsigned long +HashKey(const char *key) +{ + unsigned long a=31415, b=27183, vHash; + for (vHash=0; *key; key++, a*=b) + vHash = a*vHash + *key; + return vHash; +} + +static unsigned long +ReHashKey(const char *key, int Level) +{ + unsigned long a=31415, b=27183, vHash; + for (vHash=0; *key; key++, a*=b) + vHash = a*vHash*(unsigned long)Level + *key; + return vHash; +} + +static unsigned long +HashKey_nocase(const char *key) +{ + unsigned long a=31415, b=27183, vHash; + for (vHash=0; *key; key++, a*=b) + vHash = a*vHash + tolower(*key); + return vHash; +} + +static unsigned long +ReHashKey_nocase(const char *key, int Level) +{ + unsigned long a=31415, b=27183, vHash; + for (vHash=0; *key; key++, a*=b) + vHash = a*vHash*(unsigned long)Level + tolower(*key); + return vHash; +} + +HAMT * +HAMT_create(int nocase, /*@exits@*/ void (*error_func) + (const char *file, unsigned int line, const char *message)) +{ + /*@out@*/ HAMT *hamt = yasm_xmalloc(sizeof(HAMT)); + int i; + + STAILQ_INIT(&hamt->entries); + hamt->root = yasm_xmalloc(32*sizeof(HAMTNode)); + + for (i=0; i<32; i++) { + hamt->root[i].BitMapKey = 0; + hamt->root[i].BaseValue = 0; + } + + hamt->error_func = error_func; + if (nocase) { + hamt->HashKey = HashKey_nocase; + hamt->ReHashKey = ReHashKey_nocase; + hamt->CmpKey = yasm__strcasecmp; + } else { + hamt->HashKey = HashKey; + hamt->ReHashKey = ReHashKey; + hamt->CmpKey = strcmp; + } + + return hamt; +} + +static void +HAMT_delete_trie(HAMTNode *node) +{ + if (IsSubTrie(node)) { + unsigned long i, Size; + + /* Count total number of bits in bitmap to determine size */ + BitCount(Size, node->BitMapKey); + Size &= 0x1F; + if (Size == 0) + Size = 32; + + for (i=0; ientries)) { + HAMTEntry *entry; + entry = STAILQ_FIRST(&hamt->entries); + STAILQ_REMOVE_HEAD(&hamt->entries, next); + deletefunc(entry->data); + yasm_xfree(entry); + } + + /* delete trie */ + for (i=0; i<32; i++) + HAMT_delete_trie(&hamt->root[i]); + + yasm_xfree(hamt->root); + yasm_xfree(hamt); +} + +int +HAMT_traverse(HAMT *hamt, void *d, + int (*func) (/*@dependent@*/ /*@null@*/ void *node, + /*@null@*/ void *d)) +{ + HAMTEntry *entry; + STAILQ_FOREACH(entry, &hamt->entries, next) { + int retval = func(entry->data, d); + if (retval != 0) + return retval; + } + return 0; +} + +const HAMTEntry * +HAMT_first(const HAMT *hamt) +{ + return STAILQ_FIRST(&hamt->entries); +} + +const HAMTEntry * +HAMT_next(const HAMTEntry *prev) +{ + return STAILQ_NEXT(prev, next); +} + +void * +HAMTEntry_get_data(const HAMTEntry *entry) +{ + return entry->data; +} + +/*@-temptrans -kepttrans -mustfree@*/ +void * +HAMT_insert(HAMT *hamt, const char *str, void *data, int *replace, + void (*deletefunc) (/*@only@*/ void *data)) +{ + HAMTNode *node, *newnodes; + HAMTEntry *entry; + unsigned long key, keypart, Map; + int keypartbits = 0; + int level = 0; + + key = hamt->HashKey(str); + keypart = key & 0x1F; + node = &hamt->root[keypart]; + + if (!node->BaseValue) { + node->BitMapKey = key; + entry = yasm_xmalloc(sizeof(HAMTEntry)); + entry->str = str; + entry->data = data; + STAILQ_INSERT_TAIL(&hamt->entries, entry, next); + SetValue(hamt, node, entry); + if (IsSubTrie(node)) + hamt->error_func(__FILE__, __LINE__, + N_("Data is seen as subtrie (misaligned?)")); + *replace = 1; + return data; + } + + for (;;) { + if (!(IsSubTrie(node))) { + if (node->BitMapKey == key + && hamt->CmpKey(((HAMTEntry *)(node->BaseValue))->str, + str) == 0) { + /*@-branchstate@*/ + if (*replace) { + deletefunc(((HAMTEntry *)(node->BaseValue))->data); + ((HAMTEntry *)(node->BaseValue))->str = str; + ((HAMTEntry *)(node->BaseValue))->data = data; + } else + deletefunc(data); + /*@=branchstate@*/ + return ((HAMTEntry *)(node->BaseValue))->data; + } else { + unsigned long key2 = node->BitMapKey; + /* build tree downward until keys differ */ + for (;;) { + unsigned long keypart2; + + /* replace node with subtrie */ + keypartbits += 5; + if (keypartbits > 30) { + /* Exceeded 32 bits: rehash */ + key = hamt->ReHashKey(str, level); + key2 = hamt->ReHashKey( + ((HAMTEntry *)(node->BaseValue))->str, level); + keypartbits = 0; + } + keypart = (key >> keypartbits) & 0x1F; + keypart2 = (key2 >> keypartbits) & 0x1F; + + if (keypart == keypart2) { + /* Still equal, build one-node subtrie and continue + * downward. + */ + newnodes = yasm_xmalloc(sizeof(HAMTNode)); + newnodes[0].BitMapKey = key2; + newnodes[0].BaseValue = node->BaseValue; + node->BitMapKey = 1<str = str; + entry->data = data; + STAILQ_INSERT_TAIL(&hamt->entries, entry, next); + + /* Copy nodes into subtrie based on order */ + if (keypart2 < keypart) { + newnodes[0].BitMapKey = key2; + newnodes[0].BaseValue = node->BaseValue; + newnodes[1].BitMapKey = key; + SetValue(hamt, &newnodes[1], entry); + } else { + newnodes[0].BitMapKey = key; + SetValue(hamt, &newnodes[0], entry); + newnodes[1].BitMapKey = key2; + newnodes[1].BaseValue = node->BaseValue; + } + + /* Set bits in bitmap corresponding to keys */ + node->BitMapKey = (1UL< 30) { + /* Exceeded 32 bits of current key: rehash */ + key = hamt->ReHashKey(str, level); + keypartbits = 0; + } + keypart = (key >> keypartbits) & 0x1F; + if (!(node->BitMapKey & (1< add node to table */ + unsigned long Size; + + /* set bit to 1 */ + node->BitMapKey |= 1<BitMapKey); + Size &= 0x1F; + if (Size == 0) + Size = 32; + newnodes = yasm_xmalloc(Size*sizeof(HAMTNode)); + + /* Count bits below to find where to insert new node at */ + BitCount(Map, node->BitMapKey & ~((~0UL)<str = str; + entry->data = data; + STAILQ_INSERT_TAIL(&hamt->entries, entry, next); + SetValue(hamt, &newnodes[Map], entry); + SetSubTrie(hamt, node, newnodes); + + *replace = 1; + return data; + } + + /* Count bits below */ + BitCount(Map, node->BitMapKey & ~((~0UL)<HashKey(str); + keypart = key & 0x1F; + node = &hamt->root[keypart]; + + if (!node->BaseValue) + return NULL; + + for (;;) { + if (!(IsSubTrie(node))) { + if (node->BitMapKey == key + && hamt->CmpKey(((HAMTEntry *)(node->BaseValue))->str, + str) == 0) + return ((HAMTEntry *)(node->BaseValue))->data; + else + return NULL; + } + + /* Subtree: look up in bitmap */ + keypartbits += 5; + if (keypartbits > 30) { + /* Exceeded 32 bits of current key: rehash */ + key = hamt->ReHashKey(str, level); + keypartbits = 0; + } + keypart = (key >> keypartbits) & 0x1F; + if (!(node->BitMapKey & (1< no match */ + + /* Count bits below */ + BitCount(Map, node->BitMapKey & ~((~0UL)<segreg != 0) + yasm_warn_set(YASM_WARN_GENERAL, + N_("multiple segment overrides, using leftmost")); + + ea->segreg = segreg; +} + +yasm_insn_operand * +yasm_operand_create_reg(uintptr_t reg) +{ + yasm_insn_operand *retval = yasm_xmalloc(sizeof(yasm_insn_operand)); + + retval->type = YASM_INSN__OPERAND_REG; + retval->data.reg = reg; + retval->seg = 0; + retval->targetmod = 0; + retval->size = 0; + retval->deref = 0; + retval->strict = 0; + + return retval; +} + +yasm_insn_operand * +yasm_operand_create_segreg(uintptr_t segreg) +{ + yasm_insn_operand *retval = yasm_xmalloc(sizeof(yasm_insn_operand)); + + retval->type = YASM_INSN__OPERAND_SEGREG; + retval->data.reg = segreg; + retval->seg = 0; + retval->targetmod = 0; + retval->size = 0; + retval->deref = 0; + retval->strict = 0; + + return retval; +} + +yasm_insn_operand * +yasm_operand_create_mem(/*@only@*/ yasm_effaddr *ea) +{ + yasm_insn_operand *retval = yasm_xmalloc(sizeof(yasm_insn_operand)); + + retval->type = YASM_INSN__OPERAND_MEMORY; + retval->data.ea = ea; + retval->seg = 0; + retval->targetmod = 0; + retval->size = 0; + retval->deref = 0; + retval->strict = 0; + retval->size = ea->data_len * 8; + + return retval; +} + +yasm_insn_operand * +yasm_operand_create_imm(/*@only@*/ yasm_expr *val) +{ + yasm_insn_operand *retval; + const uintptr_t *reg; + + reg = yasm_expr_get_reg(&val, 0); + if (reg) { + retval = yasm_operand_create_reg(*reg); + yasm_expr_destroy(val); + } else { + retval = yasm_xmalloc(sizeof(yasm_insn_operand)); + retval->type = YASM_INSN__OPERAND_IMM; + retval->data.val = val; + retval->seg = 0; + retval->targetmod = 0; + retval->size = 0; + retval->deref = 0; + retval->strict = 0; + } + + return retval; +} + +yasm_insn_operand * +yasm_insn_ops_append(yasm_insn *insn, yasm_insn_operand *op) +{ + if (op) { + insn->num_operands++; + STAILQ_INSERT_TAIL(&insn->operands, op, link); + return op; + } + return (yasm_insn_operand *)NULL; +} + +void +yasm_insn_add_prefix(yasm_insn *insn, uintptr_t prefix) +{ + insn->prefixes = + yasm_xrealloc(insn->prefixes, + (insn->num_prefixes+1)*sizeof(uintptr_t)); + insn->prefixes[insn->num_prefixes] = prefix; + insn->num_prefixes++; +} + +void +yasm_insn_add_seg_prefix(yasm_insn *insn, uintptr_t segreg) +{ + insn->segregs = + yasm_xrealloc(insn->segregs, (insn->num_segregs+1)*sizeof(uintptr_t)); + insn->segregs[insn->num_segregs] = segreg; + insn->num_segregs++; +} + +void +yasm_insn_initialize(yasm_insn *insn) +{ + STAILQ_INIT(&insn->operands); + + insn->prefixes = NULL; + insn->segregs = NULL; + + insn->num_operands = 0; + insn->num_prefixes = 0; + insn->num_segregs = 0; +} + +void +yasm_insn_delete(yasm_insn *insn, + void (*ea_destroy) (/*@only@*/ yasm_effaddr *)) +{ + if (insn->num_operands > 0) { + yasm_insn_operand *cur, *next; + + cur = STAILQ_FIRST(&insn->operands); + while (cur) { + next = STAILQ_NEXT(cur, link); + switch (cur->type) { + case YASM_INSN__OPERAND_MEMORY: + ea_destroy(cur->data.ea); + break; + case YASM_INSN__OPERAND_IMM: + yasm_expr_destroy(cur->data.val); + break; + default: + break; + } + yasm_xfree(cur); + cur = next; + } + } + if (insn->num_prefixes > 0) + yasm_xfree(insn->prefixes); + if (insn->num_segregs > 0) + yasm_xfree(insn->segregs); +} + +void +yasm_insn_print(const yasm_insn *insn, FILE *f, int indent_level) +{ + const yasm_insn_operand *op; + + STAILQ_FOREACH (op, &insn->operands, link) { + switch (op->type) { + case YASM_INSN__OPERAND_REG: + fprintf(f, "%*sReg=", indent_level, ""); + /*yasm_arch_reg_print(arch, op->data.reg, f);*/ + fprintf(f, "\n"); + break; + case YASM_INSN__OPERAND_SEGREG: + fprintf(f, "%*sSegReg=", indent_level, ""); + /*yasm_arch_segreg_print(arch, op->data.reg, f);*/ + fprintf(f, "\n"); + break; + case YASM_INSN__OPERAND_MEMORY: + fprintf(f, "%*sMemory=\n", indent_level, ""); + /*yasm_arch_ea_print(arch, op->data.ea, f, indent_level);*/ + break; + case YASM_INSN__OPERAND_IMM: + fprintf(f, "%*sImm=", indent_level, ""); + yasm_expr_print(op->data.val, f); + fprintf(f, "\n"); + break; + } + fprintf(f, "%*sTargetMod=%lx\n", indent_level+1, "", + (unsigned long)op->targetmod); + fprintf(f, "%*sSize=%u\n", indent_level+1, "", op->size); + fprintf(f, "%*sDeref=%d, Strict=%d\n", indent_level+1, "", + (int)op->deref, (int)op->strict); + } +} + +void +yasm_insn_finalize(yasm_insn *insn) +{ + unsigned int i; + yasm_insn_operand *op; + yasm_error_class eclass; + char *str, *xrefstr; + unsigned long xrefline; + + /* Simplify the operands' expressions first. */ + for (i = 0, op = yasm_insn_ops_first(insn); + op && inum_operands; op = yasm_insn_op_next(op), i++) { + /* Check operand type */ + switch (op->type) { + case YASM_INSN__OPERAND_MEMORY: + /* Don't get over-ambitious here; some archs' memory expr + * parser are sensitive to the presence of *1, etc, so don't + * simplify reg*1 identities. + */ + if (op->data.ea) + op->data.ea->disp.abs = + yasm_expr__level_tree(op->data.ea->disp.abs, 1, 1, 0, + 0, NULL, NULL); + if (yasm_error_occurred()) { + /* Add a pointer to where it was used to the error */ + yasm_error_fetch(&eclass, &str, &xrefline, &xrefstr); + if (xrefstr) { + yasm_error_set_xref(xrefline, "%s", xrefstr); + yasm_xfree(xrefstr); + } + if (str) { + yasm_error_set(eclass, "%s in memory expression", str); + yasm_xfree(str); + } + return; + } + break; + case YASM_INSN__OPERAND_IMM: + op->data.val = + yasm_expr__level_tree(op->data.val, 1, 1, 1, 0, NULL, + NULL); + if (yasm_error_occurred()) { + /* Add a pointer to where it was used to the error */ + yasm_error_fetch(&eclass, &str, &xrefline, &xrefstr); + if (xrefstr) { + yasm_error_set_xref(xrefline, "%s", xrefstr); + yasm_xfree(xrefstr); + } + if (str) { + yasm_error_set(eclass, "%s in immediate expression", + str); + yasm_xfree(str); + } + return; + } + break; + default: + break; + } + } +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/insn.h b/third-party/yasm/yasm-1.3.0/libyasm/insn.h new file mode 100644 index 0000000000..d2d175d039 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/insn.h @@ -0,0 +1,269 @@ +/** + * \file libyasm/insn.h + * \brief YASM mnenomic instruction. + * + * \license + * Copyright (C) 2002-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_INSN_H +#define YASM_INSN_H + +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +/** Base structure for an effective address. As with all base + * structures, must be present as the first element in any + * #yasm_arch implementation of an effective address. + */ +struct yasm_effaddr { + yasm_value disp; /**< address displacement */ + + /** Segment register override (0 if none). */ + uintptr_t segreg; + + /** 1 if length of disp must be >0. */ + unsigned int need_nonzero_len:1; + + /** 1 if a displacement should be present in the output. */ + unsigned int need_disp:1; + + /** 1 if reg*2 should not be split into reg+reg. (0 if not). + * This flag indicates (for architectures that support complex effective + * addresses such as x86) if various types of complex effective addresses + * can be split into different forms in order to minimize instruction + * length. + */ + unsigned int nosplit:1; + + /** 1 if effective address is /definitely/ an effective address. + * This is used in e.g. the GAS parser to differentiate + * between "expr" (which might or might not be an effective address) and + * "expr(,1)" (which is definitely an effective address). + */ + unsigned int strong:1; + + /** 1 if effective address is forced PC-relative. */ + unsigned int pc_rel:1; + + /** 1 if effective address is forced non-PC-relative. */ + unsigned int not_pc_rel:1; + + /** length of pointed data (in bytes), 0 if unknown. */ + unsigned int data_len; +}; + +/** An instruction operand (opaque type). */ +typedef struct yasm_insn_operand yasm_insn_operand; + +/** The type of an instruction operand. */ +typedef enum yasm_insn_operand_type { + YASM_INSN__OPERAND_REG = 1, /**< A register. */ + YASM_INSN__OPERAND_SEGREG, /**< A segment register. */ + YASM_INSN__OPERAND_MEMORY, /**< An effective address + * (memory reference). */ + YASM_INSN__OPERAND_IMM /**< An immediate or jump target. */ +} yasm_insn_operand_type; + +/** An instruction operand. */ +struct yasm_insn_operand { + /** Link for building linked list of operands. \internal */ + /*@reldef@*/ STAILQ_ENTRY(yasm_insn_operand) link; + + /** Operand data. */ + union { + uintptr_t reg; /**< Arch data for reg/segreg. */ + yasm_effaddr *ea; /**< Effective address for memory references. */ + yasm_expr *val; /**< Value of immediate or jump target. */ + } data; + + yasm_expr *seg; /**< Segment expression */ + + uintptr_t targetmod; /**< Arch target modifier, 0 if none. */ + + /** Specified size of the operand, in bits. 0 if not user-specified. */ + unsigned int size:16; + + /** Nonzero if dereference. Used for "*foo" in GAS. + * The reason for this is that by default in GAS, an unprefixed value + * is a memory address, except for jumps/calls, in which case it needs a + * "*" prefix to become a memory address (otherwise it's an immediate). + * This isn't knowable in the parser stage, so the parser sets this flag + * to indicate the "*" prefix has been used, and the arch needs to adjust + * the operand type appropriately depending on the instruction type. + */ + unsigned int deref:1; + + /** Nonzero if strict. Used for "strict foo" in NASM. + * This is used to inhibit optimization on otherwise "sized" values. + * For example, the user may just want to be explicit with the size on + * "push dword 4", but not actually want to force the immediate size to + * 4 bytes (rather wanting the optimizer to optimize it down to 1 byte as + * though "dword" was not specified). To indicate the immediate should + * actually be forced to 4 bytes, the user needs to write + * "push strict dword 4", which sets this flag. + */ + unsigned int strict:1; + + /** Operand type. */ + unsigned int type:4; +}; + +/** Base structure for "instruction" bytecodes. These are the mnenomic + * (rather than raw) representation of instructions. As with all base + * structures, must be present as the first element in any + * #yasm_arch implementation of mnenomic instruction bytecodes. + */ +struct yasm_insn { + /** Linked list of operands. */ + /*@reldef@*/ STAILQ_HEAD(yasm_insn_operands, yasm_insn_operand) operands; + + /** Array of prefixes. */ + /*@null@*/ uintptr_t *prefixes; + + /** Array of segment prefixes. */ + /*@null@*/ uintptr_t *segregs; + + unsigned int num_operands; /**< Number of operands. */ + unsigned int num_prefixes; /**< Number of prefixes. */ + unsigned int num_segregs; /**< Number of segment prefixes. */ +}; + +/** Set segment override for an effective address. + * Some architectures (such as x86) support segment overrides on effective + * addresses. A override of an override will result in a warning. + * \param ea effective address + * \param segreg segment register (0 if none) + */ +YASM_LIB_DECL +void yasm_ea_set_segreg(yasm_effaddr *ea, uintptr_t segreg); + +/** Create an instruction operand from a register. + * \param reg register + * \return Newly allocated operand. + */ +YASM_LIB_DECL +yasm_insn_operand *yasm_operand_create_reg(uintptr_t reg); + +/** Create an instruction operand from a segment register. + * \param segreg segment register + * \return Newly allocated operand. + */ +YASM_LIB_DECL +yasm_insn_operand *yasm_operand_create_segreg(uintptr_t segreg); + +/** Create an instruction operand from an effective address. + * \param ea effective address + * \return Newly allocated operand. + */ +YASM_LIB_DECL +yasm_insn_operand *yasm_operand_create_mem(/*@only@*/ yasm_effaddr *ea); + +/** Create an instruction operand from an immediate expression. + * Looks for cases of a single register and creates a register variant of + * #yasm_insn_operand. + * \param val immediate expression + * \return Newly allocated operand. + */ +YASM_LIB_DECL +yasm_insn_operand *yasm_operand_create_imm(/*@only@*/ yasm_expr *val); + +/** Get the first operand in an instruction. + * \param insn instruction + * \return First operand (NULL if no operands). + */ +yasm_insn_operand *yasm_insn_ops_first(yasm_insn *insn); +#define yasm_insn_ops_first(insn) STAILQ_FIRST(&((insn)->operands)) + +/** Get the next operand in an instruction. + * \param op previous operand + * \return Next operand (NULL if op was the last operand). + */ +yasm_insn_operand *yasm_insn_op_next(yasm_insn_operand *op); +#define yasm_insn_op_next(cur) STAILQ_NEXT(cur, link) + +/** Add operand to the end of an instruction. + * \note Does not make a copy of the operand; so don't pass this function + * static or local variables, and discard the op pointer after calling + * this function. + * \param insn instruction + * \param op operand (may be NULL) + * \return If operand was actually appended (it wasn't NULL), the operand; + * otherwise NULL. + */ +YASM_LIB_DECL +/*@null@*/ yasm_insn_operand *yasm_insn_ops_append + (yasm_insn *insn, + /*@returned@*/ /*@null@*/ yasm_insn_operand *op); + +/** Associate a prefix with an instruction. + * \param insn instruction + * \param prefix data that identifies the prefix + */ +YASM_LIB_DECL +void yasm_insn_add_prefix(yasm_insn *insn, uintptr_t prefix); + +/** Associate a segment prefix with an instruction. + * \param insn instruction + * \param segreg data that identifies the segment register + */ +YASM_LIB_DECL +void yasm_insn_add_seg_prefix(yasm_insn *insn, uintptr_t segreg); + +/** Initialize the common parts of an instruction. + * \internal For use by yasm_arch implementations only. + * \param insn instruction + */ +YASM_LIB_DECL +void yasm_insn_initialize(/*@out@*/ yasm_insn *insn); + +/** Delete the common parts of an instruction. + * \internal For use by yasm_arch implementations only. + * \param insn instruction + * \param content if nonzero, deletes content of each operand + * \param arch architecture + */ +YASM_LIB_DECL +void yasm_insn_delete(yasm_insn *insn, + void (*ea_destroy) (/*@only@*/ yasm_effaddr *)); + +/** Print a list of instruction operands. For debugging purposes. + * \internal For use by yasm_arch implementations only. + * \param insn instruction + * \param f file + * \param indent_level indentation level + * \param arch architecture + */ +YASM_LIB_DECL +void yasm_insn_print(const yasm_insn *insn, FILE *f, int indent_level); + +/** Finalize the common parts of an instruction. + * \internal For use by yasm_arch implementations only. + * \param insn instruction + */ +YASM_LIB_DECL +void yasm_insn_finalize(yasm_insn *insn); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/intnum.c b/third-party/yasm/yasm-1.3.0/libyasm/intnum.c new file mode 100644 index 0000000000..6feba33481 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/intnum.c @@ -0,0 +1,1096 @@ +/* + * Integer number functions. + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 "util.h" + +#include +#include + +#include "coretype.h" +#include "bitvect.h" +#include "file.h" + +#include "errwarn.h" +#include "intnum.h" + + +/* "Native" "word" size for intnum calculations. */ +#define BITVECT_NATIVE_SIZE 256 + +struct yasm_intnum { + union val { + long l; /* integer value (for integers <32 bits) */ + wordptr bv; /* bit vector (for integers >=32 bits) */ + } val; + enum { INTNUM_L, INTNUM_BV } type; +}; + +/* static bitvect used for conversions */ +static /*@only@*/ wordptr conv_bv; + +/* static bitvects used for computation */ +static /*@only@*/ wordptr result, spare, op1static, op2static; + +static /*@only@*/ BitVector_from_Dec_static_data *from_dec_data; + + +void +yasm_intnum_initialize(void) +{ + conv_bv = BitVector_Create(BITVECT_NATIVE_SIZE, FALSE); + result = BitVector_Create(BITVECT_NATIVE_SIZE, FALSE); + spare = BitVector_Create(BITVECT_NATIVE_SIZE, FALSE); + op1static = BitVector_Create(BITVECT_NATIVE_SIZE, FALSE); + op2static = BitVector_Create(BITVECT_NATIVE_SIZE, FALSE); + from_dec_data = BitVector_from_Dec_static_Boot(BITVECT_NATIVE_SIZE); +} + +void +yasm_intnum_cleanup(void) +{ + BitVector_from_Dec_static_Shutdown(from_dec_data); + BitVector_Destroy(op2static); + BitVector_Destroy(op1static); + BitVector_Destroy(spare); + BitVector_Destroy(result); + BitVector_Destroy(conv_bv); +} + +/* Compress a bitvector into intnum storage. + * If saved as a bitvector, clones the passed bitvector. + * Can modify the passed bitvector. + */ +static void +intnum_frombv(/*@out@*/ yasm_intnum *intn, wordptr bv) +{ + if (Set_Max(bv) < 31) { + intn->type = INTNUM_L; + intn->val.l = (long)BitVector_Chunk_Read(bv, 31, 0); + } else if (BitVector_msb_(bv)) { + /* Negative, negate and see if we'll fit into a long. */ + unsigned long ul; + BitVector_Negate(bv, bv); + if (Set_Max(bv) >= 32 || + ((ul = BitVector_Chunk_Read(bv, 32, 0)) & 0x80000000)) { + /* too negative */ + BitVector_Negate(bv, bv); + intn->type = INTNUM_BV; + intn->val.bv = BitVector_Clone(bv); + } else { + intn->type = INTNUM_L; + intn->val.l = -((long)ul); + } + } else { + intn->type = INTNUM_BV; + intn->val.bv = BitVector_Clone(bv); + } +} + +/* If intnum is a BV, returns its bitvector directly. + * If not, converts into passed bv and returns that instead. + */ +static wordptr +intnum_tobv(/*@returned@*/ wordptr bv, const yasm_intnum *intn) +{ + if (intn->type == INTNUM_BV) + return intn->val.bv; + + BitVector_Empty(bv); + if (intn->val.l >= 0) + BitVector_Chunk_Store(bv, 32, 0, (unsigned long)intn->val.l); + else { + BitVector_Chunk_Store(bv, 32, 0, (unsigned long)-intn->val.l); + BitVector_Negate(bv, bv); + } + return bv; +} + +yasm_intnum * +yasm_intnum_create_dec(char *str) +{ + yasm_intnum *intn = yasm_xmalloc(sizeof(yasm_intnum)); + + switch (BitVector_from_Dec_static(from_dec_data, conv_bv, + (unsigned char *)str)) { + case ErrCode_Pars: + yasm_error_set(YASM_ERROR_VALUE, N_("invalid decimal literal")); + break; + case ErrCode_Ovfl: + yasm_error_set(YASM_ERROR_OVERFLOW, + N_("Numeric constant too large for internal format")); + break; + default: + break; + } + intnum_frombv(intn, conv_bv); + return intn; +} + +yasm_intnum * +yasm_intnum_create_bin(char *str) +{ + yasm_intnum *intn = yasm_xmalloc(sizeof(yasm_intnum)); + + switch (BitVector_from_Bin(conv_bv, (unsigned char *)str)) { + case ErrCode_Pars: + yasm_error_set(YASM_ERROR_VALUE, N_("invalid binary literal")); + break; + case ErrCode_Ovfl: + yasm_error_set(YASM_ERROR_OVERFLOW, + N_("Numeric constant too large for internal format")); + break; + default: + break; + } + intnum_frombv(intn, conv_bv); + return intn; +} + +yasm_intnum * +yasm_intnum_create_oct(char *str) +{ + yasm_intnum *intn = yasm_xmalloc(sizeof(yasm_intnum)); + + switch (BitVector_from_Oct(conv_bv, (unsigned char *)str)) { + case ErrCode_Pars: + yasm_error_set(YASM_ERROR_VALUE, N_("invalid octal literal")); + break; + case ErrCode_Ovfl: + yasm_error_set(YASM_ERROR_OVERFLOW, + N_("Numeric constant too large for internal format")); + break; + default: + break; + } + intnum_frombv(intn, conv_bv); + return intn; +} + +yasm_intnum * +yasm_intnum_create_hex(char *str) +{ + yasm_intnum *intn = yasm_xmalloc(sizeof(yasm_intnum)); + + switch (BitVector_from_Hex(conv_bv, (unsigned char *)str)) { + case ErrCode_Pars: + yasm_error_set(YASM_ERROR_VALUE, N_("invalid hex literal")); + break; + case ErrCode_Ovfl: + yasm_error_set(YASM_ERROR_OVERFLOW, + N_("Numeric constant too large for internal format")); + break; + default: + break; + } + intnum_frombv(intn, conv_bv); + return intn; +} + +/*@-usedef -compdef -uniondef@*/ +yasm_intnum * +yasm_intnum_create_charconst_nasm(const char *str) +{ + yasm_intnum *intn = yasm_xmalloc(sizeof(yasm_intnum)); + size_t len = strlen(str); + + if(len*8 > BITVECT_NATIVE_SIZE) + yasm_error_set(YASM_ERROR_OVERFLOW, + N_("Character constant too large for internal format")); + + /* be conservative in choosing bitvect in case MSB is set */ + if (len > 3) { + BitVector_Empty(conv_bv); + intn->type = INTNUM_BV; + } else { + intn->val.l = 0; + intn->type = INTNUM_L; + } + + switch (len) { + case 3: + intn->val.l |= ((unsigned long)str[2]) & 0xff; + intn->val.l <<= 8; + /*@fallthrough@*/ + case 2: + intn->val.l |= ((unsigned long)str[1]) & 0xff; + intn->val.l <<= 8; + /*@fallthrough@*/ + case 1: + intn->val.l |= ((unsigned long)str[0]) & 0xff; + case 0: + break; + default: + /* >=32 bit conversion */ + while (len) { + BitVector_Move_Left(conv_bv, 8); + BitVector_Chunk_Store(conv_bv, 8, 0, + ((unsigned long)str[--len]) & 0xff); + } + intn->val.bv = BitVector_Clone(conv_bv); + } + + return intn; +} + +yasm_intnum * +yasm_intnum_create_charconst_tasm(const char *str) +{ + yasm_intnum *intn = yasm_xmalloc(sizeof(yasm_intnum)); + size_t len = strlen(str); + size_t i; + + if(len*8 > BITVECT_NATIVE_SIZE) + yasm_error_set(YASM_ERROR_OVERFLOW, + N_("Character constant too large for internal format")); + + /* be conservative in choosing bitvect in case MSB is set */ + if (len > 3) { + BitVector_Empty(conv_bv); + intn->type = INTNUM_BV; + } else { + intn->val.l = 0; + intn->type = INTNUM_L; + } + + /* tasm uses big endian notation */ + i = 0; + switch (len) { + case 3: + intn->val.l |= ((unsigned long)str[i++]) & 0xff; + intn->val.l <<= 8; + /*@fallthrough@*/ + case 2: + intn->val.l |= ((unsigned long)str[i++]) & 0xff; + intn->val.l <<= 8; + /*@fallthrough@*/ + case 1: + intn->val.l |= ((unsigned long)str[i++]) & 0xff; + case 0: + break; + default: + /* >=32 bit conversion */ + while (i < len) { + BitVector_Chunk_Store(conv_bv, 8, (len-i-1)*8, + ((unsigned long)str[i]) & 0xff); + i++; + } + intn->val.bv = BitVector_Clone(conv_bv); + } + + return intn; +} +/*@=usedef =compdef =uniondef@*/ + +yasm_intnum * +yasm_intnum_create_uint(unsigned long i) +{ + yasm_intnum *intn = yasm_xmalloc(sizeof(yasm_intnum)); + + if (i > LONG_MAX) { + /* Too big, store as bitvector */ + intn->val.bv = BitVector_Create(BITVECT_NATIVE_SIZE, TRUE); + intn->type = INTNUM_BV; + BitVector_Chunk_Store(intn->val.bv, 32, 0, i); + } else { + intn->val.l = (long)i; + intn->type = INTNUM_L; + } + + return intn; +} + +yasm_intnum * +yasm_intnum_create_int(long i) +{ + yasm_intnum *intn = yasm_xmalloc(sizeof(yasm_intnum)); + + intn->val.l = i; + intn->type = INTNUM_L; + + return intn; +} + +yasm_intnum * +yasm_intnum_create_leb128(const unsigned char *ptr, int sign, + unsigned long *size) +{ + yasm_intnum *intn = yasm_xmalloc(sizeof(yasm_intnum)); + const unsigned char *ptr_orig = ptr; + unsigned long i = 0; + + BitVector_Empty(conv_bv); + for (;;) { + BitVector_Chunk_Store(conv_bv, 7, i, *ptr); + i += 7; + if ((*ptr & 0x80) != 0x80) + break; + ptr++; + } + + *size = (unsigned long)(ptr-ptr_orig)+1; + + if(i > BITVECT_NATIVE_SIZE) + yasm_error_set(YASM_ERROR_OVERFLOW, + N_("Numeric constant too large for internal format")); + else if (sign && (*ptr & 0x40) == 0x40) + BitVector_Interval_Fill(conv_bv, i, BITVECT_NATIVE_SIZE-1); + + intnum_frombv(intn, conv_bv); + return intn; +} + +yasm_intnum * +yasm_intnum_create_sized(unsigned char *ptr, int sign, size_t srcsize, + int bigendian) +{ + yasm_intnum *intn = yasm_xmalloc(sizeof(yasm_intnum)); + unsigned long i = 0; + + if (srcsize*8 > BITVECT_NATIVE_SIZE) + yasm_error_set(YASM_ERROR_OVERFLOW, + N_("Numeric constant too large for internal format")); + + /* Read the buffer into a bitvect */ + BitVector_Empty(conv_bv); + if (bigendian) { + /* TODO */ + yasm_internal_error(N_("big endian not implemented")); + } else { + for (i = 0; i < srcsize; i++) + BitVector_Chunk_Store(conv_bv, 8, i*8, ptr[i]); + } + + /* Sign extend if needed */ + if (srcsize*8 < BITVECT_NATIVE_SIZE && sign && (ptr[i-1] & 0x80) == 0x80) + BitVector_Interval_Fill(conv_bv, i*8, BITVECT_NATIVE_SIZE-1); + + intnum_frombv(intn, conv_bv); + return intn; +} + +yasm_intnum * +yasm_intnum_copy(const yasm_intnum *intn) +{ + yasm_intnum *n = yasm_xmalloc(sizeof(yasm_intnum)); + + switch (intn->type) { + case INTNUM_L: + n->val.l = intn->val.l; + break; + case INTNUM_BV: + n->val.bv = BitVector_Clone(intn->val.bv); + break; + } + n->type = intn->type; + + return n; +} + +void +yasm_intnum_destroy(yasm_intnum *intn) +{ + if (intn->type == INTNUM_BV) + BitVector_Destroy(intn->val.bv); + yasm_xfree(intn); +} + +/*@-nullderef -nullpass -branchstate@*/ +int +yasm_intnum_calc(yasm_intnum *acc, yasm_expr_op op, yasm_intnum *operand) +{ + boolean carry = 0; + wordptr op1, op2 = NULL; + N_int count; + + /* Always do computations with in full bit vector. + * Bit vector results must be calculated through intermediate storage. + */ + op1 = intnum_tobv(op1static, acc); + if (operand) + op2 = intnum_tobv(op2static, operand); + + if (!operand && op != YASM_EXPR_NEG && op != YASM_EXPR_NOT && + op != YASM_EXPR_LNOT) { + yasm_error_set(YASM_ERROR_ARITHMETIC, + N_("operation needs an operand")); + BitVector_Empty(result); + return 1; + } + + /* A operation does a bitvector computation if result is allocated. */ + switch (op) { + case YASM_EXPR_ADD: + BitVector_add(result, op1, op2, &carry); + break; + case YASM_EXPR_SUB: + BitVector_sub(result, op1, op2, &carry); + break; + case YASM_EXPR_MUL: + BitVector_Multiply(result, op1, op2); + break; + case YASM_EXPR_DIV: + /* TODO: make sure op1 and op2 are unsigned */ + if (BitVector_is_empty(op2)) { + yasm_error_set(YASM_ERROR_ZERO_DIVISION, N_("divide by zero")); + BitVector_Empty(result); + return 1; + } else + BitVector_Divide(result, op1, op2, spare); + break; + case YASM_EXPR_SIGNDIV: + if (BitVector_is_empty(op2)) { + yasm_error_set(YASM_ERROR_ZERO_DIVISION, N_("divide by zero")); + BitVector_Empty(result); + return 1; + } else + BitVector_Divide(result, op1, op2, spare); + break; + case YASM_EXPR_MOD: + /* TODO: make sure op1 and op2 are unsigned */ + if (BitVector_is_empty(op2)) { + yasm_error_set(YASM_ERROR_ZERO_DIVISION, N_("divide by zero")); + BitVector_Empty(result); + return 1; + } else + BitVector_Divide(spare, op1, op2, result); + break; + case YASM_EXPR_SIGNMOD: + if (BitVector_is_empty(op2)) { + yasm_error_set(YASM_ERROR_ZERO_DIVISION, N_("divide by zero")); + BitVector_Empty(result); + return 1; + } else + BitVector_Divide(spare, op1, op2, result); + break; + case YASM_EXPR_NEG: + BitVector_Negate(result, op1); + break; + case YASM_EXPR_NOT: + Set_Complement(result, op1); + break; + case YASM_EXPR_OR: + Set_Union(result, op1, op2); + break; + case YASM_EXPR_AND: + Set_Intersection(result, op1, op2); + break; + case YASM_EXPR_XOR: + Set_ExclusiveOr(result, op1, op2); + break; + case YASM_EXPR_XNOR: + Set_ExclusiveOr(result, op1, op2); + Set_Complement(result, result); + break; + case YASM_EXPR_NOR: + Set_Union(result, op1, op2); + Set_Complement(result, result); + break; + case YASM_EXPR_SHL: + if (operand->type == INTNUM_L && operand->val.l >= 0) { + BitVector_Copy(result, op1); + BitVector_Move_Left(result, (N_int)operand->val.l); + } else /* don't even bother, just zero result */ + BitVector_Empty(result); + break; + case YASM_EXPR_SHR: + if (operand->type == INTNUM_L && operand->val.l >= 0) { + BitVector_Copy(result, op1); + carry = BitVector_msb_(op1); + count = (N_int)operand->val.l; + while (count-- > 0) + BitVector_shift_right(result, carry); + } else /* don't even bother, just zero result */ + BitVector_Empty(result); + break; + case YASM_EXPR_LOR: + BitVector_Empty(result); + BitVector_LSB(result, !BitVector_is_empty(op1) || + !BitVector_is_empty(op2)); + break; + case YASM_EXPR_LAND: + BitVector_Empty(result); + BitVector_LSB(result, !BitVector_is_empty(op1) && + !BitVector_is_empty(op2)); + break; + case YASM_EXPR_LNOT: + BitVector_Empty(result); + BitVector_LSB(result, BitVector_is_empty(op1)); + break; + case YASM_EXPR_LXOR: + BitVector_Empty(result); + BitVector_LSB(result, !BitVector_is_empty(op1) ^ + !BitVector_is_empty(op2)); + break; + case YASM_EXPR_LXNOR: + BitVector_Empty(result); + BitVector_LSB(result, !(!BitVector_is_empty(op1) ^ + !BitVector_is_empty(op2))); + break; + case YASM_EXPR_LNOR: + BitVector_Empty(result); + BitVector_LSB(result, !(!BitVector_is_empty(op1) || + !BitVector_is_empty(op2))); + break; + case YASM_EXPR_EQ: + BitVector_Empty(result); + BitVector_LSB(result, BitVector_equal(op1, op2)); + break; + case YASM_EXPR_LT: + BitVector_Empty(result); + BitVector_LSB(result, BitVector_Compare(op1, op2) < 0); + break; + case YASM_EXPR_GT: + BitVector_Empty(result); + BitVector_LSB(result, BitVector_Compare(op1, op2) > 0); + break; + case YASM_EXPR_LE: + BitVector_Empty(result); + BitVector_LSB(result, BitVector_Compare(op1, op2) <= 0); + break; + case YASM_EXPR_GE: + BitVector_Empty(result); + BitVector_LSB(result, BitVector_Compare(op1, op2) >= 0); + break; + case YASM_EXPR_NE: + BitVector_Empty(result); + BitVector_LSB(result, !BitVector_equal(op1, op2)); + break; + case YASM_EXPR_SEG: + yasm_error_set(YASM_ERROR_ARITHMETIC, N_("invalid use of '%s'"), + "SEG"); + break; + case YASM_EXPR_WRT: + yasm_error_set(YASM_ERROR_ARITHMETIC, N_("invalid use of '%s'"), + "WRT"); + break; + case YASM_EXPR_SEGOFF: + yasm_error_set(YASM_ERROR_ARITHMETIC, N_("invalid use of '%s'"), + ":"); + break; + case YASM_EXPR_IDENT: + if (result) + BitVector_Copy(result, op1); + break; + default: + yasm_error_set(YASM_ERROR_ARITHMETIC, + N_("invalid operation in intnum calculation")); + BitVector_Empty(result); + return 1; + } + + /* Try to fit the result into 32 bits if possible */ + if (acc->type == INTNUM_BV) + BitVector_Destroy(acc->val.bv); + intnum_frombv(acc, result); + return 0; +} +/*@=nullderef =nullpass =branchstate@*/ + +int +yasm_intnum_compare(const yasm_intnum *intn1, const yasm_intnum *intn2) +{ + wordptr op1, op2; + + if (intn1->type == INTNUM_L && intn2->type == INTNUM_L) { + if (intn1->val.l < intn2->val.l) + return -1; + if (intn1->val.l > intn2->val.l) + return 1; + return 0; + } + + op1 = intnum_tobv(op1static, intn1); + op2 = intnum_tobv(op2static, intn2); + return BitVector_Compare(op1, op2); +} + +void +yasm_intnum_zero(yasm_intnum *intn) +{ + yasm_intnum_set_int(intn, 0); +} + +void +yasm_intnum_set(yasm_intnum *intn, const yasm_intnum *val) +{ + if (intn->type == val->type) { + switch (val->type) { + case INTNUM_L: + intn->val.l = val->val.l; + break; + case INTNUM_BV: + BitVector_Copy(intn->val.bv, val->val.bv); + break; + } + } else { + switch (val->type) { + case INTNUM_L: + BitVector_Destroy(intn->val.bv); + intn->val.l = val->val.l; + break; + case INTNUM_BV: + intn->val.bv = BitVector_Clone(val->val.bv); + break; + } + intn->type = val->type; + } +} + +void +yasm_intnum_set_uint(yasm_intnum *intn, unsigned long val) +{ + if (val > LONG_MAX) { + if (intn->type != INTNUM_BV) { + intn->val.bv = BitVector_Create(BITVECT_NATIVE_SIZE, TRUE); + intn->type = INTNUM_BV; + } + BitVector_Chunk_Store(intn->val.bv, 32, 0, val); + } else { + if (intn->type == INTNUM_BV) { + BitVector_Destroy(intn->val.bv); + intn->type = INTNUM_L; + } + intn->val.l = (long)val; + } +} + +void +yasm_intnum_set_int(yasm_intnum *intn, long val) +{ + if (intn->type == INTNUM_BV) + BitVector_Destroy(intn->val.bv); + intn->type = INTNUM_L; + intn->val.l = val; +} + +int +yasm_intnum_is_zero(const yasm_intnum *intn) +{ + return (intn->type == INTNUM_L && intn->val.l == 0); +} + +int +yasm_intnum_is_pos1(const yasm_intnum *intn) +{ + return (intn->type == INTNUM_L && intn->val.l == 1); +} + +int +yasm_intnum_is_neg1(const yasm_intnum *intn) +{ + return (intn->type == INTNUM_L && intn->val.l == -1); +} + +int +yasm_intnum_sign(const yasm_intnum *intn) +{ + if (intn->type == INTNUM_L) { + if (intn->val.l == 0) + return 0; + else if (intn->val.l < 0) + return -1; + else + return 1; + } else + return BitVector_Sign(intn->val.bv); +} + +unsigned long +yasm_intnum_get_uint(const yasm_intnum *intn) +{ + switch (intn->type) { + case INTNUM_L: + if (intn->val.l < 0) + return 0; + return (unsigned long)intn->val.l; + case INTNUM_BV: + if (BitVector_msb_(intn->val.bv)) + return 0; + if (Set_Max(intn->val.bv) > 32) + return ULONG_MAX; + return BitVector_Chunk_Read(intn->val.bv, 32, 0); + default: + yasm_internal_error(N_("unknown intnum type")); + /*@notreached@*/ + return 0; + } +} + +long +yasm_intnum_get_int(const yasm_intnum *intn) +{ + switch (intn->type) { + case INTNUM_L: + return intn->val.l; + case INTNUM_BV: + if (BitVector_msb_(intn->val.bv)) { + /* it's negative: negate the bitvector to get a positive + * number, then negate the positive number. + */ + unsigned long ul; + + BitVector_Negate(conv_bv, intn->val.bv); + if (Set_Max(conv_bv) >= 32) { + /* too negative */ + return LONG_MIN; + } + ul = BitVector_Chunk_Read(conv_bv, 32, 0); + /* check for too negative */ + return (ul & 0x80000000) ? LONG_MIN : -((long)ul); + } + + /* it's positive, and since it's a BV, it must be >0x7FFFFFFF */ + return LONG_MAX; + default: + yasm_internal_error(N_("unknown intnum type")); + /*@notreached@*/ + return 0; + } +} + +void +yasm_intnum_get_sized(const yasm_intnum *intn, unsigned char *ptr, + size_t destsize, size_t valsize, int shift, + int bigendian, int warn) +{ + wordptr op1 = op1static, op2; + unsigned char *buf; + unsigned int len; + size_t rshift = shift < 0 ? (size_t)(-shift) : 0; + int carry_in; + + /* Currently don't support destinations larger than our native size */ + if (destsize*8 > BITVECT_NATIVE_SIZE) + yasm_internal_error(N_("destination too large")); + + /* General size warnings */ + if (warn<0 && !yasm_intnum_check_size(intn, valsize, rshift, 1)) + yasm_warn_set(YASM_WARN_GENERAL, + N_("value does not fit in signed %d bit field"), + valsize); + if (warn>0 && !yasm_intnum_check_size(intn, valsize, rshift, 2)) + yasm_warn_set(YASM_WARN_GENERAL, + N_("value does not fit in %d bit field"), valsize); + + /* Read the original data into a bitvect */ + if (bigendian) { + /* TODO */ + yasm_internal_error(N_("big endian not implemented")); + } else + BitVector_Block_Store(op1, ptr, (N_int)destsize); + + /* If not already a bitvect, convert value to be written to a bitvect */ + op2 = intnum_tobv(op2static, intn); + + /* Check low bits if right shifting and warnings enabled */ + if (warn && rshift > 0) { + BitVector_Copy(conv_bv, op2); + BitVector_Move_Left(conv_bv, (N_int)(BITVECT_NATIVE_SIZE-rshift)); + if (!BitVector_is_empty(conv_bv)) + yasm_warn_set(YASM_WARN_GENERAL, + N_("misaligned value, truncating to boundary")); + } + + /* Shift right if needed */ + if (rshift > 0) { + carry_in = BitVector_msb_(op2); + while (rshift-- > 0) + BitVector_shift_right(op2, carry_in); + shift = 0; + } + + /* Write the new value into the destination bitvect */ + BitVector_Interval_Copy(op1, op2, (unsigned int)shift, 0, (N_int)valsize); + + /* Write out the new data */ + buf = BitVector_Block_Read(op1, &len); + if (bigendian) { + /* TODO */ + yasm_internal_error(N_("big endian not implemented")); + } else + memcpy(ptr, buf, destsize); + yasm_xfree(buf); +} + +/* Return 1 if okay size, 0 if not */ +int +yasm_intnum_check_size(const yasm_intnum *intn, size_t size, size_t rshift, + int rangetype) +{ + wordptr val; + + /* If not already a bitvect, convert value to a bitvect */ + if (intn->type == INTNUM_BV) { + if (rshift > 0) { + val = conv_bv; + BitVector_Copy(val, intn->val.bv); + } else + val = intn->val.bv; + } else + val = intnum_tobv(conv_bv, intn); + + if (size >= BITVECT_NATIVE_SIZE) + return 1; + + if (rshift > 0) { + int carry_in = BitVector_msb_(val); + while (rshift-- > 0) + BitVector_shift_right(val, carry_in); + } + + if (rangetype > 0) { + if (BitVector_msb_(val)) { + /* it's negative */ + int retval; + + BitVector_Negate(conv_bv, val); + BitVector_dec(conv_bv, conv_bv); + retval = Set_Max(conv_bv) < (long)size-1; + + return retval; + } + + if (rangetype == 1) + size--; + } + return (Set_Max(val) < (long)size); +} + +int +yasm_intnum_in_range(const yasm_intnum *intn, long low, long high) +{ + wordptr val = intnum_tobv(result, intn); + wordptr lval = op1static; + wordptr hval = op2static; + + /* Convert high and low to bitvects */ + BitVector_Empty(lval); + if (low >= 0) + BitVector_Chunk_Store(lval, 32, 0, (unsigned long)low); + else { + BitVector_Chunk_Store(lval, 32, 0, (unsigned long)(-low)); + BitVector_Negate(lval, lval); + } + + BitVector_Empty(hval); + if (high >= 0) + BitVector_Chunk_Store(hval, 32, 0, (unsigned long)high); + else { + BitVector_Chunk_Store(hval, 32, 0, (unsigned long)(-high)); + BitVector_Negate(hval, hval); + } + + /* Compare! */ + return (BitVector_Compare(val, lval) >= 0 + && BitVector_Compare(val, hval) <= 0); +} + +static unsigned long +get_leb128(wordptr val, unsigned char *ptr, int sign) +{ + unsigned long i, size; + unsigned char *ptr_orig = ptr; + + if (sign) { + /* Signed mode */ + if (BitVector_msb_(val)) { + /* Negative */ + BitVector_Negate(conv_bv, val); + size = Set_Max(conv_bv)+2; + } else { + /* Positive */ + size = Set_Max(val)+2; + } + } else { + /* Unsigned mode */ + size = Set_Max(val)+1; + } + + /* Positive/Unsigned write */ + for (i=0; itype == INTNUM_L && intn->val.l == 0) { + *ptr = 0; + return 1; + } + + /* If not already a bitvect, convert value to be written to a bitvect */ + val = intnum_tobv(op1static, intn); + + return get_leb128(val, ptr, sign); +} + +unsigned long +yasm_intnum_size_leb128(const yasm_intnum *intn, int sign) +{ + wordptr val; + + /* Shortcut 0 */ + if (intn->type == INTNUM_L && intn->val.l == 0) { + return 1; + } + + /* If not already a bitvect, convert value to a bitvect */ + val = intnum_tobv(op1static, intn); + + return size_leb128(val, sign); +} + +unsigned long +yasm_get_sleb128(long v, unsigned char *ptr) +{ + wordptr val = op1static; + + /* Shortcut 0 */ + if (v == 0) { + *ptr = 0; + return 1; + } + + BitVector_Empty(val); + if (v >= 0) + BitVector_Chunk_Store(val, 32, 0, (unsigned long)v); + else { + BitVector_Chunk_Store(val, 32, 0, (unsigned long)(-v)); + BitVector_Negate(val, val); + } + return get_leb128(val, ptr, 1); +} + +unsigned long +yasm_size_sleb128(long v) +{ + wordptr val = op1static; + + if (v == 0) + return 1; + + BitVector_Empty(val); + if (v >= 0) + BitVector_Chunk_Store(val, 32, 0, (unsigned long)v); + else { + BitVector_Chunk_Store(val, 32, 0, (unsigned long)(-v)); + BitVector_Negate(val, val); + } + return size_leb128(val, 1); +} + +unsigned long +yasm_get_uleb128(unsigned long v, unsigned char *ptr) +{ + wordptr val = op1static; + + /* Shortcut 0 */ + if (v == 0) { + *ptr = 0; + return 1; + } + + BitVector_Empty(val); + BitVector_Chunk_Store(val, 32, 0, v); + return get_leb128(val, ptr, 0); +} + +unsigned long +yasm_size_uleb128(unsigned long v) +{ + wordptr val = op1static; + + if (v == 0) + return 1; + + BitVector_Empty(val); + BitVector_Chunk_Store(val, 32, 0, v); + return size_leb128(val, 0); +} + +char * +yasm_intnum_get_str(const yasm_intnum *intn) +{ + unsigned char *s; + + switch (intn->type) { + case INTNUM_L: + s = yasm_xmalloc(16); + sprintf((char *)s, "%ld", intn->val.l); + return (char *)s; + break; + case INTNUM_BV: + return (char *)BitVector_to_Dec(intn->val.bv); + break; + } + /*@notreached@*/ + return NULL; +} + +void +yasm_intnum_print(const yasm_intnum *intn, FILE *f) +{ + unsigned char *s; + + switch (intn->type) { + case INTNUM_L: + fprintf(f, "0x%lx", intn->val.l); + break; + case INTNUM_BV: + s = BitVector_to_Hex(intn->val.bv); + fprintf(f, "0x%s", (char *)s); + yasm_xfree(s); + break; + } +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/intnum.h b/third-party/yasm/yasm-1.3.0/libyasm/intnum.h new file mode 100644 index 0000000000..bec832cf31 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/intnum.h @@ -0,0 +1,340 @@ +/** + * \file libyasm/intnum.h + * \brief YASM integer number interface. + * + * \license + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_INTNUM_H +#define YASM_INTNUM_H + +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +/** Initialize intnum internal data structures. */ +YASM_LIB_DECL +void yasm_intnum_initialize(void); + +/** Clean up internal intnum allocations. */ +YASM_LIB_DECL +void yasm_intnum_cleanup(void); + +/** Create a new intnum from a decimal string. + * \param str decimal string + * \return Newly allocated intnum. + */ +YASM_LIB_DECL +/*@only@*/ yasm_intnum *yasm_intnum_create_dec(char *str); + +/** Create a new intnum from a binary string. + * \param str binary string + * \return Newly allocated intnum. + */ +YASM_LIB_DECL +/*@only@*/ yasm_intnum *yasm_intnum_create_bin(char *str); + +/** Create a new intnum from an octal string. + * \param str octal string + * \return Newly allocated intnum. + */ +YASM_LIB_DECL +/*@only@*/ yasm_intnum *yasm_intnum_create_oct(char *str); + +/** Create a new intnum from a hexidecimal string. + * \param str hexidecimal string + * \return Newly allocated intnum. + */ +YASM_LIB_DECL +/*@only@*/ yasm_intnum *yasm_intnum_create_hex(char *str); + +/** Convert character constant to integer value, using NASM rules. NASM syntax + * supports automatic conversion from strings such as 'abcd' to a 32-bit + * integer value (little endian order). This function performs those conversions. + * \param str character constant string + * \return Newly allocated intnum. + */ +YASM_LIB_DECL +/*@only@*/ yasm_intnum *yasm_intnum_create_charconst_nasm(const char *str); + +/** Convert character constant to integer value, using TASM rules. TASM syntax + * supports automatic conversion from strings such as 'abcd' to a 32-bit + * integer value (big endian order). This function performs those conversions. + * \param str character constant string + * \return Newly allocated intnum. + */ +YASM_LIB_DECL +/*@only@*/ yasm_intnum *yasm_intnum_create_charconst_tasm(const char *str); + +/** Create a new intnum from an unsigned integer value. + * \param i unsigned integer value + * \return Newly allocated intnum. + */ +YASM_LIB_DECL +/*@only@*/ yasm_intnum *yasm_intnum_create_uint(unsigned long i); + +/** Create a new intnum from an signed integer value. + * \param i signed integer value + * \return Newly allocated intnum. + */ +YASM_LIB_DECL +/*@only@*/ yasm_intnum *yasm_intnum_create_int(long i); + +/** Create a new intnum from LEB128-encoded form. + * \param ptr pointer to start of LEB128 encoded form + * \param sign signed (1) or unsigned (0) LEB128 format + * \param size number of bytes read from ptr (output) + * \return Newly allocated intnum. Number of bytes read returned into + * bytes_read parameter. + */ +YASM_LIB_DECL +/*@only@*/ yasm_intnum *yasm_intnum_create_leb128 + (const unsigned char *ptr, int sign, /*@out@*/ unsigned long *size); + +/** Create a new intnum from a little-endian or big-endian buffer. + * In little endian, the LSB is in ptr[0]. + * \param ptr pointer to start of buffer + * \param sign signed (1) or unsigned (0) source + * \param srcsize source buffer size (in bytes) + * \param bigendian endianness (nonzero=big, zero=little) + */ +YASM_LIB_DECL +/*@only@*/ yasm_intnum *yasm_intnum_create_sized + (unsigned char *ptr, int sign, size_t srcsize, int bigendian); + +/** Duplicate an intnum. + * \param intn intnum + * \return Newly allocated intnum with the same value as intn. + */ +YASM_LIB_DECL +/*@only@*/ yasm_intnum *yasm_intnum_copy(const yasm_intnum *intn); + +/** Destroy (free allocated memory for) an intnum. + * \param intn intnum + */ +YASM_LIB_DECL +void yasm_intnum_destroy(/*@only@*/ yasm_intnum *intn); + +/** Floating point calculation function: acc = acc op operand. + * \note Not all operations in yasm_expr_op may be supported; unsupported + * operations will result in an error. + * \param acc intnum accumulator + * \param op operation + * \param operand intnum operand + * \return Nonzero if error occurred. + */ +YASM_LIB_DECL +int yasm_intnum_calc(yasm_intnum *acc, yasm_expr_op op, yasm_intnum *operand); + +/** Compare two intnums. + * \param intn1 first intnum + * \param intn2 second intnum + * \return -1 if intn1 < intn2, 0 if intn1 == intn2, 1 if intn1 > intn2. + */ +YASM_LIB_DECL +int yasm_intnum_compare(const yasm_intnum *intn1, const yasm_intnum *intn2); + +/** Zero an intnum. + * \param intn intnum + */ +YASM_LIB_DECL +void yasm_intnum_zero(yasm_intnum *intn); + +/** Set an intnum to the value of another intnum. + * \param intn intnum + * \param val intnum to get value from + */ +YASM_LIB_DECL +void yasm_intnum_set(yasm_intnum *intn, const yasm_intnum *val); + +/** Set an intnum to an unsigned integer. + * \param intn intnum + * \param val integer value + */ +YASM_LIB_DECL +void yasm_intnum_set_uint(yasm_intnum *intn, unsigned long val); + +/** Set an intnum to an signed integer. + * \param intn intnum + * \param val integer value + */ +YASM_LIB_DECL +void yasm_intnum_set_int(yasm_intnum *intn, long val); + +/** Simple value check for 0. + * \param acc intnum + * \return Nonzero if acc==0. + */ +YASM_LIB_DECL +int yasm_intnum_is_zero(const yasm_intnum *acc); + +/** Simple value check for 1. + * \param acc intnum + * \return Nonzero if acc==1. + */ +YASM_LIB_DECL +int yasm_intnum_is_pos1(const yasm_intnum *acc); + +/** Simple value check for -1. + * \param acc intnum + * \return Nonzero if acc==-1. + */ +YASM_LIB_DECL +int yasm_intnum_is_neg1(const yasm_intnum *acc); + +/** Simple sign check. + * \param acc intnum + * \return -1 if negative, 0 if zero, +1 if positive + */ +YASM_LIB_DECL +int yasm_intnum_sign(const yasm_intnum *acc); + +/** Convert an intnum to an unsigned 32-bit value. The value is in "standard" + * C format (eg, of unknown endian). + * \note Parameter intnum is truncated to fit into 32 bits. Use + * intnum_check_size() to check for overflow. + * \param intn intnum + * \return Unsigned 32-bit value of intn. + */ +YASM_LIB_DECL +unsigned long yasm_intnum_get_uint(const yasm_intnum *intn); + +/** Convert an intnum to a signed 32-bit value. The value is in "standard" C + * format (eg, of unknown endian). + * \note Parameter intnum is truncated to fit into 32 bits. Use + * intnum_check_size() to check for overflow. + * \param intn intnum + * \return Signed 32-bit value of intn. + */ +YASM_LIB_DECL +long yasm_intnum_get_int(const yasm_intnum *intn); + +/** Output #yasm_intnum to buffer in little-endian or big-endian. Puts the + * value into the least significant bits of the destination, or may be shifted + * into more significant bits by the shift parameter. The destination bits are + * cleared before being set. [0] should be the first byte output to the file. + * \param intn intnum + * \param ptr pointer to storage for size bytes of output + * \param destsize destination size (in bytes) + * \param valsize size (in bits) + * \param shift left shift (in bits); may be negative to specify right + * shift (standard warnings include truncation to boundary) + * \param bigendian endianness (nonzero=big, zero=little) + * \param warn enables standard warnings (value doesn't fit into valsize + * bits): <0=signed warnings, >0=unsigned warnings, 0=no warn + */ +YASM_LIB_DECL +void yasm_intnum_get_sized(const yasm_intnum *intn, unsigned char *ptr, + size_t destsize, size_t valsize, int shift, + int bigendian, int warn); + +/** Check to see if intnum will fit without overflow into size bits. + * \param intn intnum + * \param size number of bits of output space + * \param rshift right shift + * \param rangetype signed/unsigned range selection: + * 0 => (0, unsigned max); + * 1 => (signed min, signed max); + * 2 => (signed min, unsigned max) + * \return Nonzero if intnum will fit. + */ +YASM_LIB_DECL +int yasm_intnum_check_size(const yasm_intnum *intn, size_t size, + size_t rshift, int rangetype); + +/** Check to see if intnum will fit into a particular numeric range. + * \param intn intnum + * \param low low end of range (inclusive) + * \param high high end of range (inclusive) + * \return Nonzero if intnum is within range. + */ +YASM_LIB_DECL +int yasm_intnum_in_range(const yasm_intnum *intn, long low, long high); + +/** Output #yasm_intnum to buffer in LEB128-encoded form. + * \param intn intnum + * \param ptr pointer to storage for output bytes + * \param sign signedness of LEB128 encoding (0=unsigned, 1=signed) + * \return Number of bytes generated. + */ +YASM_LIB_DECL +unsigned long yasm_intnum_get_leb128(const yasm_intnum *intn, + unsigned char *ptr, int sign); + +/** Calculate number of bytes LEB128-encoded form of #yasm_intnum will take. + * \param intn intnum + * \param sign signedness of LEB128 encoding (0=unsigned, 1=signed) + * \return Number of bytes. + */ +YASM_LIB_DECL +unsigned long yasm_intnum_size_leb128(const yasm_intnum *intn, int sign); + +/** Output integer to buffer in signed LEB128-encoded form. + * \param v integer + * \param ptr pointer to storage for output bytes + * \return Number of bytes generated. + */ +YASM_LIB_DECL +unsigned long yasm_get_sleb128(long v, unsigned char *ptr); + +/** Calculate number of bytes signed LEB128-encoded form of integer will take. + * \param v integer + * \return Number of bytes. + */ +YASM_LIB_DECL +unsigned long yasm_size_sleb128(long v); + +/** Output integer to buffer in unsigned LEB128-encoded form. + * \param v integer + * \param ptr pointer to storage for output bytes + * \return Number of bytes generated. + */ +YASM_LIB_DECL +unsigned long yasm_get_uleb128(unsigned long v, unsigned char *ptr); + +/** Calculate number of bytes unsigned LEB128-encoded form of integer will take. + * \param v integer + * \return Number of bytes. + */ +YASM_LIB_DECL +unsigned long yasm_size_uleb128(unsigned long v); + +/** Get an intnum as a signed decimal string. The returned string will + * contain a leading '-' if the intnum is negative. + * \param intn intnum + * \return Newly allocated string containing the decimal representation of + * the intnum. + */ +YASM_LIB_DECL +/*@only@*/ char *yasm_intnum_get_str(const yasm_intnum *intn); + +/** Print an intnum. For debugging purposes. + * \param f file + * \param intn intnum + */ +YASM_LIB_DECL +void yasm_intnum_print(const yasm_intnum *intn, FILE *f); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/inttree.c b/third-party/yasm/yasm-1.3.0/libyasm/inttree.c new file mode 100644 index 0000000000..2ae10e9b9c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/inttree.c @@ -0,0 +1,891 @@ +#include "util.h" + +#include +#include +#include +#include +#include "coretype.h" +#include "inttree.h" + +#define VERIFY(condition) \ +if (!(condition)) { \ +fprintf(stderr, "Assumption \"%s\"\nFailed in file %s: at line:%i\n", \ +#condition,__FILE__,__LINE__); \ +abort();} + +/*#define DEBUG_ASSERT 1*/ + +#ifdef DEBUG_ASSERT +static void Assert(int assertion, const char *error) +{ + if (!assertion) { + fprintf(stderr, "Assertion Failed: %s\n", error); + abort(); + } +} +#endif + +/* If the symbol CHECK_INTERVAL_TREE_ASSUMPTIONS is defined then the + * code does a lot of extra checking to make sure certain assumptions + * are satisfied. This only needs to be done if you suspect bugs are + * present or if you make significant changes and want to make sure + * your changes didn't mess anything up. + */ +/*#define CHECK_INTERVAL_TREE_ASSUMPTIONS 1*/ + +static IntervalTreeNode *ITN_create(long low, long high, void *data); + +static void LeftRotate(IntervalTree *, IntervalTreeNode *); +static void RightRotate(IntervalTree *, IntervalTreeNode *); +static void TreeInsertHelp(IntervalTree *, IntervalTreeNode *); +static void TreePrintHelper(const IntervalTree *, IntervalTreeNode *); +static void FixUpMaxHigh(IntervalTree *, IntervalTreeNode *); +static void DeleteFixUp(IntervalTree *, IntervalTreeNode *); +#ifdef CHECK_INTERVAL_TREE_ASSUMPTIONS +static void CheckMaxHighFields(const IntervalTree *, IntervalTreeNode *); +static int CheckMaxHighFieldsHelper(const IntervalTree *, IntervalTreeNode *y, + const int currentHigh, int match); +static void IT_CheckAssumptions(const IntervalTree *); +#endif + +/* define a function to find the maximum of two objects. */ +#define ITMax(a, b) ( (a > b) ? a : b ) + +IntervalTreeNode * +ITN_create(long low, long high, void *data) +{ + IntervalTreeNode *itn = yasm_xmalloc(sizeof(IntervalTreeNode)); + itn->data = data; + if (low < high) { + itn->low = low; + itn->high = high; + } else { + itn->low = high; + itn->high = low; + } + itn->maxHigh = high; + return itn; +} + +IntervalTree * +IT_create(void) +{ + IntervalTree *it = yasm_xmalloc(sizeof(IntervalTree)); + + it->nil = ITN_create(LONG_MIN, LONG_MIN, NULL); + it->nil->left = it->nil; + it->nil->right = it->nil; + it->nil->parent = it->nil; + it->nil->red = 0; + + it->root = ITN_create(LONG_MAX, LONG_MAX, NULL); + it->root->left = it->nil; + it->root->right = it->nil; + it->root->parent = it->nil; + it->root->red = 0; + + /* the following are used for the Enumerate function */ + it->recursionNodeStackSize = 128; + it->recursionNodeStack = (it_recursion_node *) + yasm_xmalloc(it->recursionNodeStackSize*sizeof(it_recursion_node)); + it->recursionNodeStackTop = 1; + it->recursionNodeStack[0].start_node = NULL; + + return it; +} + +/***********************************************************************/ +/* FUNCTION: LeftRotate */ +/**/ +/* INPUTS: the node to rotate on */ +/**/ +/* OUTPUT: None */ +/**/ +/* Modifies Input: this, x */ +/**/ +/* EFFECTS: Rotates as described in _Introduction_To_Algorithms by */ +/* Cormen, Leiserson, Rivest (Chapter 14). Basically this */ +/* makes the parent of x be to the left of x, x the parent of */ +/* its parent before the rotation and fixes other pointers */ +/* accordingly. Also updates the maxHigh fields of x and y */ +/* after rotation. */ +/***********************************************************************/ + +static void +LeftRotate(IntervalTree *it, IntervalTreeNode *x) +{ + IntervalTreeNode *y; + + /* I originally wrote this function to use the sentinel for + * nil to avoid checking for nil. However this introduces a + * very subtle bug because sometimes this function modifies + * the parent pointer of nil. This can be a problem if a + * function which calls LeftRotate also uses the nil sentinel + * and expects the nil sentinel's parent pointer to be unchanged + * after calling this function. For example, when DeleteFixUP + * calls LeftRotate it expects the parent pointer of nil to be + * unchanged. + */ + + y=x->right; + x->right=y->left; + + if (y->left != it->nil) + y->left->parent=x; /* used to use sentinel here */ + /* and do an unconditional assignment instead of testing for nil */ + + y->parent=x->parent; + + /* Instead of checking if x->parent is the root as in the book, we + * count on the root sentinel to implicitly take care of this case + */ + if (x == x->parent->left) + x->parent->left=y; + else + x->parent->right=y; + y->left=x; + x->parent=y; + + x->maxHigh=ITMax(x->left->maxHigh,ITMax(x->right->maxHigh,x->high)); + y->maxHigh=ITMax(x->maxHigh,ITMax(y->right->maxHigh,y->high)); +#ifdef CHECK_INTERVAL_TREE_ASSUMPTIONS + IT_CheckAssumptions(it); +#elif defined(DEBUG_ASSERT) + Assert(!it->nil->red,"nil not red in ITLeftRotate"); + Assert((it->nil->maxHigh=LONG_MIN), + "nil->maxHigh != LONG_MIN in ITLeftRotate"); +#endif +} + + +/***********************************************************************/ +/* FUNCTION: RightRotate */ +/**/ +/* INPUTS: node to rotate on */ +/**/ +/* OUTPUT: None */ +/**/ +/* Modifies Input?: this, y */ +/**/ +/* EFFECTS: Rotates as described in _Introduction_To_Algorithms by */ +/* Cormen, Leiserson, Rivest (Chapter 14). Basically this */ +/* makes the parent of x be to the left of x, x the parent of */ +/* its parent before the rotation and fixes other pointers */ +/* accordingly. Also updates the maxHigh fields of x and y */ +/* after rotation. */ +/***********************************************************************/ + + +static void +RightRotate(IntervalTree *it, IntervalTreeNode *y) +{ + IntervalTreeNode *x; + + /* I originally wrote this function to use the sentinel for + * nil to avoid checking for nil. However this introduces a + * very subtle bug because sometimes this function modifies + * the parent pointer of nil. This can be a problem if a + * function which calls LeftRotate also uses the nil sentinel + * and expects the nil sentinel's parent pointer to be unchanged + * after calling this function. For example, when DeleteFixUP + * calls LeftRotate it expects the parent pointer of nil to be + * unchanged. + */ + + x=y->left; + y->left=x->right; + + if (it->nil != x->right) + x->right->parent=y; /*used to use sentinel here */ + /* and do an unconditional assignment instead of testing for nil */ + + /* Instead of checking if x->parent is the root as in the book, we + * count on the root sentinel to implicitly take care of this case + */ + x->parent=y->parent; + if (y == y->parent->left) + y->parent->left=x; + else + y->parent->right=x; + x->right=y; + y->parent=x; + + y->maxHigh=ITMax(y->left->maxHigh,ITMax(y->right->maxHigh,y->high)); + x->maxHigh=ITMax(x->left->maxHigh,ITMax(y->maxHigh,x->high)); +#ifdef CHECK_INTERVAL_TREE_ASSUMPTIONS + IT_CheckAssumptions(it); +#elif defined(DEBUG_ASSERT) + Assert(!it->nil->red,"nil not red in ITRightRotate"); + Assert((it->nil->maxHigh=LONG_MIN), + "nil->maxHigh != LONG_MIN in ITRightRotate"); +#endif +} + +/***********************************************************************/ +/* FUNCTION: TreeInsertHelp */ +/**/ +/* INPUTS: z is the node to insert */ +/**/ +/* OUTPUT: none */ +/**/ +/* Modifies Input: this, z */ +/**/ +/* EFFECTS: Inserts z into the tree as if it were a regular binary tree */ +/* using the algorithm described in _Introduction_To_Algorithms_ */ +/* by Cormen et al. This funciton is only intended to be called */ +/* by the InsertTree function and not by the user */ +/***********************************************************************/ + +static void +TreeInsertHelp(IntervalTree *it, IntervalTreeNode *z) +{ + /* This function should only be called by InsertITTree (see above) */ + IntervalTreeNode* x; + IntervalTreeNode* y; + + z->left=z->right=it->nil; + y=it->root; + x=it->root->left; + while( x != it->nil) { + y=x; + if (x->low > z->low) + x=x->left; + else /* x->low <= z->low */ + x=x->right; + } + z->parent=y; + if ((y == it->root) || (y->low > z->low)) + y->left=z; + else + y->right=z; + +#if defined(DEBUG_ASSERT) + Assert(!it->nil->red,"nil not red in ITTreeInsertHelp"); + Assert((it->nil->maxHigh=INT_MIN), + "nil->maxHigh != INT_MIN in ITTreeInsertHelp"); +#endif +} + + +/***********************************************************************/ +/* FUNCTION: FixUpMaxHigh */ +/**/ +/* INPUTS: x is the node to start from*/ +/**/ +/* OUTPUT: none */ +/**/ +/* Modifies Input: this */ +/**/ +/* EFFECTS: Travels up to the root fixing the maxHigh fields after */ +/* an insertion or deletion */ +/***********************************************************************/ + +static void +FixUpMaxHigh(IntervalTree *it, IntervalTreeNode *x) +{ + while(x != it->root) { + x->maxHigh=ITMax(x->high,ITMax(x->left->maxHigh,x->right->maxHigh)); + x=x->parent; + } +#ifdef CHECK_INTERVAL_TREE_ASSUMPTIONS + IT_CheckAssumptions(it); +#endif +} + +/* Before calling InsertNode the node x should have its key set */ + +/***********************************************************************/ +/* FUNCTION: InsertNode */ +/**/ +/* INPUTS: newInterval is the interval to insert*/ +/**/ +/* OUTPUT: This function returns a pointer to the newly inserted node */ +/* which is guarunteed to be valid until this node is deleted. */ +/* What this means is if another data structure stores this */ +/* pointer then the tree does not need to be searched when this */ +/* is to be deleted. */ +/**/ +/* Modifies Input: tree */ +/**/ +/* EFFECTS: Creates a node node which contains the appropriate key and */ +/* info pointers and inserts it into the tree. */ +/***********************************************************************/ + +IntervalTreeNode * +IT_insert(IntervalTree *it, long low, long high, void *data) +{ + IntervalTreeNode *x, *y, *newNode; + + x = ITN_create(low, high, data); + TreeInsertHelp(it, x); + FixUpMaxHigh(it, x->parent); + newNode = x; + x->red=1; + while(x->parent->red) { /* use sentinel instead of checking for root */ + if (x->parent == x->parent->parent->left) { + y=x->parent->parent->right; + if (y->red) { + x->parent->red=0; + y->red=0; + x->parent->parent->red=1; + x=x->parent->parent; + } else { + if (x == x->parent->right) { + x=x->parent; + LeftRotate(it, x); + } + x->parent->red=0; + x->parent->parent->red=1; + RightRotate(it, x->parent->parent); + } + } else { /* case for x->parent == x->parent->parent->right */ + /* this part is just like the section above with */ + /* left and right interchanged */ + y=x->parent->parent->left; + if (y->red) { + x->parent->red=0; + y->red=0; + x->parent->parent->red=1; + x=x->parent->parent; + } else { + if (x == x->parent->left) { + x=x->parent; + RightRotate(it, x); + } + x->parent->red=0; + x->parent->parent->red=1; + LeftRotate(it, x->parent->parent); + } + } + } + it->root->left->red=0; + +#ifdef CHECK_INTERVAL_TREE_ASSUMPTIONS + IT_CheckAssumptions(it); +#elif defined(DEBUG_ASSERT) + Assert(!it->nil->red,"nil not red in ITTreeInsert"); + Assert(!it->root->red,"root not red in ITTreeInsert"); + Assert((it->nil->maxHigh=LONG_MIN), + "nil->maxHigh != LONG_MIN in ITTreeInsert"); +#endif + return newNode; +} + +/***********************************************************************/ +/* FUNCTION: GetSuccessorOf */ +/**/ +/* INPUTS: x is the node we want the succesor of */ +/**/ +/* OUTPUT: This function returns the successor of x or NULL if no */ +/* successor exists. */ +/**/ +/* Modifies Input: none */ +/**/ +/* Note: uses the algorithm in _Introduction_To_Algorithms_ */ +/***********************************************************************/ + +IntervalTreeNode * +IT_get_successor(const IntervalTree *it, IntervalTreeNode *x) +{ + IntervalTreeNode *y; + + if (it->nil != (y = x->right)) { /* assignment to y is intentional */ + while(y->left != it->nil) /* returns the minium of the right subtree of x */ + y=y->left; + return y; + } else { + y=x->parent; + while(x == y->right) { /* sentinel used instead of checking for nil */ + x=y; + y=y->parent; + } + if (y == it->root) + return(it->nil); + return y; + } +} + +/***********************************************************************/ +/* FUNCTION: GetPredecessorOf */ +/**/ +/* INPUTS: x is the node to get predecessor of */ +/**/ +/* OUTPUT: This function returns the predecessor of x or NULL if no */ +/* predecessor exists. */ +/**/ +/* Modifies Input: none */ +/**/ +/* Note: uses the algorithm in _Introduction_To_Algorithms_ */ +/***********************************************************************/ + +IntervalTreeNode * +IT_get_predecessor(const IntervalTree *it, IntervalTreeNode *x) +{ + IntervalTreeNode *y; + + if (it->nil != (y = x->left)) { /* assignment to y is intentional */ + while(y->right != it->nil) /* returns the maximum of the left subtree of x */ + y=y->right; + return y; + } else { + y=x->parent; + while(x == y->left) { + if (y == it->root) + return(it->nil); + x=y; + y=y->parent; + } + return y; + } +} + +/***********************************************************************/ +/* FUNCTION: Print */ +/**/ +/* INPUTS: none */ +/**/ +/* OUTPUT: none */ +/**/ +/* EFFECTS: This function recursively prints the nodes of the tree */ +/* inorder. */ +/**/ +/* Modifies Input: none */ +/**/ +/* Note: This function should only be called from ITTreePrint */ +/***********************************************************************/ + +static void +ITN_print(const IntervalTreeNode *itn, IntervalTreeNode *nil, + IntervalTreeNode *root) +{ + printf(", l=%li, h=%li, mH=%li", itn->low, itn->high, itn->maxHigh); + printf(" l->low="); + if (itn->left == nil) + printf("NULL"); + else + printf("%li", itn->left->low); + printf(" r->low="); + if (itn->right == nil) + printf("NULL"); + else + printf("%li", itn->right->low); + printf(" p->low="); + if (itn->parent == root) + printf("NULL"); + else + printf("%li", itn->parent->low); + printf(" red=%i\n", itn->red); +} + +static void +TreePrintHelper(const IntervalTree *it, IntervalTreeNode *x) +{ + if (x != it->nil) { + TreePrintHelper(it, x->left); + ITN_print(x, it->nil, it->root); + TreePrintHelper(it, x->right); + } +} + +void +IT_destroy(IntervalTree *it) +{ + IntervalTreeNode *x = it->root->left; + SLIST_HEAD(node_head, nodeent) + stuffToFree = SLIST_HEAD_INITIALIZER(stuffToFree); + struct nodeent { + SLIST_ENTRY(nodeent) link; + struct IntervalTreeNode *node; + } *np; + + if (x != it->nil) { + if (x->left != it->nil) { + np = yasm_xmalloc(sizeof(struct nodeent)); + np->node = x->left; + SLIST_INSERT_HEAD(&stuffToFree, np, link); + } + if (x->right != it->nil) { + np = yasm_xmalloc(sizeof(struct nodeent)); + np->node = x->right; + SLIST_INSERT_HEAD(&stuffToFree, np, link); + } + yasm_xfree(x); + while (!SLIST_EMPTY(&stuffToFree)) { + np = SLIST_FIRST(&stuffToFree); + x = np->node; + SLIST_REMOVE_HEAD(&stuffToFree, link); + yasm_xfree(np); + + if (x->left != it->nil) { + np = yasm_xmalloc(sizeof(struct nodeent)); + np->node = x->left; + SLIST_INSERT_HEAD(&stuffToFree, np, link); + } + if (x->right != it->nil) { + np = yasm_xmalloc(sizeof(struct nodeent)); + np->node = x->right; + SLIST_INSERT_HEAD(&stuffToFree, np, link); + } + yasm_xfree(x); + } + } + + yasm_xfree(it->nil); + yasm_xfree(it->root); + yasm_xfree(it->recursionNodeStack); + yasm_xfree(it); +} + + +/***********************************************************************/ +/* FUNCTION: Print */ +/**/ +/* INPUTS: none */ +/**/ +/* OUTPUT: none */ +/**/ +/* EFFECT: This function recursively prints the nodes of the tree */ +/* inorder. */ +/**/ +/* Modifies Input: none */ +/**/ +/***********************************************************************/ + +void +IT_print(const IntervalTree *it) +{ + TreePrintHelper(it, it->root->left); +} + +/***********************************************************************/ +/* FUNCTION: DeleteFixUp */ +/**/ +/* INPUTS: x is the child of the spliced */ +/* out node in DeleteNode. */ +/**/ +/* OUTPUT: none */ +/**/ +/* EFFECT: Performs rotations and changes colors to restore red-black */ +/* properties after a node is deleted */ +/**/ +/* Modifies Input: this, x */ +/**/ +/* The algorithm from this function is from _Introduction_To_Algorithms_ */ +/***********************************************************************/ + +static void +DeleteFixUp(IntervalTree *it, IntervalTreeNode *x) +{ + IntervalTreeNode *w; + IntervalTreeNode *rootLeft = it->root->left; + + while ((!x->red) && (rootLeft != x)) { + if (x == x->parent->left) { + w=x->parent->right; + if (w->red) { + w->red=0; + x->parent->red=1; + LeftRotate(it, x->parent); + w=x->parent->right; + } + if ( (!w->right->red) && (!w->left->red) ) { + w->red=1; + x=x->parent; + } else { + if (!w->right->red) { + w->left->red=0; + w->red=1; + RightRotate(it, w); + w=x->parent->right; + } + w->red=x->parent->red; + x->parent->red=0; + w->right->red=0; + LeftRotate(it, x->parent); + x=rootLeft; /* this is to exit while loop */ + } + } else { /* the code below is has left and right switched from above */ + w=x->parent->left; + if (w->red) { + w->red=0; + x->parent->red=1; + RightRotate(it, x->parent); + w=x->parent->left; + } + if ((!w->right->red) && (!w->left->red)) { + w->red=1; + x=x->parent; + } else { + if (!w->left->red) { + w->right->red=0; + w->red=1; + LeftRotate(it, w); + w=x->parent->left; + } + w->red=x->parent->red; + x->parent->red=0; + w->left->red=0; + RightRotate(it, x->parent); + x=rootLeft; /* this is to exit while loop */ + } + } + } + x->red=0; + +#ifdef CHECK_INTERVAL_TREE_ASSUMPTIONS + IT_CheckAssumptions(it); +#elif defined(DEBUG_ASSERT) + Assert(!it->nil->red,"nil not black in ITDeleteFixUp"); + Assert((it->nil->maxHigh=LONG_MIN), + "nil->maxHigh != LONG_MIN in ITDeleteFixUp"); +#endif +} + + +/***********************************************************************/ +/* FUNCTION: DeleteNode */ +/**/ +/* INPUTS: tree is the tree to delete node z from */ +/**/ +/* OUTPUT: returns the Interval stored at deleted node */ +/**/ +/* EFFECT: Deletes z from tree and but don't call destructor */ +/* Then calls FixUpMaxHigh to fix maxHigh fields then calls */ +/* ITDeleteFixUp to restore red-black properties */ +/**/ +/* Modifies Input: z */ +/**/ +/* The algorithm from this function is from _Introduction_To_Algorithms_ */ +/***********************************************************************/ + +void * +IT_delete_node(IntervalTree *it, IntervalTreeNode *z, long *low, long *high) +{ + IntervalTreeNode *x, *y; + void *returnValue = z->data; + if (low) + *low = z->low; + if (high) + *high = z->high; + + y= ((z->left == it->nil) || (z->right == it->nil)) ? + z : IT_get_successor(it, z); + x= (y->left == it->nil) ? y->right : y->left; + if (it->root == (x->parent = y->parent)) + /* assignment of y->p to x->p is intentional */ + it->root->left=x; + else { + if (y == y->parent->left) + y->parent->left=x; + else + y->parent->right=x; + } + if (y != z) { /* y should not be nil in this case */ + +#ifdef DEBUG_ASSERT + Assert( (y!=it->nil),"y is nil in DeleteNode \n"); +#endif + /* y is the node to splice out and x is its child */ + + y->maxHigh = INT_MIN; + y->left=z->left; + y->right=z->right; + y->parent=z->parent; + z->left->parent=z->right->parent=y; + if (z == z->parent->left) + z->parent->left=y; + else + z->parent->right=y; + FixUpMaxHigh(it, x->parent); + if (!(y->red)) { + y->red = z->red; + DeleteFixUp(it, x); + } else + y->red = z->red; + yasm_xfree(z); +#ifdef CHECK_INTERVAL_TREE_ASSUMPTIONS + IT_CheckAssumptions(it); +#elif defined(DEBUG_ASSERT) + Assert(!it->nil->red,"nil not black in ITDelete"); + Assert((it->nil->maxHigh=LONG_MIN),"nil->maxHigh != LONG_MIN in ITDelete"); +#endif + } else { + FixUpMaxHigh(it, x->parent); + if (!(y->red)) + DeleteFixUp(it, x); + yasm_xfree(y); +#ifdef CHECK_INTERVAL_TREE_ASSUMPTIONS + IT_CheckAssumptions(it); +#elif defined(DEBUG_ASSERT) + Assert(!it->nil->red,"nil not black in ITDelete"); + Assert((it->nil->maxHigh=LONG_MIN),"nil->maxHigh != LONG_MIN in ITDelete"); +#endif + } + return returnValue; +} + + +/***********************************************************************/ +/* FUNCTION: Overlap */ +/**/ +/* INPUTS: [a1,a2] and [b1,b2] are the low and high endpoints of two */ +/* closed intervals. */ +/**/ +/* OUTPUT: stack containing pointers to the nodes between [low,high] */ +/**/ +/* Modifies Input: none */ +/**/ +/* EFFECT: returns 1 if the intervals overlap, and 0 otherwise */ +/***********************************************************************/ + +static int +Overlap(int a1, int a2, int b1, int b2) +{ + if (a1 <= b1) + return (b1 <= a2); + else + return (a1 <= b2); +} + + +/***********************************************************************/ +/* FUNCTION: Enumerate */ +/**/ +/* INPUTS: tree is the tree to look for intervals overlapping the */ +/* closed interval [low,high] */ +/**/ +/* OUTPUT: stack containing pointers to the nodes overlapping */ +/* [low,high] */ +/**/ +/* Modifies Input: none */ +/**/ +/* EFFECT: Returns a stack containing pointers to nodes containing */ +/* intervals which overlap [low,high] in O(max(N,k*log(N))) */ +/* where N is the number of intervals in the tree and k is */ +/* the number of overlapping intervals */ +/**/ +/* Note: This basic idea for this function comes from the */ +/* _Introduction_To_Algorithms_ book by Cormen et al, but */ +/* modifications were made to return all overlapping intervals */ +/* instead of just the first overlapping interval as in the */ +/* book. The natural way to do this would require recursive */ +/* calls of a basic search function. I translated the */ +/* recursive version into an interative version with a stack */ +/* as described below. */ +/***********************************************************************/ + + + +/* The basic idea for the function below is to take the IntervalSearch + * function from the book and modify to find all overlapping intervals + * instead of just one. This means that any time we take the left + * branch down the tree we must also check the right branch if and only if + * we find an overlapping interval in that left branch. Note this is a + * recursive condition because if we go left at the root then go left + * again at the first left child and find an overlap in the left subtree + * of the left child of root we must recursively check the right subtree + * of the left child of root as well as the right child of root. + */ +void +IT_enumerate(IntervalTree *it, long low, long high, void *cbd, + void (*callback) (IntervalTreeNode *node, void *cbd)) +{ + IntervalTreeNode *x=it->root->left; + int stuffToDo = (x != it->nil); + + /* Possible speed up: add min field to prune right searches */ + +#ifdef DEBUG_ASSERT + Assert((it->recursionNodeStackTop == 1), + "recursionStack not empty when entering IntervalTree::Enumerate"); +#endif + it->currentParent = 0; + + while (stuffToDo) { + if (Overlap(low,high,x->low,x->high) ) { + callback(x, cbd); + it->recursionNodeStack[it->currentParent].tryRightBranch=1; + } + if(x->left->maxHigh >= low) { /* implies x != nil */ + if (it->recursionNodeStackTop == it->recursionNodeStackSize) { + it->recursionNodeStackSize *= 2; + it->recursionNodeStack = (it_recursion_node *) + yasm_xrealloc(it->recursionNodeStack, + it->recursionNodeStackSize * sizeof(it_recursion_node)); + } + it->recursionNodeStack[it->recursionNodeStackTop].start_node = x; + it->recursionNodeStack[it->recursionNodeStackTop].tryRightBranch = 0; + it->recursionNodeStack[it->recursionNodeStackTop].parentIndex = it->currentParent; + it->currentParent = it->recursionNodeStackTop++; + x = x->left; + } else { + x = x->right; + } + stuffToDo = (x != it->nil); + while (!stuffToDo && (it->recursionNodeStackTop > 1)) { + if (it->recursionNodeStack[--it->recursionNodeStackTop].tryRightBranch) { + x=it->recursionNodeStack[it->recursionNodeStackTop].start_node->right; + it->currentParent=it->recursionNodeStack[it->recursionNodeStackTop].parentIndex; + it->recursionNodeStack[it->currentParent].tryRightBranch=1; + stuffToDo = (x != it->nil); + } + } + } +#ifdef DEBUG_ASSERT + Assert((it->recursionNodeStackTop == 1), + "recursionStack not empty when exiting IntervalTree::Enumerate"); +#endif +} + +#ifdef CHECK_INTERVAL_TREE_ASSUMPTIONS + +static int +CheckMaxHighFieldsHelper(const IntervalTree *it, IntervalTreeNode *y, + int currentHigh, int match) +{ + if (y != it->nil) { + match = CheckMaxHighFieldsHelper(it, y->left, currentHigh, match) ? + 1 : match; + VERIFY(y->high <= currentHigh); + if (y->high == currentHigh) + match = 1; + match = CheckMaxHighFieldsHelper(it, y->right, currentHigh, match) ? + 1 : match; + } + return match; +} + + + +/* Make sure the maxHigh fields for everything makes sense. * + * If something is wrong, print a warning and exit */ +static void +CheckMaxHighFields(const IntervalTree *it, IntervalTreeNode *x) +{ + if (x != it->nil) { + CheckMaxHighFields(it, x->left); + if(!(CheckMaxHighFieldsHelper(it, x, x->maxHigh, 0) > 0)) { + fprintf(stderr, "error found in CheckMaxHighFields.\n"); + abort(); + } + CheckMaxHighFields(it, x->right); + } +} + +static void +IT_CheckAssumptions(const IntervalTree *it) +{ + VERIFY(it->nil->low == INT_MIN); + VERIFY(it->nil->high == INT_MIN); + VERIFY(it->nil->maxHigh == INT_MIN); + VERIFY(it->root->low == INT_MAX); + VERIFY(it->root->high == INT_MAX); + VERIFY(it->root->maxHigh == INT_MAX); + VERIFY(it->nil->data == NULL); + VERIFY(it->root->data == NULL); + VERIFY(it->nil->red == 0); + VERIFY(it->root->red == 0); + CheckMaxHighFields(it, it->root->left); +} +#endif + diff --git a/third-party/yasm/yasm-1.3.0/libyasm/inttree.h b/third-party/yasm/yasm-1.3.0/libyasm/inttree.h new file mode 100644 index 0000000000..f7a7651512 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/inttree.h @@ -0,0 +1,70 @@ +#ifndef YASM_INTTREE_H +#define YASM_INTTREE_H + +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +/* The interval_tree.h and interval_tree.cc files contain code for + * interval trees implemented using red-black-trees as described in + * the book _Introduction_To_Algorithms_ by Cormen, Leisserson, + * and Rivest. + */ + +typedef struct IntervalTreeNode { + struct IntervalTreeNode *left, *right, *parent; + void *data; + long low; + long high; + long maxHigh; + int red; /* if red=0 then the node is black */ +} IntervalTreeNode; + +typedef struct it_recursion_node { + /* This structure stores the information needed when we take the + * right branch in searching for intervals but possibly come back + * and check the left branch as well. + */ + IntervalTreeNode *start_node; + unsigned int parentIndex; + int tryRightBranch; +} it_recursion_node; + +typedef struct IntervalTree { + /* A sentinel is used for root and for nil. These sentinels are + * created when ITTreeCreate is called. root->left should always + * point to the node which is the root of the tree. nil points to a + * node which should always be black but has aribtrary children and + * parent and no key or info. The point of using these sentinels is so + * that the root and nil nodes do not require special cases in the code + */ + IntervalTreeNode *root; + IntervalTreeNode *nil; + +/*private:*/ + unsigned int recursionNodeStackSize; + it_recursion_node * recursionNodeStack; + unsigned int currentParent; + unsigned int recursionNodeStackTop; +} IntervalTree; + +YASM_LIB_DECL +IntervalTree *IT_create(void); +YASM_LIB_DECL +void IT_destroy(IntervalTree *); +YASM_LIB_DECL +void IT_print(const IntervalTree *); +YASM_LIB_DECL +void *IT_delete_node(IntervalTree *, IntervalTreeNode *, long *low, + long *high); +YASM_LIB_DECL +IntervalTreeNode *IT_insert(IntervalTree *, long low, long high, void *data); +YASM_LIB_DECL +IntervalTreeNode *IT_get_predecessor(const IntervalTree *, IntervalTreeNode *); +YASM_LIB_DECL +IntervalTreeNode *IT_get_successor(const IntervalTree *, IntervalTreeNode *); +YASM_LIB_DECL +void IT_enumerate(IntervalTree *, long low, long high, void *cbd, + void (*callback) (IntervalTreeNode *node, void *cbd)); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/linemap.c b/third-party/yasm/yasm-1.3.0/libyasm/linemap.c new file mode 100644 index 0000000000..42201d3c07 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/linemap.c @@ -0,0 +1,293 @@ +/* + * YASM assembler virtual line mapping handling (for parse stage) + * + * Copyright (C) 2002-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 "util.h" + +#include "coretype.h" +#include "hamt.h" + +#include "errwarn.h" +#include "linemap.h" + + +typedef struct line_mapping { + /* monotonically increasing virtual line */ + unsigned long line; + + /* related info */ + /* "original" source filename */ + /*@null@*/ /*@dependent@*/ const char *filename; + /* "original" source base line number */ + unsigned long file_line; + /* "original" source line number increment (for following lines) */ + unsigned long line_inc; +} line_mapping; + +typedef struct line_source_info { + /* first bytecode on line; NULL if no bytecodes on line */ + /*@null@*/ /*@dependent@*/ yasm_bytecode *bc; + + /* source code line */ + /*@owned@*/ char *source; +} line_source_info; + +struct yasm_linemap { + /* Shared storage for filenames */ + /*@only@*/ /*@null@*/ HAMT *filenames; + + /* Current virtual line number. */ + unsigned long current; + + /* Mappings from virtual to physical line numbers */ + struct line_mapping *map_vector; + unsigned long map_size; + unsigned long map_allocated; + + /* Bytecode and source line information */ + /*@only@*/ line_source_info *source_info; + size_t source_info_size; +}; + +static void +filename_delete_one(/*@only@*/ void *d) +{ + yasm_xfree(d); +} + +void +yasm_linemap_set(yasm_linemap *linemap, const char *filename, + unsigned long virtual_line, unsigned long file_line, + unsigned long line_inc) +{ + char *copy; + unsigned long i; + int replace = 0; + line_mapping *mapping = NULL; + + if (virtual_line == 0) { + virtual_line = linemap->current; + } + + /* Replace all existing mappings that have line numbers >= this one. */ + for (i = linemap->map_size; i > 0; i--) { + if (linemap->map_vector[i-1].line < virtual_line) { + if (i < linemap->map_size) { + mapping = &linemap->map_vector[i]; + linemap->map_size = i + 1; + } + break; + } + } + + if (mapping == NULL) { + /* Create a new mapping in the map */ + if (linemap->map_size >= linemap->map_allocated) { + /* allocate another size bins when full for 2x space */ + linemap->map_vector = yasm_xrealloc(linemap->map_vector, + 2*linemap->map_allocated*sizeof(line_mapping)); + linemap->map_allocated *= 2; + } + mapping = &linemap->map_vector[linemap->map_size]; + linemap->map_size++; + } + + /* Fill it */ + + if (!filename) { + if (linemap->map_size >= 2) + mapping->filename = + linemap->map_vector[linemap->map_size-2].filename; + else + filename = "unknown"; + } + if (filename) { + /* Copy the filename (via shared storage) */ + copy = yasm__xstrdup(filename); + /*@-aliasunique@*/ + mapping->filename = HAMT_insert(linemap->filenames, copy, copy, + &replace, filename_delete_one); + /*@=aliasunique@*/ + } + + mapping->line = virtual_line; + mapping->file_line = file_line; + mapping->line_inc = line_inc; +} + +unsigned long +yasm_linemap_poke(yasm_linemap *linemap, const char *filename, + unsigned long file_line) +{ + unsigned long line; + line_mapping *mapping; + + linemap->current++; + yasm_linemap_set(linemap, filename, 0, file_line, 0); + + mapping = &linemap->map_vector[linemap->map_size-1]; + + line = linemap->current; + + linemap->current++; + yasm_linemap_set(linemap, mapping->filename, 0, + mapping->file_line + + mapping->line_inc*(linemap->current-2-mapping->line), + mapping->line_inc); + + return line; +} + +yasm_linemap * +yasm_linemap_create(void) +{ + size_t i; + yasm_linemap *linemap = yasm_xmalloc(sizeof(yasm_linemap)); + + linemap->filenames = HAMT_create(0, yasm_internal_error_); + + linemap->current = 1; + + /* initialize mapping vector */ + linemap->map_vector = yasm_xmalloc(8*sizeof(line_mapping)); + linemap->map_size = 0; + linemap->map_allocated = 8; + + /* initialize source line information array */ + linemap->source_info_size = 2; + linemap->source_info = yasm_xmalloc(linemap->source_info_size * + sizeof(line_source_info)); + for (i=0; isource_info_size; i++) { + linemap->source_info[i].bc = NULL; + linemap->source_info[i].source = NULL; + } + + return linemap; +} + +void +yasm_linemap_destroy(yasm_linemap *linemap) +{ + size_t i; + for (i=0; isource_info_size; i++) { + if (linemap->source_info[i].source) + yasm_xfree(linemap->source_info[i].source); + } + yasm_xfree(linemap->source_info); + + yasm_xfree(linemap->map_vector); + + if (linemap->filenames) + HAMT_destroy(linemap->filenames, filename_delete_one); + + yasm_xfree(linemap); +} + +unsigned long +yasm_linemap_get_current(yasm_linemap *linemap) +{ + return linemap->current; +} + +void +yasm_linemap_add_source(yasm_linemap *linemap, yasm_bytecode *bc, + const char *source) +{ + size_t i; + + while (linemap->current > linemap->source_info_size) { + /* allocate another size bins when full for 2x space */ + linemap->source_info = yasm_xrealloc(linemap->source_info, + 2*linemap->source_info_size*sizeof(line_source_info)); + for (i=linemap->source_info_size; isource_info_size*2; i++) { + linemap->source_info[i].bc = NULL; + linemap->source_info[i].source = NULL; + } + linemap->source_info_size *= 2; + } + + /* Delete existing info for that line (if any) */ + if (linemap->source_info[linemap->current-1].source) + yasm_xfree(linemap->source_info[linemap->current-1].source); + + linemap->source_info[linemap->current-1].bc = bc; + linemap->source_info[linemap->current-1].source = yasm__xstrdup(source); +} + +unsigned long +yasm_linemap_goto_next(yasm_linemap *linemap) +{ + return ++(linemap->current); +} + +void +yasm_linemap_lookup(yasm_linemap *linemap, unsigned long line, + const char **filename, unsigned long *file_line) +{ + line_mapping *mapping; + unsigned long vindex, step; + + assert(line <= linemap->current); + + /* Binary search through map to find highest line_index <= index */ + vindex = 0; + /* start step as the greatest power of 2 <= size */ + step = 1; + while (step*2<=linemap->map_size) + step*=2; + while (step>0) { + if (vindex+step < linemap->map_size + && linemap->map_vector[vindex+step].line <= line) + vindex += step; + step /= 2; + } + mapping = &linemap->map_vector[vindex]; + + *filename = mapping->filename; + *file_line = (line ? mapping->file_line + mapping->line_inc*(line-mapping->line) : 0); +} + +int +yasm_linemap_traverse_filenames(yasm_linemap *linemap, /*@null@*/ void *d, + int (*func) (const char *filename, void *d)) +{ + return HAMT_traverse(linemap->filenames, d, (int (*) (void *, void *))func); +} + +int +yasm_linemap_get_source(yasm_linemap *linemap, unsigned long line, + yasm_bytecode **bcp, const char **sourcep) +{ + if (line > linemap->source_info_size) { + *bcp = NULL; + *sourcep = NULL; + return 1; + } + + *bcp = linemap->source_info[line-1].bc; + *sourcep = linemap->source_info[line-1].source; + + return (!(*sourcep)); +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/linemap.h b/third-party/yasm/yasm-1.3.0/libyasm/linemap.h new file mode 100644 index 0000000000..1c5aa4626a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/linemap.h @@ -0,0 +1,141 @@ +/** + * \file libyasm/linemap.h + * \brief YASM virtual line mapping interface. + * + * \license + * Copyright (C) 2002-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_LINEMAP_H +#define YASM_LINEMAP_H + +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +/** Create a new line mapping repository. + * \return New repository. + */ +YASM_LIB_DECL +yasm_linemap *yasm_linemap_create(void); + +/** Clean up any memory allocated for a repository. + * \param linemap line mapping repository + */ +YASM_LIB_DECL +void yasm_linemap_destroy(yasm_linemap *linemap); + +/** Get the current line position in a repository. + * \param linemap line mapping repository + * \return Current virtual line. + */ +YASM_LIB_DECL +unsigned long yasm_linemap_get_current(yasm_linemap *linemap); + +/** Get bytecode and source line information, if any, for a virtual line. + * \param linemap line mapping repository + * \param line virtual line + * \param bcp pointer to return bytecode into + * \param sourcep pointer to return source code line pointer into + * \return Zero if source line information available for line, nonzero if not. + * \note If source line information is not available, bcp and sourcep targets + * are set to NULL. + */ +YASM_LIB_DECL +int yasm_linemap_get_source(yasm_linemap *linemap, unsigned long line, + /*@null@*/ yasm_bytecode **bcp, + const char **sourcep); + +/** Add bytecode and source line information to the current virtual line. + * \attention Deletes any existing bytecode and source line information for + * the current virtual line. + * \param linemap line mapping repository + * \param bc bytecode (if any) + * \param source source code line + * \note The source code line pointer is NOT kept, it is strdup'ed. + */ +YASM_LIB_DECL +void yasm_linemap_add_source(yasm_linemap *linemap, + /*@null@*/ yasm_bytecode *bc, + const char *source); + +/** Go to the next line (increments the current virtual line). + * \param linemap line mapping repository + * \return The current (new) virtual line. + */ +YASM_LIB_DECL +unsigned long yasm_linemap_goto_next(yasm_linemap *linemap); + +/** Set a new file/line physical association starting point at the specified + * virtual line. line_inc indicates how much the "real" line is incremented + * by for each virtual line increment (0 is perfectly legal). + * \param linemap line mapping repository + * \param filename physical file name (if NULL, not changed) + * \param virtual_line virtual line number (if 0, linemap->current is used) + * \param file_line physical line number + * \param line_inc line increment + */ +YASM_LIB_DECL +void yasm_linemap_set(yasm_linemap *linemap, /*@null@*/ const char *filename, + unsigned long virtual_line, unsigned long file_line, + unsigned long line_inc); + +/** Poke a single file/line association, restoring the original physical + * association starting point. Caution: increments the current virtual line + * twice. + * \param linemap line mapping repository + * \param filename physical file name (if NULL, not changed) + * \param file_line physical line number + * \return The virtual line number of the poked association. + */ +YASM_LIB_DECL +unsigned long yasm_linemap_poke(yasm_linemap *linemap, + /*@null@*/ const char *filename, + unsigned long file_line); + +/** Look up the associated physical file and line for a virtual line. + * \param linemap line mapping repository + * \param line virtual line + * \param filename physical file name (output) + * \param file_line physical line number (output) + */ +YASM_LIB_DECL +void yasm_linemap_lookup(yasm_linemap *linemap, unsigned long line, + /*@out@*/ const char **filename, + /*@out@*/ unsigned long *file_line); + +/** Traverses all filenames used in a linemap, calling a function on each + * filename. + * \param linemap line mapping repository + * \param d data pointer passed to func on each call + * \param func function + * \return Stops early (and returns func's return value) if func returns a + * nonzero value; otherwise 0. + */ +YASM_LIB_DECL +int yasm_linemap_traverse_filenames + (yasm_linemap *linemap, /*@null@*/ void *d, + int (*func) (const char *filename, void *d)); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/listfmt.h b/third-party/yasm/yasm-1.3.0/libyasm/listfmt.h new file mode 100644 index 0000000000..945f28e58b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/listfmt.h @@ -0,0 +1,124 @@ +/** + * \file libyasm/listfmt.h + * \brief YASM list format interface. + * + * \license + * Copyright (C) 2004-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_LISTFMT_H +#define YASM_LISTFMT_H + +#ifndef YASM_DOXYGEN +/** Base #yasm_listfmt structure. Must be present as the first element in any + * #yasm_listfmt implementation. + */ +typedef struct yasm_listfmt_base { + /** #yasm_listfmt_module implementation for this list format. */ + const struct yasm_listfmt_module *module; +} yasm_listfmt_base; +#endif + +/** YASM list format module interface. */ +typedef struct yasm_listfmt_module { + /** One-line description of the list format. */ + const char *name; + + /** Keyword used to select list format. */ + const char *keyword; + + /** Create list format. + * Module-level implementation of yasm_listfmt_create(). + * The filenames are provided solely for informational purposes. + * \param in_filename primary input filename + * \param obj_filename object filename + * \return NULL if unable to initialize. + */ + /*@null@*/ /*@only@*/ yasm_listfmt * (*create) + (const char *in_filename, const char *obj_filename); + + /** Module-level implementation of yasm_listfmt_destroy(). + * Call yasm_listfmt_destroy() instead of calling this function. + */ + void (*destroy) (/*@only@*/ yasm_listfmt *listfmt); + + /** Module-level implementation of yasm_listfmt_output(). + * Call yasm_listfmt_output() instead of calling this function. + */ + void (*output) (yasm_listfmt *listfmt, FILE *f, yasm_linemap *linemap, + yasm_arch *arch); +} yasm_listfmt_module; + +/** Get the keyword used to select a list format. + * \param listfmt list format + * \return keyword + */ +const char *yasm_listfmt_keyword(const yasm_listfmt *listfmt); + +/** Initialize list format for use. Must call before any other list + * format functions. The filenames are provided solely for informational + * purposes. + * \param module list format module + * \param in_filename primary input filename + * \param obj_filename object filename + * \return NULL if object format does not provide needed support. + */ +/*@null@*/ /*@only@*/ yasm_listfmt *yasm_listfmt_create + (const yasm_listfmt_module *module, const char *in_filename, + const char *obj_filename); + +/** Cleans up any allocated list format memory. + * \param listfmt list format + */ +void yasm_listfmt_destroy(/*@only@*/ yasm_listfmt *listfmt); + +/** Write out list to the list file. + * This function may call all read-only yasm_* functions as necessary. + * \param listfmt list format + * \param f output list file + * \param linemap line mapping repository + * \param arch architecture + */ +void yasm_listfmt_output(yasm_listfmt *listfmt, FILE *f, + yasm_linemap *linemap, yasm_arch *arch); + +#ifndef YASM_DOXYGEN + +/* Inline macro implementations for listfmt functions */ + +#define yasm_listfmt_keyword(listfmt) \ + (((yasm_listfmt_base *)listfmt)->module->keyword) + +#define yasm_listfmt_create(module, in_filename, obj_filename) \ + module->create(in_filename, obj_filename) + +#define yasm_listfmt_destroy(listfmt) \ + ((yasm_listfmt_base *)listfmt)->module->destroy(listfmt) + +#define yasm_listfmt_output(listfmt, f, linemap, a) \ + ((yasm_listfmt_base *)listfmt)->module->output(listfmt, f, linemap, a) + +#endif + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/md5.c b/third-party/yasm/yasm-1.3.0/libyasm/md5.c new file mode 100644 index 0000000000..ba1a3077df --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/md5.c @@ -0,0 +1,309 @@ +/* + * This code implements the MD5 message-digest algorithm. + * The algorithm is due to Ron Rivest. This code was + * written by Colin Plumb in 1993, no copyright is claimed. + * This code is in the public domain; do with it what you wish. + * + * Equivalent code is available from RSA Data Security, Inc. + * This code has been tested against that, and is equivalent, + * except that you don't need to include two pages of legalese + * with every copy. + * + * To compute the message digest of a chunk of bytes, declare an + * MD5Context structure, pass it to MD5Init, call MD5Update as + * needed on buffers full of bytes, and then call MD5Final, which + * will fill a supplied 16-byte array with the digest. + */ + +/* This code was modified in 1997 by Jim Kingdon of Cyclic Software to + not require an integer type which is exactly 32 bits. This work + draws on the changes for the same purpose by Tatu Ylonen + as part of SSH, but since I didn't actually use + that code, there is no copyright issue. I hereby disclaim + copyright in any changes I have made; this code remains in the + public domain. */ + +/* Note regarding cvs_* namespace: this avoids potential conflicts + with libraries such as some versions of Kerberos. No particular + need to worry about whether the system supplies an MD5 library, as + this file is only about 3k of object code. */ + +#include + +#include "md5.h" + +/* Little-endian byte-swapping routines. Note that these do not + depend on the size of datatypes such as cvs_uint32, nor do they require + us to detect the endianness of the machine we are running on. It + is possible they should be macros for speed, but I would be + surprised if they were a performance bottleneck for MD5. */ + +static unsigned long +getu32(const unsigned char *addr) +{ + return (((((unsigned long)addr[3] << 8) | addr[2]) << 8) + | addr[1]) << 8 | addr[0]; +} + +static void +putu32(unsigned long data, unsigned char *addr) +{ + addr[0] = (unsigned char)data; + addr[1] = (unsigned char)(data >> 8); + addr[2] = (unsigned char)(data >> 16); + addr[3] = (unsigned char)(data >> 24); +} + +/* + * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious + * initialization constants. + */ +void +yasm_md5_init(yasm_md5_context *ctx) +{ + ctx->buf[0] = 0x67452301; + ctx->buf[1] = 0xefcdab89; + ctx->buf[2] = 0x98badcfe; + ctx->buf[3] = 0x10325476; + + ctx->bits[0] = 0; + ctx->bits[1] = 0; +} + +/* + * Update context to reflect the concatenation of another buffer full + * of bytes. + */ +void +yasm_md5_update(yasm_md5_context *ctx, unsigned char const *buf, + unsigned long len) +{ + unsigned long t; + + /* Update bitcount */ + + t = ctx->bits[0]; + if ((ctx->bits[0] = (t + ((unsigned long)len << 3)) & 0xffffffff) < t) + ctx->bits[1]++; /* Carry from low to high */ + ctx->bits[1] += len >> 29; + + t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */ + + /* Handle any leading odd-sized chunks */ + + if ( t ) { + unsigned char *p = ctx->in + t; + + t = 64-t; + if (len < t) { + memcpy(p, buf, len); + return; + } + memcpy(p, buf, t); + yasm_md5_transform (ctx->buf, ctx->in); + buf += t; + len -= t; + } + + /* Process data in 64-byte chunks */ + + while (len >= 64) { + memcpy(ctx->in, buf, 64); + yasm_md5_transform (ctx->buf, ctx->in); + buf += 64; + len -= 64; + } + + /* Handle any remaining bytes of data. */ + + memcpy(ctx->in, buf, len); +} + +/* + * Final wrapup - pad to 64-byte boundary with the bit pattern + * 1 0* (64-bit count of bits processed, MSB-first) + */ +void +yasm_md5_final(unsigned char digest[16], yasm_md5_context *ctx) +{ + unsigned count; + unsigned char *p; + + /* Compute number of bytes mod 64 */ + count = (ctx->bits[0] >> 3) & 0x3F; + + /* Set the first char of padding to 0x80. This is safe since there is + always at least one byte free */ + p = ctx->in + count; + *p++ = 0x80; + + /* Bytes of padding needed to make 64 bytes */ + count = 64 - 1 - count; + + /* Pad out to 56 mod 64 */ + if (count < 8) { + /* Two lots of padding: Pad the first block to 64 bytes */ + memset(p, 0, count); + yasm_md5_transform (ctx->buf, ctx->in); + + /* Now fill the next block with 56 bytes */ + memset(ctx->in, 0, 56); + } else { + /* Pad block to 56 bytes */ + memset(p, 0, count-8); + } + + /* Append length in bits and transform */ + putu32(ctx->bits[0], ctx->in + 56); + putu32(ctx->bits[1], ctx->in + 60); + + yasm_md5_transform (ctx->buf, ctx->in); + putu32(ctx->buf[0], digest); + putu32(ctx->buf[1], digest + 4); + putu32(ctx->buf[2], digest + 8); + putu32(ctx->buf[3], digest + 12); + memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */ +} + +#ifndef ASM_MD5 + +/* The four core functions - F1 is optimized somewhat */ + +/* #define F1(x, y, z) (x & y | ~x & z) */ +#define F1(x, y, z) (z ^ (x & (y ^ z))) +#define F2(x, y, z) F1(z, x, y) +#define F3(x, y, z) (x ^ y ^ z) +#define F4(x, y, z) (y ^ (x | ~z)) + +/* This is the central step in the MD5 algorithm. */ +#define MD5STEP(f, w, x, y, z, data, s) \ + ( w += f(x, y, z) + data, w &= 0xffffffff, w = w<>(32-s), w += x ) + +/* + * The core of the MD5 algorithm, this alters an existing MD5 hash to + * reflect the addition of 16 longwords of new data. MD5Update blocks + * the data and converts bytes into longwords for this routine. + */ +void +yasm_md5_transform(unsigned long buf[4], const unsigned char inraw[64]) +{ + register unsigned long a, b, c, d; + unsigned long in[16]; + int i; + + for (i = 0; i < 16; ++i) + in[i] = getu32 (inraw + 4 * i); + + a = buf[0]; + b = buf[1]; + c = buf[2]; + d = buf[3]; + + MD5STEP(F1, a, b, c, d, in[ 0]+0xd76aa478, 7); + MD5STEP(F1, d, a, b, c, in[ 1]+0xe8c7b756, 12); + MD5STEP(F1, c, d, a, b, in[ 2]+0x242070db, 17); + MD5STEP(F1, b, c, d, a, in[ 3]+0xc1bdceee, 22); + MD5STEP(F1, a, b, c, d, in[ 4]+0xf57c0faf, 7); + MD5STEP(F1, d, a, b, c, in[ 5]+0x4787c62a, 12); + MD5STEP(F1, c, d, a, b, in[ 6]+0xa8304613, 17); + MD5STEP(F1, b, c, d, a, in[ 7]+0xfd469501, 22); + MD5STEP(F1, a, b, c, d, in[ 8]+0x698098d8, 7); + MD5STEP(F1, d, a, b, c, in[ 9]+0x8b44f7af, 12); + MD5STEP(F1, c, d, a, b, in[10]+0xffff5bb1, 17); + MD5STEP(F1, b, c, d, a, in[11]+0x895cd7be, 22); + MD5STEP(F1, a, b, c, d, in[12]+0x6b901122, 7); + MD5STEP(F1, d, a, b, c, in[13]+0xfd987193, 12); + MD5STEP(F1, c, d, a, b, in[14]+0xa679438e, 17); + MD5STEP(F1, b, c, d, a, in[15]+0x49b40821, 22); + + MD5STEP(F2, a, b, c, d, in[ 1]+0xf61e2562, 5); + MD5STEP(F2, d, a, b, c, in[ 6]+0xc040b340, 9); + MD5STEP(F2, c, d, a, b, in[11]+0x265e5a51, 14); + MD5STEP(F2, b, c, d, a, in[ 0]+0xe9b6c7aa, 20); + MD5STEP(F2, a, b, c, d, in[ 5]+0xd62f105d, 5); + MD5STEP(F2, d, a, b, c, in[10]+0x02441453, 9); + MD5STEP(F2, c, d, a, b, in[15]+0xd8a1e681, 14); + MD5STEP(F2, b, c, d, a, in[ 4]+0xe7d3fbc8, 20); + MD5STEP(F2, a, b, c, d, in[ 9]+0x21e1cde6, 5); + MD5STEP(F2, d, a, b, c, in[14]+0xc33707d6, 9); + MD5STEP(F2, c, d, a, b, in[ 3]+0xf4d50d87, 14); + MD5STEP(F2, b, c, d, a, in[ 8]+0x455a14ed, 20); + MD5STEP(F2, a, b, c, d, in[13]+0xa9e3e905, 5); + MD5STEP(F2, d, a, b, c, in[ 2]+0xfcefa3f8, 9); + MD5STEP(F2, c, d, a, b, in[ 7]+0x676f02d9, 14); + MD5STEP(F2, b, c, d, a, in[12]+0x8d2a4c8a, 20); + + MD5STEP(F3, a, b, c, d, in[ 5]+0xfffa3942, 4); + MD5STEP(F3, d, a, b, c, in[ 8]+0x8771f681, 11); + MD5STEP(F3, c, d, a, b, in[11]+0x6d9d6122, 16); + MD5STEP(F3, b, c, d, a, in[14]+0xfde5380c, 23); + MD5STEP(F3, a, b, c, d, in[ 1]+0xa4beea44, 4); + MD5STEP(F3, d, a, b, c, in[ 4]+0x4bdecfa9, 11); + MD5STEP(F3, c, d, a, b, in[ 7]+0xf6bb4b60, 16); + MD5STEP(F3, b, c, d, a, in[10]+0xbebfbc70, 23); + MD5STEP(F3, a, b, c, d, in[13]+0x289b7ec6, 4); + MD5STEP(F3, d, a, b, c, in[ 0]+0xeaa127fa, 11); + MD5STEP(F3, c, d, a, b, in[ 3]+0xd4ef3085, 16); + MD5STEP(F3, b, c, d, a, in[ 6]+0x04881d05, 23); + MD5STEP(F3, a, b, c, d, in[ 9]+0xd9d4d039, 4); + MD5STEP(F3, d, a, b, c, in[12]+0xe6db99e5, 11); + MD5STEP(F3, c, d, a, b, in[15]+0x1fa27cf8, 16); + MD5STEP(F3, b, c, d, a, in[ 2]+0xc4ac5665, 23); + + MD5STEP(F4, a, b, c, d, in[ 0]+0xf4292244, 6); + MD5STEP(F4, d, a, b, c, in[ 7]+0x432aff97, 10); + MD5STEP(F4, c, d, a, b, in[14]+0xab9423a7, 15); + MD5STEP(F4, b, c, d, a, in[ 5]+0xfc93a039, 21); + MD5STEP(F4, a, b, c, d, in[12]+0x655b59c3, 6); + MD5STEP(F4, d, a, b, c, in[ 3]+0x8f0ccc92, 10); + MD5STEP(F4, c, d, a, b, in[10]+0xffeff47d, 15); + MD5STEP(F4, b, c, d, a, in[ 1]+0x85845dd1, 21); + MD5STEP(F4, a, b, c, d, in[ 8]+0x6fa87e4f, 6); + MD5STEP(F4, d, a, b, c, in[15]+0xfe2ce6e0, 10); + MD5STEP(F4, c, d, a, b, in[ 6]+0xa3014314, 15); + MD5STEP(F4, b, c, d, a, in[13]+0x4e0811a1, 21); + MD5STEP(F4, a, b, c, d, in[ 4]+0xf7537e82, 6); + MD5STEP(F4, d, a, b, c, in[11]+0xbd3af235, 10); + MD5STEP(F4, c, d, a, b, in[ 2]+0x2ad7d2bb, 15); + MD5STEP(F4, b, c, d, a, in[ 9]+0xeb86d391, 21); + + buf[0] += a; + buf[1] += b; + buf[2] += c; + buf[3] += d; +} +#endif + +#ifdef TEST +/* Simple test program. Can use it to manually run the tests from + RFC1321 for example. */ +#include + +int +main (int argc, char **argv) +{ + yasm_md5_context context; + unsigned char checksum[16]; + int i; + int j; + + if (argc < 2) + { + fprintf (stderr, "usage: %s string-to-hash\n", argv[0]); + exit (1); + } + for (j = 1; j < argc; ++j) + { + printf ("MD5 (\"%s\") = ", argv[j]); + yasm_md5_init (&context); + yasm_md5_update (&context, argv[j], strlen (argv[j])); + yasm_md5_final (checksum, &context); + for (i = 0; i < 16; i++) + { + printf ("%02x", (unsigned int) checksum[i]); + } + printf ("\n"); + } + return 0; +} +#endif /* TEST */ diff --git a/third-party/yasm/yasm-1.3.0/libyasm/md5.h b/third-party/yasm/yasm-1.3.0/libyasm/md5.h new file mode 100644 index 0000000000..7872fda7a1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/md5.h @@ -0,0 +1,32 @@ +/* See md5.c for explanation and copyright information. */ + +#ifndef YASM_MD5_H +#define YASM_MD5_H + +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +/* Unlike previous versions of this code, uint32 need not be exactly + 32 bits, merely 32 bits or more. Choosing a data type which is 32 + bits instead of 64 is not important; speed is considerably more + important. ANSI guarantees that "unsigned long" will be big enough, + and always using it seems to have few disadvantages. */ + +typedef struct yasm_md5_context { + unsigned long buf[4]; + unsigned long bits[2]; + unsigned char in[64]; +} yasm_md5_context; + +YASM_LIB_DECL +void yasm_md5_init(yasm_md5_context *context); +YASM_LIB_DECL +void yasm_md5_update(yasm_md5_context *context, unsigned char const *buf, + unsigned long len); +YASM_LIB_DECL +void yasm_md5_final(unsigned char digest[16], yasm_md5_context *context); +YASM_LIB_DECL +void yasm_md5_transform(unsigned long buf[4], const unsigned char in[64]); + +#endif /* !YASM_MD5_H */ diff --git a/third-party/yasm/yasm-1.3.0/libyasm/mergesort.c b/third-party/yasm/yasm-1.3.0/libyasm/mergesort.c new file mode 100644 index 0000000000..3eeaa8273b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/mergesort.c @@ -0,0 +1,361 @@ +/* + * mergesort() implementation for systems that don't have it. + * + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Peter McIlroy. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS 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 "util.h" + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "@(#)merge.c 8.2 (Berkeley) 2/14/94"; +#endif /* LIBC_SCCS and not lint */ + +#ifdef HAVE_MERGESORT +#undef yasm__mergesort +#endif + +#ifndef HAVE_MERGESORT +/* + * Hybrid exponential search/linear search merge sort with hybrid + * natural/pairwise first pass. Requires about .3% more comparisons + * for random data than LSMS with pairwise first pass alone. + * It works for objects as small as two bytes. + */ + +#define NATURAL +#define THRESHOLD 16 /* Best choice for natural merge cut-off. */ + +/* #define NATURAL to get hybrid natural merge. + * (The default is pairwise merging.) + */ + +#include +#include + +static void setup(unsigned char *, unsigned char *, size_t, size_t, + int (*)(const void *, const void *)); +static void insertionsort(unsigned char *, size_t, size_t, + int (*)(const void *, const void *)); + +#define ISIZE sizeof(int) +#define PSIZE sizeof(unsigned char *) +#define ICOPY_LIST(src, dst, last) \ + do \ + *(int*)dst = *(int*)src, src += ISIZE, dst += ISIZE; \ + while(src < last) +#define ICOPY_ELT(src, dst, i) \ + do \ + *(int*) dst = *(int*) src, src += ISIZE, dst += ISIZE; \ + while (i -= ISIZE) + +#define CCOPY_LIST(src, dst, last) \ + do \ + *dst++ = *src++; \ + while (src < last) +#define CCOPY_ELT(src, dst, i) \ + do \ + *dst++ = *src++; \ + while (i -= 1) + +/* + * Find the next possible pointer head. (Trickery for forcing an array + * to do double duty as a linked list when objects do not align with word + * boundaries. + */ +/* Assumption: PSIZE is a power of 2. */ +#define EVAL(p) (unsigned char **) \ + ((unsigned char *)0 + \ + (((unsigned char *)p + PSIZE - 1 - (unsigned char *) 0) & ~(PSIZE - 1))) +#endif /*HAVE_MERGESORT*/ + +/* + * Arguments are as for qsort. + */ +int +yasm__mergesort(void *base, size_t nmemb, size_t size, + int (*cmp)(const void *, const void *)) +{ +#ifdef HAVE_MERGESORT + return mergesort(base, nmemb, size, cmp); +#else + size_t i; + int sense; + int big, iflag; + unsigned char *f1, *f2, *t, *b, *tp2, *q, *l1, *l2; + unsigned char *list2, *list1, *p2, *p, *last, **p1; + + if (size < PSIZE / 2) { /* Pointers must fit into 2 * size. */ +#ifdef EINVAL + errno = EINVAL; +#endif + return (-1); + } + + if (nmemb == 0) + return (0); + + /* + * XXX + * Stupid subtraction for the Cray. + */ + iflag = 0; + if (!(size % ISIZE) && !(((char *)base - (char *)0) % ISIZE)) + iflag = 1; + + if ((list2 = yasm_xmalloc(nmemb * size + PSIZE)) == NULL) + return (-1); + + list1 = base; + setup(list1, list2, nmemb, size, cmp); + last = list2 + nmemb * size; + i = 0; + big = 0; + while (*EVAL(list2) != last) { + l2 = list1; + p1 = EVAL(list1); + for (tp2 = p2 = list2; p2 != last; p1 = EVAL(l2)) { + p2 = *EVAL(p2); + f1 = l2; + f2 = l1 = list1 + (p2 - list2); + if (p2 != last) + p2 = *EVAL(p2); + l2 = list1 + (p2 - list2); + while (f1 < l1 && f2 < l2) { + if ((*cmp)(f1, f2) <= 0) { + q = f2; + b = f1, t = l1; + sense = -1; + } else { + q = f1; + b = f2, t = l2; + sense = 0; + } + if (!big) { /* here i = 0 */ + while ((b += size) < t && cmp(q, b) >sense) + if (++i == 6) { + big = 1; + goto EXPONENTIAL; + } + } else { +EXPONENTIAL: for (i = size; ; i <<= 1) + if ((p = (b + i)) >= t) { + if ((p = t - size) > b && + (*cmp)(q, p) <= sense) + t = p; + else + b = p; + break; + } else if ((*cmp)(q, p) <= sense) { + t = p; + if (i == size) + big = 0; + goto FASTCASE; + } else + b = p; + while (t > b+size) { + i = (((t - b) / size) >> 1) * size; + if ((*cmp)(q, p = b + i) <= sense) + t = p; + else + b = p; + } + goto COPY; +FASTCASE: while (i > size) + if ((*cmp)(q, + p = b + (i >>= 1)) <= sense) + t = p; + else + b = p; +COPY: b = t; + } + i = size; + if (q == f1) { + if (iflag) { + ICOPY_LIST(f2, tp2, b); + ICOPY_ELT(f1, tp2, i); + } else { + CCOPY_LIST(f2, tp2, b); + CCOPY_ELT(f1, tp2, i); + } + } else { + if (iflag) { + ICOPY_LIST(f1, tp2, b); + ICOPY_ELT(f2, tp2, i); + } else { + CCOPY_LIST(f1, tp2, b); + CCOPY_ELT(f2, tp2, i); + } + } + } + if (f2 < l2) { + if (iflag) + ICOPY_LIST(f2, tp2, l2); + else + CCOPY_LIST(f2, tp2, l2); + } else if (f1 < l1) { + if (iflag) + ICOPY_LIST(f1, tp2, l1); + else + CCOPY_LIST(f1, tp2, l1); + } + *p1 = l2; + } + tp2 = list1; /* swap list1, list2 */ + list1 = list2; + list2 = tp2; + last = list2 + nmemb*size; + } + if (base == list2) { + memmove(list2, list1, nmemb*size); + list2 = list1; + } + yasm_xfree(list2); + return (0); +#endif /*HAVE_MERGESORT*/ +} + +#ifndef HAVE_MERGESORT + +#define swap(a, b) { \ + s = b; \ + i = size; \ + do { \ + tmp = *a; *a++ = *s; *s++ = tmp; \ + } while (--i); \ + a -= size; \ + } +#define reverse(bot, top) { \ + s = top; \ + do { \ + i = size; \ + do { \ + tmp = *bot; *bot++ = *s; *s++ = tmp; \ + } while (--i); \ + s -= size2; \ + } while(bot < s); \ +} + +/* + * Optional hybrid natural/pairwise first pass. Eats up list1 in runs of + * increasing order, list2 in a corresponding linked list. Checks for runs + * when THRESHOLD/2 pairs compare with same sense. (Only used when NATURAL + * is defined. Otherwise simple pairwise merging is used.) + */ +void +setup(unsigned char *list1, unsigned char *list2, size_t n, size_t size, + int (*cmp)(const void *, const void *)) +{ + size_t i; + unsigned int tmp; + int length, sense; + size_t size2; + unsigned char *f1, *f2, *s, *l2, *last, *p2; + + size2 = size*2; + if (n <= 5) { + insertionsort(list1, n, size, cmp); + *EVAL(list2) = (unsigned char*) list2 + n*size; + return; + } + /* + * Avoid running pointers out of bounds; limit n to evens + * for simplicity. + */ + i = 4 + (n & 1); + insertionsort(list1 + (n - i) * size, i, size, cmp); + last = list1 + size * (n - i); + *EVAL(list2 + (last - list1)) = list2 + n * size; + +#ifdef NATURAL + p2 = list2; + f1 = list1; + sense = (cmp(f1, f1 + size) > 0); + for (; f1 < last; sense = !sense) { + length = 2; + /* Find pairs with same sense. */ + for (f2 = f1 + size2; f2 < last; f2 += size2) { + if ((cmp(f2, f2+ size) > 0) != sense) + break; + length += 2; + } + if (length < THRESHOLD) { /* Pairwise merge */ + do { + p2 = *EVAL(p2) = f1 + size2 - list1 + list2; + if (sense > 0) + swap (f1, f1 + size); + } while ((f1 += size2) < f2); + } else { /* Natural merge */ + l2 = f2; + for (f2 = f1 + size2; f2 < l2; f2 += size2) { + if ((cmp(f2-size, f2) > 0) != sense) { + p2 = *EVAL(p2) = f2 - list1 + list2; + if (sense > 0) + reverse(f1, f2-size); + f1 = f2; + } + } + if (sense > 0) + reverse (f1, f2-size); + f1 = f2; + if (f2 < last || cmp(f2 - size, f2) > 0) + p2 = *EVAL(p2) = f2 - list1 + list2; + else + p2 = *EVAL(p2) = list2 + n*size; + } + } +#else /* pairwise merge only. */ + for (f1 = list1, p2 = list2; f1 < last; f1 += size2) { + p2 = *EVAL(p2) = p2 + size2; + if (cmp (f1, f1 + size) > 0) + swap(f1, f1 + size); + } +#endif /* NATURAL */ +} + +/* + * This is to avoid out-of-bounds addresses in sorting the + * last 4 elements. + */ +static void +insertionsort(unsigned char *a, size_t n, size_t size, + int (*cmp)(const void *, const void *)) +{ + unsigned char *ai, *s, *t, *u, tmp; + size_t i; + + for (ai = a+size; --n >= 1; ai += size) + for (t = ai; t > a; t -= size) { + u = t - size; + if (cmp(u, t) <= 0) + break; + swap(u, t); + } +} +#endif /*HAVE_MERGESORT*/ diff --git a/third-party/yasm/yasm-1.3.0/libyasm/module.h b/third-party/yasm/yasm-1.3.0/libyasm/module.h new file mode 100644 index 0000000000..220017deec --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/module.h @@ -0,0 +1,82 @@ +/* + * YASM module loader header file + * + * Copyright (C) 2002-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + */ +#ifndef YASM_MODULE_H +#define YASM_MODULE_H + +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +typedef enum yasm_module_type { + YASM_MODULE_ARCH = 0, + YASM_MODULE_DBGFMT, + YASM_MODULE_OBJFMT, + YASM_MODULE_LISTFMT, + YASM_MODULE_PARSER, + YASM_MODULE_PREPROC +} yasm_module_type; + +YASM_LIB_DECL +/*@dependent@*/ /*@null@*/ void *yasm_load_module + (yasm_module_type type, const char *keyword); + +#define yasm_load_arch(keyword) \ + yasm_load_module(YASM_MODULE_ARCH, keyword) +#define yasm_load_dbgfmt(keyword) \ + yasm_load_module(YASM_MODULE_DBGFMT, keyword) +#define yasm_load_objfmt(keyword) \ + yasm_load_module(YASM_MODULE_OBJFMT, keyword) +#define yasm_load_listfmt(keyword) \ + yasm_load_module(YASM_MODULE_LISTFMT, keyword) +#define yasm_load_parser(keyword) \ + yasm_load_module(YASM_MODULE_PARSER, keyword) +#define yasm_load_preproc(keyword) \ + yasm_load_module(YASM_MODULE_PREPROC, keyword) + +YASM_LIB_DECL +void yasm_list_modules + (yasm_module_type type, + void (*printfunc) (const char *name, const char *keyword)); + +#define yasm_list_arch(func) \ + yasm_list_modules(YASM_MODULE_ARCH, func) +#define yasm_list_dbgfmt(func) \ + yasm_list_modules(YASM_MODULE_DBGFMT, func) +#define yasm_list_objfmt(func) \ + yasm_list_modules(YASM_MODULE_OBJFMT, func) +#define yasm_list_listfmt(func) \ + yasm_list_modules(YASM_MODULE_LISTFMT, func) +#define yasm_list_parser(func) \ + yasm_list_modules(YASM_MODULE_PARSER, func) +#define yasm_list_preproc(func) \ + yasm_list_modules(YASM_MODULE_PREPROC, func) + +YASM_LIB_DECL +void yasm_register_module(yasm_module_type type, const char *keyword, + void *data); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/module.in b/third-party/yasm/yasm-1.3.0/libyasm/module.in new file mode 100644 index 0000000000..a18778b684 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/module.in @@ -0,0 +1,179 @@ +/* + * YASM module loader + * + * Copyright (C) 2004-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + + +typedef struct module { + const char *keyword; /* module keyword */ + void *data; /* associated data */ +} module; + +EXTERN_LIST + +static module arch_modules[] = { +MODULES_arch_ +}; + +static module dbgfmt_modules[] = { +MODULES_dbgfmt_ +}; + +static module objfmt_modules[] = { +MODULES_objfmt_ +}; + +static module listfmt_modules[] = { +MODULES_listfmt_ +}; + +static module parser_modules[] = { +MODULES_parser_ +}; + +static module preproc_modules[] = { +MODULES_preproc_ +}; + +static struct { + module *m; + size_t n; +} module_types[] = { + {arch_modules, sizeof(arch_modules)/sizeof(module)}, + {dbgfmt_modules, sizeof(dbgfmt_modules)/sizeof(module)}, + {objfmt_modules, sizeof(objfmt_modules)/sizeof(module)}, + {listfmt_modules, sizeof(listfmt_modules)/sizeof(module)}, + {parser_modules, sizeof(parser_modules)/sizeof(module)}, + {preproc_modules, sizeof(preproc_modules)/sizeof(module)}, +}; + +typedef struct loaded_module { + yasm_module_type type; /* module type */ + const char *keyword; /* module keyword */ + void *data; /* associated data */ +} loaded_module; + +static loaded_module *loaded_modules = NULL; +static size_t num_loaded_modules = 0; + +void * +yasm_load_module(yasm_module_type type, const char *keyword) +{ + size_t i; + module *modules; + size_t n; + + /* Look for the module/symbol, first in loaded modules */ + if (loaded_modules) { + for (i=0; iname, arch->keyword); + break; + case YASM_MODULE_DBGFMT: + dbgfmt = data; + printfunc(dbgfmt->name, dbgfmt->keyword); + break; + case YASM_MODULE_OBJFMT: + objfmt = data; + printfunc(objfmt->name, objfmt->keyword); + break; + case YASM_MODULE_LISTFMT: + listfmt = data; + printfunc(listfmt->name, listfmt->keyword); + break; + case YASM_MODULE_PARSER: + parser = data; + printfunc(parser->name, parser->keyword); + break; + case YASM_MODULE_PREPROC: + preproc = data; + printfunc(preproc->name, preproc->keyword); + break; + } +} + +void +yasm_list_modules(yasm_module_type type, + void (*printfunc) (const char *name, const char *keyword)) +{ + size_t i; + module *modules; + size_t n;; + + /* Go through available list, and try to load each one */ + if (loaded_modules) { + for (i=0; icreate(object) + +#define yasm_objfmt_output(object, f, all_syms, ews) \ + ((yasm_objfmt_base *)((object)->objfmt))->module->output \ + (object, f, all_syms, ews) +#define yasm_objfmt_destroy(objfmt) \ + ((yasm_objfmt_base *)objfmt)->module->destroy(objfmt) +#define yasm_objfmt_section_switch(object, vpms, oe_vpms, line) \ + ((yasm_objfmt_base *)((object)->objfmt))->module->section_switch \ + (object, vpms, oe_vpms, line) +#define yasm_objfmt_add_default_section(object) \ + ((yasm_objfmt_base *)((object)->objfmt))->module->add_default_section \ + (object) +#define yasm_objfmt_init_new_section(section, line) \ + ((yasm_objfmt_base *)((object)->objfmt))->module->init_new_section \ + (section, line) +#define yasm_objfmt_get_special_sym(object, name, parser) \ + ((yasm_objfmt_base *)((object)->objfmt))->module->get_special_sym \ + (object, name, parser) + +#endif + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/parser.h b/third-party/yasm/yasm-1.3.0/libyasm/parser.h new file mode 100644 index 0000000000..93d4d33232 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/parser.h @@ -0,0 +1,67 @@ +/** + * \file libyasm/parser.h + * \brief YASM parser module interface. + * + * \license + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_PARSER_H +#define YASM_PARSER_H + +/** YASM parser module interface. The "front end" of the assembler. */ +typedef struct yasm_parser_module { + /** One-line description of the parser */ + const char *name; + + /** Keyword used to select parser on the command line */ + const char *keyword; + + /** NULL-terminated list of preprocessors that are valid to use with this + * parser. The raw preprocessor (raw_preproc) should always be in this + * list so it's always possible to have no preprocessing done. + */ + const char **preproc_keywords; + + /** Default preprocessor. */ + const char *default_preproc_keyword; + + /** NULL-terminated list of standard macro lookups. NULL if none. */ + const yasm_stdmac *stdmacs; + + /** Parse a source file into an object. + * \param object object to parse into (already created) + * \param pp preprocessor + * \param save_input nonzero if the parser should save the original + * lines of source into the object's linemap (via + * yasm_linemap_add_data()). + * \param errwarns error/warning set + * \note Parse errors and warnings are stored into errwarns. + */ + void (*do_parse) + (yasm_object *object, yasm_preproc *pp, int save_input, + yasm_linemap *linemap, yasm_errwarns *errwarns); +} yasm_parser_module; + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/phash.c b/third-party/yasm/yasm-1.3.0/libyasm/phash.c new file mode 100644 index 0000000000..cef8c781bb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/phash.c @@ -0,0 +1,268 @@ +/* Modified for use with yasm by Peter Johnson. */ +#include "util.h" + +/* +-------------------------------------------------------------------- +lookupa.c, by Bob Jenkins, December 1996. Same as lookup2.c +Use this code however you wish. Public Domain. No warranty. +Source is http://burtleburtle.net/bob/c/lookupa.c +-------------------------------------------------------------------- +*/ +#include "phash.h" + +#define ub4 unsigned long + +#define hashsize(n) ((ub4)1<<(n)) +#define hashmask(n) (hashsize(n)-1) + +/* +-------------------------------------------------------------------- +mix -- mix 3 32-bit values reversibly. +For every delta with one or two bit set, and the deltas of all three + high bits or all three low bits, whether the original value of a,b,c + is almost all zero or is uniformly distributed, +* If mix() is run forward or backward, at least 32 bits in a,b,c + have at least 1/4 probability of changing. +* If mix() is run forward, every bit of c will change between 1/3 and + 2/3 of the time. (Well, 22/100 and 78/100 for some 2-bit deltas.) +mix() was built out of 36 single-cycle latency instructions in a + structure that could supported 2x parallelism, like so: + a -= b; + a -= c; x = (c>>13); + b -= c; a ^= x; + b -= a; x = (a<<8); + c -= a; b ^= x; + c -= b; x = (b>>13); + ... + Unfortunately, superscalar Pentiums and Sparcs can't take advantage + of that parallelism. They've also turned some of those single-cycle + latency instructions into multi-cycle latency instructions. Still, + this is the fastest good hash I could find. There were about 2^^68 + to choose from. I only looked at a billion or so. +-------------------------------------------------------------------- +*/ +#define mix(a,b,c) \ +{ \ + a -= b; a -= c; a ^= (c>>13); \ + a &= 0xffffffff; \ + b -= c; b -= a; b ^= (a<<8); \ + b &= 0xffffffff; \ + c -= a; c -= b; c ^= (b>>13); \ + c &= 0xffffffff; \ + a -= b; a -= c; a ^= (c>>12); \ + a &= 0xffffffff; \ + b -= c; b -= a; b ^= (a<<16); \ + b &= 0xffffffff; \ + c -= a; c -= b; c ^= (b>>5); \ + c &= 0xffffffff; \ + a -= b; a -= c; a ^= (c>>3); \ + a &= 0xffffffff; \ + b -= c; b -= a; b ^= (a<<10); \ + b &= 0xffffffff; \ + c -= a; c -= b; c ^= (b>>15); \ + c &= 0xffffffff; \ +} + +/* +-------------------------------------------------------------------- +lookup() -- hash a variable-length key into a 32-bit value + k : the key (the unaligned variable-length array of bytes) + len : the length of the key, counting by bytes + level : can be any 4-byte value +Returns a 32-bit value. Every bit of the key affects every bit of +the return value. Every 1-bit and 2-bit delta achieves avalanche. +About 6len+35 instructions. + +The best hash table sizes are powers of 2. There is no need to do +mod a prime (mod is sooo slow!). If you need less than 32 bits, +use a bitmask. For example, if you need only 10 bits, do + h = (h & hashmask(10)); +In which case, the hash table should have hashsize(10) elements. + +If you are hashing n strings (ub1 **)k, do it like this: + for (i=0, h=0; i= 12) + { + a += (k[0] +((ub4)k[1]<<8) +((ub4)k[2]<<16) +((ub4)k[3]<<24)); + a &= 0xffffffff; + b += (k[4] +((ub4)k[5]<<8) +((ub4)k[6]<<16) +((ub4)k[7]<<24)); + b &= 0xffffffff; + c += (k[8] +((ub4)k[9]<<8) +((ub4)k[10]<<16)+((ub4)k[11]<<24)); + c &= 0xffffffff; + mix(a,b,c); + k += 12; len -= 12; + } + + /*------------------------------------- handle the last 11 bytes */ + c += (ub4)length; + switch(len) /* all the case statements fall through */ + { + case 11: c+=((ub4)k[10]<<24); + case 10: c+=((ub4)k[9]<<16); + case 9 : c+=((ub4)k[8]<<8); + c &= 0xffffffff; + /* the first byte of c is reserved for the length */ + case 8 : b+=((ub4)k[7]<<24); + case 7 : b+=((ub4)k[6]<<16); + case 6 : b+=((ub4)k[5]<<8); + case 5 : b+=k[4]; + b &= 0xffffffff; + case 4 : a+=((ub4)k[3]<<24); + case 3 : a+=((ub4)k[2]<<16); + case 2 : a+=((ub4)k[1]<<8); + case 1 : a+=k[0]; + a &= 0xffffffff; + /* case 0: nothing left to add */ + } + mix(a,b,c); + /*-------------------------------------------- report the result */ + return c; +} + + +/* +-------------------------------------------------------------------- +mixc -- mixc 8 4-bit values as quickly and thoroughly as possible. +Repeating mix() three times achieves avalanche. +Repeating mix() four times eliminates all funnels and all + characteristics stronger than 2^{-11}. +-------------------------------------------------------------------- +*/ +#define mixc(a,b,c,d,e,f,g,h) \ +{ \ + a^=b<<11; d+=a; b+=c; \ + b^=c>>2; e+=b; c+=d; \ + c^=d<<8; f+=c; d+=e; \ + d^=e>>16; g+=d; e+=f; \ + e^=f<<10; h+=e; f+=g; \ + f^=g>>4; a+=f; g+=h; \ + g^=h<<8; b+=g; h+=a; \ + h^=a>>9; c+=h; a+=b; \ +} + +/* +-------------------------------------------------------------------- +checksum() -- hash a variable-length key into a 256-bit value + k : the key (the unaligned variable-length array of bytes) + len : the length of the key, counting by bytes + state : an array of CHECKSTATE 4-byte values (256 bits) +The state is the checksum. Every bit of the key affects every bit of +the state. There are no funnels. About 112+6.875len instructions. + +If you are hashing n strings (ub1 **)k, do it like this: + for (i=0; i<8; ++i) state[i] = 0x9e3779b9; + for (i=0, h=0; i= 32) + { + a += (k[0] +(k[1]<<8) +(k[2]<<16) +(k[3]<<24)); + b += (k[4] +(k[5]<<8) +(k[6]<<16) +(k[7]<<24)); + c += (k[8] +(k[9]<<8) +(k[10]<<16)+(k[11]<<24)); + d += (k[12]+(k[13]<<8)+(k[14]<<16)+(k[15]<<24)); + e += (k[16]+(k[17]<<8)+(k[18]<<16)+(k[19]<<24)); + f += (k[20]+(k[21]<<8)+(k[22]<<16)+(k[23]<<24)); + g += (k[24]+(k[25]<<8)+(k[26]<<16)+(k[27]<<24)); + h += (k[28]+(k[29]<<8)+(k[30]<<16)+(k[31]<<24)); + mixc(a,b,c,d,e,f,g,h); + mixc(a,b,c,d,e,f,g,h); + mixc(a,b,c,d,e,f,g,h); + mixc(a,b,c,d,e,f,g,h); + k += 32; len -= 32; + } + + /*------------------------------------- handle the last 31 bytes */ + h += (ub4)length; + switch(len) + { + case 31: h+=(k[30]<<24); + case 30: h+=(k[29]<<16); + case 29: h+=(k[28]<<8); + case 28: g+=(k[27]<<24); + case 27: g+=(k[26]<<16); + case 26: g+=(k[25]<<8); + case 25: g+=k[24]; + case 24: f+=(k[23]<<24); + case 23: f+=(k[22]<<16); + case 22: f+=(k[21]<<8); + case 21: f+=k[20]; + case 20: e+=(k[19]<<24); + case 19: e+=(k[18]<<16); + case 18: e+=(k[17]<<8); + case 17: e+=k[16]; + case 16: d+=(k[15]<<24); + case 15: d+=(k[14]<<16); + case 14: d+=(k[13]<<8); + case 13: d+=k[12]; + case 12: c+=(k[11]<<24); + case 11: c+=(k[10]<<16); + case 10: c+=(k[9]<<8); + case 9 : c+=k[8]; + case 8 : b+=(k[7]<<24); + case 7 : b+=(k[6]<<16); + case 6 : b+=(k[5]<<8); + case 5 : b+=k[4]; + case 4 : a+=(k[3]<<24); + case 3 : a+=(k[2]<<16); + case 2 : a+=(k[1]<<8); + case 1 : a+=k[0]; + } + mixc(a,b,c,d,e,f,g,h); + mixc(a,b,c,d,e,f,g,h); + mixc(a,b,c,d,e,f,g,h); + mixc(a,b,c,d,e,f,g,h); + + /*-------------------------------------------- report the result */ + state[0]=a; state[1]=b; state[2]=c; state[3]=d; + state[4]=e; state[5]=f; state[6]=g; state[7]=h; +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/phash.h b/third-party/yasm/yasm-1.3.0/libyasm/phash.h new file mode 100644 index 0000000000..2273a5df20 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/phash.h @@ -0,0 +1,19 @@ +/* Modified for use with yasm by Peter Johnson. */ +/* +------------------------------------------------------------------------------ +By Bob Jenkins, September 1996. +lookupa.h, a hash function for table lookup, same function as lookup.c. +Use this code in any way you wish. Public Domain. It has no warranty. +Source is http://burtleburtle.net/bob/c/lookupa.h +------------------------------------------------------------------------------ +*/ + +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +YASM_LIB_DECL +unsigned long phash_lookup(const char *k, size_t length, + unsigned long level); +YASM_LIB_DECL +void phash_checksum(const char *k, size_t length, unsigned long *state); diff --git a/third-party/yasm/yasm-1.3.0/libyasm/preproc.h b/third-party/yasm/yasm-1.3.0/libyasm/preproc.h new file mode 100644 index 0000000000..751b19e4b0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/preproc.h @@ -0,0 +1,210 @@ +/** + * \file libyasm/preproc.h + * \brief YASM preprocessor module interface. + * + * \license + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_PREPROC_H +#define YASM_PREPROC_H + +#ifndef YASM_DOXYGEN +/** Base #yasm_preproc structure. Must be present as the first element in any + * #yasm_preproc implementation. + */ +typedef struct yasm_preproc_base { + /** #yasm_preproc_module implementation for this preprocessor. */ + const struct yasm_preproc_module *module; +} yasm_preproc_base; +#endif + +/** YASM preprocesor module interface. */ +typedef struct yasm_preproc_module { + /** One-line description of the preprocessor. */ + const char *name; + + /** Keyword used to select preprocessor on the command line. */ + const char *keyword; + + /** Create preprocessor. + * Module-level implementation of yasm_preproc_create(). + * Call yasm_preproc_create() instead of calling this function. + * + * \param in_filename initial starting filename, or "-" to read from + * stdin + * \param symtab symbol table (may be NULL if none) + * \param lm line mapping repository + * \param errwarns error/warnning set. + * \return New preprocessor. + * + * \note Any preprocessor errors and warnings are stored into errwarns. + */ + /*@only@*/ yasm_preproc * (*create) (const char *in_filename, + yasm_symtab *symtab, + yasm_linemap *lm, + yasm_errwarns *errwarns); + + /** Module-level implementation of yasm_preproc_destroy(). + * Call yasm_preproc_destroy() instead of calling this function. + */ + void (*destroy) (/*@only@*/ yasm_preproc *preproc); + + /** Module-level implementation of yasm_preproc_get_line(). + * Call yasm_preproc_get_line() instead of calling this function. + */ + char * (*get_line) (yasm_preproc *preproc); + + /** Module-level implementation of yasm_preproc_get_included_file(). + * Call yasm_preproc_get_included_file() instead of calling this function. + */ + size_t (*get_included_file) (yasm_preproc *preproc, /*@out@*/ char *buf, + size_t max_size); + + /** Module-level implementation of yasm_preproc_add_include_file(). + * Call yasm_preproc_add_include_file() instead of calling this function. + */ + void (*add_include_file) (yasm_preproc *preproc, const char *filename); + + /** Module-level implementation of yasm_preproc_predefine_macro(). + * Call yasm_preproc_predefine_macro() instead of calling this function. + */ + void (*predefine_macro) (yasm_preproc *preproc, const char *macronameval); + + /** Module-level implementation of yasm_preproc_undefine_macro(). + * Call yasm_preproc_undefine_macro() instead of calling this function. + */ + void (*undefine_macro) (yasm_preproc *preproc, const char *macroname); + + /** Module-level implementation of yasm_preproc_builtin_define(). + * Call yasm_preproc_builtin_define() instead of calling this function. + */ + void (*define_builtin) (yasm_preproc *preproc, const char *macronameval); + + /** Module-level implementation of yasm_preproc_add_standard(). + * Call yasm_preproc_add_standard() instead of calling this function. + */ + void (*add_standard) (yasm_preproc *preproc, const char **macros); +} yasm_preproc_module; + +/** Initialize preprocessor. + * The preprocessor needs access to the object format module to find out + * any output format specific macros. + * \param module preprocessor module + * \param in_filename initial starting filename, or "-" to read from stdin + * \param symtab symbol table (may be NULL if none) + * \param lm line mapping repository + * \param errwarns error/warning set + * \return New preprocessor. + * \note Errors/warnings are stored into errwarns. + */ +/*@only@*/ yasm_preproc *yasm_preproc_create + (yasm_preproc_module *module, const char *in_filename, + yasm_symtab *symtab, yasm_linemap *lm, yasm_errwarns *errwarns); + +/** Cleans up any allocated preproc memory. + * \param preproc preprocessor + */ +void yasm_preproc_destroy(/*@only@*/ yasm_preproc *preproc); + +/** Gets a single line of preprocessed source code. + * \param preproc preprocessor + * \return Allocated line of code, without the trailing \n. + */ +char *yasm_preproc_get_line(yasm_preproc *preproc); + +/** Get the next filename included by the source code. + * \param preproc preprocessor + * \param buf destination buffer for filename + * \param max_size maximum number of bytes that can be returned in buf + * \return Actual number of bytes returned in buf. + */ +size_t yasm_preproc_get_included_file(yasm_preproc *preproc, + /*@out@*/ char *buf, size_t max_size); + +/** Pre-include a file. + * \param preproc preprocessor + * \param filename filename + */ +void yasm_preproc_add_include_file(yasm_preproc *preproc, + const char *filename); + +/** Pre-define a macro. + * \param preproc preprocessor + * \param macronameval "name=value" string + */ +void yasm_preproc_predefine_macro(yasm_preproc *preproc, + const char *macronameval); + +/** Un-define a macro. + * \param preproc preprocessor + * \param macroname macro name + */ +void yasm_preproc_undefine_macro(yasm_preproc *preproc, const char *macroname); + +/** Define a builtin macro, preprocessed before the "standard" macros. + * \param preproc preprocessor + * \param macronameval "name=value" string + */ +void yasm_preproc_define_builtin(yasm_preproc *preproc, + const char *macronameval); + +/** Define additional standard macros, preprocessed after the builtins but + * prior to any user-defined macros. + * \param preproc preprocessor + * \param macros NULL-terminated array of macro strings + */ +void yasm_preproc_add_standard(yasm_preproc *preproc, + const char **macros); + +#ifndef YASM_DOXYGEN + +/* Inline macro implementations for preproc functions */ + +#define yasm_preproc_create(module, in_filename, symtab, lm, ews) \ + module->create(in_filename, symtab, lm, ews) + +#define yasm_preproc_destroy(preproc) \ + ((yasm_preproc_base *)preproc)->module->destroy(preproc) +#define yasm_preproc_get_line(preproc) \ + ((yasm_preproc_base *)preproc)->module->get_line(preproc) +#define yasm_preproc_get_included_file(preproc, buf, max_size) \ + ((yasm_preproc_base *)preproc)->module->get_included_file(preproc, buf, max_size) +#define yasm_preproc_add_include_file(preproc, filename) \ + ((yasm_preproc_base *)preproc)->module->add_include_file(preproc, filename) +#define yasm_preproc_predefine_macro(preproc, macronameval) \ + ((yasm_preproc_base *)preproc)->module->predefine_macro(preproc, \ + macronameval) +#define yasm_preproc_undefine_macro(preproc, macroname) \ + ((yasm_preproc_base *)preproc)->module->undefine_macro(preproc, macroname) +#define yasm_preproc_define_builtin(preproc, macronameval) \ + ((yasm_preproc_base *)preproc)->module->define_builtin(preproc, \ + macronameval) +#define yasm_preproc_add_standard(preproc, macros) \ + ((yasm_preproc_base *)preproc)->module->add_standard(preproc, \ + macros) + +#endif + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/section.c b/third-party/yasm/yasm-1.3.0/libyasm/section.c new file mode 100644 index 0000000000..ba582bfa65 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/section.c @@ -0,0 +1,1581 @@ +/* + * Section utility functions + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 "util.h" + +#include + +#include "libyasm-stdint.h" +#include "coretype.h" +#include "hamt.h" +#include "valparam.h" +#include "assocdat.h" + +#include "linemap.h" +#include "errwarn.h" +#include "intnum.h" +#include "expr.h" +#include "value.h" +#include "symrec.h" + +#include "bytecode.h" +#include "arch.h" +#include "section.h" + +#include "dbgfmt.h" +#include "objfmt.h" + +#include "inttree.h" + + +struct yasm_section { + /*@reldef@*/ STAILQ_ENTRY(yasm_section) link; + + /*@dependent@*/ yasm_object *object; /* Pointer to parent object */ + + /*@owned@*/ char *name; /* strdup()'ed name (given by user) */ + + /* associated data; NULL if none */ + /*@null@*/ /*@only@*/ yasm__assoc_data *assoc_data; + + unsigned long align; /* Section alignment */ + + unsigned long opt_flags; /* storage for optimizer flags */ + + int code; /* section contains code (instructions) */ + int res_only; /* allow only resb family of bytecodes? */ + int def; /* "default" section, e.g. not specified by + using section directive */ + + /* the bytecodes for the section's contents */ + /*@reldef@*/ STAILQ_HEAD(yasm_bytecodehead, yasm_bytecode) bcs; + + /* the relocations for the section */ + /*@reldef@*/ STAILQ_HEAD(yasm_relochead, yasm_reloc) relocs; + + void (*destroy_reloc) (/*@only@*/ void *reloc); +}; + +static void yasm_section_destroy(/*@only@*/ yasm_section *sect); + +/* Wrapper around directive for HAMT insertion */ +typedef struct yasm_directive_wrap { + const yasm_directive *directive; +} yasm_directive_wrap; + +/* + * Standard "builtin" object directives. + */ + +static void +dir_extern(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_valparam *vp = yasm_vps_first(valparams); + yasm_symrec *sym; + sym = yasm_symtab_declare(object->symtab, yasm_vp_id(vp), YASM_SYM_EXTERN, + line); + if (objext_valparams) { + yasm_valparamhead *vps = yasm_vps_create(); + *vps = *objext_valparams; /* structure copy */ + yasm_vps_initialize(objext_valparams); /* don't double-free */ + yasm_symrec_set_objext_valparams(sym, vps); + } +} + +static void +dir_global(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_valparam *vp = yasm_vps_first(valparams); + yasm_symrec *sym; + sym = yasm_symtab_declare(object->symtab, yasm_vp_id(vp), YASM_SYM_GLOBAL, + line); + if (objext_valparams) { + yasm_valparamhead *vps = yasm_vps_create(); + *vps = *objext_valparams; /* structure copy */ + yasm_vps_initialize(objext_valparams); /* don't double-free */ + yasm_symrec_set_objext_valparams(sym, vps); + } +} + +static void +dir_common(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_valparam *vp = yasm_vps_first(valparams); + yasm_valparam *vp2 = yasm_vps_next(vp); + yasm_expr *size = yasm_vp_expr(vp2, object->symtab, line); + yasm_symrec *sym; + + if (!size) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("no size specified in %s declaration"), "COMMON"); + return; + } + sym = yasm_symtab_declare(object->symtab, yasm_vp_id(vp), YASM_SYM_COMMON, + line); + yasm_symrec_set_common_size(sym, size); + if (objext_valparams) { + yasm_valparamhead *vps = yasm_vps_create(); + *vps = *objext_valparams; /* structure copy */ + yasm_vps_initialize(objext_valparams); /* don't double-free */ + yasm_symrec_set_objext_valparams(sym, vps); + } +} + +static void +dir_section(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_section *new_section = + yasm_objfmt_section_switch(object, valparams, objext_valparams, line); + if (new_section) + object->cur_section = new_section; + else + yasm_error_set(YASM_ERROR_SYNTAX, + N_("invalid argument to directive `%s'"), "SECTION"); +} + +static const yasm_directive object_directives[] = { + { ".extern", "gas", dir_extern, YASM_DIR_ID_REQUIRED }, + { ".global", "gas", dir_global, YASM_DIR_ID_REQUIRED }, + { ".globl", "gas", dir_global, YASM_DIR_ID_REQUIRED }, + { "extern", "nasm", dir_extern, YASM_DIR_ID_REQUIRED }, + { "global", "nasm", dir_global, YASM_DIR_ID_REQUIRED }, + { "common", "nasm", dir_common, YASM_DIR_ID_REQUIRED }, + { "section", "nasm", dir_section, YASM_DIR_ARG_REQUIRED }, + { "segment", "nasm", dir_section, YASM_DIR_ARG_REQUIRED }, + { NULL, NULL, NULL, 0 } +}; + +static void +directive_level2_delete(/*@only@*/ void *data) +{ + yasm_xfree(data); +} + +static void +directive_level1_delete(/*@only@*/ void *data) +{ + HAMT_destroy(data, directive_level2_delete); +} + +static void +directives_add(yasm_object *object, /*@null@*/ const yasm_directive *dir) +{ + if (!dir) + return; + + while (dir->name) { + HAMT *level2 = HAMT_search(object->directives, dir->parser); + int replace; + yasm_directive_wrap *wrap = yasm_xmalloc(sizeof(yasm_directive_wrap)); + + if (!level2) { + replace = 0; + level2 = HAMT_insert(object->directives, dir->parser, + HAMT_create(1, yasm_internal_error_), + &replace, directive_level1_delete); + } + replace = 0; + wrap->directive = dir; + HAMT_insert(level2, dir->name, wrap, &replace, + directive_level2_delete); + dir++; + } +} + +/*@-compdestroy@*/ +yasm_object * +yasm_object_create(const char *src_filename, const char *obj_filename, + /*@kept@*/ yasm_arch *arch, + const yasm_objfmt_module *objfmt_module, + const yasm_dbgfmt_module *dbgfmt_module) +{ + yasm_object *object = yasm_xmalloc(sizeof(yasm_object)); + int matched, i; + + object->src_filename = yasm__xstrdup(src_filename); + object->obj_filename = yasm__xstrdup(obj_filename); + + /* No prefix/suffix */ + object->global_prefix = yasm__xstrdup(""); + object->global_suffix = yasm__xstrdup(""); + + /* Create empty symbol table */ + object->symtab = yasm_symtab_create(); + + /* Initialize sections linked list */ + STAILQ_INIT(&object->sections); + + /* Create directives HAMT */ + object->directives = HAMT_create(1, yasm_internal_error_); + + /* Initialize the target architecture */ + object->arch = arch; + + /* Initialize things to NULL in case of error */ + object->dbgfmt = NULL; + + /* Initialize the object format */ + object->objfmt = yasm_objfmt_create(objfmt_module, object); + if (!object->objfmt) { + yasm_error_set(YASM_ERROR_GENERAL, + N_("object format `%s' does not support architecture `%s' machine `%s'"), + objfmt_module->keyword, ((yasm_arch_base *)arch)->module->keyword, + yasm_arch_get_machine(arch)); + goto error; + } + + /* Get a fresh copy of objfmt_module as it may have changed. */ + objfmt_module = ((yasm_objfmt_base *)object->objfmt)->module; + + /* Add an initial "default" section to object */ + object->cur_section = yasm_objfmt_add_default_section(object); + + /* Check to see if the requested debug format is in the allowed list + * for the active object format. + */ + matched = 0; + for (i=0; objfmt_module->dbgfmt_keywords[i]; i++) { + if (yasm__strcasecmp(objfmt_module->dbgfmt_keywords[i], + dbgfmt_module->keyword) == 0) { + matched = 1; + break; + } + } + + if (!matched) { + yasm_error_set(YASM_ERROR_GENERAL, + N_("`%s' is not a valid debug format for object format `%s'"), + dbgfmt_module->keyword, objfmt_module->keyword); + goto error; + } + + /* Initialize the debug format */ + object->dbgfmt = yasm_dbgfmt_create(dbgfmt_module, object); + if (!object->dbgfmt) { + yasm_error_set(YASM_ERROR_GENERAL, + N_("debug format `%s' does not work with object format `%s'"), + dbgfmt_module->keyword, objfmt_module->keyword); + goto error; + } + + /* Add directives to HAMT. Note ordering here determines priority. */ + directives_add(object, + ((yasm_objfmt_base *)object->objfmt)->module->directives); + directives_add(object, + ((yasm_dbgfmt_base *)object->dbgfmt)->module->directives); + directives_add(object, + ((yasm_arch_base *)object->arch)->module->directives); + directives_add(object, object_directives); + + return object; + +error: + yasm_object_destroy(object); + return NULL; +} +/*@=compdestroy@*/ + +/*@-onlytrans@*/ +yasm_section * +yasm_object_get_general(yasm_object *object, const char *name, + unsigned long align, int code, int res_only, + int *isnew, unsigned long line) +{ + yasm_section *s; + yasm_bytecode *bc; + + /* Search through current sections to see if we already have one with + * that name. + */ + STAILQ_FOREACH(s, &object->sections, link) { + if (strcmp(s->name, name) == 0) { + *isnew = 0; + return s; + } + } + + /* No: we have to allocate and create a new one. */ + + /* Okay, the name is valid; now allocate and initialize */ + s = yasm_xcalloc(1, sizeof(yasm_section)); + STAILQ_INSERT_TAIL(&object->sections, s, link); + + s->object = object; + s->name = yasm__xstrdup(name); + s->assoc_data = NULL; + s->align = align; + + /* Initialize bytecodes with one empty bytecode (acts as "prior" for first + * real bytecode in section. + */ + STAILQ_INIT(&s->bcs); + bc = yasm_bc_create_common(NULL, NULL, 0); + bc->section = s; + bc->offset = 0; + STAILQ_INSERT_TAIL(&s->bcs, bc, link); + + /* Initialize relocs */ + STAILQ_INIT(&s->relocs); + s->destroy_reloc = NULL; + + s->code = code; + s->res_only = res_only; + s->def = 0; + + /* Initialize object format specific data */ + yasm_objfmt_init_new_section(s, line); + + *isnew = 1; + return s; +} +/*@=onlytrans@*/ + +int +yasm_object_directive(yasm_object *object, const char *name, + const char *parser, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, + unsigned long line) +{ + HAMT *level2; + yasm_directive_wrap *wrap; + + level2 = HAMT_search(object->directives, parser); + if (!level2) + return 1; + + wrap = HAMT_search(level2, name); + if (!wrap) + return 1; + + yasm_call_directive(wrap->directive, object, valparams, objext_valparams, + line); + return 0; +} + +void +yasm_object_set_source_fn(yasm_object *object, const char *src_filename) +{ + yasm_xfree(object->src_filename); + object->src_filename = yasm__xstrdup(src_filename); +} + +void +yasm_object_set_global_prefix(yasm_object *object, const char *prefix) +{ + yasm_xfree(object->global_prefix); + object->global_prefix = yasm__xstrdup(prefix); +} + +void +yasm_object_set_global_suffix(yasm_object *object, const char *suffix) +{ + yasm_xfree(object->global_suffix); + object->global_suffix = yasm__xstrdup(suffix); +} + +int +yasm_section_is_code(yasm_section *sect) +{ + return sect->code; +} + +unsigned long +yasm_section_get_opt_flags(const yasm_section *sect) +{ + return sect->opt_flags; +} + +void +yasm_section_set_opt_flags(yasm_section *sect, unsigned long opt_flags) +{ + sect->opt_flags = opt_flags; +} + +int +yasm_section_is_default(const yasm_section *sect) +{ + return sect->def; +} + +void +yasm_section_set_default(yasm_section *sect, int def) +{ + sect->def = def; +} + +yasm_object * +yasm_section_get_object(const yasm_section *sect) +{ + return sect->object; +} + +void * +yasm_section_get_data(yasm_section *sect, + const yasm_assoc_data_callback *callback) +{ + return yasm__assoc_data_get(sect->assoc_data, callback); +} + +void +yasm_section_add_data(yasm_section *sect, + const yasm_assoc_data_callback *callback, void *data) +{ + sect->assoc_data = yasm__assoc_data_add(sect->assoc_data, callback, data); +} + +void +yasm_object_destroy(yasm_object *object) +{ + yasm_section *cur, *next; + + /* Delete object format, debug format, and arch. This can be called + * due to an error in yasm_object_create(), so look out for NULLs. + */ + if (object->objfmt) + yasm_objfmt_destroy(object->objfmt); + if (object->dbgfmt) + yasm_dbgfmt_destroy(object->dbgfmt); + + /* Delete sections */ + cur = STAILQ_FIRST(&object->sections); + while (cur) { + next = STAILQ_NEXT(cur, link); + yasm_section_destroy(cur); + cur = next; + } + + /* Delete directives HAMT */ + HAMT_destroy(object->directives, directive_level1_delete); + + /* Delete prefix/suffix */ + yasm_xfree(object->global_prefix); + yasm_xfree(object->global_suffix); + + /* Delete associated filenames */ + yasm_xfree(object->src_filename); + yasm_xfree(object->obj_filename); + + /* Delete symbol table */ + yasm_symtab_destroy(object->symtab); + + /* Delete architecture */ + if (object->arch) + yasm_arch_destroy(object->arch); + + yasm_xfree(object); +} + +void +yasm_object_print(const yasm_object *object, FILE *f, int indent_level) +{ + yasm_section *cur; + + /* Print symbol table */ + fprintf(f, "%*sSymbol Table:\n", indent_level, ""); + yasm_symtab_print(object->symtab, f, indent_level+1); + + /* Print sections and bytecodes */ + STAILQ_FOREACH(cur, &object->sections, link) { + fprintf(f, "%*sSection:\n", indent_level, ""); + yasm_section_print(cur, f, indent_level+1, 1); + } +} + +void +yasm_object_finalize(yasm_object *object, yasm_errwarns *errwarns) +{ + yasm_section *sect; + + /* Iterate through sections */ + STAILQ_FOREACH(sect, &object->sections, link) { + yasm_bytecode *cur = STAILQ_FIRST(§->bcs); + yasm_bytecode *prev; + + /* Skip our locally created empty bytecode first. */ + prev = cur; + cur = STAILQ_NEXT(cur, link); + + /* Iterate through the remainder, if any. */ + while (cur) { + /* Finalize */ + yasm_bc_finalize(cur, prev); + yasm_errwarn_propagate(errwarns, cur->line); + prev = cur; + cur = STAILQ_NEXT(cur, link); + } + } +} + +int +yasm_object_sections_traverse(yasm_object *object, /*@null@*/ void *d, + int (*func) (yasm_section *sect, + /*@null@*/ void *d)) +{ + yasm_section *cur; + + STAILQ_FOREACH(cur, &object->sections, link) { + int retval = func(cur, d); + if (retval != 0) + return retval; + } + return 0; +} + +/*@-onlytrans@*/ +yasm_section * +yasm_object_find_general(yasm_object *object, const char *name) +{ + yasm_section *cur; + + STAILQ_FOREACH(cur, &object->sections, link) { + if (strcmp(cur->name, name) == 0) + return cur; + } + return NULL; +} +/*@=onlytrans@*/ + +void +yasm_section_add_reloc(yasm_section *sect, yasm_reloc *reloc, + void (*destroy_func) (/*@only@*/ void *reloc)) +{ + STAILQ_INSERT_TAIL(§->relocs, reloc, link); + if (!destroy_func) + yasm_internal_error(N_("NULL destroy function given to add_reloc")); + else if (sect->destroy_reloc && destroy_func != sect->destroy_reloc) + yasm_internal_error(N_("different destroy function given to add_reloc")); + sect->destroy_reloc = destroy_func; +} + +/*@null@*/ yasm_reloc * +yasm_section_relocs_first(yasm_section *sect) +{ + return STAILQ_FIRST(§->relocs); +} + +#undef yasm_section_reloc_next +/*@null@*/ yasm_reloc * +yasm_section_reloc_next(yasm_reloc *reloc) +{ + return STAILQ_NEXT(reloc, link); +} + +void +yasm_reloc_get(yasm_reloc *reloc, yasm_intnum **addrp, yasm_symrec **symp) +{ + *addrp = reloc->addr; + *symp = reloc->sym; +} + + +yasm_bytecode * +yasm_section_bcs_first(yasm_section *sect) +{ + return STAILQ_FIRST(§->bcs); +} + +yasm_bytecode * +yasm_section_bcs_last(yasm_section *sect) +{ + return STAILQ_LAST(§->bcs, yasm_bytecode, link); +} + +yasm_bytecode * +yasm_section_bcs_append(yasm_section *sect, yasm_bytecode *bc) +{ + if (bc) { + if (bc->callback) { + bc->section = sect; /* record parent section */ + STAILQ_INSERT_TAIL(§->bcs, bc, link); + return bc; + } else + yasm_xfree(bc); + } + return (yasm_bytecode *)NULL; +} + +int +yasm_section_bcs_traverse(yasm_section *sect, + /*@null@*/ yasm_errwarns *errwarns, + /*@null@*/ void *d, + int (*func) (yasm_bytecode *bc, /*@null@*/ void *d)) +{ + yasm_bytecode *cur = STAILQ_FIRST(§->bcs); + + /* Skip our locally created empty bytecode first. */ + cur = STAILQ_NEXT(cur, link); + + /* Iterate through the remainder, if any. */ + while (cur) { + int retval = func(cur, d); + if (errwarns) + yasm_errwarn_propagate(errwarns, cur->line); + if (retval != 0) + return retval; + cur = STAILQ_NEXT(cur, link); + } + return 0; +} + +const char * +yasm_section_get_name(const yasm_section *sect) +{ + return sect->name; +} + +void +yasm_section_set_align(yasm_section *sect, unsigned long align, + unsigned long line) +{ + sect->align = align; +} + +unsigned long +yasm_section_get_align(const yasm_section *sect) +{ + return sect->align; +} + +static void +yasm_section_destroy(yasm_section *sect) +{ + yasm_bytecode *cur, *next; + yasm_reloc *r_cur, *r_next; + + if (!sect) + return; + + yasm_xfree(sect->name); + yasm__assoc_data_destroy(sect->assoc_data); + + /* Delete bytecodes */ + cur = STAILQ_FIRST(§->bcs); + while (cur) { + next = STAILQ_NEXT(cur, link); + yasm_bc_destroy(cur); + cur = next; + } + + /* Delete relocations */ + r_cur = STAILQ_FIRST(§->relocs); + while (r_cur) { + r_next = STAILQ_NEXT(r_cur, link); + yasm_intnum_destroy(r_cur->addr); + sect->destroy_reloc(r_cur); + r_cur = r_next; + } + + yasm_xfree(sect); +} + +void +yasm_section_print(const yasm_section *sect, FILE *f, int indent_level, + int print_bcs) +{ + if (!sect) { + fprintf(f, "%*s(none)\n", indent_level, ""); + return; + } + + fprintf(f, "%*sname=%s\n", indent_level, "", sect->name); + + if (sect->assoc_data) { + fprintf(f, "%*sAssociated data:\n", indent_level, ""); + yasm__assoc_data_print(sect->assoc_data, f, indent_level+1); + } + + if (print_bcs) { + yasm_bytecode *cur; + + fprintf(f, "%*sBytecodes:\n", indent_level, ""); + + STAILQ_FOREACH(cur, §->bcs, link) { + fprintf(f, "%*sNext Bytecode:\n", indent_level+1, ""); + yasm_bc_print(cur, f, indent_level+2); + } + } +} + +/* + * Robertson (1977) optimizer + * Based (somewhat loosely) on the algorithm given in: + * MRC Technical Summary Report # 1779 + * CODE GENERATION FOR SHORT/LONG ADDRESS MACHINES + * Edward L. Robertson + * Mathematics Research Center + * University of Wisconsin-Madison + * 610 Walnut Street + * Madison, Wisconsin 53706 + * August 1977 + * + * Key components of algorithm: + * - start assuming all short forms + * - build spans for short->long transition dependencies + * - if a long form is needed, walk the dependencies and update + * Major differences from Robertson's algorithm: + * - detection of cycles + * - any difference of two locations is allowed + * - handling of alignment/org gaps (offset setting) + * - handling of multiples + * + * Data structures: + * - Interval tree to store spans and associated data + * - Queues QA and QB + * + * Each span keeps track of: + * - Associated bytecode (bytecode that depends on the span length) + * - Active/inactive state (starts out active) + * - Sign (negative/positive; negative being "backwards" in address) + * - Current length in bytes + * - New length in bytes + * - Negative/Positive thresholds + * - Span ID (unique within each bytecode) + * + * How org and align and any other offset-based bytecodes are handled: + * + * Some portions are critical values that must not depend on any bytecode + * offset (either relative or absolute). + * + * All offset-setters (ORG and ALIGN) are put into a linked list in section + * order (e.g. increasing offset order). Each span keeps track of the next + * offset-setter following the span's associated bytecode. + * + * When a bytecode is expanded, the next offset-setter is examined. The + * offset-setter may be able to absorb the expansion (e.g. any offset + * following it would not change), or it may have to move forward (in the + * case of align) or error (in the case of org). If it has to move forward, + * following offset-setters must also be examined for absorption or moving + * forward. In either case, the ongoing offset is updated as well as the + * lengths of any spans dependent on the offset-setter. + * + * Alignment/ORG value is critical value. + * Cannot be combined with TIMES. + * + * How times is handled: + * + * TIMES: Handled separately from bytecode "raw" size. If not span-dependent, + * trivial (just multiplied in at any bytecode size increase). Span + * dependent times update on any change (span ID 0). If the resultant + * next bytecode offset would be less than the old next bytecode offset, + * error. Otherwise increase offset and update dependent spans. + * + * To reduce interval tree size, a first expansion pass is performed + * before the spans are added to the tree. + * + * Basic algorithm outline: + * + * 1. Initialization: + * a. Number bytecodes sequentially (via bc_index) and calculate offsets + * of all bytecodes assuming minimum length, building a list of all + * dependent spans as we go. + * "minimum" here means absolute minimum: + * - align/org (offset-based) bumps offset as normal + * - times values (with span-dependent values) assumed to be 0 + * b. Iterate over spans. Set span length based on bytecode offsets + * determined in 1a. If span is "certainly" long because the span + * is an absolute reference to another section (or external) or the + * distance calculated based on the minimum length is greater than the + * span's threshold, expand the span's bytecode, and if no further + * expansion can result, mark span as inactive. + * c. Iterate over bytecodes to update all bytecode offsets based on new + * (expanded) lengths calculated in 1b. + * d. Iterate over active spans. Add span to interval tree. Update span's + * length based on new bytecode offsets determined in 1c. If span's + * length exceeds long threshold, add that span to Q. + * 2. Main loop: + * While Q not empty: + * Expand BC dependent on span at head of Q (and remove span from Q). + * Update span: + * If BC no longer dependent on span, mark span as inactive. + * If BC has new thresholds for span, update span. + * If BC increased in size, for each active span that contains BC: + * Increase span length by difference between short and long BC length. + * If span exceeds long threshold (or is flagged to recalculate on any + * change), add it to tail of Q. + * 3. Final pass over bytecodes to generate final offsets. + */ + +typedef struct yasm_span yasm_span; + +typedef struct yasm_offset_setter { + /* Linked list in section order (e.g. offset order) */ + /*@reldef@*/ STAILQ_ENTRY(yasm_offset_setter) link; + + /*@dependent@*/ yasm_bytecode *bc; + + unsigned long cur_val, new_val; + unsigned long thres; +} yasm_offset_setter; + +typedef struct yasm_span_term { + yasm_bytecode *precbc, *precbc2; + yasm_span *span; /* span this term is a member of */ + long cur_val, new_val; + unsigned int subst; +} yasm_span_term; + +struct yasm_span { + /*@reldef@*/ TAILQ_ENTRY(yasm_span) link; /* for allocation tracking */ + /*@reldef@*/ STAILQ_ENTRY(yasm_span) linkq; /* for Q */ + + /*@dependent@*/ yasm_bytecode *bc; + + yasm_value depval; + + /* span term for relative portion of value */ + yasm_span_term *rel_term; + /* span terms in absolute portion of value */ + yasm_span_term *terms; + yasm_expr__item *items; + unsigned int num_terms; + + long cur_val; + long new_val; + + long neg_thres; + long pos_thres; + + int id; + + int active; + + /* NULL-terminated array of spans that led to this span. Used only for + * checking for circular references (cycles) with id=0 spans. + */ + yasm_span **backtrace; + int backtrace_size; + + /* First offset setter following this span's bytecode */ + yasm_offset_setter *os; +}; + +typedef struct optimize_data { + /*@reldef@*/ TAILQ_HEAD(yasm_span_head, yasm_span) spans; + /*@reldef@*/ STAILQ_HEAD(yasm_span_shead, yasm_span) QA, QB; + /*@only@*/ IntervalTree *itree; + /*@reldef@*/ STAILQ_HEAD(offset_setters_head, yasm_offset_setter) + offset_setters; + long len_diff; /* used only for optimize_term_expand */ + yasm_span *span; /* used only for check_cycle */ + yasm_offset_setter *os; +} optimize_data; + +static yasm_span * +create_span(yasm_bytecode *bc, int id, /*@null@*/ const yasm_value *value, + long neg_thres, long pos_thres, yasm_offset_setter *os) +{ + yasm_span *span = yasm_xmalloc(sizeof(yasm_span)); + + span->bc = bc; + if (value) + yasm_value_init_copy(&span->depval, value); + else + yasm_value_initialize(&span->depval, NULL, 0); + span->rel_term = NULL; + span->terms = NULL; + span->items = NULL; + span->num_terms = 0; + span->cur_val = 0; + span->new_val = 0; + span->neg_thres = neg_thres; + span->pos_thres = pos_thres; + span->id = id; + span->active = 1; + span->backtrace = NULL; + span->backtrace_size = 0; + span->os = os; + + return span; +} + +static void +optimize_add_span(void *add_span_data, yasm_bytecode *bc, int id, + const yasm_value *value, long neg_thres, long pos_thres) +{ + optimize_data *optd = (optimize_data *)add_span_data; + yasm_span *span; + span = create_span(bc, id, value, neg_thres, pos_thres, optd->os); + TAILQ_INSERT_TAIL(&optd->spans, span, link); +} + +static void +add_span_term(unsigned int subst, yasm_bytecode *precbc, + yasm_bytecode *precbc2, void *d) +{ + yasm_span *span = d; + yasm_intnum *intn; + + if (subst >= span->num_terms) { + /* Linear expansion since total number is essentially always small */ + span->num_terms = subst+1; + span->terms = yasm_xrealloc(span->terms, + span->num_terms*sizeof(yasm_span_term)); + } + span->terms[subst].precbc = precbc; + span->terms[subst].precbc2 = precbc2; + span->terms[subst].span = span; + span->terms[subst].subst = subst; + + intn = yasm_calc_bc_dist(precbc, precbc2); + if (!intn) + yasm_internal_error(N_("could not calculate bc distance")); + span->terms[subst].cur_val = 0; + span->terms[subst].new_val = yasm_intnum_get_int(intn); + yasm_intnum_destroy(intn); +} + +static void +span_create_terms(yasm_span *span) +{ + unsigned int i; + + /* Split out sym-sym terms in absolute portion of dependent value */ + if (span->depval.abs) { + span->num_terms = yasm_expr__bc_dist_subst(&span->depval.abs, span, + add_span_term); + if (span->num_terms > 0) { + span->items = yasm_xmalloc(span->num_terms*sizeof(yasm_expr__item)); + for (i=0; inum_terms; i++) { + /* Create items with dummy value */ + span->items[i].type = YASM_EXPR_INT; + span->items[i].data.intn = yasm_intnum_create_int(0); + + /* Check for circular references */ + if (span->id <= 0 && + ((span->bc->bc_index > span->terms[i].precbc->bc_index && + span->bc->bc_index <= span->terms[i].precbc2->bc_index) || + (span->bc->bc_index > span->terms[i].precbc2->bc_index && + span->bc->bc_index <= span->terms[i].precbc->bc_index))) + yasm_error_set(YASM_ERROR_VALUE, + N_("circular reference detected")); + } + } + } + + /* Create term for relative portion of dependent value */ + if (span->depval.rel) { + yasm_bytecode *rel_precbc; + int sym_local; + + sym_local = yasm_symrec_get_label(span->depval.rel, &rel_precbc); + if (span->depval.wrt || span->depval.seg_of || span->depval.section_rel + || !sym_local) + return; /* we can't handle SEG, WRT, or external symbols */ + if (rel_precbc->section != span->bc->section) + return; /* not in this section */ + if (!span->depval.curpos_rel) + return; /* not PC-relative */ + + span->rel_term = yasm_xmalloc(sizeof(yasm_span_term)); + span->rel_term->precbc = NULL; + span->rel_term->precbc2 = rel_precbc; + span->rel_term->span = span; + span->rel_term->subst = ~0U; + + span->rel_term->cur_val = 0; + span->rel_term->new_val = yasm_bc_next_offset(rel_precbc) - + span->bc->offset; + } +} + +/* Recalculate span value based on current span replacement values. + * Returns 1 if span needs expansion (e.g. exceeded thresholds). + */ +static int +recalc_normal_span(yasm_span *span) +{ + span->new_val = 0; + + if (span->depval.abs) { + yasm_expr *abs_copy = yasm_expr_copy(span->depval.abs); + /*@null@*/ /*@dependent@*/ yasm_intnum *num; + + /* Update sym-sym terms and substitute back into expr */ + unsigned int i; + for (i=0; inum_terms; i++) + yasm_intnum_set_int(span->items[i].data.intn, + span->terms[i].new_val); + yasm_expr__subst(abs_copy, span->num_terms, span->items); + num = yasm_expr_get_intnum(&abs_copy, 0); + if (num) + span->new_val = yasm_intnum_get_int(num); + else + span->new_val = LONG_MAX; /* too complex; force to longest form */ + yasm_expr_destroy(abs_copy); + } + + if (span->rel_term) { + if (span->new_val != LONG_MAX && span->rel_term->new_val != LONG_MAX) + span->new_val += span->rel_term->new_val >> span->depval.rshift; + else + span->new_val = LONG_MAX; /* too complex; force to longest form */ + } else if (span->depval.rel) + span->new_val = LONG_MAX; /* too complex; force to longest form */ + + if (span->new_val == LONG_MAX) + span->active = 0; + + /* If id<=0, flag update on any change */ + if (span->id <= 0) + return (span->new_val != span->cur_val); + + return (span->new_val < span->neg_thres + || span->new_val > span->pos_thres); +} + +/* Updates all bytecode offsets. For offset-based bytecodes, calls expand + * to determine new length. + */ +static int +update_all_bc_offsets(yasm_object *object, yasm_errwarns *errwarns) +{ + yasm_section *sect; + int saw_error = 0; + + STAILQ_FOREACH(sect, &object->sections, link) { + unsigned long offset = 0; + + yasm_bytecode *bc = STAILQ_FIRST(§->bcs); + yasm_bytecode *prevbc; + + /* Skip our locally created empty bytecode first. */ + prevbc = bc; + bc = STAILQ_NEXT(bc, link); + + /* Iterate through the remainder, if any. */ + while (bc) { + if (bc->callback->special == YASM_BC_SPECIAL_OFFSET) { + /* Recalculate/adjust len of offset-based bytecodes here */ + long neg_thres = 0; + long pos_thres = (long)yasm_bc_next_offset(bc); + int retval = yasm_bc_expand(bc, 1, 0, + (long)yasm_bc_next_offset(prevbc), + &neg_thres, &pos_thres); + yasm_errwarn_propagate(errwarns, bc->line); + if (retval < 0) + saw_error = 1; + } + bc->offset = offset; + offset += bc->len*bc->mult_int; + prevbc = bc; + bc = STAILQ_NEXT(bc, link); + } + } + return saw_error; +} + +static void +span_destroy(/*@only@*/ yasm_span *span) +{ + unsigned int i; + + yasm_value_delete(&span->depval); + if (span->rel_term) + yasm_xfree(span->rel_term); + if (span->terms) + yasm_xfree(span->terms); + if (span->items) { + for (i=0; inum_terms; i++) + yasm_intnum_destroy(span->items[i].data.intn); + yasm_xfree(span->items); + } + if (span->backtrace) + yasm_xfree(span->backtrace); + yasm_xfree(span); +} + +static void +optimize_cleanup(optimize_data *optd) +{ + yasm_span *s1, *s2; + yasm_offset_setter *os1, *os2; + + IT_destroy(optd->itree); + + s1 = TAILQ_FIRST(&optd->spans); + while (s1) { + s2 = TAILQ_NEXT(s1, link); + span_destroy(s1); + s1 = s2; + } + + os1 = STAILQ_FIRST(&optd->offset_setters); + while (os1) { + os2 = STAILQ_NEXT(os1, link); + yasm_xfree(os1); + os1 = os2; + } +} + +static void +optimize_itree_add(IntervalTree *itree, yasm_span *span, yasm_span_term *term) +{ + long precbc_index, precbc2_index; + unsigned long low, high; + + /* Update term length */ + if (term->precbc) + precbc_index = term->precbc->bc_index; + else + precbc_index = span->bc->bc_index-1; + + if (term->precbc2) + precbc2_index = term->precbc2->bc_index; + else + precbc2_index = span->bc->bc_index-1; + + if (precbc_index < precbc2_index) { + low = precbc_index+1; + high = precbc2_index; + } else if (precbc_index > precbc2_index) { + low = precbc2_index+1; + high = precbc_index; + } else + return; /* difference is same bc - always 0! */ + + IT_insert(itree, (long)low, (long)high, term); +} + +static void +check_cycle(IntervalTreeNode *node, void *d) +{ + optimize_data *optd = d; + yasm_span_term *term = node->data; + yasm_span *depspan = term->span; + int i; + int depspan_bt_alloc; + + /* Only check for cycles in id=0 spans */ + if (depspan->id > 0) + return; + + /* Check for a circular reference by looking to see if this dependent + * span is in our backtrace. + */ + if (optd->span->backtrace) { + for (i=0; ispan->backtrace_size; i++) { + if (optd->span->backtrace[i] == depspan) + yasm_error_set(YASM_ERROR_VALUE, + N_("circular reference detected")); + } + } + + /* Add our complete backtrace and ourselves to backtrace of dependent + * span. + */ + if (!depspan->backtrace) { + depspan->backtrace = yasm_xmalloc((optd->span->backtrace_size+1)* + sizeof(yasm_span *)); + if (optd->span->backtrace_size > 0) + memcpy(depspan->backtrace, optd->span->backtrace, + optd->span->backtrace_size*sizeof(yasm_span *)); + depspan->backtrace[optd->span->backtrace_size] = optd->span; + depspan->backtrace_size = optd->span->backtrace_size+1; + return; + } + + /* Add our complete backtrace, checking for duplicates */ + depspan_bt_alloc = depspan->backtrace_size; + for (i=0; ispan->backtrace_size; i++) { + int present = 0; + int j; + for (j=0; jbacktrace_size; j++) { + if (optd->span->backtrace[i] == optd->span->backtrace[j]) { + present = 1; + break; + } + } + if (present) + continue; + /* Not already in array; add it. */ + if (depspan->backtrace_size >= depspan_bt_alloc) + { + depspan_bt_alloc *= 2; + depspan->backtrace = + yasm_xrealloc(depspan->backtrace, + depspan_bt_alloc*sizeof(yasm_span *)); + } + depspan->backtrace[depspan->backtrace_size] = optd->span->backtrace[i]; + depspan->backtrace_size++; + } + + /* Add ourselves. */ + if (depspan->backtrace_size >= depspan_bt_alloc) + { + depspan_bt_alloc++; + depspan->backtrace = + yasm_xrealloc(depspan->backtrace, + depspan_bt_alloc*sizeof(yasm_span *)); + } + depspan->backtrace[depspan->backtrace_size] = optd->span; + depspan->backtrace_size++; +} + +static void +optimize_term_expand(IntervalTreeNode *node, void *d) +{ + optimize_data *optd = d; + yasm_span_term *term = node->data; + yasm_span *span = term->span; + long len_diff = optd->len_diff; + long precbc_index, precbc2_index; + + /* Don't expand inactive spans */ + if (!span->active) + return; + + /* Update term length */ + if (term->precbc) + precbc_index = term->precbc->bc_index; + else + precbc_index = span->bc->bc_index-1; + + if (term->precbc2) + precbc2_index = term->precbc2->bc_index; + else + precbc2_index = span->bc->bc_index-1; + + if (precbc_index < precbc2_index) + term->new_val += len_diff; + else + term->new_val -= len_diff; + + /* If already on Q, don't re-add */ + if (span->active == 2) + return; + + /* Update term and check against thresholds */ + if (!recalc_normal_span(span)) + return; /* didn't exceed thresholds, we're done */ + + /* Exceeded thresholds, need to add to Q for expansion */ + if (span->id <= 0) + STAILQ_INSERT_TAIL(&optd->QA, span, linkq); + else + STAILQ_INSERT_TAIL(&optd->QB, span, linkq); + span->active = 2; /* Mark as being in Q */ +} + +void +yasm_object_optimize(yasm_object *object, yasm_errwarns *errwarns) +{ + yasm_section *sect; + unsigned long bc_index = 0; + int saw_error = 0; + optimize_data optd; + yasm_span *span, *span_temp; + yasm_offset_setter *os; + int retval; + unsigned int i; + + TAILQ_INIT(&optd.spans); + STAILQ_INIT(&optd.offset_setters); + optd.itree = IT_create(); + + /* Create an placeholder offset setter for spans to point to; this will + * get updated if/when we actually run into one. + */ + os = yasm_xmalloc(sizeof(yasm_offset_setter)); + os->bc = NULL; + os->cur_val = 0; + os->new_val = 0; + os->thres = 0; + STAILQ_INSERT_TAIL(&optd.offset_setters, os, link); + optd.os = os; + + /* Step 1a */ + STAILQ_FOREACH(sect, &object->sections, link) { + unsigned long offset = 0; + + yasm_bytecode *bc = STAILQ_FIRST(§->bcs); + + bc->bc_index = bc_index++; + + /* Skip our locally created empty bytecode first. */ + bc = STAILQ_NEXT(bc, link); + + /* Iterate through the remainder, if any. */ + while (bc) { + bc->bc_index = bc_index++; + bc->offset = offset; + + retval = yasm_bc_calc_len(bc, optimize_add_span, &optd); + yasm_errwarn_propagate(errwarns, bc->line); + if (retval) + saw_error = 1; + else { + if (bc->callback->special == YASM_BC_SPECIAL_OFFSET) { + /* Remember it as offset setter */ + os->bc = bc; + os->thres = yasm_bc_next_offset(bc); + + /* Create new placeholder */ + os = yasm_xmalloc(sizeof(yasm_offset_setter)); + os->bc = NULL; + os->cur_val = 0; + os->new_val = 0; + os->thres = 0; + STAILQ_INSERT_TAIL(&optd.offset_setters, os, link); + optd.os = os; + + if (bc->multiple) { + yasm_error_set(YASM_ERROR_VALUE, + N_("cannot combine multiples and setting assembly position")); + yasm_errwarn_propagate(errwarns, bc->line); + saw_error = 1; + } + } + + offset += bc->len*bc->mult_int; + } + + bc = STAILQ_NEXT(bc, link); + } + } + + if (saw_error) { + optimize_cleanup(&optd); + return; + } + + /* Step 1b */ + TAILQ_FOREACH_SAFE(span, &optd.spans, link, span_temp) { + span_create_terms(span); + if (yasm_error_occurred()) { + yasm_errwarn_propagate(errwarns, span->bc->line); + saw_error = 1; + } else if (recalc_normal_span(span)) { + retval = yasm_bc_expand(span->bc, span->id, span->cur_val, + span->new_val, &span->neg_thres, + &span->pos_thres); + yasm_errwarn_propagate(errwarns, span->bc->line); + if (retval < 0) + saw_error = 1; + else if (retval > 0) { + if (!span->active) { + yasm_error_set(YASM_ERROR_VALUE, + N_("secondary expansion of an external/complex value")); + yasm_errwarn_propagate(errwarns, span->bc->line); + saw_error = 1; + } + } else { + TAILQ_REMOVE(&optd.spans, span, link); + span_destroy(span); + continue; + } + } + span->cur_val = span->new_val; + } + + if (saw_error) { + optimize_cleanup(&optd); + return; + } + + /* Step 1c */ + if (update_all_bc_offsets(object, errwarns)) { + optimize_cleanup(&optd); + return; + } + + /* Step 1d */ + STAILQ_INIT(&optd.QB); + TAILQ_FOREACH(span, &optd.spans, link) { + yasm_intnum *intn; + + /* Update span terms based on new bc offsets */ + for (i=0; inum_terms; i++) { + intn = yasm_calc_bc_dist(span->terms[i].precbc, + span->terms[i].precbc2); + if (!intn) + yasm_internal_error(N_("could not calculate bc distance")); + span->terms[i].cur_val = span->terms[i].new_val; + span->terms[i].new_val = yasm_intnum_get_int(intn); + yasm_intnum_destroy(intn); + } + if (span->rel_term) { + span->rel_term->cur_val = span->rel_term->new_val; + if (span->rel_term->precbc2) + span->rel_term->new_val = + yasm_bc_next_offset(span->rel_term->precbc2) - + span->bc->offset; + else + span->rel_term->new_val = span->bc->offset - + yasm_bc_next_offset(span->rel_term->precbc); + } + + if (recalc_normal_span(span)) { + /* Exceeded threshold, add span to QB */ + STAILQ_INSERT_TAIL(&optd.QB, span, linkq); + span->active = 2; + } + } + + /* Do we need step 2? If not, go ahead and exit. */ + if (STAILQ_EMPTY(&optd.QB)) { + optimize_cleanup(&optd); + return; + } + + /* Update offset-setters values */ + STAILQ_FOREACH(os, &optd.offset_setters, link) { + if (!os->bc) + continue; + os->thres = yasm_bc_next_offset(os->bc); + os->new_val = os->bc->offset; + os->cur_val = os->new_val; + } + + /* Build up interval tree */ + TAILQ_FOREACH(span, &optd.spans, link) { + for (i=0; inum_terms; i++) + optimize_itree_add(optd.itree, span, &span->terms[i]); + if (span->rel_term) + optimize_itree_add(optd.itree, span, span->rel_term); + } + + /* Look for cycles in times expansion (span.id==0) */ + TAILQ_FOREACH(span, &optd.spans, link) { + if (span->id > 0) + continue; + optd.span = span; + IT_enumerate(optd.itree, (long)span->bc->bc_index, + (long)span->bc->bc_index, &optd, check_cycle); + if (yasm_error_occurred()) { + yasm_errwarn_propagate(errwarns, span->bc->line); + saw_error = 1; + } + } + + if (saw_error) { + optimize_cleanup(&optd); + return; + } + + /* Step 2 */ + STAILQ_INIT(&optd.QA); + while (!STAILQ_EMPTY(&optd.QA) || !(STAILQ_EMPTY(&optd.QB))) { + unsigned long orig_len; + long offset_diff; + + /* QA is for TIMES, update those first, then update non-TIMES. + * This is so that TIMES can absorb increases before we look at + * expanding non-TIMES BCs. + */ + if (!STAILQ_EMPTY(&optd.QA)) { + span = STAILQ_FIRST(&optd.QA); + STAILQ_REMOVE_HEAD(&optd.QA, linkq); + } else { + span = STAILQ_FIRST(&optd.QB); + STAILQ_REMOVE_HEAD(&optd.QB, linkq); + } + + if (!span->active) + continue; + span->active = 1; /* no longer in Q */ + + /* Make sure we ended up ultimately exceeding thresholds; due to + * offset BCs we may have been placed on Q and then reduced in size + * again. + */ + if (!recalc_normal_span(span)) + continue; + + orig_len = span->bc->len * span->bc->mult_int; + + retval = yasm_bc_expand(span->bc, span->id, span->cur_val, + span->new_val, &span->neg_thres, + &span->pos_thres); + yasm_errwarn_propagate(errwarns, span->bc->line); + + if (retval < 0) { + /* error */ + saw_error = 1; + continue; + } else if (retval > 0) { + /* another threshold, keep active */ + for (i=0; inum_terms; i++) + span->terms[i].cur_val = span->terms[i].new_val; + if (span->rel_term) + span->rel_term->cur_val = span->rel_term->new_val; + span->cur_val = span->new_val; + } else + span->active = 0; /* we're done with this span */ + + optd.len_diff = span->bc->len * span->bc->mult_int - orig_len; + if (optd.len_diff == 0) + continue; /* didn't increase in size */ + + /* Iterate over all spans dependent across the bc just expanded */ + IT_enumerate(optd.itree, (long)span->bc->bc_index, + (long)span->bc->bc_index, &optd, optimize_term_expand); + + /* Iterate over offset-setters that follow the bc just expanded. + * Stop iteration if: + * - no more offset-setters in this section + * - offset-setter didn't move its following offset + */ + os = span->os; + offset_diff = optd.len_diff; + while (os->bc && os->bc->section == span->bc->section + && offset_diff != 0) { + unsigned long old_next_offset = os->cur_val + os->bc->len; + long neg_thres_temp; + + if (offset_diff < 0 && (unsigned long)(-offset_diff) > os->new_val) + yasm_internal_error(N_("org/align went to negative offset")); + os->new_val += offset_diff; + + orig_len = os->bc->len; + retval = yasm_bc_expand(os->bc, 1, (long)os->cur_val, + (long)os->new_val, &neg_thres_temp, + (long *)&os->thres); + yasm_errwarn_propagate(errwarns, os->bc->line); + + offset_diff = os->new_val + os->bc->len - old_next_offset; + optd.len_diff = os->bc->len - orig_len; + if (optd.len_diff != 0) + IT_enumerate(optd.itree, (long)os->bc->bc_index, + (long)os->bc->bc_index, &optd, optimize_term_expand); + + os->cur_val = os->new_val; + os = STAILQ_NEXT(os, link); + } + } + + if (saw_error) { + optimize_cleanup(&optd); + return; + } + + /* Step 3 */ + update_all_bc_offsets(object, errwarns); + optimize_cleanup(&optd); +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/section.h b/third-party/yasm/yasm-1.3.0/libyasm/section.h new file mode 100644 index 0000000000..2c7faa4d56 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/section.h @@ -0,0 +1,383 @@ +/** + * \file libyasm/section.h + * \brief YASM section interface. + * + * \license + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_SECTION_H +#define YASM_SECTION_H + +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +/** Basic YASM relocation. Object formats will need to extend this + * structure with additional fields for relocation type, etc. + */ +typedef struct yasm_reloc yasm_reloc; + +struct yasm_reloc { + /*@reldef@*/ STAILQ_ENTRY(yasm_reloc) link; /**< Link to next reloc */ + yasm_intnum *addr; /**< Offset (address) within section */ + /*@dependent@*/ yasm_symrec *sym; /**< Relocated symbol */ +}; + +/** An object. This is the internal representation of an object file. */ +struct yasm_object { + /*@owned@*/ char *src_filename; /**< Source filename */ + /*@owned@*/ char *obj_filename; /**< Object filename */ + + /*@owned@*/ yasm_symtab *symtab; /**< Symbol table */ + /*@owned@*/ yasm_arch *arch; /**< Target architecture */ + /*@owned@*/ yasm_objfmt *objfmt; /**< Object format */ + /*@owned@*/ yasm_dbgfmt *dbgfmt; /**< Debug format */ + + /** Currently active section. Used by some directives. NULL if no + * section active. + */ + /*@dependent@*/ /*@null@*/ yasm_section *cur_section; + + /** Linked list of sections. */ + /*@reldef@*/ STAILQ_HEAD(yasm_sectionhead, yasm_section) sections; + + /** Directives, organized as two level HAMT; first level is parser, + * second level is directive name. + */ + /*@owned@*/ struct HAMT *directives; + + /** Prefix prepended to externally-visible symbols (empty string if none) */ + /*@owned@*/ char *global_prefix; + + /** Suffix appended to externally-visible symbols (empty string if none) */ + /*@owned@*/ char *global_suffix; +}; + +/** Create a new object. A default section is created as the first section. + * An empty symbol table (yasm_symtab) and line mapping (yasm_linemap) are + * automatically created. + * \param src_filename source filename (e.g. "file.asm") + * \param obj_filename object filename (e.g. "file.o") + * \param arch architecture + * \param objfmt_module object format module + * \param dbgfmt_module debug format module + * \return Newly allocated object, or NULL on error. + */ +YASM_LIB_DECL +/*@null@*/ /*@only@*/ yasm_object *yasm_object_create + (const char *src_filename, const char *obj_filename, + /*@kept@*/ yasm_arch *arch, + const yasm_objfmt_module *objfmt_module, + const yasm_dbgfmt_module *dbgfmt_module); + +/** Create a new, or continue an existing, general section. The section is + * added to the object if there's not already a section by that name. + * \param object object + * \param name section name + * \param align alignment in bytes (0 if none) + * \param code if nonzero, section is intended to contain code + * (e.g. alignment should be made with NOP instructions, not 0) + * \param res_only if nonzero, only space-reserving bytecodes are allowed in + * the section (ignored if section already exists) + * \param isnew output; set to nonzero if section did not already exist + * \param line virtual line of section declaration (ignored if section + * already exists) + * \return New section. + */ +YASM_LIB_DECL +/*@dependent@*/ yasm_section *yasm_object_get_general + (yasm_object *object, const char *name, unsigned long align, int code, + int res_only, /*@out@*/ int *isnew, unsigned long line); + +/** Handle a directive. Passed down to object format, debug format, or + * architecture as appropriate. + * \param object object + * \param name directive name + * \param parser parser keyword + * \param valparams value/parameters + * \param objext_valparams "object format-specific" value/parameters + * \param line virtual line (from yasm_linemap) + * \return 0 if directive recognized, nonzero if unrecognized. + */ +YASM_LIB_DECL +int yasm_object_directive(yasm_object *object, const char *name, + const char *parser, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, + unsigned long line); + +/** Delete (free allocated memory for) an object. All sections in the + * object and all bytecodes within those sections are also deleted. + * \param object object + */ +YASM_LIB_DECL +void yasm_object_destroy(/*@only@*/ yasm_object *object); + +/** Print an object. For debugging purposes. + * \param object object + * \param f file + * \param indent_level indentation level + */ +YASM_LIB_DECL +void yasm_object_print(const yasm_object *object, FILE *f, int indent_level); + +/** Finalize an object after parsing. + * \param object object + * \param errwarns error/warning set + * \note Errors/warnings are stored into errwarns. + */ +YASM_LIB_DECL +void yasm_object_finalize(yasm_object *object, yasm_errwarns *errwarns); + +/** Traverses all sections in an object, calling a function on each section. + * \param object object + * \param d data pointer passed to func on each call + * \param func function + * \return Stops early (and returns func's return value) if func returns a + * nonzero value; otherwise 0. + */ +YASM_LIB_DECL +int yasm_object_sections_traverse + (yasm_object *object, /*@null@*/ void *d, + int (*func) (yasm_section *sect, /*@null@*/ void *d)); + +/** Find a general section in an object, based on its name. + * \param object object + * \param name section name + * \return Section matching name, or NULL if no match found. + */ +YASM_LIB_DECL +/*@dependent@*/ /*@null@*/ yasm_section *yasm_object_find_general + (yasm_object *object, const char *name); + +/** Change the source filename for an object. + * \param object object + * \param src_filename new source filename (e.g. "file.asm") + */ +YASM_LIB_DECL +void yasm_object_set_source_fn(yasm_object *object, const char *src_filename); + +/** Change the prefix used for externally-visible symbols. + * \param object object + * \param prefix new prefix + */ +YASM_LIB_DECL +void yasm_object_set_global_prefix(yasm_object *object, const char *prefix); + +/** Change the suffix used for externally-visible symbols. + * \param object object + * \param suffix new suffix + */ +YASM_LIB_DECL +void yasm_object_set_global_suffix(yasm_object *object, const char *suffix); + +/** Optimize an object. Takes the unoptimized object and optimizes it. + * If successful, the object is ready for output to an object file. + * \param object object + * \param errwarns error/warning set + * \note Optimization failures are stored into errwarns. + */ +YASM_LIB_DECL +void yasm_object_optimize(yasm_object *object, yasm_errwarns *errwarns); + +/** Determine if a section is flagged to contain code. + * \param sect section + * \return Nonzero if section is flagged to contain code. + */ +YASM_LIB_DECL +int yasm_section_is_code(yasm_section *sect); + +/** Get yasm_optimizer-specific flags. For yasm_optimizer use only. + * \param sect section + * \return Optimizer-specific flags. + */ +YASM_LIB_DECL +unsigned long yasm_section_get_opt_flags(const yasm_section *sect); + +/** Set yasm_optimizer-specific flags. For yasm_optimizer use only. + * \param sect section + * \param opt_flags optimizer-specific flags. + */ +YASM_LIB_DECL +void yasm_section_set_opt_flags(yasm_section *sect, unsigned long opt_flags); + +/** Determine if a section was declared as the "default" section (e.g. not + * created through a section directive). + * \param sect section + * \return Nonzero if section was declared as default. + */ +YASM_LIB_DECL +int yasm_section_is_default(const yasm_section *sect); + +/** Set section "default" flag to a new value. + * \param sect section + * \param def new value of default flag + */ +YASM_LIB_DECL +void yasm_section_set_default(yasm_section *sect, int def); + +/** Get object owner of a section. + * \param sect section + * \return Object this section is a part of. + */ +YASM_LIB_DECL +yasm_object *yasm_section_get_object(const yasm_section *sect); + +/** Get assocated data for a section and data callback. + * \param sect section + * \param callback callback used when adding data + * \return Associated data (NULL if none). + */ +YASM_LIB_DECL +/*@dependent@*/ /*@null@*/ void *yasm_section_get_data + (yasm_section *sect, const yasm_assoc_data_callback *callback); + +/** Add associated data to a section. + * \attention Deletes any existing associated data for that data callback. + * \param sect section + * \param callback callback + * \param data data to associate + */ +YASM_LIB_DECL +void yasm_section_add_data(yasm_section *sect, + const yasm_assoc_data_callback *callback, + /*@null@*/ /*@only@*/ void *data); + +/** Add a relocation to a section. + * \param sect section + * \param reloc relocation + * \param destroy_func function that can destroy the relocation + * \note Does not make a copy of reloc. The same destroy_func must be + * used for all relocations in a section or an internal error will occur. + * The section will destroy the relocation address; it is the caller's + * responsibility to destroy any other allocated data. + */ +YASM_LIB_DECL +void yasm_section_add_reloc(yasm_section *sect, yasm_reloc *reloc, + void (*destroy_func) (/*@only@*/ void *reloc)); + +/** Get the first relocation for a section. + * \param sect section + * \return First relocation for section. NULL if no relocations. + */ +YASM_LIB_DECL +/*@null@*/ yasm_reloc *yasm_section_relocs_first(yasm_section *sect); + +/** Get the next relocation for a section. + * \param reloc previous relocation + * \return Next relocation for section. NULL if no more relocations. + */ +/*@null@*/ yasm_reloc *yasm_section_reloc_next(yasm_reloc *reloc); +#ifndef YASM_DOXYGEN +#define yasm_section_reloc_next(x) STAILQ_NEXT((x), link) +#endif + +/** Get the basic relocation information for a relocation. + * \param reloc relocation + * \param addrp address of relocation within section (returned) + * \param symp relocated symbol (returned) + */ +YASM_LIB_DECL +void yasm_reloc_get(yasm_reloc *reloc, yasm_intnum **addrp, + /*@dependent@*/ yasm_symrec **symp); + +/** Get the first bytecode in a section. + * \param sect section + * \return First bytecode in section (at least one empty bytecode is always + * present). + */ +YASM_LIB_DECL +yasm_bytecode *yasm_section_bcs_first(yasm_section *sect); + +/** Get the last bytecode in a section. + * \param sect section + * \return Last bytecode in section (at least one empty bytecode is always + * present). + */ +YASM_LIB_DECL +yasm_bytecode *yasm_section_bcs_last(yasm_section *sect); + +/** Add bytecode to the end of a section. + * \note Does not make a copy of bc; so don't pass this function static or + * local variables, and discard the bc pointer after calling this + * function. + * \param sect section + * \param bc bytecode (may be NULL) + * \return If bytecode was actually appended (it wasn't NULL or empty), the + * bytecode; otherwise NULL. + */ +YASM_LIB_DECL +/*@only@*/ /*@null@*/ yasm_bytecode *yasm_section_bcs_append + (yasm_section *sect, + /*@returned@*/ /*@only@*/ /*@null@*/ yasm_bytecode *bc); + +/** Traverses all bytecodes in a section, calling a function on each bytecode. + * \param sect section + * \param errwarns error/warning set (may be NULL) + * \param d data pointer passed to func on each call (may be NULL) + * \param func function + * \return Stops early (and returns func's return value) if func returns a + * nonzero value; otherwise 0. + * \note If errwarns is non-NULL, yasm_errwarn_propagate() is called after + * each call to func (with the bytecode's line number). + */ +YASM_LIB_DECL +int yasm_section_bcs_traverse + (yasm_section *sect, /*@null@*/ yasm_errwarns *errwarns, + /*@null@*/ void *d, int (*func) (yasm_bytecode *bc, /*@null@*/ void *d)); + +/** Get name of a section. + * \param sect section + * \return Section name. + */ +YASM_LIB_DECL +/*@observer@*/ const char *yasm_section_get_name(const yasm_section *sect); + +/** Change alignment of a section. + * \param sect section + * \param align alignment in bytes + * \param line virtual line + */ +YASM_LIB_DECL +void yasm_section_set_align(yasm_section *sect, unsigned long align, + unsigned long line); + +/** Get alignment of a section. + * \param sect section + * \return Alignment in bytes (0 if none). + */ +YASM_LIB_DECL +unsigned long yasm_section_get_align(const yasm_section *sect); + +/** Print a section. For debugging purposes. + * \param f file + * \param indent_level indentation level + * \param sect section + * \param print_bcs if nonzero, print bytecodes within section + */ +YASM_LIB_DECL +void yasm_section_print(/*@null@*/ const yasm_section *sect, FILE *f, + int indent_level, int print_bcs); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/strcasecmp.c b/third-party/yasm/yasm-1.3.0/libyasm/strcasecmp.c new file mode 100644 index 0000000000..a87bd88bc9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/strcasecmp.c @@ -0,0 +1,94 @@ +/* + * strcasecmp() implementation for systems that don't have it or stricmp() + * or strcmpi(). + * + * Copyright (c) 1987, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS 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 "util.h" + +#ifndef USE_OUR_OWN_STRCASECMP +#undef yasm__strcasecmp +#undef yasm__strncasecmp +#endif + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "@(#)strcasecmp.c 8.1 (Berkeley) 6/4/93"; +#endif /* LIBC_SCCS and not lint */ + +#include + +int +yasm__strcasecmp(const char *s1, const char *s2) +{ +#ifdef HAVE_STRCASECMP + return strcasecmp(s1, s2); +#elif HAVE_STRICMP + return stricmp(s1, s2); +#elif HAVE__STRICMP + return _stricmp(s1, s2); +#elif HAVE_STRCMPI + return strcmpi(s1, s2); +#else + const unsigned char + *us1 = (const unsigned char *)s1, + *us2 = (const unsigned char *)s2; + + while (tolower(*us1) == tolower(*us2++)) + if (*us1++ == '\0') + return (0); + return (tolower(*us1) - tolower(*--us2)); +#endif +} + +int +yasm__strncasecmp(const char *s1, const char *s2, size_t n) +{ +#ifdef HAVE_STRCASECMP + return strncasecmp(s1, s2, n); +#elif HAVE_STRICMP + return strnicmp(s1, s2, n); +#elif HAVE__STRNICMP + return _strnicmp(s1, s2, n); +#elif HAVE_STRCMPI + return strncmpi(s1, s2, n); +#else + const unsigned char + *us1 = (const unsigned char *)s1, + *us2 = (const unsigned char *)s2; + + if (n != 0) { + do { + if (tolower(*us1) != tolower(*us2++)) + return (tolower(*us1) - tolower(*--us2)); + if (*us1++ == '\0') + break; + } while (--n != 0); + } + return (0); +#endif +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/strsep.c b/third-party/yasm/yasm-1.3.0/libyasm/strsep.c new file mode 100644 index 0000000000..0fecd47595 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/strsep.c @@ -0,0 +1,85 @@ +/* + * strsep() implementation for systems that don't have it. + * + * Copyright (c) 1990, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS 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. + */ +#define NO_STRING_INLINES +#include "util.h" + + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "@(#)strsep.c 8.1 (Berkeley) 6/4/93"; +#endif /* LIBC_SCCS and not lint */ + +#ifdef HAVE_STRSEP +#undef yasm__strsep +#endif + +/* + * Get next token from string *stringp, where tokens are possibly-empty + * strings separated by characters from delim. + * + * Writes NULs into the string at *stringp to end tokens. + * delim need not remain constant from call to call. + * On return, *stringp points past the last NUL written (if there might + * be further tokens), or is NULL (if there are definitely no more tokens). + * + * If *stringp is NULL, strsep returns NULL. + */ +/*@-nullstate@*/ +char * +yasm__strsep(char **stringp, const char *delim) +{ +#ifdef HAVE_STRSEP + return strsep(stringp, delim); +#else + register char *s; + register const char *spanp; + register int c, sc; + char *tok; + + if ((s = *stringp) == NULL) + return (NULL); + for (tok = s;;) { + c = *s++; + spanp = delim; + do { + if ((sc = *spanp++) == c) { + if (c == 0) + s = NULL; + else + s[-1] = 0; + *stringp = s; + return (tok); + } + } while (sc != 0); + } + /* NOTREACHED */ +#endif +} +/*@=nullstate@*/ diff --git a/third-party/yasm/yasm-1.3.0/libyasm/symrec.c b/third-party/yasm/yasm-1.3.0/libyasm/symrec.c new file mode 100644 index 0000000000..694f0c6768 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/symrec.c @@ -0,0 +1,714 @@ +/* + * Symbol table handling + * + * Copyright (C) 2001-2007 Michael Urman, Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 "util.h" + +#include +#include + +#include "libyasm-stdint.h" +#include "coretype.h" +#include "valparam.h" +#include "hamt.h" +#include "assocdat.h" + +#include "errwarn.h" +#include "intnum.h" +#include "floatnum.h" +#include "expr.h" +#include "symrec.h" + +#include "bytecode.h" +#include "section.h" +#include "objfmt.h" + + +typedef enum { + SYM_UNKNOWN, /* for unknown type (COMMON/EXTERN) */ + SYM_EQU, /* for EQU defined symbols (expressions) */ + SYM_LABEL, /* for labels */ + SYM_CURPOS, /* for labels representing the current + assembly position */ + SYM_SPECIAL /* for special symbols that need to be in + the symbol table but otherwise have no + purpose */ +} sym_type; + +struct yasm_symrec { + char *name; + sym_type type; + yasm_sym_status status; + yasm_sym_vis visibility; + unsigned long def_line; /* line where symbol was first defined */ + unsigned long decl_line; /* line where symbol was first declared */ + unsigned long use_line; /* line where symbol was first used */ + union { + yasm_expr *expn; /* equ value */ + + /* bytecode immediately preceding a label */ + /*@dependent@*/ yasm_bytecode *precbc; + } value; + unsigned int size; /* 0 if not user-defined */ + const char *segment; /* for segmented systems like DOS */ + + /* associated data; NULL if none */ + /*@null@*/ /*@only@*/ yasm__assoc_data *assoc_data; +}; + +/* Linked list of symbols not in the symbol table. */ +typedef struct non_table_symrec_s { + /*@reldef@*/ SLIST_ENTRY(non_table_symrec_s) link; + /*@owned@*/ yasm_symrec *rec; +} non_table_symrec; + +struct yasm_symtab { + /* The symbol table: a hash array mapped trie (HAMT). */ + /*@only@*/ HAMT *sym_table; + /* Symbols not in the table */ + SLIST_HEAD(nontablesymhead_s, non_table_symrec_s) non_table_syms; + + int case_sensitive; +}; + +static void +objext_valparams_destroy(void *data) +{ + yasm_vps_destroy((yasm_valparamhead *)data); +} + +static void +objext_valparams_print(void *data, FILE *f, int indent_level) +{ + yasm_vps_print((yasm_valparamhead *)data, f); +} + +static yasm_assoc_data_callback objext_valparams_cb = { + objext_valparams_destroy, + objext_valparams_print +}; + +static void +common_size_destroy(void *data) +{ + yasm_expr **e = (yasm_expr **)data; + yasm_expr_destroy(*e); + yasm_xfree(data); +} + +static void +common_size_print(void *data, FILE *f, int indent_level) +{ + yasm_expr **e = (yasm_expr **)data; + yasm_expr_print(*e, f); +} + +static yasm_assoc_data_callback common_size_cb = { + common_size_destroy, + common_size_print +}; + +yasm_symtab * +yasm_symtab_create(void) +{ + yasm_symtab *symtab = yasm_xmalloc(sizeof(yasm_symtab)); + symtab->sym_table = HAMT_create(0, yasm_internal_error_); + SLIST_INIT(&symtab->non_table_syms); + symtab->case_sensitive = 1; + return symtab; +} + +void +yasm_symtab_set_case_sensitive(yasm_symtab *symtab, int sensitive) +{ + symtab->case_sensitive = sensitive; +} + +static void +symrec_destroy_one(/*@only@*/ void *d) +{ + yasm_symrec *sym = d; + yasm_xfree(sym->name); + if (sym->type == SYM_EQU && (sym->status & YASM_SYM_VALUED)) + yasm_expr_destroy(sym->value.expn); + yasm__assoc_data_destroy(sym->assoc_data); + yasm_xfree(sym); +} + +static /*@partial@*/ yasm_symrec * +symrec_new_common(/*@keep@*/ char *name, int case_sensitive) +{ + yasm_symrec *rec = yasm_xmalloc(sizeof(yasm_symrec)); + + if (!case_sensitive) { + char *c; + for (c=name; *c; c++) + *c = tolower(*c); + } + + rec->name = name; + rec->type = SYM_UNKNOWN; + rec->def_line = 0; + rec->decl_line = 0; + rec->use_line = 0; + rec->visibility = YASM_SYM_LOCAL; + rec->size = 0; + rec->segment = NULL; + rec->assoc_data = NULL; + return rec; +} + +static /*@partial@*/ /*@dependent@*/ yasm_symrec * +symtab_get_or_new_in_table(yasm_symtab *symtab, /*@only@*/ char *name) +{ + yasm_symrec *rec = symrec_new_common(name, symtab->case_sensitive); + int replace = 0; + + rec->status = YASM_SYM_NOSTATUS; + + if (!symtab->case_sensitive) { + char *c; + for (c=name; *c; c++) + *c = tolower(*c); + } + + return HAMT_insert(symtab->sym_table, name, rec, &replace, + symrec_destroy_one); +} + +static /*@partial@*/ /*@dependent@*/ yasm_symrec * +symtab_get_or_new_not_in_table(yasm_symtab *symtab, /*@only@*/ char *name) +{ + non_table_symrec *sym = yasm_xmalloc(sizeof(non_table_symrec)); + sym->rec = symrec_new_common(name, symtab->case_sensitive); + + sym->rec->status = YASM_SYM_NOTINTABLE; + + SLIST_INSERT_HEAD(&symtab->non_table_syms, sym, link); + + return sym->rec; +} + +/* create a new symrec */ +/*@-freshtrans -mustfree@*/ +static /*@partial@*/ /*@dependent@*/ yasm_symrec * +symtab_get_or_new(yasm_symtab *symtab, const char *name, int in_table) +{ + char *symname = yasm__xstrdup(name); + + if (in_table) + return symtab_get_or_new_in_table(symtab, symname); + else + return symtab_get_or_new_not_in_table(symtab, symname); +} +/*@=freshtrans =mustfree@*/ + +int +yasm_symtab_traverse(yasm_symtab *symtab, void *d, + int (*func) (yasm_symrec *sym, void *d)) +{ + return HAMT_traverse(symtab->sym_table, d, (int (*) (void *, void *))func); +} + +const yasm_symtab_iter * +yasm_symtab_first(const yasm_symtab *symtab) +{ + return (const yasm_symtab_iter *)HAMT_first(symtab->sym_table); +} + +/*@null@*/ const yasm_symtab_iter * +yasm_symtab_next(const yasm_symtab_iter *prev) +{ + return (const yasm_symtab_iter *)HAMT_next((const HAMTEntry *)prev); +} + +yasm_symrec * +yasm_symtab_iter_value(const yasm_symtab_iter *cur) +{ + return (yasm_symrec *)HAMTEntry_get_data((const HAMTEntry *)cur); +} + +yasm_symrec * +yasm_symtab_abs_sym(yasm_symtab *symtab) +{ + yasm_symrec *rec = symtab_get_or_new(symtab, "", 1); + rec->def_line = 0; + rec->decl_line = 0; + rec->use_line = 0; + rec->type = SYM_EQU; + rec->value.expn = + yasm_expr_create_ident(yasm_expr_int(yasm_intnum_create_uint(0)), 0); + rec->status |= YASM_SYM_DEFINED|YASM_SYM_VALUED|YASM_SYM_USED; + return rec; +} + +yasm_symrec * +yasm_symtab_use(yasm_symtab *symtab, const char *name, unsigned long line) +{ + yasm_symrec *rec = symtab_get_or_new(symtab, name, 1); + if (rec->use_line == 0) + rec->use_line = line; /* set line number of first use */ + rec->status |= YASM_SYM_USED; + return rec; +} + +yasm_symrec * +yasm_symtab_get(yasm_symtab *symtab, const char *name) +{ + if (!symtab->case_sensitive) { + char *_name = yasm__xstrdup(name); + char *c; + yasm_symrec *ret; + for (c=_name; *c; c++) + *c = tolower(*c); + ret = HAMT_search(symtab->sym_table, _name); + yasm_xfree(_name); + return ret; + } else + return HAMT_search(symtab->sym_table, name); +} + +static /*@dependent@*/ yasm_symrec * +symtab_define(yasm_symtab *symtab, const char *name, sym_type type, + int in_table, unsigned long line) +{ + yasm_symrec *rec = symtab_get_or_new(symtab, name, in_table); + + /* Has it been defined before (either by DEFINED or COMMON/EXTERN)? */ + if (rec->status & YASM_SYM_DEFINED) { + yasm_error_set_xref(rec->def_line!=0 ? rec->def_line : rec->decl_line, + N_("`%s' previously defined here"), name); + yasm_error_set(YASM_ERROR_GENERAL, N_("redefinition of `%s'"), + name); + } else { + if (rec->visibility & YASM_SYM_EXTERN) + yasm_warn_set(YASM_WARN_GENERAL, + N_("`%s' both defined and declared extern"), name); + rec->def_line = line; /* set line number of definition */ + rec->type = type; + rec->status |= YASM_SYM_DEFINED; + rec->size = 0; + rec->segment = NULL; + } + return rec; +} + +yasm_symrec * +yasm_symtab_define_equ(yasm_symtab *symtab, const char *name, yasm_expr *e, + unsigned long line) +{ + yasm_symrec *rec = symtab_define(symtab, name, SYM_EQU, 1, line); + if (yasm_error_occurred()) + return rec; + rec->value.expn = e; + rec->status |= YASM_SYM_VALUED; + return rec; +} + +yasm_symrec * +yasm_symtab_define_label(yasm_symtab *symtab, const char *name, + yasm_bytecode *precbc, int in_table, + unsigned long line) +{ + yasm_symrec *rec = symtab_define(symtab, name, SYM_LABEL, in_table, line); + if (yasm_error_occurred()) + return rec; + rec->value.precbc = precbc; + if (in_table && precbc) + yasm_bc__add_symrec(precbc, rec); + return rec; +} + +yasm_symrec * +yasm_symtab_define_curpos(yasm_symtab *symtab, const char *name, + yasm_bytecode *precbc, unsigned long line) +{ + yasm_symrec *rec = symtab_define(symtab, name, SYM_CURPOS, 0, line); + if (yasm_error_occurred()) + return rec; + rec->value.precbc = precbc; + return rec; +} + +yasm_symrec * +yasm_symtab_define_special(yasm_symtab *symtab, const char *name, + yasm_sym_vis vis) +{ + yasm_symrec *rec = symtab_define(symtab, name, SYM_SPECIAL, 1, 0); + if (yasm_error_occurred()) + return rec; + rec->status |= YASM_SYM_VALUED; + rec->visibility = vis; + return rec; +} + +yasm_symrec * +yasm_symtab_declare(yasm_symtab *symtab, const char *name, yasm_sym_vis vis, + unsigned long line) +{ + yasm_symrec *rec = symtab_get_or_new(symtab, name, 1); + yasm_symrec_declare(rec, vis, line); + return rec; +} + +void +yasm_symrec_declare(yasm_symrec *rec, yasm_sym_vis vis, unsigned long line) +{ + /* Allowable combinations: + * Existing State-------------- vis New State------------------- + * DEFINED GLOBAL COMMON EXTERN GCE DEFINED GLOBAL COMMON EXTERN + * 0 - 0 0 GCE 0 G C E + * 0 - 0 1 GE 0 G 0 E + * 0 - 1 0 GC 0 G C 0 + * X 0 - 1 1 + * 1 - 0 0 G 1 G 0 0 + * X 1 - - 1 + * X 1 - 1 - + */ + if ((vis == YASM_SYM_GLOBAL) || + (!(rec->status & YASM_SYM_DEFINED) && + (!(rec->visibility & (YASM_SYM_COMMON | YASM_SYM_EXTERN)) || + ((rec->visibility & YASM_SYM_COMMON) && (vis == YASM_SYM_COMMON)) || + ((rec->visibility & YASM_SYM_EXTERN) && (vis == YASM_SYM_EXTERN))))) { + rec->decl_line = line; + rec->visibility |= vis; + } else + yasm_error_set(YASM_ERROR_GENERAL, + N_("duplicate definition of `%s'; first defined on line %lu"), + rec->name, rec->def_line!=0 ? rec->def_line : rec->decl_line); +} + +typedef struct symtab_finalize_info { + unsigned long firstundef_line; + int undef_extern; + yasm_errwarns *errwarns; +} symtab_finalize_info; + +static int +symtab_parser_finalize_checksym(yasm_symrec *sym, /*@null@*/ void *d) +{ + symtab_finalize_info *info = (symtab_finalize_info *)d; + + /* error if a symbol is used but never defined or extern/common declared */ + if ((sym->status & YASM_SYM_USED) && !(sym->status & YASM_SYM_DEFINED) && + !(sym->visibility & (YASM_SYM_EXTERN | YASM_SYM_COMMON))) { + if (info->undef_extern) + sym->visibility |= YASM_SYM_EXTERN; + else { + yasm_error_set(YASM_ERROR_GENERAL, + N_("undefined symbol `%s' (first use)"), sym->name); + yasm_errwarn_propagate(info->errwarns, sym->use_line); + if (sym->use_line < info->firstundef_line) + info->firstundef_line = sym->use_line; + } + } + + return 0; +} + +void +yasm_symtab_parser_finalize(yasm_symtab *symtab, int undef_extern, + yasm_errwarns *errwarns) +{ + symtab_finalize_info info; + info.firstundef_line = ULONG_MAX; + info.undef_extern = undef_extern; + info.errwarns = errwarns; + yasm_symtab_traverse(symtab, &info, symtab_parser_finalize_checksym); + if (info.firstundef_line < ULONG_MAX) { + yasm_error_set(YASM_ERROR_GENERAL, + N_(" (Each undefined symbol is reported only once.)")); + yasm_errwarn_propagate(errwarns, info.firstundef_line); + } +} + +void +yasm_symtab_destroy(yasm_symtab *symtab) +{ + HAMT_destroy(symtab->sym_table, symrec_destroy_one); + + while (!SLIST_EMPTY(&symtab->non_table_syms)) { + non_table_symrec *sym = SLIST_FIRST(&symtab->non_table_syms); + SLIST_REMOVE_HEAD(&symtab->non_table_syms, link); + symrec_destroy_one(sym->rec); + yasm_xfree(sym); + } + + yasm_xfree(symtab); +} + +typedef struct symrec_print_data { + FILE *f; + int indent_level; +} symrec_print_data; + +/*@+voidabstract@*/ +static int +symrec_print_wrapper(yasm_symrec *sym, /*@null@*/ void *d) +{ + symrec_print_data *data = (symrec_print_data *)d; + assert(data != NULL); + fprintf(data->f, "%*sSymbol `%s'\n", data->indent_level, "", sym->name); + yasm_symrec_print(sym, data->f, data->indent_level+1); + return 0; +} + +void +yasm_symtab_print(yasm_symtab *symtab, FILE *f, int indent_level) +{ + symrec_print_data data; + data.f = f; + data.indent_level = indent_level; + yasm_symtab_traverse(symtab, &data, symrec_print_wrapper); +} +/*@=voidabstract@*/ + +const char * +yasm_symrec_get_name(const yasm_symrec *sym) +{ + return sym->name; +} + +char * +yasm_symrec_get_global_name(const yasm_symrec *sym, const yasm_object *object) +{ + if (sym->visibility & (YASM_SYM_GLOBAL|YASM_SYM_COMMON|YASM_SYM_EXTERN)) { + char *name = yasm_xmalloc(strlen(object->global_prefix) + + strlen(sym->name) + + strlen(object->global_suffix) + 1); + strcpy(name, object->global_prefix); + strcat(name, sym->name); + strcat(name, object->global_suffix); + return name; + } + return yasm__xstrdup(sym->name); +} + +yasm_sym_vis +yasm_symrec_get_visibility(const yasm_symrec *sym) +{ + return sym->visibility; +} + +yasm_sym_status +yasm_symrec_get_status(const yasm_symrec *sym) +{ + return sym->status; +} + +unsigned long +yasm_symrec_get_def_line(const yasm_symrec *sym) +{ + return sym->def_line; +} + +unsigned long +yasm_symrec_get_decl_line(const yasm_symrec *sym) +{ + return sym->decl_line; +} + +unsigned long +yasm_symrec_get_use_line(const yasm_symrec *sym) +{ + return sym->use_line; +} + +const yasm_expr * +yasm_symrec_get_equ(const yasm_symrec *sym) +{ + if (sym->type == SYM_EQU && (sym->status & YASM_SYM_VALUED)) + return sym->value.expn; + return (const yasm_expr *)NULL; +} + +int +yasm_symrec_get_label(const yasm_symrec *sym, + yasm_symrec_get_label_bytecodep *precbc) +{ + if (!(sym->type == SYM_LABEL || sym->type == SYM_CURPOS) + || !sym->value.precbc) { + *precbc = (yasm_symrec_get_label_bytecodep)0xDEADBEEF; + return 0; + } + *precbc = sym->value.precbc; + return 1; +} + +void +yasm_symrec_set_size(yasm_symrec *sym, int size) +{ + sym->size = size; +} + +int +yasm_symrec_get_size(const yasm_symrec *sym) +{ + return sym->size; +} + +void +yasm_symrec_set_segment(yasm_symrec *sym, const char *segment) +{ + sym->segment = segment; +} + +const char * +yasm_symrec_get_segment(const yasm_symrec *sym) +{ + return sym->segment; +} + +int +yasm_symrec_is_abs(const yasm_symrec *sym) +{ + return (sym->def_line == 0 && sym->type == SYM_EQU && + sym->name[0] == '\0'); +} + +int +yasm_symrec_is_special(const yasm_symrec *sym) +{ + return (sym->type == SYM_SPECIAL); +} + +int +yasm_symrec_is_curpos(const yasm_symrec *sym) +{ + return (sym->type == SYM_CURPOS); +} + +void +yasm_symrec_set_objext_valparams(yasm_symrec *sym, + /*@only@*/ yasm_valparamhead *objext_valparams) +{ + yasm_symrec_add_data(sym, &objext_valparams_cb, objext_valparams); +} + +yasm_valparamhead * +yasm_symrec_get_objext_valparams(yasm_symrec *sym) +{ + return yasm_symrec_get_data(sym, &objext_valparams_cb); +} + +void +yasm_symrec_set_common_size(yasm_symrec *sym, + /*@only@*/ yasm_expr *common_size) +{ + yasm_expr **ep = yasm_xmalloc(sizeof(yasm_expr *)); + *ep = common_size; + yasm_symrec_add_data(sym, &common_size_cb, ep); +} + +yasm_expr ** +yasm_symrec_get_common_size(yasm_symrec *sym) +{ + return (yasm_expr **)yasm_symrec_get_data(sym, &common_size_cb); +} + +void * +yasm_symrec_get_data(yasm_symrec *sym, + const yasm_assoc_data_callback *callback) +{ + return yasm__assoc_data_get(sym->assoc_data, callback); +} + +void +yasm_symrec_add_data(yasm_symrec *sym, + const yasm_assoc_data_callback *callback, void *data) +{ + sym->assoc_data = yasm__assoc_data_add(sym->assoc_data, callback, data); +} + +void +yasm_symrec_print(const yasm_symrec *sym, FILE *f, int indent_level) +{ + switch (sym->type) { + case SYM_UNKNOWN: + fprintf(f, "%*s-Unknown (Common/Extern)-\n", indent_level, ""); + break; + case SYM_EQU: + fprintf(f, "%*s_EQU_\n", indent_level, ""); + fprintf(f, "%*sExpn=", indent_level, ""); + if (sym->status & YASM_SYM_VALUED) + yasm_expr_print(sym->value.expn, f); + else + fprintf(f, "***UNVALUED***"); + fprintf(f, "\n"); + break; + case SYM_LABEL: + case SYM_CURPOS: + fprintf(f, "%*s_%s_\n%*sSection:\n", indent_level, "", + sym->type == SYM_LABEL ? "Label" : "CurPos", + indent_level, ""); + yasm_section_print(yasm_bc_get_section(sym->value.precbc), f, + indent_level+1, 0); + fprintf(f, "%*sPreceding bytecode:\n", indent_level, ""); + yasm_bc_print(sym->value.precbc, f, indent_level+1); + break; + case SYM_SPECIAL: + fprintf(f, "%*s-Special-\n", indent_level, ""); + break; + } + + fprintf(f, "%*sStatus=", indent_level, ""); + if (sym->status == YASM_SYM_NOSTATUS) + fprintf(f, "None\n"); + else { + if (sym->status & YASM_SYM_USED) + fprintf(f, "Used,"); + if (sym->status & YASM_SYM_DEFINED) + fprintf(f, "Defined,"); + if (sym->status & YASM_SYM_VALUED) + fprintf(f, "Valued,"); + if (sym->status & YASM_SYM_NOTINTABLE) + fprintf(f, "Not in Table,"); + fprintf(f, "\n"); + } + + fprintf(f, "%*sVisibility=", indent_level, ""); + if (sym->visibility == YASM_SYM_LOCAL) + fprintf(f, "Local\n"); + else { + if (sym->visibility & YASM_SYM_GLOBAL) + fprintf(f, "Global,"); + if (sym->visibility & YASM_SYM_COMMON) + fprintf(f, "Common,"); + if (sym->visibility & YASM_SYM_EXTERN) + fprintf(f, "Extern,"); + fprintf(f, "\n"); + } + + if (sym->assoc_data) { + fprintf(f, "%*sAssociated data:\n", indent_level, ""); + yasm__assoc_data_print(sym->assoc_data, f, indent_level+1); + } + + fprintf(f, "%*sLine Index (Defined)=%lu\n", indent_level, "", + sym->def_line); + fprintf(f, "%*sLine Index (Declared)=%lu\n", indent_level, "", + sym->decl_line); + fprintf(f, "%*sLine Index (Used)=%lu\n", indent_level, "", sym->use_line); +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/symrec.h b/third-party/yasm/yasm-1.3.0/libyasm/symrec.h new file mode 100644 index 0000000000..b1f797c647 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/symrec.h @@ -0,0 +1,437 @@ +/** + * \file libyasm/symrec.h + * \brief YASM symbol table interface. + * + * \license + * Copyright (C) 2001-2007 Michael Urman, Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_SYMREC_H +#define YASM_SYMREC_H + +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +/** Symbol status. YASM_SYM_DEFINED is set by yasm_symtab_define_label(), + * yasm_symtab_define_equ(), or yasm_symtab_declare()/yasm_symrec_declare() + * with a visibility of #YASM_SYM_EXTERN or #YASM_SYM_COMMON. + */ +typedef enum yasm_sym_status { + YASM_SYM_NOSTATUS = 0, /**< no status */ + YASM_SYM_USED = 1 << 0, /**< for use before definition */ + YASM_SYM_DEFINED = 1 << 1, /**< once it's been defined in the file */ + YASM_SYM_VALUED = 1 << 2, /**< once its value has been determined */ + YASM_SYM_NOTINTABLE = 1 << 3 /**< if it's not in sym_table (ex. '$') */ +} yasm_sym_status; + +/** Symbol record visibility. + * \note YASM_SYM_EXTERN and YASM_SYM_COMMON are mutually exclusive. + */ +typedef enum yasm_sym_vis { + YASM_SYM_LOCAL = 0, /**< Default, local only */ + YASM_SYM_GLOBAL = 1 << 0, /**< If symbol is declared GLOBAL */ + YASM_SYM_COMMON = 1 << 1, /**< If symbol is declared COMMON */ + YASM_SYM_EXTERN = 1 << 2, /**< If symbol is declared EXTERN */ + YASM_SYM_DLOCAL = 1 << 3 /**< If symbol is explicitly declared LOCAL */ +} yasm_sym_vis; + +/** Create a new symbol table. */ +YASM_LIB_DECL +yasm_symtab *yasm_symtab_create(void); + +/** Destroy a symbol table and all internal symbols. + * \param symtab symbol table + * \warning All yasm_symrec *'s into this symbol table become invalid after + * this is called! + */ +YASM_LIB_DECL +void yasm_symtab_destroy(/*@only@*/ yasm_symtab *symtab); + +/** Set the symbol table to be case sensitive or not. + * Should be called before adding any symbol. + * \param symtab symbol table + * \param sensitive whether the symbol table should be case sensitive. + */ +YASM_LIB_DECL +void yasm_symtab_set_case_sensitive(yasm_symtab *symtab, int sensitive); + +/** Get a reference to the symbol table's "absolute" symbol. This is + * essentially an EQU with no name and value 0, and is used for relocating + * absolute current-position-relative values. + * \see yasm_value_set_curpos_rel(). + * \param symtab symbol table + * \return Absolute symbol (dependent pointer, do not free). + */ +YASM_LIB_DECL +/*@dependent@*/ yasm_symrec *yasm_symtab_abs_sym(yasm_symtab *symtab); + +/** Get a reference to (use) a symbol. The symbol does not necessarily need to + * be defined before it is used. + * \param symtab symbol table + * \param name symbol name + * \param line virtual line where referenced + * \return Symbol (dependent pointer, do not free). + */ +YASM_LIB_DECL +/*@dependent@*/ yasm_symrec *yasm_symtab_use + (yasm_symtab *symtab, const char *name, unsigned long line); + +/** Get a reference to a symbol, without "using" it. Should be used for cases + * when an internal assembler usage of a symbol shouldn't be treated like a + * normal user symbol usage. + * \param symtab symbol table + * \param name symbol name + * \return Symbol (dependent pointer, do not free). May be NULL if symbol + * doesn't exist. + */ +YASM_LIB_DECL +/*@null@*/ /*@dependent@*/ yasm_symrec *yasm_symtab_get + (yasm_symtab *symtab, const char *name); + +/** Define a symbol as an EQU value. + * \param symtab symbol table + * \param name symbol (EQU) name + * \param e EQU value (expression) + * \param line virtual line of EQU + * \return Symbol (dependent pointer, do not free). + */ +YASM_LIB_DECL +/*@dependent@*/ yasm_symrec *yasm_symtab_define_equ + (yasm_symtab *symtab, const char *name, /*@keep@*/ yasm_expr *e, + unsigned long line); + +/** Define a symbol as a label. + * \param symtab symbol table + * \param name symbol (label) name + * \param precbc bytecode preceding label + * \param in_table nonzero if the label should be inserted into the symbol + * table (some specially-generated ones should not be) + * \param line virtual line of label + * \return Symbol (dependent pointer, do not free). + */ +YASM_LIB_DECL +/*@dependent@*/ yasm_symrec *yasm_symtab_define_label + (yasm_symtab *symtab, const char *name, + /*@dependent@*/ yasm_bytecode *precbc, int in_table, unsigned long line); + +/** Define a symbol as a label representing the current assembly position. + * This should be used for this purpose instead of yasm_symtab_define_label() + * as value_finalize_scan() looks for usage of this symbol type for special + * handling. The symbol created is not inserted into the symbol table. + * \param symtab symbol table + * \param name symbol (label) name + * \param precbc bytecode preceding label + * \param line virtual line of label + * \return Symbol (dependent pointer, do not free). + */ +YASM_LIB_DECL +/*@dependent@*/ yasm_symrec *yasm_symtab_define_curpos + (yasm_symtab *symtab, const char *name, + /*@dependent@*/ yasm_bytecode *precbc, unsigned long line); + +/** Define a special symbol that will appear in the symbol table and have a + * defined name, but have no other data associated with it within the + * standard symrec. + * \param symtab symbol table + * \param name symbol name + * \param vis symbol visibility + * \return Symbol (dependent pointer, do not free). + */ +YASM_LIB_DECL +/*@dependent@*/ yasm_symrec *yasm_symtab_define_special + (yasm_symtab *symtab, const char *name, yasm_sym_vis vis); + +/** Declare external visibility of a symbol. + * \note Not all visibility combinations are allowed. + * \param symtab symbol table + * \param name symbol name + * \param vis visibility + * \param line virtual line of visibility-setting + * \return Symbol (dependent pointer, do not free). + */ +YASM_LIB_DECL +/*@dependent@*/ yasm_symrec *yasm_symtab_declare + (yasm_symtab *symtab, const char *name, yasm_sym_vis vis, + unsigned long line); + +/** Declare external visibility of a symbol. + * \note Not all visibility combinations are allowed. + * \param symrec symbol + * \param vis visibility + * \param line virtual line of visibility-setting + */ +YASM_LIB_DECL +void yasm_symrec_declare(yasm_symrec *symrec, yasm_sym_vis vis, + unsigned long line); + +/** Callback function for yasm_symrec_traverse(). + * \param sym symbol + * \param d data passed into yasm_symrec_traverse() + * \return Nonzero to stop symbol traversal. + */ +typedef int (*yasm_symtab_traverse_callback) + (yasm_symrec *sym, /*@null@*/ void *d); + +/** Traverse all symbols in the symbol table. + * \param symtab symbol table + * \param d data to pass to each call of callback function + * \param func callback function called on each symbol + * \return Nonzero value returned by callback function if it ever returned + * nonzero. + */ +YASM_LIB_DECL +int /*@alt void@*/ yasm_symtab_traverse + (yasm_symtab *symtab, /*@null@*/ void *d, + yasm_symtab_traverse_callback func); + +/** Symbol table iterator (opaque type). */ +typedef struct yasm_symtab_iter yasm_symtab_iter; + +/** Get an iterator pointing to the first symbol in the symbol table. + * \param symtab symbol table + * \return Iterator for the symbol table. + */ +YASM_LIB_DECL +const yasm_symtab_iter *yasm_symtab_first(const yasm_symtab *symtab); + +/** Move a symbol table iterator to the next symbol in the symbol table. + * \param prev Previous iterator value + * \return Next iterator value, or NULL if no more symbols in the table. + */ +YASM_LIB_DECL +/*@null@*/ const yasm_symtab_iter *yasm_symtab_next + (const yasm_symtab_iter *prev); + +/** Get the symbol corresponding to the current symbol table iterator value. + * \param cur iterator value + * \return Corresponding symbol. + */ +YASM_LIB_DECL +yasm_symrec *yasm_symtab_iter_value(const yasm_symtab_iter *cur); + +/** Finalize symbol table after parsing stage. Checks for symbols that are + * used but never defined or declared #YASM_SYM_EXTERN or #YASM_SYM_COMMON. + * \param symtab symbol table + * \param undef_extern if nonzero, all undef syms should be declared extern + * \param errwarns error/warning set + * \note Errors/warnings are stored into errwarns. + */ +YASM_LIB_DECL +void yasm_symtab_parser_finalize(yasm_symtab *symtab, int undef_extern, + yasm_errwarns *errwarns); + +/** Print the symbol table. For debugging purposes. + * \param symtab symbol table + * \param f file + * \param indent_level indentation level + */ +YASM_LIB_DECL +void yasm_symtab_print(yasm_symtab *symtab, FILE *f, int indent_level); + +/** Get the name of a symbol. + * \param sym symbol + * \return Symbol name. + */ +YASM_LIB_DECL +/*@observer@*/ const char *yasm_symrec_get_name(const yasm_symrec *sym); + +/** Get the externally-visible (global) name of a symbol. + * \param sym symbol + * \param object object + * \return Externally-visible symbol name (allocated, caller must free). + */ +YASM_LIB_DECL +/*@only@*/ char *yasm_symrec_get_global_name(const yasm_symrec *sym, + const yasm_object *object); + +/** Get the visibility of a symbol. + * \param sym symbol + * \return Symbol visibility. + */ +YASM_LIB_DECL +yasm_sym_vis yasm_symrec_get_visibility(const yasm_symrec *sym); + +/** Get the status of a symbol. + * \param sym symbol + * \return Symbol status. + */ +YASM_LIB_DECL +yasm_sym_status yasm_symrec_get_status(const yasm_symrec *sym); + +/** Get the virtual line of where a symbol was first defined. + * \param sym symbol + * \return line virtual line + */ +YASM_LIB_DECL +unsigned long yasm_symrec_get_def_line(const yasm_symrec *sym); + +/** Get the virtual line of where a symbol was first declared. + * \param sym symbol + * \return line virtual line + */ +YASM_LIB_DECL +unsigned long yasm_symrec_get_decl_line(const yasm_symrec *sym); + +/** Get the virtual line of where a symbol was first used. + * \param sym symbol + * \return line virtual line + */ +YASM_LIB_DECL +unsigned long yasm_symrec_get_use_line(const yasm_symrec *sym); + +/** Get EQU value of a symbol. + * \param sym symbol + * \return EQU value, or NULL if symbol is not an EQU or is not defined. + */ +YASM_LIB_DECL +/*@observer@*/ /*@null@*/ const yasm_expr *yasm_symrec_get_equ + (const yasm_symrec *sym); + +/** Dependent pointer to a bytecode. */ +typedef /*@dependent@*/ yasm_bytecode *yasm_symrec_get_label_bytecodep; + +/** Get the label location of a symbol. + * \param sym symbol + * \param precbc bytecode preceding label (output) + * \return 0 if not symbol is not a label or if the symbol's visibility is + * #YASM_SYM_EXTERN or #YASM_SYM_COMMON (not defined in the file). + */ +YASM_LIB_DECL +int yasm_symrec_get_label(const yasm_symrec *sym, + /*@out@*/ yasm_symrec_get_label_bytecodep *precbc); + +/** Set the size of a symbol. + * \param sym symbol + * \param size size to be set + */ +YASM_LIB_DECL +void yasm_symrec_set_size(yasm_symrec *sym, int size); + +/** Get the size of a symbol. + * \param sym symbol + * \return size of the symbol, 0 if none specified by the user. + */ +YASM_LIB_DECL +int yasm_symrec_get_size(const yasm_symrec *sym); + +/** Set the segment of a symbol. + * \param sym symbol + * \param segment segment to be set + */ +YASM_LIB_DECL +void yasm_symrec_set_segment(yasm_symrec *sym, const char *segment); + +/** Get the segment of a symbol. + * \param sym symbol + * \return segment of the symbol, NULL if none specified by the user. + */ +YASM_LIB_DECL +const char *yasm_symrec_get_segment(const yasm_symrec *sym); + +/** Determine if symbol is the "absolute" symbol created by + * yasm_symtab_abs_sym(). + * \param sym symbol + * \return 0 if symbol is not the "absolute" symbol, nonzero otherwise. + */ +YASM_LIB_DECL +int yasm_symrec_is_abs(const yasm_symrec *sym); + +/** Determine if symbol is a special symbol. + * \param sym symbol + * \return 0 if symbol is not a special symbol, nonzero otherwise. + */ +YASM_LIB_DECL +int yasm_symrec_is_special(const yasm_symrec *sym); + +/** Determine if symbol is a label representing the current assembly position. + * \param sym symbol + * \return 0 if symbol is not a current position label, nonzero otherwise. + */ +YASM_LIB_DECL +int yasm_symrec_is_curpos(const yasm_symrec *sym); + +/** Set object-extended valparams. + * \param sym symbol + * \param objext_valparams object-extended valparams + */ +YASM_LIB_DECL +void yasm_symrec_set_objext_valparams + (yasm_symrec *sym, /*@only@*/ yasm_valparamhead *objext_valparams); + +/** Get object-extended valparams, if any, associated with symbol's + * declaration. + * \param sym symbol + * \return Object-extended valparams (NULL if none). + */ +YASM_LIB_DECL +/*@null@*/ /*@dependent@*/ yasm_valparamhead *yasm_symrec_get_objext_valparams + (yasm_symrec *sym); + +/** Set common size of symbol. + * \param sym symbol + * \param common_size common size expression + */ +YASM_LIB_DECL +void yasm_symrec_set_common_size + (yasm_symrec *sym, /*@only@*/ yasm_expr *common_size); + +/** Get common size of symbol, if symbol is declared COMMON and a size was set + * for it. + * \param sym symbol + * \return Common size (NULL if none). + */ +YASM_LIB_DECL +/*@dependent@*/ /*@null@*/ yasm_expr **yasm_symrec_get_common_size + (yasm_symrec *sym); + +/** Get associated data for a symbol and data callback. + * \param sym symbol + * \param callback callback used when adding data + * \return Associated data (NULL if none). + */ +YASM_LIB_DECL +/*@dependent@*/ /*@null@*/ void *yasm_symrec_get_data + (yasm_symrec *sym, const yasm_assoc_data_callback *callback); + +/** Add associated data to a symbol. + * \attention Deletes any existing associated data for that data callback. + * \param sym symbol + * \param callback callback + * \param data data to associate + */ +YASM_LIB_DECL +void yasm_symrec_add_data(yasm_symrec *sym, + const yasm_assoc_data_callback *callback, + /*@only@*/ /*@null@*/ void *data); + +/** Print a symbol. For debugging purposes. + * \param f file + * \param indent_level indentation level + * \param sym symbol + */ +YASM_LIB_DECL +void yasm_symrec_print(const yasm_symrec *sym, FILE *f, int indent_level); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/1shl0.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/1shl0.asm new file mode 100644 index 0000000000..d69930adf4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/1shl0.asm @@ -0,0 +1 @@ +dd (1<<0) diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/1shl0.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/1shl0.hex new file mode 100644 index 0000000000..607fb55a44 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/1shl0.hex @@ -0,0 +1,4 @@ +01 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/libyasm/tests/Makefile.inc new file mode 100644 index 0000000000..9c038a14ab --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/Makefile.inc @@ -0,0 +1,114 @@ +TESTS += bitvect_test +TESTS += floatnum_test +TESTS += leb128_test +TESTS += splitpath_test +TESTS += combpath_test +TESTS += uncstring_test +TESTS += libyasm/tests/libyasm_test.sh + +EXTRA_DIST += libyasm/tests/libyasm_test.sh +EXTRA_DIST += libyasm/tests/1shl0.asm +EXTRA_DIST += libyasm/tests/1shl0.hex +EXTRA_DIST += libyasm/tests/absloop-err.asm +EXTRA_DIST += libyasm/tests/absloop-err.errwarn +EXTRA_DIST += libyasm/tests/charconst64.asm +EXTRA_DIST += libyasm/tests/charconst64.hex +EXTRA_DIST += libyasm/tests/data-rawvalue.asm +EXTRA_DIST += libyasm/tests/data-rawvalue.hex +EXTRA_DIST += libyasm/tests/duplabel-err.asm +EXTRA_DIST += libyasm/tests/duplabel-err.errwarn +EXTRA_DIST += libyasm/tests/emptydata.asm +EXTRA_DIST += libyasm/tests/emptydata.hex +EXTRA_DIST += libyasm/tests/equ-expand.asm +EXTRA_DIST += libyasm/tests/equ-expand.hex +EXTRA_DIST += libyasm/tests/expr-fold-level.asm +EXTRA_DIST += libyasm/tests/expr-fold-level.hex +EXTRA_DIST += libyasm/tests/expr-simplify-identity.asm +EXTRA_DIST += libyasm/tests/expr-simplify-identity.hex +EXTRA_DIST += libyasm/tests/expr-wide-ident.asm +EXTRA_DIST += libyasm/tests/expr-wide-ident.hex +EXTRA_DIST += libyasm/tests/externdef.asm +EXTRA_DIST += libyasm/tests/externdef.errwarn +EXTRA_DIST += libyasm/tests/externdef.hex +EXTRA_DIST += libyasm/tests/incbin.asm +EXTRA_DIST += libyasm/tests/incbin.hex +EXTRA_DIST += libyasm/tests/jmpsize1.asm +EXTRA_DIST += libyasm/tests/jmpsize1.hex +EXTRA_DIST += libyasm/tests/jmpsize1-err.asm +EXTRA_DIST += libyasm/tests/jmpsize1-err.errwarn +EXTRA_DIST += libyasm/tests/opt-align1.asm +EXTRA_DIST += libyasm/tests/opt-align1.hex +EXTRA_DIST += libyasm/tests/opt-align2.asm +EXTRA_DIST += libyasm/tests/opt-align2.hex +EXTRA_DIST += libyasm/tests/opt-align3.asm +EXTRA_DIST += libyasm/tests/opt-align3.hex +EXTRA_DIST += libyasm/tests/opt-circular1-err.asm +EXTRA_DIST += libyasm/tests/opt-circular1-err.errwarn +EXTRA_DIST += libyasm/tests/opt-circular2-err.asm +EXTRA_DIST += libyasm/tests/opt-circular2-err.errwarn +EXTRA_DIST += libyasm/tests/opt-circular3-err.asm +EXTRA_DIST += libyasm/tests/opt-circular3-err.errwarn +EXTRA_DIST += libyasm/tests/opt-gvmat64.asm +EXTRA_DIST += libyasm/tests/opt-gvmat64.hex +EXTRA_DIST += libyasm/tests/opt-immexpand.asm +EXTRA_DIST += libyasm/tests/opt-immexpand.hex +EXTRA_DIST += libyasm/tests/opt-immnoexpand.asm +EXTRA_DIST += libyasm/tests/opt-immnoexpand.hex +EXTRA_DIST += libyasm/tests/opt-oldalign.asm +EXTRA_DIST += libyasm/tests/opt-oldalign.hex +EXTRA_DIST += libyasm/tests/opt-struc.asm +EXTRA_DIST += libyasm/tests/opt-struc.hex +EXTRA_DIST += libyasm/tests/reserve-err1.asm +EXTRA_DIST += libyasm/tests/reserve-err1.errwarn +EXTRA_DIST += libyasm/tests/reserve-err2.asm +EXTRA_DIST += libyasm/tests/reserve-err2.errwarn +EXTRA_DIST += libyasm/tests/strucsize.asm +EXTRA_DIST += libyasm/tests/strucsize.hex +EXTRA_DIST += libyasm/tests/times0.asm +EXTRA_DIST += libyasm/tests/times0.hex +EXTRA_DIST += libyasm/tests/timesfwd.asm +EXTRA_DIST += libyasm/tests/timesfwd.hex +EXTRA_DIST += libyasm/tests/timesover-err.asm +EXTRA_DIST += libyasm/tests/timesover-err.errwarn +EXTRA_DIST += libyasm/tests/timesunder.asm +EXTRA_DIST += libyasm/tests/timesunder.hex +EXTRA_DIST += libyasm/tests/times-res.asm +EXTRA_DIST += libyasm/tests/times-res.errwarn +EXTRA_DIST += libyasm/tests/times-res.hex +EXTRA_DIST += libyasm/tests/unary.asm +EXTRA_DIST += libyasm/tests/unary.hex +EXTRA_DIST += libyasm/tests/value-err.asm +EXTRA_DIST += libyasm/tests/value-err.errwarn +EXTRA_DIST += libyasm/tests/value-samesym.asm +EXTRA_DIST += libyasm/tests/value-samesym.errwarn +EXTRA_DIST += libyasm/tests/value-samesym.hex +EXTRA_DIST += libyasm/tests/value-mask.asm +EXTRA_DIST += libyasm/tests/value-mask.errwarn +EXTRA_DIST += libyasm/tests/value-mask.hex +EXTRA_DIST += libyasm/tests/value-shr-symexpr.asm +EXTRA_DIST += libyasm/tests/value-shr-symexpr.hex + +check_PROGRAMS += bitvect_test +check_PROGRAMS += floatnum_test +check_PROGRAMS += leb128_test +check_PROGRAMS += splitpath_test +check_PROGRAMS += combpath_test +check_PROGRAMS += uncstring_test + +bitvect_test_SOURCES = libyasm/tests/bitvect_test.c +bitvect_test_LDADD = libyasm.a $(INTLLIBS) + +floatnum_test_SOURCES = libyasm/tests/floatnum_test.c +floatnum_test_LDADD = libyasm.a $(INTLLIBS) + +leb128_test_SOURCES = libyasm/tests/leb128_test.c +leb128_test_LDADD = libyasm.a $(INTLLIBS) + +splitpath_test_SOURCES = libyasm/tests/splitpath_test.c +splitpath_test_LDADD = libyasm.a $(INTLLIBS) + +combpath_test_SOURCES = libyasm/tests/combpath_test.c +combpath_test_LDADD = libyasm.a $(INTLLIBS) + +uncstring_test_SOURCES = libyasm/tests/uncstring_test.c +uncstring_test_LDADD = libyasm.a $(INTLLIBS) diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/absloop-err.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/absloop-err.asm new file mode 100644 index 0000000000..27e88a0ff1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/absloop-err.asm @@ -0,0 +1,6 @@ +[absolute x] +label1: +[absolute label1] +x: +[section .text] +mov ax, [x] diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/absloop-err.errwarn b/third-party/yasm/yasm-1.3.0/libyasm/tests/absloop-err.errwarn new file mode 100644 index 0000000000..29d3a33477 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/absloop-err.errwarn @@ -0,0 +1 @@ +-:6: error: circular reference detected in memory expression diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/bitvect_test.c b/third-party/yasm/yasm-1.3.0/libyasm/tests/bitvect_test.c new file mode 100644 index 0000000000..f7b341306e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/bitvect_test.c @@ -0,0 +1,176 @@ +/* + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 +#include +#include + +#include "libyasm/bitvect.h" + +static int +test_boot(void) +{ + if (BitVector_Boot() != ErrCode_Ok) + return 1; + return 0; +} + +typedef struct Val_s { + const char *ascii; + unsigned char result[10]; /* 80 bit result, little endian */ +} Val; + +Val oct_small_vals[] = { + { "0", + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + }, + { "1", + {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + }, + { "77", + {0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} + }, +}; + +Val oct_large_vals[] = { + { "7654321076543210", + {0x88, 0xC6, 0xFA, 0x88, 0xC6, 0xFA, 0x00, 0x00, 0x00, 0x00} + }, + { "12634727612534126530214", + {0x8C, 0xB0, 0x5A, 0xE1, 0xAA, 0xF8, 0x3A, 0x67, 0x05, 0x00} + }, + { "61076543210", + {0x88, 0xC6, 0xFA, 0x88, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00} + }, +}; + +wordptr testval; + +static void +num_family_setup(void) +{ + BitVector_Boot(); + testval = BitVector_Create(80, FALSE); +} + +static void +num_family_teardown(void) +{ + BitVector_Destroy(testval); +} + +static char result_msg[1024]; + +static int +num_check(Val *val) +{ + unsigned char ascii[64], *result; + unsigned int len; + int i; + int ret = 0; + + strcpy((char *)ascii, val->ascii); + strcpy(result_msg, "parser failure"); + if(BitVector_from_Oct(testval, ascii) != ErrCode_Ok) + return 1; + + result = BitVector_Block_Read(testval, &len); + + for (i=0; i<10; i++) + if (result[i] != val->result[i]) + ret = 1; + + if (ret) { + strcpy(result_msg, val->ascii); + for (i=0; i<10; i++) + sprintf((char *)ascii+3*i, "%02x ", result[i]); + strcat(result_msg, ": "); + strcat(result_msg, (char *)ascii); + } + free(result); + + return ret; +} + +static int +test_oct_small_num(void) +{ + Val *vals = oct_small_vals; + int i, num = sizeof(oct_small_vals)/sizeof(Val); + + for (i=0; i0 ? 'F':'.'); + fflush(stdout); + if (nf > 0) + sprintf(failed, "%s ** F: %s failed!\n", failed, testname); + return nf; +} +#define runtest(x,y,z) runtest_(#x,test_##x,y,z) + +int +main(void) +{ + int nf = 0; + + failed[0] = '\0'; + printf("Test bitvect_test: "); + nf += runtest(boot, NULL, NULL); + nf += runtest(oct_small_num, num_family_setup, num_family_teardown); + nf += runtest(oct_large_num, num_family_setup, num_family_teardown); + printf(" +%d-%d/3 %d%%\n%s", + 3-nf, nf, 100*(3-nf)/3, failed); + return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/charconst64.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/charconst64.asm new file mode 100644 index 0000000000..57856c0747 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/charconst64.asm @@ -0,0 +1,3 @@ +[bits 64] + +mov rax, '12345678' diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/charconst64.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/charconst64.hex new file mode 100644 index 0000000000..66b893ce6b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/charconst64.hex @@ -0,0 +1,10 @@ +48 +b8 +31 +32 +33 +34 +35 +36 +37 +38 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/combpath_test.c b/third-party/yasm/yasm-1.3.0/libyasm/tests/combpath_test.c new file mode 100644 index 0000000000..90f2e24134 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/combpath_test.c @@ -0,0 +1,139 @@ +/* + * + * Copyright (C) 2006-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 +#include +#include + +#include "libyasm/file.h" +#include "libyasm/coretype.h" + +typedef struct Test_Entry { + /* combpath function to test */ + char * (*combpath) (const char *from, const char *to); + + /* input "from" path */ + const char *from; + + /* input "to" path */ + const char *to; + + /* correct path returned */ + const char *out; +} Test_Entry; + +static Test_Entry tests[] = { + /* UNIX */ + {yasm__combpath_unix, "file1", "file2", "file2"}, + {yasm__combpath_unix, "./file1.ext", "./file2.ext", "file2.ext"}, + {yasm__combpath_unix, "/file1", "file2", "/file2"}, + {yasm__combpath_unix, "file1", "/file2", "/file2"}, + {yasm__combpath_unix, "/foo/file1", "../../file2", "/file2"}, + {yasm__combpath_unix, "/foo//file1", "../../file2", "/file2"}, + {yasm__combpath_unix, "foo/bar/file1", "../file2", "foo/file2"}, + {yasm__combpath_unix, "foo/bar/file1", "../../../file2", "../file2"}, + {yasm__combpath_unix, "foo/bar//file1", "../..//..//file2", "../file2"}, + {yasm__combpath_unix, "foo/bar/", "file2", "foo/bar/file2"}, + {yasm__combpath_unix, "../../file1", "../../file2", "../../../../file2"}, + {yasm__combpath_unix, "../foo/bar/../file1", "../../file2", "../foo/bar/../../../file2"}, + {yasm__combpath_unix, "/", "../file2", "/file2"}, + {yasm__combpath_unix, "../foo/", "../file2", "../file2"}, + {yasm__combpath_unix, "../foo/file1", "../../bar/file2", "../../bar/file2"}, + + /* Windows */ + {yasm__combpath_win, "file1", "file2", "file2"}, + {yasm__combpath_win, "./file1.ext", "./file2.ext", "file2.ext"}, + {yasm__combpath_win, "./file1.ext", ".\\file2.ext", "file2.ext"}, + {yasm__combpath_win, ".\\file1.ext", "./file2.ext", "file2.ext"}, + {yasm__combpath_win, "/file1", "file2", "\\file2"}, + {yasm__combpath_win, "\\file1", "file2", "\\file2"}, + {yasm__combpath_win, "file1", "/file2", "\\file2"}, + {yasm__combpath_win, "file1", "\\file2", "\\file2"}, + {yasm__combpath_win, "/foo\\file1", "../../file2", "\\file2"}, + {yasm__combpath_win, "\\foo\\\\file1", "..\\../file2", "\\file2"}, + {yasm__combpath_win, "foo/bar/file1", "../file2", "foo\\file2"}, + {yasm__combpath_win, "foo/bar/file1", "../..\\../file2", "..\\file2"}, + {yasm__combpath_win, "foo/bar//file1", "../..\\\\..//file2", "..\\file2"}, + {yasm__combpath_win, "foo/bar/", "file2", "foo\\bar\\file2"}, + {yasm__combpath_win, "..\\../file1", "../..\\file2", "..\\..\\..\\..\\file2"}, + {yasm__combpath_win, "../foo/bar\\\\../file1", "../..\\file2", "..\\foo\\bar\\..\\..\\..\\file2"}, + {yasm__combpath_win, "/", "../file2", "\\file2"}, + {yasm__combpath_win, "../foo/", "../file2", "..\\file2"}, + {yasm__combpath_win, "../foo/file1", "../..\\bar\\file2", "..\\..\\bar\\file2"}, + {yasm__combpath_win, "c:/file1.ext", "./file2.ext", "c:\\file2.ext"}, + {yasm__combpath_win, "e:\\path\\to/file1.ext", ".\\file2.ext", "e:\\path\\to\\file2.ext"}, + {yasm__combpath_win, ".\\file1.ext", "g:file2.ext", "g:file2.ext"}, +}; + +static char failed[1000]; +static char failmsg[100]; + +static int +run_test(Test_Entry *test) +{ + char *out; + const char *funcname; + + if (test->combpath == &yasm__combpath_unix) + funcname = "unix"; + else + funcname = "win"; + + out = test->combpath(test->from, test->to); + + if (strcmp(out, test->out) != 0) { + sprintf(failmsg, + "combpath_%s(\"%s\", \"%s\"): expected \"%s\", got \"%s\"!", + funcname, test->from, test->to, test->out, out); + yasm_xfree(out); + return 1; + } + + yasm_xfree(out); + return 0; +} + +int +main(void) +{ + int nf = 0; + int numtests = sizeof(tests)/sizeof(Test_Entry); + int i; + + failed[0] = '\0'; + printf("Test combpath_test: "); + for (i=0; i0 ? 'F':'.'); + fflush(stdout); + if (fail) + sprintf(failed, "%s ** F: %s\n", failed, failmsg); + nf += fail; + } + + printf(" +%d-%d/%d %d%%\n%s", + numtests-nf, nf, numtests, 100*(numtests-nf)/numtests, failed); + return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/data-rawvalue.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/data-rawvalue.asm new file mode 100644 index 0000000000..3ebc7d0cc3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/data-rawvalue.asm @@ -0,0 +1,3 @@ +x db 0 +dd 0,x,0 + diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/data-rawvalue.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/data-rawvalue.hex new file mode 100644 index 0000000000..089b49c8fd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/data-rawvalue.hex @@ -0,0 +1,13 @@ +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/duplabel-err.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/duplabel-err.asm new file mode 100644 index 0000000000..3d666b35f7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/duplabel-err.asm @@ -0,0 +1,18 @@ +%macro TESTMAC 0 +label: + mov ax, 5 + mov dx, 4 + mov cx, 3 +%endmacro + +db 6 + +db 7 + +TESTMAC + +db 8 +db 9 +TESTMAC +db 10 +TESTMAC diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/duplabel-err.errwarn b/third-party/yasm/yasm-1.3.0/libyasm/tests/duplabel-err.errwarn new file mode 100644 index 0000000000..4ce13bffaa --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/duplabel-err.errwarn @@ -0,0 +1,4 @@ +-:16: error: redefinition of `label' +-:12: error: `label' previously defined here +-:18: error: redefinition of `label' +-:12: error: `label' previously defined here diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/emptydata.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/emptydata.asm new file mode 100644 index 0000000000..27b56511c2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/emptydata.asm @@ -0,0 +1 @@ +db '' diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/emptydata.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/emptydata.hex new file mode 100644 index 0000000000..e69de29bb2 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/equ-expand.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/equ-expand.asm new file mode 100644 index 0000000000..eaa94213e8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/equ-expand.asm @@ -0,0 +1,9 @@ +nop +end1: + +line_out equ end1+258 ;length = 1 + 263 +real_end equ end1+258+264 + + cmp bx,(real_end-line_out)/4 + cmp bx,((end1+258+264)-(end1+258))/4 + cmp bx,(end1+258+264-end1-258)/4 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/equ-expand.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/equ-expand.hex new file mode 100644 index 0000000000..54a04f3b54 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/equ-expand.hex @@ -0,0 +1,10 @@ +90 +83 +fb +42 +83 +fb +42 +83 +fb +42 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/expr-fold-level.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/expr-fold-level.asm new file mode 100644 index 0000000000..814a62c58a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/expr-fold-level.asm @@ -0,0 +1,4 @@ +begin +A equ 09000h +a dd (A+(end-begin)+3) +end diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/expr-fold-level.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/expr-fold-level.hex new file mode 100644 index 0000000000..aba10f6db1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/expr-fold-level.hex @@ -0,0 +1,4 @@ +07 +90 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/expr-simplify-identity.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/expr-simplify-identity.asm new file mode 100644 index 0000000000..cda9c3bbfa --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/expr-simplify-identity.asm @@ -0,0 +1,4 @@ +d_key equ 0 +cachedata: DQ 0 +dtable: +cmp al, [esi + (dtable-cachedata) + ebx*4 + d_key] diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/expr-simplify-identity.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/expr-simplify-identity.hex new file mode 100644 index 0000000000..4a236bc5d5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/expr-simplify-identity.hex @@ -0,0 +1,13 @@ +00 +00 +00 +00 +00 +00 +00 +00 +67 +3a +44 +9e +08 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/expr-wide-ident.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/expr-wide-ident.asm new file mode 100644 index 0000000000..8a60e781f9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/expr-wide-ident.asm @@ -0,0 +1,2 @@ +lea edx, [lentry+edx+ecx] +lentry: diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/expr-wide-ident.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/expr-wide-ident.hex new file mode 100644 index 0000000000..f8d54ff38e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/expr-wide-ident.hex @@ -0,0 +1,9 @@ +67 +66 +8d +94 +0a +09 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/externdef.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/externdef.asm new file mode 100644 index 0000000000..3663af30c9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/externdef.asm @@ -0,0 +1,2 @@ +extern foo +foo: diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/externdef.errwarn b/third-party/yasm/yasm-1.3.0/libyasm/tests/externdef.errwarn new file mode 100644 index 0000000000..8ff4a7ee78 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/externdef.errwarn @@ -0,0 +1,2 @@ +-:1: warning: binary object format does not support extern variables +-:2: warning: `foo' both defined and declared extern diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/externdef.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/externdef.hex new file mode 100644 index 0000000000..e69de29bb2 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/floatnum_test.c b/third-party/yasm/yasm-1.3.0/libyasm/tests/floatnum_test.c new file mode 100644 index 0000000000..30b8d6ce38 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/floatnum_test.c @@ -0,0 +1,453 @@ +/* + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 +#include +#include + +#include "libyasm/floatnum.c" + +/* constants describing parameters of internal floating point format. + * (these should match those in src/floatnum.c !) + */ +#define MANT_BITS 80 +#define MANT_BYTES 10 + +typedef struct Init_Entry_s { + /* input ASCII value */ + const char *ascii; + + /* correct output from ASCII conversion */ + unsigned char mantissa[MANT_BYTES]; /* little endian mantissa - first + byte is not checked for + correctness. */ + unsigned short exponent; /* bias 32767 exponent */ + unsigned char sign; + unsigned char flags; + + /* correct output conversions - these should be *exact* matches */ + int ret32; + unsigned char result32[4]; + int ret64; + unsigned char result64[8]; + int ret80; + unsigned char result80[10]; +} Init_Entry; + +/* Values used for normalized tests */ +static Init_Entry normalized_vals[] = { + { "3.141592653589793", + {0xc6,0x0d,0xe9,0xbd,0x68,0x21,0xa2,0xda,0x0f,0xc9},0x8000,0,0, + 0, {0xdb,0x0f,0x49,0x40}, + 0, {0x18,0x2d,0x44,0x54,0xfb,0x21,0x09,0x40}, + 0, {0xe9,0xbd,0x68,0x21,0xa2,0xda,0x0f,0xc9,0x00,0x40} + }, + { "-3.141592653589793", + {0xc6,0x0d,0xe9,0xbd,0x68,0x21,0xa2,0xda,0x0f,0xc9},0x8000,1,0, + 0, {0xdb,0x0f,0x49,0xc0}, + 0, {0x18,0x2d,0x44,0x54,0xfb,0x21,0x09,0xc0}, + 0, {0xe9,0xbd,0x68,0x21,0xa2,0xda,0x0f,0xc9,0x00,0xc0} + }, + { "1.e16", + {0x00,0x00,0x00,0x00,0x00,0x04,0xbf,0xc9,0x1b,0x8e},0x8034,0,0, + 0, {0xca,0x1b,0x0e,0x5a}, + 0, {0x00,0x80,0xe0,0x37,0x79,0xc3,0x41,0x43}, + 0, {0x00,0x00,0x00,0x04,0xbf,0xc9,0x1b,0x8e,0x34,0x40} + }, + { "1.6e-20", + {0xf6,0xd3,0xee,0x7b,0xda,0x74,0x50,0xa0,0x1d,0x97},0x7fbd,0,0, + 0, {0xa0,0x1d,0x97,0x1e}, + 0, {0x4f,0x9b,0x0e,0x0a,0xb4,0xe3,0xd2,0x3b}, + 0, {0xef,0x7b,0xda,0x74,0x50,0xa0,0x1d,0x97,0xbd,0x3f} + }, + { "-5876.", + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0xb7},0x800b,1,0, + 0, {0x00,0xa0,0xb7,0xc5}, + 0, {0x00,0x00,0x00,0x00,0x00,0xf4,0xb6,0xc0}, + 0, {0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0xb7,0x0b,0xc0} + }, + /* Edge cases for rounding wrap. */ + { "1.00000", + {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},0x7ffe,0,0, + 0, {0x00,0x00,0x80,0x3f}, + 0, {0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f}, + 0, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x3f} + }, + { "1.000000", + {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},0x7ffe,0,0, + 0, {0x00,0x00,0x80,0x3f}, + 0, {0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f}, + 0, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x3f} + }, +}; + +/* Still normalized values, but edge cases of various sizes, testing underflow/ + * overflow checks as well. + */ +static Init_Entry normalized_edgecase_vals[] = { + /* 32-bit edges */ + { "1.1754943508222875e-38", + {0xd5,0xf2,0x82,0xff,0xff,0xff,0xff,0xff,0xff,0xff},0x7f80,0,0, + 0, {0x00,0x00,0x80,0x00}, + 0, {0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x38}, + 0, {0x83,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x3f} + }, + { "3.4028234663852886e+38", + {0x21,0x35,0x0a,0x00,0x00,0x00,0x00,0xff,0xff,0xff},0x807e,0,0, + 0, {0xff,0xff,0x7f,0x7f}, + 0, {0x00,0x00,0x00,0xe0,0xff,0xff,0xef,0x47}, + 0, {0x0a,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x7e,0x40} + }, + /* 64-bit edges */ + { "2.2250738585072014E-308", + {0x26,0x18,0x46,0x00,0x00,0x00,0x00,0x00,0x00,0x80},0x7c01,0,0, + -1, {0x00,0x00,0x00,0x00}, + 0, {0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00}, + 0, {0x46,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x3c} + }, + { "1.7976931348623157E+308", + {0x26,0x6b,0xac,0xf7,0xff,0xff,0xff,0xff,0xff,0xff},0x83fe,0,0, + 1, {0x00,0x00,0x80,0x7f}, + 0, {0xff,0xff,0xff,0xff,0xff,0xff,0xef,0x7f}, + 0, {0xac,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x43} + }, + /* 80-bit edges */ +/* { "3.3621E-4932", + {},,0,0, + -1, {0x00,0x00,0x00,0x00}, + -1, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, + 0, {} + }, + { "1.1897E+4932", + {},,0,0, + 1, {0x00,0x00,0x80,0x7f}, + 1, {}, + 0, {} + },*/ + /* internal format edges */ +/* { + }, + { + },*/ +}; + +static yasm_floatnum *flt; + +/* failure messages */ +static char ret_msg[1024], result_msg[1024]; + +static void +new_setup(Init_Entry *vals, int i) +{ + flt = yasm_floatnum_create(vals[i].ascii); + strcpy(result_msg, vals[i].ascii); + strcat(result_msg, ": incorrect "); +} + +static int +new_check_flt(Init_Entry *val) +{ + unsigned char *mantissa; + int i, result = 0; + unsigned int len; + + mantissa = BitVector_Block_Read(flt->mantissa, &len); + for (i=1;imantissa[i]) + result = 1; + free(mantissa); + if (result) { + strcat(result_msg, "mantissa"); + return 1; + } + + if (flt->exponent != val->exponent) { + strcat(result_msg, "exponent"); + return 1; + } + if (flt->sign != val->sign) { + strcat(result_msg, "sign"); + return 1; + } + if (flt->flags != val->flags) { + strcat(result_msg, "flags"); + return 1; + } + return 0; +} + +static int +test_new_normalized(void) +{ + Init_Entry *vals = normalized_vals; + int i, num = sizeof(normalized_vals)/sizeof(Init_Entry); + + for (i=0; imantissa = BitVector_Create(MANT_BITS, TRUE); +} + +static void +get_family_teardown(void) +{ + BitVector_Destroy(flt->mantissa); + free(flt); +} + +static void +get_common_setup(Init_Entry *vals, int i) +{ + /* set up flt */ + BitVector_Block_Store(flt->mantissa, vals[i].mantissa, MANT_BYTES); + flt->sign = vals[i].sign; + flt->exponent = vals[i].exponent; + flt->flags = vals[i].flags; + + /* set failure messages */ + strcpy(ret_msg, vals[i].ascii); + strcat(ret_msg, ": incorrect return value"); + strcpy(result_msg, vals[i].ascii); + strcat(result_msg, ": incorrect result generated"); +} +#if 0 +static void +append_get_return_value(int val) +{ + char str[64]; + sprintf(str, ": %d", val); + strcat(ret_msg, str); +} +#endif +static int +get_common_check_result(int len, const unsigned char *val, + const unsigned char *correct) +{ + char str[64]; + int i; + int result = 0; + + for (i=0;i0 ? 'F':'.'); + fflush(stdout); + if (nf > 0) + sprintf(failed, "%s ** F: %s failed: %s!\n", failed, testname, + result_msg); + return nf; +} +#define runtest(x,y,z) runtest_(#x,test_##x,y,z) + +int +main(void) +{ + int nf = 0; + if (BitVector_Boot() != ErrCode_Ok) + return EXIT_FAILURE; + yasm_floatnum_initialize(); + + failed[0] = '\0'; + printf("Test floatnum_test: "); + nf += runtest(new_normalized, NULL, NULL); + nf += runtest(new_normalized_edgecase, NULL, NULL); + nf += runtest(get_single_normalized, get_family_setup, get_family_teardown); + nf += runtest(get_single_normalized_edgecase, get_family_setup, get_family_teardown); + nf += runtest(get_double_normalized, get_family_setup, get_family_teardown); + nf += runtest(get_double_normalized_edgecase, get_family_setup, get_family_teardown); + nf += runtest(get_extended_normalized, get_family_setup, get_family_teardown); + nf += runtest(get_extended_normalized_edgecase, get_family_setup, get_family_teardown); + printf(" +%d-%d/8 %d%%\n%s", + 8-nf, nf, 100*(8-nf)/8, failed); + return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/incbin.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/incbin.asm new file mode 100644 index 0000000000..bd6d1a934c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/incbin.asm @@ -0,0 +1,18 @@ +incbin "stamp-h1" +; 1024 x's to bump above 1024 byte default bytecode buffer size +;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/incbin.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/incbin.hex new file mode 100644 index 0000000000..7a26ed8e33 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/incbin.hex @@ -0,0 +1,23 @@ +74 +69 +6d +65 +73 +74 +61 +6d +70 +20 +66 +6f +72 +20 +63 +6f +6e +66 +69 +67 +2e +68 +0a diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/jmpsize1-err.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/jmpsize1-err.asm new file mode 100644 index 0000000000..a0df3e2bea --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/jmpsize1-err.asm @@ -0,0 +1,264 @@ +jmp x ; short +nop +w: +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +x: +jmp w ; short +jmp short y ; must be near; forcing short should error +nop +z: +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +y: +jmp short z ; must be near; forcing short should error + diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/jmpsize1-err.errwarn b/third-party/yasm/yasm-1.3.0/libyasm/tests/jmpsize1-err.errwarn new file mode 100644 index 0000000000..276b1eb8b9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/jmpsize1-err.errwarn @@ -0,0 +1,2 @@ +-:132: error: short jump out of range +-:263: error: short jump out of range diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/jmpsize1.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/jmpsize1.asm new file mode 100644 index 0000000000..821b245f3f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/jmpsize1.asm @@ -0,0 +1,264 @@ +jmp x ; short +nop +w: +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +x: +jmp w ; short +jmp y ; near +nop +z: +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +y: +jmp z ; near + diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/jmpsize1.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/jmpsize1.hex new file mode 100644 index 0000000000..d885f86568 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/jmpsize1.hex @@ -0,0 +1,265 @@ +eb +7f +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +80 +e9 +80 +00 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +e9 +7e +ff diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/leb128_test.c b/third-party/yasm/yasm-1.3.0/libyasm/tests/leb128_test.c new file mode 100644 index 0000000000..87fc8d911b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/leb128_test.c @@ -0,0 +1,199 @@ +/* + * + * Copyright (C) 2005-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 +#include +#include + +#include "libyasm/intnum.c" + +typedef struct Test_Entry { + /* signedness (0=unsigned, 1=signed) */ + int sign; + + /* whether input value should be negated */ + int negate; + + /* input value (as hex string) */ + const char *input; + + /* correct size returned from both size_leb128 and get_leb128 */ + unsigned long outsize; + + /* correct return data from get_leb128 */ + const unsigned char *result; +} Test_Entry; + +static Test_Entry tests[] = { + /* Unsigned values */ + {0, 0, "0", 1, (const unsigned char *)"\x00"}, + {0, 0, "2", 1, (const unsigned char *)"\x02"}, + {0, 0, "7F", 1, (const unsigned char *)"\x7F"}, + {0, 0, "80", 2, (const unsigned char *)"\x80\x01"}, + {0, 0, "81", 2, (const unsigned char *)"\x81\x01"}, + {0, 0, "82", 2, (const unsigned char *)"\x82\x01"}, + {0, 0, "3239", 2, (const unsigned char *)"\xB9\x64"}, + /* Signed zero value */ + {1, 0, "0", 1, (const unsigned char *)"\x00"}, + /* Signed positive values */ + {1, 0, "2", 1, (const unsigned char *)"\x02"}, + {1, 0, "7F", 2, (const unsigned char *)"\xFF\x00"}, + {1, 0, "80", 2, (const unsigned char *)"\x80\x01"}, + {1, 0, "81", 2, (const unsigned char *)"\x81\x01"}, + /* Signed negative values */ + {1, 1, "2", 1, (const unsigned char *)"\x7E"}, + {1, 1, "7F", 2, (const unsigned char *)"\x81\x7F"}, + {1, 1, "80", 2, (const unsigned char *)"\x80\x7F"}, + {1, 1, "81", 2, (const unsigned char *)"\xFF\x7E"}, +}; + +static char failed[1000]; +static char failmsg[100]; + +static int +run_output_test(Test_Entry *test) +{ + char *valstr = yasm__xstrdup(test->input); + yasm_intnum *intn = yasm_intnum_create_hex(valstr); + unsigned long size, i; + unsigned char out[100]; + int bad; + + yasm_xfree(valstr); + + if (test->negate) + yasm_intnum_calc(intn, YASM_EXPR_NEG, NULL); + + size = yasm_intnum_size_leb128(intn, test->sign); + if (size != test->outsize) { + yasm_intnum_destroy(intn); + sprintf(failmsg, "%ssigned %s%s size() bad size: expected %lu, got %lu!", + test->sign?"":"un", test->negate?"-":"", test->input, + test->outsize, size); + return 1; + } + + for (i=0; isign); + if (size != test->outsize) { + yasm_intnum_destroy(intn); + sprintf(failmsg, "%ssigned %s%s get() bad size: expected %lu, got %lu!", + test->sign?"":"un", test->negate?"-":"", test->input, + test->outsize, size); + return 1; + } + + bad = 0; + for (i=0; ioutsize && !bad; i++) { + if (out[i] != test->result[i]) + bad = 1; + } + if (bad) { + yasm_intnum_destroy(intn); + sprintf(failmsg, "%ssigned %s%s get() bad output!", + test->sign?"":"un", test->negate?"-":"", test->input); + return 1; + } + + yasm_intnum_destroy(intn); + return 0; +} + +static int +run_input_test(Test_Entry *test) +{ + char *valstr = yasm__xstrdup(test->input); + yasm_intnum *intn = yasm_intnum_create_hex(valstr); + yasm_intnum *testn; + unsigned long size; + + yasm_xfree(valstr); + + if (test->negate) + yasm_intnum_calc(intn, YASM_EXPR_NEG, NULL); + + testn = yasm_intnum_create_leb128(test->result, test->sign, &size); + if (size != test->outsize) { + yasm_intnum_destroy(testn); + yasm_intnum_destroy(intn); + sprintf(failmsg, "%ssigned %s%s create() bad size: expected %lu, got %lu!", + test->sign?"":"un", test->negate?"-":"", test->input, + test->outsize, size); + return 1; + } + + yasm_intnum_calc(intn, YASM_EXPR_EQ, testn); + if (!yasm_intnum_is_pos1(intn)) { + yasm_intnum_destroy(testn); + yasm_intnum_destroy(intn); + sprintf(failmsg, "%ssigned %s%s create() bad output!", + test->sign?"":"un", test->negate?"-":"", test->input); + return 1; + } + + yasm_intnum_destroy(testn); + yasm_intnum_destroy(intn); + return 0; +} + +int +main(void) +{ + int nf = 0; + int numtests = sizeof(tests)/sizeof(Test_Entry); + int i; + + if (BitVector_Boot() != ErrCode_Ok) + return EXIT_FAILURE; + yasm_intnum_initialize(); + + failed[0] = '\0'; + printf("Test leb128_test: "); + for (i=0; i0 ? 'F':'.'); + fflush(stdout); + if (fail) + sprintf(failed, "%s ** F: %s\n", failed, failmsg); + nf += fail; + + fail = run_input_test(&tests[i]); + printf("%c", fail>0 ? 'F':'.'); + fflush(stdout); + if (fail) + sprintf(failed, "%s ** F: %s\n", failed, failmsg); + nf += fail; + } + + yasm_intnum_cleanup(); + + printf(" +%d-%d/%d %d%%\n%s", + numtests*2-nf, nf, numtests*2, 100*(numtests*2-nf)/(numtests*2), + failed); + return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/libyasm_test.sh b/third-party/yasm/yasm-1.3.0/libyasm/tests/libyasm_test.sh new file mode 100755 index 0000000000..37f8717f14 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/libyasm_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh libyasm_test libyasm/tests "libyasm" "-f bin" "" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align1.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align1.asm new file mode 100644 index 0000000000..2005c069d1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align1.asm @@ -0,0 +1,9 @@ +je label1 +times 4 nop +je label1 +align 8 +times 118 nop +je label2 +label1: +times 128 nop +label2: diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align1.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align1.hex new file mode 100644 index 0000000000..77851473ff --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align1.hex @@ -0,0 +1,266 @@ +0f +84 +86 +00 +90 +90 +90 +90 +0f +84 +7e +00 +8d +b4 +00 +00 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +0f +84 +80 +00 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align2.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align2.asm new file mode 100644 index 0000000000..d93bd8eda4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align2.asm @@ -0,0 +1,10 @@ +je label1 +je label1 +times 4 nop +times 8 nop +align 8 +times 110 nop +je label2 +label1: +times 128 nop +label2: diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align2.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align2.hex new file mode 100644 index 0000000000..38a8cc8f9c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align2.hex @@ -0,0 +1,266 @@ +0f +84 +86 +00 +0f +84 +82 +00 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +b4 +00 +00 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +0f +84 +80 +00 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align3.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align3.asm new file mode 100644 index 0000000000..747fa5cd89 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align3.asm @@ -0,0 +1,16 @@ +je label1a +je label1b +je label1c +jmp label1d +align 4 +times 112 nop +je label2 +label1a: +times 4 nop +label1b: +times 4 nop +label1c: +times 4 nop +label1d: +times 128 nop +label2: diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align3.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align3.hex new file mode 100644 index 0000000000..c44bfe42a4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-align3.hex @@ -0,0 +1,272 @@ +0f +84 +80 +00 +0f +84 +80 +00 +0f +84 +80 +00 +e9 +81 +00 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +0f +84 +8c +00 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular1-err.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular1-err.asm new file mode 100644 index 0000000000..dc96746c2e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular1-err.asm @@ -0,0 +1,2 @@ + times (label-$) db 0 +label: db 'Where am I?' diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular1-err.errwarn b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular1-err.errwarn new file mode 100644 index 0000000000..9b09e1c512 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular1-err.errwarn @@ -0,0 +1 @@ +-:1: error: circular reference detected diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular2-err.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular2-err.asm new file mode 100644 index 0000000000..ea558aedae --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular2-err.asm @@ -0,0 +1,2 @@ + times (label-$+1) db 0 +label: db 'NOW where am I?' diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular2-err.errwarn b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular2-err.errwarn new file mode 100644 index 0000000000..9b09e1c512 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular2-err.errwarn @@ -0,0 +1 @@ +-:1: error: circular reference detected diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular3-err.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular3-err.asm new file mode 100644 index 0000000000..61f818a260 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular3-err.asm @@ -0,0 +1,7 @@ +label1: +times label4-label3+1 db 0 +label2: +db 0 +label3: +times label2-label1+1 db 0 +label4: diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular3-err.errwarn b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular3-err.errwarn new file mode 100644 index 0000000000..041cbba24f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-circular3-err.errwarn @@ -0,0 +1 @@ +-:6: error: circular reference detected diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-gvmat64.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-gvmat64.asm new file mode 100644 index 0000000000..35ac7ac913 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-gvmat64.asm @@ -0,0 +1,514 @@ +;uInt longest_match_x64( +; deflate_state *s, +; IPos cur_match); /* current match */ + +; gvmat64.asm -- Asm portion of the optimized longest_match for 32 bits x86 +; Copyright (C) 1995-2005 Jean-loup Gailly, Brian Raiter and Gilles Vollant. +; +; File written by Gilles Vollant, by converting to assembly the longest_match +; from Jean-loup Gailly in deflate.c of zLib and infoZip zip. +; +; and by taking inspiration on asm686 with masm, optimised assembly code +; from Brian Raiter, written 1998 +; +; http://www.zlib.net +; http://www.winimage.com/zLibDll +; http://www.muppetlabs.com/~breadbox/software/assembly.html +; +; to compile this file for infozip Zip, I use option: +; ml64.exe /Flgvmat64 /c /Zi /DINFOZIP gvmat64.asm +; +; to compile this file for zLib, I use option: +; ml64.exe /Flgvmat64 /c /Zi gvmat64.asm +; Be carrefull to adapt zlib1222add below to your version of zLib +; (if you use a version of zLib before 1.0.4 or after 1.2.2.2, change +; value of zlib1222add later) +; +; This file compile with Microsoft Macro Assembler (x64) for AMD64 +; +; ml64.exe is given with Visual Studio 2005 and Windows 2003 server DDK +; +; (you can get Windows 2003 server DDK with ml64 and cl for AMD64 from +; http://www.microsoft.com/whdc/devtools/ddk/default.mspx for low price) +; + + +;uInt longest_match(s, cur_match) +; deflate_state *s; +; IPos cur_match; /* current match */ +bits 64 + section .text + +longest_match: ; PROC + + +;%define LocalVarsSize 88 + %define LocalVarsSize 72 + +; register used : rax,rbx,rcx,rdx,rsi,rdi,r8,r9,r10,r11,r12 +; free register : r14,r15 +; register can be saved : rsp + + %define chainlenwmask rsp + 8 - LocalVarsSize ; high word: current chain len + ; low word: s->wmask +;%define window rsp + xx - LocalVarsSize ; local copy of s->window ; stored in r10 +;%define windowbestlen rsp + xx - LocalVarsSize ; s->window + bestlen , use r10+r11 +;%define scanstart rsp + xx - LocalVarsSize ; first two bytes of string ; stored in r12w +;%define scanend rsp + xx - LocalVarsSize ; last two bytes of string use ebx +;%define scanalign rsp + xx - LocalVarsSize ; dword-misalignment of string r13 +;%define bestlen rsp + xx - LocalVarsSize ; size of best match so far -> r11d +;%define scan rsp + xx - LocalVarsSize ; ptr to string wanting match -> r9 +%ifdef INFOZIP +%else + %define nicematch (rsp + 16 - LocalVarsSize) ; a good enough match size +%endif + +%define save_rdi rsp + 24 - LocalVarsSize +%define save_rsi rsp + 32 - LocalVarsSize +%define save_rbx rsp + 40 - LocalVarsSize +%define save_rbp rsp + 48 - LocalVarsSize +%define save_r12 rsp + 56 - LocalVarsSize +%define save_r13 rsp + 64 - LocalVarsSize +;%define save_r14 rsp + 72 - LocalVarsSize +;%define save_r15 rsp + 80 - LocalVarsSize + + + +; all the +4 offsets are due to the addition of pending_buf_size (in zlib +; in the deflate_state structure since the asm code was first written +; (if you compile with zlib 1.0.4 or older, remove the +4). +; Note : these value are good with a 8 bytes boundary pack structure + + + %define MAX_MATCH 258 + %define MIN_MATCH 3 + %define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) + + +;;; Offsets for fields in the deflate_state structure. These numbers +;;; are calculated from the definition of deflate_state, with the +;;; assumption that the compiler will dword-align the fields. (Thus, +;;; changing the definition of deflate_state could easily cause this +;;; program to crash horribly, without so much as a warning at +;;; compile time. Sigh.) + +; all the +zlib1222add offsets are due to the addition of fields +; in zlib in the deflate_state structure since the asm code was first written +; (if you compile with zlib 1.0.4 or older, use "%define zlib1222add (-4)"). +; (if you compile with zlib between 1.0.5 and 1.2.2.1, use "%define zlib1222add 0"). +; if you compile with zlib 1.2.2.2 or later , use "%define zlib1222add 8"). + +%ifdef INFOZIP + section .data + +extern window_size:DWORD +; WMask ; 7fff +extern window:BYTE:010040H +extern prev:WORD:08000H +; MatchLen : unused +; PrevMatch : unused +extern strstart:DWORD +extern match_start:DWORD +; Lookahead : ignore +extern prev_length:DWORD ; PrevLen +extern max_chain_length:DWORD +extern good_match:DWORD +extern nice_match:DWORD +%define prev_ad OFFSET prev +%define window_ad OFFSET window +%define nicematch nice_match + +%define WMask 07fffh + +%else + + %ifndef zlib1222add + %define zlib1222add 8 + %endif +%define dsWSize 56+zlib1222add+(zlib1222add/2) +%define dsWMask 64+zlib1222add+(zlib1222add/2) +%define dsWindow 72+zlib1222add +%define dsPrev 88+zlib1222add +%define dsMatchLen 128+zlib1222add +%define dsPrevMatch 132+zlib1222add +%define dsStrStart 140+zlib1222add +%define dsMatchStart 144+zlib1222add +%define dsLookahead 148+zlib1222add +%define dsPrevLen 152+zlib1222add +%define dsMaxChainLen 156+zlib1222add +%define dsGoodMatch 172+zlib1222add +%define dsNiceMatch 176+zlib1222add + +%define window_size [ rcx + dsWSize] +%define WMask [ rcx + dsWMask] +%define window_ad [ rcx + dsWindow] +%define prev_ad [ rcx + dsPrev] +%define strstart [ rcx + dsStrStart] +%define match_start [ rcx + dsMatchStart] +%define Lookahead [ rcx + dsLookahead] ; 0ffffffffh on infozip +%define prev_length [ rcx + dsPrevLen] +%define max_chain_length [ rcx + dsMaxChainLen] +%define good_match [ rcx + dsGoodMatch] +%define nice_match [ rcx + dsNiceMatch] +%endif + +; parameter 1 in r8(deflate state s), param 2 in rdx (cur match) + +; see http://weblogs.asp.net/oldnewthing/archive/2004/01/14/58579.aspx and +; http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/64bitAMD_8e951dd2-ee77-4728-8702-55ce4b5dd24a.xml.asp +; +; All registers must be preserved across the call, except for +; rax, rcx, rdx, r8, r9, r10, and r11, which are scratch. + + section .text + +;;; Save registers that the compiler may be using, and adjust esp to +;;; make room for our stack frame. + + +;;; Retrieve the function arguments. r8d will hold cur_match +;;; throughout the entire function. edx will hold the pointer to the +;;; deflate_state structure during the function's setup (before +;;; entering the main loop. + +; parameter 1 in rcx (deflate_state* s), param 2 in edx -> r8 (cur match) + +; this clear high 32 bits of r8, which can be garbage in both r8 and rdx + + mov [save_rdi],rdi + mov [save_rsi],rsi + mov [save_rbx],rbx + mov [save_rbp],rbp +%ifdef INFOZIP + mov r8d,ecx +%else + mov r8d,edx +%endif + mov [save_r12],r12 + mov [save_r13],r13 +; mov [save_r14],r14 +; mov [save_r15],r15 + + +;;; uInt wmask = s->w_mask; +;;; unsigned chain_length = s->max_chain_length; +;;; if (s->prev_length >= s->good_match) { +;;; chain_length >>= 2; +;;; } + + mov edi, prev_length + mov esi, good_match + mov eax, WMask + mov ebx, max_chain_length + cmp edi, esi + jl LastMatchGood + shr ebx, 2 +LastMatchGood: + +;;; chainlen is decremented once beforehand so that the function can +;;; use the sign flag instead of the zero flag for the exit test. +;;; It is then shifted into the high word, to make room for the wmask +;;; value, which it will always accompany. + + dec ebx + shl ebx, 16 + or ebx, eax + +;;; on zlib only +;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; + +%ifdef INFOZIP + mov [chainlenwmask], ebx +; on infozip nice_match = [nice_match] +%else + mov eax, nice_match + mov [chainlenwmask], ebx + mov r10d, Lookahead + cmp r10d, eax + cmovnl r10d, eax + mov [nicematch],r10d +%endif + +;;; register Bytef *scan = s->window + s->strstart; + mov r10, window_ad + mov ebp, strstart + lea r13, [r10 + rbp] + +;;; Determine how many bytes the scan ptr is off from being +;;; dword-aligned. + + mov r9,r13 + neg r13 + and r13,3 + +;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ? +;;; s->strstart - (IPos)MAX_DIST(s) : NIL; +%ifdef INFOZIP + mov eax,07efah ; MAX_DIST = (WSIZE-MIN_LOOKAHEAD) (0x8000-(3+8+1)) +%else + mov eax, window_size + sub eax, MIN_LOOKAHEAD +%endif + xor edi,edi + sub ebp, eax + + mov r11d, prev_length + + cmovng ebp,edi + +;;; int best_len = s->prev_length; + + +;;; Store the sum of s->window + best_len in esi locally, and in esi. + + lea rsi,[r10+r11] + +;;; register ush scan_start = *(ushf*)scan; +;;; register ush scan_end = *(ushf*)(scan+best_len-1); +;;; Posf *prev = s->prev; + + movzx r12d,word [r9] + movzx ebx, word [r9 + r11 - 1] + + mov rdi, prev_ad + +;;; Jump into the main loop. + + mov edx, [chainlenwmask] + + cmp bx,word [rsi + r8 - 1] + jz LookupLoopIsZero + +LookupLoop1: + and r8d, edx + + movzx r8d, word [rdi + r8*2] + cmp r8d, ebp + jbe LeaveNow + sub edx, 00010000h + js LeaveNow + +LoopEntry1: + cmp bx,word [rsi + r8 - 1] + jz LookupLoopIsZero + +LookupLoop2: + and r8d, edx + + movzx r8d, word [rdi + r8*2] + cmp r8d, ebp + jbe LeaveNow + sub edx, 00010000h + js LeaveNow + +LoopEntry2: + cmp bx,word [rsi + r8 - 1] + jz LookupLoopIsZero + +LookupLoop4: + and r8d, edx + + movzx r8d, word [rdi + r8*2] + cmp r8d, ebp + jbe LeaveNow + sub edx, 00010000h + js LeaveNow + +LoopEntry4: + + cmp bx,word [rsi + r8 - 1] + jnz LookupLoop1 + jmp LookupLoopIsZero + + +;;; do { +;;; match = s->window + cur_match; +;;; if (*(ushf*)(match+best_len-1) != scan_end || +;;; *(ushf*)match != scan_start) continue; +;;; [...] +;;; } while ((cur_match = prev[cur_match & wmask]) > limit +;;; && --chain_length != 0); +;;; +;;; Here is the inner loop of the function. The function will spend the +;;; majority of its time in this loop, and majority of that time will +;;; be spent in the first ten instructions. +;;; +;;; Within this loop: +;;; ebx = scanend +;;; r8d = curmatch +;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask) +;;; esi = windowbestlen - i.e., (window + bestlen) +;;; edi = prev +;;; ebp = limit + +LookupLoop: + and r8d, edx + + movzx r8d, word [rdi + r8*2] + cmp r8d, ebp + jbe LeaveNow + sub edx, 00010000h + js LeaveNow + +LoopEntry: + + cmp bx,word [rsi + r8 - 1] + jnz LookupLoop1 +LookupLoopIsZero: + cmp r12w, word [r10 + r8] + jnz LookupLoop1 + + +;;; Store the current value of chainlen. + mov [chainlenwmask], edx + +;;; Point edi to the string under scrutiny, and esi to the string we +;;; are hoping to match it up with. In actuality, esi and edi are +;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is +;;; initialized to -(MAX_MATCH_8 - scanalign). + + lea rsi,[r8+r10] + mov rdx, 0fffffffffffffef8h; -(MAX_MATCH_8) + lea rsi, [rsi + r13 + 0108h] ;MAX_MATCH_8] + lea rdi, [r9 + r13 + 0108h] ;MAX_MATCH_8] + + prefetcht1 [rsi+rdx] + prefetcht1 [rdi+rdx] + + +;;; Test the strings %define for ality, 8 bytes at a time. At the end, +;;; adjust rdx so that it is offset to the exact byte that mismatched. +;;; +;;; We already know at this point that the first three bytes of the +;;; strings match each other, and they can be safely passed over before +;;; starting the compare loop. So what this code does is skip over 0-3 +;;; bytes, as much as necessary in order to dword-align the edi +;;; pointer. (rsi will still be misaligned three times out of four.) +;;; +;;; It should be confessed that this loop usually does not represent +;;; much of the total running time. Replacing it with a more +;;; straightforward "rep cmpsb" would not drastically degrade +;;; performance. + +LoopCmps: + mov rax, [rsi + rdx] + xor rax, [rdi + rdx] + jnz LeaveLoopCmps + + mov rax, [rsi + rdx + 8] + xor rax, [rdi + rdx + 8] + jnz LeaveLoopCmps8 + + + mov rax, [rsi + rdx + 8+8] + xor rax, [rdi + rdx + 8+8] + jnz LeaveLoopCmps16 + + add rdx,8+8+8 + + jmp short LoopCmps +LeaveLoopCmps16: add rdx,8 +LeaveLoopCmps8: add rdx,8 +LeaveLoopCmps: + + test eax, 0000FFFFh + jnz LenLower + + test eax,0ffffffffh + + jnz LenLower32 + + add rdx,4 + shr rax,32 + or ax,ax + jnz LenLower + +LenLower32: + shr eax,16 + add rdx,2 +LenLower: sub al, 1 + adc rdx, 0 +;;; Calculate the length of the match. If it is longer than MAX_MATCH, +;;; then automatically accept it as the best possible match and leave. + + lea rax, [rdi + rdx] + sub rax, r9 + cmp eax, MAX_MATCH + jge LenMaximum + +;;; If the length of the match is not longer than the best match we +;;; have so far, then forget it and return to the lookup loop. +;/////////////////////////////////// + + cmp eax, r11d + jg LongerMatch + + lea rsi,[r10+r11] + + mov rdi, prev_ad + mov edx, [chainlenwmask] + jmp LookupLoop + +;;; s->match_start = cur_match; +;;; best_len = len; +;;; if (len >= nice_match) break; +;;; scan_end = *(ushf*)(scan+best_len-1); + +LongerMatch: + mov r11d, eax + mov match_start, r8d + cmp eax, [nicematch] + jge LeaveNow + + lea rsi,[r10+rax] + + movzx ebx, word [r9 + rax - 1] + mov rdi, prev_ad + mov edx, [chainlenwmask] + jmp LookupLoop + +;;; Accept the current string, with the maximum possible length. + +LenMaximum: + mov r11d,MAX_MATCH + mov match_start, r8d +;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len; +;;; return s->lookahead; + +LeaveNow: +%ifdef INFOZIP + mov eax,r11d +%else + mov eax, Lookahead + cmp r11d, eax + cmovng eax, r11d +%endif + +;;; Restore the stack and return from whence we came. + + mov rsi,[save_rsi] + mov rdi,[save_rdi] + mov rbx,[save_rbx] + mov rbp,[save_rbp] + mov r12,[save_r12] + mov r13,[save_r13] +; mov r14,[save_r14] +; mov r15,[save_r15] + + + ret 0 +; please don't remove this string ! +; Your can freely use gvmat64 in any free or externercial app +; but it is far better don't remove the string in the binary! + db 0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998, converted to amd 64 by Gilles Vollant 2005",0dh,0ah,0 +%if 0 +longest_match ENDP +%endif + +match_init: ; PROC + ret 0 + %if 0 +match_init ENDP +%endif + +END diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-gvmat64.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-gvmat64.hex new file mode 100644 index 0000000000..b2432d6af7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-gvmat64.hex @@ -0,0 +1,731 @@ +48 +89 +7c +24 +d0 +48 +89 +74 +24 +d8 +48 +89 +5c +24 +e0 +48 +89 +6c +24 +e8 +41 +89 +d0 +4c +89 +64 +24 +f0 +4c +89 +6c +24 +f8 +8b +b9 +a0 +00 +00 +00 +8b +b1 +b4 +00 +00 +00 +8b +41 +4c +8b +99 +a4 +00 +00 +00 +39 +f7 +7c +03 +c1 +eb +02 +ff +cb +c1 +e3 +10 +09 +c3 +8b +81 +b8 +00 +00 +00 +89 +5c +24 +c0 +44 +8b +91 +9c +00 +00 +00 +41 +39 +c2 +44 +0f +4d +d0 +44 +89 +54 +24 +c8 +4c +8b +51 +50 +8b +a9 +94 +00 +00 +00 +4d +8d +2c +2a +4d +89 +e9 +49 +f7 +dd +49 +83 +e5 +03 +8b +41 +44 +2d +06 +01 +00 +00 +31 +ff +29 +c5 +44 +8b +99 +a0 +00 +00 +00 +0f +4e +ef +4b +8d +34 +1a +45 +0f +b7 +21 +43 +0f +b7 +5c +19 +ff +48 +8b +79 +60 +8b +54 +24 +c0 +66 +42 +3b +5c +06 +ff +0f +84 +9a +00 +00 +00 +41 +21 +d0 +46 +0f +b7 +04 +47 +41 +39 +e8 +0f +86 +6e +01 +00 +00 +81 +ea +00 +00 +01 +00 +0f +88 +62 +01 +00 +00 +66 +42 +3b +5c +06 +ff +74 +75 +41 +21 +d0 +46 +0f +b7 +04 +47 +41 +39 +e8 +0f +86 +49 +01 +00 +00 +81 +ea +00 +00 +01 +00 +0f +88 +3d +01 +00 +00 +66 +42 +3b +5c +06 +ff +74 +50 +41 +21 +d0 +46 +0f +b7 +04 +47 +41 +39 +e8 +0f +86 +24 +01 +00 +00 +81 +ea +00 +00 +01 +00 +0f +88 +18 +01 +00 +00 +66 +42 +3b +5c +06 +ff +75 +91 +eb +29 +41 +21 +d0 +46 +0f +b7 +04 +47 +41 +39 +e8 +0f +86 +fd +00 +00 +00 +81 +ea +00 +00 +01 +00 +0f +88 +f1 +00 +00 +00 +66 +42 +3b +5c +06 +ff +0f +85 +66 +ff +ff +ff +66 +47 +3b +24 +02 +0f +85 +5b +ff +ff +ff +89 +54 +24 +c0 +4b +8d +34 +10 +48 +ba +f8 +fe +ff +ff +ff +ff +ff +ff +4a +8d +b4 +2e +08 +01 +00 +00 +4b +8d +bc +29 +08 +01 +00 +00 +0f +18 +14 +16 +0f +18 +14 +17 +48 +8b +04 +16 +48 +33 +04 +17 +75 +26 +48 +8b +44 +16 +08 +48 +33 +44 +17 +08 +75 +16 +48 +8b +44 +16 +10 +48 +33 +44 +17 +10 +75 +06 +48 +83 +c2 +18 +eb +d8 +48 +83 +c2 +08 +48 +83 +c2 +08 +a9 +ff +ff +00 +00 +75 +1b +a9 +ff +ff +ff +ff +75 +0d +48 +83 +c2 +04 +48 +c1 +e8 +20 +66 +09 +c0 +75 +07 +c1 +e8 +10 +48 +83 +c2 +02 +2c +01 +48 +83 +d2 +00 +48 +8d +04 +17 +4c +29 +c8 +3d +02 +01 +00 +00 +7d +3d +44 +39 +d8 +7f +11 +4b +8d +34 +1a +48 +8b +79 +60 +8b +54 +24 +c0 +e9 +26 +ff +ff +ff +41 +89 +c3 +44 +89 +81 +98 +00 +00 +00 +3b +44 +24 +c8 +7d +24 +49 +8d +34 +02 +41 +0f +b7 +5c +01 +ff +48 +8b +79 +60 +8b +54 +24 +c0 +e9 +ff +fe +ff +ff +41 +bb +02 +01 +00 +00 +44 +89 +81 +98 +00 +00 +00 +8b +81 +9c +00 +00 +00 +41 +39 +c3 +41 +0f +4e +c3 +48 +8b +74 +24 +d8 +48 +8b +7c +24 +d0 +48 +8b +5c +24 +e0 +48 +8b +6c +24 +e8 +4c +8b +64 +24 +f0 +4c +8b +6c +24 +f8 +c2 +00 +00 +0d +0a +61 +73 +6d +36 +38 +36 +20 +77 +69 +74 +68 +20 +6d +61 +73 +6d +2c +20 +6f +70 +74 +69 +6d +69 +73 +65 +64 +20 +61 +73 +73 +65 +6d +62 +6c +79 +20 +63 +6f +64 +65 +20 +66 +72 +6f +6d +20 +42 +72 +69 +61 +6e +20 +52 +61 +69 +74 +65 +72 +2c +20 +77 +72 +69 +74 +74 +65 +6e +20 +31 +39 +39 +38 +2c +20 +63 +6f +6e +76 +65 +72 +74 +65 +64 +20 +74 +6f +20 +61 +6d +64 +20 +36 +34 +20 +62 +79 +20 +47 +69 +6c +6c +65 +73 +20 +56 +6f +6c +6c +61 +6e +74 +20 +32 +30 +30 +35 +0d +0a +00 +c2 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-immexpand.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-immexpand.asm new file mode 100644 index 0000000000..55d8097310 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-immexpand.asm @@ -0,0 +1,9 @@ +label1: +je label3 +times 124 nop +label2: +je label4 +label3: +times 128 nop +label4: +push label2-label1 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-immexpand.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-immexpand.hex new file mode 100644 index 0000000000..f57024ecae --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-immexpand.hex @@ -0,0 +1,263 @@ +0f +84 +80 +00 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +0f +84 +80 +00 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +68 +80 +00 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-immnoexpand.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-immnoexpand.asm new file mode 100644 index 0000000000..e126f80e7d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-immnoexpand.asm @@ -0,0 +1,10 @@ +label1: +times 2 nop +je label3 +times 123 nop +label2: +je label4 +label3: +times 128 nop +label4: +push label2-label1 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-immnoexpand.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-immnoexpand.hex new file mode 100644 index 0000000000..c4658066a6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-immnoexpand.hex @@ -0,0 +1,261 @@ +90 +90 +74 +7f +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +0f +84 +80 +00 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +6a +7f diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-oldalign.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-oldalign.asm new file mode 100644 index 0000000000..013a5c8335 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-oldalign.asm @@ -0,0 +1,3 @@ +mov ax, 5 +times ($$-$) & 1Fh nop ; Long word alignment +mov bx, 5 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-oldalign.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-oldalign.hex new file mode 100644 index 0000000000..dfbb9da9e3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-oldalign.hex @@ -0,0 +1,35 @@ +b8 +05 +00 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +bb +05 +00 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-struc.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-struc.asm new file mode 100644 index 0000000000..4986f3bdcb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-struc.asm @@ -0,0 +1,39 @@ +[absolute 0] +HOSTENT: +.Name resd 1 +.Aliases resd 1 + +.AddrList resd 1 + +HOSTENT_size: + +[section .bss] +STRING_MAX equ 256 +HOSTENT_ALIASES_MAX equ 16 +HOSTENT_ADDRLIST_MAX equ 16 + +HostEnt_Name_static resb STRING_MAX +HostEnt_Aliases_static resd HOSTENT_ALIASES_MAX +HostEnt_AddrList_static resd HOSTENT_ADDRLIST_MAX +HostEnt_Aliases_data resb STRING_MAX*HOSTENT_ALIASES_MAX +HostEnt_AddrList_data resd HOSTENT_ADDRLIST_MAX + +[section .data] +HostEnt_static : +..@44.strucstart: +times HOSTENT.Name-($-..@44.strucstart) db 0 +dd HostEnt_Name_static +times HOSTENT.Aliases-($-..@44.strucstart) db 0 +dd HostEnt_Aliases_static +times HOSTENT.AddrList-($-..@44.strucstart) db 0 +dd HostEnt_AddrList_static +times HOSTENT_size-($-..@44.strucstart) db 0 + +HostEnt_static2 : +..@45.strucstart: +times HOSTENT.Name-($-..@45.strucstart) db 0 +dd HostEnt_Name_static +times HOSTENT.Aliases-($-..@45.strucstart) db 0 +dd HostEnt_Aliases_static +times HOSTENT_size-($-..@45.strucstart) db 0 + diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-struc.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-struc.hex new file mode 100644 index 0000000000..c8e792a2c3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/opt-struc.hex @@ -0,0 +1,24 @@ +18 +00 +00 +00 +18 +01 +00 +00 +58 +01 +00 +00 +18 +00 +00 +00 +18 +01 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/reserve-err1.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/reserve-err1.asm new file mode 100644 index 0000000000..ad6e31aeca --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/reserve-err1.asm @@ -0,0 +1,15 @@ +; Test res* family errors +a: +resb -5 +resw 1.2 +resd -1.2 +resq 0xffffffff +rest a + +[section .bss] +resb -5 +resw 1.2 +resd -1.2 +resq 0xffffffff +rest a + diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/reserve-err1.errwarn b/third-party/yasm/yasm-1.3.0/libyasm/tests/reserve-err1.errwarn new file mode 100644 index 0000000000..e53fe3c729 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/reserve-err1.errwarn @@ -0,0 +1,2 @@ +-:7: error: multiple expression not absolute +-:14: error: multiple expression not absolute diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/reserve-err2.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/reserve-err2.asm new file mode 100644 index 0000000000..190f66b355 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/reserve-err2.asm @@ -0,0 +1,15 @@ +; Test res* family errors +a: +resb -5 +resw 1.2 +resd -1.2 +resq 0xffffffff +;rest a + +[section .bss] +resb -5 +resw 1.2 +resd -1.2 +resq 0xffffffff +;rest a + diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/reserve-err2.errwarn b/third-party/yasm/yasm-1.3.0/libyasm/tests/reserve-err2.errwarn new file mode 100644 index 0000000000..d3fbbabb27 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/reserve-err2.errwarn @@ -0,0 +1,6 @@ +-:3: error: multiple is negative +-:4: error: expression must not contain floating point value +-:5: error: expression must not contain floating point value +-:10: error: multiple is negative +-:11: error: expression must not contain floating point value +-:12: error: expression must not contain floating point value diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/splitpath_test.c b/third-party/yasm/yasm-1.3.0/libyasm/tests/splitpath_test.c new file mode 100644 index 0000000000..7f873a472b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/splitpath_test.c @@ -0,0 +1,154 @@ +/* + * + * Copyright (C) 2006-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 +#include +#include + +#include "libyasm/file.h" + +typedef struct Test_Entry { + /* splitpath function to test */ + size_t (*splitpath) (const char *path, const char **tail); + + /* input path */ + const char *input; + + /* correct head length returned */ + size_t headlen; + + /* correct tail returned */ + const char *tail; +} Test_Entry; + +static Test_Entry tests[] = { + /* UNIX split */ + {yasm__splitpath_unix, "", 0, ""}, + {yasm__splitpath_unix, "./file.ext", 0, "file.ext"}, + {yasm__splitpath_unix, "../../file.ext", 5, "file.ext"}, + {yasm__splitpath_unix, "file.ext", 0, "file.ext"}, + {yasm__splitpath_unix, "/file.ext", 1, "file.ext"}, + {yasm__splitpath_unix, "/foo/file.ext", 4, "file.ext"}, + {yasm__splitpath_unix, "/foo/bar/file.ext", 8, "file.ext"}, + {yasm__splitpath_unix, "foo/file.ext", 3, "file.ext"}, + {yasm__splitpath_unix, "foo/bar/file.ext", 7, "file.ext"}, + {yasm__splitpath_unix, "foo/bar//file.ext", 7, "file.ext"}, + {yasm__splitpath_unix, "/", 1, ""}, + {yasm__splitpath_unix, "/foo/", 4, ""}, + {yasm__splitpath_unix, "/foo/bar/", 8, ""}, + {yasm__splitpath_unix, "foo/", 3, ""}, + {yasm__splitpath_unix, "foo/bar/", 7, ""}, + {yasm__splitpath_unix, "foo/bar//", 7, ""}, + /* Windows split */ + {yasm__splitpath_win, "", 0, ""}, + {yasm__splitpath_win, "file.ext", 0, "file.ext"}, + {yasm__splitpath_win, "./file.ext", 0, "file.ext"}, + {yasm__splitpath_win, "/file.ext", 1, "file.ext"}, + {yasm__splitpath_win, "/foo/file.ext", 4, "file.ext"}, + {yasm__splitpath_win, "/foo/bar/file.ext", 8, "file.ext"}, + {yasm__splitpath_win, "foo/file.ext", 3, "file.ext"}, + {yasm__splitpath_win, "foo/bar/file.ext", 7, "file.ext"}, + {yasm__splitpath_win, "foo/bar//file.ext", 7, "file.ext"}, + {yasm__splitpath_win, "..\\..\\file.ext", 5, "file.ext"}, + {yasm__splitpath_win, "c:file.ext", 2, "file.ext"}, + {yasm__splitpath_win, "c:.\\file.ext", 2, "file.ext"}, + {yasm__splitpath_win, "d:/file.ext", 3, "file.ext"}, + {yasm__splitpath_win, "e:/foo/file.ext", 6, "file.ext"}, + {yasm__splitpath_win, "f:/foo/bar/file.ext", 10, "file.ext"}, + {yasm__splitpath_win, "g:foo/file.ext", 5, "file.ext"}, + {yasm__splitpath_win, "h:foo/bar/file.ext", 9, "file.ext"}, + {yasm__splitpath_win, "i:foo/bar//file.ext", 9, "file.ext"}, + {yasm__splitpath_win, "d:\\file.ext", 3, "file.ext"}, + {yasm__splitpath_win, "e:\\foo/file.ext", 6, "file.ext"}, + {yasm__splitpath_win, "f:/foo\\bar\\file.ext", 10, "file.ext"}, + {yasm__splitpath_win, "g:foo\\file.ext", 5, "file.ext"}, + {yasm__splitpath_win, "h:foo/bar\\file.ext", 9, "file.ext"}, + {yasm__splitpath_win, "i:foo\\bar//\\file.ext", 9, "file.ext"}, + {yasm__splitpath_win, "\\", 1, ""}, + {yasm__splitpath_win, "c:", 2, ""}, + {yasm__splitpath_win, "d:\\", 3, ""}, + {yasm__splitpath_win, "e:\\foo/", 6, ""}, + {yasm__splitpath_win, "f:/foo\\bar\\", 10, ""}, + {yasm__splitpath_win, "g:foo\\", 5, ""}, + {yasm__splitpath_win, "h:foo/bar\\", 9, ""}, + {yasm__splitpath_win, "i:foo\\bar//\\", 9, ""}, +}; + +static char failed[1000]; +static char failmsg[100]; + +static int +run_test(Test_Entry *test) +{ + size_t headlen; + const char *tail; + const char *funcname; + + if (test->splitpath == &yasm__splitpath_unix) + funcname = "unix"; + else + funcname = "win"; + + headlen = test->splitpath(test->input, &tail); + if (headlen != test->headlen) { + sprintf(failmsg, + "splitpath_%s(\"%s\") bad head len: expected %lu, got %lu!", + funcname, test->input, (unsigned long)test->headlen, + (unsigned long)headlen); + return 1; + } + + if (strcmp(tail, test->tail) != 0) { + sprintf(failmsg, + "splitpath_%s(\"%s\") bad tail: expected \"%s\", got \"%s\"!", + funcname, test->input, test->tail, tail); + return 1; + } + + return 0; +} + +int +main(void) +{ + int nf = 0; + int numtests = sizeof(tests)/sizeof(Test_Entry); + int i; + + failed[0] = '\0'; + printf("Test splitpath_test: "); + for (i=0; i0 ? 'F':'.'); + fflush(stdout); + if (fail) + sprintf(failed, "%s ** F: %s\n", failed, failmsg); + nf += fail; + } + + printf(" +%d-%d/%d %d%%\n%s", + numtests-nf, nf, numtests, 100*(numtests-nf)/numtests, failed); + return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/strucsize.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/strucsize.asm new file mode 100644 index 0000000000..5f5fc242ca --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/strucsize.asm @@ -0,0 +1,23 @@ +struc TST1 + .a resd 2 +endstruc + +struc TST2 + .b resb TST1_size +endstruc + +tst2: +istruc TST2 +at TST2.b + + istruc TST1 + + at TST1.a + dd 1, 2 + + iend + +iend + +dw TST1_size +dw TST2_size diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/strucsize.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/strucsize.hex new file mode 100644 index 0000000000..448779e90f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/strucsize.hex @@ -0,0 +1,12 @@ +01 +00 +00 +00 +02 +00 +00 +00 +08 +00 +08 +00 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/times-res.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/times-res.asm new file mode 100644 index 0000000000..307a8262d4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/times-res.asm @@ -0,0 +1,3 @@ +times 5 resb 4 +times 0 resb 2 +times 1 resb 0 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/times-res.errwarn b/third-party/yasm/yasm-1.3.0/libyasm/tests/times-res.errwarn new file mode 100644 index 0000000000..ceb76cf82b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/times-res.errwarn @@ -0,0 +1 @@ +-:1: warning: uninitialized space declared in code/data section: zeroing diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/times-res.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/times-res.hex new file mode 100644 index 0000000000..b1c8b274e6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/times-res.hex @@ -0,0 +1,20 @@ +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/times0.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/times0.asm new file mode 100644 index 0000000000..ea642d7916 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/times0.asm @@ -0,0 +1 @@ +times 0 db 1 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/times0.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/times0.hex new file mode 100644 index 0000000000..e69de29bb2 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/timesfwd.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/timesfwd.asm new file mode 100644 index 0000000000..bdb36d3eb5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/timesfwd.asm @@ -0,0 +1,8 @@ +[section .text] +[bits 64] +;[global foo] +;[global bar] +times (foo-bar+$$-$)&7 nop +foo: inc eax +bar: inc ecx + diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/timesfwd.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/timesfwd.hex new file mode 100644 index 0000000000..82904bebac --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/timesfwd.hex @@ -0,0 +1,10 @@ +90 +90 +90 +90 +90 +90 +ff +c0 +ff +c1 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/timesover-err.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/timesover-err.asm new file mode 100644 index 0000000000..6b3b7f9591 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/timesover-err.asm @@ -0,0 +1,2 @@ +times 512 db 0 +times 01FEh-($-$$) db 0 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/timesover-err.errwarn b/third-party/yasm/yasm-1.3.0/libyasm/tests/timesover-err.errwarn new file mode 100644 index 0000000000..81441ac3e4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/timesover-err.errwarn @@ -0,0 +1 @@ +-:2: error: multiple is negative diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/timesunder.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/timesunder.asm new file mode 100644 index 0000000000..aceafa3e1d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/timesunder.asm @@ -0,0 +1,3 @@ +je label +times 82h-($-$$) nop +label: diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/timesunder.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/timesunder.hex new file mode 100644 index 0000000000..e3efd1497e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/timesunder.hex @@ -0,0 +1,130 @@ +0f +84 +7e +00 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/unary.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/unary.asm new file mode 100644 index 0000000000..e0bcc17773 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/unary.asm @@ -0,0 +1,5 @@ +[bits 32] +mov eax, ~0 +mov eax, ~5 +mov ebx, -0 +mov ebx, -5 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/unary.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/unary.hex new file mode 100644 index 0000000000..ed29c522be --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/unary.hex @@ -0,0 +1,20 @@ +b8 +ff +ff +ff +ff +b8 +fa +ff +ff +ff +bb +00 +00 +00 +00 +bb +fb +ff +ff +ff diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/uncstring_test.c b/third-party/yasm/yasm-1.3.0/libyasm/tests/uncstring_test.c new file mode 100644 index 0000000000..73037642ea --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/uncstring_test.c @@ -0,0 +1,156 @@ +/* + * + * Copyright (C) 2006-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 +#include +#include + +#include "util.h" +#include "libyasm/errwarn.h" +#include "libyasm/file.h" + +typedef struct Test_Entry { + /* input string */ + const char *input; + + /* input length */ + size_t in_len; + + /* correct output string */ + const char *result; + + /* correct output length */ + size_t result_len; + + /* expected warning, if any */ + const char *warn; +} Test_Entry; + +static Test_Entry tests[] = { + {"noescape", 8, "noescape", 8, NULL}, + {"noescape2", 10, "noescape2", 10, NULL}, /* includes trailing zero */ + {"\\\\\\b\\f\\n\\r\\t\\\"", 14, "\\\b\f\n\r\t\"", 7, NULL}, + {"\\a", 2, "a", 1, NULL}, + /* hex tests */ + {"\\x", 2, "\x00", 1, NULL}, + {"\\x12", 4, "\x12", 1, NULL}, + {"\\x1234", 6, "\x34", 1, NULL}, + {"\\xg", 3, "\x00g", 2, NULL}, + {"\\xaga", 5, "\x0aga", 3, NULL}, + {"\\xaag", 5, "\xaag", 2, NULL}, + {"\\xaaa", 5, "\xaa", 1, NULL}, + {"\\x55559", 7, "\x59", 1, NULL}, + + /* oct tests */ + {"\\778", 4, "\000", 1, "octal value out of range"}, + {"\\779", 4, "\001", 1, "octal value out of range"}, + {"\\1x", 3, "\001x", 2, NULL}, + {"\\7779", 5, "\xff" "9", 2, NULL}, + {"\\7999", 5, "\x11" "9", 2, "octal value out of range"}, + {"\\77a", 4, "\077a", 2, NULL}, + {"\\5555555", 8, "\x6d" "5555", 5, NULL}, + {"\\9999", 5, "\x91" "9", 2, "octal value out of range"}, +}; + +static char failed[1000]; +static char failmsg[100]; + +static int +run_test(Test_Entry *test) +{ + char str[256]; + size_t len; + yasm_warn_class wclass; + char *wstr; + + strncpy(str, test->input, test->in_len); + len = test->in_len; + + yasm_unescape_cstring((unsigned char *)str, &len); + if (len != test->result_len) { + sprintf(failmsg, + "unescape_cstring(\"%s\", %lu) bad output len: expected %lu, got %lu!", + test->input, (unsigned long)test->in_len, + (unsigned long)test->result_len, (unsigned long)len); + return 1; + } + + if (strncmp(str, test->result, len) != 0) { + sprintf(failmsg, + "unescape_cstring(\"%s\", %lu) bad output: expected \"%s\", got \"%s\"!", + test->input, (unsigned long)test->in_len, test->result, str); + return 1; + } + + yasm_warn_fetch(&wclass, &wstr); + if (wstr != NULL && test->warn == NULL) { + sprintf(failmsg, + "unescape_cstring(\"%s\", %lu) unexpected warning: %s!", + test->input, (unsigned long)test->in_len, wstr); + return 1; + } + if (wstr == NULL && test->warn != NULL) { + sprintf(failmsg, + "unescape_cstring(\"%s\", %lu) expected warning: %s, did not get it!", + test->input, (unsigned long)test->in_len, test->warn); + return 1; + } + if (wstr && test->warn && strcmp(wstr, test->warn) != 0) { + sprintf(failmsg, + "unescape_cstring(\"%s\", %lu) expected warning: %s, got %s!", + test->input, (unsigned long)test->in_len, test->warn, wstr); + return 1; + } + yasm_xfree(wstr); + + return 0; +} + +int +main(void) +{ + int nf = 0; + int numtests = sizeof(tests)/sizeof(Test_Entry); + int i; + + yasm_errwarn_initialize(); + + failed[0] = '\0'; + printf("Test uncstring_test: "); + for (i=0; i0 ? 'F':'.'); + fflush(stdout); + if (fail) + sprintf(failed, "%s ** F: %s\n", failed, failmsg); + nf += fail; + } + + printf(" +%d-%d/%d %d%%\n%s", + numtests-nf, nf, numtests, 100*(numtests-nf)/numtests, failed); + + yasm_errwarn_cleanup(); + return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/value-err.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-err.asm new file mode 100644 index 0000000000..883fa6fae7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-err.asm @@ -0,0 +1,9 @@ +label: +mov [label/2+1], ax +mov ax, label*2 +mov [label+5], ax +mov ax, label wrt foo +foo: +dd label +dd label<<5 +dd label>>2 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/value-err.errwarn b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-err.errwarn new file mode 100644 index 0000000000..a949cd85ae --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-err.errwarn @@ -0,0 +1,3 @@ +-:2: error: effective address too complex +-:3: error: immediate expression too complex +-:8: error: data expression too complex diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/value-mask.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-mask.asm new file mode 100644 index 0000000000..3e9395210f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-mask.asm @@ -0,0 +1,5 @@ +db label +db label & 0xff +section .bss +resb 500 +label: diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/value-mask.errwarn b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-mask.errwarn new file mode 100644 index 0000000000..9df5a6654d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-mask.errwarn @@ -0,0 +1 @@ +-:1: warning: value does not fit in 8 bit field diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/value-mask.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-mask.hex new file mode 100644 index 0000000000..8cae27c37e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-mask.hex @@ -0,0 +1,2 @@ +f8 +f8 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/value-samesym.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-samesym.asm new file mode 100644 index 0000000000..da325992dc --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-samesym.asm @@ -0,0 +1,2 @@ +extern RW +mov [eax + (RW + 22032) - (RW + 23056)], eax diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/value-samesym.errwarn b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-samesym.errwarn new file mode 100644 index 0000000000..58c850b3fc --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-samesym.errwarn @@ -0,0 +1 @@ +-:1: warning: binary object format does not support extern variables diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/value-samesym.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-samesym.hex new file mode 100644 index 0000000000..4bab16b8d0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-samesym.hex @@ -0,0 +1,8 @@ +67 +66 +89 +80 +00 +fc +ff +ff diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/value-shr-symexpr.asm b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-shr-symexpr.asm new file mode 100644 index 0000000000..988abbff2f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-shr-symexpr.asm @@ -0,0 +1,6 @@ +dw foo +dw (foo+((1<<9)-1)) +dw (foo+((1<<9)-1)) >> 9 +foo: +dw (bar+foo)>>(0+1) +bar: diff --git a/third-party/yasm/yasm-1.3.0/libyasm/tests/value-shr-symexpr.hex b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-shr-symexpr.hex new file mode 100644 index 0000000000..b3169287da --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/tests/value-shr-symexpr.hex @@ -0,0 +1,8 @@ +06 +00 +05 +02 +01 +00 +07 +00 diff --git a/third-party/yasm/yasm-1.3.0/libyasm/valparam.c b/third-party/yasm/yasm-1.3.0/libyasm/valparam.c new file mode 100644 index 0000000000..88e41a7c5d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/valparam.c @@ -0,0 +1,385 @@ +/* + * Value/Parameter type functions + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 "util.h" + +#include "libyasm-stdint.h" +#include "coretype.h" +#include "valparam.h" + +#include "errwarn.h" +#include "intnum.h" +#include "expr.h" +#include "symrec.h" + +#include "section.h" + +void +yasm_call_directive(const yasm_directive *directive, yasm_object *object, + yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_valparam *vp; + + if ((directive->flags & (YASM_DIR_ARG_REQUIRED|YASM_DIR_ID_REQUIRED)) && + (!valparams || !yasm_vps_first(valparams))) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("directive `%s' requires an argument"), + directive->name); + return; + } + if (valparams) { + vp = yasm_vps_first(valparams); + if ((directive->flags & YASM_DIR_ID_REQUIRED) && + vp->type != YASM_PARAM_ID) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("directive `%s' requires an identifier parameter"), + directive->name); + return; + } + } + directive->handler(object, valparams, objext_valparams, line); +} + +yasm_valparam * +yasm_vp_create_id(/*@keep@*/ char *v, /*@keep@*/ char *p, int id_prefix) +{ + yasm_valparam *r = yasm_xmalloc(sizeof(yasm_valparam)); + r->val = v; + r->type = YASM_PARAM_ID; + r->param.id = p; + r->id_prefix = (char)id_prefix; + return r; +} + +yasm_valparam * +yasm_vp_create_string(/*@keep@*/ char *v, /*@keep@*/ char *p) +{ + yasm_valparam *r = yasm_xmalloc(sizeof(yasm_valparam)); + r->val = v; + r->type = YASM_PARAM_STRING; + r->param.str = p; + r->id_prefix = '\0'; + return r; +} + +yasm_valparam * +yasm_vp_create_expr(/*@keep@*/ char *v, /*@keep@*/ yasm_expr *p) +{ + yasm_valparam *r = yasm_xmalloc(sizeof(yasm_valparam)); + r->val = v; + r->type = YASM_PARAM_EXPR; + r->param.e = p; + r->id_prefix = '\0'; + return r; +} + +/*@null@*/ /*@only@*/ yasm_expr * +yasm_vp_expr(const yasm_valparam *vp, yasm_symtab *symtab, unsigned long line) +{ + if (!vp) + return NULL; + switch (vp->type) { + case YASM_PARAM_ID: + return yasm_expr_create_ident(yasm_expr_sym( + yasm_symtab_use(symtab, yasm_vp_id(vp), line)), line); + case YASM_PARAM_EXPR: + return yasm_expr_copy(vp->param.e); + default: + return NULL; + } +} + +/*@null@*/ /*@dependent@*/ const char * +yasm_vp_string(const yasm_valparam *vp) +{ + if (!vp) + return NULL; + switch (vp->type) { + case YASM_PARAM_ID: + return vp->param.id; + case YASM_PARAM_STRING: + return vp->param.str; + default: + return NULL; + } +} + +/*@null@*/ /*@dependent@*/ const char * +yasm_vp_id(const yasm_valparam *vp) +{ + if (!vp) + return NULL; + if (vp->type == YASM_PARAM_ID) { + if (vp->param.id[0] == vp->id_prefix) + return &vp->param.id[1]; + else + return vp->param.id; + } + return NULL; +} + +void +yasm_vps_delete(yasm_valparamhead *headp) +{ + yasm_valparam *cur, *next; + + cur = STAILQ_FIRST(headp); + while (cur) { + next = STAILQ_NEXT(cur, link); + if (cur->val) + yasm_xfree(cur->val); + switch (cur->type) { + case YASM_PARAM_ID: + yasm_xfree(cur->param.id); + break; + case YASM_PARAM_STRING: + yasm_xfree(cur->param.str); + break; + case YASM_PARAM_EXPR: + yasm_expr_destroy(cur->param.e); + break; + } + yasm_xfree(cur); + cur = next; + } + STAILQ_INIT(headp); +} + +void +yasm_vps_print(const yasm_valparamhead *headp, FILE *f) +{ + const yasm_valparam *vp; + + if(!headp) { + fprintf(f, "(none)"); + return; + } + + yasm_vps_foreach(vp, headp) { + if (vp->val) + fprintf(f, "(\"%s\",", vp->val); + else + fprintf(f, "((nil),"); + switch (vp->type) { + case YASM_PARAM_ID: + fprintf(f, "%s", vp->param.id); + break; + case YASM_PARAM_STRING: + fprintf(f, "\"%s\"", vp->param.str); + break; + case YASM_PARAM_EXPR: + yasm_expr_print(vp->param.e, f); + break; + } + fprintf(f, ")"); + if (yasm_vps_next(vp)) + fprintf(f, ","); + } +} + +yasm_valparamhead * +yasm_vps_create(void) +{ + yasm_valparamhead *headp = yasm_xmalloc(sizeof(yasm_valparamhead)); + yasm_vps_initialize(headp); + return headp; +} + +void +yasm_vps_destroy(yasm_valparamhead *headp) +{ + yasm_vps_delete(headp); + yasm_xfree(headp); +} + +int +yasm_dir_helper(void *obj, yasm_valparam *vp_first, unsigned long line, + const yasm_dir_help *help, size_t nhelp, void *data, + int (*helper_valparam) (void *obj, yasm_valparam *vp, + unsigned long line, void *data)) +{ + yasm_valparam *vp = vp_first; + int anymatched = 0; + int matched; + + if (!vp) + return 0; + + do { + const char *s; + size_t i; + + matched = 0; + if (!vp->val && (s = yasm_vp_id(vp))) { + for (i=0; ival) { + for (i=0; ival, help[i].name) == 0) { + if (help[i].helper(obj, vp, line, + ((char *)data)+help[i].off, + help[i].arg) != 0) + return -1; + matched = 1; + anymatched = 1; + break; + } + } + } + + if (!matched) { + int final = helper_valparam(obj, vp, line, data); + if (final < 0) + return -1; + if (final > 0) + anymatched = 1; + } + } while((vp = yasm_vps_next(vp))); + + return anymatched; +} + +int +yasm_dir_helper_flag_or(void *obj, yasm_valparam *vp, unsigned long line, + void *d, uintptr_t flag) +{ + unsigned long *flags = (unsigned long *)d; + *flags |= flag; + return 0; +} + +int +yasm_dir_helper_flag_and(void *obj, yasm_valparam *vp, unsigned long line, + void *d, uintptr_t flag) +{ + unsigned long *flags = (unsigned long *)d; + *flags &= ~flag; + return 0; +} + +int +yasm_dir_helper_flag_set(void *obj, yasm_valparam *vp, unsigned long line, + void *d, uintptr_t flag) +{ + unsigned long *flags = (unsigned long *)d; + *flags = flag; + return 0; +} + +int +yasm_dir_helper_expr(void *obj, yasm_valparam *vp, unsigned long line, + void *data, uintptr_t arg) +{ + yasm_object *object = (yasm_object *)obj; + yasm_expr **expr = (yasm_expr **)data; + + if (*expr) + yasm_expr_destroy(*expr); + if (!(*expr = yasm_vp_expr(vp, object->symtab, line))) { + yasm_error_set(YASM_ERROR_VALUE, N_("argument to `%s' is not an expression"), + vp->val); + return -1; + } + return 0; +} + +int +yasm_dir_helper_intn(void *obj, yasm_valparam *vp, unsigned long line, + void *data, uintptr_t arg) +{ + yasm_object *object = (yasm_object *)obj; + /*@only@*/ /*@null@*/ yasm_expr *e; + /*@dependent@*/ /*@null@*/ yasm_intnum *local; + yasm_intnum **intn = (yasm_intnum **)data; + + if (*intn) + yasm_intnum_destroy(*intn); + if (!(e = yasm_vp_expr(vp, object->symtab, line)) || + !(local = yasm_expr_get_intnum(&e, 0))) { + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("argument to `%s' is not an integer"), + vp->val); + if (e) + yasm_expr_destroy(e); + return -1; + } + *intn = yasm_intnum_copy(local); + yasm_expr_destroy(e); + return 0; +} + +int +yasm_dir_helper_string(void *obj, yasm_valparam *vp, unsigned long line, + void *data, uintptr_t arg) +{ + /*@dependent@*/ /*@null@*/ const char *local; + char **s = (char **)data; + + if (*s) + yasm_xfree(*s); + if (!(local = yasm_vp_string(vp))) { + yasm_error_set(YASM_ERROR_VALUE, + N_("argument to `%s' is not a string or identifier"), + vp->val); + return -1; + } + *s = yasm__xstrdup(local); + return 0; +} + +int +yasm_dir_helper_valparam_warn(void *obj, yasm_valparam *vp, + unsigned long line, void *data) +{ + const char *s; + + if (vp->val) { + yasm_warn_set(YASM_WARN_GENERAL, N_("Unrecognized qualifier `%s'"), + vp->val); + return 0; + } + + if ((s = yasm_vp_id(vp))) + yasm_warn_set(YASM_WARN_GENERAL, N_("Unrecognized qualifier `%s'"), s); + else if (vp->type == YASM_PARAM_STRING) + yasm_warn_set(YASM_WARN_GENERAL, N_("Unrecognized string qualifier")); + else + yasm_warn_set(YASM_WARN_GENERAL, N_("Unrecognized numeric qualifier")); + + return 0; +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/valparam.h b/third-party/yasm/yasm-1.3.0/libyasm/valparam.h new file mode 100644 index 0000000000..d7343d4955 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/valparam.h @@ -0,0 +1,408 @@ +/** + * \file libyasm/valparam.h + * \brief YASM value/parameter interface. + * + * \license + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_VALPARAM_H +#define YASM_VALPARAM_H + +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +/** Value/parameter pair. \internal */ +struct yasm_valparam { + /*@reldef@*/ STAILQ_ENTRY(yasm_valparam) link; /**< Next pair in list */ + /*@owned@*/ /*@null@*/ char *val; /**< Value */ + + /** Parameter type. */ + enum yasm_param_type { + YASM_PARAM_ID, /**< Identifier */ + YASM_PARAM_STRING, /**< String */ + YASM_PARAM_EXPR /**< Expression */ + } type; /**< Parameter type */ + + /** Parameter value. */ + union yasm_param { + /*@owned@*/ char *id; /**< Identifier */ + /*@owned@*/ char *str; /**< String */ + /*@owned@*/ yasm_expr *e; /**< Expression */ + } param; /**< Parameter */ + + /** Prefix character that indicates a raw identifier. When + * yasm_vp_string() is called on a #YASM_PARAM_ID, all characters are + * returned. When yasm_vp_id() is called on a #YASM_PARAM_ID, if the + * identifier begins with this character, this character is stripped + * from the returned value. + */ + char id_prefix; +}; + +/** Linked list of value/parameter pairs. \internal */ +/*@reldef@*/ STAILQ_HEAD(yasm_valparamhead, yasm_valparam); + +/** Directive list entry structure. */ +struct yasm_directive { + /** Directive name. GAS directives should include the ".", NASM + * directives should just be the raw name (not including the []). + * NULL entry required to terminate list of directives. + */ + /*@null@*/ const char *name; + + const char *parser; /**< Parser keyword */ + + /** Handler callback function for the directive. + * \param object object + * \param valparams value/parameters + * \param objext_valparams object format-specific value/parameters + * \param line virtual line (from yasm_linemap) + */ + void (*handler) (yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line); + + /** Flags for pre-handler parameter checking. */ + enum yasm_directive_flags { + YASM_DIR_ANY = 0, /**< Any valparams accepted */ + YASM_DIR_ARG_REQUIRED = 1, /**< Require at least 1 valparam */ + YASM_DIR_ID_REQUIRED = 2 /**< First valparam must be ID */ + } flags; +}; + +/** Call a directive. Performs any valparam checks asked for by the + * directive prior to call. Note that for a variety of reasons, a directive + * can generate an error. + * \param directive directive + * \param object object + * \param valparams value/parameters + * \param objext_valparams object format-specific value/parameters + * \param line virtual line (from yasm_linemap) + */ +YASM_LIB_DECL +void yasm_call_directive(const yasm_directive *directive, yasm_object *object, + yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, + unsigned long line); + +/** Create a new valparam with identifier parameter. + * \param v value + * \param p parameter + * \param id_prefix identifier prefix for raw identifiers + * \return Newly allocated valparam. + */ +YASM_LIB_DECL +yasm_valparam *yasm_vp_create_id(/*@keep@*/ char *v, /*@keep@*/ char *p, + int id_prefix); + +/** Create a new valparam with string parameter. + * \param v value + * \param p parameter + * \return Newly allocated valparam. + */ +YASM_LIB_DECL +yasm_valparam *yasm_vp_create_string(/*@keep@*/ char *v, /*@keep@*/ char *p); + +/** Create a new valparam with expression parameter. + * \param v value + * \param p parameter + * \return Newly allocated valparam. + */ +YASM_LIB_DECL +yasm_valparam *yasm_vp_create_expr(/*@keep@*/ char *v, + /*@keep@*/ yasm_expr *p); + +/** Get a valparam parameter as an expr. If the parameter is an identifier, + * it's treated as a symbol (yasm_symtab_use() is called to convert it). + * \param vp valparam + * \param symtab symbol table + * \param line virtual line + * \return Expression, or NULL if vp is NULL or the parameter cannot be + * converted to an expression. + */ +YASM_LIB_DECL +/*@null@*/ /*@only@*/ yasm_expr *yasm_vp_expr + (const yasm_valparam *vp, yasm_symtab *symtab, unsigned long line); + +/** Get a valparam parameter as a string. If the parameter is an identifier, + * it's treated as a string. + * \param vp valparam + * \return String, or NULL if vp is NULL or the parameter cannot be realized + * as a string. + */ +YASM_LIB_DECL +/*@null@*/ /*@dependent@*/ const char *yasm_vp_string(const yasm_valparam *vp); + +/** Get a valparam parameter as an identifier. + * \param vp valparam + * \return Identifier (string), or NULL if vp is NULL or the parameter is not + * an identifier. + */ +YASM_LIB_DECL +/*@null@*/ /*@dependent@*/ const char *yasm_vp_id(const yasm_valparam *vp); + +/** Create a new linked list of valparams. + * \return Newly allocated valparam list. + */ +YASM_LIB_DECL +yasm_valparamhead *yasm_vps_create(void); + +/** Destroy a list of valparams (created with yasm_vps_create). + * \param headp list of valparams + */ +YASM_LIB_DECL +void yasm_vps_destroy(yasm_valparamhead *headp); + +/** Initialize linked list of valparams. + * \param headp linked list + */ +void yasm_vps_initialize(/*@out@*/ yasm_valparamhead *headp); +#ifndef YASM_DOXYGEN +#define yasm_vps_initialize(headp) STAILQ_INIT(headp) +#endif + +/** Destroy (free allocated memory for) linked list of valparams (created with + * yasm_vps_initialize). + * \warning Deletes val/params. + * \param headp linked list + */ +YASM_LIB_DECL +void yasm_vps_delete(yasm_valparamhead *headp); + +/** Append valparam to tail of linked list. + * \param headp linked list + * \param vp valparam + */ +void yasm_vps_append(yasm_valparamhead *headp, /*@keep@*/ yasm_valparam *vp); +#ifndef YASM_DOXYGEN +#define yasm_vps_append(headp, vp) do { \ + if (vp) \ + STAILQ_INSERT_TAIL(headp, vp, link); \ + } while(0) +#endif + +/** Get first valparam in linked list. + * \param headp linked list + * \return First valparam in linked list. + */ +/*@null@*/ /*@dependent@*/ yasm_valparam *yasm_vps_first + (yasm_valparamhead *headp); +#ifndef YASM_DOXYGEN +#define yasm_vps_first(headp) STAILQ_FIRST(headp) +#endif + +/** Get next valparam in linked list. + * \param cur previous valparam in linked list + * \return Next valparam in linked list. + */ +/*@null@*/ /*@dependent@*/ yasm_valparam *yasm_vps_next(yasm_valparam *cur); +#ifndef YASM_DOXYGEN +#define yasm_vps_next(cur) STAILQ_NEXT(cur, link) +#endif + +/** Iterate through linked list of valparams. + * \internal + * \param iter iterator variable + * \param headp linked list + */ +#ifndef YASM_DOXYGEN +#define yasm_vps_foreach(iter, headp) STAILQ_FOREACH(iter, headp, link) +#endif + +/** Print linked list of valparams. For debugging purposes. + * \param f file + * \param headp linked list + */ +YASM_LIB_DECL +void yasm_vps_print(/*@null@*/ const yasm_valparamhead *headp, FILE *f); + +/** Directive valparam parse helper structure. */ +typedef struct yasm_dir_help { + /** Value portion of val=param (if needsparam=1), or standalone identifier + * (if needsparam=0). + */ + const char *name; + + /** 1 if value requires parameter, 0 if it must not have a parameter. */ + int needsparam; + + /** Helper callback function if name and parameter existence match. + * \param obj obj passed into yasm_dir_helper() + * \param vp value/parameter + * \param line line passed into yasm_dir_helper() + * \param data data passed into yasm_dir_helper() plus + #yasm_dir_help.off offset + * \param arg #yasm_dir_help.arg argument + * \return -1 on error, 0 otherwise. + */ + int (*helper) (void *obj, yasm_valparam *vp, unsigned long line, + void *data, uintptr_t arg); + + /** Offset added to data pointer passed into yasm_dir_helper() before + * data pointer is given to #yasm_dir_help.helper(). This is so that + * a structure can be passed into yasm_dir_helper() and this can be an + * offsetof() to point the helper function to a specific structure + * member. + */ + size_t off; + + /** Argument to pass in as the arg parameter to #yasm_dir_help.helper(). + */ + uintptr_t arg; +} yasm_dir_help; + +/** Help parse a list of directive value/parameters. Takes an array of + * #yasm_dir_help structures and tries to match val=param (or just val) + * against the passed value/parameters. When no match is found in the + * array of help structures, calls helper_valparam. + * \param obj object to be passed to yasm_dir_help.helper() or + * helper_valparam() callback + * \param vp_first first value/parameter to examine + * \param line virtual line number; passed down to helper callback + * \param help array of #yasm_dir_help structures + * \param nhelp number of array elements + * \param data base data pointer; if a match is found, + * the respective #yasm_dir_help.off is added to this + * prior to it being passed to the helper callback + * \param helper_valparam catch-all callback; should return -1 on error, + * 0 if not matched, 1 if matched. + * \return -1 on error, 1 if any arguments matched (including via + * catch-all callback), 0 if no match. + */ +YASM_LIB_DECL +int yasm_dir_helper(void *obj, yasm_valparam *vp_first, unsigned long line, + const yasm_dir_help *help, size_t nhelp, void *data, + int (*helper_valparam) (void *object, + yasm_valparam *vp, + unsigned long line, + void *data)); + +/** Standard helper for yasm_dir_helper() that simply sets a flag when called. + * It does not look at the vp; rather, it uses the value of the arg parameter, + * and stores an unsigned long value to data. + * \param obj unused + * \param vp unused + * \param line unused + * \param data pointer to an unsigned long + * \param arg flag to set + * \return 0 + */ +YASM_LIB_DECL +int yasm_dir_helper_flag_set(void *obj, yasm_valparam *vp, unsigned long line, + void *data, uintptr_t arg); + +/** Standard helper for yasm_dir_helper() that simply ORs a flag when called. + * It does not look at the vp; rather, it uses the value of the arg parameter, + * and ORs it with the unsigned long value in data. + * \param obj unused + * \param vp unused + * \param line unused + * \param data pointer to an unsigned long + * \param arg flag to OR + * \return 0 + */ +YASM_LIB_DECL +int yasm_dir_helper_flag_or(void *obj, yasm_valparam *vp, unsigned long line, + void *data, uintptr_t arg); + +/** Standard helper for yasm_dir_helper() that simply ANDs a flag when called. + * It does not look at the vp; rather, it uses the value of the arg parameter, + * and ANDs its inverse (~) with the unsigned long value in data. + * \param obj unused + * \param vp unused + * \param line unused + * \param data pointer to an unsigned long + * \param arg flag to AND + * \return 0 + */ +YASM_LIB_DECL +int yasm_dir_helper_flag_and(void *obj, yasm_valparam *vp, unsigned long line, + void *data, uintptr_t arg); + +/** Standard helper for yasm_dir_helper() that parses an expr parameter. + * The #yasm_dir_help structure that uses this function should have + * needsparam=1. The obj parameter to yasm_dir_helper() when this helper + * is used MUST point to a #yasm_object. In addition, the data parameter + * that is ultimately passed to this function (e.g. yasm_dir_helper() data + * parameter plus #yasm_dir_help.off) must point to a #yasm_expr * + * initialized to NULL. + * \param obj object; must be #yasm_object + * \param vp valparam + * \param line virtual line number + * \param data pointer to #yasm_expr * + * \param arg unused argument + * \return -1 on error, 0 otherwise. + */ +YASM_LIB_DECL +int yasm_dir_helper_expr(void *obj, yasm_valparam *vp, unsigned long line, + void *data, uintptr_t arg); + +/** Standard helper for yasm_dir_helper() that parses an intnum parameter. + * The #yasm_dir_help structure that uses this function should have + * needsparam=1. The obj parameter to yasm_dir_helper() when this helper + * is used MUST point to a #yasm_object. In addition, the data parameter + * that is ultimately passed to this function (e.g. yasm_dir_helper() data + * parameter plus #yasm_dir_help.off) must point to a #yasm_intnum * + * initialized to NULL. + * \param obj object; must be #yasm_object + * \param vp valparam + * \param line virtual line number + * \param data pointer to #yasm_intnum * + * \param arg unused argument + * \return -1 on error, 0 otherwise. + */ +YASM_LIB_DECL +int yasm_dir_helper_intn(void *obj, yasm_valparam *vp, unsigned long line, + void *data, uintptr_t arg); + +/** Standard helper for yasm_dir_helper() that parses an string (or + * standalone identifier) parameter. + * The #yasm_dir_help structure that uses this function should have + * needsparam=1. The data parameter that is ultimately passed to this + * function (e.g. yasm_dir_helper() data parameter plus #yasm_dir_help.off) + * must point to a char * initialized to NULL. + * \param obj unused + * \param vp valparam + * \param line unused + * \param data pointer to char * + * \param arg unused + * \return -1 on error, 0 otherwise. + */ +YASM_LIB_DECL +int yasm_dir_helper_string(void *obj, yasm_valparam *vp, unsigned long line, + void *data, uintptr_t arg); + +/** Standard catch-all callback fro yasm_dir_helper(). Generates standard + * warning for all valparams. + * \param obj unused + * \param vp valparam + * \param line unused + * \param data unused + * \return 0 + */ +YASM_LIB_DECL +int yasm_dir_helper_valparam_warn(void *obj, yasm_valparam *vp, + unsigned long line, void *data); +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/value.c b/third-party/yasm/yasm-1.3.0/libyasm/value.c new file mode 100644 index 0000000000..3ab73c1cec --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/value.c @@ -0,0 +1,771 @@ +/* + * Value handling + * + * Copyright (C) 2006-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 "util.h" + +#include "libyasm-stdint.h" +#include "coretype.h" +#include "bitvect.h" + +#include "errwarn.h" +#include "intnum.h" +#include "floatnum.h" +#include "expr.h" +#include "value.h" +#include "symrec.h" + +#include "bytecode.h" +#include "section.h" + +#include "arch.h" + + +void +yasm_value_initialize(/*@out@*/ yasm_value *value, + /*@null@*/ /*@kept@*/ yasm_expr *e, unsigned int size) +{ + value->abs = e; + value->rel = NULL; + value->wrt = NULL; + value->seg_of = 0; + value->rshift = 0; + value->curpos_rel = 0; + value->ip_rel = 0; + value->jump_target = 0; + value->section_rel = 0; + value->no_warn = 0; + value->sign = 0; + value->size = size; +} + +void +yasm_value_init_sym(/*@out@*/ yasm_value *value, /*@null@*/ yasm_symrec *sym, + unsigned int size) +{ + value->abs = NULL; + value->rel = sym; + value->wrt = NULL; + value->seg_of = 0; + value->rshift = 0; + value->curpos_rel = 0; + value->ip_rel = 0; + value->jump_target = 0; + value->section_rel = 0; + value->no_warn = 0; + value->sign = 0; + value->size = size; +} + +void +yasm_value_init_copy(yasm_value *value, const yasm_value *orig) +{ + value->abs = orig->abs ? yasm_expr_copy(orig->abs) : NULL; + value->rel = orig->rel; + value->wrt = orig->wrt; + value->seg_of = orig->seg_of; + value->rshift = orig->rshift; + value->curpos_rel = orig->curpos_rel; + value->ip_rel = orig->ip_rel; + value->jump_target = orig->jump_target; + value->section_rel = orig->section_rel; + value->no_warn = orig->no_warn; + value->sign = orig->sign; + value->size = orig->size; +} + +void +yasm_value_delete(yasm_value *value) +{ + if (value->abs) + yasm_expr_destroy(value->abs); + value->abs = NULL; + value->rel = NULL; +} + +void +yasm_value_set_curpos_rel(yasm_value *value, yasm_bytecode *bc, + unsigned int ip_rel) +{ + value->curpos_rel = 1; + value->ip_rel = ip_rel; + /* In order for us to correctly output curpos-relative values, we must + * have a relative portion of the value. If one doesn't exist, point + * to a custom absolute symbol. + */ + if (!value->rel) { + yasm_object *object = yasm_section_get_object(yasm_bc_get_section(bc)); + value->rel = yasm_symtab_abs_sym(object->symtab); + } +} + +static int +value_finalize_scan(yasm_value *value, yasm_expr *e, + /*@null@*/ yasm_bytecode *expr_precbc, int ssym_not_ok) +{ + int i; + /*@dependent@*/ yasm_section *sect; + /*@dependent@*/ /*@null@*/ yasm_bytecode *precbc; + + unsigned long shamt; /* for SHR */ + + /* Yes, this has a maximum upper bound on 32 terms, based on an + * "insane number of terms" (and ease of implementation) WAG. + * The right way to do this would be a stack-based alloca, but that's + * not ISO C. We really don't want to malloc here as this function is + * hit a lot! + * + * This is a bitmask to keep things small, as this is a recursive + * routine and we don't want to eat up stack space. + */ + unsigned long used; /* for ADD */ + + /* Thanks to this running after a simplify, we don't need to iterate + * down through IDENTs or handle SUB. + * + * We scan for a single symrec, gathering info along the way. After + * we've found the symrec, we keep scanning but error if we find + * another one. We pull out the single symrec and any legal operations + * performed on it. + * + * Also, if we find a float anywhere, we don't allow mixing of a single + * symrec with it. + */ + switch (e->op) { + case YASM_EXPR_ADD: + /* Okay for single symrec anywhere in expr. + * Check for single symrec anywhere. + * Handle symrec-symrec by checking for (-1*symrec) + * and symrec term pairs (where both symrecs are in the same + * segment). + */ + if (e->numterms > 32) + yasm__fatal(N_("expression on line %d has too many add terms;" + " internal limit of 32"), e->line); + + used = 0; + + for (i=0; inumterms; i++) { + int j; + yasm_expr *sube; + yasm_intnum *intn; + yasm_symrec *sym; + /*@dependent@*/ yasm_section *sect2; + /*@dependent@*/ /*@null@*/ yasm_bytecode *precbc2; + + /* First look for an (-1*symrec) term */ + if (e->terms[i].type != YASM_EXPR_EXPR) + continue; + sube = e->terms[i].data.expn; + + if (sube->op != YASM_EXPR_MUL || sube->numterms != 2) { + /* recurse instead */ + if (value_finalize_scan(value, sube, expr_precbc, + ssym_not_ok)) + return 1; + continue; + } + + if (sube->terms[0].type == YASM_EXPR_INT && + sube->terms[1].type == YASM_EXPR_SYM) { + intn = sube->terms[0].data.intn; + sym = sube->terms[1].data.sym; + } else if (sube->terms[0].type == YASM_EXPR_SYM && + sube->terms[1].type == YASM_EXPR_INT) { + sym = sube->terms[0].data.sym; + intn = sube->terms[1].data.intn; + } else { + if (value_finalize_scan(value, sube, expr_precbc, + ssym_not_ok)) + return 1; + continue; + } + + if (!yasm_intnum_is_neg1(intn)) { + if (value_finalize_scan(value, sube, expr_precbc, + ssym_not_ok)) + return 1; + continue; + } + + /* Look for the same symrec term; even if both are external, + * they should cancel out. + */ + for (j=0; jnumterms; j++) { + if (e->terms[j].type == YASM_EXPR_SYM + && e->terms[j].data.sym == sym + && (used & (1<terms[i].type = YASM_EXPR_INT; + e->terms[i].data.intn = yasm_intnum_create_uint(0); + e->terms[j].type = YASM_EXPR_INT; + e->terms[j].data.intn = yasm_intnum_create_uint(0); + + break; /* stop looking */ + } + } + if (j != e->numterms) + continue; + + if (!yasm_symrec_get_label(sym, &precbc)) { + if (value_finalize_scan(value, sube, expr_precbc, + ssym_not_ok)) + return 1; + continue; + } + sect2 = yasm_bc_get_section(precbc); + + /* Now look for a unused symrec term in the same segment */ + for (j=0; jnumterms; j++) { + if (e->terms[j].type == YASM_EXPR_SYM + && yasm_symrec_get_label(e->terms[j].data.sym, + &precbc2) + && (sect = yasm_bc_get_section(precbc2)) + && sect == sect2 + && (used & (1<numterms && !value->curpos_rel + && (yasm_symrec_is_curpos(sym) + || (expr_precbc + && sect2 == yasm_bc_get_section(expr_precbc)))) { + for (j=0; jnumterms; j++) { + if (e->terms[j].type == YASM_EXPR_SYM + && !yasm_symrec_get_equ(e->terms[j].data.sym) + && !yasm_symrec_is_special(e->terms[j].data.sym) + && (used & (1<rel || ssym_not_ok) + return 1; + value->rel = e->terms[j].data.sym; + value->curpos_rel = 1; + if (yasm_symrec_is_curpos(sym)) { + /* Replace both symrec portions with 0 */ + yasm_expr_destroy(sube); + e->terms[i].type = YASM_EXPR_INT; + e->terms[i].data.intn = + yasm_intnum_create_uint(0); + e->terms[j].type = YASM_EXPR_INT; + e->terms[j].data.intn = + yasm_intnum_create_uint(0); + } else { + /* Replace positive portion with curpos */ + yasm_object *object = + yasm_section_get_object(sect2); + yasm_symtab *symtab = object->symtab; + e->terms[j].data.sym = + yasm_symtab_define_curpos + (symtab, ".", expr_precbc, e->line); + } + break; /* stop looking */ + } + } + } + + + if (j == e->numterms) + return 1; /* We didn't find a match! */ + } + + /* Look for unmatched symrecs. If we've already found one or + * we don't WANT to find one, error out. + */ + for (i=0; inumterms; i++) { + if (e->terms[i].type == YASM_EXPR_SYM + && (used & (1<rel || ssym_not_ok) + return 1; + value->rel = e->terms[i].data.sym; + /* and replace with 0 */ + e->terms[i].type = YASM_EXPR_INT; + e->terms[i].data.intn = yasm_intnum_create_uint(0); + } + } + break; + case YASM_EXPR_SHR: + /* Okay for single symrec in LHS and constant on RHS. + * Single symrecs are not okay on RHS. + * If RHS is non-constant, don't allow single symrec on LHS. + * XXX: should rshift be an expr instead?? + */ + + /* Check for single sym on LHS */ + if (e->terms[0].type != YASM_EXPR_SYM) + break; + + /* If we already have a sym, we can't take another one */ + if (value->rel || ssym_not_ok) + return 1; + + /* RHS must be a positive integer */ + if (e->terms[1].type != YASM_EXPR_INT) + return 1; /* can't shift sym by non-constant integer */ + shamt = yasm_intnum_get_uint(e->terms[1].data.intn); + if ((shamt + value->rshift) > YASM_VALUE_RSHIFT_MAX) + return 1; /* total shift would be too large */ + + /* Update value */ + value->rshift += shamt; + value->rel = e->terms[0].data.sym; + + /* Replace symbol with 0 */ + e->terms[0].type = YASM_EXPR_INT; + e->terms[0].data.intn = yasm_intnum_create_uint(0); + + /* Just leave SHR in place */ + break; + case YASM_EXPR_SEG: + /* Okay for single symrec (can only be done once). + * Not okay for anything BUT a single symrec as an immediate + * child. + */ + if (e->terms[0].type != YASM_EXPR_SYM) + return 1; + + if (value->seg_of) + return 1; /* multiple SEG not legal */ + value->seg_of = 1; + + if (value->rel || ssym_not_ok) + return 1; /* got a relative portion somewhere else? */ + value->rel = e->terms[0].data.sym; + + /* replace with ident'ed 0 */ + e->op = YASM_EXPR_IDENT; + e->terms[0].type = YASM_EXPR_INT; + e->terms[0].data.intn = yasm_intnum_create_uint(0); + break; + case YASM_EXPR_WRT: + /* Okay for single symrec in LHS and either a register or single + * symrec (as an immediate child) on RHS. + * If a single symrec on RHS, can only be done once. + * WRT reg is left in expr for arch to look at. + */ + + /* Handle RHS */ + switch (e->terms[1].type) { + case YASM_EXPR_SYM: + if (value->wrt) + return 1; + value->wrt = e->terms[1].data.sym; + /* and drop the WRT portion */ + e->op = YASM_EXPR_IDENT; + e->numterms = 1; + break; + case YASM_EXPR_REG: + break; /* ignore */ + default: + return 1; + } + + /* Handle LHS */ + switch (e->terms[0].type) { + case YASM_EXPR_SYM: + if (value->rel || ssym_not_ok) + return 1; + value->rel = e->terms[0].data.sym; + /* and replace with 0 */ + e->terms[0].type = YASM_EXPR_INT; + e->terms[0].data.intn = yasm_intnum_create_uint(0); + break; + case YASM_EXPR_EXPR: + /* recurse */ + return value_finalize_scan(value, e->terms[0].data.expn, + expr_precbc, ssym_not_ok); + default: + break; /* ignore */ + } + + break; + default: + /* Single symrec not allowed anywhere */ + for (i=0; inumterms; i++) { + switch (e->terms[i].type) { + case YASM_EXPR_SYM: + return 1; + case YASM_EXPR_EXPR: + /* recurse */ + return value_finalize_scan(value, + e->terms[i].data.expn, + expr_precbc, 1); + default: + break; + } + } + break; + } + + return 0; +} + +int +yasm_value_finalize_expr(yasm_value *value, yasm_expr *e, + yasm_bytecode *precbc, unsigned int size) +{ + if (!e) { + yasm_value_initialize(value, NULL, size); + return 0; + } + yasm_value_initialize(value, e, size); + return yasm_value_finalize(value, precbc); +} + +int +yasm_value_finalize(yasm_value *value, yasm_bytecode *precbc) +{ + if (!value->abs) + return 0; + + value->abs = yasm_expr__level_tree(value->abs, 1, 1, 0, 0, NULL, NULL); + + /* quit early if there was an issue in simplify() */ + if (yasm_error_occurred()) + return 1; + + /* Strip top-level AND masking to an all-1s mask the same size + * of the value size. This allows forced avoidance of overflow warnings. + */ + if (value->abs->op == YASM_EXPR_AND) { + int term; + + /* Calculate 1<size); + yasm_intnum_calc(mask, YASM_EXPR_SHL, mask_tmp); + yasm_intnum_set_uint(mask_tmp, 1); + yasm_intnum_calc(mask, YASM_EXPR_SUB, mask_tmp); + yasm_intnum_destroy(mask_tmp); + + /* Walk terms and delete matching masks */ + for (term=value->abs->numterms-1; term>=0; term--) { + if (value->abs->terms[term].type == YASM_EXPR_INT && + yasm_intnum_compare(value->abs->terms[term].data.intn, + mask) == 0) { + /* Delete the intnum */ + yasm_intnum_destroy(value->abs->terms[term].data.intn); + + /* Slide everything to its right over by 1 */ + if (term != value->abs->numterms-1) /* if it wasn't last.. */ + memmove(&value->abs->terms[term], + &value->abs->terms[term+1], + (value->abs->numterms-1-term)* + sizeof(yasm_expr__item)); + + /* Update numterms */ + value->abs->numterms--; + + /* Indicate warnings have been disabled */ + value->no_warn = 1; + } + } + if (value->abs->numterms == 1) + value->abs->op = YASM_EXPR_IDENT; + yasm_intnum_destroy(mask); + } + + /* Handle trivial (IDENT) cases immediately */ + if (value->abs->op == YASM_EXPR_IDENT) { + switch (value->abs->terms[0].type) { + case YASM_EXPR_INT: + if (yasm_intnum_is_zero(value->abs->terms[0].data.intn)) { + yasm_expr_destroy(value->abs); + value->abs = NULL; + } + return 0; + case YASM_EXPR_REG: + case YASM_EXPR_FLOAT: + return 0; + case YASM_EXPR_SYM: + value->rel = value->abs->terms[0].data.sym; + yasm_expr_destroy(value->abs); + value->abs = NULL; + return 0; + case YASM_EXPR_EXPR: + /* Bring up lower values. */ + while (value->abs->op == YASM_EXPR_IDENT + && value->abs->terms[0].type == YASM_EXPR_EXPR) { + yasm_expr *sube = value->abs->terms[0].data.expn; + yasm_xfree(value->abs); + value->abs = sube; + } + break; + default: + yasm_internal_error(N_("unexpected expr term type")); + } + } + + if (value_finalize_scan(value, value->abs, precbc, 0)) + return 1; + + value->abs = yasm_expr__level_tree(value->abs, 1, 1, 0, 0, NULL, NULL); + + /* Simplify 0 in abs to NULL */ + if (value->abs->op == YASM_EXPR_IDENT + && value->abs->terms[0].type == YASM_EXPR_INT + && yasm_intnum_is_zero(value->abs->terms[0].data.intn)) { + yasm_expr_destroy(value->abs); + value->abs = NULL; + } + return 0; +} + +yasm_intnum * +yasm_value_get_intnum(yasm_value *value, yasm_bytecode *bc, int calc_bc_dist) +{ + /*@dependent@*/ /*@null@*/ yasm_intnum *intn = NULL; + /*@only@*/ yasm_intnum *outval; + int sym_local; + + if (value->abs) { + /* Handle integer expressions, if non-integer or too complex, return + * NULL. + */ + intn = yasm_expr_get_intnum(&value->abs, calc_bc_dist); + if (!intn) + return NULL; + } + + if (value->rel) { + /* If relative portion is not in bc section, return NULL. + * Otherwise get the relative portion's offset. + */ + /*@dependent@*/ yasm_bytecode *rel_prevbc; + unsigned long dist; + + if (!bc) + return NULL; /* Can't calculate relative value */ + + sym_local = yasm_symrec_get_label(value->rel, &rel_prevbc); + if (value->wrt || value->seg_of || value->section_rel || !sym_local) + return NULL; /* we can't handle SEG, WRT, or external symbols */ + if (rel_prevbc->section != bc->section) + return NULL; /* not in this section */ + if (!value->curpos_rel) + return NULL; /* not PC-relative */ + + /* Calculate value relative to current assembly position */ + dist = yasm_bc_next_offset(rel_prevbc); + if (dist < bc->offset) { + outval = yasm_intnum_create_uint(bc->offset - dist); + yasm_intnum_calc(outval, YASM_EXPR_NEG, NULL); + } else { + dist -= bc->offset; + outval = yasm_intnum_create_uint(dist); + } + + if (value->rshift > 0) { + /*@only@*/ yasm_intnum *shamt = + yasm_intnum_create_uint((unsigned long)value->rshift); + yasm_intnum_calc(outval, YASM_EXPR_SHR, shamt); + yasm_intnum_destroy(shamt); + } + /* Add in absolute portion */ + if (intn) + yasm_intnum_calc(outval, YASM_EXPR_ADD, intn); + return outval; + } + + if (intn) + return yasm_intnum_copy(intn); + + /* No absolute or relative portions: output 0 */ + return yasm_intnum_create_uint(0); +} + +int +yasm_value_output_basic(yasm_value *value, /*@out@*/ unsigned char *buf, + size_t destsize, yasm_bytecode *bc, int warn, + yasm_arch *arch) +{ + /*@dependent@*/ /*@null@*/ yasm_intnum *intn = NULL; + /*@only@*/ yasm_intnum *outval; + int sym_local; + int retval = 1; + unsigned int valsize = value->size; + + if (value->no_warn) + warn = 0; + + if (value->abs) { + /* Handle floating point expressions */ + if (!value->rel && value->abs->op == YASM_EXPR_IDENT + && value->abs->terms[0].type == YASM_EXPR_FLOAT) { + if (yasm_arch_floatnum_tobytes(arch, value->abs->terms[0].data.flt, + buf, destsize, valsize, 0, warn)) + return -1; + else + return 1; + } + + /* Check for complex float expressions */ + if (yasm_expr__contains(value->abs, YASM_EXPR_FLOAT)) { + yasm_error_set(YASM_ERROR_FLOATING_POINT, + N_("floating point expression too complex")); + return -1; + } + + /* Handle normal integer expressions */ + intn = yasm_expr_get_intnum(&value->abs, 1); + + if (!intn) { + /* Second try before erroring: yasm_expr_get_intnum doesn't handle + * SEG:OFF, so try simplifying out any to just the OFF portion, + * then getting the intnum again. + */ + yasm_expr *seg = yasm_expr_extract_deep_segoff(&value->abs); + if (seg) + yasm_expr_destroy(seg); + intn = yasm_expr_get_intnum(&value->abs, 1); + } + + if (!intn) { + /* Still don't have an integer! */ + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("expression too complex")); + return -1; + } + } + + /* Adjust warn for signed/unsigned integer warnings */ + if (warn != 0) + warn = value->sign ? -1 : 1; + + if (value->rel) { + /* If relative portion is not in bc section, don't try to handle it + * here. Otherwise get the relative portion's offset. + */ + /*@dependent@*/ yasm_bytecode *rel_prevbc; + unsigned long dist; + + sym_local = yasm_symrec_get_label(value->rel, &rel_prevbc); + if (value->wrt || value->seg_of || value->section_rel || !sym_local) + return 0; /* we can't handle SEG, WRT, or external symbols */ + if (rel_prevbc->section != bc->section) + return 0; /* not in this section */ + if (!value->curpos_rel) + return 0; /* not PC-relative */ + + /* Calculate value relative to current assembly position */ + dist = yasm_bc_next_offset(rel_prevbc); + if (dist < bc->offset) { + outval = yasm_intnum_create_uint(bc->offset - dist); + yasm_intnum_calc(outval, YASM_EXPR_NEG, NULL); + } else { + dist -= bc->offset; + outval = yasm_intnum_create_uint(dist); + } + + if (value->rshift > 0) { + /*@only@*/ yasm_intnum *shamt = + yasm_intnum_create_uint((unsigned long)value->rshift); + yasm_intnum_calc(outval, YASM_EXPR_SHR, shamt); + yasm_intnum_destroy(shamt); + } + /* Add in absolute portion */ + if (intn) + yasm_intnum_calc(outval, YASM_EXPR_ADD, intn); + /* Output! */ + if (yasm_arch_intnum_tobytes(arch, outval, buf, destsize, valsize, 0, + bc, warn)) + retval = -1; + yasm_intnum_destroy(outval); + return retval; + } + + if (value->seg_of || value->rshift || value->curpos_rel || value->ip_rel + || value->section_rel) + return 0; /* We can't handle this with just an absolute */ + + if (intn) { + /* Output just absolute portion */ + if (yasm_arch_intnum_tobytes(arch, intn, buf, destsize, valsize, 0, bc, + warn)) + retval = -1; + } else { + /* No absolute or relative portions: output 0 */ + outval = yasm_intnum_create_uint(0); + if (yasm_arch_intnum_tobytes(arch, outval, buf, destsize, valsize, 0, + bc, warn)) + retval = -1; + yasm_intnum_destroy(outval); + } + return retval; +} + +void +yasm_value_print(const yasm_value *value, FILE *f, int indent_level) +{ + fprintf(f, "%*s%u-bit, %ssigned", indent_level, "", value->size, + value->sign ? "" : "un"); + fprintf(f, "%*sAbsolute portion=", indent_level, ""); + yasm_expr_print(value->abs, f); + fprintf(f, "\n"); + if (value->rel) { + fprintf(f, "%*sRelative to=%s%s\n", indent_level, "", + value->seg_of ? "SEG " : "", + yasm_symrec_get_name(value->rel)); + if (value->wrt) + fprintf(f, "%*s(With respect to=%s)\n", indent_level, "", + yasm_symrec_get_name(value->wrt)); + if (value->rshift > 0) + fprintf(f, "%*s(Right shifted by=%u)\n", indent_level, "", + value->rshift); + if (value->curpos_rel) + fprintf(f, "%*s(Relative to current position)\n", indent_level, + ""); + if (value->ip_rel) + fprintf(f, "%*s(IP-relative)\n", indent_level, ""); + if (value->jump_target) + fprintf(f, "%*s(Jump target)\n", indent_level, ""); + if (value->section_rel) + fprintf(f, "%*s(Section-relative)\n", indent_level, ""); + if (value->no_warn) + fprintf(f, "%*s(Overflow warnings disabled)\n", indent_level, ""); + } +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/value.h b/third-party/yasm/yasm-1.3.0/libyasm/value.h new file mode 100644 index 0000000000..4dc294bcc3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/value.h @@ -0,0 +1,172 @@ +/** + * \file libyasm/value.h + * \brief YASM value interface. + * + * \license + * Copyright (C) 2006-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + * \endlicense + */ +#ifndef YASM_VALUE_H +#define YASM_VALUE_H + +#ifndef YASM_LIB_DECL +#define YASM_LIB_DECL +#endif + +/** Initialize a #yasm_value with just an expression. No processing is + * performed, the expression is simply stuck into value.abs and the other + * fields are initialized. Use yasm_expr_extract_value() to perform "smart" + * processing into a #yasm_value. This function is intended for use during + * parsing simply to ensure all fields of the value are initialized; after + * the parse is complete, yasm_value_extract() should be called to finalize + * the value. The value defaults to unsigned. + * \param value value to be initialized + * \param e expression (kept) + * \param size value size (in bits) + */ +YASM_LIB_DECL +void yasm_value_initialize(/*@out@*/ yasm_value *value, + /*@null@*/ /*@kept@*/ yasm_expr *e, + unsigned int size); + +/** Initialize a #yasm_value with just a symrec. No processing is performed, + * the symrec is simply stuck into value.rel and the other fields are + * initialized. + * \param value value to be initialized + * \param sym symrec + * \param size value size (in bits) + */ +YASM_LIB_DECL +void yasm_value_init_sym(/*@out@*/ yasm_value *value, + /*@null@*/ yasm_symrec *sym, unsigned int size); + +/** Initialize a #yasm_value as a copy of another yasm_value. Any expressions + * within orig are copied, so it's safe to delete the copy. + * \param value value (copy to create) + * \param orig original value + */ +YASM_LIB_DECL +void yasm_value_init_copy(yasm_value *value, const yasm_value *orig); + +/** Frees any memory inside value; does not free value itself. + * \param value value + */ +YASM_LIB_DECL +void yasm_value_delete(yasm_value *value); + +/** Set a value to be relative to the current assembly position rather than + * relative to the section start. + * \param value value + * \param bc bytecode containing value + * \param ip_rel if nonzero, indicates IP-relative data relocation, + * sometimes used to generate special relocations + * \note If value is just an absolute value, will get an absolute symrec to + * reference to (via bc's symbol table). + */ +YASM_LIB_DECL +void yasm_value_set_curpos_rel(yasm_value *value, yasm_bytecode *bc, + unsigned int ip_rel); + +/** Perform yasm_value_finalize_expr() on a value that already exists from + * being initialized with yasm_value_initialize(). + * \param value value + * \param precbc previous bytecode to bytecode containing value + * \return Nonzero if value could not be split. + */ +YASM_LIB_DECL +int yasm_value_finalize(yasm_value *value, /*@null@*/ yasm_bytecode *precbc); + +/** Break a #yasm_expr into a #yasm_value constituent parts. Extracts + * the relative portion of the value, SEG and WRT portions, and top-level + * right shift, if any. Places the remaining expr into the absolute + * portion of the value. Essentially a combination of yasm_value_initialize() + * and yasm_value_finalize(). First expands references to symrecs in + * absolute sections by expanding with the absolute section start plus the + * symrec offset within the absolute section. + * \param value value to store split portions into + * \param e expression input + * \param precbc previous bytecode to bytecode containing expression + * \param size value size (in bits) + * \return Nonzero if the expr could not be split into a value for some + * reason (e.g. the relative portion was not added, but multiplied, + * etc). + * \warning Do not use e after this call. Even if an error is returned, e + * is stored into value. + * \note This should only be called after the parse is complete. Calling + * before the parse is complete will usually result in an error return. + */ +YASM_LIB_DECL +int yasm_value_finalize_expr(/*@out@*/ yasm_value *value, + /*@null@*/ /*@kept@*/ yasm_expr *e, + /*@null@*/ yasm_bytecode *precbc, + unsigned int size); + +/** Get value if absolute or PC-relative section-local relative. Returns NULL + * otherwise. + * \param value value + * \param bc current bytecode (for PC-relative calculation); if + * NULL, NULL is returned for PC-relative values. + * \param calc_bc_dist if nonzero, calculates bytecode distances in absolute + * portion of value + * \note Adds in value.rel (correctly) if PC-relative and in the same section + * as bc (and there is no WRT or SEG). + * \return Intnum if can be resolved to integer value, otherwise NULL. + */ +YASM_LIB_DECL +/*@null@*/ /*@only@*/ yasm_intnum *yasm_value_get_intnum + (yasm_value *value, /*@null@*/ yasm_bytecode *bc, int calc_bc_dist); + +/** Output value if constant or PC-relative section-local. This should be + * used from objfmt yasm_output_value_func() functions. + * functions. + * \param value value + * \param buf buffer for byte representation + * \param destsize destination size (in bytes) + * \param bc current bytecode (usually passed into higher-level + * calling function) + * \param warn enables standard warnings: zero for none; + * nonzero for overflow/underflow floating point and + * integer warnings + * \param arch architecture + * \note Adds in value.rel (correctly) if PC-relative and in the same section + * as bc (and there is no WRT or SEG); if this is not the desired + * behavior, e.g. a reloc is needed in this case, don't use this + * function! + * \return 0 if no value output due to value needing relocation; + * 1 if value output; -1 if error. + */ +YASM_LIB_DECL +int yasm_value_output_basic + (yasm_value *value, /*@out@*/ unsigned char *buf, size_t destsize, + yasm_bytecode *bc, int warn, yasm_arch *arch); + +/** Print a value. For debugging purposes. + * \param value value + * \param indent_level indentation level + * \param f file + */ +YASM_LIB_DECL +void yasm_value_print(const yasm_value *value, FILE *f, int indent_level); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/libyasm/xmalloc.c b/third-party/yasm/yasm-1.3.0/libyasm/xmalloc.c new file mode 100644 index 0000000000..81b608c078 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/xmalloc.c @@ -0,0 +1,114 @@ +/* + * Memory allocation routines with error checking. Idea from GNU libiberty. + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 "util.h" + +#include "coretype.h" +#include "errwarn.h" + + +#ifdef WITH_DMALLOC +#undef yasm_xmalloc +#undef yasm_xcalloc +#undef yasm_xrealloc +#undef yasm_xfree +#endif + +static /*@only@*/ /*@out@*/ void *def_xmalloc(size_t size); +static /*@only@*/ void *def_xcalloc(size_t nelem, size_t elsize); +static /*@only@*/ void *def_xrealloc + (/*@only@*/ /*@out@*/ /*@returned@*/ /*@null@*/ void *oldmem, size_t size) + /*@modifies oldmem@*/; +static void def_xfree(/*@only@*/ /*@out@*/ /*@null@*/ void *p) + /*@modifies p@*/; + +/* storage for global function pointers */ +YASM_LIB_DECL +/*@only@*/ /*@out@*/ void * (*yasm_xmalloc) (size_t size) = def_xmalloc; +YASM_LIB_DECL +/*@only@*/ void * (*yasm_xcalloc) (size_t nelem, size_t elsize) = def_xcalloc; +YASM_LIB_DECL +/*@only@*/ void * (*yasm_xrealloc) + (/*@only@*/ /*@out@*/ /*@returned@*/ /*@null@*/ void *oldmem, size_t size) + /*@modifies oldmem@*/ = def_xrealloc; +YASM_LIB_DECL +void (*yasm_xfree) (/*@only@*/ /*@out@*/ /*@null@*/ void *p) + /*@modifies p@*/ = def_xfree; + + +static void * +def_xmalloc(size_t size) +{ + void *newmem; + + if (size == 0) + size = 1; + newmem = malloc(size); + if (!newmem) + yasm__fatal(N_("out of memory")); + + return newmem; +} + +static void * +def_xcalloc(size_t nelem, size_t elsize) +{ + void *newmem; + + if (nelem == 0 || elsize == 0) + nelem = elsize = 1; + + newmem = calloc(nelem, elsize); + if (!newmem) + yasm__fatal(N_("out of memory")); + + return newmem; +} + +static void * +def_xrealloc(void *oldmem, size_t size) +{ + void *newmem; + + if (size == 0) + size = 1; + if (!oldmem) + newmem = malloc(size); + else + newmem = realloc(oldmem, size); + if (!newmem) + yasm__fatal(N_("out of memory")); + + return newmem; +} + +static void +def_xfree(void *p) +{ + if (!p) + return; + free(p); +} diff --git a/third-party/yasm/yasm-1.3.0/libyasm/xstrdup.c b/third-party/yasm/yasm-1.3.0/libyasm/xstrdup.c new file mode 100644 index 0000000000..b187704f0e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/libyasm/xstrdup.c @@ -0,0 +1,68 @@ +/* + * strdup() implementation with error checking (using xmalloc). + * + * Copyright (c) 1988, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS 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 "util.h" + +#include "coretype.h" + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "@(#)strdup.c 8.1 (Berkeley) 6/4/93"; +#endif /* LIBC_SCCS and not lint */ + + +#ifdef WITH_DMALLOC +#undef yasm__xstrdup +#endif + +char * +yasm__xstrdup(const char *str) +{ + size_t len; + char *copy; + + len = strlen(str) + 1; + copy = yasm_xmalloc(len); + memcpy(copy, str, len); + return (copy); +} + +char * +yasm__xstrndup(const char *str, size_t max) +{ + size_t len = 0; + char *copy; + + while (len < max && str[len] != '\0') + len++; + copy = yasm_xmalloc(len+1); + memcpy(copy, str, len); + copy[len] = '\0'; + return (copy); +} diff --git a/third-party/yasm/yasm-1.3.0/m4/Makefile.inc b/third-party/yasm/yasm-1.3.0/m4/Makefile.inc new file mode 100644 index 0000000000..1afffbbf29 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/Makefile.inc @@ -0,0 +1,30 @@ +EXTRA_DIST += m4/intmax.m4 +EXTRA_DIST += m4/longdouble.m4 +EXTRA_DIST += m4/nls.m4 +EXTRA_DIST += m4/po.m4 +EXTRA_DIST += m4/printf-posix.m4 +EXTRA_DIST += m4/signed.m4 +EXTRA_DIST += m4/size_max.m4 +EXTRA_DIST += m4/ulonglong.m4 +EXTRA_DIST += m4/wchar_t.m4 +EXTRA_DIST += m4/wint_t.m4 +EXTRA_DIST += m4/xsize.m4 +EXTRA_DIST += m4/codeset.m4 +EXTRA_DIST += m4/gettext.m4 +EXTRA_DIST += m4/glibc21.m4 +EXTRA_DIST += m4/iconv.m4 +EXTRA_DIST += m4/intdiv0.m4 +EXTRA_DIST += m4/inttypes.m4 +EXTRA_DIST += m4/inttypes_h.m4 +EXTRA_DIST += m4/inttypes-pri.m4 +EXTRA_DIST += m4/isc-posix.m4 +EXTRA_DIST += m4/lcmessage.m4 +EXTRA_DIST += m4/lib-ld.m4 +EXTRA_DIST += m4/lib-link.m4 +EXTRA_DIST += m4/lib-prefix.m4 +EXTRA_DIST += m4/longlong.m4 +EXTRA_DIST += m4/progtest.m4 +EXTRA_DIST += m4/stdint_h.m4 +EXTRA_DIST += m4/uintmax_t.m4 +EXTRA_DIST += m4/pythonhead.m4 +EXTRA_DIST += m4/cython.m4 diff --git a/third-party/yasm/yasm-1.3.0/m4/ax_create_stdint_h.m4 b/third-party/yasm/yasm-1.3.0/m4/ax_create_stdint_h.m4 new file mode 100644 index 0000000000..927fb69638 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/ax_create_stdint_h.m4 @@ -0,0 +1,675 @@ +dnl @synopsis AX_CREATE_STDINT_H [( HEADER-TO-GENERATE [, HEDERS-TO-CHECK])] +dnl +dnl the "ISO C9X: 7.18 Integer types " section requires the +dnl existence of an include file that defines a set of +dnl typedefs, especially uint8_t,int32_t,uintptr_t. +dnl Many older installations will not provide this file, but some will +dnl have the very same definitions in . In other enviroments +dnl we can use the inet-types in which would define the +dnl typedefs int8_t and u_int8_t respectivly. +dnl +dnl This macros will create a local "_stdint.h" or the headerfile given as +dnl an argument. In many cases that file will just "#include " +dnl or "#include ", while in other environments it will provide +dnl the set of basic 'stdint's definitions/typedefs: +dnl int8_t,uint8_t,int16_t,uint16_t,int32_t,uint32_t,intptr_t,uintptr_t +dnl int_least32_t.. int_fast32_t.. intmax_t +dnl which may or may not rely on the definitions of other files, +dnl or using the AC_CHECK_SIZEOF macro to determine the actual +dnl sizeof each type. +dnl +dnl if your header files require the stdint-types you will want to create an +dnl installable file mylib-int.h that all your other installable header +dnl may include. So if you have a library package named "mylib", just use +dnl AX_CREATE_STDINT_H(mylib-int.h) +dnl in configure.ac and go to install that very header file in Makefile.am +dnl along with the other headers (mylib.h) - and the mylib-specific headers +dnl can simply use "#include " to obtain the stdint-types. +dnl +dnl Remember, if the system already had a valid , the generated +dnl file will include it directly. No need for fuzzy HAVE_STDINT_H things... +dnl +dnl @, (status: used on new platforms) (see http://ac-archive.sf.net/gstdint/) +dnl @version $Id: ax_create_stdint_h.m4,v 1.5 2005/01/06 18:27:27 guidod Exp $ +dnl @author Guido Draheim + +AC_DEFUN([AX_CHECK_DATA_MODEL],[ + AC_CHECK_SIZEOF(char) + AC_CHECK_SIZEOF(short) + AC_CHECK_SIZEOF(int) + AC_CHECK_SIZEOF(long) + AC_CHECK_SIZEOF(void*) + ac_cv_char_data_model="" + ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_char" + ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_short" + ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_int" + ac_cv_long_data_model="" + ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_int" + ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_long" + ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_voidp" + AC_MSG_CHECKING([data model]) + case "$ac_cv_char_data_model/$ac_cv_long_data_model" in + 122/242) ac_cv_data_model="IP16" ; n="standard 16bit machine" ;; + 122/244) ac_cv_data_model="LP32" ; n="standard 32bit machine" ;; + 122/*) ac_cv_data_model="i16" ; n="unusual int16 model" ;; + 124/444) ac_cv_data_model="ILP32" ; n="standard 32bit unixish" ;; + 124/488) ac_cv_data_model="LP64" ; n="standard 64bit unixish" ;; + 124/448) ac_cv_data_model="LLP64" ; n="unusual 64bit unixish" ;; + 124/*) ac_cv_data_model="i32" ; n="unusual int32 model" ;; + 128/888) ac_cv_data_model="ILP64" ; n="unusual 64bit numeric" ;; + 128/*) ac_cv_data_model="i64" ; n="unusual int64 model" ;; + 222/*2) ac_cv_data_model="DSP16" ; n="strict 16bit dsptype" ;; + 333/*3) ac_cv_data_model="DSP24" ; n="strict 24bit dsptype" ;; + 444/*4) ac_cv_data_model="DSP32" ; n="strict 32bit dsptype" ;; + 666/*6) ac_cv_data_model="DSP48" ; n="strict 48bit dsptype" ;; + 888/*8) ac_cv_data_model="DSP64" ; n="strict 64bit dsptype" ;; + 222/*|333/*|444/*|666/*|888/*) : + ac_cv_data_model="iDSP" ; n="unusual dsptype" ;; + *) ac_cv_data_model="none" ; n="very unusual model" ;; + esac + AC_MSG_RESULT([$ac_cv_data_model ($ac_cv_long_data_model, $n)]) +]) + +dnl AX_CHECK_HEADER_STDINT_X([HEADERLIST][,ACTION-IF]) +AC_DEFUN([AX_CHECK_HEADER_STDINT_X],[ +AC_CACHE_CHECK([for stdint uintptr_t], [ac_cv_header_stdint_x],[ + ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h) + AC_MSG_RESULT([(..)]) + for i in m4_ifval([$1],[$1],[stdint.h inttypes.h sys/inttypes.h]) ; do + unset ac_cv_type_uintptr_t + unset ac_cv_type_uint64_t + AC_CHECK_TYPE(uintptr_t,[ac_cv_header_stdint_x=$i],continue,[#include <$i>]) + AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>]) + break; + done + AC_MSG_CHECKING([for stdint uintptr_t]) + ]) +]) + +AC_DEFUN([AX_CHECK_HEADER_STDINT_O],[ +AC_CACHE_CHECK([for stdint uint32_t], [ac_cv_header_stdint_o],[ + ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h) + AC_MSG_RESULT([(..)]) + for i in m4_ifval([$1],[$1],[inttypes.h sys/inttypes.h stdint.h]) ; do + unset ac_cv_type_uint32_t + unset ac_cv_type_uint64_t + AC_CHECK_TYPE(uint32_t,[ac_cv_header_stdint_o=$i],continue,[#include <$i>]) + AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>]) + break; + done + AC_MSG_CHECKING([for stdint uint32_t]) + ]) +]) + +AC_DEFUN([AX_CHECK_HEADER_STDINT_U],[ +AC_CACHE_CHECK([for stdint u_int32_t], [ac_cv_header_stdint_u],[ + ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h) + AC_MSG_RESULT([(..)]) + for i in m4_ifval([$1],[$1],[sys/types.h inttypes.h sys/inttypes.h]) ; do + unset ac_cv_type_u_int32_t + unset ac_cv_type_u_int64_t + AC_CHECK_TYPE(u_int32_t,[ac_cv_header_stdint_u=$i],continue,[#include <$i>]) + AC_CHECK_TYPE(u_int64_t,[and64="/u_int64_t"],[and64=""],[#include<$i>]) + break; + done + AC_MSG_CHECKING([for stdint u_int32_t]) + ]) +]) + +AC_DEFUN([AX_CREATE_STDINT_H], +[# ------ AX CREATE STDINT H ------------------------------------- +AC_MSG_CHECKING([for stdint types]) +ac_stdint_h=`echo ifelse($1, , _stdint.h, $1)` +# try to shortcircuit - if the default include path of the compiler +# can find a "stdint.h" header then we assume that all compilers can. +AC_CACHE_VAL([ac_cv_header_stdint_t],[ +old_CXXFLAGS="$CXXFLAGS" ; CXXFLAGS="" +old_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS="" +old_CFLAGS="$CFLAGS" ; CFLAGS="" +AC_TRY_COMPILE([#include ],[int_least32_t v = 0;], +[ac_cv_stdint_result="(assuming C99 compatible system)" + ac_cv_header_stdint_t="stdint.h"; ], +[ac_cv_header_stdint_t=""]) +CXXFLAGS="$old_CXXFLAGS" +CPPFLAGS="$old_CPPFLAGS" +CFLAGS="$old_CFLAGS" ]) + +v="... $ac_cv_header_stdint_h" +if test "$ac_stdint_h" = "stdint.h" ; then + AC_MSG_RESULT([(are you sure you want them in ./stdint.h?)]) +elif test "$ac_stdint_h" = "inttypes.h" ; then + AC_MSG_RESULT([(are you sure you want them in ./inttypes.h?)]) +elif test "_$ac_cv_header_stdint_t" = "_" ; then + AC_MSG_RESULT([(putting them into $ac_stdint_h)$v]) +else + ac_cv_header_stdint="$ac_cv_header_stdint_t" + AC_MSG_RESULT([$ac_cv_header_stdint (shortcircuit)]) +fi + +if test "_$ac_cv_header_stdint_t" = "_" ; then # can not shortcircuit.. + +dnl .....intro message done, now do a few system checks..... +dnl btw, all old CHECK_TYPE macros do automatically "DEFINE" a type, +dnl therefore we use the autoconf implementation detail CHECK_TYPE_NEW +dnl instead that is triggered with 3 or more arguments (see types.m4) + +inttype_headers=`echo $2 | sed -e 's/,/ /g'` + +ac_cv_stdint_result="(no helpful system typedefs seen)" +AX_CHECK_HEADER_STDINT_X(dnl + stdint.h inttypes.h sys/inttypes.h $inttype_headers, + ac_cv_stdint_result="(seen uintptr_t$and64 in $i)") + +if test "_$ac_cv_header_stdint_x" = "_" ; then +AX_CHECK_HEADER_STDINT_O(dnl, + inttypes.h sys/inttypes.h stdint.h $inttype_headers, + ac_cv_stdint_result="(seen uint32_t$and64 in $i)") +fi + +if test "_$ac_cv_header_stdint_x" = "_" ; then +if test "_$ac_cv_header_stdint_o" = "_" ; then +AX_CHECK_HEADER_STDINT_U(dnl, + sys/types.h inttypes.h sys/inttypes.h $inttype_headers, + ac_cv_stdint_result="(seen u_int32_t$and64 in $i)") +fi fi + +dnl if there was no good C99 header file, do some typedef checks... +if test "_$ac_cv_header_stdint_x" = "_" ; then + AC_MSG_CHECKING([for stdint datatype model]) + AC_MSG_RESULT([(..)]) + AX_CHECK_DATA_MODEL +fi + +if test "_$ac_cv_header_stdint_x" != "_" ; then + ac_cv_header_stdint="$ac_cv_header_stdint_x" +elif test "_$ac_cv_header_stdint_o" != "_" ; then + ac_cv_header_stdint="$ac_cv_header_stdint_o" +elif test "_$ac_cv_header_stdint_u" != "_" ; then + ac_cv_header_stdint="$ac_cv_header_stdint_u" +else + ac_cv_header_stdint="stddef.h" +fi + +AC_MSG_CHECKING([for extra inttypes in chosen header]) +AC_MSG_RESULT([($ac_cv_header_stdint)]) +dnl see if int_least and int_fast types are present in _this_ header. +unset ac_cv_type_int_least32_t +unset ac_cv_type_int_fast32_t +AC_CHECK_TYPE(int_least32_t,,,[#include <$ac_cv_header_stdint>]) +AC_CHECK_TYPE(int_fast32_t,,,[#include<$ac_cv_header_stdint>]) +AC_CHECK_TYPE(intmax_t,,,[#include <$ac_cv_header_stdint>]) + +fi # shortcircut to system "stdint.h" +# ------------------ PREPARE VARIABLES ------------------------------ +#if test "$GCC" = "yes" ; then +#ac_cv_stdint_message="using gnu compiler "`$CC --version | head -1` +#else +ac_cv_stdint_message="using $CC" +#fi + +AC_MSG_RESULT([make use of $ac_cv_header_stdint in $ac_stdint_h dnl +$ac_cv_stdint_result]) + +dnl ----------------------------------------------------------------- +# ----------------- DONE inttypes.h checks START header ------------- +AC_CONFIG_COMMANDS([$ac_stdint_h],[ +AC_MSG_NOTICE(creating $ac_stdint_h : $_ac_stdint_h) +ac_stdint=$tmp/_stdint.h + +echo "#ifndef" $_ac_stdint_h >$ac_stdint +echo "#define" $_ac_stdint_h "1" >>$ac_stdint +echo "#ifndef" _GENERATED_STDINT_H >>$ac_stdint +echo "#define" _GENERATED_STDINT_H '"'$PACKAGE $VERSION'"' >>$ac_stdint +echo "/* generated $ac_cv_stdint_message */" >>$ac_stdint +if test "_$ac_cv_header_stdint_t" != "_" ; then +echo "#define _STDINT_HAVE_STDINT_H" "1" >>$ac_stdint +echo "#include " >>$ac_stdint +echo "#endif" >>$ac_stdint +echo "#endif" >>$ac_stdint +else + +cat >>$ac_stdint < +#else +#include + +/* .................... configured part ............................ */ + +STDINT_EOF + +echo "/* whether we have a C99 compatible stdint header file */" >>$ac_stdint +if test "_$ac_cv_header_stdint_x" != "_" ; then + ac_header="$ac_cv_header_stdint_x" + echo "#define _STDINT_HEADER_INTPTR" '"'"$ac_header"'"' >>$ac_stdint +else + echo "/* #undef _STDINT_HEADER_INTPTR */" >>$ac_stdint +fi + +echo "/* whether we have a C96 compatible inttypes header file */" >>$ac_stdint +if test "_$ac_cv_header_stdint_o" != "_" ; then + ac_header="$ac_cv_header_stdint_o" + echo "#define _STDINT_HEADER_UINT32" '"'"$ac_header"'"' >>$ac_stdint +else + echo "/* #undef _STDINT_HEADER_UINT32 */" >>$ac_stdint +fi + +echo "/* whether we have a BSD compatible inet types header */" >>$ac_stdint +if test "_$ac_cv_header_stdint_u" != "_" ; then + ac_header="$ac_cv_header_stdint_u" + echo "#define _STDINT_HEADER_U_INT32" '"'"$ac_header"'"' >>$ac_stdint +else + echo "/* #undef _STDINT_HEADER_U_INT32 */" >>$ac_stdint +fi + +echo "" >>$ac_stdint + +if test "_$ac_header" != "_" ; then if test "$ac_header" != "stddef.h" ; then + echo "#include <$ac_header>" >>$ac_stdint + echo "" >>$ac_stdint +fi fi + +echo "/* which 64bit typedef has been found */" >>$ac_stdint +if test "$ac_cv_type_uint64_t" = "yes" ; then +echo "#define _STDINT_HAVE_UINT64_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_UINT64_T */" >>$ac_stdint +fi +if test "$ac_cv_type_u_int64_t" = "yes" ; then +echo "#define _STDINT_HAVE_U_INT64_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_U_INT64_T */" >>$ac_stdint +fi +echo "" >>$ac_stdint + +echo "/* which type model has been detected */" >>$ac_stdint +if test "_$ac_cv_char_data_model" != "_" ; then +echo "#define _STDINT_CHAR_MODEL" "$ac_cv_char_data_model" >>$ac_stdint +echo "#define _STDINT_LONG_MODEL" "$ac_cv_long_data_model" >>$ac_stdint +else +echo "/* #undef _STDINT_CHAR_MODEL // skipped */" >>$ac_stdint +echo "/* #undef _STDINT_LONG_MODEL // skipped */" >>$ac_stdint +fi +echo "" >>$ac_stdint + +echo "/* whether int_least types were detected */" >>$ac_stdint +if test "$ac_cv_type_int_least32_t" = "yes"; then +echo "#define _STDINT_HAVE_INT_LEAST32_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_INT_LEAST32_T */" >>$ac_stdint +fi +echo "/* whether int_fast types were detected */" >>$ac_stdint +if test "$ac_cv_type_int_fast32_t" = "yes"; then +echo "#define _STDINT_HAVE_INT_FAST32_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_INT_FAST32_T */" >>$ac_stdint +fi +echo "/* whether intmax_t type was detected */" >>$ac_stdint +if test "$ac_cv_type_intmax_t" = "yes"; then +echo "#define _STDINT_HAVE_INTMAX_T" "1" >>$ac_stdint +else +echo "/* #undef _STDINT_HAVE_INTMAX_T */" >>$ac_stdint +fi +echo "" >>$ac_stdint + + cat >>$ac_stdint <= 199901L +#define _HAVE_UINT64_T +#define _HAVE_LONGLONG_UINT64_T +typedef long long int64_t; +typedef unsigned long long uint64_t; + +#elif !defined __STRICT_ANSI__ +#if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__ +#define _HAVE_UINT64_T +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; + +#elif defined __GNUC__ || defined __MWERKS__ || defined __ELF__ +/* note: all ELF-systems seem to have loff-support which needs 64-bit */ +#if !defined _NO_LONGLONG +#define _HAVE_UINT64_T +#define _HAVE_LONGLONG_UINT64_T +typedef long long int64_t; +typedef unsigned long long uint64_t; +#endif + +#elif defined __alpha || (defined __mips && defined _ABIN32) +#if !defined _NO_LONGLONG +typedef long int64_t; +typedef unsigned long uint64_t; +#endif + /* compiler/cpu type to define int64_t */ +#endif +#endif +#endif + +#if defined _STDINT_HAVE_U_INT_TYPES +/* int8_t int16_t int32_t defined by inet code, redeclare the u_intXX types */ +typedef u_int8_t uint8_t; +typedef u_int16_t uint16_t; +typedef u_int32_t uint32_t; + +/* glibc compatibility */ +#ifndef __int8_t_defined +#define __int8_t_defined +#endif +#endif + +#ifdef _STDINT_NEED_INT_MODEL_T +/* we must guess all the basic types. Apart from byte-adressable system, */ +/* there a few 32-bit-only dsp-systems that we guard with BYTE_MODEL 8-} */ +/* (btw, those nibble-addressable systems are way off, or so we assume) */ + +dnl /* have a look at "64bit and data size neutrality" at */ +dnl /* http://unix.org/version2/whatsnew/login_64bit.html */ +dnl /* (the shorthand "ILP" types always have a "P" part) */ + +#if defined _STDINT_BYTE_MODEL +#if _STDINT_LONG_MODEL+0 == 242 +/* 2:4:2 = IP16 = a normal 16-bit system */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned long uint32_t; +#ifndef __int8_t_defined +#define __int8_t_defined +typedef char int8_t; +typedef short int16_t; +typedef long int32_t; +#endif +#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL == 444 +/* 2:4:4 = LP32 = a 32-bit system derived from a 16-bit */ +/* 4:4:4 = ILP32 = a normal 32-bit system */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#ifndef __int8_t_defined +#define __int8_t_defined +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +#endif +#elif _STDINT_LONG_MODEL+0 == 484 || _STDINT_LONG_MODEL+0 == 488 +/* 4:8:4 = IP32 = a 32-bit system prepared for 64-bit */ +/* 4:8:8 = LP64 = a normal 64-bit system */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#ifndef __int8_t_defined +#define __int8_t_defined +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +#endif +/* this system has a "long" of 64bit */ +#ifndef _HAVE_UINT64_T +#define _HAVE_UINT64_T +typedef unsigned long uint64_t; +typedef long int64_t; +#endif +#elif _STDINT_LONG_MODEL+0 == 448 +/* LLP64 a 64-bit system derived from a 32-bit system */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#ifndef __int8_t_defined +#define __int8_t_defined +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +#endif +/* assuming the system has a "long long" */ +#ifndef _HAVE_UINT64_T +#define _HAVE_UINT64_T +#define _HAVE_LONGLONG_UINT64_T +typedef unsigned long long uint64_t; +typedef long long int64_t; +#endif +#else +#define _STDINT_NO_INT32_T +#endif +#else +#define _STDINT_NO_INT8_T +#define _STDINT_NO_INT32_T +#endif +#endif + +/* + * quote from SunOS-5.8 sys/inttypes.h: + * Use at your own risk. As of February 1996, the committee is squarely + * behind the fixed sized types; the "least" and "fast" types are still being + * discussed. The probability that the "fast" types may be removed before + * the standard is finalized is high enough that they are not currently + * implemented. + */ + +#if defined _STDINT_NEED_INT_LEAST_T +typedef int8_t int_least8_t; +typedef int16_t int_least16_t; +typedef int32_t int_least32_t; +#ifdef _HAVE_UINT64_T +typedef int64_t int_least64_t; +#endif + +typedef uint8_t uint_least8_t; +typedef uint16_t uint_least16_t; +typedef uint32_t uint_least32_t; +#ifdef _HAVE_UINT64_T +typedef uint64_t uint_least64_t; +#endif + /* least types */ +#endif + +#if defined _STDINT_NEED_INT_FAST_T +typedef int8_t int_fast8_t; +typedef int int_fast16_t; +typedef int32_t int_fast32_t; +#ifdef _HAVE_UINT64_T +typedef int64_t int_fast64_t; +#endif + +typedef uint8_t uint_fast8_t; +typedef unsigned uint_fast16_t; +typedef uint32_t uint_fast32_t; +#ifdef _HAVE_UINT64_T +typedef uint64_t uint_fast64_t; +#endif + /* fast types */ +#endif + +#ifdef _STDINT_NEED_INTMAX_T +#ifdef _HAVE_UINT64_T +typedef int64_t intmax_t; +typedef uint64_t uintmax_t; +#else +typedef long intmax_t; +typedef unsigned long uintmax_t; +#endif +#endif + +#ifdef _STDINT_NEED_INTPTR_T +#ifndef __intptr_t_defined +#define __intptr_t_defined +/* we encourage using "long" to store pointer values, never use "int" ! */ +#if _STDINT_LONG_MODEL+0 == 242 || _STDINT_LONG_MODEL+0 == 484 +typedef unsinged int uintptr_t; +typedef int intptr_t; +#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL+0 == 444 +typedef unsigned long uintptr_t; +typedef long intptr_t; +#elif _STDINT_LONG_MODEL+0 == 448 && defined _HAVE_UINT64_T +typedef uint64_t uintptr_t; +typedef int64_t intptr_t; +#else /* matches typical system types ILP32 and LP64 - but not IP16 or LLP64 */ +typedef unsigned long uintptr_t; +typedef long intptr_t; +#endif +#endif +#endif + +/* The ISO C99 standard specifies that in C++ implementations these + should only be defined if explicitly requested. */ +#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS +#ifndef UINT32_C + +/* Signed. */ +# define INT8_C(c) c +# define INT16_C(c) c +# define INT32_C(c) c +# ifdef _HAVE_LONGLONG_UINT64_T +# define INT64_C(c) c ## L +# else +# define INT64_C(c) c ## LL +# endif + +/* Unsigned. */ +# define UINT8_C(c) c ## U +# define UINT16_C(c) c ## U +# define UINT32_C(c) c ## U +# ifdef _HAVE_LONGLONG_UINT64_T +# define UINT64_C(c) c ## UL +# else +# define UINT64_C(c) c ## ULL +# endif + +/* Maximal type. */ +# ifdef _HAVE_LONGLONG_UINT64_T +# define INTMAX_C(c) c ## L +# define UINTMAX_C(c) c ## UL +# else +# define INTMAX_C(c) c ## LL +# define UINTMAX_C(c) c ## ULL +# endif + + /* literalnumbers */ +#endif +#endif + +/* These limits are merily those of a two complement byte-oriented system */ + +/* Minimum of signed integral types. */ +# define INT8_MIN (-128) +# define INT16_MIN (-32767-1) +# define INT32_MIN (-2147483647-1) +# define INT64_MIN (-__INT64_C(9223372036854775807)-1) +/* Maximum of signed integral types. */ +# define INT8_MAX (127) +# define INT16_MAX (32767) +# define INT32_MAX (2147483647) +# define INT64_MAX (__INT64_C(9223372036854775807)) + +/* Maximum of unsigned integral types. */ +# define UINT8_MAX (255) +# define UINT16_MAX (65535) +# define UINT32_MAX (4294967295U) +# define UINT64_MAX (__UINT64_C(18446744073709551615)) + +/* Minimum of signed integral types having a minimum size. */ +# define INT_LEAST8_MIN INT8_MIN +# define INT_LEAST16_MIN INT16_MIN +# define INT_LEAST32_MIN INT32_MIN +# define INT_LEAST64_MIN INT64_MIN +/* Maximum of signed integral types having a minimum size. */ +# define INT_LEAST8_MAX INT8_MAX +# define INT_LEAST16_MAX INT16_MAX +# define INT_LEAST32_MAX INT32_MAX +# define INT_LEAST64_MAX INT64_MAX + +/* Maximum of unsigned integral types having a minimum size. */ +# define UINT_LEAST8_MAX UINT8_MAX +# define UINT_LEAST16_MAX UINT16_MAX +# define UINT_LEAST32_MAX UINT32_MAX +# define UINT_LEAST64_MAX UINT64_MAX + + /* shortcircuit*/ +#endif + /* once */ +#endif +#endif +STDINT_EOF +fi + if cmp -s $ac_stdint_h $ac_stdint 2>/dev/null; then + AC_MSG_NOTICE([$ac_stdint_h is unchanged]) + else + ac_dir=`AS_DIRNAME(["$ac_stdint_h"])` + AS_MKDIR_P(["$ac_dir"]) + rm -f $ac_stdint_h + mv $ac_stdint $ac_stdint_h + fi +],[# variables for create stdint.h replacement +PACKAGE="$PACKAGE" +VERSION="$VERSION" +ac_stdint_h="$ac_stdint_h" +_ac_stdint_h=AS_TR_CPP(_$PACKAGE-$ac_stdint_h) +ac_cv_stdint_message="$ac_cv_stdint_message" +ac_cv_header_stdint_t="$ac_cv_header_stdint_t" +ac_cv_header_stdint_x="$ac_cv_header_stdint_x" +ac_cv_header_stdint_o="$ac_cv_header_stdint_o" +ac_cv_header_stdint_u="$ac_cv_header_stdint_u" +ac_cv_type_uint64_t="$ac_cv_type_uint64_t" +ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t" +ac_cv_char_data_model="$ac_cv_char_data_model" +ac_cv_long_data_model="$ac_cv_long_data_model" +ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t" +ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t" +ac_cv_type_intmax_t="$ac_cv_type_intmax_t" +]) +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/codeset.m4 b/third-party/yasm/yasm-1.3.0/m4/codeset.m4 new file mode 100644 index 0000000000..a6e67ec498 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/codeset.m4 @@ -0,0 +1,21 @@ +# codeset.m4 serial AM1 (gettext-0.10.40) +dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([AM_LANGINFO_CODESET], +[ + AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, + [AC_TRY_LINK([#include ], + [char* cs = nl_langinfo(CODESET);], + am_cv_langinfo_codeset=yes, + am_cv_langinfo_codeset=no) + ]) + if test $am_cv_langinfo_codeset = yes; then + AC_DEFINE(HAVE_LANGINFO_CODESET, 1, + [Define if you have and nl_langinfo(CODESET).]) + fi +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/cython.m4 b/third-party/yasm/yasm-1.3.0/m4/cython.m4 new file mode 100644 index 0000000000..e56bfba0e7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/cython.m4 @@ -0,0 +1,23 @@ +dnl a macro to check for the installed Cython version; note PYTHON needs to +dnl be set before this function is called. +dnl CYTHON_CHECK_VERSION([MIN-VERSION], [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +AC_DEFUN([CYTHON_CHECK_VERSION], + [prog="import re, sys +from Cython.Compiler.Version import version +def get_int(arg): + matched = re.match(r'\d+', arg) + if matched is None: + return 0 + else: + return int(matched.group(0)) +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +ver = map(get_int, version.rstrip('abcdefghijklmnopqrstuvwxyz').split('.')) + [[0, 0, 0]] +verhex = 0 +for i in range(0, 4): verhex = (verhex << 8) + ver[[i]] +minver = map(get_int, '$1'.split('.')) + [[0, 0, 0]] +minverhex = 0 +for i in range(0, 4): minverhex = (minverhex << 8) + minver[[i]] +sys.exit(verhex < minverhex)" + AS_IF([AM_RUN_LOG([$PYTHON -c "$prog"])], [$2], [$3])]) + diff --git a/third-party/yasm/yasm-1.3.0/m4/gettext.m4 b/third-party/yasm/yasm-1.3.0/m4/gettext.m4 new file mode 100644 index 0000000000..8d1f0665c8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/gettext.m4 @@ -0,0 +1,401 @@ +# gettext.m4 serial 66 (gettext-0.18.2) +dnl Copyright (C) 1995-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2006, 2008-2010. + +dnl Macro to add for using GNU gettext. + +dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). +dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The +dnl default (if it is not specified or empty) is 'no-libtool'. +dnl INTLSYMBOL should be 'external' for packages with no intl directory, +dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. +dnl If INTLSYMBOL is 'use-libtool', then a libtool library +dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, +dnl depending on --{enable,disable}-{shared,static} and on the presence of +dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library +dnl $(top_builddir)/intl/libintl.a will be created. +dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext +dnl implementations (in libc or libintl) without the ngettext() function +dnl will be ignored. If NEEDSYMBOL is specified and is +dnl 'need-formatstring-macros', then GNU gettext implementations that don't +dnl support the ISO C 99 formatstring macros will be ignored. +dnl INTLDIR is used to find the intl libraries. If empty, +dnl the value '$(top_builddir)/intl/' is used. +dnl +dnl The result of the configuration is one of three cases: +dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled +dnl and used. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 2) GNU gettext has been found in the system's C library. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 3) No internationalization, always use English msgid. +dnl Catalog format: none +dnl Catalog extension: none +dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. +dnl The use of .gmo is historical (it was needed to avoid overwriting the +dnl GNU format catalogs when building on a platform with an X/Open gettext), +dnl but we keep it in order not to force irrelevant filename changes on the +dnl maintainers. +dnl +AC_DEFUN([AM_GNU_GETTEXT], +[ + dnl Argument checking. + ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , + [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT +])])])])]) + ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], + [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) + ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , + [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT +])])])]) + define([gt_included_intl], + ifelse([$1], [external], + ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), + [yes])) + define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) + gt_NEEDS_INIT + AM_GNU_GETTEXT_NEED([$2]) + + AC_REQUIRE([AM_PO_SUBDIRS])dnl + ifelse(gt_included_intl, yes, [ + AC_REQUIRE([AM_INTL_SUBDIR])dnl + ]) + + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Sometimes libintl requires libiconv, so first search for libiconv. + dnl Ideally we would do this search only after the + dnl if test "$USE_NLS" = "yes"; then + dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT + dnl the configure script would need to contain the same shell code + dnl again, outside any 'if'. There are two solutions: + dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. + dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. + dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not + dnl documented, we avoid it. + ifelse(gt_included_intl, yes, , [ + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + ]) + + dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation. + gt_INTL_MACOSX + + dnl Set USE_NLS. + AC_REQUIRE([AM_NLS]) + + ifelse(gt_included_intl, yes, [ + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + ]) + LIBINTL= + LTLIBINTL= + POSUB= + + dnl Add a version number to the cache macros. + case " $gt_needs " in + *" need-formatstring-macros "*) gt_api_version=3 ;; + *" need-ngettext "*) gt_api_version=2 ;; + *) gt_api_version=1 ;; + esac + gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" + gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" + + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + ifelse(gt_included_intl, yes, [ + AC_MSG_CHECKING([whether included gettext is requested]) + AC_ARG_WITH([included-gettext], + [ --with-included-gettext use the GNU gettext library included here], + nls_cv_force_use_gnu_gettext=$withval, + nls_cv_force_use_gnu_gettext=no) + AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + ]) + dnl User does not insist on using GNU NLS library. Figure out what + dnl to use. If GNU gettext is available we use this. Else we have + dnl to fall back to GNU NLS library. + + if test $gt_api_version -ge 3; then + gt_revision_test_code=' +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +changequote(,)dnl +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +changequote([,])dnl +' + else + gt_revision_test_code= + fi + if test $gt_api_version -ge 2; then + gt_expression_test_code=' + * ngettext ("", "", 0)' + else + gt_expression_test_code= + fi + + AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings; + ]], + [[ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings + ]])], + [eval "$gt_func_gnugettext_libc=yes"], + [eval "$gt_func_gnugettext_libc=no"])]) + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + dnl Sometimes libintl requires libiconv, so first search for libiconv. + ifelse(gt_included_intl, yes, , [ + AM_ICONV_LINK + ]) + dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL + dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) + dnl because that would add "-liconv" to LIBINTL and LTLIBINTL + dnl even if libiconv doesn't exist. + AC_LIB_LINKFLAGS_BODY([intl]) + AC_CACHE_CHECK([for GNU gettext in libintl], + [$gt_func_gnugettext_libintl], + [gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + dnl Now see whether libintl exists and does not depend on libiconv. + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); + ]], + [[ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + ]])], + [eval "$gt_func_gnugettext_libintl=yes"], + [eval "$gt_func_gnugettext_libintl=no"]) + dnl Now see whether libintl exists and depends on libiconv. + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); + ]], + [[ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + ]])], + [LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + eval "$gt_func_gnugettext_libintl=yes" + ]) + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS"]) + fi + + dnl If an already present or preinstalled GNU gettext() is found, + dnl use it. But if this macro is used in GNU gettext, and GNU + dnl gettext is already preinstalled in libintl, we update this + dnl libintl. (Cf. the install rule in intl/Makefile.in.) + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ + || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + dnl Reset the values set by searching for libintl. + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + ifelse(gt_included_intl, yes, [ + if test "$gt_use_preinstalled_gnugettext" != "yes"; then + dnl GNU gettext is not found in the C library. + dnl Fall back on included GNU gettext library. + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions used to generate GNU NLS library. + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" + LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi + + CATOBJEXT= + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions to use GNU gettext tools. + CATOBJEXT=.gmo + fi + ]) + + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Some extra flags are needed during linking. + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + AC_DEFINE([ENABLE_NLS], [1], + [Define to 1 if translation of program messages to the user's native language + is requested.]) + else + USE_NLS=no + fi + fi + + AC_MSG_CHECKING([whether to use NLS]) + AC_MSG_RESULT([$USE_NLS]) + if test "$USE_NLS" = "yes"; then + AC_MSG_CHECKING([where the gettext function comes from]) + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + gt_source="external libintl" + else + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + AC_MSG_RESULT([$gt_source]) + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + AC_MSG_CHECKING([how to link with libintl]) + AC_MSG_RESULT([$LIBINTL]) + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) + fi + + dnl For backward compatibility. Some packages may be using this. + AC_DEFINE([HAVE_GETTEXT], [1], + [Define if the GNU gettext() function is already present or preinstalled.]) + AC_DEFINE([HAVE_DCGETTEXT], [1], + [Define if the GNU dcgettext() function is already present or preinstalled.]) + fi + + dnl We need to process the po/ directory. + POSUB=po + fi + + ifelse(gt_included_intl, yes, [ + dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL + dnl to 'yes' because some of the testsuite requires it. + if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then + BUILD_INCLUDED_LIBINTL=yes + fi + + dnl Make all variables we use known to autoconf. + AC_SUBST([BUILD_INCLUDED_LIBINTL]) + AC_SUBST([USE_INCLUDED_LIBINTL]) + AC_SUBST([CATOBJEXT]) + + dnl For backward compatibility. Some configure.ins may be using this. + nls_cv_header_intl= + nls_cv_header_libgt= + + dnl For backward compatibility. Some Makefiles may be using this. + DATADIRNAME=share + AC_SUBST([DATADIRNAME]) + + dnl For backward compatibility. Some Makefiles may be using this. + INSTOBJEXT=.mo + AC_SUBST([INSTOBJEXT]) + + dnl For backward compatibility. Some Makefiles may be using this. + GENCAT=gencat + AC_SUBST([GENCAT]) + + dnl For backward compatibility. Some Makefiles may be using this. + INTLOBJS= + if test "$USE_INCLUDED_LIBINTL" = yes; then + INTLOBJS="\$(GETTOBJS)" + fi + AC_SUBST([INTLOBJS]) + + dnl Enable libtool support if the surrounding package wishes it. + INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix + AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) + ]) + + dnl For backward compatibility. Some Makefiles may be using this. + INTLLIBS="$LIBINTL" + AC_SUBST([INTLLIBS]) + + dnl Make all documented variables known to autoconf. + AC_SUBST([LIBINTL]) + AC_SUBST([LTLIBINTL]) + AC_SUBST([POSUB]) +]) + + +dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. +m4_define([gt_NEEDS_INIT], +[ + m4_divert_text([DEFAULTS], [gt_needs=]) + m4_define([gt_NEEDS_INIT], []) +]) + + +dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) +AC_DEFUN([AM_GNU_GETTEXT_NEED], +[ + m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) +]) + + +dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) +AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) diff --git a/third-party/yasm/yasm-1.3.0/m4/glibc21.m4 b/third-party/yasm/yasm-1.3.0/m4/glibc21.m4 new file mode 100644 index 0000000000..d95fd98613 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/glibc21.m4 @@ -0,0 +1,30 @@ +# glibc21.m4 serial 3 +dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Test for the GNU C Library, version 2.1 or newer. +# From Bruno Haible. + +AC_DEFUN([gl_GLIBC21], + [ + AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, + ac_cv_gnu_library_2_1, + [AC_EGREP_CPP([Lucky GNU user], + [ +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif + ], + ac_cv_gnu_library_2_1=yes, + ac_cv_gnu_library_2_1=no) + ] + ) + AC_SUBST(GLIBC21) + GLIBC21="$ac_cv_gnu_library_2_1" + ] +) diff --git a/third-party/yasm/yasm-1.3.0/m4/iconv.m4 b/third-party/yasm/yasm-1.3.0/m4/iconv.m4 new file mode 100644 index 0000000000..a503646569 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/iconv.m4 @@ -0,0 +1,268 @@ +# iconv.m4 serial 18 (gettext-0.18.2) +dnl Copyright (C) 2000-2002, 2007-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], +[ + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([iconv]) +]) + +AC_DEFUN([AM_ICONV_LINK], +[ + dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and + dnl those with the standalone portable GNU libiconv installed). + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + + dnl Add $INCICONV to CPPFLAGS before performing the following checks, + dnl because if the user has installed libiconv and not disabled its use + dnl via --without-libiconv-prefix, he wants to use it. The first + dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed. + am_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) + + AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include + ]], + [[iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);]])], + [am_cv_func_iconv=yes]) + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include + ]], + [[iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);]])], + [am_cv_lib_iconv=yes] + [am_cv_func_iconv=yes]) + LIBS="$am_save_LIBS" + fi + ]) + if test "$am_cv_func_iconv" = yes; then + AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ + dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11, + dnl Solaris 10. + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include +#include +int main () +{ + int result = 0; + /* Test against AIX 5.1 bug: Failures are not distinguishable from successful + returns. */ + { + iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); + if (cd_utf8_to_88591 != (iconv_t)(-1)) + { + static const char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 1; + iconv_close (cd_utf8_to_88591); + } + } + /* Test against Solaris 10 bug: Failures are not distinguishable from + successful returns. */ + { + iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); + if (cd_ascii_to_88591 != (iconv_t)(-1)) + { + static const char input[] = "\263"; + char buf[10]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_ascii_to_88591, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 2; + iconv_close (cd_ascii_to_88591); + } + } + /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static const char input[] = "\304"; + static char buf[2] = { (char)0xDE, (char)0xAD }; + const char *inptr = input; + size_t inbytesleft = 1; + char *outptr = buf; + size_t outbytesleft = 1; + size_t res = iconv (cd_88591_to_utf8, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) + result |= 4; + iconv_close (cd_88591_to_utf8); + } + } +#if 0 /* This bug could be worked around by the caller. */ + /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_88591_to_utf8, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + result |= 8; + iconv_close (cd_88591_to_utf8); + } + } +#endif + /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is + provided. */ + if (/* Try standardized names. */ + iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) + /* Try IRIX, OSF/1 names. */ + && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) + /* Try AIX names. */ + && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) + /* Try HP-UX names. */ + && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) + result |= 16; + return result; +}]])], + [am_cv_func_iconv_works=yes], + [am_cv_func_iconv_works=no], + [ +changequote(,)dnl + case "$host_os" in + aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; + *) am_cv_func_iconv_works="guessing yes" ;; + esac +changequote([,])dnl + ]) + LIBS="$am_save_LIBS" + ]) + case "$am_cv_func_iconv_works" in + *no) am_func_iconv=no am_cv_lib_iconv=no ;; + *) am_func_iconv=yes ;; + esac + else + am_func_iconv=no am_cv_lib_iconv=no + fi + if test "$am_func_iconv" = yes; then + AC_DEFINE([HAVE_ICONV], [1], + [Define if you have the iconv() function and it works.]) + fi + if test "$am_cv_lib_iconv" = yes; then + AC_MSG_CHECKING([how to link with libiconv]) + AC_MSG_RESULT([$LIBICONV]) + else + dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV + dnl either. + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + AC_SUBST([LIBICONV]) + AC_SUBST([LTLIBICONV]) +]) + +dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to +dnl avoid warnings like +dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". +dnl This is tricky because of the way 'aclocal' is implemented: +dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. +dnl Otherwise aclocal's initial scan pass would miss the macro definition. +dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. +dnl Otherwise aclocal would emit many "Use of uninitialized value $1" +dnl warnings. +m4_define([gl_iconv_AC_DEFUN], + m4_version_prereq([2.64], + [[AC_DEFUN_ONCE( + [$1], [$2])]], + [m4_ifdef([gl_00GNULIB], + [[AC_DEFUN_ONCE( + [$1], [$2])]], + [[AC_DEFUN( + [$1], [$2])]])])) +gl_iconv_AC_DEFUN([AM_ICONV], +[ + AM_ICONV_LINK + if test "$am_cv_func_iconv" = yes; then + AC_MSG_CHECKING([for iconv declaration]) + AC_CACHE_VAL([am_cv_proto_iconv], [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif + ]], + [[]])], + [am_cv_proto_iconv_arg1=""], + [am_cv_proto_iconv_arg1="const"]) + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) + am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + AC_MSG_RESULT([ + $am_cv_proto_iconv]) + AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], + [Define as const if the declaration of iconv() needs const.]) + dnl Also substitute ICONV_CONST in the gnulib generated . + m4_ifdef([gl_ICONV_H_DEFAULTS], + [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) + if test -n "$am_cv_proto_iconv_arg1"; then + ICONV_CONST="const" + fi + ]) + fi +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/intdiv0.m4 b/third-party/yasm/yasm-1.3.0/m4/intdiv0.m4 new file mode 100644 index 0000000000..b8d78176a6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/intdiv0.m4 @@ -0,0 +1,70 @@ +# intdiv0.m4 serial 1 (gettext-0.11.3) +dnl Copyright (C) 2002 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([gt_INTDIV0], +[ + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl + + AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], + gt_cv_int_divbyzero_sigfpe, + [ + AC_TRY_RUN([ +#include +#include + +static void +#ifdef __cplusplus +sigfpe_handler (int sig) +#else +sigfpe_handler (sig) int sig; +#endif +{ + /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ + exit (sig != SIGFPE); +} + +int x = 1; +int y = 0; +int z; +int nan; + +int main () +{ + signal (SIGFPE, sigfpe_handler); +/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ +#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) + signal (SIGTRAP, sigfpe_handler); +#endif +/* Linux/SPARC yields signal SIGILL. */ +#if defined (__sparc__) && defined (__linux__) + signal (SIGILL, sigfpe_handler); +#endif + + z = x / y; + nan = y / y; + exit (1); +} +], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no, + [ + # Guess based on the CPU. + case "$host_cpu" in + alpha* | i[34567]86 | m68k | s390*) + gt_cv_int_divbyzero_sigfpe="guessing yes";; + *) + gt_cv_int_divbyzero_sigfpe="guessing no";; + esac + ]) + ]) + case "$gt_cv_int_divbyzero_sigfpe" in + *yes) value=1;; + *) value=0;; + esac + AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value, + [Define if integer division by zero raises signal SIGFPE.]) +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/intmax.m4 b/third-party/yasm/yasm-1.3.0/m4/intmax.m4 new file mode 100644 index 0000000000..d99c999fdb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/intmax.m4 @@ -0,0 +1,30 @@ +# intmax.m4 serial 2 (gettext-0.14.2) +dnl Copyright (C) 2002-2005 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether the system has the 'intmax_t' type, but don't attempt to +dnl find a replacement if it is lacking. + +AC_DEFUN([gt_TYPE_INTMAX_T], +[ + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t, + [AC_TRY_COMPILE([ +#include +#include +#if HAVE_STDINT_H_WITH_UINTMAX +#include +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +#include +#endif +], [intmax_t x = -1;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)]) + if test $gt_cv_c_intmax_t = yes; then + AC_DEFINE(HAVE_INTMAX_T, 1, + [Define if you have the 'intmax_t' type in or .]) + fi +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/inttypes-pri.m4 b/third-party/yasm/yasm-1.3.0/m4/inttypes-pri.m4 new file mode 100644 index 0000000000..4d56a9ad30 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/inttypes-pri.m4 @@ -0,0 +1,30 @@ +# inttypes-pri.m4 serial 1 (gettext-0.11.4) +dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +# Define PRI_MACROS_BROKEN if exists and defines the PRI* +# macros to non-string values. This is the case on AIX 4.3.3. + +AC_DEFUN([gt_INTTYPES_PRI], +[ + AC_REQUIRE([gt_HEADER_INTTYPES_H]) + if test $gt_cv_header_inttypes_h = yes; then + AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], + gt_cv_inttypes_pri_broken, + [ + AC_TRY_COMPILE([#include +#ifdef PRId32 +char *p = PRId32; +#endif +], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes) + ]) + fi + if test "$gt_cv_inttypes_pri_broken" = yes; then + AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1, + [Define if exists and defines unusable PRI* macros.]) + fi +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/inttypes.m4 b/third-party/yasm/yasm-1.3.0/m4/inttypes.m4 new file mode 100644 index 0000000000..779bcea059 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/inttypes.m4 @@ -0,0 +1,25 @@ +# inttypes.m4 serial 1 (gettext-0.11.4) +dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_INTTYPES_H if exists and doesn't clash with +# . + +AC_DEFUN([gt_HEADER_INTTYPES_H], +[ + AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h, + [ + AC_TRY_COMPILE( + [#include +#include ], + [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no) + ]) + if test $gt_cv_header_inttypes_h = yes; then + AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1, + [Define if exists and doesn't clash with .]) + fi +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/inttypes_h.m4 b/third-party/yasm/yasm-1.3.0/m4/inttypes_h.m4 new file mode 100644 index 0000000000..a5d075d968 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/inttypes_h.m4 @@ -0,0 +1,26 @@ +# inttypes_h.m4 serial 6 +dnl Copyright (C) 1997-2004 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, +# doesn't clash with , and declares uintmax_t. + +AC_DEFUN([gl_AC_HEADER_INTTYPES_H], +[ + AC_CACHE_CHECK([for inttypes.h], gl_cv_header_inttypes_h, + [AC_TRY_COMPILE( + [#include +#include ], + [uintmax_t i = (uintmax_t) -1;], + gl_cv_header_inttypes_h=yes, + gl_cv_header_inttypes_h=no)]) + if test $gl_cv_header_inttypes_h = yes; then + AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1, + [Define if exists, doesn't clash with , + and declares uintmax_t. ]) + fi +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/isc-posix.m4 b/third-party/yasm/yasm-1.3.0/m4/isc-posix.m4 new file mode 100644 index 0000000000..74dc8f26d8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/isc-posix.m4 @@ -0,0 +1,24 @@ +# isc-posix.m4 serial 2 (gettext-0.11.2) +dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# This file is not needed with autoconf-2.53 and newer. Remove it in 2005. + +# This test replaces the one in autoconf. +# Currently this macro should have the same name as the autoconf macro +# because gettext's gettext.m4 (distributed in the automake package) +# still uses it. Otherwise, the use in gettext.m4 makes autoheader +# give these diagnostics: +# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX +# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX + +undefine([AC_ISC_POSIX]) + +AC_DEFUN([AC_ISC_POSIX], + [ + dnl This test replaces the obsolescent AC_ISC_POSIX kludge. + AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) + ] +) diff --git a/third-party/yasm/yasm-1.3.0/m4/lcmessage.m4 b/third-party/yasm/yasm-1.3.0/m4/lcmessage.m4 new file mode 100644 index 0000000000..19aa77e4f7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/lcmessage.m4 @@ -0,0 +1,30 @@ +# lcmessage.m4 serial 4 (gettext-0.14.2) +dnl Copyright (C) 1995-2002, 2004-2005 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995. + +# Check whether LC_MESSAGES is available in . + +AC_DEFUN([gt_LC_MESSAGES], +[ + AC_CACHE_CHECK([for LC_MESSAGES], gt_cv_val_LC_MESSAGES, + [AC_TRY_LINK([#include ], [return LC_MESSAGES], + gt_cv_val_LC_MESSAGES=yes, gt_cv_val_LC_MESSAGES=no)]) + if test $gt_cv_val_LC_MESSAGES = yes; then + AC_DEFINE(HAVE_LC_MESSAGES, 1, + [Define if your file defines LC_MESSAGES.]) + fi +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/lib-ld.m4 b/third-party/yasm/yasm-1.3.0/m4/lib-ld.m4 new file mode 100644 index 0000000000..c145e478e9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/lib-ld.m4 @@ -0,0 +1,119 @@ +# lib-ld.m4 serial 6 +dnl Copyright (C) 1996-2003, 2009-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Subroutines of libtool.m4, +dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid +dnl collision with libtool.m4. + +dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no. +AC_DEFUN([AC_LIB_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], +[# I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 /dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` + while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL([acl_cv_path_LD], +[if test -z "$LD"; then + acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$acl_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 = 1.10 to complain if config.rpath is missing. + m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) + AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS + AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host + AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir + AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + ]) + wl="$acl_cv_wl" + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + dnl Determine whether the user wants rpath handling at all. + AC_ARG_ENABLE([rpath], + [ --disable-rpath do not hardcode runtime library paths], + :, enable_rpath=yes) +]) + +dnl AC_LIB_FROMPACKAGE(name, package) +dnl declares that libname comes from the given package. The configure file +dnl will then not have a --with-libname-prefix option but a +dnl --with-package-prefix option. Several libraries can come from the same +dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar +dnl macro call that searches for libname. +AC_DEFUN([AC_LIB_FROMPACKAGE], +[ + pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + define([acl_frompackage_]NAME, [$2]) + popdef([NAME]) + pushdef([PACK],[$2]) + pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + define([acl_libsinpackage_]PACKUP, + m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) + popdef([PACKUP]) + popdef([PACK]) +]) + +dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. +dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found +dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_LINKFLAGS_BODY], +[ + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) + pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) + dnl Autoconf >= 2.61 supports dots in --with options. + pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_ARG_WITH(P_A_C_K[-prefix], +[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib + --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi +]) + dnl Search the library and its dependencies in $additional_libdir and + dnl $LDFLAGS. Using breadth-first-seach. + LIB[]NAME= + LTLIB[]NAME= + INC[]NAME= + LIB[]NAME[]_PREFIX= + dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been + dnl computed. So it has to be reset here. + HAVE_LIB[]NAME= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='$1 $2' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + dnl See if it was already located by an earlier AC_LIB_LINKFLAGS + dnl or AC_LIB_HAVE_LINKFLAGS call. + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" + else + dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined + dnl that this library doesn't exist. So just drop it. + : + fi + else + dnl Search the library lib$name in $additional_libdir and $LDFLAGS + dnl and the already constructed $LIBNAME/$LTLIBNAME. + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + dnl The same code as in the loop below: + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + dnl Found the library. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + dnl Linking with a shared library. We attempt to hardcode its + dnl directory into the executable's runpath, unless it's the + dnl standard /usr/lib. + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + dnl No hardcoding is needed. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + dnl The hardcoding into $LIBNAME is system dependent. + if test "$acl_hardcode_direct" = yes; then + dnl Using DIR/libNAME.so during linking hardcodes DIR into the + dnl resulting binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + dnl Rely on "-L$found_dir". + dnl But don't add it if it's already contained in the LDFLAGS + dnl or the already constructed $LIBNAME + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH + dnl here, because this doesn't fit in flags passed to the + dnl compiler. So give up. No hardcoding. This affects only + dnl very old systems. + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + dnl Linking with a static library. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" + else + dnl We shouldn't come here, but anyway it's good to have a + dnl fallback. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" + fi + fi + dnl Assume the include files are nearby. + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + dnl Potentially add $additional_includedir to $INCNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's /usr/local/include and we are using GCC on Linux, + dnl 3. if it's already present in $CPPFLAGS or the already + dnl constructed $INCNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INC[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $INCNAME. + INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + dnl Look for dependencies. + if test -n "$found_la"; then + dnl Read the .la file. It defines the variables + dnl dlname, library_names, old_library, dependency_libs, current, + dnl age, revision, installed, dlopen, dlpreopen, libdir. + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + dnl We use only dependency_libs. + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's /usr/local/lib and we are using GCC on Linux, + dnl 3. if it's already present in $LDFLAGS or the already + dnl constructed $LIBNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LIBNAME. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LTLIBNAME. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + dnl Handle this in the next round. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + dnl Handle this in the next round. Throw away the .la's + dnl directory; it is already contained in a preceding -L + dnl option. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + dnl Most likely an immediate library name. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" + ;; + esac + done + fi + else + dnl Didn't find the library; assume it is in the system directories + dnl known to the linker and runtime loader. (All the system + dnl directories known to the linker should also be known to the + dnl runtime loader, otherwise the system is severely misconfigured.) + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user must + dnl pass all path elements in one option. We can arrange that for a + dnl single library, but not when more than one $LIBNAMEs are used. + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + else + dnl The -rpath options are cumulative. + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + dnl When using libtool, the option that works for both libraries and + dnl executables is -R. The -R options are cumulative. + for found_dir in $ltrpathdirs; do + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" + done + fi + popdef([P_A_C_K]) + popdef([PACKLIBS]) + popdef([PACKUP]) + popdef([PACK]) + popdef([NAME]) +]) + +dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, +dnl unless already present in VAR. +dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes +dnl contains two or three consecutive elements that belong together. +AC_DEFUN([AC_LIB_APPENDTOVAR], +[ + for element in [$2]; do + haveit= + for x in $[$1]; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + [$1]="${[$1]}${[$1]:+ }$element" + fi + done +]) + +dnl For those cases where a variable contains several -L and -l options +dnl referring to unknown libraries and directories, this macro determines the +dnl necessary additional linker options for the runtime path. +dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) +dnl sets LDADDVAR to linker options needed together with LIBSVALUE. +dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, +dnl otherwise linking without libtool is assumed. +AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], +[ + AC_REQUIRE([AC_LIB_RPATH]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + $1= + if test "$enable_rpath" != no; then + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode directories into the resulting + dnl binary. + rpathdirs= + next= + for opt in $2; do + if test -n "$next"; then + dir="$next" + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem" \ + && test "X$dir" != "X/usr/$acl_libdirstem2"; then + rpathdirs="$rpathdirs $dir" + fi + next= + else + case $opt in + -L) next=yes ;; + -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem" \ + && test "X$dir" != "X/usr/$acl_libdirstem2"; then + rpathdirs="$rpathdirs $dir" + fi + next= ;; + *) next= ;; + esac + fi + done + if test "X$rpathdirs" != "X"; then + if test -n ""$3""; then + dnl libtool is used for linking. Use -R options. + for dir in $rpathdirs; do + $1="${$1}${$1:+ }-R$dir" + done + else + dnl The linker is used for linking directly. + if test -n "$acl_hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user + dnl must pass all path elements in one option. + alldirs= + for dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="$flag" + else + dnl The -rpath options are cumulative. + for dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="${$1}${$1:+ }$flag" + done + fi + fi + fi + fi + fi + AC_SUBST([$1]) +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/lib-prefix.m4 b/third-party/yasm/yasm-1.3.0/m4/lib-prefix.m4 new file mode 100644 index 0000000000..60908e8fb4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/lib-prefix.m4 @@ -0,0 +1,224 @@ +# lib-prefix.m4 serial 7 (gettext-0.18) +dnl Copyright (C) 2001-2005, 2008-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and +dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't +dnl require excessive bracketing. +ifdef([AC_HELP_STRING], +[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], +[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) + +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed +dnl to access previously installed libraries. The basic assumption is that +dnl a user will want packages to use other packages he previously installed +dnl with the same --prefix option. +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate +dnl libraries, but is otherwise very convenient. +AC_DEFUN([AC_LIB_PREFIX], +[ + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib-prefix], +[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib + --without-lib-prefix don't search for libraries in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi +]) + if test $use_additional = yes; then + dnl Potentially add $additional_includedir to $CPPFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's already present in $CPPFLAGS, + dnl 3. if it's /usr/local/include and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + for x in $CPPFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $CPPFLAGS. + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" + fi + fi + fi + fi + dnl Potentially add $additional_libdir to $LDFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's already present in $LDFLAGS, + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + for x in $LDFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LDFLAGS. + LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" + fi + fi + fi + fi + fi +]) + +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, +dnl acl_final_exec_prefix, containing the values to which $prefix and +dnl $exec_prefix will expand at the end of the configure script. +AC_DEFUN([AC_LIB_PREPARE_PREFIX], +[ + dnl Unfortunately, prefix and exec_prefix get only finally determined + dnl at the end of configure. + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the +dnl variables prefix and exec_prefix bound to the values they will have +dnl at the end of the configure script. +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], +[ + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + $1 + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_PREPARE_MULTILIB creates +dnl - a variable acl_libdirstem, containing the basename of the libdir, either +dnl "lib" or "lib64" or "lib/64", +dnl - a variable acl_libdirstem2, as a secondary possible value for +dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or +dnl "lib/amd64". +AC_DEFUN([AC_LIB_PREPARE_MULTILIB], +[ + dnl There is no formal standard regarding lib and lib64. + dnl On glibc systems, the current practice is that on a system supporting + dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under + dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine + dnl the compiler's default mode by looking at the compiler's library search + dnl path. If at least one of its elements ends in /lib64 or points to a + dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. + dnl Otherwise we use the default, namely "lib". + dnl On Solaris systems, the current practice is that on a system supporting + dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under + dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or + dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. + AC_REQUIRE([AC_CANONICAL_HOST]) + acl_libdirstem=lib + acl_libdirstem2= + case "$host_os" in + solaris*) + dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment + dnl . + dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." + dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the + dnl symlink is missing, so we set acl_libdirstem2 too. + AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], + [AC_EGREP_CPP([sixtyfour bits], [ +#ifdef _LP64 +sixtyfour bits +#endif + ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) + ]) + if test $gl_cv_solaris_64bit = yes; then + acl_libdirstem=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem2=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + esac + fi + ;; + *) + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/longdouble.m4 b/third-party/yasm/yasm-1.3.0/m4/longdouble.m4 new file mode 100644 index 0000000000..40cd7ce02d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/longdouble.m4 @@ -0,0 +1,28 @@ +# longdouble.m4 serial 1 (gettext-0.12) +dnl Copyright (C) 2002-2003 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether the compiler supports the 'long double' type. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_LONGDOUBLE], +[ + AC_CACHE_CHECK([for long double], gt_cv_c_long_double, + [if test "$GCC" = yes; then + gt_cv_c_long_double=yes + else + AC_TRY_COMPILE([ + /* The Stardent Vistra knows sizeof(long double), but does not support it. */ + long double foo = 0.0; + /* On Ultrix 4.3 cc, long double is 4 and double is 8. */ + int array [2*(sizeof(long double) >= sizeof(double)) - 1]; + ], , + gt_cv_c_long_double=yes, gt_cv_c_long_double=no) + fi]) + if test $gt_cv_c_long_double = yes; then + AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.]) + fi +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/longlong.m4 b/third-party/yasm/yasm-1.3.0/m4/longlong.m4 new file mode 100644 index 0000000000..7b399e0128 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/longlong.m4 @@ -0,0 +1,23 @@ +# longlong.m4 serial 5 +dnl Copyright (C) 1999-2004 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_LONG_LONG if 'long long' works. + +AC_DEFUN([gl_AC_TYPE_LONG_LONG], +[ + AC_CACHE_CHECK([for long long], ac_cv_type_long_long, + [AC_TRY_LINK([long long ll = 1LL; int i = 63;], + [long long llmax = (long long) -1; + return ll << i | ll >> i | llmax / ll | llmax % ll;], + ac_cv_type_long_long=yes, + ac_cv_type_long_long=no)]) + if test $ac_cv_type_long_long = yes; then + AC_DEFINE(HAVE_LONG_LONG, 1, + [Define if you have the 'long long' type.]) + fi +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/nls.m4 b/third-party/yasm/yasm-1.3.0/m4/nls.m4 new file mode 100644 index 0000000000..8f8a147bec --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/nls.m4 @@ -0,0 +1,32 @@ +# nls.m4 serial 5 (gettext-0.18) +dnl Copyright (C) 1995-2003, 2005-2006, 2008-2013 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. + +AC_PREREQ([2.50]) + +AC_DEFUN([AM_NLS], +[ + AC_MSG_CHECKING([whether NLS is requested]) + dnl Default is enabled NLS + AC_ARG_ENABLE([nls], + [ --disable-nls do not use Native Language Support], + USE_NLS=$enableval, USE_NLS=yes) + AC_MSG_RESULT([$USE_NLS]) + AC_SUBST([USE_NLS]) +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/po.m4 b/third-party/yasm/yasm-1.3.0/m4/po.m4 new file mode 100644 index 0000000000..1c70b6c1af --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/po.m4 @@ -0,0 +1,453 @@ +# po.m4 serial 21 (gettext-0.18.3) +dnl Copyright (C) 1995-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. + +AC_PREREQ([2.60]) + +dnl Checks for all prerequisites of the po subdirectory. +AC_DEFUN([AM_PO_SUBDIRS], +[ + AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AC_PROG_MKDIR_P])dnl + AC_REQUIRE([AC_PROG_SED])dnl + AC_REQUIRE([AM_NLS])dnl + + dnl Release version of the gettext macros. This is used to ensure that + dnl the gettext macros and po/Makefile.in.in are in sync. + AC_SUBST([GETTEXT_MACRO_VERSION], [0.18]) + + dnl Perform the following tests also if --disable-nls has been given, + dnl because they are needed for "make dist" to work. + + dnl Search for GNU msgfmt in the PATH. + dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. + dnl The second test excludes FreeBSD msgfmt. + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) + + dnl Test whether it is GNU msgfmt >= 0.15. +changequote(,)dnl + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([MSGFMT_015]) +changequote(,)dnl + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([GMSGFMT_015]) + + dnl Search for GNU xgettext 0.12 or newer in the PATH. + dnl The first test excludes Solaris xgettext and early GNU xgettext versions. + dnl The second test excludes FreeBSD xgettext. + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + dnl Remove leftover from FreeBSD xgettext call. + rm -f messages.po + + dnl Test whether it is GNU xgettext >= 0.15. +changequote(,)dnl + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac +changequote([,])dnl + AC_SUBST([XGETTEXT_015]) + + dnl Search for GNU msgmerge 0.11 or newer in the PATH. + AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, + [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) + + dnl Installation directories. + dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we + dnl have to define it here, so that it can be used in po/Makefile. + test -n "$localedir" || localedir='${datadir}/locale' + AC_SUBST([localedir]) + + dnl Support for AM_XGETTEXT_OPTION. + test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= + AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) + + AC_CONFIG_COMMANDS([po-directories], [[ + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + gt_tab=`printf '\t'` + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done]], + [# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake < 1.5. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + ]) +]) + +dnl Postprocesses a Makefile in a directory containing PO files. +AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], +[ + # When this code is run, in config.status, two variables have already been + # set: + # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, + # - LINGUAS is the value of the environment variable LINGUAS at configure + # time. + +changequote(,)dnl + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + # Find a way to echo strings without interpreting backslash. + if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='echo' + else + if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='printf %s\n' + else + echo_func () { + cat < "$ac_file.tmp" + tab=`printf '\t'` + if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` + cat >> "$ac_file.tmp" < /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` + cat >> "$ac_file.tmp" <> "$ac_file.tmp" < +#include +/* The string "%2$d %1$d", with dollar characters protected from the shell's + dollar expansion (possibly an autoconf bug). */ +static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; +static char buf[100]; +int main () +{ + sprintf (buf, format, 33, 55); + return (strcmp (buf, "55 33") != 0); +}], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no, + [ + AC_EGREP_CPP(notposix, [ +#if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ + notposix +#endif + ], gt_cv_func_printf_posix="guessing no", + gt_cv_func_printf_posix="guessing yes") + ]) + ]) + case $gt_cv_func_printf_posix in + *yes) + AC_DEFINE(HAVE_POSIX_PRINTF, 1, + [Define if your printf() function supports format strings with positions.]) + ;; + esac +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/progtest.m4 b/third-party/yasm/yasm-1.3.0/m4/progtest.m4 new file mode 100644 index 0000000000..7b3912329d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/progtest.m4 @@ -0,0 +1,91 @@ +# progtest.m4 serial 7 (gettext-0.18.2) +dnl Copyright (C) 1996-2003, 2005, 2008-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1996. + +AC_PREREQ([2.50]) + +# Search path for a program which passes the given test. + +dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +AC_DEFUN([AM_PATH_PROG_WITH_TEST], +[ +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL([ac_cv_path_$1], +[case "[$]$1" in + [[\\/]]* | ?:[[\\/]]*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in ifelse([$5], , $PATH, [$5]); do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$][$1]) +else + AC_MSG_RESULT([no]) +fi +AC_SUBST([$1])dnl +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/pythonhead.m4 b/third-party/yasm/yasm-1.3.0/m4/pythonhead.m4 new file mode 100644 index 0000000000..1e0f2b6372 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/pythonhead.m4 @@ -0,0 +1,24 @@ +dnl a macro to check for ability to create python extensions +dnl AM_CHECK_PYTHON_HEADERS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE]) +dnl function also defines PYTHON_INCLUDES +AC_DEFUN([AM_CHECK_PYTHON_HEADERS], +[AC_REQUIRE([AM_PATH_PYTHON]) +AC_MSG_CHECKING(for headers required to compile python extensions) +dnl deduce PYTHON_INCLUDES +py_prefix=`$PYTHON -c "import sys; print sys.prefix"` +py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"` +PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" +if test "$py_prefix" != "$py_exec_prefix"; then + PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}" +fi +AC_SUBST(PYTHON_INCLUDES) +dnl check if the headers exist: +save_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES" +AC_TRY_CPP([#include ],dnl +[AC_MSG_RESULT(found) +$1],dnl +[AC_MSG_RESULT(not found) +$2]) +CPPFLAGS="$save_CPPFLAGS" +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/signed.m4 b/third-party/yasm/yasm-1.3.0/m4/signed.m4 new file mode 100644 index 0000000000..048f593698 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/signed.m4 @@ -0,0 +1,17 @@ +# signed.m4 serial 1 (gettext-0.10.40) +dnl Copyright (C) 2001-2002 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([bh_C_SIGNED], +[ + AC_CACHE_CHECK([for signed], bh_cv_c_signed, + [AC_TRY_COMPILE(, [signed char x;], bh_cv_c_signed=yes, bh_cv_c_signed=no)]) + if test $bh_cv_c_signed = no; then + AC_DEFINE(signed, , + [Define to empty if the C compiler doesn't support this keyword.]) + fi +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/size_max.m4 b/third-party/yasm/yasm-1.3.0/m4/size_max.m4 new file mode 100644 index 0000000000..4fe81c7b07 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/size_max.m4 @@ -0,0 +1,59 @@ +# size_max.m4 serial 2 +dnl Copyright (C) 2003 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([gl_SIZE_MAX], +[ + AC_CHECK_HEADERS(stdint.h) + dnl First test whether the system already has SIZE_MAX. + AC_MSG_CHECKING([for SIZE_MAX]) + result= + AC_EGREP_CPP([Found it], [ +#include +#if HAVE_STDINT_H +#include +#endif +#ifdef SIZE_MAX +Found it +#endif +], result=yes) + if test -z "$result"; then + dnl Define it ourselves. Here we assume that the type 'size_t' is not wider + dnl than the type 'unsigned long'. + dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr', + dnl which is guaranteed to work from LONG_MIN to LONG_MAX. + _AC_COMPUTE_INT([~(size_t)0 / 10], res_hi, + [#include ], result=?) + _AC_COMPUTE_INT([~(size_t)0 % 10], res_lo, + [#include ], result=?) + _AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint, + [#include ], result=?) + if test "$fits_in_uint" = 1; then + dnl Even though SIZE_MAX fits in an unsigned int, it must be of type + dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. + AC_TRY_COMPILE([#include + extern size_t foo; + extern unsigned long foo; + ], [], fits_in_uint=0) + fi + if test -z "$result"; then + if test "$fits_in_uint" = 1; then + result="$res_hi$res_lo"U + else + result="$res_hi$res_lo"UL + fi + else + dnl Shouldn't happen, but who knows... + result='~(size_t)0' + fi + fi + AC_MSG_RESULT([$result]) + if test "$result" != yes; then + AC_DEFINE_UNQUOTED([SIZE_MAX], [$result], + [Define as the maximum value of type 'size_t', if the system doesn't define it.]) + fi +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/stdint_h.m4 b/third-party/yasm/yasm-1.3.0/m4/stdint_h.m4 new file mode 100644 index 0000000000..3355f35aa3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/stdint_h.m4 @@ -0,0 +1,26 @@ +# stdint_h.m4 serial 5 +dnl Copyright (C) 1997-2004 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_STDINT_H_WITH_UINTMAX if exists, +# doesn't clash with , and declares uintmax_t. + +AC_DEFUN([gl_AC_HEADER_STDINT_H], +[ + AC_CACHE_CHECK([for stdint.h], gl_cv_header_stdint_h, + [AC_TRY_COMPILE( + [#include +#include ], + [uintmax_t i = (uintmax_t) -1;], + gl_cv_header_stdint_h=yes, + gl_cv_header_stdint_h=no)]) + if test $gl_cv_header_stdint_h = yes; then + AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1, + [Define if exists, doesn't clash with , + and declares uintmax_t. ]) + fi +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/uintmax_t.m4 b/third-party/yasm/yasm-1.3.0/m4/uintmax_t.m4 new file mode 100644 index 0000000000..bf83ed7464 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/uintmax_t.m4 @@ -0,0 +1,30 @@ +# uintmax_t.m4 serial 9 +dnl Copyright (C) 1997-2004 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +AC_PREREQ(2.13) + +# Define uintmax_t to 'unsigned long' or 'unsigned long long' +# if it is not already defined in or . + +AC_DEFUN([gl_AC_TYPE_UINTMAX_T], +[ + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then + AC_REQUIRE([gl_AC_TYPE_UNSIGNED_LONG_LONG]) + test $ac_cv_type_unsigned_long_long = yes \ + && ac_type='unsigned long long' \ + || ac_type='unsigned long' + AC_DEFINE_UNQUOTED(uintmax_t, $ac_type, + [Define to unsigned long or unsigned long long + if and don't define.]) + else + AC_DEFINE(HAVE_UINTMAX_T, 1, + [Define if you have the 'uintmax_t' type in or .]) + fi +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/ulonglong.m4 b/third-party/yasm/yasm-1.3.0/m4/ulonglong.m4 new file mode 100644 index 0000000000..dee10ccc3e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/ulonglong.m4 @@ -0,0 +1,23 @@ +# ulonglong.m4 serial 4 +dnl Copyright (C) 1999-2004 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_UNSIGNED_LONG_LONG if 'unsigned long long' works. + +AC_DEFUN([gl_AC_TYPE_UNSIGNED_LONG_LONG], +[ + AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long, + [AC_TRY_LINK([unsigned long long ull = 1ULL; int i = 63;], + [unsigned long long ullmax = (unsigned long long) -1; + return ull << i | ull >> i | ullmax / ull | ullmax % ull;], + ac_cv_type_unsigned_long_long=yes, + ac_cv_type_unsigned_long_long=no)]) + if test $ac_cv_type_unsigned_long_long = yes; then + AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1, + [Define if you have the 'unsigned long long' type.]) + fi +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/wchar_t.m4 b/third-party/yasm/yasm-1.3.0/m4/wchar_t.m4 new file mode 100644 index 0000000000..cde2129a97 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/wchar_t.m4 @@ -0,0 +1,20 @@ +# wchar_t.m4 serial 1 (gettext-0.12) +dnl Copyright (C) 2002-2003 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether has the 'wchar_t' type. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_WCHAR_T], +[ + AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t, + [AC_TRY_COMPILE([#include + wchar_t foo = (wchar_t)'\0';], , + gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)]) + if test $gt_cv_c_wchar_t = yes; then + AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.]) + fi +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/wint_t.m4 b/third-party/yasm/yasm-1.3.0/m4/wint_t.m4 new file mode 100644 index 0000000000..b8fff9c86f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/wint_t.m4 @@ -0,0 +1,20 @@ +# wint_t.m4 serial 1 (gettext-0.12) +dnl Copyright (C) 2003 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether has the 'wint_t' type. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_WINT_T], +[ + AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t, + [AC_TRY_COMPILE([#include + wint_t foo = (wchar_t)'\0';], , + gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)]) + if test $gt_cv_c_wint_t = yes; then + AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.]) + fi +]) diff --git a/third-party/yasm/yasm-1.3.0/m4/xsize.m4 b/third-party/yasm/yasm-1.3.0/m4/xsize.m4 new file mode 100644 index 0000000000..85bb721e43 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/m4/xsize.m4 @@ -0,0 +1,13 @@ +# xsize.m4 serial 3 +dnl Copyright (C) 2003-2004 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_XSIZE], +[ + dnl Prerequisites of lib/xsize.h. + AC_REQUIRE([gl_SIZE_MAX]) + AC_REQUIRE([AC_C_INLINE]) + AC_CHECK_HEADERS(stdint.h) +]) diff --git a/third-party/yasm/yasm-1.3.0/modules/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/CMakeLists.txt new file mode 100644 index 0000000000..e3f8eb11e2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/CMakeLists.txt @@ -0,0 +1,103 @@ +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) + +INCLUDE(arch/CMakeLists.txt) +INCLUDE(listfmts/CMakeLists.txt) +INCLUDE(parsers/CMakeLists.txt) +INCLUDE(preprocs/CMakeLists.txt) +INCLUDE(dbgfmts/CMakeLists.txt) +INCLUDE(objfmts/CMakeLists.txt) + +MESSAGE(STATUS "Standard modules: ${YASM_MODULES}") + +# +# Generate init_plugin.c +# This file provides the yasm_init_plugin() function for yasmstd. +# + +SET(INIT_PLUGIN_C ${CMAKE_CURRENT_BINARY_DIR}/init_plugin.c) +SET(INIT_PLUGIN_C_REV 1) + +# Don't regen if no changes; default to regen +SET(regen_init_plugin_c TRUE) +IF(EXISTS ${INIT_PLUGIN_C}) + FILE(READ ${INIT_PLUGIN_C} _old_init_plugin_c) + STRING(REGEX MATCHALL "[^\n]*\n" _lines "${_old_init_plugin_c}") + #MESSAGE(STATUS "Lines: ${_lines}") + + LIST(GET _lines 0 _line0) + STRING(REGEX MATCH "([A-Za-z][A-Za-z0-9_]+[ ]?)+" _old_modules "${_line0}") + #MESSAGE(STATUS "Old modules: ${_old_modules}") + STRING(REPLACE ";" " " _modules_str "${YASM_MODULES}") + STRING(COMPARE EQUAL "${_old_modules}" "${_modules_str} " _modules_match) + + LIST(GET _lines 1 _line1) + STRING(REGEX MATCH "rev [0-9]+" _old_modules_rev "${_line1}") + #MESSAGE(STATUS "Old modules rev: ${_old_modules_rev}") + STRING(COMPARE EQUAL "${_old_modules_rev}" "rev ${INIT_PLUGIN_C_REV}" + _modules_rev_match) + + IF(_modules_match AND _modules_rev_match) + SET(regen_init_plugin_c FALSE) + ENDIF(_modules_match AND _modules_rev_match) +ENDIF(EXISTS ${INIT_PLUGIN_C}) + +IF(regen_init_plugin_c) + MESSAGE(STATUS "Generating standard plugin initialization file") + STRING(REPLACE ";" " " _modules_str "${YASM_MODULES}") + FILE(WRITE ${INIT_PLUGIN_C} "/* ${_modules_str} \n") + FILE(APPEND ${INIT_PLUGIN_C} " rev ${INIT_PLUGIN_C_REV}\n") + FILE(APPEND ${INIT_PLUGIN_C} " */\n\n") + FILE(APPEND ${INIT_PLUGIN_C} "#include \n") + FILE(APPEND ${INIT_PLUGIN_C} "#include \n\n") + FOREACH(module ${YASM_MODULES}) + STRING(REGEX MATCHALL "[a-zA-Z][a-zA-Z0-9]+" _modulepath ${module}) + LIST(GET _modulepath 0 _type) + LIST(GET _modulepath 1 _keyword) + FILE(APPEND ${INIT_PLUGIN_C} + "extern yasm_${_type}_module yasm_${_keyword}_LTX_${_type};\n") + ENDFOREACH(module) + IF(BUILD_SHARED_LIBS) + FILE(APPEND ${INIT_PLUGIN_C} "\n#ifdef _MSC_VER\n") + FILE(APPEND ${INIT_PLUGIN_C} "__declspec(dllexport)\n") + FILE(APPEND ${INIT_PLUGIN_C} "#endif\n") + ENDIF(BUILD_SHARED_LIBS) + FILE(APPEND ${INIT_PLUGIN_C} "void\n") + FILE(APPEND ${INIT_PLUGIN_C} "yasm_init_plugin(void)\n") + FILE(APPEND ${INIT_PLUGIN_C} "{\n") + FOREACH(module ${YASM_MODULES}) + STRING(REGEX MATCHALL "[a-zA-Z][a-zA-Z0-9]+" _modulepath ${module}) + LIST(GET _modulepath 0 _type) + LIST(GET _modulepath 1 _keyword) + SET(_data "yasm_${_keyword}_LTX_${_type}") + STRING(TOUPPER "${_type}" _type) + FILE(APPEND ${INIT_PLUGIN_C} + " yasm_register_module(YASM_MODULE_${_type}, \"${_keyword}\", &${_data});\n") + ENDFOREACH(module) + FILE(APPEND ${INIT_PLUGIN_C} "}\n") +ELSE(regen_init_plugin_c) + MESSAGE(STATUS "Not regenerating static modules file (unchanged)") +ENDIF(regen_init_plugin_c) + +SET_SOURCE_FILES_PROPERTIES(init_plugin.c GENERATED) + +SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}) + +IF(BUILD_SHARED_LIBS) + ADD_LIBRARY(yasmstd MODULE + init_plugin.c + ${YASM_MODULES_SRC} + ) + TARGET_LINK_LIBRARIES(yasmstd libyasm) + + IF(WIN32) + INSTALL(TARGETS yasmstd LIBRARY DESTINATION bin) + ELSE(WIN32) + INSTALL(TARGETS yasmstd LIBRARY DESTINATION lib) + ENDIF(WIN32) +ELSE(BUILD_SHARED_LIBS) + ADD_LIBRARY(yasmstd + init_plugin.c + ${YASM_MODULES_SRC} + ) + TARGET_LINK_LIBRARIES(yasmstd libyasm) +ENDIF(BUILD_SHARED_LIBS) diff --git a/third-party/yasm/yasm-1.3.0/modules/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/Makefile.inc new file mode 100644 index 0000000000..c220a84cc9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/Makefile.inc @@ -0,0 +1,12 @@ +EXTRA_DIST += modules/arch/Makefile.inc +EXTRA_DIST += modules/listfmts/Makefile.inc +EXTRA_DIST += modules/parsers/Makefile.inc +EXTRA_DIST += modules/preprocs/Makefile.inc +EXTRA_DIST += modules/objfmts/Makefile.inc + +include modules/arch/Makefile.inc +include modules/listfmts/Makefile.inc +include modules/parsers/Makefile.inc +include modules/preprocs/Makefile.inc +include modules/dbgfmts/Makefile.inc +include modules/objfmts/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/arch/CMakeLists.txt new file mode 100644 index 0000000000..ea65fbd0d7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/CMakeLists.txt @@ -0,0 +1,2 @@ +INCLUDE(arch/lc3b/CMakeLists.txt) +INCLUDE(arch/x86/CMakeLists.txt) diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/arch/Makefile.inc new file mode 100644 index 0000000000..5c5d9d15a9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/Makefile.inc @@ -0,0 +1,14 @@ +EXTRA_DIST += modules/arch/x86/Makefile.inc +EXTRA_DIST += modules/arch/lc3b/Makefile.inc + +include modules/arch/x86/Makefile.inc +include modules/arch/lc3b/Makefile.inc + +notrans_dist_man_MANS += yasm_arch.7 + +if BUILD_MAN +yasm_arch.7: modules/arch/yasm_arch.xml + $(XMLTO) -o $(top_builddir) man $(srcdir)/modules/arch/yasm_arch.xml +endif + +EXTRA_DIST += modules/arch/yasm_arch.xml diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/CMakeLists.txt new file mode 100644 index 0000000000..0d5df705fe --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/CMakeLists.txt @@ -0,0 +1,11 @@ +YASM_RE2C( + ${CMAKE_CURRENT_SOURCE_DIR}/arch/lc3b/lc3bid.re + ${CMAKE_CURRENT_BINARY_DIR}/lc3bid.c + -s + ) + +YASM_ADD_MODULE(arch_lc3b + arch/lc3b/lc3barch.c + arch/lc3b/lc3bbc.c + lc3bid.c + ) diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/Makefile.inc new file mode 100644 index 0000000000..fc30583d92 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/Makefile.inc @@ -0,0 +1,16 @@ +libyasm_a_SOURCES += modules/arch/lc3b/lc3barch.c +libyasm_a_SOURCES += modules/arch/lc3b/lc3barch.h +libyasm_a_SOURCES += modules/arch/lc3b/lc3bbc.c +nodist_libyasm_a_SOURCES += lc3bid.c + +YASM_MODULES += arch_lc3b + +lc3bid.c: $(srcdir)/modules/arch/lc3b/lc3bid.re re2c$(EXEEXT) + $(top_builddir)/re2c$(EXEEXT) -s -o $@ $(srcdir)/modules/arch/lc3b/lc3bid.re + +CLEANFILES += lc3bid.c + +EXTRA_DIST += modules/arch/lc3b/tests/Makefile.inc +EXTRA_DIST += modules/arch/lc3b/lc3bid.re + +include modules/arch/lc3b/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/lc3barch.c b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/lc3barch.c new file mode 100644 index 0000000000..051452862f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/lc3barch.c @@ -0,0 +1,212 @@ +/* + * LC-3b architecture description + * + * Copyright (C) 2003-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "lc3barch.h" + + +yasm_arch_module yasm_lc3b_LTX_arch; + + +static /*@only@*/ yasm_arch * +lc3b_create(const char *machine, const char *parser, + /*@out@*/ yasm_arch_create_error *error) +{ + yasm_arch_base *arch; + + *error = YASM_ARCH_CREATE_OK; + + if (yasm__strcasecmp(machine, "lc3b") != 0) { + *error = YASM_ARCH_CREATE_BAD_MACHINE; + return NULL; + } + + if (yasm__strcasecmp(parser, "nasm") != 0) { + *error = YASM_ARCH_CREATE_BAD_PARSER; + return NULL; + } + + arch = yasm_xmalloc(sizeof(yasm_arch_base)); + arch->module = &yasm_lc3b_LTX_arch; + return (yasm_arch *)arch; +} + +static void +lc3b_destroy(/*@only@*/ yasm_arch *arch) +{ + yasm_xfree(arch); +} + +static const char * +lc3b_get_machine(/*@unused@*/ const yasm_arch *arch) +{ + return "lc3b"; +} + +static unsigned int +lc3b_get_address_size(/*@unused@*/ const yasm_arch *arch) +{ + return 16; +} + +static int +lc3b_set_var(yasm_arch *arch, const char *var, unsigned long val) +{ + return 1; +} + +static const unsigned char ** +lc3b_get_fill(const yasm_arch *arch) +{ + /* NOP pattern is all 0's per LC-3b Assembler 3.50 output */ + static const unsigned char *fill[16] = { + NULL, /* unused */ + NULL, /* 1 - illegal; all opcodes are 2 bytes long */ + (const unsigned char *) + "\x00\x00", /* 4 */ + NULL, /* 3 - illegal */ + (const unsigned char *) + "\x00\x00\x00\x00", /* 4 */ + NULL, /* 5 - illegal */ + (const unsigned char *) + "\x00\x00\x00\x00\x00\x00", /* 6 */ + NULL, /* 7 - illegal */ + (const unsigned char *) + "\x00\x00\x00\x00\x00\x00" /* 8 */ + "\x00\x00", + NULL, /* 9 - illegal */ + (const unsigned char *) + "\x00\x00\x00\x00\x00\x00" /* 10 */ + "\x00\x00\x00\x00", + NULL, /* 11 - illegal */ + (const unsigned char *) + "\x00\x00\x00\x00\x00\x00" /* 12 */ + "\x00\x00\x00\x00\x00\x00", + NULL, /* 13 - illegal */ + (const unsigned char *) + "\x00\x00\x00\x00\x00\x00" /* 14 */ + "\x00\x00\x00\x00\x00\x00\x00\x00", + NULL /* 15 - illegal */ + }; + return fill; +} + +static unsigned int +lc3b_get_reg_size(/*@unused@*/ yasm_arch *arch, /*@unused@*/ uintptr_t reg) +{ + return 16; +} + +static uintptr_t +lc3b_reggroup_get_reg(/*@unused@*/ yasm_arch *arch, + /*@unused@*/ uintptr_t reggroup, + /*@unused@*/ unsigned long regindex) +{ + return 0; +} + +static void +lc3b_reg_print(/*@unused@*/ yasm_arch *arch, uintptr_t reg, FILE *f) +{ + fprintf(f, "r%u", (unsigned int)(reg&7)); +} + +static int +lc3b_floatnum_tobytes(yasm_arch *arch, const yasm_floatnum *flt, + unsigned char *buf, size_t destsize, size_t valsize, + size_t shift, int warn) +{ + yasm_error_set(YASM_ERROR_FLOATING_POINT, + N_("LC-3b does not support floating point")); + return 1; +} + +static yasm_effaddr * +lc3b_ea_create_expr(yasm_arch *arch, yasm_expr *e) +{ + yasm_effaddr *ea = yasm_xmalloc(sizeof(yasm_effaddr)); + yasm_value_initialize(&ea->disp, e, 0); + ea->need_nonzero_len = 0; + ea->need_disp = 1; + ea->nosplit = 0; + ea->strong = 0; + ea->segreg = 0; + ea->pc_rel = 0; + ea->not_pc_rel = 0; + return ea; +} + +void +yasm_lc3b__ea_destroy(/*@only@*/ yasm_effaddr *ea) +{ + yasm_value_delete(&ea->disp); + yasm_xfree(ea); +} + +static void +lc3b_ea_print(const yasm_effaddr *ea, FILE *f, int indent_level) +{ + fprintf(f, "%*sDisp:\n", indent_level, ""); + yasm_value_print(&ea->disp, f, indent_level+1); +} + +/* Define lc3b machines -- see arch.h for details */ +static yasm_arch_machine lc3b_machines[] = { + { "LC-3b", "lc3b" }, + { NULL, NULL } +}; + +/* Define arch structure -- see arch.h for details */ +yasm_arch_module yasm_lc3b_LTX_arch = { + "LC-3b", + "lc3b", + NULL, + lc3b_create, + lc3b_destroy, + lc3b_get_machine, + lc3b_get_address_size, + lc3b_set_var, + yasm_lc3b__parse_check_insnprefix, + yasm_lc3b__parse_check_regtmod, + lc3b_get_fill, + lc3b_floatnum_tobytes, + yasm_lc3b__intnum_tobytes, + lc3b_get_reg_size, + lc3b_reggroup_get_reg, + lc3b_reg_print, + NULL, /*yasm_lc3b__segreg_print*/ + lc3b_ea_create_expr, + yasm_lc3b__ea_destroy, + lc3b_ea_print, + yasm_lc3b__create_empty_insn, + lc3b_machines, + "lc3b", + 16, + 2 +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/lc3barch.h b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/lc3barch.h new file mode 100644 index 0000000000..9ded8cbef7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/lc3barch.h @@ -0,0 +1,70 @@ +/* + * LC-3b Architecture header file + * + * Copyright (C) 2003-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + */ +#ifndef YASM_LC3BARCH_H +#define YASM_LC3BARCH_H + +/* Types of immediate. All immediates are stored in the LSBs of the insn. */ +typedef enum lc3b_imm_type { + LC3B_IMM_NONE = 0, /* no immediate */ + LC3B_IMM_4, /* 4-bit */ + LC3B_IMM_5, /* 5-bit */ + LC3B_IMM_6_WORD, /* 6-bit, word-multiple (byte>>1) */ + LC3B_IMM_6_BYTE, /* 6-bit, byte-multiple */ + LC3B_IMM_8, /* 8-bit, word-multiple (byte>>1) */ + LC3B_IMM_9, /* 9-bit, signed, word-multiple (byte>>1) */ + LC3B_IMM_9_PC /* 9-bit, signed, word-multiple, PC relative */ +} lc3b_imm_type; + +/* Bytecode types */ + +typedef struct lc3b_insn { + yasm_value imm; /* immediate or relative value */ + lc3b_imm_type imm_type; /* size of the immediate */ + + unsigned int opcode; /* opcode */ +} lc3b_insn; + +void yasm_lc3b__bc_transform_insn(yasm_bytecode *bc, lc3b_insn *insn); + +yasm_arch_insnprefix yasm_lc3b__parse_check_insnprefix + (yasm_arch *arch, const char *id, size_t id_len, unsigned long line, + /*@out@*/ /*@only@*/ yasm_bytecode **bc, /*@out@*/ uintptr_t *prefix); +yasm_arch_regtmod yasm_lc3b__parse_check_regtmod + (yasm_arch *arch, const char *id, size_t id_len, + /*@out@*/ uintptr_t *data); + +int yasm_lc3b__intnum_tobytes + (yasm_arch *arch, const yasm_intnum *intn, unsigned char *buf, + size_t destsize, size_t valsize, int shift, const yasm_bytecode *bc, + int warn); + +/*@only@*/ yasm_bytecode *yasm_lc3b__create_empty_insn(yasm_arch *arch, + unsigned long line); + +void yasm_lc3b__ea_destroy(/*@only@*/ yasm_effaddr *ea); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/lc3bbc.c b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/lc3bbc.c new file mode 100644 index 0000000000..d077c7c5fb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/lc3bbc.c @@ -0,0 +1,249 @@ +/* + * LC-3b bytecode utility functions + * + * Copyright (C) 2003-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "lc3barch.h" + + +/* Bytecode callback function prototypes */ + +static void lc3b_bc_insn_destroy(void *contents); +static void lc3b_bc_insn_print(const void *contents, FILE *f, + int indent_level); +static int lc3b_bc_insn_calc_len(yasm_bytecode *bc, + yasm_bc_add_span_func add_span, + void *add_span_data); +static int lc3b_bc_insn_expand(yasm_bytecode *bc, int span, long old_val, + long new_val, /*@out@*/ long *neg_thres, + /*@out@*/ long *pos_thres); +static int lc3b_bc_insn_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, + void *d, yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +/* Bytecode callback structures */ + +static const yasm_bytecode_callback lc3b_bc_callback_insn = { + lc3b_bc_insn_destroy, + lc3b_bc_insn_print, + yasm_bc_finalize_common, + NULL, + lc3b_bc_insn_calc_len, + lc3b_bc_insn_expand, + lc3b_bc_insn_tobytes, + 0 +}; + + +void +yasm_lc3b__bc_transform_insn(yasm_bytecode *bc, lc3b_insn *insn) +{ + yasm_bc_transform(bc, &lc3b_bc_callback_insn, insn); +} + +static void +lc3b_bc_insn_destroy(void *contents) +{ + lc3b_insn *insn = (lc3b_insn *)contents; + yasm_value_delete(&insn->imm); + yasm_xfree(contents); +} + +static void +lc3b_bc_insn_print(const void *contents, FILE *f, int indent_level) +{ + const lc3b_insn *insn = (const lc3b_insn *)contents; + + fprintf(f, "%*s_Instruction_\n", indent_level, ""); + fprintf(f, "%*sImmediate Value:", indent_level, ""); + if (!insn->imm.abs) + fprintf(f, " (nil)\n"); + else { + indent_level++; + fprintf(f, "\n"); + yasm_value_print(&insn->imm, f, indent_level); + fprintf(f, "%*sType=", indent_level, ""); + switch (insn->imm_type) { + case LC3B_IMM_NONE: + fprintf(f, "NONE-SHOULDN'T HAPPEN"); + break; + case LC3B_IMM_4: + fprintf(f, "4-bit"); + break; + case LC3B_IMM_5: + fprintf(f, "5-bit"); + break; + case LC3B_IMM_6_WORD: + fprintf(f, "6-bit, word-multiple"); + break; + case LC3B_IMM_6_BYTE: + fprintf(f, "6-bit, byte-multiple"); + break; + case LC3B_IMM_8: + fprintf(f, "8-bit, word-multiple"); + break; + case LC3B_IMM_9: + fprintf(f, "9-bit, signed, word-multiple"); + break; + case LC3B_IMM_9_PC: + fprintf(f, "9-bit, signed, word-multiple, PC-relative"); + break; + } + indent_level--; + } + /* FIXME + fprintf(f, "\n%*sOrigin=", indent_level, ""); + if (insn->origin) { + fprintf(f, "\n"); + yasm_symrec_print(insn->origin, f, indent_level+1); + } else + fprintf(f, "(nil)\n"); + */ + fprintf(f, "%*sOpcode: %04x\n", indent_level, "", + (unsigned int)insn->opcode); +} + +static int +lc3b_bc_insn_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + lc3b_insn *insn = (lc3b_insn *)bc->contents; + yasm_bytecode *target_prevbc; + + /* Fixed size instruction length */ + bc->len += 2; + + /* Only need to worry about out-of-range to PC-relative */ + if (insn->imm_type != LC3B_IMM_9_PC) + return 0; + + if (insn->imm.rel + && (!yasm_symrec_get_label(insn->imm.rel, &target_prevbc) + || target_prevbc->section != bc->section)) { + /* External or out of segment, so we can't check distance. */ + return 0; + } + + /* 9-bit signed, word-multiple displacement */ + add_span(add_span_data, bc, 1, &insn->imm, -512+(long)bc->len, + 511+(long)bc->len); + return 0; +} + +static int +lc3b_bc_insn_expand(yasm_bytecode *bc, int span, long old_val, long new_val, + /*@out@*/ long *neg_thres, /*@out@*/ long *pos_thres) +{ + yasm_error_set(YASM_ERROR_VALUE, N_("jump target out of range")); + return -1; +} + +static int +lc3b_bc_insn_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@unused@*/ yasm_output_reloc_func output_reloc) +{ + lc3b_insn *insn = (lc3b_insn *)bc->contents; + /*@only@*/ yasm_intnum *delta; + unsigned long buf_off = (unsigned long)(*bufp - bufstart); + + /* Output opcode */ + YASM_SAVE_16_L(*bufp, insn->opcode); + + /* Insert immediate into opcode. */ + switch (insn->imm_type) { + case LC3B_IMM_NONE: + break; + case LC3B_IMM_4: + insn->imm.size = 4; + if (output_value(&insn->imm, *bufp, 2, buf_off, bc, 1, d)) + return 1; + break; + case LC3B_IMM_5: + insn->imm.size = 5; + insn->imm.sign = 1; + if (output_value(&insn->imm, *bufp, 2, buf_off, bc, 1, d)) + return 1; + break; + case LC3B_IMM_6_WORD: + insn->imm.size = 6; + if (output_value(&insn->imm, *bufp, 2, buf_off, bc, 1, d)) + return 1; + break; + case LC3B_IMM_6_BYTE: + insn->imm.size = 6; + insn->imm.sign = 1; + if (output_value(&insn->imm, *bufp, 2, buf_off, bc, 1, d)) + return 1; + break; + case LC3B_IMM_8: + insn->imm.size = 8; + if (output_value(&insn->imm, *bufp, 2, buf_off, bc, 1, d)) + return 1; + break; + case LC3B_IMM_9_PC: + /* Adjust relative displacement to end of bytecode */ + delta = yasm_intnum_create_int(-1); + if (!insn->imm.abs) + insn->imm.abs = yasm_expr_create_ident(yasm_expr_int(delta), + bc->line); + else + insn->imm.abs = + yasm_expr_create(YASM_EXPR_ADD, + yasm_expr_expr(insn->imm.abs), + yasm_expr_int(delta), bc->line); + + insn->imm.size = 9; + insn->imm.sign = 1; + if (output_value(&insn->imm, *bufp, 2, buf_off, bc, 1, d)) + return 1; + break; + case LC3B_IMM_9: + insn->imm.size = 9; + if (output_value(&insn->imm, *bufp, 2, buf_off, bc, 1, d)) + return 1; + break; + default: + yasm_internal_error(N_("Unrecognized immediate type")); + } + + *bufp += 2; /* all instructions are 2 bytes in size */ + return 0; +} + +int +yasm_lc3b__intnum_tobytes(yasm_arch *arch, const yasm_intnum *intn, + unsigned char *buf, size_t destsize, size_t valsize, + int shift, const yasm_bytecode *bc, int warn) +{ + /* Write value out. */ + yasm_intnum_get_sized(intn, buf, destsize, valsize, shift, 0, warn); + return 0; +} diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/lc3bid.re b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/lc3bid.re new file mode 100644 index 0000000000..2b3cf7a355 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/lc3bid.re @@ -0,0 +1,480 @@ +/* + * LC-3b identifier recognition and instruction handling + * + * Copyright (C) 2003-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "modules/arch/lc3b/lc3barch.h" + + +/* Opcode modifiers. The opcode bytes are in "reverse" order because the + * parameters are read from the arch-specific data in LSB->MSB order. + * (only for asthetic reasons in the lexer code below, no practical reason). + */ +#define MOD_OpHAdd (1UL<<0) /* Parameter adds to upper 8 bits of insn */ +#define MOD_OpLAdd (1UL<<1) /* Parameter adds to lower 8 bits of insn */ + +/* Operand types. These are more detailed than the "general" types for all + * architectures, as they include the size, for instance. + * Bit Breakdown (from LSB to MSB): + * - 1 bit = general type (must be exact match, except for =3): + * 0 = immediate + * 1 = register + * + * MSBs than the above are actions: what to do with the operand if the + * instruction matches. Essentially describes what part of the output bytecode + * gets the operand. This may require conversion (e.g. a register going into + * an ea field). Naturally, only one of each of these may be contained in the + * operands of a single insn_info structure. + * - 2 bits = action: + * 0 = does nothing (operand data is discarded) + * 1 = DR field + * 2 = SR field + * 3 = immediate + * + * Immediate operands can have different sizes. + * - 3 bits = size: + * 0 = no immediate + * 1 = 4-bit immediate + * 2 = 5-bit immediate + * 3 = 6-bit index, word (16 bit)-multiple + * 4 = 6-bit index, byte-multiple + * 5 = 8-bit immediate, word-multiple + * 6 = 9-bit signed immediate, word-multiple + * 7 = 9-bit signed offset from next PC ($+2), word-multiple + */ +#define OPT_Imm 0x0 +#define OPT_Reg 0x1 +#define OPT_MASK 0x1 + +#define OPA_None (0<<1) +#define OPA_DR (1<<1) +#define OPA_SR (2<<1) +#define OPA_Imm (3<<1) +#define OPA_MASK (3<<1) + +#define OPI_None (LC3B_IMM_NONE<<3) +#define OPI_4 (LC3B_IMM_4<<3) +#define OPI_5 (LC3B_IMM_5<<3) +#define OPI_6W (LC3B_IMM_6_WORD<<3) +#define OPI_6B (LC3B_IMM_6_BYTE<<3) +#define OPI_8 (LC3B_IMM_8<<3) +#define OPI_9 (LC3B_IMM_9<<3) +#define OPI_9PC (LC3B_IMM_9_PC<<3) +#define OPI_MASK (7<<3) + +typedef struct lc3b_insn_info { + /* Opcode modifiers for variations of instruction. As each modifier reads + * its parameter in LSB->MSB order from the arch-specific data[1] from the + * lexer data, and the LSB of the arch-specific data[1] is reserved for the + * count of insn_info structures in the instruction grouping, there can + * only be a maximum of 3 modifiers. + */ + unsigned int modifiers; + + /* The basic 2 byte opcode */ + unsigned int opcode; + + /* The number of operands this form of the instruction takes */ + unsigned char num_operands; + + /* The types of each operand, see above */ + unsigned int operands[3]; +} lc3b_insn_info; + +typedef struct lc3b_id_insn { + yasm_insn insn; /* base structure */ + + /* instruction parse group - NULL if empty instruction (just prefixes) */ + /*@null@*/ const lc3b_insn_info *group; + + /* Modifier data */ + unsigned long mod_data; + + /* Number of elements in the instruction parse group */ + unsigned int num_info:8; +} lc3b_id_insn; + +static void lc3b_id_insn_destroy(void *contents); +static void lc3b_id_insn_print(const void *contents, FILE *f, int indent_level); +static void lc3b_id_insn_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc); + +static const yasm_bytecode_callback lc3b_id_insn_callback = { + lc3b_id_insn_destroy, + lc3b_id_insn_print, + lc3b_id_insn_finalize, + NULL, + yasm_bc_calc_len_common, + yasm_bc_expand_common, + yasm_bc_tobytes_common, + YASM_BC_SPECIAL_INSN +}; + +/* + * Instruction groupings + */ + +static const lc3b_insn_info empty_insn[] = { + { 0, 0, 0, {0, 0, 0} } +}; + +static const lc3b_insn_info addand_insn[] = { + { MOD_OpHAdd, 0x1000, 3, + {OPT_Reg|OPA_DR, OPT_Reg|OPA_SR, OPT_Reg|OPA_Imm|OPI_5} }, + { MOD_OpHAdd, 0x1020, 3, + {OPT_Reg|OPA_DR, OPT_Reg|OPA_SR, OPT_Imm|OPA_Imm|OPI_5} } +}; + +static const lc3b_insn_info br_insn[] = { + { MOD_OpHAdd, 0x0000, 1, {OPT_Imm|OPA_Imm|OPI_9PC, 0, 0} } +}; + +static const lc3b_insn_info jmp_insn[] = { + { 0, 0xC000, 2, {OPT_Reg|OPA_DR, OPT_Imm|OPA_Imm|OPI_9, 0} } +}; + +static const lc3b_insn_info lea_insn[] = { + { 0, 0xE000, 2, {OPT_Reg|OPA_DR, OPT_Imm|OPA_Imm|OPI_9PC, 0} } +}; + +static const lc3b_insn_info ldst_insn[] = { + { MOD_OpHAdd, 0x0000, 3, + {OPT_Reg|OPA_DR, OPT_Reg|OPA_SR, OPT_Imm|OPA_Imm|OPI_6W} } +}; + +static const lc3b_insn_info ldstb_insn[] = { + { MOD_OpHAdd, 0x0000, 3, + {OPT_Reg|OPA_DR, OPT_Reg|OPA_SR, OPT_Imm|OPA_Imm|OPI_6B} } +}; + +static const lc3b_insn_info not_insn[] = { + { 0, 0x903F, 2, {OPT_Reg|OPA_DR, OPT_Reg|OPA_SR, 0} } +}; + +static const lc3b_insn_info nooperand_insn[] = { + { MOD_OpHAdd, 0x0000, 0, {0, 0, 0} } +}; + +static const lc3b_insn_info shift_insn[] = { + { MOD_OpLAdd, 0xD000, 3, + {OPT_Reg|OPA_DR, OPT_Reg|OPA_SR, OPT_Imm|OPA_Imm|OPI_4} } +}; + +static const lc3b_insn_info trap_insn[] = { + { 0, 0xF000, 1, {OPT_Imm|OPA_Imm|OPI_8, 0, 0} } +}; + +static void +lc3b_id_insn_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc) +{ + lc3b_id_insn *id_insn = (lc3b_id_insn *)bc->contents; + lc3b_insn *insn; + int num_info = id_insn->num_info; + const lc3b_insn_info *info = id_insn->group; + unsigned long mod_data = id_insn->mod_data; + int found = 0; + yasm_insn_operand *op; + int i; + + yasm_insn_finalize(&id_insn->insn); + + /* Just do a simple linear search through the info array for a match. + * First match wins. + */ + for (; num_info>0 && !found; num_info--, info++) { + int mismatch = 0; + + /* Match # of operands */ + if (id_insn->insn.num_operands != info->num_operands) + continue; + + if (id_insn->insn.num_operands == 0) { + found = 1; /* no operands -> must have a match here. */ + break; + } + + /* Match each operand type and size */ + for(i = 0, op = yasm_insn_ops_first(&id_insn->insn); + op && inum_operands && !mismatch; + op = yasm_insn_op_next(op), i++) { + /* Check operand type */ + switch ((int)(info->operands[i] & OPT_MASK)) { + case OPT_Imm: + if (op->type != YASM_INSN__OPERAND_IMM) + mismatch = 1; + break; + case OPT_Reg: + if (op->type != YASM_INSN__OPERAND_REG) + mismatch = 1; + break; + default: + yasm_internal_error(N_("invalid operand type")); + } + + if (mismatch) + break; + } + + if (!mismatch) { + found = 1; + break; + } + } + + if (!found) { + /* Didn't find a matching one */ + yasm_error_set(YASM_ERROR_TYPE, + N_("invalid combination of opcode and operands")); + return; + } + + /* Copy what we can from info */ + insn = yasm_xmalloc(sizeof(lc3b_insn)); + yasm_value_initialize(&insn->imm, NULL, 0); + insn->imm_type = LC3B_IMM_NONE; + insn->opcode = info->opcode; + + /* Apply modifiers */ + if (info->modifiers & MOD_OpHAdd) { + insn->opcode += ((unsigned int)(mod_data & 0xFF))<<8; + mod_data >>= 8; + } + if (info->modifiers & MOD_OpLAdd) { + insn->opcode += (unsigned int)(mod_data & 0xFF); + /*mod_data >>= 8;*/ + } + + /* Go through operands and assign */ + if (id_insn->insn.num_operands > 0) { + for(i = 0, op = yasm_insn_ops_first(&id_insn->insn); + op && inum_operands; op = yasm_insn_op_next(op), i++) { + + switch ((int)(info->operands[i] & OPA_MASK)) { + case OPA_None: + /* Throw away the operand contents */ + if (op->type == YASM_INSN__OPERAND_IMM) + yasm_expr_destroy(op->data.val); + break; + case OPA_DR: + if (op->type != YASM_INSN__OPERAND_REG) + yasm_internal_error(N_("invalid operand conversion")); + insn->opcode |= ((unsigned int)(op->data.reg & 0x7)) << 9; + break; + case OPA_SR: + if (op->type != YASM_INSN__OPERAND_REG) + yasm_internal_error(N_("invalid operand conversion")); + insn->opcode |= ((unsigned int)(op->data.reg & 0x7)) << 6; + break; + case OPA_Imm: + insn->imm_type = (info->operands[i] & OPI_MASK)>>3; + switch (op->type) { + case YASM_INSN__OPERAND_IMM: + if (insn->imm_type == LC3B_IMM_6_WORD + || insn->imm_type == LC3B_IMM_8 + || insn->imm_type == LC3B_IMM_9 + || insn->imm_type == LC3B_IMM_9_PC) + op->data.val = yasm_expr_create(YASM_EXPR_SHR, + yasm_expr_expr(op->data.val), + yasm_expr_int(yasm_intnum_create_uint(1)), + op->data.val->line); + if (yasm_value_finalize_expr(&insn->imm, + op->data.val, + prev_bc, 0)) + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("immediate expression too complex")); + break; + case YASM_INSN__OPERAND_REG: + if (yasm_value_finalize_expr(&insn->imm, + yasm_expr_create_ident(yasm_expr_int( + yasm_intnum_create_uint(op->data.reg & 0x7)), + bc->line), prev_bc, 0)) + yasm_internal_error(N_("reg expr too complex?")); + break; + default: + yasm_internal_error(N_("invalid operand conversion")); + } + break; + default: + yasm_internal_error(N_("unknown operand action")); + } + + /* Clear so it doesn't get destroyed */ + op->type = YASM_INSN__OPERAND_REG; + } + + if (insn->imm_type == LC3B_IMM_9_PC) { + if (insn->imm.seg_of || insn->imm.rshift > 1 + || insn->imm.curpos_rel) + yasm_error_set(YASM_ERROR_VALUE, N_("invalid jump target")); + insn->imm.curpos_rel = 1; + } + } + + /* Transform the bytecode */ + yasm_lc3b__bc_transform_insn(bc, insn); +} + + +#define YYCTYPE unsigned char +#define YYCURSOR id +#define YYLIMIT id +#define YYMARKER marker +#define YYFILL(n) (void)(n) + +yasm_arch_regtmod +yasm_lc3b__parse_check_regtmod(yasm_arch *arch, const char *oid, size_t id_len, + uintptr_t *data) +{ + const YYCTYPE *id = (const YYCTYPE *)oid; + /*const char *marker;*/ + /*!re2c + /* integer registers */ + 'r' [0-7] { + *data = (oid[1]-'0'); + return YASM_ARCH_REG; + } + + /* catchalls */ + [\001-\377]+ { + return YASM_ARCH_NOTREGTMOD; + } + [\000] { + return YASM_ARCH_NOTREGTMOD; + } + */ +} + +#define RET_INSN(g, m) \ + do { \ + group = g##_insn; \ + mod = m; \ + nelems = NELEMS(g##_insn); \ + goto done; \ + } while(0) + +yasm_arch_insnprefix +yasm_lc3b__parse_check_insnprefix(yasm_arch *arch, const char *oid, + size_t id_len, unsigned long line, + yasm_bytecode **bc, uintptr_t *prefix) +{ + const YYCTYPE *id = (const YYCTYPE *)oid; + const lc3b_insn_info *group = empty_insn; + unsigned long mod = 0; + unsigned int nelems = NELEMS(empty_insn); + lc3b_id_insn *id_insn; + + *bc = (yasm_bytecode *)NULL; + *prefix = 0; + + /*const char *marker;*/ + /*!re2c + /* instructions */ + + 'add' { RET_INSN(addand, 0x00); } + 'and' { RET_INSN(addand, 0x40); } + + 'br' { RET_INSN(br, 0x00); } + 'brn' { RET_INSN(br, 0x08); } + 'brz' { RET_INSN(br, 0x04); } + 'brp' { RET_INSN(br, 0x02); } + 'brnz' { RET_INSN(br, 0x0C); } + 'brnp' { RET_INSN(br, 0x0A); } + 'brzp' { RET_INSN(br, 0x06); } + 'brnzp' { RET_INSN(br, 0x0E); } + 'jsr' { RET_INSN(br, 0x40); } + + 'jmp' { RET_INSN(jmp, 0); } + + 'lea' { RET_INSN(lea, 0); } + + 'ld' { RET_INSN(ldst, 0x20); } + 'ldi' { RET_INSN(ldst, 0xA0); } + 'st' { RET_INSN(ldst, 0x30); } + 'sti' { RET_INSN(ldst, 0xB0); } + + 'ldb' { RET_INSN(ldstb, 0x60); } + 'stb' { RET_INSN(ldstb, 0x70); } + + 'not' { RET_INSN(not, 0); } + + 'ret' { RET_INSN(nooperand, 0xCE); } + 'rti' { RET_INSN(nooperand, 0x80); } + 'nop' { RET_INSN(nooperand, 0); } + + 'lshf' { RET_INSN(shift, 0x00); } + 'rshfl' { RET_INSN(shift, 0x10); } + 'rshfa' { RET_INSN(shift, 0x30); } + + 'trap' { RET_INSN(trap, 0); } + + /* catchalls */ + [\001-\377]+ { + return YASM_ARCH_NOTINSNPREFIX; + } + [\000] { + return YASM_ARCH_NOTINSNPREFIX; + } + */ + +done: + id_insn = yasm_xmalloc(sizeof(lc3b_id_insn)); + yasm_insn_initialize(&id_insn->insn); + id_insn->group = group; + id_insn->mod_data = mod; + id_insn->num_info = nelems; + *bc = yasm_bc_create_common(&lc3b_id_insn_callback, id_insn, line); + return YASM_ARCH_INSN; +} + +static void +lc3b_id_insn_destroy(void *contents) +{ + lc3b_id_insn *id_insn = (lc3b_id_insn *)contents; + yasm_insn_delete(&id_insn->insn, yasm_lc3b__ea_destroy); + yasm_xfree(contents); +} + +static void +lc3b_id_insn_print(const void *contents, FILE *f, int indent_level) +{ + const lc3b_id_insn *id_insn = (const lc3b_id_insn *)contents; + yasm_insn_print(&id_insn->insn, f, indent_level); + /*TODO*/ +} + +/*@only@*/ yasm_bytecode * +yasm_lc3b__create_empty_insn(yasm_arch *arch, unsigned long line) +{ + lc3b_id_insn *id_insn = yasm_xmalloc(sizeof(lc3b_id_insn)); + + yasm_insn_initialize(&id_insn->insn); + id_insn->group = empty_insn; + id_insn->mod_data = 0; + id_insn->num_info = NELEMS(empty_insn); + + return yasm_bc_create_common(&lc3b_id_insn_callback, id_insn, line); +} diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/Makefile.inc new file mode 100644 index 0000000000..1ca39a3d45 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/Makefile.inc @@ -0,0 +1,12 @@ +TESTS += modules/arch/lc3b/tests/lc3b_test.sh + +EXTRA_DIST += modules/arch/lc3b/tests/lc3b_test.sh +EXTRA_DIST += modules/arch/lc3b/tests/lc3b-basic.asm +EXTRA_DIST += modules/arch/lc3b/tests/lc3b-basic.errwarn +EXTRA_DIST += modules/arch/lc3b/tests/lc3b-basic.hex +EXTRA_DIST += modules/arch/lc3b/tests/lc3b-br.asm +EXTRA_DIST += modules/arch/lc3b/tests/lc3b-br.hex +EXTRA_DIST += modules/arch/lc3b/tests/lc3b-ea-err.asm +EXTRA_DIST += modules/arch/lc3b/tests/lc3b-ea-err.errwarn +EXTRA_DIST += modules/arch/lc3b/tests/lc3b-mp22NC.asm +EXTRA_DIST += modules/arch/lc3b/tests/lc3b-mp22NC.hex diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-basic.asm b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-basic.asm new file mode 100644 index 0000000000..4cfa7754e3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-basic.asm @@ -0,0 +1,9 @@ +add r7, r6, r5 +add r4, r3, 22 +label: +and r2, r1, r0 +and r2, r5, 5 +brz label +br label2 + +label2: diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-basic.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-basic.errwarn new file mode 100644 index 0000000000..8a232a029a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-basic.errwarn @@ -0,0 +1 @@ +-:2: warning: value does not fit in signed 5 bit field diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-basic.hex b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-basic.hex new file mode 100644 index 0000000000..9e90c961f3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-basic.hex @@ -0,0 +1,12 @@ +85 +1f +f6 +18 +40 +54 +65 +55 +fd +05 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-br.asm b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-br.asm new file mode 100644 index 0000000000..927da7dff4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-br.asm @@ -0,0 +1,10 @@ +br label +brn label +brz label +brp label +brnz label +brnp label +brzp label +brnzp label +label: + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-br.hex b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-br.hex new file mode 100644 index 0000000000..10ad19aeea --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-br.hex @@ -0,0 +1,16 @@ +07 +00 +06 +08 +05 +04 +04 +02 +03 +0c +02 +0a +01 +06 +00 +0e diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-ea-err.asm b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-ea-err.asm new file mode 100644 index 0000000000..4938d8c438 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-ea-err.asm @@ -0,0 +1 @@ +ld r5, [r6+5] diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-ea-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-ea-err.errwarn new file mode 100644 index 0000000000..e49df726ab --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-ea-err.errwarn @@ -0,0 +1 @@ +-:1: error: invalid combination of opcode and operands diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-mp22NC.asm b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-mp22NC.asm new file mode 100644 index 0000000000..c855bc1c84 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-mp22NC.asm @@ -0,0 +1,302 @@ +; Need to update for multi-segment someday. + +;.SEGMENT CodeSegment: +DONTBR: LEA R0, AA + LEA R1, BB + LEA R2, CC + LD R7, R0, ADATA3F-AA + + LD R6, R2, CDATA3F-CC + ST R7, R1, BDATA3D-BB + ST R7, R1, BDATA3F-BB + ST R7, R1, BDATA3C-BB + + + ADD R3, R2, -3 + ADD R4, R2, -4 + RSHFL R6, R7, 8 + STB R7, R4, 0 + + STB R6, R3, 0 + LD R5, R1, BDATA3A-BB + LD R7, R0, ADATA39-AA + ST R7, R1, BDATA38-BB + + ST R7, R1, BDATA39-BB + ST R7, R1, BDATA3A-BB + ADD R3, R2, -9 + ADD R4, R2, -10 + + STB R6, R3, 0 + STB R7, R4, 0 + ST R7, R2, CDATA3B-CC + LD R7, R2, CDATA37-CC + + LD R6, R1, BDATA35-BB + ST R6, R2, CDATA37-CC + LD R5, R2, CDATA36-CC + LD R7, R0, ADATA36-AA + + LD R7, R1, BDATA35-BB + LD R6, R2, CDATA35-CC + LD R7, R0, ADATA37-AA + ST R7, R1, BDATA37-BB + + AND R3, R3, 0 + AND R4, R4, 0 + ADD R3, R3, 11 + ADD R4, R4, -1 + +LOOP: LD R7, R0, ADATA32-AA + LD R7, R1, BDATA32-BB + LD R7, R2, CDATA31-CC + ADD R3, R3, R4 + + BRp LOOP + LD R6, R1, BDATA0-BB + LD R6, R1, BDATA4-BB + LD R6, R1, BDATA10-BB + + ST R7, R1, BDATA4-BB + ST R7, R1, BDATA11-BB + ST R7, R0, ADATA8-AA +STOP: BRnzp STOP + + + BR DONTBR + BR DONTBR + BR DONTBR + BR DONTBR + + BR DONTBR + BR DONTBR + BR DONTBR + BR DONTBR + + BR DONTBR + BR DONTBR + BR DONTBR + BR DONTBR + + BR DONTBR + BR DONTBR + BR DONTBR + BR DONTBR + + + +;.SEGMENT AA: +AA: + +ADATA0: dw 0x600D +ADATA1: dw 0x600D +ADATA2: dw 0x600D +ADATA3: dw 0x600D +ADATA4: dw 0x600D +ADATA5: dw 0x600D +ADATA6: dw 0x600D +ADATA7: dw 0x600D +ADATA8: dw 0x600D +ADATA9: dw 0x600D +ADATAA: dw 0x600D +ADATAB: dw 0x600D +ADATAC: dw 0x600D +ADATAD: dw 0x600D +ADATAE: dw 0x600D +ADATAF: dw 0x600D + +ADATA10: dw 0x600D +ADATA11: dw 0x600D +ADATA12: dw 0x600D +ADATA13: dw 0x600D +ADATA14: dw 0x600D +ADATA15: dw 0x600D +ADATA16: dw 0x600D +ADATA17: dw 0x600D +ADATA18: dw 0x600D +ADATA19: dw 0x600D +ADATA1A: dw 0x600D +ADATA1B: dw 0x600D +ADATA1C: dw 0x600D +ADATA1D: dw 0x600D +ADATA1E: dw 0x600D +ADATA1F: dw 0x600D + +ADATA20: dw 0x600D +ADATA21: dw 0x600D +ADATA22: dw 0x600D +ADATA23: dw 0x600D +ADATA24: dw 0x600D +ADATA25: dw 0x600D +ADATA26: dw 0x600D +ADATA27: dw 0x600D +ADATA28: dw 0x600D +ADATA29: dw 0x600D +ADATA2A: dw 0x600D +ADATA2B: dw 0x600D +ADATA2C: dw 0x600D +ADATA2D: dw 0x600D +ADATA2E: dw 0x600D +ADATA2F: dw 0x600D + +ADATA30: dw 0x600D +ADATA31: dw 0x600D +ADATA32: dw 0x600D +ADATA33: dw 0x600D +ADATA34: dw 0x600D +ADATA35: dw 0x600D +ADATA36: dw 0x600D +ADATA37: dw 0x600D +ADATA38: dw 0x600D +ADATA39: dw 0x600D +ADATA3A: dw 0x600D +ADATA3B: dw 0x600D +ADATA3C: dw 0x600D +ADATA3D: dw 0x600D +ADATA3E: dw 0x600D +ADATA3F: dw 0x600D + +;.SEGMENT BB: +BB: + +BDATA0: dw 0xBADD +BDATA1: dw 0xBADD +BDATA2: dw 0xBADD +BDATA3: dw 0xBADD +BDATA4: dw 0xBADD +BDATA5: dw 0xBADD +BDATA6: dw 0xBADD +BDATA7: dw 0xBADD +BDATA8: dw 0xBADD +BDATA9: dw 0xBADD +BDATAA: dw 0xBADD +BDATAB: dw 0xBADD +BDATAC: dw 0xBADD +BDATAD: dw 0xBADD +BDATAE: dw 0xBADD +BDATAF: dw 0xBADD + +BDATA10: dw 0xBADD +BDATA11: dw 0xBADD +BDATA12: dw 0xBADD +BDATA13: dw 0xBADD +BDATA14: dw 0xBADD +BDATA15: dw 0xBADD +BDATA16: dw 0xBADD +BDATA17: dw 0xBADD +BDATA18: dw 0xBADD +BDATA19: dw 0xBADD +BDATA1A: dw 0xBADD +BDATA1B: dw 0xBADD +BDATA1C: dw 0xBADD +BDATA1D: dw 0xBADD +BDATA1E: dw 0xBADD +BDATA1F: dw 0xBADD + +BDATA20: dw 0xBADD +BDATA21: dw 0xBADD +BDATA22: dw 0xBADD +BDATA23: dw 0xBADD +BDATA24: dw 0xBADD +BDATA25: dw 0xBADD +BDATA26: dw 0xBADD +BDATA27: dw 0xBADD +BDATA28: dw 0xBADD +BDATA29: dw 0xBADD +BDATA2A: dw 0xBADD +BDATA2B: dw 0xBADD +BDATA2C: dw 0xBADD +BDATA2D: dw 0xBADD +BDATA2E: dw 0xBADD +BDATA2F: dw 0xBADD + +BDATA30: dw 0xBADD +BDATA31: dw 0xBADD +BDATA32: dw 0xBADD +BDATA33: dw 0xBADD +BDATA34: dw 0xBADD +BDATA35: dw 0xBADD +BDATA36: dw 0xBADD +BDATA37: dw 0xBADD +BDATA38: dw 0xBADD +BDATA39: dw 0xBADD +BDATA3A: dw 0xBADD +BDATA3B: dw 0xBADD +BDATA3C: dw 0xBADD +BDATA3D: dw 0xBADD +BDATA3E: dw 0xBADD +BDATA3F: dw 0xBADD + + +;.SEGMENT CC: +CC: + +CDATA0: dw 0x5050 +CDATA1: dw 0x5050 +CDATA2: dw 0x5050 +CDATA3: dw 0x5050 +CDATA4: dw 0x5050 +CDATA5: dw 0x5050 +CDATA6: dw 0x5050 +CDATA7: dw 0x5050 +CDATA8: dw 0x5050 +CDATA9: dw 0x5050 +CDATAA: dw 0x5050 +CDATAB: dw 0x5050 +CDATAC: dw 0x5050 +CDATAD: dw 0x5050 +CDATAE: dw 0x5050 +CDATAF: dw 0x5050 + +CDATA10: dw 0x5050 +CDATA11: dw 0x5050 +CDATA12: dw 0x5050 +CDATA13: dw 0x5050 +CDATA14: dw 0x5050 +CDATA15: dw 0x5050 +CDATA16: dw 0x5050 +CDATA17: dw 0x5050 +CDATA18: dw 0x5050 +CDATA19: dw 0x5050 +CDATA1A: dw 0x5050 +CDATA1B: dw 0x5050 +CDATA1C: dw 0x5050 +CDATA1D: dw 0x5050 +CDATA1E: dw 0x5050 +CDATA1F: dw 0x5050 + +CDATA20: dw 0x5050 +CDATA21: dw 0x5050 +CDATA22: dw 0x5050 +CDATA23: dw 0x5050 +CDATA24: dw 0x5050 +CDATA25: dw 0x5050 +CDATA26: dw 0x5050 +CDATA27: dw 0x5050 +CDATA28: dw 0x5050 +CDATA29: dw 0x5050 +CDATA2A: dw 0x5050 +CDATA2B: dw 0x5050 +CDATA2C: dw 0x5050 +CDATA2D: dw 0x5050 +CDATA2E: dw 0x5050 +CDATA2F: dw 0x5050 + +CDATA30: dw 0x5050 +CDATA31: dw 0x5050 +CDATA32: dw 0x5050 +CDATA33: dw 0x5050 +CDATA34: dw 0x5050 +CDATA35: dw 0x5050 +CDATA36: dw 0x5050 +CDATA37: dw 0x5050 +CDATA38: dw 0x5050 +CDATA39: dw 0x5050 +CDATA3A: dw 0x5050 +CDATA3B: dw 0x5050 +CDATA3C: dw 0x5050 +CDATA3D: dw 0x5050 +CDATA3E: dw 0x5050 +CDATA3F: dw 0x5050 + + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-mp22NC.hex b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-mp22NC.hex new file mode 100644 index 0000000000..dcf475bbe5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b-mp22NC.hex @@ -0,0 +1,512 @@ +3f +e0 +7e +e2 +bd +e4 +3f +2e +bf +2c +7d +3e +7f +3e +7c +3e +bd +16 +bc +18 +d8 +dd +00 +7f +c0 +7c +7a +2a +39 +2e +78 +3e +79 +3e +7a +3e +b7 +16 +b6 +18 +c0 +7c +00 +7f +bb +3e +b7 +2e +75 +2c +b7 +3c +b6 +2a +36 +2e +75 +2e +b5 +2c +37 +2e +77 +3e +e0 +56 +20 +59 +eb +16 +3f +19 +32 +2e +72 +2e +b1 +2e +c4 +16 +fb +03 +40 +2c +44 +2c +50 +2c +44 +3e +51 +3e +08 +3e +ff +0f +cf +01 +ce +01 +cd +01 +cc +01 +cb +01 +ca +01 +c9 +01 +c8 +01 +c7 +01 +c6 +01 +c5 +01 +c4 +01 +c3 +01 +c2 +01 +c1 +01 +c0 +01 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +0d +60 +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +dd +ba +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 +50 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b_test.sh b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b_test.sh new file mode 100755 index 0000000000..5c11581798 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/lc3b/tests/lc3b_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh lc3b_test modules/arch/lc3b/tests "lc3b arch" "-a lc3b -f bin" "" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/arch/x86/CMakeLists.txt new file mode 100644 index 0000000000..d15c99483d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/CMakeLists.txt @@ -0,0 +1,50 @@ +ADD_CUSTOM_COMMAND( + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/x86insns.c + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.gperf + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.gperf + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/arch/x86/gen_x86_insn.py + ${CMAKE_CURRENT_BINARY_DIR}/x86insns.c + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.gperf + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.gperf + MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/arch/x86/gen_x86_insn.py + ) + +YASM_GENPERF( + ${CMAKE_CURRENT_SOURCE_DIR}/arch/x86/x86cpu.gperf + ${CMAKE_CURRENT_BINARY_DIR}/x86cpu.c + ) + +YASM_GENPERF( + ${CMAKE_CURRENT_SOURCE_DIR}/arch/x86/x86regtmod.gperf + ${CMAKE_CURRENT_BINARY_DIR}/x86regtmod.c + ) + +YASM_GENPERF( + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.gperf + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.c + ) + +YASM_GENPERF( + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.gperf + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.c + ) + +YASM_ADD_MODULE(arch_x86 + arch/x86/x86arch.c + arch/x86/x86bc.c + arch/x86/x86expr.c + arch/x86/x86id.c + x86cpu.c + x86regtmod.c + ) + +SET(insn_DEPS + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.c + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.c + ${CMAKE_CURRENT_BINARY_DIR}/x86insns.c + ) + +SET_SOURCE_FILES_PROPERTIES(arch/x86/x86id.c PROPERTIES + OBJECT_DEPENDS "${insn_DEPS}" + ) diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/arch/x86/Makefile.inc new file mode 100644 index 0000000000..e7b162e3f5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/Makefile.inc @@ -0,0 +1,57 @@ +libyasm_a_SOURCES += modules/arch/x86/x86arch.c +libyasm_a_SOURCES += modules/arch/x86/x86arch.h +libyasm_a_SOURCES += modules/arch/x86/x86bc.c +libyasm_a_SOURCES += modules/arch/x86/x86expr.c +libyasm_a_SOURCES += modules/arch/x86/x86id.c +nodist_libyasm_a_SOURCES += x86cpu.c +nodist_libyasm_a_SOURCES += x86regtmod.c + +YASM_MODULES += arch_x86 + +modules/arch/x86/x86id.c: x86insn_nasm.c x86insn_gas.c x86insns.c + +EXTRA_DIST += modules/arch/x86/gen_x86_insn.py + +if HAVE_PYTHON +x86insn_nasm.gperf x86insn_gas.gperf x86insns.c: $(srcdir)/modules/arch/x86/gen_x86_insn.py + $(PYTHON) $(srcdir)/modules/arch/x86/gen_x86_insn.py +else +x86insn_nasm.gperf: $(srcdir)/x86insn_nasm.gperf + @echo Python must be installed to regenerate x86 instructions files + cp $(srcdir)/x86insn_nasm.gperf $@ +x86insn_gas.gperf: $(srcdir)/x86insn_gas.gperf + @echo Python must be installed to regenerate x86 instructions files + cp $(srcdir)/x86insn_gas.gperf $@ +endif + +BUILT_SOURCES += x86insns.c +BUILT_SOURCES += x86insn_nasm.gperf +BUILT_SOURCES += x86insn_gas.gperf +EXTRA_DIST += x86insns.c +EXTRA_DIST += x86insn_nasm.gperf +EXTRA_DIST += x86insn_gas.gperf +MAINTAINERCLEANFILES += x86insns.c +MAINTAINERCLEANFILES += x86insn_nasm.gperf +MAINTAINERCLEANFILES += x86insn_gas.gperf + +EXTRA_DIST += modules/arch/x86/x86cpu.gperf +EXTRA_DIST += modules/arch/x86/x86regtmod.gperf + +# Use suffix rules for gperf files +x86insn_nasm.c: x86insn_nasm.gperf genperf$(EXEEXT) +x86insn_gas.c: x86insn_gas.gperf genperf$(EXEEXT) +x86cpu.c: $(srcdir)/modules/arch/x86/x86cpu.gperf genperf$(EXEEXT) + $(top_builddir)/genperf$(EXEEXT) $(srcdir)/modules/arch/x86/x86cpu.gperf $@ +x86regtmod.c: $(srcdir)/modules/arch/x86/x86regtmod.gperf genperf$(EXEEXT) + $(top_builddir)/genperf$(EXEEXT) $(srcdir)/modules/arch/x86/x86regtmod.gperf $@ + +BUILT_SOURCES += x86insn_nasm.c +BUILT_SOURCES += x86insn_gas.c +CLEANFILES += x86insn_nasm.c +CLEANFILES += x86insn_gas.c +CLEANFILES += x86cpu.c +CLEANFILES += x86regtmod.c + +EXTRA_DIST += modules/arch/x86/tests/Makefile.inc + +include modules/arch/x86/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/gen_x86_insn.py b/third-party/yasm/yasm-1.3.0/modules/arch/x86/gen_x86_insn.py new file mode 100755 index 0000000000..88972b0152 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/gen_x86_insn.py @@ -0,0 +1,8489 @@ +#! /usr/bin/env python +# x86 instructions and prefixes data and code generation +# +# Copyright (C) 2002-2007 Peter Johnson +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. +# +# NOTE: operands are arranged in NASM / Intel order (e.g. dest, src) + +from sys import stdout, version_info + +scriptname = "gen_x86_insn.py" +scriptrev = "HEAD" + +ordered_cpus = [ + "086", "186", "286", "386", "486", "586", "686", "K6", "Athlon", "P3", + "P4", "IA64", "Hammer"] +ordered_cpu_features = [ + "FPU", "Cyrix", "AMD", "MMX", "3DNow", "SMM", "SSE", "SSE2", + "SSE3", "SVM", "PadLock", "SSSE3", "SSE41", "SSE42", "SSE4a", "SSE5", + "AVX", "FMA", "AES", "CLMUL", "MOVBE", "XOP", "FMA4", "F16C", + "FSGSBASE", "RDRAND", "XSAVEOPT", "EPTVPID", "SMX", "AVX2", "BMI1", + "BMI2", "INVPCID", "LZCNT", "TBM", "TSX", "SHA", "SMAP", "RDSEED", "ADX", + "PRFCHW"] +unordered_cpu_features = ["Priv", "Prot", "Undoc", "Obs"] + +# Predefined VEX prefix field values +VEXW0 = 0xC0 +VEXW1 = 0xC8 +VEXL0 = 0xC0 +VEXL1 = 0xC4 +VEXpp = 0xC0 # OR with value + +# Predefined XOP prefix field values +XOPW0 = 0x80 +XOPW1 = 0x88 +XOPL0 = 0x80 +XOPL1 = 0x84 +XOPpp = 0x80 # OR with value + +def lprint(s, f = stdout, e = '\n') : + f.write(s + e) + +def cpu_lcd(cpu1, cpu2): + """Find the lowest common denominator of two CPU sets.""" + retval = set() + + # CPU + cpu1cpus = set(ordered_cpus) & set(cpu1) + if not cpu1cpus: + cpu1cpus.add("086") + cpu1mincpu = min(ordered_cpus.index(x) for x in cpu1cpus) + cpu2cpus = set(ordered_cpus) & set(cpu2) + if not cpu2cpus: + cpu2cpus.add("086") + cpu2mincpu = min(ordered_cpus.index(x) for x in cpu1cpus) + cpumin = ordered_cpus[min(cpu1mincpu, cpu2mincpu)] + if cpumin == "086": + cpumin = "Any" + + if cpumin != "Any": + retval.add(cpumin) + + # Feature + cpu1features = set(ordered_cpu_features) & set(cpu1) + if not cpu1features: + cpu1minfeature = -1 + else: + cpu1minfeature = min(ordered_cpu_features.index(x) + for x in cpu1features) + + cpu2features = set(ordered_cpu_features) & set(cpu2) + if not cpu2features: + cpu2minfeature = -1 + else: + cpu2minfeature = min(ordered_cpu_features.index(x) + for x in cpu2features) + + if cpu1minfeature != -1 and cpu2minfeature != -1: + featuremin = ordered_cpu_features[min(cpu1minfeature, cpu2minfeature)] + retval.add(featuremin) + + # Unordered features + for feature in set(unordered_cpu_features) & set(cpu1) & set(cpu2): + retval.add(feature) + + return retval + +class Operand(object): + def __init__(self, **kwargs): + self.type = kwargs.pop("type") + self.size = kwargs.pop("size", "Any") + self.relaxed = kwargs.pop("relaxed", False) + self.dest = kwargs.pop("dest", None) + self.tmod = kwargs.pop("tmod", None) + self.opt = kwargs.pop("opt", None) + + if kwargs: + for arg in kwargs: + lprint("Warning: unrecognized arg %s" % arg) + + def __str__(self): + return "{"+ ", ".join(["OPT_%s" % self.type, + "OPS_%s" % self.size, + "%d" % self.relaxed, + self.dest == "EA64" and "1" or "0", + "OPTM_%s" % self.tmod, + "OPA_%s" % (self.dest == "EA64" + and "EA" or self.dest), + "OPAP_%s" % self.opt]) + "}" + + def __eq__(self, other): + return (self.type == other.type and + self.size == other.size and + self.relaxed == other.relaxed and + self.dest == other.dest and + self.tmod == other.tmod and + self.opt == other.opt) + + def __ne__(self, other): + return (self.type != other.type or + self.size != other.size or + self.relaxed != other.relaxed or + self.dest != other.dest or + self.tmod != other.tmod or + self.opt != other.opt) + +class GroupForm(object): + def __init__(self, **kwargs): + # Parsers + self.parsers = set(kwargs.pop("parsers", ["gas", "nasm"])) + + # CPU feature flags initialization + self.cpu = set(kwargs.pop("cpu", [])) + + # Misc flags + self.misc_flags = set(kwargs.pop("misc_flags", [])) + if kwargs.pop("only64", False): + self.misc_flags.add("ONLY_64") + if kwargs.pop("not64", False): + self.misc_flags.add("NOT_64") + if kwargs.pop("onlyavx", False): + self.misc_flags.add("ONLY_AVX") + if kwargs.pop("notavx", False): + self.misc_flags.add("NOT_AVX") + + # Operation size + self.opersize = kwargs.pop("opersize", 0) + if self.opersize == 8: + self.opersize = 0 + + if self.opersize == 64: + self.misc_flags.add("ONLY_64") + elif self.opersize == 32 and "ONLY_64" not in self.misc_flags: + self.cpu.add("386") + + # Default operation size in 64-bit mode + self.def_opersize_64 = kwargs.pop("def_opersize_64", 0) + + # GAS suffix + self.gen_suffix = kwargs.pop("gen_suffix", True) + self.suffixes = kwargs.pop("suffixes", None) + suffix = kwargs.pop("suffix", None) + if suffix is not None: + self.suffixes = [suffix] + + req_suffix = kwargs.pop("req_suffix", False) + if not req_suffix: + if self.suffixes is None: + self.suffixes = ["Z"] + else: + self.suffixes.append("Z") + + if self.suffixes is not None: + self.suffixes = set(x.upper() for x in self.suffixes) + + # Special instruction prefix + self.special_prefix = "0" + if "prefix" in kwargs: + self.special_prefix = "0x%02X" % kwargs.pop("prefix") + + # VEX prefix + if "vex" in kwargs: + self.misc_flags.add("ONLY_AVX") + vexW = kwargs.pop("vexw", 0) + if vexW not in [0, 1]: + raise ValueError("VEX.W must be 0 or 1") + + vexL = kwargs.pop("vex") + if vexL == 128 or vexL == 0: + vexL = 0 + elif vexL == 256: + vexL = 1 + else: + raise ValueError("VEX.L must be 128 or 256") + + if self.special_prefix in ["0", "0x00"]: + vexpp = 0 + elif self.special_prefix == "0x66": + vexpp = 1 + elif self.special_prefix == "0xF3": + vexpp = 2 + elif self.special_prefix == "0xF2": + vexpp = 3 + else: + raise ValueError("Cannot combine VEX and special prefix %s" + % self.special_prefix) + + self.special_prefix = "0x%02X" % (0xC0 + vexW*8 + vexL*4 + vexpp) + + # XOP prefix + if "xop" in kwargs: + xopW = kwargs.pop("xopw", 0) + if xopW not in [0, 1]: + raise ValueError("XOP.W must be 0 or 1") + + xopL = kwargs.pop("xop") + if xopL == 128 or xopL == 0: + xopL = 0 + elif xopL == 256: + xopL = 1 + else: + raise ValueError("XOP.L must be 128 or 256") + + # XOPpp is currently reserved (0) + xoppp = 0 + if self.special_prefix not in ["0", "0x00"]: + raise ValueError("Cannot combine XOP and special prefix %s" + % self.special_prefix) + self.special_prefix = "0x%02X" % (0x80 + xopW*8 + xopL*4 + xoppp) + + # Spare value + self.spare = kwargs.pop("spare", 0) + + # Build opcodes string (C array initializer) + if "opcode" in kwargs: + # Usual case, just a single opcode + self.opcode = kwargs.pop("opcode") + self.opcode_len = len(self.opcode) + elif "opcode1" in kwargs and "opcode2" in kwargs: + # Two opcode case; the first opcode is the "optimized" opcode, + # the second is the "relaxed" opcode. For this to work, an + # opt="foo" must be set for one of the operands. + self.opcode1 = kwargs.pop("opcode1") + self.opcode2 = kwargs.pop("opcode2") + self.opcode_len = len(self.opcode1) + else: + raise KeyError("missing opcode") + + # Build operands string (C array initializer) + self.operands = kwargs.pop("operands") + for op in self.operands: + if op.type in ["Reg", "RM", "Areg", "Creg", "Dreg"]: + if op.size == 64: + self.misc_flags.add("ONLY_64") + elif op.size == 32 and "ONLY_64" not in self.misc_flags: + self.cpu.add("386") + if op.type in ["Imm", "ImmNotSegOff"]: + if op.size == 64: + self.misc_flags.add("ONLY_64") + elif op.size == 32 and "ONLY_64" not in self.misc_flags: + self.cpu.add("386") + if op.type in ["FS", "GS"] and "ONLY_64" not in self.misc_flags: + self.cpu.add("386") + if op.type in ["CR4"] and "ONLY_64" not in self.misc_flags: + self.cpu.add("586") + if op.dest == "EA64": + self.misc_flags.add("ONLY_64") + + # Modifiers + self.modifiers = kwargs.pop("modifiers", []) + + # GAS flags + self.gas_only = ("nasm" not in self.parsers) + self.gas_illegal = ("gas" not in self.parsers) + self.gas_no_rev = (kwargs.pop("gas_no_reverse", False) or + kwargs.pop("gas_no_rev", False)) + + # CPU feature flags finalization + # Remove redundancies + maxcpu = -1 + maxcpu_set = self.cpu & set(ordered_cpus) + if maxcpu_set: + maxcpu = max(ordered_cpus.index(x) for x in maxcpu_set) + if maxcpu != -1: + for cpu in ordered_cpus[0:maxcpu]: + self.cpu.discard(cpu) + + if kwargs: + for arg in kwargs: + lprint("Warning: unrecognized arg %s" % arg) + + def __str__(self): + if hasattr(self, "opcode"): + opcodes_str = ["0x%02X" % x for x in self.opcode] + elif hasattr(self, "opcode1") and hasattr(self, "opcode2"): + opcodes_str = ["0x%02X" % x for x in self.opcode1] + opcodes_str.extend("0x%02X" % x for x in self.opcode2) + # Ensure opcodes initializer string is 3 long + opcodes_str.extend(["0", "0", "0"]) + opcodes_str = "{" + ', '.join(opcodes_str[0:3]) + "}" + + cpus_str = "|".join("CPU_%s" % x for x in sorted(self.cpu)) + + if len(self.modifiers) > 3: + raise ValueError("too many modifiers: %s" % (self.modifiers,)) + + cpus_str = [] + if self.cpu is not None: + if len(self.cpu) > 3: + raise ValueError("too many CPUs: %s" % (self.cpu,)) + + # Ensure CPUs initializer string is at least 3 long + cpus_str.extend("CPU_%s" % x for x in sorted(self.cpu)) + + # Ensure cpus initializer string is 3 long; 0=CPU_Any + cpus_str.extend(["0", "0", "0"]) + + + mods = ["MOD_%s" % x for x in self.modifiers] + # Ensure mods initializer string is 3 long + mods.extend(["0", "0", "0"]) + mod_str = "{" + ', '.join(mods[0:3]) + "}" + + gas_flags = [] + if self.gas_only: + gas_flags.append("GAS_ONLY") + if self.gas_illegal: + gas_flags.append("GAS_ILLEGAL") + if self.gas_no_rev: + gas_flags.append("GAS_NO_REV") + if self.suffixes: + gas_flags.extend("SUF_%s" % x for x in sorted(self.suffixes)) + gas_flags = "|".join(gas_flags) + + # Build instruction info structure initializer + return "{ "+ ", ".join([gas_flags or "0", + "|".join(self.misc_flags) or "0", + cpus_str[0], + cpus_str[1], + cpus_str[2], + mod_str, + "%d" % (self.opersize or 0), + "%d" % (self.def_opersize_64 or 0), + self.special_prefix or "0", + "%d" % self.opcode_len, + opcodes_str, + "%d" % (self.spare or 0), + "%d" % len(self.operands), + "%d" % self.all_operands_index]) + " }" + +groups = {} +groupnames_ordered = [] +def add_group(name, **kwargs): + forms = groups.setdefault(name, []) + forms.append(GroupForm(**kwargs)) + groupnames_ordered.append(name) + +class Insn(object): + def __init__(self, groupname, suffix=None, parser=None, modifiers=None, + cpu=None, misc_flags=None, only64=False, not64=False, + avx=False): + self.groupname = groupname + if suffix is None: + self.suffix = None + else: + self.suffix = suffix.upper() + + self.parsers = None + if suffix is not None: + self.parsers = set(["gas"]) + if parser is not None: + self.parsers = set([parser]) + + if modifiers is None: + self.modifiers = [] + else: + self.modifiers = modifiers + if cpu is None: + self.cpu = None + else: + self.cpu = set(cpu) + + if misc_flags is None: + self.misc_flags = None + else: + self.misc_flags = set([x for x in misc_flags]) + + if only64: + if self.misc_flags is None: + self.misc_flags = set() + self.misc_flags.add("ONLY_64") + if not64: + if self.misc_flags is None: + self.misc_flags = set() + self.misc_flags.add("NOT_64") + if avx: + if self.misc_flags is None: + self.misc_flags = set() + self.misc_flags.add("ONLY_AVX") + if self.cpu is None: + self.cpu = set(["AVX"]) + + def auto_cpu(self, parser): + """Determine lowest common denominator CPU from group and suffix. + Does nothing if CPU is already set.""" + if self.cpu is not None: + return + # Scan through group, matching parser and suffix + for form in groups[self.groupname]: + if parser not in form.parsers: + continue + if (self.suffix is not None and len(self.suffix) == 1 and + (form.suffixes is None or self.suffix not in form.suffixes)): + continue + if self.cpu is None: + self.cpu = set(form.cpu) + else: + self.cpu = cpu_lcd(self.cpu, form.cpu) + + def auto_misc_flags(self, parser): + """Determine lowest common denominator flags from group and suffix. + Does nothing if flags is already set.""" + if self.misc_flags is not None: + return + # Scan through group, matching parser and suffix + for form in groups[self.groupname]: + if parser not in form.parsers: + continue + if (self.suffix is not None and len(self.suffix) == 1 and + (form.suffixes is None or self.suffix not in form.suffixes)): + continue + if self.misc_flags is None: + self.misc_flags = set(form.misc_flags) + else: + self.misc_flags &= form.misc_flags + + def copy(self): + """Return a shallow copy.""" + return Insn(self.groupname, + suffix=self.suffix, + modifiers=self.modifiers, + cpu=self.cpu, + misc_flags=self.misc_flags) + + def __str__(self): + if self.suffix is None: + suffix_str = "SUF_Z" + elif len(self.suffix) == 1: + suffix_str = "SUF_" + self.suffix + else: + suffix_str = self.suffix + + cpus_str = [] + if self.cpu is not None: + if len(self.cpu) > 3: + raise ValueError("too many CPUs: %s" % (self.cpu,)) + cpus_str.extend("CPU_%s" % x for x in sorted(self.cpu)) + + # Ensure cpus initializer string is 3 long + cpus_str.extend(["0", "0", "0"]) + + if len(self.modifiers) > 3: + raise ValueError("too many modifiers") + mods_str = ["0x%02X" % x for x in self.modifiers] + + # Ensure modifiers is at least 3 long + mods_str.extend(["0", "0", "0"]) + + return ",\t".join(["%s_insn" % self.groupname, + "%d" % len(groups[self.groupname]), + suffix_str, + mods_str[0], + mods_str[1], + mods_str[2], + "|".join(self.misc_flags or []) or "0", + cpus_str[0], + cpus_str[1], + cpus_str[2]]) + +insns = {} +def add_insn(name, groupname, **kwargs): + opts = insns.setdefault(name, []) + opts.append(Insn(groupname, **kwargs)) + +class Prefix(object): + def __init__(self, groupname, value, only64=False): + self.groupname = groupname + self.value = value + self.only64 = only64 + + def __str__(self): + return ",\t".join(["NULL", + "X86_%s>>8" % self.groupname, + "0x%02X" % self.value, + "0", + "0", + "0", + self.only64 and "ONLY_64" or "0", + "0", + "0", + "0"]) + +gas_insns = {} +nasm_insns = {} + +def add_prefix(name, groupname, value, parser=None, **kwargs): + prefix = Prefix(groupname, value, **kwargs) + if parser is None or parser == "gas": + gas_insns[name] = prefix + if parser is None or parser == "nasm": + nasm_insns[name] = prefix + +def finalize_insns(): + unused_groups = set(groups.keys()) + for name in insns: + for insn in insns[name]: + group = groups[insn.groupname] + unused_groups.discard(insn.groupname) + + parsers = set() + for form in group: + parsers |= form.parsers + if insn.parsers is not None: + parsers &= insn.parsers + + if "gas" in parsers: + suffixes = set() + if insn.suffix is None: + for form in group: + if form.gen_suffix and form.suffixes is not None: + suffixes |= form.suffixes + + if not suffixes: + suffixes.add("Z") + for suffix in suffixes: + if suffix == "Z": + keyword = name + else: + keyword = name+suffix + keyword = keyword.lower() + if keyword in gas_insns: + raise ValueError("duplicate gas instruction %s" % + keyword) + newinsn = insn.copy() + if insn.suffix is None: + newinsn.suffix = suffix + newinsn.auto_cpu("gas") + newinsn.auto_misc_flags("gas") + gas_insns[keyword] = newinsn + + if "nasm" in parsers: + keyword = name + if keyword in nasm_insns: + raise ValueError("duplicate nasm instruction %s" % keyword) + newinsn = insn.copy() + newinsn.auto_cpu("nasm") + newinsn.auto_misc_flags("nasm") + nasm_insns[keyword] = newinsn + + unused_groups.discard("empty") + unused_groups.discard("not64") + if unused_groups: + lprint("warning: unused groups: %s" % ", ".join(unused_groups)) + +def output_insns(f, parser, insns): + lprint("/* Generated by %s r%s, do not edit */" % \ + (scriptname, scriptrev), f) + lprint("""%%ignore-case +%%language=ANSI-C +%%compare-strncmp +%%readonly-tables +%%enum +%%struct-type +%%define hash-function-name insnprefix_%s_hash +%%define lookup-function-name insnprefix_%s_find +struct insnprefix_parse_data; +%%%%""" % (parser, parser), f) + for keyword in sorted(insns): + lprint("%s,\t%s" % (keyword.lower(), insns[keyword]), f) + +def output_gas_insns(f): + output_insns(f, "gas", gas_insns) + +def output_nasm_insns(f): + output_insns(f, "nasm", nasm_insns) + +def output_groups(f): + # Merge all operand lists into single list + # Sort by number of operands to shorten output + all_operands = [] + if version_info[0] == 2: + gi = groups.itervalues() + else: + gi = groups.values() + for form in sorted((form for g in gi for form in g), + key=lambda x:len(x.operands), reverse=True): + num_operands = len(form.operands) + for i in range(len(all_operands)): + if all_operands[i:i+num_operands] == form.operands: + form.all_operands_index = i + break + else: + form.all_operands_index = len(all_operands) + all_operands.extend(form.operands) + + # Output operands list + lprint("/* Generated by %s r%s, do not edit */" % \ + (scriptname, scriptrev), f) + lprint("static const x86_info_operand insn_operands[] = {", f) + lprint(" ", f, '') + lprint(",\n ".join(str(x) for x in all_operands), f) + lprint("};\n", f) + + # Output groups + seen = set() + for name in groupnames_ordered: + if name in seen: + continue + seen.add(name) + lprint("static const x86_insn_info %s_insn[] = {" % name, f) + lprint(" ", f, '') + lprint(",\n ".join(str(x) for x in groups[name]), f) + lprint("};\n", f) + +##################################################################### +# General instruction groupings +##################################################################### + +# +# Empty instruction +# +add_group("empty", opcode=[], operands=[]) + +# +# Placeholder for instructions invalid in 64-bit mode +# +add_group("not64", opcode=[], operands=[], not64=True) + +# +# One byte opcode instructions with no operands +# +add_group("onebyte", + modifiers=["Op0Add", "OpSizeR", "DOpS64R"], + opcode=[0x00], + operands=[]) + +# +# One byte opcode instructions with "special" prefix with no operands +# +add_group("onebyte_prefix", + modifiers=["PreAdd", "Op0Add"], + prefix=0x00, + opcode=[0x00], + operands=[]) + +# +# Two byte opcode instructions with no operands +# +add_group("twobyte", + gen_suffix=False, + suffixes=["l", "q"], + modifiers=["Op0Add", "Op1Add"], + opcode=[0x00, 0x00], + operands=[]) + +# +# Three byte opcode instructions with no operands +# +add_group("threebyte", + modifiers=["Op0Add", "Op1Add", "Op2Add"], + opcode=[0x00, 0x00, 0x00], + operands=[]) + +# +# One byte opcode instructions with general memory operand +# +add_group("onebytemem", + gen_suffix=False, + suffixes=["l", "q", "s"], + modifiers=["SpAdd", "Op0Add"], + opcode=[0x00], + spare=0, + operands=[Operand(type="Mem", dest="EA")]) + +# +# Two byte opcode instructions with general memory operand +# +add_group("twobytemem", + gen_suffix=False, + suffixes=["w", "l", "q", "s"], + modifiers=["SpAdd", "Op0Add", "Op1Add"], + opcode=[0x00, 0x00], + spare=0, + operands=[Operand(type="Mem", relaxed=True, dest="EA")]) + +# +# mov +# + +# Absolute forms for non-64-bit mode +for sfx, sz in zip("bwl", [8, 16, 32]): + add_group("mov", + suffix=sfx, + not64=True, + opersize=sz, + opcode=[0xA0+(sz!=8)], + operands=[Operand(type="Areg", size=sz, dest=None), + Operand(type="MemOffs", size=sz, relaxed=True, dest="EA")]) + +for sfx, sz in zip("bwl", [8, 16, 32]): + add_group("mov", + suffix=sfx, + not64=True, + opersize=sz, + opcode=[0xA2+(sz!=8)], + operands=[Operand(type="MemOffs", size=sz, relaxed=True, dest="EA"), + Operand(type="Areg", size=sz, dest=None)]) + +# 64-bit absolute forms for 64-bit mode. Disabled for GAS, see movabs +for sz in (8, 16, 32, 64): + add_group("mov", + opersize=sz, + opcode=[0xA0+(sz!=8)], + only64=True, + operands=[Operand(type="Areg", size=sz, dest=None), + Operand(type="MemOffs", size=sz, relaxed=True, dest="EA64")]) + +for sz in (8, 16, 32, 64): + add_group("mov", + only64=True, + opersize=sz, + opcode=[0xA2+(sz!=8)], + operands=[Operand(type="MemOffs", size=sz, relaxed=True, dest="EA64"), + Operand(type="Areg", size=sz, dest=None)]) + +# General 32-bit forms using Areg / short absolute option +for sfx, sz in zip("bwlq", [8, 16, 32, 64]): + add_group("mov", + suffix=sfx, + opersize=sz, + opcode1=[0x88+(sz!=8)], + opcode2=[0xA2+(sz!=8)], + operands=[ + Operand(type="RM", size=sz, relaxed=True, dest="EA", opt="ShortMov"), + Operand(type="Areg", size=sz, dest="Spare")]) + +# General 32-bit forms +for sfx, sz in zip("bwlq", [8, 16, 32, 64]): + add_group("mov", + suffix=sfx, + opersize=sz, + opcode=[0x88+(sz!=8)], + operands=[Operand(type="RM", size=sz, relaxed=True, dest="EA"), + Operand(type="Reg", size=sz, dest="Spare")]) + +# General 32-bit forms using Areg / short absolute option +for sfx, sz in zip("bwlq", [8, 16, 32, 64]): + add_group("mov", + suffix=sfx, + opersize=sz, + opcode1=[0x8A+(sz!=8)], + opcode2=[0xA0+(sz!=8)], + operands=[Operand(type="Areg", size=sz, dest="Spare"), + Operand(type="RM", size=sz, relaxed=True, dest="EA", + opt="ShortMov")]) + +# General 32-bit forms +for sfx, sz in zip("bwlq", [8, 16, 32, 64]): + add_group("mov", + suffix=sfx, + opersize=sz, + opcode=[0x8A+(sz!=8)], + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="RM", size=sz, relaxed=True, dest="EA")]) + +# Segment register forms +add_group("mov", + suffix="w", + opcode=[0x8C], + operands=[Operand(type="Mem", size=16, relaxed=True, dest="EA"), + Operand(type="SegReg", size=16, relaxed=True, dest="Spare")]) +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("mov", + suffix=sfx, + opersize=sz, + opcode=[0x8C], + operands=[ + Operand(type="Reg", size=sz, dest="EA"), + Operand(type="SegReg", size=16, relaxed=True, dest="Spare")]) +add_group("mov", + suffix="w", + opcode=[0x8E], + operands=[Operand(type="SegReg", size=16, relaxed=True, dest="Spare"), + Operand(type="RM", size=16, relaxed=True, dest="EA")]) +for sfx, sz in zip("lq", [32, 64]): + add_group("mov", + suffix=sfx, + opcode=[0x8E], + operands=[ + Operand(type="SegReg", size=16, relaxed=True, dest="Spare"), + Operand(type="Reg", size=sz, dest="EA")]) + +# Immediate forms +add_group("mov", + suffix="b", + opcode=[0xB0], + operands=[Operand(type="Reg", size=8, dest="Op0Add"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +for sfx, sz in zip("wl", [16, 32]): + add_group("mov", + suffix=sfx, + opersize=sz, + opcode=[0xB8], + operands=[Operand(type="Reg", size=sz, dest="Op0Add"), + Operand(type="Imm", size=sz, relaxed=True, dest="Imm")]) +# 64-bit forced size form +add_group("mov", + parsers=["nasm"], + opersize=64, + opcode=[0xB8], + operands=[Operand(type="Reg", size=64, dest="Op0Add"), + Operand(type="Imm", size=64, dest="Imm")]) +add_group("mov", + suffix="q", + opersize=64, + opcode1=[0xB8], + opcode2=[0xC7], + operands=[Operand(type="Reg", size=64, dest="Op0Add"), + Operand(type="Imm", size=64, relaxed=True, dest="Imm", + opt="SImm32Avail")]) +# Need two sets here, one for strictness on left side, one for right. +for sfx, sz, immsz in zip("bwlq", [8, 16, 32, 64], [8, 16, 32, 32]): + add_group("mov", + suffix=sfx, + opersize=sz, + opcode=[0xC6+(sz!=8)], + operands=[Operand(type="RM", size=sz, relaxed=True, dest="EA"), + Operand(type="Imm", size=immsz, dest="Imm")]) +for sfx, sz, immsz in zip("bwlq", [8, 16, 32, 64], [8, 16, 32, 32]): + add_group("mov", + suffix=sfx, + opersize=sz, + opcode=[0xC6+(sz!=8)], + operands=[Operand(type="RM", size=sz, dest="EA"), + Operand(type="Imm", size=immsz, relaxed=True, dest="Imm")]) + +# CR forms +add_group("mov", + suffix="l", + not64=True, + cpu=["Priv"], + opcode=[0x0F, 0x22], + operands=[Operand(type="CR4", size=32, dest="Spare"), + Operand(type="Reg", size=32, dest="EA")]) +add_group("mov", + suffix="l", + not64=True, + cpu=["Priv"], + opcode=[0x0F, 0x22], + operands=[Operand(type="CRReg", size=32, dest="Spare"), + Operand(type="Reg", size=32, dest="EA")]) +add_group("mov", + suffix="q", + cpu=["Priv"], + opcode=[0x0F, 0x22], + operands=[Operand(type="CRReg", size=32, dest="Spare"), + Operand(type="Reg", size=64, dest="EA")]) +add_group("mov", + suffix="l", + not64=True, + cpu=["Priv"], + opcode=[0x0F, 0x20], + operands=[Operand(type="Reg", size=32, dest="EA"), + Operand(type="CR4", size=32, dest="Spare")]) +add_group("mov", + suffix="l", + cpu=["Priv"], + not64=True, + opcode=[0x0F, 0x20], + operands=[Operand(type="Reg", size=32, dest="EA"), + Operand(type="CRReg", size=32, dest="Spare")]) +add_group("mov", + suffix="q", + cpu=["Priv"], + opcode=[0x0F, 0x20], + operands=[Operand(type="Reg", size=64, dest="EA"), + Operand(type="CRReg", size=32, dest="Spare")]) + +# DR forms +add_group("mov", + suffix="l", + not64=True, + cpu=["Priv"], + opcode=[0x0F, 0x23], + operands=[Operand(type="DRReg", size=32, dest="Spare"), + Operand(type="Reg", size=32, dest="EA")]) +add_group("mov", + suffix="q", + cpu=["Priv"], + opcode=[0x0F, 0x23], + operands=[Operand(type="DRReg", size=32, dest="Spare"), + Operand(type="Reg", size=64, dest="EA")]) +add_group("mov", + suffix="l", + not64=True, + cpu=["Priv"], + opcode=[0x0F, 0x21], + operands=[Operand(type="Reg", size=32, dest="EA"), + Operand(type="DRReg", size=32, dest="Spare")]) +add_group("mov", + suffix="q", + cpu=["Priv"], + opcode=[0x0F, 0x21], + operands=[Operand(type="Reg", size=64, dest="EA"), + Operand(type="DRReg", size=32, dest="Spare")]) + +# MMX forms for GAS parser (copied from movq) +add_group("mov", + suffix="q", + cpu=["MMX"], + parsers=["gas"], + opcode=[0x0F, 0x6F], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="SIMDRM", size=64, relaxed=True, dest="EA")]) +add_group("mov", + suffix="q", + cpu=["MMX"], + parsers=["gas"], + opersize=64, + opcode=[0x0F, 0x6E], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="RM", size=64, relaxed=True, dest="EA")]) +add_group("mov", + suffix="q", + cpu=["MMX"], + parsers=["gas"], + opcode=[0x0F, 0x7F], + operands=[Operand(type="SIMDRM", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=64, dest="Spare")]) +add_group("mov", + suffix="q", + cpu=["MMX"], + parsers=["gas"], + opersize=64, + opcode=[0x0F, 0x7E], + operands=[Operand(type="RM", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=64, dest="Spare")]) + +# SSE2 forms for GAS parser (copied from movq) +add_group("mov", + suffix="q", + cpu=["SSE2"], + parsers=["gas"], + prefix=0xF3, + opcode=[0x0F, 0x7E], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("mov", + suffix="q", + cpu=["SSE2"], + parsers=["gas"], + prefix=0xF3, + opcode=[0x0F, 0x7E], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=64, relaxed=True, dest="EA")]) +add_group("mov", + suffix="q", + cpu=["SSE2"], + parsers=["gas"], + opersize=64, + prefix=0x66, + opcode=[0x0F, 0x6E], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="RM", size=64, relaxed=True, dest="EA")]) +add_group("mov", + suffix="q", + cpu=["SSE2"], + parsers=["gas"], + prefix=0x66, + opcode=[0x0F, 0xD6], + operands=[Operand(type="SIMDRM", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare")]) +add_group("mov", + suffix="q", + cpu=["SSE2"], + parsers=["gas"], + opersize=64, + prefix=0x66, + opcode=[0x0F, 0x7E], + operands=[Operand(type="RM", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare")]) + +add_insn("mov", "mov") + +# +# 64-bit absolute move (for GAS). +# These are disabled for GAS for normal mov above. +# +add_group("movabs", + suffix="b", + only64=True, + opcode=[0xA0], + operands=[Operand(type="Areg", size=8, dest=None), + Operand(type="MemOffs", size=8, relaxed=True, dest="EA64")]) +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("movabs", + only64=True, + suffix=sfx, + opersize=sz, + opcode=[0xA1], + operands=[Operand(type="Areg", size=sz, dest=None), + Operand(type="MemOffs", size=sz, relaxed=True, + dest="EA64")]) + +add_group("movabs", + suffix="b", + only64=True, + opcode=[0xA2], + operands=[Operand(type="MemOffs", size=8, relaxed=True, dest="EA64"), + Operand(type="Areg", size=8, dest=None)]) +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("movabs", + suffix=sfx, + only64=True, + opersize=sz, + opcode=[0xA3], + operands=[Operand(type="MemOffs", size=sz, relaxed=True, + dest="EA64"), + Operand(type="Areg", size=sz, dest=None)]) + +# 64-bit immediate form +add_group("movabs", + suffix="q", + opersize=64, + opcode=[0xB8], + operands=[Operand(type="Reg", size=64, dest="Op0Add"), + Operand(type="Imm", size=64, relaxed=True, dest="Imm")]) + +add_insn("movabs", "movabs", parser="gas") + +# +# Move with sign/zero extend +# +add_group("movszx", + suffix="b", + cpu=["386"], + modifiers=["Op1Add"], + opersize=16, + opcode=[0x0F, 0x00], + operands=[Operand(type="Reg", size=16, dest="Spare"), + Operand(type="RM", size=8, relaxed=True, dest="EA")]) +add_group("movszx", + suffix="b", + cpu=["386"], + modifiers=["Op1Add"], + opersize=32, + opcode=[0x0F, 0x00], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="RM", size=8, dest="EA")]) +add_group("movszx", + suffix="b", + modifiers=["Op1Add"], + opersize=64, + opcode=[0x0F, 0x00], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="RM", size=8, dest="EA")]) +add_group("movszx", + suffix="w", + cpu=["386"], + modifiers=["Op1Add"], + opersize=32, + opcode=[0x0F, 0x01], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="RM", size=16, dest="EA")]) +add_group("movszx", + suffix="w", + modifiers=["Op1Add"], + opersize=64, + opcode=[0x0F, 0x01], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="RM", size=16, dest="EA")]) + +add_insn("movsbw", "movszx", suffix="b", modifiers=[0xBE]) +add_insn("movsbl", "movszx", suffix="b", modifiers=[0xBE]) +add_insn("movswl", "movszx", suffix="w", modifiers=[0xBE]) +add_insn("movsbq", "movszx", suffix="b", modifiers=[0xBE], only64=True) +add_insn("movswq", "movszx", suffix="w", modifiers=[0xBE], only64=True) +add_insn("movsx", "movszx", modifiers=[0xBE]) +add_insn("movzbw", "movszx", suffix="b", modifiers=[0xB6]) +add_insn("movzbl", "movszx", suffix="b", modifiers=[0xB6]) +add_insn("movzwl", "movszx", suffix="w", modifiers=[0xB6]) +add_insn("movzbq", "movszx", suffix="b", modifiers=[0xB6], only64=True) +add_insn("movzwq", "movszx", suffix="w", modifiers=[0xB6], only64=True) +add_insn("movzx", "movszx", modifiers=[0xB6]) + +# +# Move with sign-extend doubleword (64-bit mode only) +# +add_group("movsxd", + suffix="l", + opersize=64, + opcode=[0x63], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="RM", size=32, dest="EA")]) + +add_insn("movslq", "movsxd", suffix="l") +add_insn("movsxd", "movsxd", parser="nasm") + +# +# Push instructions +# +add_group("push", + def_opersize_64=64, + opcode=[0x50], + operands=[Operand(type="Reg", size="BITS", dest="Op0Add")]) +add_group("push", + suffix="w", + opersize=16, + def_opersize_64=64, + opcode=[0x50], + operands=[Operand(type="Reg", size=16, dest="Op0Add")]) +add_group("push", + suffix="l", + not64=True, + opersize=32, + opcode=[0x50], + operands=[Operand(type="Reg", size=32, dest="Op0Add")]) +add_group("push", + suffix="q", + only64=True, + def_opersize_64=64, + opcode=[0x50], + operands=[Operand(type="Reg", size=64, dest="Op0Add")]) + +add_group("push", + def_opersize_64=64, + opcode=[0xFF], + spare=6, + operands=[Operand(type="RM", size="BITS", dest="EA")]) +add_group("push", + suffix="w", + opersize=16, + def_opersize_64=64, + opcode=[0xFF], + spare=6, + operands=[Operand(type="RM", size=16, dest="EA")]) +add_group("push", + suffix="l", + not64=True, + opersize=32, + opcode=[0xFF], + spare=6, + operands=[Operand(type="RM", size=32, dest="EA")]) +add_group("push", + suffix="q", + only64=True, + def_opersize_64=64, + opcode=[0xFF], + spare=6, + operands=[Operand(type="RM", size=64, dest="EA")]) + +add_group("push", + cpu=["186"], + parsers=["nasm"], + def_opersize_64=64, + opcode=[0x6A], + operands=[Operand(type="Imm", size=8, dest="SImm")]) +add_group("push", + cpu=["186"], + parsers=["gas"], + def_opersize_64=64, + opcode=[0x6A], + operands=[Operand(type="Imm", size=8, relaxed=True, dest="SImm")]) +add_group("push", + suffix="q", + only64=True, + opersize=64, + def_opersize_64=64, + opcode1=[0x6A], + opcode2=[0x68], + operands=[Operand(type="Imm", size=32, relaxed=True, dest="SImm", + opt="SImm8")]) +add_group("push", + not64=True, + cpu=["186"], + parsers=["nasm"], + opcode1=[0x6A], + opcode2=[0x68], + operands=[Operand(type="Imm", size="BITS", relaxed=True, dest="Imm", + opt="SImm8")]) +add_group("push", + suffix="w", + cpu=["186"], + opersize=16, + def_opersize_64=64, + opcode1=[0x6A], + opcode2=[0x68], + operands=[Operand(type="Imm", size=16, relaxed=True, dest="Imm", + opt="SImm8")]) +add_group("push", + suffix="l", + not64=True, + opersize=32, + opcode1=[0x6A], + opcode2=[0x68], + operands=[Operand(type="Imm", size=32, relaxed=True, dest="Imm", + opt="SImm8")]) +# Need these when we don't match the BITS size, but they need to be +# below the above line so the optimizer can kick in by default. +add_group("push", + cpu=["186"], + parsers=["nasm"], + opersize=16, + def_opersize_64=64, + opcode=[0x68], + operands=[Operand(type="Imm", size=16, dest="Imm")]) +add_group("push", + not64=True, + parsers=["nasm"], + opersize=32, + opcode=[0x68], + operands=[Operand(type="Imm", size=32, dest="Imm")]) +add_group("push", + only64=True, + parsers=["nasm"], + opersize=64, + def_opersize_64=64, + opcode=[0x68], + operands=[Operand(type="Imm", size=32, dest="SImm")]) +add_group("push", + not64=True, + opcode=[0x0E], + operands=[Operand(type="CS", dest=None)]) +add_group("push", + suffix="w", + not64=True, + opersize=16, + opcode=[0x0E], + operands=[Operand(type="CS", size=16, dest=None)]) +add_group("push", + suffix="l", + not64=True, + opersize=32, + opcode=[0x0E], + operands=[Operand(type="CS", size=32, dest=None)]) +add_group("push", + not64=True, + opcode=[0x16], + operands=[Operand(type="SS", dest=None)]) +add_group("push", + suffix="w", + not64=True, + opersize=16, + opcode=[0x16], + operands=[Operand(type="SS", size=16, dest=None)]) +add_group("push", + suffix="l", + not64=True, + opersize=32, + opcode=[0x16], + operands=[Operand(type="SS", size=32, dest=None)]) +add_group("push", + not64=True, + opcode=[0x1E], + operands=[Operand(type="DS", dest=None)]) +add_group("push", + suffix="w", + not64=True, + opersize=16, + opcode=[0x1E], + operands=[Operand(type="DS", size=16, dest=None)]) +add_group("push", + suffix="l", + not64=True, + opersize=32, + opcode=[0x1E], + operands=[Operand(type="DS", size=32, dest=None)]) +add_group("push", + not64=True, + opcode=[0x06], + operands=[Operand(type="ES", dest=None)]) +add_group("push", + suffix="w", + not64=True, + opersize=16, + opcode=[0x06], + operands=[Operand(type="ES", size=16, dest=None)]) +add_group("push", + suffix="l", + not64=True, + opersize=32, + opcode=[0x06], + operands=[Operand(type="ES", size=32, dest=None)]) +add_group("push", + opcode=[0x0F, 0xA0], + operands=[Operand(type="FS", dest=None)]) +add_group("push", + suffix="w", + opersize=16, + opcode=[0x0F, 0xA0], + operands=[Operand(type="FS", size=16, dest=None)]) +add_group("push", + suffix="l", + opersize=32, + opcode=[0x0F, 0xA0], + operands=[Operand(type="FS", size=32, dest=None)]) +add_group("push", + opcode=[0x0F, 0xA8], + operands=[Operand(type="GS", dest=None)]) +add_group("push", + suffix="w", + opersize=16, + opcode=[0x0F, 0xA8], + operands=[Operand(type="GS", size=16, dest=None)]) +add_group("push", + suffix="l", + opersize=32, + opcode=[0x0F, 0xA8], + operands=[Operand(type="GS", size=32, dest=None)]) + +add_insn("push", "push") +add_insn("pusha", "onebyte", modifiers=[0x60, 0], cpu=["186"], not64=True) +add_insn("pushad", "onebyte", parser="nasm", modifiers=[0x60, 32], + cpu=["386"], not64=True) +add_insn("pushal", "onebyte", parser="gas", modifiers=[0x60, 32], + cpu=["386"], not64=True) +add_insn("pushaw", "onebyte", modifiers=[0x60, 16], cpu=["186"], not64=True) + +# +# Pop instructions +# +add_group("pop", + def_opersize_64=64, + opcode=[0x58], + operands=[Operand(type="Reg", size="BITS", dest="Op0Add")]) +add_group("pop", + suffix="w", + opersize=16, + def_opersize_64=64, + opcode=[0x58], + operands=[Operand(type="Reg", size=16, dest="Op0Add")]) +add_group("pop", + suffix="l", + not64=True, + opersize=32, + opcode=[0x58], + operands=[Operand(type="Reg", size=32, dest="Op0Add")]) +add_group("pop", + suffix="q", + only64=True, + def_opersize_64=64, + opcode=[0x58], + operands=[Operand(type="Reg", size=64, dest="Op0Add")]) + +add_group("pop", + def_opersize_64=64, + opcode=[0x8F], + operands=[Operand(type="RM", size="BITS", dest="EA")]) +add_group("pop", + suffix="w", + opersize=16, + def_opersize_64=64, + opcode=[0x8F], + operands=[Operand(type="RM", size=16, dest="EA")]) +add_group("pop", + suffix="l", + not64=True, + opersize=32, + opcode=[0x8F], + operands=[Operand(type="RM", size=32, dest="EA")]) +add_group("pop", + suffix="q", + only64=True, + def_opersize_64=64, + opcode=[0x8F], + operands=[Operand(type="RM", size=64, dest="EA")]) + +# POP CS is debateably valid on the 8086, if obsolete and undocumented. +# We don't include it because it's VERY unlikely it will ever be used +# anywhere. If someone really wants it they can db 0x0F it. +#add_group("pop", +# cpu=["Undoc", "Obs"], +# opcode=[0x0F], +# operands=[Operand(type="CS", dest=None)]) +add_group("pop", + not64=True, + opcode=[0x17], + operands=[Operand(type="SS", dest=None)]) +add_group("pop", + not64=True, + opersize=16, + opcode=[0x17], + operands=[Operand(type="SS", size=16, dest=None)]) +add_group("pop", + not64=True, + opersize=32, + opcode=[0x17], + operands=[Operand(type="SS", size=32, dest=None)]) +add_group("pop", + not64=True, + opcode=[0x1F], + operands=[Operand(type="DS", dest=None)]) +add_group("pop", + not64=True, + opersize=16, + opcode=[0x1F], + operands=[Operand(type="DS", size=16, dest=None)]) +add_group("pop", + not64=True, + opersize=32, + opcode=[0x1F], + operands=[Operand(type="DS", size=32, dest=None)]) +add_group("pop", + not64=True, + opcode=[0x07], + operands=[Operand(type="ES", dest=None)]) +add_group("pop", + not64=True, + opersize=16, + opcode=[0x07], + operands=[Operand(type="ES", size=16, dest=None)]) +add_group("pop", + not64=True, + opersize=32, + opcode=[0x07], + operands=[Operand(type="ES", size=32, dest=None)]) +add_group("pop", + opcode=[0x0F, 0xA1], + operands=[Operand(type="FS", dest=None)]) +add_group("pop", + opersize=16, + opcode=[0x0F, 0xA1], + operands=[Operand(type="FS", size=16, dest=None)]) +add_group("pop", + opersize=32, + opcode=[0x0F, 0xA1], + operands=[Operand(type="FS", size=32, dest=None)]) +add_group("pop", + opcode=[0x0F, 0xA9], + operands=[Operand(type="GS", dest=None)]) +add_group("pop", + opersize=16, + opcode=[0x0F, 0xA9], + operands=[Operand(type="GS", size=16, dest=None)]) +add_group("pop", + opersize=32, + opcode=[0x0F, 0xA9], + operands=[Operand(type="GS", size=32, dest=None)]) + +add_insn("pop", "pop") +add_insn("popa", "onebyte", modifiers=[0x61, 0], cpu=["186"], not64=True) +add_insn("popad", "onebyte", parser="nasm", modifiers=[0x61, 32], + cpu=["386"], not64=True) +add_insn("popal", "onebyte", parser="gas", modifiers=[0x61, 32], + cpu=["386"], not64=True) +add_insn("popaw", "onebyte", modifiers=[0x61, 16], cpu=["186"], not64=True) + +# +# Exchange instructions +# +add_group("xchg", + suffix="b", + opcode=[0x86], + operands=[Operand(type="RM", size=8, relaxed=True, dest="EA"), + Operand(type="Reg", size=8, dest="Spare")]) +add_group("xchg", + suffix="b", + opcode=[0x86], + operands=[Operand(type="Reg", size=8, dest="Spare"), + Operand(type="RM", size=8, relaxed=True, dest="EA")]) +# We could be extra-efficient in the 64-bit mode case here. +# XCHG AX, AX in 64-bit mode is a NOP, as it doesn't clear the +# high 48 bits of RAX. Thus we don't need the operand-size prefix. +# But this feels too clever, and probably not what the user really +# expects in the generated code, so we don't do it. +#add_group("xchg", +# suffix="w", +# only64=True, +# opcode=[0x90], +# operands=[Operand(type="Areg", size=16, dest=None), +# Operand(type="AReg", size=16, dest="Op0Add")]) +add_group("xchg", + suffix="w", + opersize=16, + opcode=[0x90], + operands=[Operand(type="Areg", size=16, dest=None), + Operand(type="Reg", size=16, dest="Op0Add")]) +add_group("xchg", + suffix="w", + opersize=16, + opcode=[0x90], + operands=[Operand(type="Reg", size=16, dest="Op0Add"), + Operand(type="Areg", size=16, dest=None)]) +add_group("xchg", + suffix="w", + opersize=16, + opcode=[0x87], + operands=[Operand(type="RM", size=16, relaxed=True, dest="EA"), + Operand(type="Reg", size=16, dest="Spare")]) +add_group("xchg", + suffix="w", + opersize=16, + opcode=[0x87], + operands=[Operand(type="Reg", size=16, dest="Spare"), + Operand(type="RM", size=16, relaxed=True, dest="EA")]) +# Be careful with XCHG EAX, EAX in 64-bit mode. This needs to use +# the long form rather than the NOP form, as the long form clears +# the high 32 bits of RAX. This makes all 32-bit forms in 64-bit +# mode have consistent operation. +# +# FIXME: due to a hard-to-fix bug in how we handle generating gas suffix CPU +# rules, this causes xchgl to be CPU_Any instead of CPU_386. A hacky patch +# could fix it, but it's doubtful anyone will ever notice, so leave it. +add_group("xchg", + suffix="l", + only64=True, + opersize=32, + opcode=[0x87], + operands=[Operand(type="Areg", size=32, dest="EA"), + Operand(type="Areg", size=32, dest="Spare")]) +add_group("xchg", + suffix="l", + opersize=32, + opcode=[0x90], + operands=[Operand(type="Areg", size=32, dest=None), + Operand(type="Reg", size=32, dest="Op0Add")]) +add_group("xchg", + suffix="l", + opersize=32, + opcode=[0x90], + operands=[Operand(type="Reg", size=32, dest="Op0Add"), + Operand(type="Areg", size=32, dest=None)]) +add_group("xchg", + suffix="l", + opersize=32, + opcode=[0x87], + operands=[Operand(type="RM", size=32, relaxed=True, dest="EA"), + Operand(type="Reg", size=32, dest="Spare")]) +add_group("xchg", + suffix="l", + opersize=32, + opcode=[0x87], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="RM", size=32, relaxed=True, dest="EA")]) +# Be efficient with XCHG RAX, RAX. +# This is a NOP and thus doesn't need the REX prefix. +add_group("xchg", + suffix="q", + only64=True, + opcode=[0x90], + operands=[Operand(type="Areg", size=64, dest=None), + Operand(type="Areg", size=64, dest="Op0Add")]) +add_group("xchg", + suffix="q", + opersize=64, + opcode=[0x90], + operands=[Operand(type="Areg", size=64, dest=None), + Operand(type="Reg", size=64, dest="Op0Add")]) +add_group("xchg", + suffix="q", + opersize=64, + opcode=[0x90], + operands=[Operand(type="Reg", size=64, dest="Op0Add"), + Operand(type="Areg", size=64, dest=None)]) +add_group("xchg", + suffix="q", + opersize=64, + opcode=[0x87], + operands=[Operand(type="RM", size=64, relaxed=True, dest="EA"), + Operand(type="Reg", size=64, dest="Spare")]) +add_group("xchg", + suffix="q", + opersize=64, + opcode=[0x87], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="RM", size=64, relaxed=True, dest="EA")]) + +add_insn("xchg", "xchg") + +##################################################################### +# In/out from ports +##################################################################### +add_group("in", + suffix="b", + opcode=[0xE4], + operands=[Operand(type="Areg", size=8, dest=None), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +for sfx, sz in zip("wl", [16, 32]): + add_group("in", + suffix=sfx, + opersize=sz, + opcode=[0xE5], + operands=[Operand(type="Areg", size=sz, dest=None), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("in", + suffix="b", + opcode=[0xEC], + operands=[Operand(type="Areg", size=8, dest=None), + Operand(type="Dreg", size=16, dest=None)]) +for sfx, sz in zip("wl", [16, 32]): + add_group("in", + suffix=sfx, + opersize=sz, + opcode=[0xED], + operands=[Operand(type="Areg", size=sz, dest=None), + Operand(type="Dreg", size=16, dest=None)]) +# GAS-only variants (implicit accumulator register) +add_group("in", + suffix="b", + parsers=["gas"], + opcode=[0xE4], + operands=[Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +for sfx, sz in zip("wl", [16, 32]): + add_group("in", + suffix=sfx, + parsers=["gas"], + opersize=sz, + opcode=[0xE5], + operands=[Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("in", + suffix="b", + parsers=["gas"], + opcode=[0xEC], + operands=[Operand(type="Dreg", size=16, dest=None)]) +add_group("in", + suffix="w", + parsers=["gas"], + opersize=16, + opcode=[0xED], + operands=[Operand(type="Dreg", size=16, dest=None)]) +add_group("in", + suffix="l", + cpu=["386"], + parsers=["gas"], + opersize=32, + opcode=[0xED], + operands=[Operand(type="Dreg", size=16, dest=None)]) + +add_insn("in", "in") + +add_group("out", + suffix="b", + opcode=[0xE6], + operands=[Operand(type="Imm", size=8, relaxed=True, dest="Imm"), + Operand(type="Areg", size=8, dest=None)]) +for sfx, sz in zip("wl", [16, 32]): + add_group("out", + suffix=sfx, + opersize=sz, + opcode=[0xE7], + operands=[Operand(type="Imm", size=8, relaxed=True, dest="Imm"), + Operand(type="Areg", size=sz, dest=None)]) +add_group("out", + suffix="b", + opcode=[0xEE], + operands=[Operand(type="Dreg", size=16, dest=None), + Operand(type="Areg", size=8, dest=None)]) +for sfx, sz in zip("wl", [16, 32]): + add_group("out", + suffix=sfx, + opersize=sz, + opcode=[0xEF], + operands=[Operand(type="Dreg", size=16, dest=None), + Operand(type="Areg", size=sz, dest=None)]) +# GAS-only variants (implicit accumulator register) +add_group("out", + suffix="b", + parsers=["gas"], + opcode=[0xE6], + operands=[Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("out", + suffix="w", + parsers=["gas"], + opersize=16, + opcode=[0xE7], + operands=[Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("out", + suffix="l", + cpu=["386"], + parsers=["gas"], + opersize=32, + opcode=[0xE7], + operands=[Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("out", + suffix="b", + parsers=["gas"], + opcode=[0xEE], + operands=[Operand(type="Dreg", size=16, dest=None)]) +add_group("out", + suffix="w", + parsers=["gas"], + opersize=16, + opcode=[0xEF], + operands=[Operand(type="Dreg", size=16, dest=None)]) +add_group("out", + suffix="l", + cpu=["386"], + parsers=["gas"], + opersize=32, + opcode=[0xEF], + operands=[Operand(type="Dreg", size=16, dest=None)]) + +add_insn("out", "out") + +# +# Load effective address +# +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("lea", + suffix=sfx, + opersize=sz, + opcode=[0x8D], + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="Mem", relaxed=True, dest="EA")]) + +add_insn("lea", "lea") + +# +# Load segment registers from memory +# +for sfx, sz in zip("wl", [16, 32]): + add_group("ldes", + suffix=sfx, + not64=True, + modifiers=["Op0Add"], + opersize=sz, + opcode=[0x00], + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="Mem", relaxed=True, dest="EA")]) + +add_insn("lds", "ldes", modifiers=[0xC5]) +add_insn("les", "ldes", modifiers=[0xC4]) + +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("lfgss", + suffix=sfx, + cpu=["386"], + modifiers=["Op1Add"], + opersize=sz, + opcode=[0x0F, 0x00], + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="Mem", relaxed=True, dest="EA")]) + +add_insn("lfs", "lfgss", modifiers=[0xB4]) +add_insn("lgs", "lfgss", modifiers=[0xB5]) +add_insn("lss", "lfgss", modifiers=[0xB2]) + +# +# Flags registers instructions +# +add_insn("clc", "onebyte", modifiers=[0xF8]) +add_insn("cld", "onebyte", modifiers=[0xFC]) +add_insn("cli", "onebyte", modifiers=[0xFA]) +add_insn("clts", "twobyte", modifiers=[0x0F, 0x06], cpu=["286", "Priv"]) +add_insn("cmc", "onebyte", modifiers=[0xF5]) +add_insn("lahf", "onebyte", modifiers=[0x9F]) +add_insn("sahf", "onebyte", modifiers=[0x9E]) +add_insn("pushf", "onebyte", modifiers=[0x9C, 0, 64]) +add_insn("pushfd", "onebyte", parser="nasm", modifiers=[0x9C, 32], + cpu=["386"], not64=True) +add_insn("pushfl", "onebyte", parser="gas", modifiers=[0x9C, 32], + cpu=["386"], not64=True) +add_insn("pushfw", "onebyte", modifiers=[0x9C, 16, 64]) +add_insn("pushfq", "onebyte", modifiers=[0x9C, 64, 64], only64=True) +add_insn("popf", "onebyte", modifiers=[0x9D, 0, 64]) +add_insn("popfd", "onebyte", parser="nasm", modifiers=[0x9D, 32], + cpu=["386"], not64=True) +add_insn("popfl", "onebyte", parser="gas", modifiers=[0x9D, 32], + cpu=["386"], not64=True) +add_insn("popfw", "onebyte", modifiers=[0x9D, 16, 64]) +add_insn("popfq", "onebyte", modifiers=[0x9D, 64, 64], only64=True) +add_insn("stc", "onebyte", modifiers=[0xF9]) +add_insn("std", "onebyte", modifiers=[0xFD]) +add_insn("sti", "onebyte", modifiers=[0xFB]) + +# +# Arithmetic - general +# +add_group("arith", + suffix="b", + modifiers=["Op0Add"], + opcode=[0x04], + operands=[Operand(type="Areg", size=8, dest=None), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +for sfx, sz, immsz in zip("wlq", [16, 32, 64], [16, 32, 32]): + add_group("arith", + suffix=sfx, + modifiers=["Op2Add", "Op1AddSp"], + opersize=sz, + opcode1=[0x83, 0xC0], + opcode2=[0x05], + operands=[Operand(type="Areg", size=sz, dest=None), + Operand(type="Imm", size=immsz, relaxed=True, dest="Imm", + opt="SImm8")]) + +add_group("arith", + suffix="b", + modifiers=["Gap", "SpAdd"], + opcode=[0x80], + spare=0, + operands=[Operand(type="RM", size=8, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("arith", + suffix="b", + modifiers=["Gap", "SpAdd"], + opcode=[0x80], + spare=0, + operands=[Operand(type="RM", size=8, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, dest="Imm")]) + +add_group("arith", + suffix="w", + modifiers=["Gap", "SpAdd"], + opersize=16, + opcode=[0x83], + spare=0, + operands=[Operand(type="RM", size=16, dest="EA"), + Operand(type="Imm", size=8, dest="SImm")]) +add_group("arith", + parsers=["nasm"], + modifiers=["Gap", "SpAdd"], + opersize=16, + opcode1=[0x83], + opcode2=[0x81], + spare=0, + operands=[Operand(type="RM", size=16, relaxed=True, dest="EA"), + Operand(type="Imm", size=16, dest="Imm", opt="SImm8")]) +add_group("arith", + suffix="w", + modifiers=["Gap", "SpAdd"], + opersize=16, + opcode1=[0x83], + opcode2=[0x81], + spare=0, + operands=[ + Operand(type="RM", size=16, dest="EA"), + Operand(type="Imm", size=16, relaxed=True, dest="Imm", opt="SImm8")]) + +add_group("arith", + suffix="l", + modifiers=["Gap", "SpAdd"], + opersize=32, + opcode=[0x83], + spare=0, + operands=[Operand(type="RM", size=32, dest="EA"), + Operand(type="Imm", size=8, dest="SImm")]) +# Not64 because we can't tell if add [], dword in 64-bit mode is supposed +# to be a qword destination or a dword destination. +add_group("arith", + not64=True, + parsers=["nasm"], + modifiers=["Gap", "SpAdd"], + opersize=32, + opcode1=[0x83], + opcode2=[0x81], + spare=0, + operands=[Operand(type="RM", size=32, relaxed=True, dest="EA"), + Operand(type="Imm", size=32, dest="Imm", opt="SImm8")]) +add_group("arith", + suffix="l", + modifiers=["Gap", "SpAdd"], + opersize=32, + opcode1=[0x83], + opcode2=[0x81], + spare=0, + operands=[ + Operand(type="RM", size=32, dest="EA"), + Operand(type="Imm", size=32, relaxed=True, dest="Imm", opt="SImm8")]) + +# No relaxed-RM mode for 64-bit destinations; see above Not64 comment. +add_group("arith", + suffix="q", + modifiers=["Gap", "SpAdd"], + opersize=64, + opcode=[0x83], + spare=0, + operands=[Operand(type="RM", size=64, dest="EA"), + Operand(type="Imm", size=8, dest="SImm")]) +add_group("arith", + suffix="q", + modifiers=["Gap", "SpAdd"], + opersize=64, + opcode1=[0x83], + opcode2=[0x81], + spare=0, + operands=[ + Operand(type="RM", size=64, dest="EA"), + Operand(type="Imm", size=32, relaxed=True, dest="Imm", opt="SImm8")]) + +for sfx, sz in zip("bwlq", [8, 16, 32, 64]): + add_group("arith", + suffix=sfx, + modifiers=["Op0Add"], + opersize=sz, + opcode=[0x00+(sz!=8)], + operands=[Operand(type="RM", size=sz, relaxed=True, dest="EA"), + Operand(type="Reg", size=sz, dest="Spare")]) +for sfx, sz in zip("bwlq", [8, 16, 32, 64]): + add_group("arith", + suffix=sfx, + modifiers=["Op0Add"], + opersize=sz, + opcode=[0x02+(sz!=8)], + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="RM", size=sz, relaxed=True, dest="EA")]) + +add_insn("add", "arith", modifiers=[0x00, 0]) +add_insn("or", "arith", modifiers=[0x08, 1]) +add_insn("adc", "arith", modifiers=[0x10, 2]) +add_insn("sbb", "arith", modifiers=[0x18, 3]) +add_insn("and", "arith", modifiers=[0x20, 4]) +add_insn("sub", "arith", modifiers=[0x28, 5]) +add_insn("xor", "arith", modifiers=[0x30, 6]) +add_insn("cmp", "arith", modifiers=[0x38, 7]) + +# +# Arithmetic - inc/dec +# +add_group("incdec", + suffix="b", + modifiers=["Gap", "SpAdd"], + opcode=[0xFE], + spare=0, + operands=[Operand(type="RM", size=8, dest="EA")]) +for sfx, sz in zip("wl", [16, 32]): + add_group("incdec", + suffix=sfx, + not64=True, + modifiers=["Op0Add"], + opersize=sz, + opcode=[0x00], + operands=[Operand(type="Reg", size=sz, dest="Op0Add")]) + add_group("incdec", + suffix=sfx, + modifiers=["Gap", "SpAdd"], + opersize=sz, + opcode=[0xFF], + spare=0, + operands=[Operand(type="RM", size=sz, dest="EA")]) +add_group("incdec", + suffix="q", + modifiers=["Gap", "SpAdd"], + opersize=64, + opcode=[0xFF], + spare=0, + operands=[Operand(type="RM", size=64, dest="EA")]) + +add_insn("inc", "incdec", modifiers=[0x40, 0]) +add_insn("dec", "incdec", modifiers=[0x48, 1]) + +# +# Arithmetic - mul/neg/not F6 opcodes +# +for sfx, sz in zip("bwlq", [8, 16, 32, 64]): + add_group("f6", + suffix=sfx, + modifiers=["SpAdd"], + opersize=sz, + opcode=[0xF6+(sz!=8)], + spare=0, + operands=[Operand(type="RM", size=sz, dest="EA")]) + +add_insn("not", "f6", modifiers=[2]) +add_insn("neg", "f6", modifiers=[3]) +add_insn("mul", "f6", modifiers=[4]) + +# +# Arithmetic - div/idiv F6 opcodes +# These allow explicit accumulator in GAS mode. +# +for sfx, sz in zip("bwlq", [8, 16, 32, 64]): + add_group("div", + suffix=sfx, + modifiers=["SpAdd"], + opersize=sz, + opcode=[0xF6+(sz!=8)], + spare=0, + operands=[Operand(type="RM", size=sz, dest="EA")]) +# Versions with explicit accumulator +for sfx, sz in zip("bwlq", [8, 16, 32, 64]): + add_group("div", + suffix=sfx, + modifiers=["SpAdd"], + opersize=sz, + opcode=[0xF6+(sz!=8)], + spare=0, + operands=[Operand(type="Areg", size=sz, dest=None), + Operand(type="RM", size=sz, dest="EA")]) + +add_insn("div", "div", modifiers=[6]) +add_insn("idiv", "div", modifiers=[7]) + +# +# Arithmetic - test instruction +# +for sfx, sz, immsz in zip("bwlq", [8, 16, 32, 64], [8, 16, 32, 32]): + add_group("test", + suffix=sfx, + opersize=sz, + opcode=[0xA8+(sz!=8)], + operands=[Operand(type="Areg", size=sz, dest=None), + Operand(type="Imm", size=immsz, relaxed=True, dest="Imm")]) + +for sfx, sz, immsz in zip("bwlq", [8, 16, 32, 64], [8, 16, 32, 32]): + add_group("test", + suffix=sfx, + opersize=sz, + opcode=[0xF6+(sz!=8)], + operands=[Operand(type="RM", size=sz, dest="EA"), + Operand(type="Imm", size=immsz, relaxed=True, dest="Imm")]) + add_group("test", + suffix=sfx, + opersize=sz, + opcode=[0xF6+(sz!=8)], + operands=[Operand(type="RM", size=sz, relaxed=True, dest="EA"), + Operand(type="Imm", size=immsz, dest="Imm")]) + +for sfx, sz in zip("bwlq", [8, 16, 32, 64]): + add_group("test", + suffix=sfx, + opersize=sz, + opcode=[0x84+(sz!=8)], + operands=[Operand(type="RM", size=sz, relaxed=True, dest="EA"), + Operand(type="Reg", size=sz, dest="Spare")]) +for sfx, sz in zip("bwlq", [8, 16, 32, 64]): + add_group("test", + suffix=sfx, + opersize=sz, + opcode=[0x84+(sz!=8)], + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="RM", size=sz, relaxed=True, dest="EA")]) + +add_insn("test", "test") + +# +# Arithmetic - aad/aam +# +add_group("aadm", + modifiers=["Op0Add"], + opcode=[0xD4, 0x0A], + operands=[]) +add_group("aadm", + modifiers=["Op0Add"], + opcode=[0xD4], + operands=[Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("aaa", "onebyte", modifiers=[0x37], not64=True) +add_insn("aas", "onebyte", modifiers=[0x3F], not64=True) +add_insn("daa", "onebyte", modifiers=[0x27], not64=True) +add_insn("das", "onebyte", modifiers=[0x2F], not64=True) +add_insn("aad", "aadm", modifiers=[0x01], not64=True) +add_insn("aam", "aadm", modifiers=[0x00], not64=True) + +# +# Conversion instructions +# +add_insn("cbw", "onebyte", modifiers=[0x98, 16]) +add_insn("cwde", "onebyte", modifiers=[0x98, 32], cpu=["386"]) +add_insn("cdqe", "onebyte", modifiers=[0x98, 64], only64=True) +add_insn("cwd", "onebyte", modifiers=[0x99, 16]) +add_insn("cdq", "onebyte", modifiers=[0x99, 32], cpu=["386"]) +add_insn("cqo", "onebyte", modifiers=[0x99, 64], only64=True) + +# +# Conversion instructions - GAS / AT&T naming +# +add_insn("cbtw", "onebyte", parser="gas", modifiers=[0x98, 16]) +add_insn("cwtl", "onebyte", parser="gas", modifiers=[0x98, 32], cpu=["386"]) +add_insn("cltq", "onebyte", parser="gas", modifiers=[0x98, 64], only64=True) +add_insn("cwtd", "onebyte", parser="gas", modifiers=[0x99, 16]) +add_insn("cltd", "onebyte", parser="gas", modifiers=[0x99, 32], cpu=["386"]) +add_insn("cqto", "onebyte", parser="gas", modifiers=[0x99, 64], only64=True) + +# +# Arithmetic - imul +# +for sfx, sz in zip("bwlq", [8, 16, 32, 64]): + add_group("imul", + suffix=sfx, + opersize=sz, + opcode=[0xF6+(sz!=8)], + spare=5, + operands=[Operand(type="RM", size=sz, dest="EA")]) +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("imul", + suffix=sfx, + cpu=["386"], + opersize=sz, + opcode=[0x0F, 0xAF], + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="RM", size=sz, relaxed=True, dest="EA")]) +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("imul", + suffix=sfx, + cpu=["186"], + opersize=sz, + opcode=[0x6B], + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="RM", size=sz, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, dest="SImm")]) +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("imul", + suffix=sfx, + cpu=["186"], + opersize=sz, + opcode=[0x6B], + operands=[Operand(type="Reg", size=sz, dest="SpareEA"), + Operand(type="Imm", size=8, dest="SImm")]) +for sfx, sz, immsz in zip("wlq", [16, 32, 64], [16, 32, 32]): + add_group("imul", + suffix=sfx, + cpu=["186"], + opersize=sz, + opcode1=[0x6B], + opcode2=[0x69], + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="RM", size=sz, relaxed=True, dest="EA"), + Operand(type="Imm", size=immsz, relaxed=True, dest="SImm", + opt="SImm8")]) +for sfx, sz, immsz in zip("wlq", [16, 32, 64], [16, 32, 32]): + add_group("imul", + suffix=sfx, + cpu=["186"], + opersize=sz, + opcode1=[0x6B], + opcode2=[0x69], + operands=[Operand(type="Reg", size=sz, dest="SpareEA"), + Operand(type="Imm", size=immsz, relaxed=True, dest="SImm", + opt="SImm8")]) + +add_insn("imul", "imul") + +# +# Shifts - standard +# +for sfx, sz in zip("bwlq", [8, 16, 32, 64]): + add_group("shift", + suffix=sfx, + modifiers=["SpAdd"], + opersize=sz, + opcode=[0xD2+(sz!=8)], + spare=0, + operands=[Operand(type="RM", size=sz, dest="EA"), + Operand(type="Creg", size=8, dest=None)]) + add_group("shift", + suffix=sfx, + modifiers=["SpAdd"], + opersize=sz, + opcode=[0xD0+(sz!=8)], + spare=0, + operands=[Operand(type="RM", size=sz, dest="EA"), + Operand(type="Imm1", size=8, relaxed=True, dest=None)]) + add_group("shift", + suffix=sfx, + cpu=["186"], + modifiers=["SpAdd"], + opersize=sz, + opcode=[0xC0+(sz!=8)], + spare=0, + operands=[Operand(type="RM", size=sz, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +# In GAS mode, single operands are equivalent to shifting by 1 forms +for sfx, sz in zip("bwlq", [8, 16, 32, 64]): + add_group("shift", + suffix=sfx, + parsers=["gas"], + modifiers=["SpAdd"], + opersize=sz, + opcode=[0xD0+(sz!=8)], + spare=0, + operands=[Operand(type="RM", size=sz, dest="EA")]) + +add_insn("rol", "shift", modifiers=[0]) +add_insn("ror", "shift", modifiers=[1]) +add_insn("rcl", "shift", modifiers=[2]) +add_insn("rcr", "shift", modifiers=[3]) +add_insn("sal", "shift", modifiers=[4]) +add_insn("shl", "shift", modifiers=[4]) +add_insn("shr", "shift", modifiers=[5]) +add_insn("sar", "shift", modifiers=[7]) + +# +# Shifts - doubleword +# +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("shlrd", + suffix=sfx, + cpu=["386"], + modifiers=["Op1Add"], + opersize=sz, + opcode=[0x0F, 0x00], + operands=[Operand(type="RM", size=sz, relaxed=True, dest="EA"), + Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + add_group("shlrd", + suffix=sfx, + cpu=["386"], + modifiers=["Op1Add"], + opersize=sz, + opcode=[0x0F, 0x01], + operands=[Operand(type="RM", size=sz, relaxed=True, dest="EA"), + Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="Creg", size=8, dest=None)]) +# GAS parser supports two-operand form for shift with CL count +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("shlrd", + suffix=sfx, + cpu=["386"], + parsers=["gas"], + modifiers=["Op1Add"], + opersize=sz, + opcode=[0x0F, 0x01], + operands=[Operand(type="RM", size=sz, relaxed=True, dest="EA"), + Operand(type="Reg", size=sz, dest="Spare")]) + +add_insn("shld", "shlrd", modifiers=[0xA4]) +add_insn("shrd", "shlrd", modifiers=[0xAC]) + +##################################################################### +# Control transfer instructions (unconditional) +##################################################################### +# +# call +# +add_group("call", + opcode=[], + operands=[Operand(type="ImmNotSegOff", dest="JmpRel")]) +add_group("call", + suffix="w", + opersize=16, + opcode=[], + operands=[Operand(type="ImmNotSegOff", size=16, dest="JmpRel")]) +add_group("call", + suffix="l", + not64=True, + opersize=32, + opcode=[], + operands=[Operand(type="ImmNotSegOff", size=32, dest="JmpRel")]) +add_group("call", + suffixes=["l", "q"], + only64=True, + opersize=64, + opcode=[], + operands=[Operand(type="ImmNotSegOff", size=32, dest="JmpRel")]) + +add_group("call", + opersize=16, + not64=True, #there should not be 16bit call in 64bit mode + opcode=[0xE8], + operands=[Operand(type="Imm", size=16, tmod="Near", dest="JmpRel")]) +add_group("call", + not64=True, + opersize=32, + opcode=[0xE8], + operands=[Operand(type="Imm", size=32, tmod="Near", dest="JmpRel")]) +add_group("call", + only64=True, + opersize=64, + def_opersize_64=64, + opcode=[0xE8], + operands=[Operand(type="Imm", size=32, tmod="Near", dest="JmpRel")]) +add_group("call", + def_opersize_64=64, + opcode=[0xE8], + operands=[Operand(type="Imm", tmod="Near", dest="JmpRel")]) + +add_group("call", + suffix="w", + req_suffix=True, + opersize=16, + opcode=[0xFF], + spare=2, + operands=[Operand(type="RM", size=16, dest="EA")]) +add_group("call", + suffix="l", + req_suffix=True, + not64=True, + opersize=32, + opcode=[0xFF], + spare=2, + operands=[Operand(type="RM", size=32, dest="EA")]) +add_group("call", + suffix="q", + req_suffix=True, + opersize=64, + def_opersize_64=64, + opcode=[0xFF], + spare=2, + operands=[Operand(type="RM", size=64, dest="EA")]) +add_group("call", + parsers=["gas"], + def_opersize_64=64, + opcode=[0xFF], + spare=2, + operands=[Operand(type="Reg", size="BITS", dest="EA")]) +add_group("call", + def_opersize_64=64, + opcode=[0xFF], + spare=2, + operands=[Operand(type="Mem", dest="EA")]) +add_group("call", + parsers=["nasm"], + opersize=16, + def_opersize_64=64, + opcode=[0xFF], + spare=2, + operands=[Operand(type="RM", size=16, tmod="Near", dest="EA")]) +add_group("call", + parsers=["nasm"], + not64=True, + opersize=32, + opcode=[0xFF], + spare=2, + operands=[Operand(type="RM", size=32, tmod="Near", dest="EA")]) +add_group("call", + parsers=["nasm"], + opersize=64, + def_opersize_64=64, + opcode=[0xFF], + spare=2, + operands=[Operand(type="RM", size=64, tmod="Near", dest="EA")]) +add_group("call", + parsers=["nasm"], + def_opersize_64=64, + opcode=[0xFF], + spare=2, + operands=[Operand(type="Mem", tmod="Near", dest="EA")]) + +# Far indirect (through memory). Needs explicit FAR override (NASM only) +for sz in [16, 32, 64]: + add_group("call", + parsers=["nasm"], + opersize=sz, + opcode=[0xFF], + spare=3, + operands=[Operand(type="Mem", size=sz, tmod="Far", dest="EA")]) +add_group("call", + parsers=["nasm"], + opcode=[0xFF], + spare=3, + operands=[Operand(type="Mem", tmod="Far", dest="EA")]) + +# With explicit FAR override +for sz in [16, 32]: + add_group("call", + parsers=["nasm"], + not64=True, + opersize=sz, + opcode=[0x9A], + operands=[Operand(type="Imm", size=sz, tmod="Far", dest="JmpFar")]) +add_group("call", + parsers=["nasm"], + not64=True, + opcode=[0x9A], + operands=[Operand(type="Imm", tmod="Far", dest="JmpFar")]) + +# Since not caught by first ImmNotSegOff group, implicitly FAR (in NASM). +for sz in [16, 32]: + add_group("call", + parsers=["nasm"], + not64=True, + opersize=sz, + opcode=[0x9A], + operands=[Operand(type="Imm", size=sz, dest="JmpFar")]) +add_group("call", + parsers=["nasm"], + not64=True, + opcode=[0x9A], + operands=[Operand(type="Imm", dest="JmpFar")]) + +# Two-operand FAR (GAS only) +for sfx, sz in zip("wl", [16, 32]): + add_group("call", + suffix=sfx, + req_suffix=True, + parsers=["gas"], + not64=True, + gas_no_reverse=True, + opersize=sz, + opcode=[0x9A], + operands=[Operand(type="Imm", size=16, relaxed=True, dest="JmpFar"), + Operand(type="Imm", size=sz, relaxed=True, dest="JmpFar")]) +add_group("call", + parsers=["gas"], + not64=True, + gas_no_reverse=True, + opcode=[0x9A], + operands=[Operand(type="Imm", size=16, relaxed=True, dest="JmpFar"), + Operand(type="Imm", size="BITS", relaxed=True, dest="JmpFar")]) + +add_insn("call", "call") + +# +# jmp +# +add_group("jmp", + opcode=[], + operands=[Operand(type="ImmNotSegOff", dest="JmpRel")]) +add_group("jmp", + suffix="w", + opersize=16, + opcode=[], + operands=[Operand(type="ImmNotSegOff", size=16, dest="JmpRel")]) +add_group("jmp", + suffix="l", + not64=True, + opersize=32, + opcode=[0x00], + operands=[Operand(type="ImmNotSegOff", size=32, dest="JmpRel")]) +add_group("jmp", + suffixes=["l", "q"], + only64=True, + opersize=64, + opcode=[0x00], + operands=[Operand(type="ImmNotSegOff", size=32, dest="JmpRel")]) + +add_group("jmp", + def_opersize_64=64, + opcode=[0xEB], + operands=[Operand(type="Imm", tmod="Short", dest="JmpRel")]) +add_group("jmp", + opersize=16, + def_opersize_64=64, + opcode=[0xE9], + operands=[Operand(type="Imm", size=16, tmod="Near", dest="JmpRel")]) +add_group("jmp", + not64=True, + cpu=["386"], + opersize=32, + opcode=[0xE9], + operands=[Operand(type="Imm", size=32, tmod="Near", dest="JmpRel")]) +add_group("jmp", + only64=True, + opersize=64, + def_opersize_64=64, + opcode=[0xE9], + operands=[Operand(type="Imm", size=32, tmod="Near", dest="JmpRel")]) +add_group("jmp", + def_opersize_64=64, + opcode=[0xE9], + operands=[Operand(type="Imm", tmod="Near", dest="JmpRel")]) + +add_group("jmp", + suffix="w", + req_suffix=True, + opersize=16, + def_opersize_64=64, + opcode=[0xFF], + spare=4, + operands=[Operand(type="RM", size=16, dest="EA")]) +add_group("jmp", + suffix="l", + req_suffix=True, + not64=True, + opersize=32, + opcode=[0xFF], + spare=4, + operands=[Operand(type="RM", size=32, dest="EA")]) +add_group("jmp", + suffix="q", + req_suffix=True, + opersize=64, + def_opersize_64=64, + opcode=[0xFF], + spare=4, + operands=[Operand(type="RM", size=64, dest="EA")]) +add_group("jmp", + parsers=["gas"], + def_opersize_64=64, + opcode=[0xFF], + spare=4, + operands=[Operand(type="Reg", size="BITS", dest="EA")]) +add_group("jmp", + def_opersize_64=64, + opcode=[0xFF], + spare=4, + operands=[Operand(type="Mem", dest="EA")]) +add_group("jmp", + parsers=["nasm"], + opersize=16, + def_opersize_64=64, + opcode=[0xFF], + spare=4, + operands=[Operand(type="RM", size=16, tmod="Near", dest="EA")]) +add_group("jmp", + parsers=["nasm"], + not64=True, + cpu=["386"], + opersize=32, + opcode=[0xFF], + spare=4, + operands=[Operand(type="RM", size=32, tmod="Near", dest="EA")]) +add_group("jmp", + parsers=["nasm"], + opersize=64, + def_opersize_64=64, + opcode=[0xFF], + spare=4, + operands=[Operand(type="RM", size=64, tmod="Near", dest="EA")]) +add_group("jmp", + parsers=["nasm"], + def_opersize_64=64, + opcode=[0xFF], + spare=4, + operands=[Operand(type="Mem", tmod="Near", dest="EA")]) + +# Far indirect (through memory). Needs explicit FAR override. +for sz in [16, 32, 64]: + add_group("jmp", + opersize=sz, + opcode=[0xFF], + spare=5, + operands=[Operand(type="Mem", size=sz, tmod="Far", dest="EA")]) +add_group("jmp", + opcode=[0xFF], + spare=5, + operands=[Operand(type="Mem", tmod="Far", dest="EA")]) + +# With explicit FAR override +for sz in [16, 32]: + add_group("jmp", + not64=True, + opersize=sz, + opcode=[0xEA], + operands=[Operand(type="Imm", size=sz, tmod="Far", dest="JmpFar")]) +add_group("jmp", + not64=True, + opcode=[0xEA], + operands=[Operand(type="Imm", tmod="Far", dest="JmpFar")]) + +# Since not caught by first ImmNotSegOff group, implicitly FAR (in NASM). +for sz in [16, 32]: + add_group("jmp", + parsers=["nasm"], + not64=True, + opersize=sz, + opcode=[0xEA], + operands=[Operand(type="Imm", size=sz, dest="JmpFar")]) +add_group("jmp", + parsers=["nasm"], + not64=True, + opcode=[0xEA], + operands=[Operand(type="Imm", dest="JmpFar")]) + +# Two-operand FAR (GAS only) +for sfx, sz in zip("wl", [16, 32]): + add_group("jmp", + parsers=["gas"], + suffix=sfx, + req_suffix=True, + not64=True, + gas_no_reverse=True, + opersize=sz, + opcode=[0xEA], + operands=[Operand(type="Imm", size=16, relaxed=True, dest="JmpFar"), + Operand(type="Imm", size=sz, relaxed=True, dest="JmpFar")]) +add_group("jmp", + parsers=["gas"], + not64=True, + gas_no_reverse=True, + opcode=[0xEA], + operands=[Operand(type="Imm", size=16, relaxed=True, dest="JmpFar"), + Operand(type="Imm", size="BITS", relaxed=True, dest="JmpFar")]) + +add_insn("jmp", "jmp") + +# +# GAS far calls/jumps +# + +# Far indirect (through memory) +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("ljmpcall", + suffix=sfx, + req_suffix=True, + opersize=sz, + modifiers=["SpAdd"], + opcode=[0xFF], + spare=0, + operands=[Operand(type="Mem", size=sz, relaxed=True, dest="EA")]) +add_group("ljmpcall", + modifiers=["SpAdd"], + opcode=[0xFF], + spare=0, + operands=[Operand(type="Mem", size="BITS", relaxed=True, dest="EA")]) + +# Two-operand far +for sfx, sz in zip("wl", [16, 32]): + add_group("ljmpcall", + not64=True, + gas_no_reverse=True, + suffix=sfx, + req_suffix=True, + opersize=sz, + modifiers=["Gap", "Op0Add"], + opcode=[0x00], + operands=[Operand(type="Imm", size=16, relaxed=True, dest="JmpFar"), + Operand(type="Imm", size=sz, relaxed=True, dest="JmpFar")]) +add_group("ljmpcall", + not64=True, + gas_no_reverse=True, + modifiers=["Gap", "Op0Add"], + opcode=[0x00], + operands=[Operand(type="Imm", size=16, relaxed=True, dest="JmpFar"), + Operand(type="Imm", size="BITS", relaxed=True, dest="JmpFar")]) + +add_insn("ljmp", "ljmpcall", parser="gas", modifiers=[5, 0xEA]) +add_insn("lcall", "ljmpcall", parser="gas", modifiers=[3, 0x9A]) + +# +# ret +# +add_group("retnf", + not64=True, + modifiers=["Op0Add"], + opcode=[0x01], + operands=[]) +add_group("retnf", + not64=True, + modifiers=["Op0Add"], + opcode=[0x00], + operands=[Operand(type="Imm", size=16, relaxed=True, dest="Imm")]) +add_group("retnf", + only64=True, + modifiers=["Op0Add", "OpSizeR"], + opcode=[0x01], + operands=[]) +add_group("retnf", + only64=True, + modifiers=["Op0Add", "OpSizeR"], + opcode=[0x00], + operands=[Operand(type="Imm", size=16, relaxed=True, dest="Imm")]) +add_group("retnf", + gen_suffix=False, + suffixes=["w", "l", "q"], + modifiers=["Op0Add", "OpSizeR"], + opcode=[0x01], + operands=[]) +# GAS suffix versions +add_group("retnf", + gen_suffix=False, + suffixes=["w", "l", "q"], + modifiers=["Op0Add", "OpSizeR"], + opcode=[0x00], + operands=[Operand(type="Imm", size=16, relaxed=True, dest="Imm")]) + +add_insn("ret", "retnf", modifiers=[0xC2]) +add_insn("retw", "retnf", parser="gas", modifiers=[0xC2, 16]) +add_insn("retl", "retnf", parser="gas", modifiers=[0xC2], not64=True) +add_insn("retq", "retnf", parser="gas", modifiers=[0xC2], only64=True) +add_insn("retn", "retnf", parser="nasm", modifiers=[0xC2]) +add_insn("retf", "retnf", parser="nasm", modifiers=[0xCA, 64]) +add_insn("lret", "retnf", parser="gas", modifiers=[0xCA], suffix="z") +add_insn("lretw", "retnf", parser="gas", modifiers=[0xCA, 16], suffix="w") +add_insn("lretl", "retnf", parser="gas", modifiers=[0xCA], suffix="l") +add_insn("lretq", "retnf", parser="gas", modifiers=[0xCA, 64], only64=True, + suffix="q") + +# +# enter +# +add_group("enter", + suffix="l", + not64=True, + cpu=["186"], + gas_no_reverse=True, + opcode=[0xC8], + operands=[ + Operand(type="Imm", size=16, relaxed=True, dest="EA", opt="A16"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("enter", + suffix="q", + only64=True, + cpu=["186"], + gas_no_reverse=True, + opersize=64, + def_opersize_64=64, + opcode=[0xC8], + operands=[ + Operand(type="Imm", size=16, relaxed=True, dest="EA", opt="A16"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +# GAS suffix version +add_group("enter", + suffix="w", + cpu=["186"], + parsers=["gas"], + gas_no_reverse=True, + opersize=16, + opcode=[0xC8], + operands=[ + Operand(type="Imm", size=16, relaxed=True, dest="EA", opt="A16"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("enter", "enter") + +# +# leave +# +add_insn("leave", "onebyte", modifiers=[0xC9, 0, 64], cpu=["186"]) +add_insn("leavew", "onebyte", parser="gas", modifiers=[0xC9, 16, 0], + cpu=["186"]) +add_insn("leavel", "onebyte", parser="gas", modifiers=[0xC9, 0, 64], + cpu=["186"]) +add_insn("leaveq", "onebyte", parser="gas", modifiers=[0xC9, 0, 64], + only64=True) + +##################################################################### +# Conditional jumps +##################################################################### +add_group("jcc", + opcode=[], + operands=[Operand(type="Imm", dest="JmpRel")]) +add_group("jcc", + opersize=16, + opcode=[], + operands=[Operand(type="Imm", size=16, dest="JmpRel")]) +add_group("jcc", + not64=True, + opersize=32, + opcode=[], + operands=[Operand(type="Imm", size=32, dest="JmpRel")]) +add_group("jcc", + only64=True, + opersize=64, + opcode=[], + operands=[Operand(type="Imm", size=32, dest="JmpRel")]) + +add_group("jcc", + modifiers=["Op0Add"], + def_opersize_64=64, + opcode=[0x70], + operands=[Operand(type="Imm", tmod="Short", dest="JmpRel")]) +add_group("jcc", + cpu=["186"], + modifiers=["Op1Add"], + opersize=16, + def_opersize_64=64, + opcode=[0x0F, 0x80], + operands=[Operand(type="Imm", size=16, tmod="Near", dest="JmpRel")]) +add_group("jcc", + not64=True, + cpu=["386"], + modifiers=["Op1Add"], + opersize=32, + opcode=[0x0F, 0x80], + operands=[Operand(type="Imm", size=32, tmod="Near", dest="JmpRel")]) +add_group("jcc", + only64=True, + modifiers=["Op1Add"], + opersize=64, + def_opersize_64=64, + opcode=[0x0F, 0x80], + operands=[Operand(type="Imm", size=32, tmod="Near", dest="JmpRel")]) +add_group("jcc", + cpu=["186"], + modifiers=["Op1Add"], + def_opersize_64=64, + opcode=[0x0F, 0x80], + operands=[Operand(type="Imm", tmod="Near", dest="JmpRel")]) + +add_insn("jo", "jcc", modifiers=[0x00]) +add_insn("jno", "jcc", modifiers=[0x01]) +add_insn("jb", "jcc", modifiers=[0x02]) +add_insn("jc", "jcc", modifiers=[0x02]) +add_insn("jnae", "jcc", modifiers=[0x02]) +add_insn("jnb", "jcc", modifiers=[0x03]) +add_insn("jnc", "jcc", modifiers=[0x03]) +add_insn("jae", "jcc", modifiers=[0x03]) +add_insn("je", "jcc", modifiers=[0x04]) +add_insn("jz", "jcc", modifiers=[0x04]) +add_insn("jne", "jcc", modifiers=[0x05]) +add_insn("jnz", "jcc", modifiers=[0x05]) +add_insn("jbe", "jcc", modifiers=[0x06]) +add_insn("jna", "jcc", modifiers=[0x06]) +add_insn("jnbe", "jcc", modifiers=[0x07]) +add_insn("ja", "jcc", modifiers=[0x07]) +add_insn("js", "jcc", modifiers=[0x08]) +add_insn("jns", "jcc", modifiers=[0x09]) +add_insn("jp", "jcc", modifiers=[0x0A]) +add_insn("jpe", "jcc", modifiers=[0x0A]) +add_insn("jnp", "jcc", modifiers=[0x0B]) +add_insn("jpo", "jcc", modifiers=[0x0B]) +add_insn("jl", "jcc", modifiers=[0x0C]) +add_insn("jnge", "jcc", modifiers=[0x0C]) +add_insn("jnl", "jcc", modifiers=[0x0D]) +add_insn("jge", "jcc", modifiers=[0x0D]) +add_insn("jle", "jcc", modifiers=[0x0E]) +add_insn("jng", "jcc", modifiers=[0x0E]) +add_insn("jnle", "jcc", modifiers=[0x0F]) +add_insn("jg", "jcc", modifiers=[0x0F]) + +# +# jcxz +# +add_group("jcxz", + modifiers=["AdSizeR"], + opcode=[], + operands=[Operand(type="Imm", dest="JmpRel")]) +add_group("jcxz", + modifiers=["AdSizeR"], + def_opersize_64=64, + opcode=[0xE3], + operands=[Operand(type="Imm", tmod="Short", dest="JmpRel")]) + +add_insn("jcxz", "jcxz", modifiers=[16]) +add_insn("jecxz", "jcxz", modifiers=[32], cpu=["386"]) +add_insn("jrcxz", "jcxz", modifiers=[64], only64=True) + +##################################################################### +# Loop instructions +##################################################################### +add_group("loop", + opcode=[], + operands=[Operand(type="Imm", dest="JmpRel")]) +add_group("loop", + not64=True, + opcode=[], + operands=[Operand(type="Imm", dest="JmpRel"), + Operand(type="Creg", size=16, dest="AdSizeR")]) +add_group("loop", + def_opersize_64=64, + opcode=[], + operands=[Operand(type="Imm", dest="JmpRel"), + Operand(type="Creg", size=32, dest="AdSizeR")]) +add_group("loop", + def_opersize_64=64, + opcode=[], + operands=[Operand(type="Imm", dest="JmpRel"), + Operand(type="Creg", size=64, dest="AdSizeR")]) + +add_group("loop", + not64=True, + modifiers=["Op0Add"], + opcode=[0xE0], + operands=[Operand(type="Imm", tmod="Short", dest="JmpRel")]) +for sz in [16, 32, 64]: + add_group("loop", + modifiers=["Op0Add"], + def_opersize_64=64, + opcode=[0xE0], + operands=[Operand(type="Imm", tmod="Short", dest="JmpRel"), + Operand(type="Creg", size=sz, dest="AdSizeR")]) + +add_insn("loop", "loop", modifiers=[2]) +add_insn("loopz", "loop", modifiers=[1]) +add_insn("loope", "loop", modifiers=[1]) +add_insn("loopnz", "loop", modifiers=[0]) +add_insn("loopne", "loop", modifiers=[0]) + +# GAS w/l/q suffixes have to set addrsize via modifiers +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("loop"+sfx, + not64=(sz == 16), + only64=(sz == 64), + modifiers=["Gap", "AdSizeR"], + def_opersize_64=64, + opcode=[], + operands=[Operand(type="Imm", dest="JmpRel")]) + add_group("loop"+sfx, + not64=(sz == 16), + only64=(sz == 64), + modifiers=["Op0Add", "AdSizeR"], + def_opersize_64=64, + opcode=[0xE0], + operands=[Operand(type="Imm", tmod="Short", dest="JmpRel")]) + + add_group("loop"+sfx, + not64=(sz == 16), + only64=(sz == 64), + def_opersize_64=64, + opcode=[], + operands=[Operand(type="Imm", dest="JmpRel"), + Operand(type="Creg", size=sz, dest="AdSizeR")]) + add_group("loop"+sfx, + not64=(sz == 16), + only64=(sz == 64), + modifiers=["Op0Add"], + def_opersize_64=64, + opcode=[0xE0], + operands=[Operand(type="Imm", tmod="Short", dest="JmpRel"), + Operand(type="Creg", size=sz, dest="AdSizeR")]) + + add_insn("loop"+sfx, "loop"+sfx, parser="gas", modifiers=[2, sz]) + add_insn("loopz"+sfx, "loop"+sfx, parser="gas", modifiers=[1, sz]) + add_insn("loope"+sfx, "loop"+sfx, parser="gas", modifiers=[1, sz]) + add_insn("loopnz"+sfx, "loop"+sfx, parser="gas", modifiers=[0, sz]) + add_insn("loopne"+sfx, "loop"+sfx, parser="gas", modifiers=[0, sz]) + +##################################################################### +# Set byte on flag instructions +##################################################################### +add_group("setcc", + suffix="b", + cpu=["386"], + modifiers=["Op1Add"], + opcode=[0x0F, 0x90], + spare=2, + operands=[Operand(type="RM", size=8, relaxed=True, dest="EA")]) + +add_insn("seto", "setcc", modifiers=[0x00]) +add_insn("setno", "setcc", modifiers=[0x01]) +add_insn("setb", "setcc", modifiers=[0x02]) +add_insn("setc", "setcc", modifiers=[0x02]) +add_insn("setnae", "setcc", modifiers=[0x02]) +add_insn("setnb", "setcc", modifiers=[0x03]) +add_insn("setnc", "setcc", modifiers=[0x03]) +add_insn("setae", "setcc", modifiers=[0x03]) +add_insn("sete", "setcc", modifiers=[0x04]) +add_insn("setz", "setcc", modifiers=[0x04]) +add_insn("setne", "setcc", modifiers=[0x05]) +add_insn("setnz", "setcc", modifiers=[0x05]) +add_insn("setbe", "setcc", modifiers=[0x06]) +add_insn("setna", "setcc", modifiers=[0x06]) +add_insn("setnbe", "setcc", modifiers=[0x07]) +add_insn("seta", "setcc", modifiers=[0x07]) +add_insn("sets", "setcc", modifiers=[0x08]) +add_insn("setns", "setcc", modifiers=[0x09]) +add_insn("setp", "setcc", modifiers=[0x0A]) +add_insn("setpe", "setcc", modifiers=[0x0A]) +add_insn("setnp", "setcc", modifiers=[0x0B]) +add_insn("setpo", "setcc", modifiers=[0x0B]) +add_insn("setl", "setcc", modifiers=[0x0C]) +add_insn("setnge", "setcc", modifiers=[0x0C]) +add_insn("setnl", "setcc", modifiers=[0x0D]) +add_insn("setge", "setcc", modifiers=[0x0D]) +add_insn("setle", "setcc", modifiers=[0x0E]) +add_insn("setng", "setcc", modifiers=[0x0E]) +add_insn("setnle", "setcc", modifiers=[0x0F]) +add_insn("setg", "setcc", modifiers=[0x0F]) + +##################################################################### +# String instructions +##################################################################### +add_insn("cmpsb", "onebyte", modifiers=[0xA6, 0]) +add_insn("cmpsw", "onebyte", modifiers=[0xA7, 16]) + +# cmpsd has to be non-onebyte for SSE2 forms below +add_group("cmpsd", + parsers=["nasm"], + notavx=True, + opersize=32, + opcode=[0xA7], + operands=[]) + +add_insn("cmpsd", "cmpsd", cpu=[]) + +add_insn("cmpsl", "onebyte", parser="gas", modifiers=[0xA7, 32], cpu=["386"]) +add_insn("cmpsq", "onebyte", modifiers=[0xA7, 64], only64=True) +add_insn("insb", "onebyte", modifiers=[0x6C, 0]) +add_insn("insw", "onebyte", modifiers=[0x6D, 16]) +add_insn("insd", "onebyte", parser="nasm", modifiers=[0x6D, 32], cpu=["386"]) +add_insn("insl", "onebyte", parser="gas", modifiers=[0x6D, 32], cpu=["386"]) +add_insn("outsb", "onebyte", modifiers=[0x6E, 0]) +add_insn("outsw", "onebyte", modifiers=[0x6F, 16]) +add_insn("outsd", "onebyte", parser="nasm", modifiers=[0x6F, 32], + cpu=["386"]) +add_insn("outsl", "onebyte", parser="gas", modifiers=[0x6F, 32], cpu=["386"]) +add_insn("lodsb", "onebyte", modifiers=[0xAC, 0]) +add_insn("lodsw", "onebyte", modifiers=[0xAD, 16]) +add_insn("lodsd", "onebyte", parser="nasm", modifiers=[0xAD, 32], + cpu=["386"]) +add_insn("lodsl", "onebyte", parser="gas", modifiers=[0xAD, 32], cpu=["386"]) +add_insn("lodsq", "onebyte", modifiers=[0xAD, 64], only64=True) +add_insn("movsb", "onebyte", modifiers=[0xA4, 0]) +add_insn("movsw", "onebyte", modifiers=[0xA5, 16]) + +# movsd has to be non-onebyte for SSE2 forms below +add_group("movsd", + parsers=["nasm", "gas"], + notavx=True, + opersize=32, + opcode=[0xA5], + operands=[]) + +add_insn("movsd", "movsd", cpu=["386"]) + +add_insn("movsl", "onebyte", parser="gas", modifiers=[0xA5, 32], cpu=["386"]) +add_insn("movsq", "onebyte", modifiers=[0xA5, 64], only64=True) +# smov alias for movs in GAS mode +add_insn("smovb", "onebyte", parser="gas", modifiers=[0xA4, 0]) +add_insn("smovw", "onebyte", parser="gas", modifiers=[0xA5, 16]) +add_insn("smovl", "onebyte", parser="gas", modifiers=[0xA5, 32], cpu=["386"]) +add_insn("smovq", "onebyte", parser="gas", modifiers=[0xA5, 64], only64=True) +add_insn("scasb", "onebyte", modifiers=[0xAE, 0]) +add_insn("scasw", "onebyte", modifiers=[0xAF, 16]) +add_insn("scasd", "onebyte", parser="nasm", modifiers=[0xAF, 32], + cpu=["386"]) +add_insn("scasl", "onebyte", parser="gas", modifiers=[0xAF, 32], cpu=["386"]) +add_insn("scasq", "onebyte", modifiers=[0xAF, 64], only64=True) +# ssca alias for scas in GAS mode +add_insn("sscab", "onebyte", parser="gas", modifiers=[0xAE, 0]) +add_insn("sscaw", "onebyte", parser="gas", modifiers=[0xAF, 16]) +add_insn("sscal", "onebyte", parser="gas", modifiers=[0xAF, 32], cpu=["386"]) +add_insn("sscaq", "onebyte", parser="gas", modifiers=[0xAF, 64], only64=True) +add_insn("stosb", "onebyte", modifiers=[0xAA, 0]) +add_insn("stosw", "onebyte", modifiers=[0xAB, 16]) +add_insn("stosd", "onebyte", parser="nasm", modifiers=[0xAB, 32], + cpu=["386"]) +add_insn("stosl", "onebyte", parser="gas", modifiers=[0xAB, 32], cpu=["386"]) +add_insn("stosq", "onebyte", modifiers=[0xAB, 64], only64=True) +add_insn("xlatb", "onebyte", modifiers=[0xD7, 0]) + +##################################################################### +# Bit manipulation +##################################################################### + +# +# bit tests +# +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("bittest", + suffix=sfx, + cpu=["386"], + modifiers=["Op1Add"], + opersize=sz, + opcode=[0x0F, 0x00], + operands=[Operand(type="RM", size=sz, relaxed=True, dest="EA"), + Operand(type="Reg", size=sz, dest="Spare")]) +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("bittest", + suffix=sfx, + cpu=["386"], + modifiers=["Gap", "SpAdd"], + opersize=sz, + opcode=[0x0F, 0xBA], + spare=0, + operands=[Operand(type="RM", size=sz, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("bt", "bittest", modifiers=[0xA3, 4]) +add_insn("bts", "bittest", modifiers=[0xAB, 5]) +add_insn("btr", "bittest", modifiers=[0xB3, 6]) +add_insn("btc", "bittest", modifiers=[0xBB, 7]) + +# +# bit scans - also used for lar/lsl +# +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("bsfr", + suffix=sfx, + modifiers=["Op1Add"], + opersize=sz, + opcode=[0x0F, 0x00], + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="RM", size=sz, relaxed=True, dest="EA")]) + +add_insn("bsf", "bsfr", modifiers=[0xBC], cpu=["386"]) +add_insn("bsr", "bsfr", modifiers=[0xBD], cpu=["386"]) + +##################################################################### +# Interrupts and operating system instructions +##################################################################### +add_group("int", + opcode=[0xCD], + operands=[Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("int", "int") +add_insn("int3", "onebyte", modifiers=[0xCC]) +add_insn("int03", "onebyte", parser="nasm", modifiers=[0xCC]) +add_insn("into", "onebyte", modifiers=[0xCE], not64=True) +add_insn("iret", "onebyte", modifiers=[0xCF]) +add_insn("iretw", "onebyte", modifiers=[0xCF, 16]) +add_insn("iretd", "onebyte", parser="nasm", modifiers=[0xCF, 32], + cpu=["386"]) +add_insn("iretl", "onebyte", parser="gas", modifiers=[0xCF, 32], cpu=["386"]) +add_insn("iretq", "onebyte", modifiers=[0xCF, 64], only64=True) +add_insn("rsm", "twobyte", modifiers=[0x0F, 0xAA], cpu=["586", "SMM"]) + +for sfx, sz in zip("wl", [16, 32]): + add_group("bound", + suffix=sfx, + cpu=["186"], + not64=True, + opersize=sz, + opcode=[0x62], + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="Mem", size=sz, relaxed=True, dest="EA")]) + +add_insn("bound", "bound") +add_insn("hlt", "onebyte", modifiers=[0xF4], cpu=["Priv"]) +add_insn("nop", "onebyte", modifiers=[0x90]) + +# +# Protection control +# +for sfx, sz, sz2 in zip("wlq", [16, 32, 64], [16, 32, 32]): + add_group("larlsl", + suffix=sfx, + modifiers=["Op1Add"], + opersize=sz, + opcode=[0x0F, 0x00], + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="Reg", size=sz2, dest="EA")]) + add_group("larlsl", + suffix=sfx, + modifiers=["Op1Add"], + opersize=sz, + opcode=[0x0F, 0x00], + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="RM", size=16, relaxed=True, dest="EA")]) + +add_insn("lar", "larlsl", modifiers=[0x02], cpu=["286", "Prot"]) +add_insn("lsl", "larlsl", modifiers=[0x03], cpu=["286", "Prot"]) + +add_group("arpl", + suffix="w", + cpu=["Prot", "286"], + not64=True, + opcode=[0x63], + operands=[Operand(type="RM", size=16, relaxed=True, dest="EA"), + Operand(type="Reg", size=16, dest="Spare")]) + +add_insn("arpl", "arpl") + +for sfx in [None, "w", "l", "q"]: + add_insn("lgdt"+(sfx or ""), "twobytemem", suffix=sfx, + modifiers=[2, 0x0F, 0x01], cpu=["286", "Priv"]) + add_insn("lidt"+(sfx or ""), "twobytemem", suffix=sfx, + modifiers=[3, 0x0F, 0x01], cpu=["286", "Priv"]) + add_insn("sgdt"+(sfx or ""), "twobytemem", suffix=sfx, + modifiers=[0, 0x0F, 0x01], cpu=["286", "Priv"]) + add_insn("sidt"+(sfx or ""), "twobytemem", suffix=sfx, + modifiers=[1, 0x0F, 0x01], cpu=["286", "Priv"]) + +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("str", + suffix=sfx, + cpu=["Prot", "286"], + opersize=sz, + opcode=[0x0F, 0x00], + spare=1, + operands=[Operand(type="Reg", size=sz, dest="EA")]) +add_group("str", + suffixes=["w", "l"], + cpu=["Prot", "286"], + opcode=[0x0F, 0x00], + spare=1, + operands=[Operand(type="RM", size=16, relaxed=True, dest="EA")]) + +add_insn("str", "str") + +add_group("prot286", + suffix="w", + cpu=["286"], + modifiers=["SpAdd", "Op1Add"], + opcode=[0x0F, 0x00], + spare=0, + operands=[Operand(type="RM", size=16, relaxed=True, dest="EA")]) + +add_insn("lldt", "prot286", modifiers=[2, 0], cpu=["286", "Prot", "Priv"]) +add_insn("ltr", "prot286", modifiers=[3, 0], cpu=["286", "Prot", "Priv"]) +add_insn("verr", "prot286", modifiers=[4, 0], cpu=["286", "Prot"]) +add_insn("verw", "prot286", modifiers=[5, 0], cpu=["286", "Prot"]) +add_insn("lmsw", "prot286", modifiers=[6, 1], cpu=["286", "Priv"]) + +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("sldtmsw", + suffix=sfx, + only64=(sz==64), + cpu=[(sz==32) and "386" or "286"], + modifiers=["SpAdd", "Op1Add"], + opcode=[0x0F, 0x00], + spare=0, + operands=[Operand(type="Mem", size=sz, relaxed=True, dest="EA")]) +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("sldtmsw", + suffix=sfx, + cpu=["286"], + modifiers=["SpAdd", "Op1Add"], + opersize=sz, + opcode=[0x0F, 0x00], + spare=0, + operands=[Operand(type="Reg", size=sz, dest="EA")]) + +add_insn("sldt", "sldtmsw", modifiers=[0, 0]) +add_insn("smsw", "sldtmsw", modifiers=[4, 1]) + +##################################################################### +# Floating point instructions +##################################################################### +add_insn("fcompp", "twobyte", modifiers=[0xDE, 0xD9], cpu=["FPU"]) +add_insn("fucompp", "twobyte", modifiers=[0xDA, 0xE9], cpu=["286", "FPU"]) +add_insn("ftst", "twobyte", modifiers=[0xD9, 0xE4], cpu=["FPU"]) +add_insn("fxam", "twobyte", modifiers=[0xD9, 0xE5], cpu=["FPU"]) +add_insn("fld1", "twobyte", modifiers=[0xD9, 0xE8], cpu=["FPU"]) +add_insn("fldl2t", "twobyte", modifiers=[0xD9, 0xE9], cpu=["FPU"]) +add_insn("fldl2e", "twobyte", modifiers=[0xD9, 0xEA], cpu=["FPU"]) +add_insn("fldpi", "twobyte", modifiers=[0xD9, 0xEB], cpu=["FPU"]) +add_insn("fldlg2", "twobyte", modifiers=[0xD9, 0xEC], cpu=["FPU"]) +add_insn("fldln2", "twobyte", modifiers=[0xD9, 0xED], cpu=["FPU"]) +add_insn("fldz", "twobyte", modifiers=[0xD9, 0xEE], cpu=["FPU"]) +add_insn("f2xm1", "twobyte", modifiers=[0xD9, 0xF0], cpu=["FPU"]) +add_insn("fyl2x", "twobyte", modifiers=[0xD9, 0xF1], cpu=["FPU"]) +add_insn("fptan", "twobyte", modifiers=[0xD9, 0xF2], cpu=["FPU"]) +add_insn("fpatan", "twobyte", modifiers=[0xD9, 0xF3], cpu=["FPU"]) +add_insn("fxtract", "twobyte", modifiers=[0xD9, 0xF4], cpu=["FPU"]) +add_insn("fprem1", "twobyte", modifiers=[0xD9, 0xF5], cpu=["286", "FPU"]) +add_insn("fdecstp", "twobyte", modifiers=[0xD9, 0xF6], cpu=["FPU"]) +add_insn("fincstp", "twobyte", modifiers=[0xD9, 0xF7], cpu=["FPU"]) +add_insn("fprem", "twobyte", modifiers=[0xD9, 0xF8], cpu=["FPU"]) +add_insn("fyl2xp1", "twobyte", modifiers=[0xD9, 0xF9], cpu=["FPU"]) +add_insn("fsqrt", "twobyte", modifiers=[0xD9, 0xFA], cpu=["FPU"]) +add_insn("fsincos", "twobyte", modifiers=[0xD9, 0xFB], cpu=["286", "FPU"]) +add_insn("frndint", "twobyte", modifiers=[0xD9, 0xFC], cpu=["FPU"]) +add_insn("fscale", "twobyte", modifiers=[0xD9, 0xFD], cpu=["FPU"]) +add_insn("fsin", "twobyte", modifiers=[0xD9, 0xFE], cpu=["286", "FPU"]) +add_insn("fcos", "twobyte", modifiers=[0xD9, 0xFF], cpu=["286", "FPU"]) +add_insn("fchs", "twobyte", modifiers=[0xD9, 0xE0], cpu=["FPU"]) +add_insn("fabs", "twobyte", modifiers=[0xD9, 0xE1], cpu=["FPU"]) +add_insn("fninit", "twobyte", modifiers=[0xDB, 0xE3], cpu=["FPU"]) +add_insn("finit", "threebyte", modifiers=[0x9B, 0xDB, 0xE3], cpu=["FPU"]) +add_insn("fnclex", "twobyte", modifiers=[0xDB, 0xE2], cpu=["FPU"]) +add_insn("fclex", "threebyte", modifiers=[0x9B, 0xDB, 0xE2], cpu=["FPU"]) +for sfx in [None, "l", "s"]: + add_insn("fnstenv"+(sfx or ""), "onebytemem", suffix=sfx, + modifiers=[6, 0xD9], cpu=["FPU"]) + add_insn("fstenv"+(sfx or ""), "twobytemem", suffix=sfx, + modifiers=[6, 0x9B, 0xD9], cpu=["FPU"]) + add_insn("fldenv"+(sfx or ""), "onebytemem", suffix=sfx, + modifiers=[4, 0xD9], cpu=["FPU"]) + add_insn("fnsave"+(sfx or ""), "onebytemem", suffix=sfx, + modifiers=[6, 0xDD], cpu=["FPU"]) + add_insn("fsave"+(sfx or ""), "twobytemem", suffix=sfx, + modifiers=[6, 0x9B, 0xDD], cpu=["FPU"]) + add_insn("frstor"+(sfx or ""), "onebytemem", suffix=sfx, + modifiers=[4, 0xDD], cpu=["FPU"]) +add_insn("fnop", "twobyte", modifiers=[0xD9, 0xD0], cpu=["FPU"]) +add_insn("fwait", "onebyte", modifiers=[0x9B], cpu=["FPU"]) +# Prefixes; should the others be here too? should wait be a prefix? +add_insn("wait", "onebyte", modifiers=[0x9B]) + +# +# load/store with pop (integer and normal) +# +add_group("fld", + suffix="s", + cpu=["FPU"], + opcode=[0xD9], + operands=[Operand(type="Mem", size=32, dest="EA")]) +add_group("fld", + suffix="l", + cpu=["FPU"], + opcode=[0xDD], + operands=[Operand(type="Mem", size=64, dest="EA")]) +add_group("fld", + cpu=["FPU"], + opcode=[0xDB], + spare=5, + operands=[Operand(type="Mem", size=80, dest="EA")]) +add_group("fld", + cpu=["FPU"], + opcode=[0xD9, 0xC0], + operands=[Operand(type="Reg", size=80, dest="Op1Add")]) + +add_insn("fld", "fld") + +add_group("fstp", + suffix="s", + cpu=["FPU"], + opcode=[0xD9], + spare=3, + operands=[Operand(type="Mem", size=32, dest="EA")]) +add_group("fstp", + suffix="l", + cpu=["FPU"], + opcode=[0xDD], + spare=3, + operands=[Operand(type="Mem", size=64, dest="EA")]) +add_group("fstp", + cpu=["FPU"], + opcode=[0xDB], + spare=7, + operands=[Operand(type="Mem", size=80, dest="EA")]) +add_group("fstp", + cpu=["FPU"], + opcode=[0xDD, 0xD8], + operands=[Operand(type="Reg", size=80, dest="Op1Add")]) + +add_insn("fstp", "fstp") + +# +# Long memory version of floating point load/store for GAS +# +add_group("fldstpt", + cpu=["FPU"], + modifiers=["SpAdd"], + opcode=[0xDB], + spare=0, + operands=[Operand(type="Mem", size=80, relaxed=True, dest="EA")]) + +add_insn("fldt", "fldstpt", modifiers=[5]) +add_insn("fstpt", "fldstpt", modifiers=[7]) + +add_group("fildstp", + suffix="s", + cpu=["FPU"], + modifiers=["SpAdd"], + opcode=[0xDF], + spare=0, + operands=[Operand(type="Mem", size=16, dest="EA")]) +add_group("fildstp", + suffix="l", + cpu=["FPU"], + modifiers=["SpAdd"], + opcode=[0xDB], + spare=0, + operands=[Operand(type="Mem", size=32, dest="EA")]) +add_group("fildstp", + suffix="q", + cpu=["FPU"], + modifiers=["Gap", "Op0Add", "SpAdd"], + opcode=[0xDD], + spare=0, + operands=[Operand(type="Mem", size=64, dest="EA")]) +# No-suffix alias for memory for GAS compat -> "s" version generated +add_group("fildstp", + cpu=["FPU"], + parsers=["gas"], + modifiers=["SpAdd"], + opcode=[0xDF], + spare=0, + operands=[Operand(type="Mem", size=16, relaxed=True, dest="EA")]) + +add_insn("fild", "fildstp", modifiers=[0, 2, 5]) +add_insn("fistp", "fildstp", modifiers=[3, 2, 7]) + +add_group("fbldstp", + cpu=["FPU"], + modifiers=["SpAdd"], + opcode=[0xDF], + spare=0, + operands=[Operand(type="Mem", size=80, relaxed=True, dest="EA")]) + +add_insn("fbld", "fbldstp", modifiers=[4]) +add_insn("fildll", "fbldstp", parser="gas", modifiers=[5]) +add_insn("fbstp", "fbldstp", modifiers=[6]) +add_insn("fistpll", "fbldstp", parser="gas", modifiers=[7]) + +# +# store (normal) +# +add_group("fst", + suffix="s", + cpu=["FPU"], + opcode=[0xD9], + spare=2, + operands=[Operand(type="Mem", size=32, dest="EA")]) +add_group("fst", + suffix="l", + cpu=["FPU"], + opcode=[0xDD], + spare=2, + operands=[Operand(type="Mem", size=64, dest="EA")]) +add_group("fst", + cpu=["FPU"], + opcode=[0xDD, 0xD0], + operands=[Operand(type="Reg", size=80, dest="Op1Add")]) + +add_insn("fst", "fst") + +# +# exchange (with ST0) +# +add_group("fxch", + cpu=["FPU"], + opcode=[0xD9, 0xC8], + operands=[Operand(type="Reg", size=80, dest="Op1Add")]) +add_group("fxch", + cpu=["FPU"], + opcode=[0xD9, 0xC8], + operands=[Operand(type="ST0", size=80, dest=None), + Operand(type="Reg", size=80, dest="Op1Add")]) +add_group("fxch", + cpu=["FPU"], + opcode=[0xD9, 0xC8], + operands=[Operand(type="Reg", size=80, dest="Op1Add"), + Operand(type="ST0", size=80, dest=None)]) +add_group("fxch", + cpu=["FPU"], + opcode=[0xD9, 0xC9], + operands=[]) + +add_insn("fxch", "fxch") + +# +# comparisons +# +add_group("fcom", + suffix="s", + cpu=["FPU"], + modifiers=["Gap", "SpAdd"], + opcode=[0xD8], + spare=0, + operands=[Operand(type="Mem", size=32, dest="EA")]) +add_group("fcom", + suffix="l", + cpu=["FPU"], + modifiers=["Gap", "SpAdd"], + opcode=[0xDC], + spare=0, + operands=[Operand(type="Mem", size=64, dest="EA")]) +add_group("fcom", + cpu=["FPU"], + modifiers=["Op1Add"], + opcode=[0xD8, 0x00], + operands=[Operand(type="Reg", size=80, dest="Op1Add")]) +# No-suffix alias for memory for GAS compat -> "s" version generated +add_group("fcom", + cpu=["FPU"], + parsers=["gas"], + modifiers=["Gap", "SpAdd"], + opcode=[0xD8], + spare=0, + operands=[Operand(type="Mem", size=32, relaxed=True, dest="EA")]) +# Alias for fcom %st(1) for GAS compat +add_group("fcom", + cpu=["FPU"], + parsers=["gas"], + modifiers=["Op1Add"], + opcode=[0xD8, 0x01], + operands=[]) +add_group("fcom", + cpu=["FPU"], + parsers=["nasm"], + modifiers=["Op1Add"], + opcode=[0xD8, 0x00], + operands=[Operand(type="ST0", size=80, dest=None), + Operand(type="Reg", size=80, dest="Op1Add")]) + +add_insn("fcom", "fcom", modifiers=[0xD0, 2]) +add_insn("fcomp", "fcom", modifiers=[0xD8, 3]) + +# +# extended comparisons +# +add_group("fcom2", + cpu=["FPU", "286"], + modifiers=["Op0Add", "Op1Add"], + opcode=[0x00, 0x00], + operands=[Operand(type="Reg", size=80, dest="Op1Add")]) +add_group("fcom2", + cpu=["FPU", "286"], + modifiers=["Op0Add", "Op1Add"], + opcode=[0x00, 0x00], + operands=[Operand(type="ST0", size=80, dest=None), + Operand(type="Reg", size=80, dest="Op1Add")]) + +add_insn("fucom", "fcom2", modifiers=[0xDD, 0xE0]) +add_insn("fucomp", "fcom2", modifiers=[0xDD, 0xE8]) + +# +# arithmetic +# +add_group("farith", + suffix="s", + cpu=["FPU"], + modifiers=["Gap", "Gap", "SpAdd"], + opcode=[0xD8], + spare=0, + operands=[Operand(type="Mem", size=32, dest="EA")]) +add_group("farith", + suffix="l", + cpu=["FPU"], + modifiers=["Gap", "Gap", "SpAdd"], + opcode=[0xDC], + spare=0, + operands=[Operand(type="Mem", size=64, dest="EA")]) +add_group("farith", + cpu=["FPU"], + modifiers=["Gap", "Op1Add"], + opcode=[0xD8, 0x00], + operands=[Operand(type="Reg", size=80, dest="Op1Add")]) +add_group("farith", + cpu=["FPU"], + modifiers=["Gap", "Op1Add"], + opcode=[0xD8, 0x00], + operands=[Operand(type="ST0", size=80, dest=None), + Operand(type="Reg", size=80, dest="Op1Add")]) +add_group("farith", + cpu=["FPU"], + modifiers=["Op1Add"], + opcode=[0xDC, 0x00], + operands=[Operand(type="Reg", size=80, tmod="To", dest="Op1Add")]) +add_group("farith", + cpu=["FPU"], + parsers=["nasm"], + modifiers=["Op1Add"], + opcode=[0xDC, 0x00], + operands=[Operand(type="Reg", size=80, dest="Op1Add"), + Operand(type="ST0", size=80, dest=None)]) +add_group("farith", + cpu=["FPU"], + parsers=["gas"], + modifiers=["Gap", "Op1Add"], + opcode=[0xDC, 0x00], + operands=[Operand(type="Reg", size=80, dest="Op1Add"), + Operand(type="ST0", size=80, dest=None)]) + +add_insn("fadd", "farith", modifiers=[0xC0, 0xC0, 0]) +add_insn("fsub", "farith", modifiers=[0xE8, 0xE0, 4]) +add_insn("fsubr", "farith", modifiers=[0xE0, 0xE8, 5]) +add_insn("fmul", "farith", modifiers=[0xC8, 0xC8, 1]) +add_insn("fdiv", "farith", modifiers=[0xF8, 0xF0, 6]) +add_insn("fdivr", "farith", modifiers=[0xF0, 0xF8, 7]) + +add_group("farithp", + cpu=["FPU"], + modifiers=["Op1Add"], + opcode=[0xDE, 0x01], + operands=[]) +add_group("farithp", + cpu=["FPU"], + modifiers=["Op1Add"], + opcode=[0xDE, 0x00], + operands=[Operand(type="Reg", size=80, dest="Op1Add")]) +add_group("farithp", + cpu=["FPU"], + modifiers=["Op1Add"], + opcode=[0xDE, 0x00], + operands=[Operand(type="Reg", size=80, dest="Op1Add"), + Operand(type="ST0", size=80, dest=None)]) + +add_insn("faddp", "farithp", modifiers=[0xC0]) +add_insn("fsubp", "farithp", parser="nasm", modifiers=[0xE8]) +add_insn("fsubp", "farithp", parser="gas", modifiers=[0xE0]) +add_insn("fsubrp", "farithp", parser="nasm", modifiers=[0xE0]) +add_insn("fsubrp", "farithp", parser="gas", modifiers=[0xE8]) +add_insn("fmulp", "farithp", modifiers=[0xC8]) +add_insn("fdivp", "farithp", parser="nasm", modifiers=[0xF8]) +add_insn("fdivp", "farithp", parser="gas", modifiers=[0xF0]) +add_insn("fdivrp", "farithp", parser="nasm", modifiers=[0xF0]) +add_insn("fdivrp", "farithp", parser="gas", modifiers=[0xF8]) + +# +# integer arith/store wo pop/compare +# +add_group("fiarith", + suffix="s", + cpu=["FPU"], + modifiers=["SpAdd", "Op0Add"], + opcode=[0x04], + spare=0, + operands=[Operand(type="Mem", size=16, dest="EA")]) +add_group("fiarith", + suffix="l", + cpu=["FPU"], + modifiers=["SpAdd", "Op0Add"], + opcode=[0x00], + spare=0, + operands=[Operand(type="Mem", size=32, dest="EA")]) + +add_insn("fist", "fiarith", modifiers=[2, 0xDB]) +add_insn("ficom", "fiarith", modifiers=[2, 0xDA]) +add_insn("ficomp", "fiarith", modifiers=[3, 0xDA]) +add_insn("fiadd", "fiarith", modifiers=[0, 0xDA]) +add_insn("fisub", "fiarith", modifiers=[4, 0xDA]) +add_insn("fisubr", "fiarith", modifiers=[5, 0xDA]) +add_insn("fimul", "fiarith", modifiers=[1, 0xDA]) +add_insn("fidiv", "fiarith", modifiers=[6, 0xDA]) +add_insn("fidivr", "fiarith", modifiers=[7, 0xDA]) + +# +# processor control +# +add_group("fldnstcw", + suffix="w", + cpu=["FPU"], + modifiers=["SpAdd"], + opcode=[0xD9], + spare=0, + operands=[Operand(type="Mem", size=16, relaxed=True, dest="EA")]) + +add_insn("fldcw", "fldnstcw", modifiers=[5]) +add_insn("fnstcw", "fldnstcw", modifiers=[7]) + +add_group("fstcw", + suffix="w", + cpu=["FPU"], + opcode=[0x9B, 0xD9], + spare=7, + operands=[Operand(type="Mem", size=16, relaxed=True, dest="EA")]) + +add_insn("fstcw", "fstcw") + +add_group("fnstsw", + suffix="w", + cpu=["FPU"], + opcode=[0xDD], + spare=7, + operands=[Operand(type="Mem", size=16, relaxed=True, dest="EA")]) +add_group("fnstsw", + suffix="w", + cpu=["FPU"], + opcode=[0xDF, 0xE0], + operands=[Operand(type="Areg", size=16, dest=None)]) + +add_insn("fnstsw", "fnstsw") + +add_group("fstsw", + suffix="w", + cpu=["FPU"], + opcode=[0x9B, 0xDD], + spare=7, + operands=[Operand(type="Mem", size=16, relaxed=True, dest="EA")]) +add_group("fstsw", + suffix="w", + cpu=["FPU"], + opcode=[0x9B, 0xDF, 0xE0], + operands=[Operand(type="Areg", size=16, dest=None)]) + +add_insn("fstsw", "fstsw") + +add_group("ffree", + cpu=["FPU"], + modifiers=["Op0Add"], + opcode=[0x00, 0xC0], + operands=[Operand(type="Reg", size=80, dest="Op1Add")]) + +add_insn("ffree", "ffree", modifiers=[0xDD]) +add_insn("ffreep", "ffree", modifiers=[0xDF], cpu=["686", "FPU", "Undoc"]) + +##################################################################### +# 486 extensions +##################################################################### +add_group("bswap", + suffix="l", + cpu=["486"], + opersize=32, + opcode=[0x0F, 0xC8], + operands=[Operand(type="Reg", size=32, dest="Op1Add")]) +add_group("bswap", + suffix="q", + opersize=64, + opcode=[0x0F, 0xC8], + operands=[Operand(type="Reg", size=64, dest="Op1Add")]) + +add_insn("bswap", "bswap") + +for sfx, sz in zip("bwlq", [8, 16, 32, 64]): + add_group("cmpxchgxadd", + suffix=sfx, + cpu=["486"], + modifiers=["Op1Add"], + opersize=sz, + opcode=[0x0F, 0x00+(sz!=8)], + operands=[Operand(type="RM", size=sz, relaxed=True, dest="EA"), + Operand(type="Reg", size=sz, dest="Spare")]) + +add_insn("xadd", "cmpxchgxadd", modifiers=[0xC0]) +add_insn("cmpxchg", "cmpxchgxadd", modifiers=[0xB0]) +add_insn("cmpxchg486", "cmpxchgxadd", parser="nasm", modifiers=[0xA6], + cpu=["486", "Undoc"]) + +add_insn("invd", "twobyte", modifiers=[0x0F, 0x08], cpu=["486", "Priv"]) +add_insn("wbinvd", "twobyte", modifiers=[0x0F, 0x09], cpu=["486", "Priv"]) +add_insn("invlpg", "twobytemem", modifiers=[7, 0x0F, 0x01], + cpu=["486", "Priv"]) + +##################################################################### +# 586+ and late 486 extensions +##################################################################### +add_insn("cpuid", "twobyte", modifiers=[0x0F, 0xA2], cpu=["486"]) + +##################################################################### +# Pentium extensions +##################################################################### +add_insn("wrmsr", "twobyte", modifiers=[0x0F, 0x30], cpu=["586", "Priv"]) +add_insn("rdtsc", "twobyte", modifiers=[0x0F, 0x31], cpu=["586"]) +add_insn("rdmsr", "twobyte", modifiers=[0x0F, 0x32], cpu=["586", "Priv"]) + +add_group("cmpxchg8b", + suffix="q", + cpu=["586"], + opcode=[0x0F, 0xC7], + spare=1, + operands=[Operand(type="Mem", size=64, relaxed=True, dest="EA")]) + +add_insn("cmpxchg8b", "cmpxchg8b") + +##################################################################### +# Pentium II/Pentium Pro extensions +##################################################################### +add_insn("sysenter", "twobyte", modifiers=[0x0F, 0x34], cpu=["686"], + not64=True) +add_insn("sysexit", "twobyte", modifiers=[0x0F, 0x35], cpu=["686", "Priv"], + not64=True) +for sfx in [None, "q"]: + add_insn("fxsave"+(sfx or ""), "twobytemem", suffix=sfx, + modifiers=[0, 0x0F, 0xAE], cpu=["686", "FPU"]) + add_insn("fxrstor"+(sfx or ""), "twobytemem", suffix=sfx, + modifiers=[1, 0x0F, 0xAE], cpu=["686", "FPU"]) +add_insn("rdpmc", "twobyte", modifiers=[0x0F, 0x33], cpu=["686"]) +add_insn("ud2", "twobyte", modifiers=[0x0F, 0x0B], cpu=["286"]) +add_insn("ud1", "twobyte", modifiers=[0x0F, 0xB9], cpu=["286", "Undoc"]) + +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("cmovcc", + suffix=sfx, + cpu=["686"], + modifiers=["Op1Add"], + opersize=sz, + opcode=[0x0F, 0x40], + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="RM", size=sz, relaxed=True, dest="EA")]) + +add_insn("cmovo", "cmovcc", modifiers=[0x00]) +add_insn("cmovno", "cmovcc", modifiers=[0x01]) +add_insn("cmovb", "cmovcc", modifiers=[0x02]) +add_insn("cmovc", "cmovcc", modifiers=[0x02]) +add_insn("cmovnae", "cmovcc", modifiers=[0x02]) +add_insn("cmovnb", "cmovcc", modifiers=[0x03]) +add_insn("cmovnc", "cmovcc", modifiers=[0x03]) +add_insn("cmovae", "cmovcc", modifiers=[0x03]) +add_insn("cmove", "cmovcc", modifiers=[0x04]) +add_insn("cmovz", "cmovcc", modifiers=[0x04]) +add_insn("cmovne", "cmovcc", modifiers=[0x05]) +add_insn("cmovnz", "cmovcc", modifiers=[0x05]) +add_insn("cmovbe", "cmovcc", modifiers=[0x06]) +add_insn("cmovna", "cmovcc", modifiers=[0x06]) +add_insn("cmovnbe", "cmovcc", modifiers=[0x07]) +add_insn("cmova", "cmovcc", modifiers=[0x07]) +add_insn("cmovs", "cmovcc", modifiers=[0x08]) +add_insn("cmovns", "cmovcc", modifiers=[0x09]) +add_insn("cmovp", "cmovcc", modifiers=[0x0A]) +add_insn("cmovpe", "cmovcc", modifiers=[0x0A]) +add_insn("cmovnp", "cmovcc", modifiers=[0x0B]) +add_insn("cmovpo", "cmovcc", modifiers=[0x0B]) +add_insn("cmovl", "cmovcc", modifiers=[0x0C]) +add_insn("cmovnge", "cmovcc", modifiers=[0x0C]) +add_insn("cmovnl", "cmovcc", modifiers=[0x0D]) +add_insn("cmovge", "cmovcc", modifiers=[0x0D]) +add_insn("cmovle", "cmovcc", modifiers=[0x0E]) +add_insn("cmovng", "cmovcc", modifiers=[0x0E]) +add_insn("cmovnle", "cmovcc", modifiers=[0x0F]) +add_insn("cmovg", "cmovcc", modifiers=[0x0F]) + +add_group("fcmovcc", + cpu=["FPU", "686"], + modifiers=["Op0Add", "Op1Add"], + opcode=[0x00, 0x00], + operands=[Operand(type="ST0", size=80, dest=None), + Operand(type="Reg", size=80, dest="Op1Add")]) + +add_insn("fcmovb", "fcmovcc", modifiers=[0xDA, 0xC0]) +add_insn("fcmove", "fcmovcc", modifiers=[0xDA, 0xC8]) +add_insn("fcmovbe", "fcmovcc", modifiers=[0xDA, 0xD0]) +add_insn("fcmovu", "fcmovcc", modifiers=[0xDA, 0xD8]) +add_insn("fcmovnb", "fcmovcc", modifiers=[0xDB, 0xC0]) +add_insn("fcmovne", "fcmovcc", modifiers=[0xDB, 0xC8]) +add_insn("fcmovnbe", "fcmovcc", modifiers=[0xDB, 0xD0]) +add_insn("fcmovnu", "fcmovcc", modifiers=[0xDB, 0xD8]) + +add_insn("fcomi", "fcom2", modifiers=[0xDB, 0xF0], cpu=["686", "FPU"]) +add_insn("fucomi", "fcom2", modifiers=[0xDB, 0xE8], cpu=["686", "FPU"]) +add_insn("fcomip", "fcom2", modifiers=[0xDF, 0xF0], cpu=["686", "FPU"]) +add_insn("fucomip", "fcom2", modifiers=[0xDF, 0xE8], cpu=["686", "FPU"]) + +##################################################################### +# Pentium4 extensions +##################################################################### +add_group("movnti", + suffix="l", + cpu=["P4"], + opcode=[0x0F, 0xC3], + operands=[Operand(type="Mem", size=32, relaxed=True, dest="EA"), + Operand(type="Reg", size=32, dest="Spare")]) +add_group("movnti", + suffix="q", + cpu=["P4"], + opersize=64, + opcode=[0x0F, 0xC3], + operands=[Operand(type="Mem", size=64, relaxed=True, dest="EA"), + Operand(type="Reg", size=64, dest="Spare")]) + +add_insn("movnti", "movnti") + +add_group("clflush", + cpu=["P3"], + opcode=[0x0F, 0xAE], + spare=7, + operands=[Operand(type="Mem", size=8, relaxed=True, dest="EA")]) + +add_insn("clflush", "clflush") + +add_insn("lfence", "threebyte", modifiers=[0x0F, 0xAE, 0xE8], cpu=["P3"]) +add_insn("mfence", "threebyte", modifiers=[0x0F, 0xAE, 0xF0], cpu=["P3"]) +add_insn("pause", "onebyte_prefix", modifiers=[0xF3, 0x90], cpu=["P4"]) + +##################################################################### +# MMX/SSE2 instructions +##################################################################### + +add_insn("emms", "twobyte", modifiers=[0x0F, 0x77], cpu=["MMX"]) + +# +# movd +# +add_group("movd", + cpu=["MMX"], + opcode=[0x0F, 0x6E], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="RM", size=32, relaxed=True, dest="EA")]) +add_group("movd", + cpu=["MMX"], + opersize=64, + opcode=[0x0F, 0x6E], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="RM", size=64, relaxed=True, dest="EA")]) +add_group("movd", + cpu=["MMX"], + opcode=[0x0F, 0x7E], + operands=[Operand(type="RM", size=32, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=64, dest="Spare")]) +add_group("movd", + cpu=["MMX"], + opersize=64, + opcode=[0x0F, 0x7E], + operands=[Operand(type="RM", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=64, dest="Spare")]) +add_group("movd", + cpu=["SSE2"], + prefix=0x66, + opcode=[0x0F, 0x6E], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="RM", size=32, relaxed=True, dest="EA")]) +add_group("movd", + cpu=["SSE2"], + opersize=64, + prefix=0x66, + opcode=[0x0F, 0x6E], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="RM", size=64, relaxed=True, dest="EA")]) +add_group("movd", + cpu=["SSE2"], + prefix=0x66, + opcode=[0x0F, 0x7E], + operands=[Operand(type="RM", size=32, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare")]) +add_group("movd", + cpu=["SSE2"], + opersize=64, + prefix=0x66, + opcode=[0x0F, 0x7E], + operands=[Operand(type="RM", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare")]) + +add_insn("movd", "movd") + +# +# movq +# + +# MMX forms +add_group("movq", + cpu=["MMX"], + parsers=["nasm"], + opcode=[0x0F, 0x6F], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="SIMDRM", size=64, relaxed=True, dest="EA")]) +add_group("movq", + cpu=["MMX"], + parsers=["nasm"], + opersize=64, + opcode=[0x0F, 0x6E], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="RM", size=64, relaxed=True, dest="EA")]) +add_group("movq", + cpu=["MMX"], + parsers=["nasm"], + opcode=[0x0F, 0x7F], + operands=[Operand(type="SIMDRM", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=64, dest="Spare")]) +add_group("movq", + cpu=["MMX"], + parsers=["nasm"], + opersize=64, + opcode=[0x0F, 0x7E], + operands=[Operand(type="RM", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=64, dest="Spare")]) + +# SSE2 forms +add_group("movq", + cpu=["SSE2"], + parsers=["nasm"], + prefix=0xF3, + opcode=[0x0F, 0x7E], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("movq", + cpu=["SSE2"], + parsers=["nasm"], + prefix=0xF3, + opcode=[0x0F, 0x7E], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=64, relaxed=True, dest="EA")]) +add_group("movq", + cpu=["SSE2"], + parsers=["nasm"], + opersize=64, + prefix=0x66, + opcode=[0x0F, 0x6E], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="RM", size=64, relaxed=True, dest="EA")]) +add_group("movq", + cpu=["SSE2"], + parsers=["nasm"], + prefix=0x66, + opcode=[0x0F, 0xD6], + operands=[Operand(type="SIMDRM", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare")]) +add_group("movq", + cpu=["SSE2"], + parsers=["nasm"], + opersize=64, + prefix=0x66, + opcode=[0x0F, 0x7E], + operands=[Operand(type="RM", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare")]) + +add_insn("movq", "movq") + +add_group("mmxsse2", + cpu=["MMX"], + modifiers=["Op1Add"], + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="SIMDRM", size=64, relaxed=True, dest="EA")]) +add_group("mmxsse2", + cpu=["SSE2"], + modifiers=["Op1Add"], + prefix=0x66, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) + +add_insn("packssdw", "mmxsse2", modifiers=[0x6B]) +add_insn("packsswb", "mmxsse2", modifiers=[0x63]) +add_insn("packuswb", "mmxsse2", modifiers=[0x67]) +add_insn("paddb", "mmxsse2", modifiers=[0xFC]) +add_insn("paddw", "mmxsse2", modifiers=[0xFD]) +add_insn("paddd", "mmxsse2", modifiers=[0xFE]) +add_insn("paddq", "mmxsse2", modifiers=[0xD4]) +add_insn("paddsb", "mmxsse2", modifiers=[0xEC]) +add_insn("paddsw", "mmxsse2", modifiers=[0xED]) +add_insn("paddusb", "mmxsse2", modifiers=[0xDC]) +add_insn("paddusw", "mmxsse2", modifiers=[0xDD]) +add_insn("pand", "mmxsse2", modifiers=[0xDB]) +add_insn("pandn", "mmxsse2", modifiers=[0xDF]) +add_insn("pcmpeqb", "mmxsse2", modifiers=[0x74]) +add_insn("pcmpeqw", "mmxsse2", modifiers=[0x75]) +add_insn("pcmpeqd", "mmxsse2", modifiers=[0x76]) +add_insn("pcmpgtb", "mmxsse2", modifiers=[0x64]) +add_insn("pcmpgtw", "mmxsse2", modifiers=[0x65]) +add_insn("pcmpgtd", "mmxsse2", modifiers=[0x66]) +add_insn("pmaddwd", "mmxsse2", modifiers=[0xF5]) +add_insn("pmulhw", "mmxsse2", modifiers=[0xE5]) +add_insn("pmullw", "mmxsse2", modifiers=[0xD5]) +add_insn("por", "mmxsse2", modifiers=[0xEB]) +add_insn("psubb", "mmxsse2", modifiers=[0xF8]) +add_insn("psubw", "mmxsse2", modifiers=[0xF9]) +add_insn("psubd", "mmxsse2", modifiers=[0xFA]) +add_insn("psubq", "mmxsse2", modifiers=[0xFB]) +add_insn("psubsb", "mmxsse2", modifiers=[0xE8]) +add_insn("psubsw", "mmxsse2", modifiers=[0xE9]) +add_insn("psubusb", "mmxsse2", modifiers=[0xD8]) +add_insn("psubusw", "mmxsse2", modifiers=[0xD9]) +add_insn("punpckhbw", "mmxsse2", modifiers=[0x68]) +add_insn("punpckhwd", "mmxsse2", modifiers=[0x69]) +add_insn("punpckhdq", "mmxsse2", modifiers=[0x6A]) +add_insn("punpcklbw", "mmxsse2", modifiers=[0x60]) +add_insn("punpcklwd", "mmxsse2", modifiers=[0x61]) +add_insn("punpckldq", "mmxsse2", modifiers=[0x62]) +add_insn("pxor", "mmxsse2", modifiers=[0xEF]) + +# AVX versions don't support the MMX registers +add_insn("vpackssdw", "xmm_xmm128_256avx2", modifiers=[0x66, 0x6B, VEXL0], avx=True) +add_insn("vpacksswb", "xmm_xmm128_256avx2", modifiers=[0x66, 0x63, VEXL0], avx=True) +add_insn("vpackuswb", "xmm_xmm128_256avx2", modifiers=[0x66, 0x67, VEXL0], avx=True) +add_insn("vpaddb", "xmm_xmm128_256avx2", modifiers=[0x66, 0xFC, VEXL0], avx=True) +add_insn("vpaddw", "xmm_xmm128_256avx2", modifiers=[0x66, 0xFD, VEXL0], avx=True) +add_insn("vpaddd", "xmm_xmm128_256avx2", modifiers=[0x66, 0xFE, VEXL0], avx=True) +add_insn("vpaddq", "xmm_xmm128_256avx2", modifiers=[0x66, 0xD4, VEXL0], avx=True) +add_insn("vpaddsb", "xmm_xmm128_256avx2", modifiers=[0x66, 0xEC, VEXL0], avx=True) +add_insn("vpaddsw", "xmm_xmm128_256avx2", modifiers=[0x66, 0xED, VEXL0], avx=True) +add_insn("vpaddusb", "xmm_xmm128_256avx2", modifiers=[0x66, 0xDC, VEXL0], avx=True) +add_insn("vpaddusw", "xmm_xmm128_256avx2", modifiers=[0x66, 0xDD, VEXL0], avx=True) +add_insn("vpand", "xmm_xmm128_256avx2", modifiers=[0x66, 0xDB, VEXL0], avx=True) +add_insn("vpandn", "xmm_xmm128_256avx2", modifiers=[0x66, 0xDF, VEXL0], avx=True) +add_insn("vpcmpeqb", "xmm_xmm128_256avx2", modifiers=[0x66, 0x74, VEXL0], avx=True) +add_insn("vpcmpeqw", "xmm_xmm128_256avx2", modifiers=[0x66, 0x75, VEXL0], avx=True) +add_insn("vpcmpeqd", "xmm_xmm128_256avx2", modifiers=[0x66, 0x76, VEXL0], avx=True) +add_insn("vpcmpgtb", "xmm_xmm128_256avx2", modifiers=[0x66, 0x64, VEXL0], avx=True) +add_insn("vpcmpgtw", "xmm_xmm128_256avx2", modifiers=[0x66, 0x65, VEXL0], avx=True) +add_insn("vpcmpgtd", "xmm_xmm128_256avx2", modifiers=[0x66, 0x66, VEXL0], avx=True) +add_insn("vpmaddwd", "xmm_xmm128_256avx2", modifiers=[0x66, 0xF5, VEXL0], avx=True) +add_insn("vpmulhw", "xmm_xmm128_256avx2", modifiers=[0x66, 0xE5, VEXL0], avx=True) +add_insn("vpmullw", "xmm_xmm128_256avx2", modifiers=[0x66, 0xD5, VEXL0], avx=True) +add_insn("vpor", "xmm_xmm128_256avx2", modifiers=[0x66, 0xEB, VEXL0], avx=True) +add_insn("vpsubb", "xmm_xmm128_256avx2", modifiers=[0x66, 0xF8, VEXL0], avx=True) +add_insn("vpsubw", "xmm_xmm128_256avx2", modifiers=[0x66, 0xF9, VEXL0], avx=True) +add_insn("vpsubd", "xmm_xmm128_256avx2", modifiers=[0x66, 0xFA, VEXL0], avx=True) +add_insn("vpsubq", "xmm_xmm128_256avx2", modifiers=[0x66, 0xFB, VEXL0], avx=True) +add_insn("vpsubsb", "xmm_xmm128_256avx2", modifiers=[0x66, 0xE8, VEXL0], avx=True) +add_insn("vpsubsw", "xmm_xmm128_256avx2", modifiers=[0x66, 0xE9, VEXL0], avx=True) +add_insn("vpsubusb", "xmm_xmm128_256avx2", modifiers=[0x66, 0xD8, VEXL0], avx=True) +add_insn("vpsubusw", "xmm_xmm128_256avx2", modifiers=[0x66, 0xD9, VEXL0], avx=True) +add_insn("vpunpckhbw", "xmm_xmm128_256avx2", modifiers=[0x66, 0x68, VEXL0], avx=True) +add_insn("vpunpckhwd", "xmm_xmm128_256avx2", modifiers=[0x66, 0x69, VEXL0], avx=True) +add_insn("vpunpckhdq", "xmm_xmm128_256avx2", modifiers=[0x66, 0x6A, VEXL0], avx=True) +add_insn("vpunpcklbw", "xmm_xmm128_256avx2", modifiers=[0x66, 0x60, VEXL0], avx=True) +add_insn("vpunpcklwd", "xmm_xmm128_256avx2", modifiers=[0x66, 0x61, VEXL0], avx=True) +add_insn("vpunpckldq", "xmm_xmm128_256avx2", modifiers=[0x66, 0x62, VEXL0], avx=True) +add_insn("vpxor", "xmm_xmm128_256avx2", modifiers=[0x66, 0xEF, VEXL0], avx=True) + +add_group("pshift", + cpu=["MMX"], + modifiers=["Op1Add"], + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="SIMDRM", size=64, relaxed=True, dest="EA")]) +add_group("pshift", + cpu=["MMX"], + modifiers=["Gap", "Op1Add", "SpAdd"], + opcode=[0x0F, 0x00], + spare=0, + operands=[Operand(type="SIMDReg", size=64, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pshift", + cpu=["SSE2"], + modifiers=["Op1Add"], + prefix=0x66, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("pshift", + cpu=["SSE2"], + modifiers=["Gap", "Op1Add", "SpAdd"], + prefix=0x66, + opcode=[0x0F, 0x00], + spare=0, + operands=[Operand(type="SIMDReg", size=128, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("psllw", "pshift", modifiers=[0xF1, 0x71, 6]) +add_insn("pslld", "pshift", modifiers=[0xF2, 0x72, 6]) +add_insn("psllq", "pshift", modifiers=[0xF3, 0x73, 6]) +add_insn("psraw", "pshift", modifiers=[0xE1, 0x71, 4]) +add_insn("psrad", "pshift", modifiers=[0xE2, 0x72, 4]) +add_insn("psrlw", "pshift", modifiers=[0xD1, 0x71, 2]) +add_insn("psrld", "pshift", modifiers=[0xD2, 0x72, 2]) +add_insn("psrlq", "pshift", modifiers=[0xD3, 0x73, 2]) + +# Ran out of modifiers, so AVX has to be separate +for cpu, sz in zip(["AVX", "AVX2"], [128, 256]): + add_group("vpshift", + cpu=[cpu], + modifiers=["Op1Add"], + vex=sz, + prefix=0x66, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=sz, dest="SpareVEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) + add_group("vpshift", + cpu=[cpu], + modifiers=["Gap", "Op1Add", "SpAdd"], + vex=sz, + prefix=0x66, + opcode=[0x0F, 0x00], + spare=0, + operands=[Operand(type="SIMDReg", size=sz, dest="EAVEX"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + add_group("vpshift", + cpu=[cpu], + modifiers=["Op1Add"], + vex=sz, + prefix=0x66, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=sz, dest="Spare"), + Operand(type="SIMDReg", size=sz, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) + add_group("vpshift", + cpu=[cpu], + modifiers=["Gap", "Op1Add", "SpAdd"], + vex=sz, + prefix=0x66, + opcode=[0x0F, 0x00], + spare=0, + operands=[Operand(type="SIMDReg", size=sz, dest="VEX"), + Operand(type="SIMDReg", size=sz, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("vpsllw", "vpshift", modifiers=[0xF1, 0x71, 6]) +add_insn("vpslld", "vpshift", modifiers=[0xF2, 0x72, 6]) +add_insn("vpsllq", "vpshift", modifiers=[0xF3, 0x73, 6]) +add_insn("vpsraw", "vpshift", modifiers=[0xE1, 0x71, 4]) +add_insn("vpsrad", "vpshift", modifiers=[0xE2, 0x72, 4]) +add_insn("vpsrlw", "vpshift", modifiers=[0xD1, 0x71, 2]) +add_insn("vpsrld", "vpshift", modifiers=[0xD2, 0x72, 2]) +add_insn("vpsrlq", "vpshift", modifiers=[0xD3, 0x73, 2]) + +# +# PIII (Katmai) new instructions / SIMD instructions +# +add_insn("pavgb", "mmxsse2", modifiers=[0xE0], cpu=["P3", "MMX"]) +add_insn("pavgw", "mmxsse2", modifiers=[0xE3], cpu=["P3", "MMX"]) +add_insn("pmaxsw", "mmxsse2", modifiers=[0xEE], cpu=["P3", "MMX"]) +add_insn("pmaxub", "mmxsse2", modifiers=[0xDE], cpu=["P3", "MMX"]) +add_insn("pminsw", "mmxsse2", modifiers=[0xEA], cpu=["P3", "MMX"]) +add_insn("pminub", "mmxsse2", modifiers=[0xDA], cpu=["P3", "MMX"]) +add_insn("pmulhuw", "mmxsse2", modifiers=[0xE4], cpu=["P3", "MMX"]) +add_insn("psadbw", "mmxsse2", modifiers=[0xF6], cpu=["P3", "MMX"]) + +# AVX versions don't support MMX register +add_insn("vpavgb", "xmm_xmm128_256avx2", modifiers=[0x66, 0xE0, VEXL0], avx=True) +add_insn("vpavgw", "xmm_xmm128_256avx2", modifiers=[0x66, 0xE3, VEXL0], avx=True) +add_insn("vpmaxsw", "xmm_xmm128_256avx2", modifiers=[0x66, 0xEE, VEXL0], avx=True) +add_insn("vpmaxub", "xmm_xmm128_256avx2", modifiers=[0x66, 0xDE, VEXL0], avx=True) +add_insn("vpminsw", "xmm_xmm128_256avx2", modifiers=[0x66, 0xEA, VEXL0], avx=True) +add_insn("vpminub", "xmm_xmm128_256avx2", modifiers=[0x66, 0xDA, VEXL0], avx=True) +add_insn("vpmulhuw", "xmm_xmm128_256avx2", modifiers=[0x66, 0xE4, VEXL0], avx=True) +add_insn("vpsadbw", "xmm_xmm128_256avx2", modifiers=[0x66, 0xF6, VEXL0], avx=True) + +add_insn("prefetchnta", "twobytemem", modifiers=[0, 0x0F, 0x18], cpu=["P3"]) +add_insn("prefetcht0", "twobytemem", modifiers=[1, 0x0F, 0x18], cpu=["P3"]) +add_insn("prefetcht1", "twobytemem", modifiers=[2, 0x0F, 0x18], cpu=["P3"]) +add_insn("prefetcht2", "twobytemem", modifiers=[3, 0x0F, 0x18], cpu=["P3"]) + +add_insn("sfence", "threebyte", modifiers=[0x0F, 0xAE, 0xF8], cpu=["P3"]) + +add_group("xmm_xmm128_256", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("xmm_xmm128_256", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("xmm_xmm128_256", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=256, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="SpareVEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) +add_group("xmm_xmm128_256", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=256, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) + +# Same as above, except 256-bit version only available in AVX2 +add_group("xmm_xmm128_256avx2", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("xmm_xmm128_256avx2", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("xmm_xmm128_256avx2", + cpu=["AVX2"], + modifiers=["PreAdd", "Op1Add"], + vex=256, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="SpareVEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) +add_group("xmm_xmm128_256avx2", + cpu=["AVX2"], + modifiers=["PreAdd", "Op1Add"], + vex=256, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) + +# Version that does not allow YMM registers +add_group("xmm_xmm128", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("xmm_xmm128", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) + +add_insn("addps", "xmm_xmm128", modifiers=[0, 0x58]) +add_insn("andnps", "xmm_xmm128", modifiers=[0, 0x55]) +add_insn("andps", "xmm_xmm128", modifiers=[0, 0x54]) +add_insn("divps", "xmm_xmm128", modifiers=[0, 0x5E]) +add_insn("maxps", "xmm_xmm128", modifiers=[0, 0x5F]) +add_insn("minps", "xmm_xmm128", modifiers=[0, 0x5D]) +add_insn("mulps", "xmm_xmm128", modifiers=[0, 0x59]) +add_insn("orps", "xmm_xmm128", modifiers=[0, 0x56]) +add_insn("rcpps", "xmm_xmm128", modifiers=[0, 0x53]) +add_insn("rsqrtps", "xmm_xmm128", modifiers=[0, 0x52]) +add_insn("sqrtps", "xmm_xmm128", modifiers=[0, 0x51]) +add_insn("subps", "xmm_xmm128", modifiers=[0, 0x5C]) +add_insn("unpckhps", "xmm_xmm128", modifiers=[0, 0x15]) +add_insn("unpcklps", "xmm_xmm128", modifiers=[0, 0x14]) +add_insn("xorps", "xmm_xmm128", modifiers=[0, 0x57]) + +add_insn("vaddps", "xmm_xmm128_256", modifiers=[0, 0x58, VEXL0], avx=True) +add_insn("vandnps", "xmm_xmm128_256", modifiers=[0, 0x55, VEXL0], avx=True) +add_insn("vandps", "xmm_xmm128_256", modifiers=[0, 0x54, VEXL0], avx=True) +add_insn("vdivps", "xmm_xmm128_256", modifiers=[0, 0x5E, VEXL0], avx=True) +add_insn("vmaxps", "xmm_xmm128_256", modifiers=[0, 0x5F, VEXL0], avx=True) +add_insn("vminps", "xmm_xmm128_256", modifiers=[0, 0x5D, VEXL0], avx=True) +add_insn("vmulps", "xmm_xmm128_256", modifiers=[0, 0x59, VEXL0], avx=True) +add_insn("vorps", "xmm_xmm128_256", modifiers=[0, 0x56, VEXL0], avx=True) +# vrcpps, vrsqrtps, and vsqrtps don't add third operand +add_insn("vsubps", "xmm_xmm128_256", modifiers=[0, 0x5C, VEXL0], avx=True) +add_insn("vunpckhps", "xmm_xmm128_256", modifiers=[0, 0x15, VEXL0], avx=True) +add_insn("vunpcklps", "xmm_xmm128_256", modifiers=[0, 0x14, VEXL0], avx=True) +add_insn("vxorps", "xmm_xmm128_256", modifiers=[0, 0x57, VEXL0], avx=True) + +add_group("cvt_rx_xmm32", + suffix="l", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("cvt_rx_xmm32", + suffix="l", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="Mem", size=32, relaxed=True, dest="EA")]) +# REX +add_group("cvt_rx_xmm32", + suffix="q", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + opersize=64, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("cvt_rx_xmm32", + suffix="q", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + opersize=64, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="Mem", size=32, relaxed=True, dest="EA")]) + +add_insn("cvtss2si", "cvt_rx_xmm32", modifiers=[0xF3, 0x2D]) +add_insn("cvttss2si", "cvt_rx_xmm32", modifiers=[0xF3, 0x2C]) +add_insn("vcvtss2si", "cvt_rx_xmm32", modifiers=[0xF3, 0x2D, VEXL0], avx=True) +add_insn("vcvttss2si", "cvt_rx_xmm32", modifiers=[0xF3, 0x2C, VEXL0], avx=True) + +add_group("cvt_mm_xmm64", + cpu=["SSE"], + modifiers=["Op1Add"], + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("cvt_mm_xmm64", + cpu=["SSE"], + modifiers=["Op1Add"], + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="Mem", size=64, relaxed=True, dest="EA")]) + +add_insn("cvtps2pi", "cvt_mm_xmm64", modifiers=[0x2D]) +add_insn("cvttps2pi", "cvt_mm_xmm64", modifiers=[0x2C]) + +add_group("cvt_xmm_mm_ps", + cpu=["SSE"], + modifiers=["Op1Add"], + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=64, relaxed=True, dest="EA")]) + +add_insn("cvtpi2ps", "cvt_xmm_mm_ps", modifiers=[0x2A]) + +# Memory size can be relaxed only in BITS=32 case, where there's no +# ambiguity. +add_group("cvt_xmm_rmx", + suffix="l", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="RM", size=32, dest="EA")]) +add_group("cvt_xmm_rmx", + suffix="l", + cpu=["SSE"], + not64=True, + modifiers=["PreAdd", "Op1Add", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="RM", size=32, relaxed=True, dest="EA")]) +# REX +add_group("cvt_xmm_rmx", + suffix="q", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + opersize=64, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="RM", size=64, dest="EA")]) +add_group("cvt_xmm_rmx", + suffix="l", + cpu=["AVX"], + not64=True, + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="RM", size=32, relaxed=True, dest="EA")]) +add_group("cvt_xmm_rmx", + suffix="l", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="RM", size=32, dest="EA")]) +add_group("cvt_xmm_rmx", + suffix="q", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + opersize=64, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="RM", size=64, dest="EA")]) + +add_insn("cvtsi2ss", "cvt_xmm_rmx", modifiers=[0xF3, 0x2A]) +add_insn("vcvtsi2ss", "cvt_xmm_rmx", modifiers=[0xF3, 0x2A, VEXL0], avx=True) + +add_group("xmm_xmm32", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("xmm_xmm32", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="Mem", size=32, relaxed=True, dest="EA")]) +add_group("xmm_xmm32", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("xmm_xmm32", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="Mem", size=32, relaxed=True, dest="EA")]) + +add_insn("addss", "xmm_xmm32", modifiers=[0xF3, 0x58]) +add_insn("comiss", "xmm_xmm32", modifiers=[0, 0x2F]) +add_insn("divss", "xmm_xmm32", modifiers=[0xF3, 0x5E]) +add_insn("maxss", "xmm_xmm32", modifiers=[0xF3, 0x5F]) +add_insn("minss", "xmm_xmm32", modifiers=[0xF3, 0x5D]) +add_insn("mulss", "xmm_xmm32", modifiers=[0xF3, 0x59]) +add_insn("rcpss", "xmm_xmm32", modifiers=[0xF3, 0x53]) +add_insn("rsqrtss", "xmm_xmm32", modifiers=[0xF3, 0x52]) +add_insn("sqrtss", "xmm_xmm32", modifiers=[0xF3, 0x51]) +add_insn("subss", "xmm_xmm32", modifiers=[0xF3, 0x5C]) +add_insn("ucomiss", "xmm_xmm32", modifiers=[0, 0x2E]) + +add_insn("vaddss", "xmm_xmm32", modifiers=[0xF3, 0x58, VEXL0], avx=True) +# vcomiss and vucomiss are only two operand +add_insn("vdivss", "xmm_xmm32", modifiers=[0xF3, 0x5E, VEXL0], avx=True) +add_insn("vmaxss", "xmm_xmm32", modifiers=[0xF3, 0x5F, VEXL0], avx=True) +add_insn("vminss", "xmm_xmm32", modifiers=[0xF3, 0x5D, VEXL0], avx=True) +add_insn("vmulss", "xmm_xmm32", modifiers=[0xF3, 0x59, VEXL0], avx=True) +add_insn("vrcpss", "xmm_xmm32", modifiers=[0xF3, 0x53, VEXL0], avx=True) +add_insn("vrsqrtss", "xmm_xmm32", modifiers=[0xF3, 0x52, VEXL0], avx=True) +add_insn("vsqrtss", "xmm_xmm32", modifiers=[0xF3, 0x51, VEXL0], avx=True) +add_insn("vsubss", "xmm_xmm32", modifiers=[0xF3, 0x5C, VEXL0], avx=True) + +add_group("ssecmp_128", + cpu=["SSE"], + modifiers=["Imm8", "PreAdd", "SetVEX"], + opcode=[0x0F, 0xC2], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("ssecmp_128", + cpu=["AVX"], + modifiers=["Imm8", "PreAdd"], + vex=128, + opcode=[0x0F, 0xC2], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("ssecmp_128", + cpu=["AVX"], + modifiers=["Imm8", "PreAdd"], + vex=256, + opcode=[0x0F, 0xC2], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) + +add_group("ssecmp_32", + cpu=["SSE"], + modifiers=["Imm8", "PreAdd", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0xC2], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("ssecmp_32", + cpu=["SSE"], + modifiers=["Imm8", "PreAdd", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0xC2], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="Mem", size=32, relaxed=True, dest="EA")]) +add_group("ssecmp_32", + cpu=["AVX"], + modifiers=["Imm8", "PreAdd"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0xC2], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("ssecmp_32", + cpu=["AVX"], + modifiers=["Imm8", "PreAdd"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0xC2], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="Mem", size=32, relaxed=True, dest="EA")]) + +ssecoms = [(0x0, "eq"), + (0x1, "lt"), + (0x2, "le"), + (0x3, "unord"), + (0x4, "neq"), + (0x5, "nlt"), + (0x6, "nle"), + (0x7, "ord")] +for ib, cc in ssecoms: + add_insn("cmp"+cc+"ps", "ssecmp_128", modifiers=[ib]) + add_insn("cmp"+cc+"ss", "ssecmp_32", modifiers=[ib, 0xF3]) + +avxcoms = [(0x00, "eq"), + (0x01, "lt"), + (0x02, "le"), + (0x03, "unord"), + (0x04, "neq"), + (0x05, "nlt"), + (0x06, "nle"), + (0x07, "ord"), + (0x08, "eq_uq"), + (0x09, "nge"), + (0x0a, "ngt"), + (0x0b, "false"), + (0x0c, "neq_oq"), + (0x0d, "ge"), + (0x0e, "gt"), + (0x0f, "true"), + (0x10, "eq_os"), + (0x11, "lt_oq"), + (0x12, "le_oq"), + (0x13, "unord_s"), + (0x14, "neq_us"), + (0x15, "nlt_uq"), + (0x16, "nle_uq"), + (0x17, "ord_s"), + (0x18, "eq_us"), + (0x19, "nge_uq"), + (0x1a, "ngt_uq"), + (0x1b, "false_os"), + (0x1c, "neq_os"), + (0x1d, "ge_oq"), + (0x1e, "gt_oq"), + (0x1f, "true_us")] +for ib, cc in avxcoms: + add_insn("vcmp"+cc+"ps", "ssecmp_128", modifiers=[ib, 0, VEXL0], avx=True) + add_insn("vcmp"+cc+"ss", "ssecmp_32", modifiers=[ib, 0xF3, VEXL0], avx=True) + +add_group("xmm_xmm128_imm", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("cmpps", "xmm_xmm128_imm", modifiers=[0, 0xC2]) +add_insn("shufps", "xmm_xmm128_imm", modifiers=[0, 0xC6]) + +# YMM register AVX2 version of above +add_group("xmm_xmm128_imm_256avx2", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("xmm_xmm128_imm_256avx2", + cpu=["AVX2"], + modifiers=["PreAdd", "Op1Add"], + vex=256, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +# YMM register and 4-operand version of above +add_group("xmm_xmm128_imm_256", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("xmm_xmm128_imm_256", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("xmm_xmm128_imm_256", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=256, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("vcmpps", "xmm_xmm128_imm_256", modifiers=[0, 0xC2, VEXL0], avx=True) +add_insn("vshufps", "xmm_xmm128_imm_256", modifiers=[0, 0xC6, VEXL0], avx=True) + +add_group("xmm_xmm32_imm", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDReg", size=128, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("xmm_xmm32_imm", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="Mem", size=32, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("xmm_xmm32_imm", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("xmm_xmm32_imm", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="Mem", size=32, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("cmpss", "xmm_xmm32_imm", modifiers=[0xF3, 0xC2]) +add_insn("vcmpss", "xmm_xmm32_imm", modifiers=[0xF3, 0xC2, VEXL0], avx=True) + +add_group("ldstmxcsr", + cpu=["SSE"], + modifiers=["SpAdd", "SetVEX"], + opcode=[0x0F, 0xAE], + spare=0, + operands=[Operand(type="Mem", size=32, relaxed=True, dest="EA")]) + +add_insn("ldmxcsr", "ldstmxcsr", modifiers=[2]) +add_insn("stmxcsr", "ldstmxcsr", modifiers=[3]) +add_insn("vldmxcsr", "ldstmxcsr", modifiers=[2, VEXL0], avx=True) +add_insn("vstmxcsr", "ldstmxcsr", modifiers=[3, VEXL0], avx=True) + +add_group("maskmovq", + cpu=["MMX", "P3"], + opcode=[0x0F, 0xF7], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="SIMDReg", size=64, dest="EA")]) + +add_insn("maskmovq", "maskmovq") + +# Too many modifiers, so can't reuse first two cases for AVX version +# Just repeat and disable first two with noavx. +add_group("movau", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add"], + notavx=True, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("movau", + cpu=["SSE"], + notavx=True, + modifiers=["PreAdd", "Op1Add", "Op1Add"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare")]) +add_group("movau", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("movau", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add", "Op1Add"], + vex=128, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare")]) +add_group("movau", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=256, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) +add_group("movau", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add", "Op1Add"], + vex=256, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=256, dest="Spare")]) + +add_insn("movaps", "movau", modifiers=[0, 0x28, 0x01]) +add_insn("movups", "movau", modifiers=[0, 0x10, 0x01]) +add_insn("vmovaps", "movau", modifiers=[0, 0x28, 0x01], avx=True) +add_insn("vmovups", "movau", modifiers=[0, 0x10, 0x01], avx=True) + +add_group("movhllhps", + cpu=["SSE"], + modifiers=["Op1Add", "SetVEX"], + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("movhllhps", + cpu=["AVX"], + modifiers=["Op1Add"], + vex=128, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="EA")]) + +add_insn("movhlps", "movhllhps", modifiers=[0x12]) +add_insn("movlhps", "movhllhps", modifiers=[0x16]) +add_insn("vmovhlps", "movhllhps", modifiers=[0x12, VEXL0], avx=True) +add_insn("vmovlhps", "movhllhps", modifiers=[0x16, VEXL0], avx=True) + +add_group("movhlp", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="Mem", size=64, relaxed=True, dest="EA")]) +add_group("movhlp", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x01], + operands=[Operand(type="Mem", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare")]) +add_group("movhlp", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="Mem", size=64, relaxed=True, dest="EA")]) + +add_insn("movhps", "movhlp", modifiers=[0, 0x16]) +add_insn("movlps", "movhlp", modifiers=[0, 0x12]) +add_insn("vmovhps", "movhlp", modifiers=[0, 0x16, VEXL0], avx=True) +add_insn("vmovlps", "movhlp", modifiers=[0, 0x12, VEXL0], avx=True) + +add_group("movmsk", + suffix="l", + cpu=["SSE"], + modifiers=["PreAdd", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x50], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("movmsk", + suffix="q", + cpu=["SSE"], + modifiers=["PreAdd", "SetVEX"], + prefix=0x00, + opersize=64, + opcode=[0x0F, 0x50], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("movmsk", + suffix="l", + cpu=["AVX"], + modifiers=["PreAdd"], + vex=256, + prefix=0x00, + opcode=[0x0F, 0x50], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="EA")]) +add_group("movmsk", + suffix="q", + cpu=["SSE"], + modifiers=["PreAdd"], + vex=256, + prefix=0x00, + opersize=64, + opcode=[0x0F, 0x50], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="EA")]) + +add_insn("movmskps", "movmsk") +add_insn("vmovmskps", "movmsk", modifiers=[0, VEXL0], avx=True) + +add_group("movnt", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="Mem", size=128, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare")]) +add_group("movnt", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=256, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="Mem", size=256, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=256, dest="Spare")]) + +add_insn("movntps", "movnt", modifiers=[0, 0x2B]) +add_insn("vmovntps", "movnt", modifiers=[0, 0x2B, VEXL0], avx=True) + +add_group("movntq", + cpu=["SSE"], + opcode=[0x0F, 0xE7], + operands=[Operand(type="Mem", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=64, dest="Spare")]) + +add_insn("movntq", "movntq") + +add_group("movss", + cpu=["SSE"], + modifiers=["SetVEX"], + prefix=0xF3, + opcode=[0x0F, 0x10], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("movss", + cpu=["SSE"], + modifiers=["SetVEX"], + prefix=0xF3, + opcode=[0x0F, 0x10], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Mem", size=32, relaxed=True, dest="EA")]) +add_group("movss", + cpu=["SSE"], + modifiers=["SetVEX"], + prefix=0xF3, + opcode=[0x0F, 0x11], + operands=[Operand(type="Mem", size=32, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare")]) +add_group("movss", + cpu=["AVX"], + vex=128, + prefix=0xF3, + opcode=[0x0F, 0x10], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="EA")]) + +add_insn("movss", "movss") +add_insn("vmovss", "movss", modifiers=[VEXL0], avx=True) + +add_group("pextrw", + suffix="l", + cpu=["MMX", "P3"], + notavx=True, + opcode=[0x0F, 0xC5], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="SIMDReg", size=64, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pextrw", + suffix="l", + cpu=["SSE2"], + modifiers=["SetVEX"], + prefix=0x66, + opcode=[0x0F, 0xC5], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pextrw", + suffix="q", + cpu=["MMX", "P3"], + notavx=True, + opersize=64, + opcode=[0x0F, 0xC5], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="SIMDReg", size=64, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pextrw", + suffix="q", + cpu=["SSE2"], + modifiers=["SetVEX"], + opersize=64, + prefix=0x66, + opcode=[0x0F, 0xC5], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +# SSE41 instructions +add_group("pextrw", + cpu=["SSE41"], + modifiers=["SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x3A, 0x15], + operands=[Operand(type="Mem", size=16, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pextrw", + cpu=["SSE41"], + modifiers=["SetVEX"], + opersize=32, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x15], + operands=[Operand(type="Reg", size=32, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pextrw", + cpu=["SSE41"], + modifiers=["SetVEX"], + opersize=64, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x15], + operands=[Operand(type="Reg", size=64, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("pextrw", "pextrw") +add_insn("vpextrw", "pextrw", modifiers=[VEXL0], avx=True) + +add_group("pinsrw", + suffix="l", + cpu=["MMX", "P3"], + notavx=True, + opcode=[0x0F, 0xC4], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="Reg", size=32, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pinsrw", + suffix="q", + cpu=["MMX", "P3"], + notavx=True, + def_opersize_64=64, + opersize=64, + opcode=[0x0F, 0xC4], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="Reg", size=64, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pinsrw", + suffix="l", + cpu=["MMX", "P3"], + notavx=True, + opcode=[0x0F, 0xC4], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="Mem", size=16, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pinsrw", + suffix="l", + cpu=["SSE2"], + modifiers=["SetVEX"], + prefix=0x66, + opcode=[0x0F, 0xC4], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="Reg", size=32, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pinsrw", + suffix="q", + cpu=["SSE2"], + modifiers=["SetVEX"], + def_opersize_64=64, + opersize=64, + prefix=0x66, + opcode=[0x0F, 0xC4], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="Reg", size=64, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pinsrw", + suffix="l", + cpu=["SSE2"], + modifiers=["SetVEX"], + prefix=0x66, + opcode=[0x0F, 0xC4], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="Mem", size=16, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pinsrw", + suffix="l", + cpu=["AVX"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0xC4], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="Reg", size=32, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pinsrw", + suffix="q", + cpu=["AVX"], + vex=128, + def_opersize_64=64, + opersize=64, + prefix=0x66, + opcode=[0x0F, 0xC4], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="Reg", size=64, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pinsrw", + suffix="l", + cpu=["AVX"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0xC4], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="Mem", size=16, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("pinsrw", "pinsrw") +add_insn("vpinsrw", "pinsrw", modifiers=[VEXL0], avx=True) + +add_group("pmovmskb", + suffix="l", + cpu=["MMX", "P3"], + notavx=True, + opcode=[0x0F, 0xD7], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="SIMDReg", size=64, dest="EA")]) +add_group("pmovmskb", + suffix="l", + cpu=["SSE2"], + modifiers=["SetVEX"], + prefix=0x66, + opcode=[0x0F, 0xD7], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("pmovmskb", + suffix="l", + cpu=["AVX2"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0xD7], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="EA")]) +add_group("pmovmskb", + suffix="q", + cpu=["MMX", "P3"], + notavx=True, + opersize=64, + def_opersize_64=64, + opcode=[0x0F, 0xD7], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="SIMDReg", size=64, dest="EA")]) +add_group("pmovmskb", + suffix="q", + cpu=["SSE2"], + modifiers=["SetVEX"], + opersize=64, + def_opersize_64=64, + prefix=0x66, + opcode=[0x0F, 0xD7], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("pmovmskb", + suffix="q", + cpu=["SSE2"], + vex=256, + opersize=64, + def_opersize_64=64, + prefix=0x66, + opcode=[0x0F, 0xD7], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="EA")]) + +add_insn("pmovmskb", "pmovmskb") +add_insn("vpmovmskb", "pmovmskb", modifiers=[VEXL0], avx=True) + +add_group("pshufw", + cpu=["MMX", "P3"], + opcode=[0x0F, 0x70], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="SIMDRM", size=64, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("pshufw", "pshufw") + +##################################################################### +# SSE2 instructions +##################################################################### +add_group("xmm_xmm64", + cpu=["SSE2"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("xmm_xmm64", + cpu=["SSE2"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="Mem", size=64, relaxed=True, dest="EA")]) +add_group("xmm_xmm64", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("xmm_xmm64", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="Mem", size=64, relaxed=True, dest="EA")]) + +add_insn("addsd", "xmm_xmm64", modifiers=[0xF2, 0x58]) +add_insn("comisd", "xmm_xmm64", modifiers=[0x66, 0x2F]) +add_insn("cvtdq2pd", "xmm_xmm64", modifiers=[0xF3, 0xE6]) +add_insn("cvtps2pd", "xmm_xmm64", modifiers=[0, 0x5A]) +add_insn("cvtsd2ss", "xmm_xmm64", modifiers=[0xF2, 0x5A]) +add_insn("divsd", "xmm_xmm64", modifiers=[0xF2, 0x5E]) +add_insn("maxsd", "xmm_xmm64", modifiers=[0xF2, 0x5F]) +add_insn("minsd", "xmm_xmm64", modifiers=[0xF2, 0x5D]) +add_insn("mulsd", "xmm_xmm64", modifiers=[0xF2, 0x59]) +add_insn("subsd", "xmm_xmm64", modifiers=[0xF2, 0x5C]) +add_insn("sqrtsd", "xmm_xmm64", modifiers=[0xF2, 0x51]) +add_insn("ucomisd", "xmm_xmm64", modifiers=[0x66, 0x2E]) + +add_insn("vaddsd", "xmm_xmm64", modifiers=[0xF2, 0x58, VEXL0], avx=True) +# vcomisd and vucomisd are only two operand +# vcvtdq2pd and vcvtps2pd can take ymm, xmm version +add_insn("vcvtsd2ss", "xmm_xmm64", modifiers=[0xF2, 0x5A, VEXL0], avx=True) +add_insn("vdivsd", "xmm_xmm64", modifiers=[0xF2, 0x5E, VEXL0], avx=True) +add_insn("vmaxsd", "xmm_xmm64", modifiers=[0xF2, 0x5F, VEXL0], avx=True) +add_insn("vminsd", "xmm_xmm64", modifiers=[0xF2, 0x5D, VEXL0], avx=True) +add_insn("vmulsd", "xmm_xmm64", modifiers=[0xF2, 0x59, VEXL0], avx=True) +add_insn("vsubsd", "xmm_xmm64", modifiers=[0xF2, 0x5C, VEXL0], avx=True) +add_insn("vsqrtsd", "xmm_xmm64", modifiers=[0xF2, 0x51, VEXL0], avx=True) + +add_insn("addpd", "xmm_xmm128", modifiers=[0x66, 0x58], cpu=["SSE2"]) +add_insn("andnpd", "xmm_xmm128", modifiers=[0x66, 0x55], cpu=["SSE2"]) +add_insn("andpd", "xmm_xmm128", modifiers=[0x66, 0x54], cpu=["SSE2"]) +add_insn("cvtdq2ps", "xmm_xmm128", modifiers=[0, 0x5B], cpu=["SSE2"]) +add_insn("cvtpd2dq", "xmm_xmm128", modifiers=[0xF2, 0xE6], cpu=["SSE2"]) +add_insn("cvtpd2ps", "xmm_xmm128", modifiers=[0x66, 0x5A], cpu=["SSE2"]) +add_insn("cvtps2dq", "xmm_xmm128", modifiers=[0x66, 0x5B], cpu=["SSE2"]) +add_insn("divpd", "xmm_xmm128", modifiers=[0x66, 0x5E], cpu=["SSE2"]) +add_insn("maxpd", "xmm_xmm128", modifiers=[0x66, 0x5F], cpu=["SSE2"]) +add_insn("minpd", "xmm_xmm128", modifiers=[0x66, 0x5D], cpu=["SSE2"]) +add_insn("mulpd", "xmm_xmm128", modifiers=[0x66, 0x59], cpu=["SSE2"]) +add_insn("orpd", "xmm_xmm128", modifiers=[0x66, 0x56], cpu=["SSE2"]) +add_insn("sqrtpd", "xmm_xmm128", modifiers=[0x66, 0x51], cpu=["SSE2"]) +add_insn("subpd", "xmm_xmm128", modifiers=[0x66, 0x5C], cpu=["SSE2"]) +add_insn("unpckhpd", "xmm_xmm128", modifiers=[0x66, 0x15], cpu=["SSE2"]) +add_insn("unpcklpd", "xmm_xmm128", modifiers=[0x66, 0x14], cpu=["SSE2"]) +add_insn("xorpd", "xmm_xmm128", modifiers=[0x66, 0x57], cpu=["SSE2"]) + +add_insn("vaddpd", "xmm_xmm128_256", modifiers=[0x66, 0x58, VEXL0], avx=True) +add_insn("vandnpd", "xmm_xmm128_256", modifiers=[0x66, 0x55, VEXL0], avx=True) +add_insn("vandpd", "xmm_xmm128_256", modifiers=[0x66, 0x54, VEXL0], avx=True) +# vcvtdq2ps and vcvtps2dq are 2-operand, YMM capable +# vcvtpd2dq and vcvtpd2ps take xmm, ymm combination +add_insn("vdivpd", "xmm_xmm128_256", modifiers=[0x66, 0x5E, VEXL0], avx=True) +add_insn("vmaxpd", "xmm_xmm128_256", modifiers=[0x66, 0x5F, VEXL0], avx=True) +add_insn("vminpd", "xmm_xmm128_256", modifiers=[0x66, 0x5D, VEXL0], avx=True) +add_insn("vmulpd", "xmm_xmm128_256", modifiers=[0x66, 0x59, VEXL0], avx=True) +add_insn("vorpd", "xmm_xmm128_256", modifiers=[0x66, 0x56, VEXL0], avx=True) +# vsqrtpd doesn't add third operand +add_insn("vsubpd", "xmm_xmm128_256", modifiers=[0x66, 0x5C, VEXL0], avx=True) +add_insn("vunpckhpd", "xmm_xmm128_256", modifiers=[0x66, 0x15, VEXL0], avx=True) +add_insn("vunpcklpd", "xmm_xmm128_256", modifiers=[0x66, 0x14, VEXL0], avx=True) +add_insn("vxorpd", "xmm_xmm128_256", modifiers=[0x66, 0x57, VEXL0], avx=True) + +add_group("ssecmp_64", + cpu=["SSE2"], + modifiers=["Imm8", "PreAdd", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0xC2], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("ssecmp_64", + cpu=["SSE2"], + modifiers=["Imm8", "PreAdd", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0xC2], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="Mem", size=64, relaxed=True, dest="EA")]) +add_group("ssecmp_64", + cpu=["AVX"], + modifiers=["Imm8", "PreAdd"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0xC2], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("ssecmp_64", + cpu=["AVX"], + modifiers=["Imm8", "PreAdd"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0xC2], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="Mem", size=64, relaxed=True, dest="EA")]) + +for ib, cc in ssecoms: + add_insn("cmp"+cc+"sd", "ssecmp_64", modifiers=[ib, 0xF2]) + add_insn("cmp"+cc+"pd", "ssecmp_128", modifiers=[ib, 0x66]) + +for ib, cc in avxcoms: + add_insn("vcmp"+cc+"sd", "ssecmp_64", modifiers=[ib, 0xF2, VEXL0], avx=True) + add_insn("vcmp"+cc+"pd", "ssecmp_128", modifiers=[ib, 0x66, VEXL0], avx=True) + +add_insn("cmppd", "xmm_xmm128_imm", modifiers=[0x66, 0xC2], cpu=["SSE2"]) +add_insn("shufpd", "xmm_xmm128_imm", modifiers=[0x66, 0xC6], cpu=["SSE2"]) +add_insn("vcmppd", "xmm_xmm128_imm_256", modifiers=[0x66, 0xC2, VEXL0], avx=True) +add_insn("vshufpd", "xmm_xmm128_imm_256", modifiers=[0x66, 0xC6, VEXL0], avx=True) + +add_insn("cvtsi2sd", "cvt_xmm_rmx", modifiers=[0xF2, 0x2A], cpu=["SSE2"]) +add_insn("vcvtsi2sd", "cvt_xmm_rmx", modifiers=[0xF2, 0x2A, VEXL0], avx=True) + +add_group("cvt_rx_xmm64", + suffix="l", + cpu=["SSE2"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("cvt_rx_xmm64", + suffix="l", + cpu=["SSE2"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="Mem", size=64, relaxed=True, dest="EA")]) +# REX +add_group("cvt_rx_xmm64", + suffix="q", + cpu=["SSE2"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + opersize=64, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("cvt_rx_xmm64", + suffix="q", + cpu=["SSE2"], + modifiers=["PreAdd", "Op1Add", "SetVEX"], + opersize=64, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="Mem", size=64, relaxed=True, dest="EA")]) + +add_insn("cvtsd2si", "cvt_rx_xmm64", modifiers=[0xF2, 0x2D]) +add_insn("vcvtsd2si", "cvt_rx_xmm64", modifiers=[0xF2, 0x2D, VEXL0], avx=True) + +add_group("cvt_mm_xmm", + cpu=["SSE2"], + modifiers=["PreAdd", "Op1Add"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) + +add_insn("cvtpd2pi", "cvt_mm_xmm", modifiers=[0x66, 0x2D], cpu=["SSE2"]) + +add_group("cvt_xmm_mm_ss", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=64, relaxed=True, dest="EA")]) + +add_insn("cvtpi2pd", "cvt_xmm_mm_ss", modifiers=[0x66, 0x2A], cpu=["SSE2"]) + +# cmpsd SSE2 form +add_group("cmpsd", + cpu=["SSE2"], + modifiers=["SetVEX"], + prefix=0xF2, + opcode=[0x0F, 0xC2], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDReg", size=128, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("cmpsd", + cpu=["SSE2"], + modifiers=["SetVEX"], + prefix=0xF2, + opcode=[0x0F, 0xC2], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="Mem", size=64, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("cmpsd", + cpu=["AVX"], + vex=128, + prefix=0xF2, + opcode=[0x0F, 0xC2], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("cmpsd", + cpu=["AVX"], + vex=128, + prefix=0xF2, + opcode=[0x0F, 0xC2], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="Mem", size=64, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +# cmpsd is added in string instructions above, so don't re-add_insn() +add_insn("vcmpsd", "cmpsd", modifiers=[VEXL0], avx=True) + +add_insn("movapd", "movau", modifiers=[0x66, 0x28, 0x01], cpu=["SSE2"]) +add_insn("movupd", "movau", modifiers=[0x66, 0x10, 0x01], cpu=["SSE2"]) +add_insn("vmovapd", "movau", modifiers=[0x66, 0x28, 0x01], avx=True) +add_insn("vmovupd", "movau", modifiers=[0x66, 0x10, 0x01], avx=True) + +add_insn("movhpd", "movhlp", modifiers=[0x66, 0x16], cpu=["SSE2"]) +add_insn("movlpd", "movhlp", modifiers=[0x66, 0x12], cpu=["SSE2"]) +add_insn("vmovhpd", "movhlp", modifiers=[0x66, 0x16, VEXL0], avx=True) +add_insn("vmovlpd", "movhlp", modifiers=[0x66, 0x12, VEXL0], avx=True) + +add_insn("movmskpd", "movmsk", modifiers=[0x66], cpu=["SSE2"]) +add_insn("vmovmskpd", "movmsk", modifiers=[0x66, VEXL0], avx=True) + +add_insn("movntpd", "movnt", modifiers=[0x66, 0x2B], cpu=["SSE2"]) +add_insn("movntdq", "movnt", modifiers=[0x66, 0xE7], cpu=["SSE2"]) +add_insn("vmovntpd", "movnt", modifiers=[0x66, 0x2B, VEXL0], avx=True) +add_insn("vmovntdq", "movnt", modifiers=[0x66, 0xE7, VEXL0], avx=True) + +# movsd SSE2 forms +add_group("movsd", + cpu=["SSE2"], + modifiers=["SetVEX"], + prefix=0xF2, + opcode=[0x0F, 0x10], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("movsd", + cpu=["SSE2"], + modifiers=["SetVEX"], + prefix=0xF2, + opcode=[0x0F, 0x10], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Mem", size=64, relaxed=True, dest="EA")]) +add_group("movsd", + cpu=["SSE2"], + modifiers=["SetVEX"], + prefix=0xF2, + opcode=[0x0F, 0x11], + operands=[Operand(type="Mem", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare")]) +add_group("movsd", + cpu=["AVX"], + vex=128, + prefix=0xF2, + opcode=[0x0F, 0x10], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="EA")]) +# movsd is added in string instructions above, so don't re-add_insn() +add_insn("vmovsd", "movsd", modifiers=[VEXL0], avx=True) + +##################################################################### +# P4 VMX Instructions +##################################################################### + +add_group("eptvpid", + modifiers=["Op2Add"], + suffix="l", + not64=True, + cpu=["EPTVPID"], + opersize=32, + prefix=0x66, + opcode=[0x0F, 0x38, 0x80], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="Mem", size=128, relaxed=True, dest="EA")]) +add_group("eptvpid", + modifiers=["Op2Add"], + suffix="q", + cpu=["EPTVPID"], + opersize=64, + prefix=0x66, + opcode=[0x0F, 0x38, 0x80], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="Mem", size=128, relaxed=True, dest="EA")]) +add_insn("invept", "eptvpid", modifiers=[0]) +add_insn("invvpid", "eptvpid", modifiers=[1]) + +add_insn("vmcall", "threebyte", modifiers=[0x0F, 0x01, 0xC1], cpu=["P4"]) +add_insn("vmlaunch", "threebyte", modifiers=[0x0F, 0x01, 0xC2], cpu=["P4"]) +add_insn("vmresume", "threebyte", modifiers=[0x0F, 0x01, 0xC3], cpu=["P4"]) +add_insn("vmxoff", "threebyte", modifiers=[0x0F, 0x01, 0xC4], cpu=["P4"]) + +add_group("vmxmemrd", + suffix="l", + not64=True, + cpu=["P4"], + opersize=32, + opcode=[0x0F, 0x78], + operands=[Operand(type="RM", size=32, relaxed=True, dest="EA"), + Operand(type="Reg", size=32, dest="Spare")]) +add_group("vmxmemrd", + suffix="q", + cpu=["P4"], + opersize=64, + def_opersize_64=64, + opcode=[0x0F, 0x78], + operands=[Operand(type="RM", size=64, relaxed=True, dest="EA"), + Operand(type="Reg", size=64, dest="Spare")]) +add_insn("vmread", "vmxmemrd") + +add_group("vmxmemwr", + suffix="l", + not64=True, + cpu=["P4"], + opersize=32, + opcode=[0x0F, 0x79], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="RM", size=32, relaxed=True, dest="EA")]) +add_group("vmxmemwr", + suffix="q", + cpu=["P4"], + opersize=64, + def_opersize_64=64, + opcode=[0x0F, 0x79], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="RM", size=64, relaxed=True, dest="EA")]) +add_insn("vmwrite", "vmxmemwr") + +add_group("vmxtwobytemem", + modifiers=["SpAdd"], + cpu=["P4"], + opcode=[0x0F, 0xC7], + spare=0, + operands=[Operand(type="Mem", size=64, relaxed=True, dest="EA")]) +add_insn("vmptrld", "vmxtwobytemem", modifiers=[6]) +add_insn("vmptrst", "vmxtwobytemem", modifiers=[7]) + +add_group("vmxthreebytemem", + modifiers=["PreAdd"], + cpu=["P4"], + prefix=0x00, + opcode=[0x0F, 0xC7], + spare=6, + operands=[Operand(type="Mem", size=64, relaxed=True, dest="EA")]) +add_insn("vmclear", "vmxthreebytemem", modifiers=[0x66]) +add_insn("vmxon", "vmxthreebytemem", modifiers=[0xF3]) + +##################################################################### +# Intel SMX Instructions +##################################################################### +add_insn("getsec", "twobyte", modifiers=[0x0F, 0x37], cpu=["SMX"]) + +add_insn("cvttpd2pi", "cvt_mm_xmm", modifiers=[0x66, 0x2C], cpu=["SSE2"]) +add_insn("cvttsd2si", "cvt_rx_xmm64", modifiers=[0xF2, 0x2C], cpu=["SSE2"]) +add_insn("cvttpd2dq", "xmm_xmm128", modifiers=[0x66, 0xE6], cpu=["SSE2"]) +add_insn("cvttps2dq", "xmm_xmm128", modifiers=[0xF3, 0x5B], cpu=["SSE2"]) +add_insn("pmuludq", "mmxsse2", modifiers=[0xF4], cpu=["SSE2"]) +add_insn("pshufd", "xmm_xmm128_imm", modifiers=[0x66, 0x70], cpu=["SSE2"]) +add_insn("pshufhw", "xmm_xmm128_imm", modifiers=[0xF3, 0x70], cpu=["SSE2"]) +add_insn("pshuflw", "xmm_xmm128_imm", modifiers=[0xF2, 0x70], cpu=["SSE2"]) +add_insn("punpckhqdq", "xmm_xmm128", modifiers=[0x66, 0x6D], cpu=["SSE2"]) +add_insn("punpcklqdq", "xmm_xmm128", modifiers=[0x66, 0x6C], cpu=["SSE2"]) + +add_insn("vcvttsd2si", "cvt_rx_xmm64", modifiers=[0xF2, 0x2C, VEXL0], avx=True) +# vcvttpd2dq takes xmm, ymm combination +# vcvttps2dq is two-operand +add_insn("vpmuludq", "xmm_xmm128_256avx2", modifiers=[0x66, 0xF4, VEXL0], avx=True) +add_insn("vpshufd", "xmm_xmm128_imm_256avx2", modifiers=[0x66, 0x70, VEXL0], avx=True) +add_insn("vpshufhw", "xmm_xmm128_imm_256avx2", modifiers=[0xF3, 0x70, VEXL0], avx=True) +add_insn("vpshuflw", "xmm_xmm128_imm_256avx2", modifiers=[0xF2, 0x70, VEXL0], avx=True) +add_insn("vpunpckhqdq", "xmm_xmm128_256avx2", modifiers=[0x66, 0x6D, VEXL0], avx=True) +add_insn("vpunpcklqdq", "xmm_xmm128_256avx2", modifiers=[0x66, 0x6C, VEXL0], avx=True) + +add_insn("cvtss2sd", "xmm_xmm32", modifiers=[0xF3, 0x5A], cpu=["SSE2"]) +add_insn("vcvtss2sd", "xmm_xmm32", modifiers=[0xF3, 0x5A, VEXL0], avx=True) + +add_group("maskmovdqu", + cpu=["SSE2"], + modifiers=["SetVEX"], + prefix=0x66, + opcode=[0x0F, 0xF7], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) + +add_insn("maskmovdqu", "maskmovdqu") +add_insn("vmaskmovdqu", "maskmovdqu", modifiers=[VEXL0], avx=True) + +add_insn("movdqa", "movau", modifiers=[0x66, 0x6F, 0x10], cpu=["SSE2"]) +add_insn("movdqu", "movau", modifiers=[0xF3, 0x6F, 0x10], cpu=["SSE2"]) +add_insn("vmovdqa", "movau", modifiers=[0x66, 0x6F, 0x10], avx=True) +add_insn("vmovdqu", "movau", modifiers=[0xF3, 0x6F, 0x10], avx=True) + +add_group("movdq2q", + cpu=["SSE2"], + prefix=0xF2, + opcode=[0x0F, 0xD6], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) + +add_insn("movdq2q", "movdq2q") + +add_group("movq2dq", + cpu=["SSE2"], + prefix=0xF3, + opcode=[0x0F, 0xD6], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=64, dest="EA")]) + +add_insn("movq2dq", "movq2dq") + +add_group("pslrldq", + cpu=["SSE2"], + modifiers=["SpAdd", "SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x73], + spare=0, + operands=[Operand(type="SIMDReg", size=128, dest="EAVEX"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pslrldq", + cpu=["SSE2"], + modifiers=["SpAdd", "SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x73], + spare=0, + operands=[Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pslrldq", + cpu=["AVX2"], + modifiers=["SpAdd"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x73], + spare=0, + operands=[Operand(type="SIMDReg", size=256, dest="EAVEX"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pslrldq", + cpu=["AVX2"], + modifiers=["SpAdd"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x73], + spare=0, + operands=[Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDReg", size=256, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("pslldq", "pslrldq", modifiers=[7]) +add_insn("psrldq", "pslrldq", modifiers=[3]) +add_insn("vpslldq", "pslrldq", modifiers=[7, VEXL0], avx=True) +add_insn("vpsrldq", "pslrldq", modifiers=[3, VEXL0], avx=True) + +##################################################################### +# SSE3 / PNI Prescott New Instructions instructions +##################################################################### +add_insn("addsubpd", "xmm_xmm128", modifiers=[0x66, 0xD0], cpu=["SSE3"]) +add_insn("addsubps", "xmm_xmm128", modifiers=[0xF2, 0xD0], cpu=["SSE3"]) +add_insn("haddpd", "xmm_xmm128", modifiers=[0x66, 0x7C], cpu=["SSE3"]) +add_insn("haddps", "xmm_xmm128", modifiers=[0xF2, 0x7C], cpu=["SSE3"]) +add_insn("hsubpd", "xmm_xmm128", modifiers=[0x66, 0x7D], cpu=["SSE3"]) +add_insn("hsubps", "xmm_xmm128", modifiers=[0xF2, 0x7D], cpu=["SSE3"]) + +add_insn("vaddsubpd", "xmm_xmm128_256", modifiers=[0x66, 0xD0, VEXL0], avx=True) +add_insn("vaddsubps", "xmm_xmm128_256", modifiers=[0xF2, 0xD0, VEXL0], avx=True) +add_insn("vhaddpd", "xmm_xmm128_256", modifiers=[0x66, 0x7C, VEXL0], avx=True) +add_insn("vhaddps", "xmm_xmm128_256", modifiers=[0xF2, 0x7C, VEXL0], avx=True) +add_insn("vhsubpd", "xmm_xmm128_256", modifiers=[0x66, 0x7D, VEXL0], avx=True) +add_insn("vhsubps", "xmm_xmm128_256", modifiers=[0xF2, 0x7D, VEXL0], avx=True) + +add_insn("movshdup", "xmm_xmm128", modifiers=[0xF3, 0x16], cpu=["SSE3"]) +add_insn("movsldup", "xmm_xmm128", modifiers=[0xF3, 0x12], cpu=["SSE3"]) +add_insn("fisttp", "fildstp", modifiers=[1, 0, 1], cpu=["SSE3"]) +add_insn("fisttpll", "fildstp", suffix="q", modifiers=[7], cpu=["SSE3"]) +add_insn("movddup", "xmm_xmm64", modifiers=[0xF2, 0x12], cpu=["SSE3"]) +add_insn("monitor", "threebyte", modifiers=[0x0F, 0x01, 0xC8], cpu=["SSE3"]) +add_insn("mwait", "threebyte", modifiers=[0x0F, 0x01, 0xC9], cpu=["SSE3"]) + +add_group("lddqu", + cpu=["SSE3"], + modifiers=["SetVEX"], + prefix=0xF2, + opcode=[0x0F, 0xF0], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Mem", size=128, relaxed=True, dest="EA")]) +add_group("lddqu", + cpu=["AVX"], + vex=256, + prefix=0xF2, + opcode=[0x0F, 0xF0], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="Mem", size=256, relaxed=True, dest="EA")]) + +add_insn("lddqu", "lddqu") +add_insn("vlddqu", "lddqu", modifiers=[VEXL0], avx=True) + +##################################################################### +# SSSE3 / TNI Tejas New Intructions instructions +##################################################################### + +add_group("ssse3", + cpu=["SSSE3"], + notavx=True, + modifiers=["Op2Add"], + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="SIMDRM", size=64, relaxed=True, dest="EA")]) +add_group("ssse3", + cpu=["SSSE3"], + modifiers=["Op2Add", "SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("ssse3", + cpu=["AVX"], + modifiers=["Op2Add"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("ssse3", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="SpareVEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) +add_group("ssse3", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) + +add_insn("pshufb", "ssse3", modifiers=[0x00]) +add_insn("phaddw", "ssse3", modifiers=[0x01]) +add_insn("phaddd", "ssse3", modifiers=[0x02]) +add_insn("phaddsw", "ssse3", modifiers=[0x03]) +add_insn("pmaddubsw", "ssse3", modifiers=[0x04]) +add_insn("phsubw", "ssse3", modifiers=[0x05]) +add_insn("phsubd", "ssse3", modifiers=[0x06]) +add_insn("phsubsw", "ssse3", modifiers=[0x07]) +add_insn("psignb", "ssse3", modifiers=[0x08]) +add_insn("psignw", "ssse3", modifiers=[0x09]) +add_insn("psignd", "ssse3", modifiers=[0x0A]) +add_insn("pmulhrsw", "ssse3", modifiers=[0x0B]) +add_insn("pabsb", "ssse3", modifiers=[0x1C]) +add_insn("pabsw", "ssse3", modifiers=[0x1D]) +add_insn("pabsd", "ssse3", modifiers=[0x1E]) + +add_insn("vpshufb", "ssse3", modifiers=[0x00, VEXL0], avx=True) +add_insn("vphaddw", "ssse3", modifiers=[0x01, VEXL0], avx=True) +add_insn("vphaddd", "ssse3", modifiers=[0x02, VEXL0], avx=True) +add_insn("vphaddsw", "ssse3", modifiers=[0x03, VEXL0], avx=True) +add_insn("vpmaddubsw", "ssse3", modifiers=[0x04, VEXL0], avx=True) +add_insn("vphsubw", "ssse3", modifiers=[0x05, VEXL0], avx=True) +add_insn("vphsubd", "ssse3", modifiers=[0x06, VEXL0], avx=True) +add_insn("vphsubsw", "ssse3", modifiers=[0x07, VEXL0], avx=True) +add_insn("vpsignb", "ssse3", modifiers=[0x08, VEXL0], avx=True) +add_insn("vpsignw", "ssse3", modifiers=[0x09, VEXL0], avx=True) +add_insn("vpsignd", "ssse3", modifiers=[0x0A, VEXL0], avx=True) +add_insn("vpmulhrsw", "ssse3", modifiers=[0x0B, VEXL0], avx=True) +# vpabsb/vpabsw/vpabsd are 2 operand only + +add_group("ssse3imm", + cpu=["SSSE3"], + modifiers=["Op2Add"], + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="SIMDRM", size=64, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("ssse3imm", + cpu=["SSSE3"], + modifiers=["Op2Add"], + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("palignr", "ssse3imm", modifiers=[0x0F]) +add_insn("vpalignr", "sse4imm_256avx2", modifiers=[0x0F, VEXL0], avx=True) + +##################################################################### +# SSE4.1 / SSE4.2 instructions +##################################################################### + +add_group("sse4", + cpu=["SSE41"], + modifiers=["Op2Add", "SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("sse4", + cpu=["AVX"], + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) + +add_insn("packusdw", "sse4", modifiers=[0x2B]) +add_insn("pcmpeqq", "sse4", modifiers=[0x29]) +add_insn("pcmpgtq", "sse4", modifiers=[0x37]) +add_insn("phminposuw", "sse4", modifiers=[0x41]) +add_insn("pmaxsb", "sse4", modifiers=[0x3C]) +add_insn("pmaxsd", "sse4", modifiers=[0x3D]) +add_insn("pmaxud", "sse4", modifiers=[0x3F]) +add_insn("pmaxuw", "sse4", modifiers=[0x3E]) +add_insn("pminsb", "sse4", modifiers=[0x38]) +add_insn("pminsd", "sse4", modifiers=[0x39]) +add_insn("pminud", "sse4", modifiers=[0x3B]) +add_insn("pminuw", "sse4", modifiers=[0x3A]) +add_insn("pmuldq", "sse4", modifiers=[0x28]) +add_insn("pmulld", "sse4", modifiers=[0x40]) +add_insn("ptest", "sse4", modifiers=[0x17]) + +# AVX versions use ssse3, and disable MMX version, as they're 3-operand +add_insn("vpackusdw", "ssse3", modifiers=[0x2B, VEXL0], avx=True) +add_insn("vpcmpeqq", "ssse3", modifiers=[0x29, VEXL0], avx=True) +add_insn("vpcmpgtq", "ssse3", modifiers=[0x37, VEXL0], avx=True) +# vphminposuw is 2 operand only +add_insn("vpmaxsb", "ssse3", modifiers=[0x3C, VEXL0], avx=True) +add_insn("vpmaxsd", "ssse3", modifiers=[0x3D, VEXL0], avx=True) +add_insn("vpmaxud", "ssse3", modifiers=[0x3F, VEXL0], avx=True) +add_insn("vpmaxuw", "ssse3", modifiers=[0x3E, VEXL0], avx=True) +add_insn("vpminsb", "ssse3", modifiers=[0x38, VEXL0], avx=True) +add_insn("vpminsd", "ssse3", modifiers=[0x39, VEXL0], avx=True) +add_insn("vpminud", "ssse3", modifiers=[0x3B, VEXL0], avx=True) +add_insn("vpminuw", "ssse3", modifiers=[0x3A, VEXL0], avx=True) +add_insn("vpmuldq", "ssse3", modifiers=[0x28, VEXL0], avx=True) +add_insn("vpmulld", "ssse3", modifiers=[0x40, VEXL0], avx=True) +# vptest uses SSE4 style (2 operand only), and takes 256-bit operands +add_insn("vptest", "sse4", modifiers=[0x17, VEXL0], avx=True) + +add_group("sse4imm_256", + cpu=["SSE41"], + modifiers=["Op2Add", "SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("sse4imm_256", + cpu=["AVX"], + modifiers=["Op2Add"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("sse4imm_256", + cpu=["AVX"], + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="SpareVEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("sse4imm_256", + cpu=["AVX"], + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +# Same as above except AVX2 required for 256-bit. +add_group("sse4imm_256avx2", + cpu=["SSE41"], + modifiers=["Op2Add", "SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("sse4imm_256avx2", + cpu=["AVX"], + modifiers=["Op2Add"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("sse4imm_256avx2", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="SpareVEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("sse4imm_256avx2", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +# Version that does not allow YMM registers +add_group("sse4imm", + cpu=["SSE41"], + modifiers=["Op2Add", "SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("sse4imm", + cpu=["AVX"], + modifiers=["Op2Add"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +for sz in [32, 64]: + add_group("sse4m%dimm" % sz, + cpu=["SSE41"], + modifiers=["Op2Add", "SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDReg", size=128, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + add_group("sse4m%dimm" % sz, + cpu=["SSE41"], + modifiers=["Op2Add", "SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="Mem", size=sz, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + add_group("sse4m%dimm" % sz, + cpu=["AVX"], + modifiers=["Op2Add"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + add_group("sse4m%dimm" % sz, + cpu=["AVX"], + modifiers=["Op2Add"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="Mem", size=sz, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("blendpd", "sse4imm", modifiers=[0x0D]) +add_insn("blendps", "sse4imm", modifiers=[0x0C]) +add_insn("dppd", "sse4imm", modifiers=[0x41]) +add_insn("dpps", "sse4imm", modifiers=[0x40]) +add_insn("mpsadbw", "sse4imm", modifiers=[0x42]) +add_insn("pblendw", "sse4imm", modifiers=[0x0E]) +add_insn("roundpd", "sse4imm", modifiers=[0x09]) +add_insn("roundps", "sse4imm", modifiers=[0x08]) +add_insn("roundsd", "sse4m64imm", modifiers=[0x0B]) +add_insn("roundss", "sse4m32imm", modifiers=[0x0A]) + +# vdppd does not allow YMM registers +# vmpsadbw and vpblendw do not allow YMM registers unless AVX2 +add_insn("vblendpd", "sse4imm_256", modifiers=[0x0D, VEXL0], avx=True) +add_insn("vblendps", "sse4imm_256", modifiers=[0x0C, VEXL0], avx=True) +add_insn("vdppd", "sse4imm", modifiers=[0x41, VEXL0], avx=True) +add_insn("vdpps", "sse4imm_256", modifiers=[0x40, VEXL0], avx=True) +add_insn("vmpsadbw", "sse4imm_256avx2", modifiers=[0x42, VEXL0], avx=True) +add_insn("vpblendw", "sse4imm_256avx2", modifiers=[0x0E, VEXL0], avx=True) +# vroundpd and vroundps don't add another register operand +add_insn("vroundsd", "sse4m64imm", modifiers=[0x0B, VEXL0], avx=True) +add_insn("vroundss", "sse4m32imm", modifiers=[0x0A, VEXL0], avx=True) + +add_group("sse4xmm0", + cpu=["SSE41"], + modifiers=["Op2Add"], + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("sse4xmm0", + cpu=["SSE41"], + modifiers=["Op2Add"], + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="XMM0", size=128, dest=None)]) + +add_insn("blendvpd", "sse4xmm0", modifiers=[0x15]) +add_insn("blendvps", "sse4xmm0", modifiers=[0x14]) +add_insn("pblendvb", "sse4xmm0", modifiers=[0x10]) + +# implicit XMM0 can't be VEX-encoded +add_group("avx_sse4xmm0", + cpu=["AVX"], + modifiers=["Op2Add"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="VEXImmSrc")]) +add_group("avx_sse4xmm0", + cpu=["AVX"], + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=256, dest="VEXImmSrc")]) + +add_insn("vblendvpd", "avx_sse4xmm0", modifiers=[0x4B]) +add_insn("vblendvps", "avx_sse4xmm0", modifiers=[0x4A]) + +# vpblendvb didn't have a 256-bit form until AVX2 +add_group("avx2_sse4xmm0", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="VEXImmSrc")]) +add_group("avx2_sse4xmm0", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=256, dest="VEXImmSrc")]) + +add_insn("vpblendvb", "avx2_sse4xmm0", modifiers=[0x4C]) + +for sfx, sz in zip("bwl", [8, 16, 32]): + add_group("crc32", + suffix=sfx, + cpu=["SSE42"], + opersize=sz, + prefix=0xF2, + opcode=[0x0F, 0x38, 0xF0+(sz!=8)], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="RM", size=sz, relaxed=(sz==32), dest="EA")]) +for sfx, sz in zip("bq", [8, 64]): + add_group("crc32", + suffix=sfx, + cpu=["SSE42"], + opersize=64, + prefix=0xF2, + opcode=[0x0F, 0x38, 0xF0+(sz!=8)], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="RM", size=sz, relaxed=(sz==64), dest="EA")]) + +add_insn("crc32", "crc32") + +add_group("extractps", + cpu=["SSE41"], + modifiers=["SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x3A, 0x17], + operands=[Operand(type="RM", size=32, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("extractps", + cpu=["SSE41"], + modifiers=["SetVEX"], + opersize=64, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x17], + operands=[Operand(type="Reg", size=64, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("extractps", "extractps") +add_insn("vextractps", "extractps", modifiers=[VEXL0], avx=True) + +add_group("insertps", + cpu=["SSE41"], + modifiers=["SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x3A, 0x21], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="Mem", size=32, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("insertps", + cpu=["SSE41"], + modifiers=["SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x3A, 0x21], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDReg", size=128, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("insertps", + cpu=["AVX"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x21], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="Mem", size=32, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("insertps", + cpu=["AVX"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x21], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("insertps", "insertps") +add_insn("vinsertps", "insertps", modifiers=[VEXL0], avx=True) + +add_group("movntdqa", + cpu=["SSE41"], + modifiers=["SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x38, 0x2A], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Mem", size=128, relaxed=True, dest="EA")]) +add_group("movntdqa", + cpu=["AVX2"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x38, 0x2A], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="Mem", size=256, relaxed=True, dest="EA")]) + +add_insn("movntdqa", "movntdqa") +add_insn("vmovntdqa", "movntdqa", modifiers=[VEXL0], avx=True) + +add_group("sse4pcmpstr", + cpu=["SSE42"], + modifiers=["Op2Add", "SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("pcmpestri", "sse4pcmpstr", modifiers=[0x61]) +add_insn("pcmpestrm", "sse4pcmpstr", modifiers=[0x60]) +add_insn("pcmpistri", "sse4pcmpstr", modifiers=[0x63]) +add_insn("pcmpistrm", "sse4pcmpstr", modifiers=[0x62]) + +add_insn("vpcmpestri", "sse4pcmpstr", modifiers=[0x61, VEXL0], avx=True) +add_insn("vpcmpestrm", "sse4pcmpstr", modifiers=[0x60, VEXL0], avx=True) +add_insn("vpcmpistri", "sse4pcmpstr", modifiers=[0x63, VEXL0], avx=True) +add_insn("vpcmpistrm", "sse4pcmpstr", modifiers=[0x62, VEXL0], avx=True) + +add_group("pextrb", + cpu=["SSE41"], + modifiers=["SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x3A, 0x14], + operands=[Operand(type="Mem", size=8, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pextrb", + cpu=["SSE41"], + modifiers=["SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x3A, 0x14], + operands=[Operand(type="Reg", size=32, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pextrb", + cpu=["SSE41"], + modifiers=["SetVEX"], + opersize=64, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x14], + operands=[Operand(type="Reg", size=64, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("pextrb", "pextrb") +add_insn("vpextrb", "pextrb", modifiers=[VEXL0], avx=True) + +add_group("pextrd", + cpu=["SSE41"], + modifiers=["SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x3A, 0x16], + operands=[Operand(type="RM", size=32, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("pextrd", "pextrd") +add_insn("vpextrd", "pextrd", modifiers=[VEXL0], avx=True) + +add_group("pextrq", + cpu=["SSE41"], + modifiers=["SetVEX"], + opersize=64, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x16], + operands=[Operand(type="RM", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("pextrq", "pextrq") +add_insn("vpextrq", "pextrq", modifiers=[VEXL0], avx=True) + +add_group("pinsrb", + cpu=["SSE41"], + modifiers=["SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x3A, 0x20], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="Mem", size=8, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pinsrb", + cpu=["SSE41"], + modifiers=["SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x3A, 0x20], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="Reg", size=32, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pinsrb", + cpu=["AVX"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x20], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="Mem", size=8, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pinsrb", + cpu=["AVX"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x20], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="Reg", size=32, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("pinsrb", "pinsrb") +add_insn("vpinsrb", "pinsrb", modifiers=[VEXL0], avx=True) + +add_group("pinsrd", + cpu=["SSE41"], + modifiers=["SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x3A, 0x22], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="RM", size=32, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pinsrd", + cpu=["AVX"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x22], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="RM", size=32, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("pinsrd", "pinsrd") +add_insn("vpinsrd", "pinsrd", modifiers=[VEXL0], avx=True) + +add_group("pinsrq", + cpu=["SSE41"], + modifiers=["SetVEX"], + opersize=64, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x22], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="RM", size=64, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pinsrq", + cpu=["AVX"], + vex=128, + opersize=64, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x22], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="RM", size=64, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("pinsrq", "pinsrq") +add_insn("vpinsrq", "pinsrq", modifiers=[VEXL0], avx=True) + +for sz in [16, 32, 64]: + add_group("sse4m%d" % sz, + cpu=["SSE41"], + modifiers=["Op2Add", "SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Mem", size=sz, relaxed=True, dest="EA")]) + add_group("sse4m%d" % sz, + cpu=["SSE41"], + modifiers=["Op2Add", "SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) + add_group("sse4m%d" % sz, + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="Mem", size=sz*2, relaxed=True, dest="EA")]) + add_group("sse4m%d" % sz, + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) + +add_insn("pmovsxbw", "sse4m64", modifiers=[0x20]) +add_insn("pmovsxwd", "sse4m64", modifiers=[0x23]) +add_insn("pmovsxdq", "sse4m64", modifiers=[0x25]) +add_insn("pmovzxbw", "sse4m64", modifiers=[0x30]) +add_insn("pmovzxwd", "sse4m64", modifiers=[0x33]) +add_insn("pmovzxdq", "sse4m64", modifiers=[0x35]) + +add_insn("vpmovsxbw", "sse4m64", modifiers=[0x20, VEXL0], avx=True) +add_insn("vpmovsxwd", "sse4m64", modifiers=[0x23, VEXL0], avx=True) +add_insn("vpmovsxdq", "sse4m64", modifiers=[0x25, VEXL0], avx=True) +add_insn("vpmovzxbw", "sse4m64", modifiers=[0x30, VEXL0], avx=True) +add_insn("vpmovzxwd", "sse4m64", modifiers=[0x33, VEXL0], avx=True) +add_insn("vpmovzxdq", "sse4m64", modifiers=[0x35, VEXL0], avx=True) + +add_insn("pmovsxbd", "sse4m32", modifiers=[0x21]) +add_insn("pmovsxwq", "sse4m32", modifiers=[0x24]) +add_insn("pmovzxbd", "sse4m32", modifiers=[0x31]) +add_insn("pmovzxwq", "sse4m32", modifiers=[0x34]) + +add_insn("vpmovsxbd", "sse4m32", modifiers=[0x21, VEXL0], avx=True) +add_insn("vpmovsxwq", "sse4m32", modifiers=[0x24, VEXL0], avx=True) +add_insn("vpmovzxbd", "sse4m32", modifiers=[0x31, VEXL0], avx=True) +add_insn("vpmovzxwq", "sse4m32", modifiers=[0x34, VEXL0], avx=True) + +add_insn("pmovsxbq", "sse4m16", modifiers=[0x22]) +add_insn("pmovzxbq", "sse4m16", modifiers=[0x32]) + +add_insn("vpmovsxbq", "sse4m16", modifiers=[0x22, VEXL0], avx=True) +add_insn("vpmovzxbq", "sse4m16", modifiers=[0x32, VEXL0], avx=True) + +for sfx, sz in zip("wlq", [16, 32, 64]): + add_group("cnt", + suffix=sfx, + modifiers=["Op1Add"], + opersize=sz, + prefix=0xF3, + opcode=[0x0F, 0x00], + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="RM", size=sz, relaxed=True, dest="EA")]) + +add_insn("popcnt", "cnt", modifiers=[0xB8], cpu=["SSE42"]) + +##################################################################### +# Intel AVX instructions +##################################################################### + +# Most AVX instructions are mixed in with above SSEx groups. +# Some make more sense to have separate groups due to naming conflicts +# that the v-named versions don't have to deal with. +add_group("vmovd", + cpu=["AVX"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x6E], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="RM", size=32, relaxed=True, dest="EA")]) +add_group("vmovd", + cpu=["AVX"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x7E], + operands=[Operand(type="RM", size=32, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare")]) + +add_insn("vmovd", "vmovd") + +add_group("vmovq", + cpu=["AVX"], + vex=128, + prefix=0xF3, + opcode=[0x0F, 0x7E], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("vmovq", + cpu=["AVX"], + vex=128, + prefix=0xF3, + opcode=[0x0F, 0x7E], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Mem", size=64, relaxed=True, dest="EA")]) +add_group("vmovq", + cpu=["AVX"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0xD6], + operands=[Operand(type="Mem", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare")]) +add_group("vmovq", + cpu=["AVX"], + vex=128, + opersize=64, + prefix=0x66, + opcode=[0x0F, 0x6E], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="RM", size=64, relaxed=True, dest="EA")]) +add_group("vmovq", + cpu=["AVX"], + vex=128, + opersize=64, + prefix=0x66, + opcode=[0x0F, 0x7E], + operands=[Operand(type="RM", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare")]) + +add_insn("vmovq", "vmovq") + +# Some AVX variants don't add third operand +add_group("avx_xmm_xmm128", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("avx_xmm_xmm128", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=256, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) + +add_insn("vmovshdup", "avx_xmm_xmm128", modifiers=[0xF3, 0x16]) +add_insn("vmovsldup", "avx_xmm_xmm128", modifiers=[0xF3, 0x12]) +add_insn("vrcpps", "avx_xmm_xmm128", modifiers=[0, 0x53]) +add_insn("vrsqrtps", "avx_xmm_xmm128", modifiers=[0, 0x52]) +add_insn("vsqrtps", "avx_xmm_xmm128", modifiers=[0, 0x51]) +add_insn("vsqrtpd", "avx_xmm_xmm128", modifiers=[0x66, 0x51]) +add_insn("vcvtdq2ps", "avx_xmm_xmm128", modifiers=[0, 0x5B]) +add_insn("vcvtps2dq", "avx_xmm_xmm128", modifiers=[0x66, 0x5B]) +add_insn("vcvttps2dq", "avx_xmm_xmm128", modifiers=[0xF3, 0x5B]) + +add_group("avx_sse4imm", + cpu=["SSE41"], + modifiers=["Op2Add"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("avx_sse4imm", + cpu=["AVX"], + modifiers=["Op2Add"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("avx_sse4imm", + cpu=["AVX"], + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("vroundpd", "avx_sse4imm", modifiers=[0x09]) +add_insn("vroundps", "avx_sse4imm", modifiers=[0x08]) + +add_group("vmovddup", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("vmovddup", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Mem", size=64, relaxed=True, dest="EA")]) +add_group("vmovddup", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=256, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) + +add_insn("vmovddup", "vmovddup", modifiers=[0xF2, 0x12]) + +# Some xmm_xmm64 combinations only take two operands in AVX +# (VEX.vvvv must be 1111b) +add_group("avx_xmm_xmm64", + cpu=["SSE2"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("avx_xmm_xmm64", + cpu=["SSE2"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Mem", size=64, relaxed=True, dest="EA")]) + +add_insn("vcomisd", "avx_xmm_xmm64", modifiers=[0x66, 0x2F], avx=True) +add_insn("vucomisd", "avx_xmm_xmm64", modifiers=[0x66, 0x2E], avx=True) + +# Some xmm_xmm64 combinations only take two operands in AVX +# (VEX.vvvv must be 1111b) +add_group("avx_xmm_xmm32", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("avx_xmm_xmm32", + cpu=["SSE"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Mem", size=32, relaxed=True, dest="EA")]) + +add_insn("vcomiss", "avx_xmm_xmm32", modifiers=[0, 0x2F], avx=True) +add_insn("vucomiss", "avx_xmm_xmm32", modifiers=[0, 0x2E], avx=True) + +# Some conversion functions take ymm, xmm combination +add_group("avx_cvt_xmm64", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("avx_cvt_xmm64", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Mem", size=64, relaxed=True, dest="EA")]) +add_group("avx_cvt_xmm64", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=256, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) + +add_insn("vcvtdq2pd", "avx_cvt_xmm64", modifiers=[0xF3, 0xE6]) +add_insn("vcvtps2pd", "avx_cvt_xmm64", modifiers=[0, 0x5A]) + +# Some SSE3 opcodes are only two operand in AVX +# (VEX.vvvv must be 1111b) +add_group("avx_ssse3_2op", + cpu=["AVX"], + modifiers=["Op2Add"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_insn("vphminposuw", "avx_ssse3_2op", modifiers=[0x41], avx=True) + +# VPABS* are extended to 256-bit in AVX2 +for cpu, sz in zip(["AVX", "AVX2"], [128, 256]): + add_group("avx2_ssse3_2op", + cpu=[cpu], + modifiers=["Op2Add"], + vex=sz, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=sz, dest="Spare"), + Operand(type="SIMDRM", size=sz, relaxed=True, dest="EA")]) +add_insn("vpabsb", "avx2_ssse3_2op", modifiers=[0x1C], avx=True) +add_insn("vpabsw", "avx2_ssse3_2op", modifiers=[0x1D], avx=True) +add_insn("vpabsd", "avx2_ssse3_2op", modifiers=[0x1E], avx=True) + +# Some conversion functions take xmm, ymm combination +# Need separate x and y versions for gas mode +add_group("avx_cvt_xmm128_x", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("avx_cvt_xmm128_y", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=256, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) + +add_group("avx_cvt_xmm128", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, dest="EA")]) +add_group("avx_cvt_xmm128", + cpu=["AVX"], + modifiers=["PreAdd", "Op1Add"], + vex=256, + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=256, dest="EA")]) + +add_insn("vcvtpd2dqx", "avx_cvt_xmm128_x", modifiers=[0xF2, 0xE6], parser="gas") +add_insn("vcvtpd2dqy", "avx_cvt_xmm128_y", modifiers=[0xF2, 0xE6], parser="gas") +add_insn("vcvtpd2dq", "avx_cvt_xmm128", modifiers=[0xF2, 0xE6]) + +add_insn("vcvtpd2psx", "avx_cvt_xmm128_x", modifiers=[0x66, 0x5A], parser="gas") +add_insn("vcvtpd2psy", "avx_cvt_xmm128_y", modifiers=[0x66, 0x5A], parser="gas") +add_insn("vcvtpd2ps", "avx_cvt_xmm128", modifiers=[0x66, 0x5A]) + +add_insn("vcvttpd2dqx", "avx_cvt_xmm128_x", modifiers=[0x66, 0xE6], parser="gas") +add_insn("vcvttpd2dqy", "avx_cvt_xmm128_y", modifiers=[0x66, 0xE6], parser="gas") +add_insn("vcvttpd2dq", "avx_cvt_xmm128", modifiers=[0x66, 0xE6]) + +# Instructions new to AVX +add_insn("vtestps", "sse4", modifiers=[0x0E, VEXL0], avx=True) +add_insn("vtestpd", "sse4", modifiers=[0x0F, VEXL0], avx=True) + +add_group("vbroadcastss", + cpu=["AVX"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x38, 0x18], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Mem", size=32, relaxed=True, dest="EA")]) +add_group("vbroadcastss", + cpu=["AVX"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x38, 0x18], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="Mem", size=32, relaxed=True, dest="EA")]) +add_group("vbroadcastss", + cpu=["AVX2"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x38, 0x18], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("vbroadcastss", + cpu=["AVX2"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x38, 0x18], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) + +add_insn("vbroadcastss", "vbroadcastss") + +add_group("vbroadcastsd", + cpu=["AVX"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x38, 0x19], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="Mem", size=64, relaxed=True, dest="EA")]) +add_group("vbroadcastsd", + cpu=["AVX2"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x38, 0x19], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) + +add_insn("vbroadcastsd", "vbroadcastsd") + +add_group("vbroadcastif128", + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="Mem", size=128, relaxed=True, dest="EA")]) + +add_insn("vbroadcastf128", "vbroadcastif128", modifiers=[0x1A], cpu=["AVX"]) +add_insn("vbroadcasti128", "vbroadcastif128", modifiers=[0x5A], cpu=["AVX2"]) + +add_group("vextractif128", + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("vextractf128", "vextractif128", modifiers=[0x19], cpu=["AVX"]) +add_insn("vextracti128", "vextractif128", modifiers=[0x39], cpu=["AVX2"]) + +add_group("vinsertif128", + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("vinsertf128", "vinsertif128", modifiers=[0x18], cpu=["AVX"]) +add_insn("vinserti128", "vinsertif128", modifiers=[0x38], cpu=["AVX2"]) + +add_group("vzero", + cpu=["AVX"], + modifiers=["SetVEX"], + opcode=[0x0F, 0x77], + operands=[]) + +add_insn("vzeroall", "vzero", modifiers=[VEXL1]) +add_insn("vzeroupper", "vzero", modifiers=[VEXL0]) + +add_group("vmaskmov", + modifiers=["Op2Add"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("vmaskmov", + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) +add_group("vmaskmov", + modifiers=["Op2Add"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x38, 0x02], + operands=[Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="Spare")]) +add_group("vmaskmov", + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x38, 0x02], + operands=[Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDReg", size=256, dest="Spare")]) + +add_insn("vmaskmovps", "vmaskmov", modifiers=[0x2C], cpu=["AVX"]) +add_insn("vmaskmovpd", "vmaskmov", modifiers=[0x2D], cpu=["AVX"]) + +add_group("vpermil", + cpu=["AVX"], + modifiers=["Op2Add"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x38, 0x08], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("vpermil", + cpu=["AVX"], + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x38, 0x08], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) +add_group("vpermil", + cpu=["AVX"], + modifiers=["Op2Add"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("vpermil", + cpu=["AVX"], + modifiers=["Op2Add"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("vpermilpd", "vpermil", modifiers=[0x05]) +add_insn("vpermilps", "vpermil", modifiers=[0x04]) + +add_group("vperm2f128", + cpu=["AVX"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x06], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("vperm2f128", "vperm2f128") + +##################################################################### +# Intel AVX2 instructions +##################################################################### + +# Most AVX2 instructions are mixed in with above SSEx/AVX groups. +# Some make more sense to have separate groups. + +# vex.vvvv=1111b +add_group("vperm_var_avx2", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=256, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) + +add_insn("vpermd", "vperm_var_avx2", modifiers=[0x36]) +add_insn("vpermps", "vperm_var_avx2", modifiers=[0x16]) + +# vex.vvvv=1111b +add_group("vperm_imm_avx2", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=256, + vexw=1, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("vpermq", "vperm_imm_avx2", modifiers=[0x00]) +add_insn("vpermpd", "vperm_imm_avx2", modifiers=[0x01]) + +add_group("vperm2i128_avx2", + cpu=["AVX2"], + vex=256, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x46], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("vperm2i128", "vperm2i128_avx2") + +# vex.vvvv=1111b +for sz in [128, 256]: + add_group("vpbroadcastb_avx2", + cpu=["AVX2"], + vex=sz, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x38, 0x78], + operands=[Operand(type="SIMDReg", size=sz, dest="Spare"), + Operand(type="SIMDReg", size=128, relaxed=True, dest="EA")]) +# vex.vvvv=1111b +for sz in [128, 256]: + add_group("vpbroadcastb_avx2", + cpu=["AVX2"], + vex=sz, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x38, 0x78], + operands=[Operand(type="SIMDReg", size=sz, dest="Spare"), + Operand(type="RM", size=8, relaxed=True, dest="EA")]) + +add_insn("vpbroadcastb", "vpbroadcastb_avx2") + +# vex.vvvv=1111b +for sz in [128, 256]: + add_group("vpbroadcastw_avx2", + cpu=["AVX2"], + vex=sz, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x38, 0x79], + operands=[Operand(type="SIMDReg", size=sz, dest="Spare"), + Operand(type="SIMDReg", size=128, relaxed=True, dest="EA")]) +# vex.vvvv=1111b +for sz in [128, 256]: + add_group("vpbroadcastw_avx2", + cpu=["AVX2"], + vex=sz, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x38, 0x79], + operands=[Operand(type="SIMDReg", size=sz, dest="Spare"), + Operand(type="RM", size=16, relaxed=True, dest="EA")]) + +add_insn("vpbroadcastw", "vpbroadcastw_avx2") + +# vex.vvvv=1111b +for sz in [128, 256]: + add_group("vpbroadcastd_avx2", + cpu=["AVX2"], + vex=sz, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x38, 0x58], + operands=[Operand(type="SIMDReg", size=sz, dest="Spare"), + Operand(type="SIMDReg", size=128, relaxed=True, dest="EA")]) +# vex.vvvv=1111b +for sz in [128, 256]: + add_group("vpbroadcastd_avx2", + cpu=["AVX2"], + vex=sz, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x38, 0x58], + operands=[Operand(type="SIMDReg", size=sz, dest="Spare"), + Operand(type="RM", size=32, relaxed=True, dest="EA")]) + +add_insn("vpbroadcastd", "vpbroadcastd_avx2") + +# vex.vvvv=1111b +for sz in [128, 256]: + add_group("vpbroadcastq_avx2", + cpu=["AVX2"], + vex=sz, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x38, 0x59], + operands=[Operand(type="SIMDReg", size=sz, dest="Spare"), + Operand(type="SIMDReg", size=128, relaxed=True, dest="EA")]) +# vex.vvvv=1111b +for sz in [128, 256]: + add_group("vpbroadcastq_avx2", + cpu=["AVX2"], + vex=sz, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x38, 0x59], + operands=[Operand(type="SIMDReg", size=sz, dest="Spare"), + Operand(type="SIMDRM", size=64, relaxed=True, dest="EA")]) + +add_insn("vpbroadcastq", "vpbroadcastq_avx2") + +for sz in [128, 256]: + add_group("vpshiftv_vexw0_avx2", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=sz, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=sz, dest="Spare"), + Operand(type="SIMDReg", size=sz, dest="VEX"), + Operand(type="SIMDRM", size=sz, relaxed=True, dest="EA")]) + +for sz in [128, 256]: + add_group("vpshiftv_vexw1_avx2", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=sz, + vexw=1, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=sz, dest="Spare"), + Operand(type="SIMDReg", size=sz, dest="VEX"), + Operand(type="SIMDRM", size=sz, relaxed=True, dest="EA")]) + +add_insn("vpsrlvd", "vpshiftv_vexw0_avx2", modifiers=[0x45]) +add_insn("vpsrlvq", "vpshiftv_vexw1_avx2", modifiers=[0x45]) +add_insn("vpsravd", "vpshiftv_vexw0_avx2", modifiers=[0x46]) + +add_insn("vpsllvd", "vpshiftv_vexw0_avx2", modifiers=[0x47]) +add_insn("vpsllvq", "vpshiftv_vexw1_avx2", modifiers=[0x47]) + +add_insn("vpmaskmovd", "vmaskmov", modifiers=[0x8C], cpu=["AVX2"]) + +# vex.vvvv=1111b +for sz in [128, 256]: + add_group("vmaskmov_vexw1_avx2", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=sz, + vexw=1, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=sz, dest="Spare"), + Operand(type="SIMDReg", size=sz, dest="VEX"), + Operand(type="SIMDRM", size=sz, relaxed=True, dest="EA")]) + +for sz in [128, 256]: + add_group("vmaskmov_vexw1_avx2", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=sz, + vexw=1, + prefix=0x66, + opcode=[0x0F, 0x38, 0x02], + operands=[Operand(type="SIMDRM", size=sz, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=sz, dest="VEX"), + Operand(type="SIMDReg", size=sz, dest="Spare")]) + +add_insn("vpmaskmovq", "vmaskmov_vexw1_avx2", modifiers=[0x8C]) + +for sz in [128, 256]: + add_group("vex_66_0F3A_imm8_avx2", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=sz, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=sz, dest="Spare"), + Operand(type="SIMDReg", size=sz, dest="VEX"), + Operand(type="SIMDRM", size=sz, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("vpblendd", "vex_66_0F3A_imm8_avx2", modifiers=[0x02]) + +# Vector register in EA. +add_group("gather_64x_64x", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=128, + vexw=1, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="MemXMMIndex", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="VEX")]) +add_group("gather_64x_64x", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=256, + vexw=1, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="MemXMMIndex", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=256, dest="VEX")]) +add_insn("vgatherdpd", "gather_64x_64x", modifiers=[0x92]) +add_insn("vpgatherdq", "gather_64x_64x", modifiers=[0x90]) + +add_group("gather_64x_64y", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=128, + vexw=1, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="MemXMMIndex", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="VEX")]) +add_group("gather_64x_64y", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=256, + vexw=1, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="MemYMMIndex", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=256, dest="VEX")]) +add_insn("vgatherqpd", "gather_64x_64y", modifiers=[0x93]) +add_insn("vpgatherqq", "gather_64x_64y", modifiers=[0x91]) + +add_group("gather_32x_32y", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=128, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="MemXMMIndex", size=32, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="VEX")]) +add_group("gather_32x_32y", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=256, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="MemYMMIndex", size=32, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=256, dest="VEX")]) +add_insn("vgatherdps", "gather_32x_32y", modifiers=[0x92]) +add_insn("vpgatherdd", "gather_32x_32y", modifiers=[0x90]) + +add_group("gather_32x_32y_128", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=128, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="MemXMMIndex", size=32, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="VEX")]) +add_group("gather_32x_32y_128", + cpu=["AVX2"], + modifiers=["Op2Add"], + vex=256, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="MemYMMIndex", size=32, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="VEX")]) +add_insn("vgatherqps", "gather_32x_32y_128", modifiers=[0x93]) +add_insn("vpgatherqd", "gather_32x_32y_128", modifiers=[0x91]) + +##################################################################### +# Intel TSX instructions +##################################################################### +add_prefix("xacquire", "ACQREL", 0xF2) +add_prefix("xrelease", "ACQREL", 0xF3) + +add_group("tsx_xabort", + cpu=["TSX"], + opcode=[0xC6, 0xF8], + operands=[Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_insn("xabort", "tsx_xabort") + + + +add_group("tsx_xbegin", + cpu=["TSX"], + opcode=[0xC7, 0xF8], + operands=[Operand(type="Imm", size=32, tmod="Near", dest="JmpRel")]) + +add_group("tsx_xbegin", + cpu=["TSX"], + opersize=16, + not64=True, #there should not be 16bit xbegin in 64bit mode + opcode=[0xC7, 0xF8], + operands=[Operand(type="Imm", size=16, tmod="Near", dest="JmpRel")]) +add_insn("xbegin", "tsx_xbegin") + +add_group("tsx_0x0F_0x01", + cpu=["TSX"], + modifiers=["Op2Add"], + opcode=[0x0F, 0x01, 0x00], + operands=[]) +add_insn("xend", "tsx_0x0F_0x01", modifiers=[0xD5]) +add_insn("xtest", "tsx_0x0F_0x01", modifiers=[0xD6]) + + + + + +##################################################################### +# Intel FMA instructions +##################################################################### + +### 128/256b FMA PS +add_group("vfma_ps", + cpu=["FMA"], + modifiers=["Op2Add"], + vex=128, + vexw=0, # single precision + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("vfma_ps", + cpu=["FMA"], + modifiers=["Op2Add"], + vex=256, + vexw=0, # single precision + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) + +### 128/256b FMA PD(W=1) +add_group("vfma_pd", + cpu=["FMA"], + modifiers=["Op2Add"], + vex=128, + vexw=1, # double precision + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("vfma_pd", + cpu=["FMA"], + modifiers=["Op2Add"], + vex=256, + vexw=1, # double precision + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) + +add_group("vfma_ss", + cpu=["FMA"], + modifiers=["Op2Add"], + vex=128, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="EA")]) + +add_group("vfma_ss", + cpu=["FMA"], + modifiers=["Op2Add"], + vex=128, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="Mem", size=32, relaxed=True, dest="EA")]) + +add_group("vfma_sd", + cpu=["FMA"], + modifiers=["Op2Add"], + vex=128, + vexw=1, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="EA")]) + +add_group("vfma_sd", + cpu=["FMA"], + modifiers=["Op2Add"], + vex=128, + vexw=1, + prefix=0x66, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="Mem", size=64, relaxed=True, dest="EA")]) + +for orderval, order in enumerate(["132", "213", "231"]): + ov = orderval << 4 + for combval, comb in enumerate(["ps", "pd", "ss", "sd"]): + cv = combval >> 1 + add_insn("vfmadd"+order+comb, "vfma_"+comb, modifiers=[0x98+ov+cv]) + add_insn("vfmsub"+order+comb, "vfma_"+comb, modifiers=[0x9A+ov+cv]) + add_insn("vfnmsub"+order+comb, "vfma_"+comb, modifiers=[0x9E+ov+cv]) + add_insn("vfnmadd"+order+comb, "vfma_"+comb, modifiers=[0x9C+ov+cv]) + + # no ss/sd for these + for comb in ["ps", "pd"]: + add_insn("vfmaddsub"+order+comb, "vfma_"+comb, modifiers=[0x96+ov]) + add_insn("vfmsubadd"+order+comb, "vfma_"+comb, modifiers=[0x97+ov]) + +##################################################################### +# Intel AES instructions +##################################################################### + +add_group("aes", + cpu=["AES"], + modifiers=["Op1Add", "Op2Add", "SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x00, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("aes", + cpu=["AES", "AVX"], + modifiers=["Op1Add", "Op2Add"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x00, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) + + +add_insn("aesenc", "aes", modifiers=[0x38, 0xDC]) +add_insn("aesenclast", "aes", modifiers=[0x38, 0xDD]) +add_insn("aesdec", "aes", modifiers=[0x38, 0xDE]) +add_insn("aesdeclast", "aes", modifiers=[0x38, 0xDF]) + +add_insn("vaesenc", "aes", modifiers=[0x38, 0xDC, VEXL0], avx=True) +add_insn("vaesenclast", "aes", modifiers=[0x38, 0xDD, VEXL0], avx=True) +add_insn("vaesdec", "aes", modifiers=[0x38, 0xDE, VEXL0], avx=True) +add_insn("vaesdeclast", "aes", modifiers=[0x38, 0xDF, VEXL0], avx=True) + +add_group("aesimc", + cpu=["AES"], + modifiers=["Op1Add", "Op2Add", "SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x00, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) + +add_insn("aesimc", "aesimc", modifiers=[0x38, 0xDB]) +add_insn("vaesimc", "aesimc", modifiers=[0x38, 0xDB, VEXL0], avx=True) + + +add_group("aes_imm", + cpu=["AES"], + modifiers=["Op1Add", "Op2Add", "SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x00, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("aeskeygenassist", "aes_imm", modifiers=[0x3A, 0xDF]) +add_insn("vaeskeygenassist", "aes_imm", modifiers=[0x3A, 0xDF, VEXL0], + avx=True) + +##################################################################### +# Intel PCLMULQDQ instruction +##################################################################### + +add_group("pclmulqdq", + cpu=["CLMUL"], + modifiers=["Op1Add", "Op2Add", "SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x00, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("pclmulqdq", + cpu=["CLMUL", "AVX"], + modifiers=["Op1Add", "Op2Add"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x00, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("pclmulqdq", "pclmulqdq", modifiers=[0x3A, 0x44]) +add_insn("vpclmulqdq", "pclmulqdq", modifiers=[0x3A, 0x44, VEXL0], avx=True) + +add_group("pclmulqdq_fixed", + cpu=["CLMUL"], + modifiers=["Imm8", "SetVEX"], + prefix=0x66, + opcode=[0x0F, 0x3A, 0x44], + operands=[Operand(type="SIMDReg", size=128, dest="SpareVEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("pclmulqdq_fixed", + cpu=["CLMUL", "AVX"], + modifiers=["Imm8"], + vex=128, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x44], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) + +for comb, combval in zip(["lql","hql","lqh","hqh"], [0x00,0x01,0x10,0x11]): + add_insn("pclmul"+comb+"qdq", "pclmulqdq_fixed", modifiers=[combval]) + add_insn("vpclmul"+comb+"qdq", "pclmulqdq_fixed", + modifiers=[combval, VEXL0], avx=True) + +##################################################################### +# AVX Post-32nm instructions +##################################################################### + +# RDRAND +add_group("rdrand", + modifiers=['SpAdd'], + opersize=16, + opcode=[0x0F, 0xC7], + operands=[Operand(type="Reg", size=16, dest="EA")]) +add_group("rdrand", + #suffix="l", + modifiers=['SpAdd'], + opersize=32, + opcode=[0x0F, 0xC7], + operands=[Operand(type="Reg", size=32, dest="EA")]) +add_group("rdrand", + modifiers=['SpAdd'], + opersize=64, + opcode=[0x0F, 0xC7], + operands=[Operand(type="Reg", size=64, dest="EA")]) +add_insn("rdrand", "rdrand", modifiers=[6], cpu=["RDRAND"]) +add_insn("rdseed", "rdrand", modifiers=[7], cpu=["RDSEED"]) + +# FSGSBASE instructions +add_group("fs_gs_base", + only64=True, + cpu=["FSGSBASE"], + modifiers=['SpAdd'], + opersize=32, + prefix=0xF3, + opcode=[0x0F, 0xAE], + operands=[Operand(type="Reg", size=32, dest="EA")]) +add_group("fs_gs_base", + only64=True, + cpu=["FSGSBASE"], + opersize=64, + modifiers=['SpAdd'], + prefix=0xF3, + opcode=[0x0F, 0xAE], + operands=[Operand(type="Reg", size=64, dest="EA")]) + +add_insn("rdfsbase", "fs_gs_base", modifiers=[0], only64=True) +add_insn("rdgsbase", "fs_gs_base", modifiers=[1], only64=True) +add_insn("wrfsbase", "fs_gs_base", modifiers=[2], only64=True) +add_insn("wrgsbase", "fs_gs_base", modifiers=[3], only64=True) + +# Float-16 conversion instructions +for g in ['ps2ph', 'ph2ps']: + operands1=[] + operands1.append(Operand(type="SIMDReg", size=128, dest="EA")) + operands1.append(Operand(type="SIMDReg", size=128, dest="Spare")) + + operands2=[] + operands2.append(Operand(type="Mem", size=64, dest="EA")) + operands2.append(Operand(type="SIMDReg", size=128, dest="Spare")) + + operands3=[] + operands3.append(Operand(type="SIMDReg", size=128, dest="EA")) + operands3.append(Operand(type="SIMDReg", size=256, dest="Spare")) + + operands4=[] + operands4.append(Operand(type="Mem", size=128, dest="EA")) + operands4.append(Operand(type="SIMDReg", size=256, dest="Spare")) + + if g == 'ph2ps': + operands1.reverse() + operands2.reverse() + operands3.reverse() + operands4.reverse() + map = 0x38 + elif g == 'ps2ph': + immop = Operand(type="Imm", size=8, relaxed=True, dest="Imm") + operands1.append(immop) + operands2.append(immop) + operands3.append(immop) + operands4.append(immop) + map = 0x3A + + add_group("avx_cvt" + g, + cpu=["F16C", "AVX"], + modifiers=["PreAdd", "Op2Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, map, 0x00], + operands=operands1) + + add_group("avx_cvt" + g, + cpu=["F16C", "AVX"], + modifiers=["PreAdd", "Op2Add"], + vex=128, + prefix=0x00, + opcode=[0x0F, map, 0x00], + operands=operands2) + + add_group("avx_cvt" + g, + cpu=["F16C", "AVX"], + modifiers=["PreAdd", "Op2Add"], + vex=256, + prefix=0x00, + opcode=[0x0F, map, 0x00], + operands=operands3) + + add_group("avx_cvt" + g, + cpu=["F16C", "AVX"], + modifiers=["PreAdd", "Op2Add"], + vex=256, + prefix=0x00, + opcode=[0x0F, map, 0x00], + operands=operands4) + +add_insn("vcvtps2ph", "avx_cvtps2ph", modifiers=[0x66, 0x1D], avx=True) +add_insn("vcvtph2ps", "avx_cvtph2ps", modifiers=[0x66, 0x13], avx=True) + +##################################################################### +# AMD SSE4a instructions +##################################################################### + +add_group("extrq", + cpu=["SSE4a"], + prefix=0x66, + opcode=[0x0F, 0x78], + operands=[Operand(type="SIMDReg", size=128, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("extrq", + cpu=["SSE4a"], + prefix=0x66, + opcode=[0x0F, 0x79], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) + +add_insn("extrq", "extrq") + +add_group("insertq", + cpu=["SSE4a"], + prefix=0xF2, + opcode=[0x0F, 0x78], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +add_group("insertq", + cpu=["SSE4a"], + prefix=0xF2, + opcode=[0x0F, 0x79], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) + +add_insn("insertq", "insertq") + +add_group("movntsd", + cpu=["SSE4a"], + prefix=0xF2, + opcode=[0x0F, 0x2B], + operands=[Operand(type="Mem", size=64, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare")]) + +add_insn("movntsd", "movntsd") + +add_group("movntss", + cpu=["SSE4a"], + prefix=0xF3, + opcode=[0x0F, 0x2B], + operands=[Operand(type="Mem", size=32, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="Spare")]) + +add_insn("movntss", "movntss") + +##################################################################### +# AMD XOP instructions +##################################################################### + +add_group("vfrc_pdps", + cpu=["XOP"], + modifiers=["Op1Add"], + xop=128, + opcode=[0x09, 0x80], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("vfrc_pdps", + cpu=["XOP"], + modifiers=["Op1Add"], + xop=256, + opcode=[0x09, 0x80], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) +add_insn("vfrczpd", "vfrc_pdps", modifiers=[0x01]) +add_insn("vfrczps", "vfrc_pdps", modifiers=[0x00]) + +add_group("vfrczsd", + cpu=["XOP"], + xop=128, + opcode=[0x09, 0x83], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("vfrczsd", + cpu=["XOP"], + xop=128, + opcode=[0x09, 0x83], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Mem", size=64, relaxed=True, dest="EA")]) +add_insn("vfrczsd", "vfrczsd") + +add_group("vfrczss", + cpu=["XOP"], + xop=128, + opcode=[0x09, 0x82], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) +add_group("vfrczss", + cpu=["XOP"], + xop=128, + opcode=[0x09, 0x82], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="Mem", size=32, relaxed=True, dest="EA")]) +add_insn("vfrczss", "vfrczss") + +add_group("vpcmov", + cpu=["XOP"], + xop=128, + xopw=0, + opcode=[0x08, 0xA2], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="VEXImmSrc")]) +add_group("vpcmov", + cpu=["XOP"], + xop=128, + xopw=1, + opcode=[0x08, 0xA2], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="VEXImmSrc"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("vpcmov", + cpu=["XOP"], + xop=256, + xopw=0, + opcode=[0x08, 0xA2], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=256, dest="VEXImmSrc")]) +add_group("vpcmov", + cpu=["XOP"], + xop=256, + xopw=1, + opcode=[0x08, 0xA2], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDReg", size=256, dest="VEXImmSrc"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) + +add_insn("vpcmov", "vpcmov") + +add_group("vpcom", + cpu=["XOP"], + modifiers=["Op1Add", "Imm8"], + xop=128, + opcode=[0x08, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("vpcom_imm", + cpu=["XOP"], + modifiers=["Op1Add"], + xop=128, + opcode=[0x08, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +for opc, sfx in [(0xCC, "b"), + (0xCE, "d"), + (0xCD, "w"), + (0xCF, "q"), + (0xEC, "ub"), + (0xEE, "ud"), + (0xEF, "uq"), + (0xED, "uw")]: + add_insn("vpcom"+sfx, "vpcom_imm", modifiers=[opc]) + for ib, cc in enumerate(["lt", "le", "gt", "ge", + "eq", "neq", "false", "true"]): + add_insn("vpcom"+cc+sfx, "vpcom", modifiers=[opc, ib]) + # ne alias for neq + add_insn("vpcomne"+sfx, "vpcom", modifiers=[opc, 5]) + +add_group("vphaddsub", + cpu=["XOP"], + modifiers=["Op1Add"], + xop=128, + opcode=[0x09, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) + +add_insn("vphaddbw", "vphaddsub", modifiers=[0xC1]) +add_insn("vphaddbd", "vphaddsub", modifiers=[0xC2]) +add_insn("vphaddbq", "vphaddsub", modifiers=[0xC3]) +add_insn("vphaddwd", "vphaddsub", modifiers=[0xC6]) +add_insn("vphaddwq", "vphaddsub", modifiers=[0xC7]) +add_insn("vphadddq", "vphaddsub", modifiers=[0xCB]) + +add_insn("vphaddubw", "vphaddsub", modifiers=[0xD1]) +add_insn("vphaddubd", "vphaddsub", modifiers=[0xD2]) +add_insn("vphaddubq", "vphaddsub", modifiers=[0xD3]) +add_insn("vphadduwd", "vphaddsub", modifiers=[0xD6]) +add_insn("vphadduwq", "vphaddsub", modifiers=[0xD7]) +add_insn("vphaddudq", "vphaddsub", modifiers=[0xDB]) + +add_insn("vphsubbw", "vphaddsub", modifiers=[0xE1]) +add_insn("vphsubwd", "vphaddsub", modifiers=[0xE2]) +add_insn("vphsubdq", "vphaddsub", modifiers=[0xE3]) + +add_group("vpma", + cpu=["XOP"], + modifiers=["Op1Add"], + xop=128, + opcode=[0x08, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="VEXImmSrc")]) + +add_insn("vpmacsdd", "vpma", modifiers=[0x9E]) +add_insn("vpmacsdqh", "vpma", modifiers=[0x9F]) +add_insn("vpmacsdql", "vpma", modifiers=[0x97]) +add_insn("vpmacssdd", "vpma", modifiers=[0x8E]) +add_insn("vpmacssdqh", "vpma", modifiers=[0x8F]) +add_insn("vpmacssdql", "vpma", modifiers=[0x87]) +add_insn("vpmacsswd", "vpma", modifiers=[0x86]) +add_insn("vpmacssww", "vpma", modifiers=[0x85]) +add_insn("vpmacswd", "vpma", modifiers=[0x96]) +add_insn("vpmacsww", "vpma", modifiers=[0x95]) +add_insn("vpmadcsswd", "vpma", modifiers=[0xA6]) +add_insn("vpmadcswd", "vpma", modifiers=[0xB6]) + +add_group("vpperm", + cpu=["XOP"], + xop=128, + xopw=0, + opcode=[0x08, 0xA3], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="VEXImmSrc")]) +add_group("vpperm", + cpu=["XOP"], + xop=128, + xopw=1, + opcode=[0x08, 0xA3], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="VEXImmSrc"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_insn("vpperm", "vpperm") + +add_group("vprot", + cpu=["XOP"], + modifiers=["Op1Add"], + xop=128, + xopw=0, + opcode=[0x09, 0x90], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="VEX")]) +add_group("vprot", + cpu=["XOP"], + modifiers=["Op1Add"], + xop=128, + xopw=1, + opcode=[0x09, 0x90], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("vprot", + cpu=["XOP"], + modifiers=["Op1Add"], + xop=128, + opcode=[0x08, 0xC0], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) +for opc, sfx in enumerate(["b", "w", "d", "q"]): + add_insn("vprot"+sfx, "vprot", modifiers=[opc]) + +add_group("amd_vpshift", + cpu=["XOP"], + modifiers=["Op1Add"], + xop=128, + xopw=0, + opcode=[0x09, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="VEX")]) +add_group("amd_vpshift", + cpu=["XOP"], + modifiers=["Op1Add"], + xop=128, + xopw=1, + opcode=[0x09, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +for opc, sfx in enumerate(["b", "w", "d", "q"]): + add_insn("vpsha"+sfx, "amd_vpshift", modifiers=[0x98+opc]) + add_insn("vpshl"+sfx, "amd_vpshift", modifiers=[0x94+opc]) + +##################################################################### +# AMD FMA4 instructions (same as original Intel FMA instructions) +##################################################################### + +add_group("fma_128_256", + cpu=["FMA4"], + modifiers=["Op2Add"], + vex=128, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="VEXImmSrc")]) +add_group("fma_128_256", + cpu=["FMA4"], + modifiers=["Op2Add"], + vex=128, + vexw=1, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="VEXImmSrc"), + Operand(type="SIMDRM", size=128, relaxed=True, dest="EA")]) +add_group("fma_128_256", + cpu=["FMA4"], + modifiers=["Op2Add"], + vex=256, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=256, dest="VEXImmSrc")]) +add_group("fma_128_256", + cpu=["FMA4"], + modifiers=["Op2Add"], + vex=256, + vexw=1, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=256, dest="Spare"), + Operand(type="SIMDReg", size=256, dest="VEX"), + Operand(type="SIMDReg", size=256, dest="VEXImmSrc"), + Operand(type="SIMDRM", size=256, relaxed=True, dest="EA")]) + +add_insn("vfmaddpd", "fma_128_256", modifiers=[0x69]) +add_insn("vfmaddps", "fma_128_256", modifiers=[0x68]) +add_insn("vfmaddsubpd", "fma_128_256", modifiers=[0x5D]) +add_insn("vfmaddsubps", "fma_128_256", modifiers=[0x5C]) +add_insn("vfmsubaddpd", "fma_128_256", modifiers=[0x5F]) +add_insn("vfmsubaddps", "fma_128_256", modifiers=[0x5E]) +add_insn("vfmsubpd", "fma_128_256", modifiers=[0x6D]) +add_insn("vfmsubps", "fma_128_256", modifiers=[0x6C]) +add_insn("vfnmaddpd", "fma_128_256", modifiers=[0x79]) +add_insn("vfnmaddps", "fma_128_256", modifiers=[0x78]) +add_insn("vfnmsubpd", "fma_128_256", modifiers=[0x7D]) +add_insn("vfnmsubps", "fma_128_256", modifiers=[0x7C]) + +for sz in [32, 64]: + add_group("fma_128_m%d" % sz, + cpu=["FMA4"], + modifiers=["Op2Add"], + vex=128, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="EA"), + Operand(type="SIMDReg", size=128, dest="VEXImmSrc")]) + add_group("fma_128_m%d" % sz, + cpu=["FMA4"], + modifiers=["Op2Add"], + vex=128, + vexw=0, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="Mem", size=sz, relaxed=True, dest="EA"), + Operand(type="SIMDReg", size=128, dest="VEXImmSrc")]) + add_group("fma_128_m%d" % sz, + cpu=["FMA4"], + modifiers=["Op2Add"], + vex=128, + vexw=1, + prefix=0x66, + opcode=[0x0F, 0x3A, 0x00], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="VEX"), + Operand(type="SIMDReg", size=128, dest="VEXImmSrc"), + Operand(type="Mem", size=sz, relaxed=True, dest="EA")]) + +add_insn("vfmaddsd", "fma_128_m64", modifiers=[0x6B]) +add_insn("vfmaddss", "fma_128_m32", modifiers=[0x6A]) +add_insn("vfmsubsd", "fma_128_m64", modifiers=[0x6F]) +add_insn("vfmsubss", "fma_128_m32", modifiers=[0x6E]) +add_insn("vfnmaddsd", "fma_128_m64", modifiers=[0x7B]) +add_insn("vfnmaddss", "fma_128_m32", modifiers=[0x7A]) +add_insn("vfnmsubsd", "fma_128_m64", modifiers=[0x7F]) +add_insn("vfnmsubss", "fma_128_m32", modifiers=[0x7E]) + +##################################################################### +# Intel XSAVE and XSAVEOPT instructions +##################################################################### +add_insn("xgetbv", "threebyte", modifiers=[0x0F, 0x01, 0xD0], + cpu=["XSAVE", "386"]) +add_insn("xsetbv", "threebyte", modifiers=[0x0F, 0x01, 0xD1], + cpu=["XSAVE", "386", "Priv"]) +add_insn("xsave", "twobytemem", modifiers=[4, 0x0F, 0xAE], + cpu=["XSAVE", "386"]) +add_insn("xrstor", "twobytemem", modifiers=[5, 0x0F, 0xAE], + cpu=["XSAVE", "386"]) + +add_insn("xsaveopt", "twobytemem", modifiers=[6, 0x0F, 0xAE], + cpu=["XSAVEOPT"]) + +add_group("xsaveopt64", + modifiers=["SpAdd", "Op0Add", "Op1Add"], + opcode=[0x00, 0x00], + spare=0, + opersize=64, + operands=[Operand(type="Mem", relaxed=True, dest="EA")]) +add_insn("xsaveopt64", "xsaveopt64", modifiers=[6, 0x0F, 0xAE], + cpu=["XSAVEOPT"], only64=True) + +##################################################################### +# Intel MOVBE instruction +##################################################################### +for sz in (16, 32, 64): + add_group("movbe", + cpu=["MOVBE"], + opersize=sz, + opcode=[0x0F, 0x38, 0xF0], + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="Mem", size=sz, relaxed=True, dest="EA")]) + add_group("movbe", + cpu=["MOVBE"], + opersize=sz, + opcode=[0x0F, 0x38, 0xF1], + operands=[Operand(type="Mem", size=sz, relaxed=True, dest="EA"), + Operand(type="Reg", size=sz, dest="Spare")]) +add_insn("movbe", "movbe") + +##################################################################### +# Intel advanced bit manipulations (BMI1/2) +##################################################################### + +add_insn("tzcnt", "cnt", modifiers=[0xBC], cpu=["BMI1"]) +# LZCNT is present as AMD ext + +for sfx, sz in zip("lq", [32, 64]): + add_group("vex_gpr_ndd_rm_0F38_regext", + suffix=sfx, + modifiers=["PreAdd", "Op2Add", "SpAdd" ], + opersize=sz, + prefix=0x00, + opcode=[0x0F, 0x38, 0x00], + vex=0, ## VEX.L=0 + operands=[Operand(type="Reg", size=sz, dest="VEX"), + Operand(type="RM", size=sz, relaxed=True, dest="EA")]) + + +add_insn("blsr", "vex_gpr_ndd_rm_0F38_regext", modifiers=[0x00, 0xF3, 1], + cpu=["BMI1"]) +add_insn("blsmsk", "vex_gpr_ndd_rm_0F38_regext", modifiers=[0x00, 0xF3, 2], + cpu=["BMI1"]) +add_insn("blsi", "vex_gpr_ndd_rm_0F38_regext", modifiers=[0x00, 0xF3, 3], + cpu=["BMI1"]) + +for sfx, sz in zip("lq", [32, 64]): + add_group("vex_gpr_reg_rm_0F_imm8", + suffix=sfx, + modifiers=["PreAdd", "Op1Add", "Op2Add"], + opersize=sz, + prefix=0x00, + opcode=[0x0F, 0x00, 0x00], + vex=0, ## VEX.L=0 + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="RM", size=sz, relaxed=True, dest="EA"), + Operand(type="Imm", size=8, relaxed=True, dest="Imm")]) + +add_insn("rorx", "vex_gpr_reg_rm_0F_imm8", modifiers=[0xF2, 0x3A, 0xF0], + cpu=["BMI2"]) + +for sfx, sz in zip("lq", [32, 64]): # no 16-bit forms + add_group("vex_gpr_reg_nds_rm_0F", + suffix=sfx, + modifiers=["PreAdd", "Op1Add", "Op2Add"], + opersize=sz, + prefix=0x00, + opcode=[0x0F, 0x00, 0x00], + vex=0, + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="Reg", size=sz, dest="VEX"), + Operand(type="RM", size=sz, relaxed=True, dest="EA")]) + +add_insn("andn", "vex_gpr_reg_nds_rm_0F", modifiers=[0x00, 0x38, 0xF2], + cpu=["BMI1"]) + +add_insn("pdep", "vex_gpr_reg_nds_rm_0F", modifiers=[0xF2, 0x38, 0xF5], + cpu=["BMI2"]) +add_insn("pext", "vex_gpr_reg_nds_rm_0F", modifiers=[0xF3, 0x38, 0xF5], + cpu=["BMI2"]) + +for sfx, sz in zip("lq", [32, 64]): # no 16-bit forms + add_group("vex_gpr_reg_rm_nds_0F", + suffix=sfx, + modifiers=["PreAdd", "Op1Add", "Op2Add"], + opersize=sz, + prefix=0x00, + opcode=[0x0F, 0x00, 0x00], + vex=0, + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="RM", size=sz, relaxed=True, dest="EA"), + Operand(type="Reg", size=sz, dest="VEX")]) + +add_insn("bzhi", "vex_gpr_reg_rm_nds_0F", modifiers=[0x00, 0x38, 0xF5], + cpu=["BMI2"]) +add_insn("shlx", "vex_gpr_reg_rm_nds_0F", modifiers=[0x66, 0x38, 0xF7], + cpu=["BMI2"]) +add_insn("shrx", "vex_gpr_reg_rm_nds_0F", modifiers=[0xF2, 0x38, 0xF7], + cpu=["BMI2"]) +add_insn("sarx", "vex_gpr_reg_rm_nds_0F", modifiers=[0xF3, 0x38, 0xF7], + cpu=["BMI2"]) + +add_insn("mulx", "vex_gpr_reg_nds_rm_0F", modifiers=[0xF2, 0x38, 0xF6], + cpu=["BMI2"]) + +for sfx, sz in zip("lq", [32, 64]): # no 16-bit forms + add_group("bextr", + cpu=["BMI1"], + suffix=sfx, + opersize=sz, + prefix=0x00, + opcode=[0x0F, 0x38, 0xF7], + vex=0, + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="RM", size=sz, relaxed=True, dest="EA"), + Operand(type="Reg", size=sz, dest="VEX")]) + add_group("bextr", # TBM alternate form of bextr + cpu=["TBM"], + suffix=sfx, + opersize=sz, + prefix=0x00, + opcode=[0x0A, 0x10], + xop=128, + xopw=(sz==64), + onlyavx=True, + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="RM", size=sz, relaxed=True, dest="EA"), + Operand(type="Imm", size=32, relaxed=True, dest="Imm")]) + +add_insn("bextr", "bextr") + +##################################################################### +# Intel INVPCID instruction +##################################################################### +add_group("invpcid", + cpu=["INVPCID", "Priv"], + not64=True, + prefix=0x66, + opcode=[0x0F, 0x38, 0x82], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="Mem", size=128, relaxed=True, dest="EA")]) +add_group("invpcid", + cpu=["INVPCID", "Priv"], + only64=True, + def_opersize_64=64, + prefix=0x66, + opcode=[0x0F, 0x38, 0x82], + operands=[Operand(type="Reg", size=64, dest="Spare"), + Operand(type="Mem", size=128, relaxed=True, dest="EA")]) +add_insn("invpcid", "invpcid") + + +##################################################################### +# Intel SHA instructions +##################################################################### +add_group("intel_SHA1MSG1", + cpu=["SHA"], + opcode=[0x0F, 0x38, 0xC9], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, dest="EA", relaxed=True)]) +add_group("intel_SHA1MSG2", + cpu=["SHA"], + opcode=[0x0F, 0x38, 0xCA], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, dest="EA", relaxed=True)]) +add_group("intel_SHA1NEXTE", + cpu=["SHA"], + opcode=[0x0F, 0x38, 0xC8], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, dest="EA", relaxed=True)]) +add_group("intel_SHA1RNDS4", + cpu=["SHA"], + opcode=[0x0F, 0x3A, 0xCC], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, dest="EA", relaxed=True), + Operand(type="Imm", size=8, dest="Imm", relaxed=True)]) +add_group("intel_SHA256MSG1", + cpu=["SHA"], + opcode=[0x0F, 0x38, 0xCC], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, dest="EA", relaxed=True)]) +add_group("intel_SHA256MSG2", + cpu=["SHA"], + opcode=[0x0F, 0x38, 0xCD], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDRM", size=128, dest="EA", relaxed=True)]) +add_group("intel_SHA256RNDS2", + cpu=["SHA"], + opcode=[0x0F, 0x38, 0xCB], + operands=[Operand(type="SIMDReg", size=128, dest="Spare"), + Operand(type="SIMDReg", size=128, dest="EA")]) + +add_insn("SHA1MSG1", "intel_SHA1MSG1") +add_insn("SHA1MSG2", "intel_SHA1MSG2") +add_insn("SHA1NEXTE", "intel_SHA1NEXTE") +add_insn("SHA1RNDS4", "intel_SHA1RNDS4") +add_insn("SHA256MSG1", "intel_SHA256MSG1") +add_insn("SHA256MSG2", "intel_SHA256MSG2") +add_insn("SHA256RNDS2", "intel_SHA256RNDS2") + +##################################################################### +# Intel SMAP instructions +##################################################################### +add_insn("clac", "threebyte", modifiers=[0x0F, 0x01, 0xCA], cpu=["SMAP"]) +add_insn("stac", "threebyte", modifiers=[0x0F, 0x01, 0xCB], cpu=["SMAP"]) + +##################################################################### +# Intel ADX instructions +##################################################################### +for sfx, sz in zip("lq", [32, 64]): + add_group("vex_gpr_ndd_rm_0F38", + suffix=sfx, + modifiers=["PreAdd", "Op2Add"], + opersize=sz, + prefix=0x00, + opcode=[0x0F, 0x38, 0x00], + operands=[Operand(type="Reg", size=sz, dest="Spare"), + Operand(type="RM", size=sz, relaxed=True, dest="EA")]) + +add_insn("adcx", "vex_gpr_ndd_rm_0F38", modifiers=[0x66, 0xF6], cpu=["ADX"]) +add_insn("adox", "vex_gpr_ndd_rm_0F38", modifiers=[0xF3, 0xF6], cpu=["ADX"]) + + +##################################################################### +# AMD trailing bit manipulation (TBM) +##################################################################### + +for sfx, sz in zip("lq", [32, 64]): # no 16-bit forms + add_group("xop_gpr_reg_rm_09", + cpu=["TBM"], + suffix=sfx, + modifiers=["Op1Add","SpAdd"], + opersize=sz, + prefix=0x00, + opcode=[0x09, 0x00], + xop=128, + xopw=(sz==64), + operands=[Operand(type="Reg", size=sz, dest="VEX"), + Operand(type="RM", size=sz, relaxed=True, dest="EA")]) + +add_insn("blcfill", "xop_gpr_reg_rm_09", modifiers=[0x01, 1]) +add_insn("blci", "xop_gpr_reg_rm_09", modifiers=[0x02, 6]) +add_insn("blcic", "xop_gpr_reg_rm_09", modifiers=[0x01, 5]) +add_insn("blcmsk", "xop_gpr_reg_rm_09", modifiers=[0x02, 1]) +add_insn("blcs", "xop_gpr_reg_rm_09", modifiers=[0x01, 3]) +add_insn("blsfill", "xop_gpr_reg_rm_09", modifiers=[0x01, 2]) +add_insn("blsic", "xop_gpr_reg_rm_09", modifiers=[0x01, 6]) +add_insn("t1mskc", "xop_gpr_reg_rm_09", modifiers=[0x01, 7]) +add_insn("tzmsk", "xop_gpr_reg_rm_09", modifiers=[0x01, 4]) + +##################################################################### +# AMD 3DNow! instructions +##################################################################### + +add_insn("prefetch", "twobytemem", modifiers=[0x00, 0x0F, 0x0D], cpu=["3DNow"]) +add_insn("prefetchw", "twobytemem", modifiers=[0x01, 0x0F, 0x0D], cpu=["PRFCHW"]) +add_insn("femms", "twobyte", modifiers=[0x0F, 0x0E], cpu=["3DNow"]) + +add_group("now3d", + cpu=["3DNow"], + modifiers=["Imm8"], + opcode=[0x0F, 0x0F], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="SIMDRM", size=64, relaxed=True, dest="EA")]) + +add_insn("pavgusb", "now3d", modifiers=[0xBF]) +add_insn("pf2id", "now3d", modifiers=[0x1D]) +add_insn("pf2iw", "now3d", modifiers=[0x1C], cpu=["Athlon", "3DNow"]) +add_insn("pfacc", "now3d", modifiers=[0xAE]) +add_insn("pfadd", "now3d", modifiers=[0x9E]) +add_insn("pfcmpeq", "now3d", modifiers=[0xB0]) +add_insn("pfcmpge", "now3d", modifiers=[0x90]) +add_insn("pfcmpgt", "now3d", modifiers=[0xA0]) +add_insn("pfmax", "now3d", modifiers=[0xA4]) +add_insn("pfmin", "now3d", modifiers=[0x94]) +add_insn("pfmul", "now3d", modifiers=[0xB4]) +add_insn("pfnacc", "now3d", modifiers=[0x8A], cpu=["Athlon", "3DNow"]) +add_insn("pfpnacc", "now3d", modifiers=[0x8E], cpu=["Athlon", "3DNow"]) +add_insn("pfrcp", "now3d", modifiers=[0x96]) +add_insn("pfrcpit1", "now3d", modifiers=[0xA6]) +add_insn("pfrcpit2", "now3d", modifiers=[0xB6]) +add_insn("pfrsqit1", "now3d", modifiers=[0xA7]) +add_insn("pfrsqrt", "now3d", modifiers=[0x97]) +add_insn("pfsub", "now3d", modifiers=[0x9A]) +add_insn("pfsubr", "now3d", modifiers=[0xAA]) +add_insn("pi2fd", "now3d", modifiers=[0x0D]) +add_insn("pi2fw", "now3d", modifiers=[0x0C], cpu=["Athlon", "3DNow"]) +add_insn("pmulhrw", "now3d", modifiers=[0xB7]) +add_insn("pswapd", "now3d", modifiers=[0xBB], cpu=["Athlon", "3DNow"]) + +##################################################################### +# AMD extensions +##################################################################### + +add_insn("syscall", "twobyte", modifiers=[0x0F, 0x05], cpu=["686", "AMD"]) +for sfx in [None, "l", "q"]: + add_insn("sysret"+(sfx or ""), "twobyte", suffix=sfx, modifiers=[0x0F, 0x07], + cpu=["686", "AMD", "Priv"]) +add_insn("lzcnt", "cnt", modifiers=[0xBD], cpu=["LZCNT"]) + +##################################################################### +# AMD x86-64 extensions +##################################################################### + +add_insn("swapgs", "threebyte", modifiers=[0x0F, 0x01, 0xF8], only64=True) +add_insn("rdtscp", "threebyte", modifiers=[0x0F, 0x01, 0xF9], + cpu=["686", "AMD", "Priv"]) + +add_group("cmpxchg16b", + only64=True, + opersize=64, + opcode=[0x0F, 0xC7], + spare=1, + operands=[Operand(type="Mem", size=128, relaxed=True, dest="EA")]) + +add_insn("cmpxchg16b", "cmpxchg16b") + +##################################################################### +# AMD Pacifica SVM instructions +##################################################################### + +add_insn("clgi", "threebyte", modifiers=[0x0F, 0x01, 0xDD], cpu=["SVM"]) +add_insn("stgi", "threebyte", modifiers=[0x0F, 0x01, 0xDC], cpu=["SVM"]) +add_insn("vmmcall", "threebyte", modifiers=[0x0F, 0x01, 0xD9], cpu=["SVM"]) + +add_group("invlpga", + cpu=["SVM"], + opcode=[0x0F, 0x01, 0xDF], + operands=[]) +add_group("invlpga", + cpu=["SVM"], + opcode=[0x0F, 0x01, 0xDF], + operands=[Operand(type="MemrAX", dest="AdSizeEA"), + Operand(type="Creg", size=32, dest=None)]) + +add_insn("invlpga", "invlpga") + +add_group("skinit", + cpu=["SVM"], + opcode=[0x0F, 0x01, 0xDE], + operands=[]) +add_group("skinit", + cpu=["SVM"], + opcode=[0x0F, 0x01, 0xDE], + operands=[Operand(type="MemEAX", dest=None)]) + +add_insn("skinit", "skinit") + +add_group("svm_rax", + cpu=["SVM"], + modifiers=["Op2Add"], + opcode=[0x0F, 0x01, 0x00], + operands=[]) +add_group("svm_rax", + cpu=["SVM"], + modifiers=["Op2Add"], + opcode=[0x0F, 0x01, 0x00], + operands=[Operand(type="MemrAX", dest="AdSizeEA")]) + +add_insn("vmload", "svm_rax", modifiers=[0xDA]) +add_insn("vmrun", "svm_rax", modifiers=[0xD8]) +add_insn("vmsave", "svm_rax", modifiers=[0xDB]) + +##################################################################### +# VIA PadLock instructions +##################################################################### + +add_group("padlock", + cpu=["PadLock"], + modifiers=["Imm8", "PreAdd", "Op1Add"], + prefix=0x00, + opcode=[0x0F, 0x00], + operands=[]) + +add_insn("xstore", "padlock", modifiers=[0xC0, 0x00, 0xA7]) +add_insn("xstorerng", "padlock", modifiers=[0xC0, 0x00, 0xA7]) +add_insn("xcryptecb", "padlock", modifiers=[0xC8, 0xF3, 0xA7]) +add_insn("xcryptcbc", "padlock", modifiers=[0xD0, 0xF3, 0xA7]) +add_insn("xcryptctr", "padlock", modifiers=[0xD8, 0xF3, 0xA7]) +add_insn("xcryptcfb", "padlock", modifiers=[0xE0, 0xF3, 0xA7]) +add_insn("xcryptofb", "padlock", modifiers=[0xE8, 0xF3, 0xA7]) +add_insn("montmul", "padlock", modifiers=[0xC0, 0xF3, 0xA6]) +add_insn("xsha1", "padlock", modifiers=[0xC8, 0xF3, 0xA6]) +add_insn("xsha256", "padlock", modifiers=[0xD0, 0xF3, 0xA6]) + +##################################################################### +# Cyrix MMX instructions +##################################################################### + +add_group("cyrixmmx", + cpu=["MMX", "Cyrix"], + modifiers=["Op1Add"], + opcode=[0x0F, 0x00], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="SIMDRM", size=64, relaxed=True, dest="EA")]) + +add_insn("paddsiw", "cyrixmmx", modifiers=[0x51]) +add_insn("paveb", "cyrixmmx", modifiers=[0x50]) +add_insn("pdistib", "cyrixmmx", modifiers=[0x54]) +add_insn("pmagw", "cyrixmmx", modifiers=[0x52]) +add_insn("pmulhriw", "cyrixmmx", modifiers=[0x5D]) +add_insn("pmulhrwc", "cyrixmmx", modifiers=[0x59]) +add_insn("pmvgezb", "cyrixmmx", modifiers=[0x5C]) +add_insn("pmvlzb", "cyrixmmx", modifiers=[0x5B]) +add_insn("pmvnzb", "cyrixmmx", modifiers=[0x5A]) +add_insn("pmvzb", "cyrixmmx", modifiers=[0x58]) +add_insn("psubsiw", "cyrixmmx", modifiers=[0x55]) + +add_group("pmachriw", + cpu=["MMX", "Cyrix"], + opcode=[0x0F, 0x5E], + operands=[Operand(type="SIMDReg", size=64, dest="Spare"), + Operand(type="Mem", size=64, relaxed=True, dest="EA")]) + +add_insn("pmachriw", "pmachriw") + +##################################################################### +# Cyrix extensions +##################################################################### + +add_insn("smint", "twobyte", modifiers=[0x0F, 0x38], cpu=["686", "Cyrix"]) +add_insn("smintold", "twobyte", modifiers=[0x0F, 0x7E], cpu=["486", "Cyrix", "Obs"]) + +add_group("rdwrshr", + cpu=["Cyrix", "SMM", "686"], + modifiers=["Op1Add"], + opcode=[0x0F, 0x36], + operands=[Operand(type="RM", size=32, relaxed=True, dest="EA")]) + +add_insn("rdshr", "rdwrshr", modifiers=[0x00]) +add_insn("wrshr", "rdwrshr", modifiers=[0x01]) + +add_group("rsdc", + cpu=["Cyrix", "SMM", "486"], + opcode=[0x0F, 0x79], + operands=[Operand(type="SegReg", size=16, relaxed=True, dest="Spare"), + Operand(type="Mem", size=80, relaxed=True, dest="EA")]) + +add_insn("rsdc", "rsdc") + +add_group("cyrixsmm", + cpu=["Cyrix", "SMM", "486"], + modifiers=["Op1Add"], + opcode=[0x0F, 0x00], + operands=[Operand(type="Mem", size=80, relaxed=True, dest="EA")]) + +add_insn("rsldt", "cyrixsmm", modifiers=[0x7B]) +add_insn("rsts", "cyrixsmm", modifiers=[0x7D]) +add_insn("svldt", "cyrixsmm", modifiers=[0x7A]) +add_insn("svts", "cyrixsmm", modifiers=[0x7C]) + +add_group("svdc", + cpu=["Cyrix", "SMM", "486"], + opcode=[0x0F, 0x78], + operands=[Operand(type="Mem", size=80, relaxed=True, dest="EA"), + Operand(type="SegReg", size=16, relaxed=True, dest="Spare")]) + +add_insn("svdc", "svdc") + +##################################################################### +# Obsolete/undocumented instructions +##################################################################### + +add_insn("fsetpm", "twobyte", modifiers=[0xDB, 0xE4], cpu=["286", "FPU", "Obs"]) +add_insn("loadall", "twobyte", modifiers=[0x0F, 0x07], cpu=["386", "Undoc"]) +add_insn("loadall286", "twobyte", modifiers=[0x0F, 0x05], cpu=["286", "Undoc"]) +add_insn("salc", "onebyte", modifiers=[0xD6], cpu=["Undoc"], not64=True) +add_insn("smi", "onebyte", modifiers=[0xF1], cpu=["386", "Undoc"]) + +add_group("ibts", + cpu=["Undoc", "Obs", "386"], + opersize=16, + opcode=[0x0F, 0xA7], + operands=[Operand(type="RM", size=16, relaxed=True, dest="EA"), + Operand(type="Reg", size=16, dest="Spare")]) +add_group("ibts", + cpu=["Undoc", "Obs", "386"], + opersize=32, + opcode=[0x0F, 0xA7], + operands=[Operand(type="RM", size=32, relaxed=True, dest="EA"), + Operand(type="Reg", size=32, dest="Spare")]) + +add_insn("ibts", "ibts") + +add_group("umov", + cpu=["Undoc", "386"], + opcode=[0x0F, 0x10], + operands=[Operand(type="RM", size=8, relaxed=True, dest="EA"), + Operand(type="Reg", size=8, dest="Spare")]) +add_group("umov", + cpu=["Undoc", "386"], + opersize=16, + opcode=[0x0F, 0x11], + operands=[Operand(type="RM", size=16, relaxed=True, dest="EA"), + Operand(type="Reg", size=16, dest="Spare")]) +add_group("umov", + cpu=["Undoc", "386"], + opersize=32, + opcode=[0x0F, 0x11], + operands=[Operand(type="RM", size=32, relaxed=True, dest="EA"), + Operand(type="Reg", size=32, dest="Spare")]) +add_group("umov", + cpu=["Undoc", "386"], + opcode=[0x0F, 0x12], + operands=[Operand(type="Reg", size=8, dest="Spare"), + Operand(type="RM", size=8, relaxed=True, dest="EA")]) +add_group("umov", + cpu=["Undoc", "386"], + opersize=16, + opcode=[0x0F, 0x13], + operands=[Operand(type="Reg", size=16, dest="Spare"), + Operand(type="RM", size=16, relaxed=True, dest="EA")]) +add_group("umov", + cpu=["Undoc", "386"], + opersize=32, + opcode=[0x0F, 0x13], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="RM", size=32, relaxed=True, dest="EA")]) + +add_insn("umov", "umov") + +add_group("xbts", + cpu=["Undoc", "Obs", "386"], + opersize=16, + opcode=[0x0F, 0xA6], + operands=[Operand(type="Reg", size=16, dest="Spare"), + Operand(type="Mem", size=16, relaxed=True, dest="EA")]) +add_group("xbts", + cpu=["Undoc", "Obs", "386"], + opersize=32, + opcode=[0x0F, 0xA6], + operands=[Operand(type="Reg", size=32, dest="Spare"), + Operand(type="Mem", size=32, relaxed=True, dest="EA")]) + +add_insn("xbts", "xbts") + +finalize_insns() + +##################################################################### +# Prefixes +##################################################################### +# operand size overrides +for sz in [16, 32, 64]: + add_prefix("o%d" % sz, "OPERSIZE", sz, parser="nasm", only64=(sz==64)) + add_prefix("data%d" % sz, "OPERSIZE", sz, parser="gas", only64=(sz==64)) +add_prefix("word", "OPERSIZE", 16, parser="gas") +add_prefix("dword", "OPERSIZE", 32, parser="gas") +add_prefix("qword", "OPERSIZE", 64, parser="gas", only64=True) + +# address size overrides +for sz in [16, 32, 64]: + add_prefix("a%d" % sz, "ADDRSIZE", sz, parser="nasm", only64=(sz==64)) + add_prefix("addr%d" % sz, "ADDRSIZE", sz, parser="gas", only64=(sz==64)) +add_prefix("aword", "ADDRSIZE", 16, parser="gas") +add_prefix("adword", "ADDRSIZE", 32, parser="gas") +add_prefix("aqword", "ADDRSIZE", 64, parser="gas", only64=True) + +# instruction prefixes +add_prefix("lock", "LOCKREP", 0xF0) +add_prefix("repne", "LOCKREP", 0xF2) +add_prefix("repnz", "LOCKREP", 0xF2) +add_prefix("rep", "LOCKREP", 0xF3) +add_prefix("repe", "LOCKREP", 0xF3) +add_prefix("repz", "LOCKREP", 0xF3) + +# other prefixes, limited to GAS-only at the moment +# Hint taken/not taken for jumps +add_prefix("ht", "SEGREG", 0x3E, parser="gas") +add_prefix("hnt", "SEGREG", 0x2E, parser="gas") + +# REX byte explicit prefixes +for val, suf in enumerate(["", "z", "y", "yz", "x", "xz", "xy", "xyz"]): + add_prefix("rex" + suf, "REX", 0x40+val, parser="gas", only64=True) + add_prefix("rex64" + suf, "REX", 0x48+val, parser="gas", only64=True) + +##################################################################### +# Output generation +##################################################################### + +output_groups(open("x86insns.c", "wt")) +output_gas_insns(open("x86insn_gas.gperf", "wt")) +output_nasm_insns(open("x86insn_nasm.gperf", "wt")) + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/Makefile.inc new file mode 100644 index 0000000000..c633e6c174 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/Makefile.inc @@ -0,0 +1,263 @@ +TESTS += modules/arch/x86/tests/x86_test.sh + +EXTRA_DIST += modules/arch/x86/tests/x86_test.sh +EXTRA_DIST += modules/arch/x86/tests/gen-fma-test.py +EXTRA_DIST += modules/arch/x86/tests/addbyte.asm +EXTRA_DIST += modules/arch/x86/tests/addbyte.errwarn +EXTRA_DIST += modules/arch/x86/tests/addbyte.hex +EXTRA_DIST += modules/arch/x86/tests/addrop.asm +EXTRA_DIST += modules/arch/x86/tests/addrop.errwarn +EXTRA_DIST += modules/arch/x86/tests/addrop.hex +EXTRA_DIST += modules/arch/x86/tests/addrop-err.asm +EXTRA_DIST += modules/arch/x86/tests/addrop-err.errwarn +EXTRA_DIST += modules/arch/x86/tests/aes.asm +EXTRA_DIST += modules/arch/x86/tests/aes.hex +EXTRA_DIST += modules/arch/x86/tests/amd200707.asm +EXTRA_DIST += modules/arch/x86/tests/amd200707.hex +EXTRA_DIST += modules/arch/x86/tests/amd-fma4.asm +EXTRA_DIST += modules/arch/x86/tests/amd-fma4.hex +EXTRA_DIST += modules/arch/x86/tests/arithsmall.asm +EXTRA_DIST += modules/arch/x86/tests/arithsmall.errwarn +EXTRA_DIST += modules/arch/x86/tests/arithsmall.hex +EXTRA_DIST += modules/arch/x86/tests/avx.asm +EXTRA_DIST += modules/arch/x86/tests/avx.hex +EXTRA_DIST += modules/arch/x86/tests/avx16.asm +EXTRA_DIST += modules/arch/x86/tests/avx16.hex +EXTRA_DIST += modules/arch/x86/tests/avx2.asm +EXTRA_DIST += modules/arch/x86/tests/avx2.hex +EXTRA_DIST += modules/arch/x86/tests/avxcc.asm +EXTRA_DIST += modules/arch/x86/tests/avxcc.hex +EXTRA_DIST += modules/arch/x86/tests/bittest.asm +EXTRA_DIST += modules/arch/x86/tests/bittest.hex +EXTRA_DIST += modules/arch/x86/tests/bmi1.asm +EXTRA_DIST += modules/arch/x86/tests/bmi1.hex +EXTRA_DIST += modules/arch/x86/tests/bmi2.asm +EXTRA_DIST += modules/arch/x86/tests/bmi2.hex +EXTRA_DIST += modules/arch/x86/tests/bswap64.asm +EXTRA_DIST += modules/arch/x86/tests/bswap64.hex +EXTRA_DIST += modules/arch/x86/tests/clmul.asm +EXTRA_DIST += modules/arch/x86/tests/clmul.hex +EXTRA_DIST += modules/arch/x86/tests/cmpxchg.asm +EXTRA_DIST += modules/arch/x86/tests/cmpxchg.hex +EXTRA_DIST += modules/arch/x86/tests/cpubasic-err.asm +EXTRA_DIST += modules/arch/x86/tests/cpubasic-err.errwarn +EXTRA_DIST += modules/arch/x86/tests/cyrix.asm +EXTRA_DIST += modules/arch/x86/tests/cyrix.hex +EXTRA_DIST += modules/arch/x86/tests/div-err.asm +EXTRA_DIST += modules/arch/x86/tests/div-err.errwarn +EXTRA_DIST += modules/arch/x86/tests/ea-nonzero.asm +EXTRA_DIST += modules/arch/x86/tests/ea-nonzero.hex +EXTRA_DIST += modules/arch/x86/tests/ea-over.asm +EXTRA_DIST += modules/arch/x86/tests/ea-over.errwarn +EXTRA_DIST += modules/arch/x86/tests/ea-over.hex +EXTRA_DIST += modules/arch/x86/tests/ea-warn.asm +EXTRA_DIST += modules/arch/x86/tests/ea-warn.errwarn +EXTRA_DIST += modules/arch/x86/tests/ea-warn.hex +EXTRA_DIST += modules/arch/x86/tests/ebpindex.asm +EXTRA_DIST += modules/arch/x86/tests/ebpindex.hex +EXTRA_DIST += modules/arch/x86/tests/effaddr.asm +EXTRA_DIST += modules/arch/x86/tests/effaddr.hex +EXTRA_DIST += modules/arch/x86/tests/enter.asm +EXTRA_DIST += modules/arch/x86/tests/enter.errwarn +EXTRA_DIST += modules/arch/x86/tests/enter.hex +EXTRA_DIST += modules/arch/x86/tests/eptvpid.asm +EXTRA_DIST += modules/arch/x86/tests/eptvpid.hex +EXTRA_DIST += modules/arch/x86/tests/f16c.asm +EXTRA_DIST += modules/arch/x86/tests/f16c.hex +EXTRA_DIST += modules/arch/x86/tests/far64.asm +EXTRA_DIST += modules/arch/x86/tests/far64.hex +EXTRA_DIST += modules/arch/x86/tests/farbasic.asm +EXTRA_DIST += modules/arch/x86/tests/farbasic.hex +EXTRA_DIST += modules/arch/x86/tests/farithr.asm +EXTRA_DIST += modules/arch/x86/tests/farithr.hex +EXTRA_DIST += modules/arch/x86/tests/fcmov.asm +EXTRA_DIST += modules/arch/x86/tests/fcmov.hex +EXTRA_DIST += modules/arch/x86/tests/fma.asm +EXTRA_DIST += modules/arch/x86/tests/fma.hex +EXTRA_DIST += modules/arch/x86/tests/fsgsbase.asm +EXTRA_DIST += modules/arch/x86/tests/fsgsbase.hex +EXTRA_DIST += modules/arch/x86/tests/fwdequ64.asm +EXTRA_DIST += modules/arch/x86/tests/fwdequ64.hex +EXTRA_DIST += modules/arch/x86/tests/genopcode.asm +EXTRA_DIST += modules/arch/x86/tests/genopcode.hex +EXTRA_DIST += modules/arch/x86/tests/imm64.asm +EXTRA_DIST += modules/arch/x86/tests/imm64.errwarn +EXTRA_DIST += modules/arch/x86/tests/imm64.hex +EXTRA_DIST += modules/arch/x86/tests/invpcid.asm +EXTRA_DIST += modules/arch/x86/tests/invpcid.hex +EXTRA_DIST += modules/arch/x86/tests/iret.asm +EXTRA_DIST += modules/arch/x86/tests/iret.hex +EXTRA_DIST += modules/arch/x86/tests/jmp64-1.asm +EXTRA_DIST += modules/arch/x86/tests/jmp64-1.hex +EXTRA_DIST += modules/arch/x86/tests/jmp64-2.asm +EXTRA_DIST += modules/arch/x86/tests/jmp64-2.hex +EXTRA_DIST += modules/arch/x86/tests/jmp64-3.asm +EXTRA_DIST += modules/arch/x86/tests/jmp64-3.hex +EXTRA_DIST += modules/arch/x86/tests/jmp64-4.asm +EXTRA_DIST += modules/arch/x86/tests/jmp64-4.hex +EXTRA_DIST += modules/arch/x86/tests/jmp64-5.asm +EXTRA_DIST += modules/arch/x86/tests/jmp64-5.hex +EXTRA_DIST += modules/arch/x86/tests/jmp64-6.asm +EXTRA_DIST += modules/arch/x86/tests/jmp64-6.hex +EXTRA_DIST += modules/arch/x86/tests/jmpfar.asm +EXTRA_DIST += modules/arch/x86/tests/jmpfar.hex +EXTRA_DIST += modules/arch/x86/tests/larlsl.asm +EXTRA_DIST += modules/arch/x86/tests/larlsl.hex +EXTRA_DIST += modules/arch/x86/tests/lds.asm +EXTRA_DIST += modules/arch/x86/tests/lds.hex +EXTRA_DIST += modules/arch/x86/tests/lfs64.asm +EXTRA_DIST += modules/arch/x86/tests/lfs64.hex +EXTRA_DIST += modules/arch/x86/tests/loopadsz.asm +EXTRA_DIST += modules/arch/x86/tests/loopadsz.hex +EXTRA_DIST += modules/arch/x86/tests/lsahf.asm +EXTRA_DIST += modules/arch/x86/tests/lsahf.hex +EXTRA_DIST += modules/arch/x86/tests/lzcnt.asm +EXTRA_DIST += modules/arch/x86/tests/lzcnt.hex +EXTRA_DIST += modules/arch/x86/tests/mem64-err.asm +EXTRA_DIST += modules/arch/x86/tests/mem64-err.errwarn +EXTRA_DIST += modules/arch/x86/tests/mem64.asm +EXTRA_DIST += modules/arch/x86/tests/mem64.errwarn +EXTRA_DIST += modules/arch/x86/tests/mem64.hex +EXTRA_DIST += modules/arch/x86/tests/mem64hi32.asm +EXTRA_DIST += modules/arch/x86/tests/mem64hi32.hex +EXTRA_DIST += modules/arch/x86/tests/mem64rip.asm +EXTRA_DIST += modules/arch/x86/tests/mem64rip.hex +EXTRA_DIST += modules/arch/x86/tests/mixcase.asm +EXTRA_DIST += modules/arch/x86/tests/mixcase.hex +EXTRA_DIST += modules/arch/x86/tests/movbe.asm +EXTRA_DIST += modules/arch/x86/tests/movbe.hex +EXTRA_DIST += modules/arch/x86/tests/movdq32.asm +EXTRA_DIST += modules/arch/x86/tests/movdq32.hex +EXTRA_DIST += modules/arch/x86/tests/movdq64.asm +EXTRA_DIST += modules/arch/x86/tests/movdq64.hex +EXTRA_DIST += modules/arch/x86/tests/negequ.asm +EXTRA_DIST += modules/arch/x86/tests/negequ.hex +EXTRA_DIST += modules/arch/x86/tests/nomem64-err.asm +EXTRA_DIST += modules/arch/x86/tests/nomem64-err.errwarn +EXTRA_DIST += modules/arch/x86/tests/nomem64-err2.asm +EXTRA_DIST += modules/arch/x86/tests/nomem64-err2.errwarn +EXTRA_DIST += modules/arch/x86/tests/nomem64.asm +EXTRA_DIST += modules/arch/x86/tests/nomem64.errwarn +EXTRA_DIST += modules/arch/x86/tests/nomem64.hex +EXTRA_DIST += modules/arch/x86/tests/o64.asm +EXTRA_DIST += modules/arch/x86/tests/o64.hex +EXTRA_DIST += modules/arch/x86/tests/o64loop.asm +EXTRA_DIST += modules/arch/x86/tests/o64loop.errwarn +EXTRA_DIST += modules/arch/x86/tests/o64loop.hex +EXTRA_DIST += modules/arch/x86/tests/opersize.asm +EXTRA_DIST += modules/arch/x86/tests/opersize.hex +EXTRA_DIST += modules/arch/x86/tests/opsize-err.asm +EXTRA_DIST += modules/arch/x86/tests/opsize-err.errwarn +EXTRA_DIST += modules/arch/x86/tests/overflow.asm +EXTRA_DIST += modules/arch/x86/tests/overflow.errwarn +EXTRA_DIST += modules/arch/x86/tests/overflow.hex +EXTRA_DIST += modules/arch/x86/tests/padlock.asm +EXTRA_DIST += modules/arch/x86/tests/padlock.hex +EXTRA_DIST += modules/arch/x86/tests/pinsrb.asm +EXTRA_DIST += modules/arch/x86/tests/pinsrb.hex +EXTRA_DIST += modules/arch/x86/tests/pshift.asm +EXTRA_DIST += modules/arch/x86/tests/pshift.hex +EXTRA_DIST += modules/arch/x86/tests/push64.asm +EXTRA_DIST += modules/arch/x86/tests/push64.errwarn +EXTRA_DIST += modules/arch/x86/tests/push64.hex +EXTRA_DIST += modules/arch/x86/tests/pushf.asm +EXTRA_DIST += modules/arch/x86/tests/pushf.hex +EXTRA_DIST += modules/arch/x86/tests/pushf-err.asm +EXTRA_DIST += modules/arch/x86/tests/pushf-err.errwarn +EXTRA_DIST += modules/arch/x86/tests/pushnosize.asm +EXTRA_DIST += modules/arch/x86/tests/pushnosize.errwarn +EXTRA_DIST += modules/arch/x86/tests/pushnosize.hex +EXTRA_DIST += modules/arch/x86/tests/rdrnd.asm +EXTRA_DIST += modules/arch/x86/tests/rdrnd.hex +EXTRA_DIST += modules/arch/x86/tests/rep.asm +EXTRA_DIST += modules/arch/x86/tests/rep.hex +EXTRA_DIST += modules/arch/x86/tests/ret.asm +EXTRA_DIST += modules/arch/x86/tests/ret.hex +EXTRA_DIST += modules/arch/x86/tests/riprel1.asm +EXTRA_DIST += modules/arch/x86/tests/riprel1.hex +EXTRA_DIST += modules/arch/x86/tests/riprel2.asm +EXTRA_DIST += modules/arch/x86/tests/riprel2.errwarn +EXTRA_DIST += modules/arch/x86/tests/riprel2.hex +EXTRA_DIST += modules/arch/x86/tests/ripseg.asm +EXTRA_DIST += modules/arch/x86/tests/ripseg.errwarn +EXTRA_DIST += modules/arch/x86/tests/ripseg.hex +EXTRA_DIST += modules/arch/x86/tests/segmov.asm +EXTRA_DIST += modules/arch/x86/tests/segmov.hex +EXTRA_DIST += modules/arch/x86/tests/segoff.asm +EXTRA_DIST += modules/arch/x86/tests/segoff.hex +EXTRA_DIST += modules/arch/x86/tests/segoff-err.asm +EXTRA_DIST += modules/arch/x86/tests/segoff-err.errwarn +EXTRA_DIST += modules/arch/x86/tests/shift.asm +EXTRA_DIST += modules/arch/x86/tests/shift.hex +EXTRA_DIST += modules/arch/x86/tests/shift64.asm +EXTRA_DIST += modules/arch/x86/tests/shift64.hex +EXTRA_DIST += modules/arch/x86/tests/simd-1.asm +EXTRA_DIST += modules/arch/x86/tests/simd-1.hex +EXTRA_DIST += modules/arch/x86/tests/simd-2.asm +EXTRA_DIST += modules/arch/x86/tests/simd-2.hex +EXTRA_DIST += modules/arch/x86/tests/simd64-1.asm +EXTRA_DIST += modules/arch/x86/tests/simd64-1.hex +EXTRA_DIST += modules/arch/x86/tests/simd64-2.asm +EXTRA_DIST += modules/arch/x86/tests/simd64-2.hex +EXTRA_DIST += modules/arch/x86/tests/smx.asm +EXTRA_DIST += modules/arch/x86/tests/smx.hex +EXTRA_DIST += modules/arch/x86/tests/sse-prefix.asm +EXTRA_DIST += modules/arch/x86/tests/sse-prefix.hex +EXTRA_DIST += modules/arch/x86/tests/sse3.asm +EXTRA_DIST += modules/arch/x86/tests/sse3.hex +EXTRA_DIST += modules/arch/x86/tests/sse4.asm +EXTRA_DIST += modules/arch/x86/tests/sse4.hex +EXTRA_DIST += modules/arch/x86/tests/sse4-err.asm +EXTRA_DIST += modules/arch/x86/tests/sse4-err.errwarn +EXTRA_DIST += modules/arch/x86/tests/ssewidth.asm +EXTRA_DIST += modules/arch/x86/tests/ssewidth.hex +EXTRA_DIST += modules/arch/x86/tests/ssse3.asm +EXTRA_DIST += modules/arch/x86/tests/ssse3.c +EXTRA_DIST += modules/arch/x86/tests/ssse3.hex +EXTRA_DIST += modules/arch/x86/tests/stos.asm +EXTRA_DIST += modules/arch/x86/tests/stos.hex +EXTRA_DIST += modules/arch/x86/tests/str.asm +EXTRA_DIST += modules/arch/x86/tests/str.hex +EXTRA_DIST += modules/arch/x86/tests/strict.asm +EXTRA_DIST += modules/arch/x86/tests/strict.errwarn +EXTRA_DIST += modules/arch/x86/tests/strict.hex +EXTRA_DIST += modules/arch/x86/tests/strict-err.asm +EXTRA_DIST += modules/arch/x86/tests/strict-err.errwarn +EXTRA_DIST += modules/arch/x86/tests/stringseg.asm +EXTRA_DIST += modules/arch/x86/tests/stringseg.errwarn +EXTRA_DIST += modules/arch/x86/tests/stringseg.hex +EXTRA_DIST += modules/arch/x86/tests/svm.asm +EXTRA_DIST += modules/arch/x86/tests/svm.hex +EXTRA_DIST += modules/arch/x86/tests/twobytemem.asm +EXTRA_DIST += modules/arch/x86/tests/twobytemem.errwarn +EXTRA_DIST += modules/arch/x86/tests/twobytemem.hex +EXTRA_DIST += modules/arch/x86/tests/vmx.asm +EXTRA_DIST += modules/arch/x86/tests/vmx.hex +EXTRA_DIST += modules/arch/x86/tests/vmx-err.asm +EXTRA_DIST += modules/arch/x86/tests/vmx-err.errwarn +EXTRA_DIST += modules/arch/x86/tests/vsib.asm +EXTRA_DIST += modules/arch/x86/tests/vsib.hex +EXTRA_DIST += modules/arch/x86/tests/vsib-err.asm +EXTRA_DIST += modules/arch/x86/tests/vsib-err.errwarn +EXTRA_DIST += modules/arch/x86/tests/vsib2-err.asm +EXTRA_DIST += modules/arch/x86/tests/vsib2-err.errwarn +EXTRA_DIST += modules/arch/x86/tests/x86label.asm +EXTRA_DIST += modules/arch/x86/tests/x86label.hex +EXTRA_DIST += modules/arch/x86/tests/xchg64.asm +EXTRA_DIST += modules/arch/x86/tests/xchg64.hex +EXTRA_DIST += modules/arch/x86/tests/xmm64.asm +EXTRA_DIST += modules/arch/x86/tests/xmm64.hex +EXTRA_DIST += modules/arch/x86/tests/xop-all.asm +EXTRA_DIST += modules/arch/x86/tests/xop-all.hex +EXTRA_DIST += modules/arch/x86/tests/xop-basic.asm +EXTRA_DIST += modules/arch/x86/tests/xop-basic.hex +EXTRA_DIST += modules/arch/x86/tests/xop-cc.asm +EXTRA_DIST += modules/arch/x86/tests/xop-cc.hex +EXTRA_DIST += modules/arch/x86/tests/xsave.asm +EXTRA_DIST += modules/arch/x86/tests/xsave.hex + +EXTRA_DIST += modules/arch/x86/tests/gas32/Makefile.inc +EXTRA_DIST += modules/arch/x86/tests/gas64/Makefile.inc + +include modules/arch/x86/tests/gas32/Makefile.inc +include modules/arch/x86/tests/gas64/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addbyte.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addbyte.asm new file mode 100644 index 0000000000..1b11e8dd2c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addbyte.asm @@ -0,0 +1,34 @@ +; AX forms +add ax,5 +add ax,strict byte 5 +add ax,strict word 5 +add ax,-128 +add ax,strict byte -128 +add ax,strict word -128 +add ax,0x7f +add ax,strict byte 0x7f +add ax,strict word 0x7f +add ax,0x80 +add ax,strict byte 0x80 +add ax,strict word 0x80 +add ax,0x100 +add ax,strict byte 0x100 +add ax,strict word 0x100 + +; non-AX forms +add bx,5 +add bx,strict byte 5 +add bx,strict word 5 +add bx,-128 +add bx,strict byte -128 +add bx,strict word -128 +add bx,0x7f +add bx,strict byte 0x7f +add bx,strict word 0x7f +add bx,0x80 +add bx,strict byte 0x80 +add bx,strict word 0x80 +add bx,0x100 +add bx,strict byte 0x100 +add bx,strict word 0x100 + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addbyte.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addbyte.errwarn new file mode 100644 index 0000000000..a154fd481d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addbyte.errwarn @@ -0,0 +1,4 @@ +-:12: warning: value does not fit in signed 8 bit field +-:15: warning: value does not fit in signed 8 bit field +-:29: warning: value does not fit in signed 8 bit field +-:32: warning: value does not fit in signed 8 bit field diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addbyte.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addbyte.hex new file mode 100644 index 0000000000..e2078295c0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addbyte.hex @@ -0,0 +1,97 @@ +83 +c0 +05 +83 +c0 +05 +05 +05 +00 +83 +c0 +80 +83 +c0 +80 +05 +80 +ff +83 +c0 +7f +83 +c0 +7f +05 +7f +00 +05 +80 +00 +83 +c0 +80 +05 +80 +00 +05 +00 +01 +83 +c0 +00 +05 +00 +01 +83 +c3 +05 +83 +c3 +05 +81 +c3 +05 +00 +83 +c3 +80 +83 +c3 +80 +81 +c3 +80 +ff +83 +c3 +7f +83 +c3 +7f +81 +c3 +7f +00 +81 +c3 +80 +00 +83 +c3 +80 +81 +c3 +80 +00 +81 +c3 +00 +01 +83 +c3 +00 +81 +c3 +00 +01 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop-err.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop-err.asm new file mode 100644 index 0000000000..152f4666da --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop-err.asm @@ -0,0 +1,2 @@ +[BITS 32] +a16 idiv byte [dword 0] ; 67 F6 3D 00 00 00 00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop-err.errwarn new file mode 100644 index 0000000000..0bf0b54805 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop-err.errwarn @@ -0,0 +1 @@ +-:2: error: invalid effective address (displacement size) diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop.asm new file mode 100644 index 0000000000..81237ebb4f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop.asm @@ -0,0 +1,25 @@ +[BITS 32] +idiv al ; F6 F8 +idiv ax ; 66 F7 F8 +idiv eax ; F7 F8 +idiv byte [word 0] ; 67 F6 3E 00 00 +idiv byte [dword 0xFFFFFFFF] ; F6 3D FF FF FF FF +idiv byte [0] ; F6 3D 00 00 00 00 +a16 idiv byte [word 0] ; 67 67 F6 3E 00 00 +;a16 idiv byte [dword 0] ; 67 F6 3D 00 00 00 00 +a16 idiv byte [0] ; 67 F6 3D 00 00 +a32 idiv byte [0] ; F6 3D 00 00 00 00 +[BITS 16] +nop +idiv al +idiv ax +idiv eax +nop +idiv byte [word 0] +idiv byte [dword 0xFFFFFFFF] +idiv byte [0] +idiv dword [es:dword 5] +idiv dword [byte es:5] +idiv word [es:dword edi+5] +;idiv word [es:edi+dword 5] +nop diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop.errwarn new file mode 100644 index 0000000000..6bccc3a212 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop.errwarn @@ -0,0 +1 @@ +-:22: warning: invalid displacement size; fixed diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop.hex new file mode 100644 index 0000000000..34e3ff70bd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/addrop.hex @@ -0,0 +1,88 @@ +f6 +f8 +66 +f7 +f8 +f7 +f8 +67 +f6 +3e +00 +00 +f6 +3d +ff +ff +ff +ff +f6 +3d +00 +00 +00 +00 +67 +f6 +3e +00 +00 +67 +f6 +3e +00 +00 +f6 +3d +00 +00 +00 +00 +90 +f6 +f8 +f7 +f8 +66 +f7 +f8 +90 +f6 +3e +00 +00 +67 +f6 +3d +ff +ff +ff +ff +f6 +3e +00 +00 +26 +67 +66 +f7 +3d +05 +00 +00 +00 +26 +66 +f7 +3e +05 +00 +26 +67 +f7 +bf +05 +00 +00 +00 +90 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/aes.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/aes.asm new file mode 100644 index 0000000000..52c587d585 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/aes.asm @@ -0,0 +1,80 @@ +[bits 64] +aesenc xmm1, xmm2 +aesenc xmm1, [rax] +aesenc xmm1, dqword [rax] +aesenc xmm10, xmm12 +aesenc xmm10, [rax+r15*4] +aesenc xmm10, [r14+r15*4] +vaesenc xmm1, xmm2 +vaesenc xmm1, [rax] +vaesenc xmm1, dqword [rax] +vaesenc xmm1, xmm2, xmm3 +vaesenc xmm1, xmm2, [rax] +vaesenc xmm1, xmm2, dqword [rax] + +aesenclast xmm1, xmm2 +aesenclast xmm1, [rax] +aesenclast xmm1, dqword [rax] +vaesenclast xmm1, xmm2 +vaesenclast xmm1, [rax] +vaesenclast xmm1, dqword [rax] +vaesenclast xmm1, xmm2, xmm3 +vaesenclast xmm1, xmm2, [rax] +vaesenclast xmm1, xmm2, dqword [rax] + +aesdec xmm1, xmm2 +aesdec xmm1, [rax] +aesdec xmm1, dqword [rax] +vaesdec xmm1, xmm2 +vaesdec xmm1, [rax] +vaesdec xmm1, dqword [rax] +vaesdec xmm1, xmm2, xmm3 +vaesdec xmm1, xmm2, [rax] +vaesdec xmm1, xmm2, dqword [rax] + +aesdeclast xmm1, xmm2 +aesdeclast xmm1, [rax] +aesdeclast xmm1, dqword [rax] +vaesdeclast xmm1, xmm2 +vaesdeclast xmm1, [rax] +vaesdeclast xmm1, dqword [rax] +vaesdeclast xmm1, xmm2, xmm3 +vaesdeclast xmm1, xmm2, [rax] +vaesdeclast xmm1, xmm2, dqword [rax] + +aesimc xmm1, xmm2 +aesimc xmm1, [rax] +aesimc xmm1, dqword [rax] +vaesimc xmm1, xmm2 +vaesimc xmm1, [rax] +vaesimc xmm1, dqword [rax] +; no 3-operand form + +aeskeygenassist xmm1, xmm2, 5 +aeskeygenassist xmm1, [rax], byte 5 +aeskeygenassist xmm1, dqword [rax], 5 +vaeskeygenassist xmm1, xmm2, 5 +vaeskeygenassist xmm1, [rax], byte 5 +vaeskeygenassist xmm1, dqword [rax], 5 + +pclmulqdq xmm1, xmm2, 5 +pclmulqdq xmm1, [rax], byte 5 +pclmulqdq xmm1, dqword [rax], 5 + +; pclmulqdq variants +pclmullqlqdq xmm1, xmm2 +pclmullqlqdq xmm1, [rax] +pclmullqlqdq xmm1, dqword [rax] + +pclmulhqlqdq xmm1, xmm2 +pclmulhqlqdq xmm1, [rax] +pclmulhqlqdq xmm1, dqword [rax] + +pclmullqhqdq xmm1, xmm2 +pclmullqhqdq xmm1, [rax] +pclmullqhqdq xmm1, dqword [rax] + +pclmulhqhqdq xmm1, xmm2 +pclmulhqhqdq xmm1, [rax] +pclmulhqhqdq xmm1, dqword [rax] + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/aes.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/aes.hex new file mode 100644 index 0000000000..6583be83be --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/aes.hex @@ -0,0 +1,356 @@ +66 +0f +38 +dc +ca +66 +0f +38 +dc +08 +66 +0f +38 +dc +08 +66 +45 +0f +38 +dc +d4 +66 +46 +0f +38 +dc +14 +b8 +66 +47 +0f +38 +dc +14 +be +c4 +e2 +71 +dc +ca +c4 +e2 +71 +dc +08 +c4 +e2 +71 +dc +08 +c4 +e2 +69 +dc +cb +c4 +e2 +69 +dc +08 +c4 +e2 +69 +dc +08 +66 +0f +38 +dd +ca +66 +0f +38 +dd +08 +66 +0f +38 +dd +08 +c4 +e2 +71 +dd +ca +c4 +e2 +71 +dd +08 +c4 +e2 +71 +dd +08 +c4 +e2 +69 +dd +cb +c4 +e2 +69 +dd +08 +c4 +e2 +69 +dd +08 +66 +0f +38 +de +ca +66 +0f +38 +de +08 +66 +0f +38 +de +08 +c4 +e2 +71 +de +ca +c4 +e2 +71 +de +08 +c4 +e2 +71 +de +08 +c4 +e2 +69 +de +cb +c4 +e2 +69 +de +08 +c4 +e2 +69 +de +08 +66 +0f +38 +df +ca +66 +0f +38 +df +08 +66 +0f +38 +df +08 +c4 +e2 +71 +df +ca +c4 +e2 +71 +df +08 +c4 +e2 +71 +df +08 +c4 +e2 +69 +df +cb +c4 +e2 +69 +df +08 +c4 +e2 +69 +df +08 +66 +0f +38 +db +ca +66 +0f +38 +db +08 +66 +0f +38 +db +08 +c4 +e2 +79 +db +ca +c4 +e2 +79 +db +08 +c4 +e2 +79 +db +08 +66 +0f +3a +df +ca +05 +66 +0f +3a +df +08 +05 +66 +0f +3a +df +08 +05 +c4 +e3 +79 +df +ca +05 +c4 +e3 +79 +df +08 +05 +c4 +e3 +79 +df +08 +05 +66 +0f +3a +44 +ca +05 +66 +0f +3a +44 +08 +05 +66 +0f +3a +44 +08 +05 +66 +0f +3a +44 +ca +00 +66 +0f +3a +44 +08 +00 +66 +0f +3a +44 +08 +00 +66 +0f +3a +44 +ca +01 +66 +0f +3a +44 +08 +01 +66 +0f +3a +44 +08 +01 +66 +0f +3a +44 +ca +10 +66 +0f +3a +44 +08 +10 +66 +0f +3a +44 +08 +10 +66 +0f +3a +44 +ca +11 +66 +0f +3a +44 +08 +11 +66 +0f +3a +44 +08 +11 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/amd-fma4.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/amd-fma4.asm new file mode 100644 index 0000000000..25fdc50d8d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/amd-fma4.asm @@ -0,0 +1,109 @@ +[bits 64] +vfmaddpd xmm0, xmm1, xmm2, xmm3 +vfmaddpd xmm0, xmm1, [rax], xmm3 +vfmaddpd xmm0, xmm1, dqword [rax], xmm3 +vfmaddpd xmm0, xmm1, xmm2, [rax] +vfmaddpd xmm0, xmm1, xmm2, dqword [rax] +vfmaddpd ymm0, ymm1, ymm2, ymm3 +vfmaddpd ymm0, ymm1, [rax], ymm3 +vfmaddpd ymm0, ymm1, yword [rax], ymm3 +vfmaddpd ymm0, ymm1, ymm2, [rax] +vfmaddpd ymm0, ymm1, ymm2, yword [rax] + +vfmaddps xmm0, xmm1, xmm2, xmm3 +vfmaddps xmm0, xmm1, dqword [rax], xmm3 +vfmaddps xmm0, xmm1, xmm2, dqword [rax] +vfmaddps ymm0, ymm1, ymm2, ymm3 +vfmaddps ymm0, ymm1, yword [rax], ymm3 +vfmaddps ymm0, ymm1, ymm2, yword [rax] + +vfmaddsd xmm0, xmm1, xmm2, xmm3 +vfmaddsd xmm0, xmm1, [rax], xmm3 +vfmaddsd xmm0, xmm1, qword [rax], xmm3 +vfmaddsd xmm0, xmm1, xmm2, [rax] +vfmaddsd xmm0, xmm1, xmm2, qword [rax] + +vfmaddss xmm0, xmm1, xmm2, xmm3 +vfmaddss xmm0, xmm1, dword [rax], xmm3 +vfmaddss xmm0, xmm1, xmm2, dword [rax] + +vfmaddsubpd xmm0, xmm1, xmm2, xmm3 +vfmaddsubpd xmm0, xmm1, dqword [rax], xmm3 +vfmaddsubpd xmm0, xmm1, xmm2, dqword [rax] +vfmaddsubpd ymm0, ymm1, ymm2, ymm3 +vfmaddsubpd ymm0, ymm1, yword [rax], ymm3 +vfmaddsubpd ymm0, ymm1, ymm2, yword [rax] + +vfmaddsubps xmm0, xmm1, xmm2, xmm3 +vfmaddsubps xmm0, xmm1, dqword [rax], xmm3 +vfmaddsubps xmm0, xmm1, xmm2, dqword [rax] +vfmaddsubps ymm0, ymm1, ymm2, ymm3 +vfmaddsubps ymm0, ymm1, yword [rax], ymm3 +vfmaddsubps ymm0, ymm1, ymm2, yword [rax] + +vfmsubpd xmm0, xmm1, xmm2, xmm3 +vfmsubpd xmm0, xmm1, dqword [rax], xmm3 +vfmsubpd xmm0, xmm1, xmm2, dqword [rax] +vfmsubpd ymm0, ymm1, ymm2, ymm3 +vfmsubpd ymm0, ymm1, yword [rax], ymm3 +vfmsubpd ymm0, ymm1, ymm2, yword [rax] + +vfmsubps xmm0, xmm1, xmm2, xmm3 +vfmsubps xmm0, xmm1, dqword [rax], xmm3 +vfmsubps xmm0, xmm1, xmm2, dqword [rax] +vfmsubps ymm0, ymm1, ymm2, ymm3 +vfmsubps ymm0, ymm1, yword [rax], ymm3 +vfmsubps ymm0, ymm1, ymm2, yword [rax] + +vfmsubsd xmm0, xmm1, xmm2, xmm3 +vfmsubsd xmm0, xmm1, qword [rax], xmm3 +vfmsubsd xmm0, xmm1, xmm2, qword [rax] + +vfmsubss xmm0, xmm1, xmm2, xmm3 +vfmsubss xmm0, xmm1, dword [rax], xmm3 +vfmsubss xmm0, xmm1, xmm2, dword [rax] + +vfnmaddpd xmm0, xmm1, xmm2, xmm3 +vfnmaddpd xmm0, xmm1, dqword [rax], xmm3 +vfnmaddpd xmm0, xmm1, xmm2, dqword [rax] +vfnmaddpd ymm0, ymm1, ymm2, ymm3 +vfnmaddpd ymm0, ymm1, yword [rax], ymm3 +vfnmaddpd ymm0, ymm1, ymm2, yword [rax] + +vfnmaddps xmm0, xmm1, xmm2, xmm3 +vfnmaddps xmm0, xmm1, dqword [rax], xmm3 +vfnmaddps xmm0, xmm1, xmm2, dqword [rax] +vfnmaddps ymm0, ymm1, ymm2, ymm3 +vfnmaddps ymm0, ymm1, yword [rax], ymm3 +vfnmaddps ymm0, ymm1, ymm2, yword [rax] + +vfnmaddsd xmm0, xmm1, xmm2, xmm3 +vfnmaddsd xmm0, xmm1, qword [rax], xmm3 +vfnmaddsd xmm0, xmm1, xmm2, qword [rax] + +vfnmaddss xmm0, xmm1, xmm2, xmm3 +vfnmaddss xmm0, xmm1, dword [rax], xmm3 +vfnmaddss xmm0, xmm1, xmm2, dword [rax] + +vfnmsubpd xmm0, xmm1, xmm2, xmm3 +vfnmsubpd xmm0, xmm1, dqword [rax], xmm3 +vfnmsubpd xmm0, xmm1, xmm2, dqword [rax] +vfnmsubpd ymm0, ymm1, ymm2, ymm3 +vfnmsubpd ymm0, ymm1, yword [rax], ymm3 +vfnmsubpd ymm0, ymm1, ymm2, yword [rax] + +vfnmsubps xmm0, xmm1, xmm2, xmm3 +vfnmsubps xmm0, xmm1, dqword [rax], xmm3 +vfnmsubps xmm0, xmm1, xmm2, dqword [rax] +vfnmsubps ymm0, ymm1, ymm2, ymm3 +vfnmsubps ymm0, ymm1, yword [rax], ymm3 +vfnmsubps ymm0, ymm1, ymm2, yword [rax] + +vfnmsubsd xmm0, xmm1, xmm2, xmm3 +vfnmsubsd xmm0, xmm1, qword [rax], xmm3 +vfnmsubsd xmm0, xmm1, xmm2, qword [rax] + +vfnmsubss xmm0, xmm1, xmm2, xmm3 +vfnmsubss xmm0, xmm1, dword [rax], xmm3 +vfnmsubss xmm0, xmm1, xmm2, dword [rax] + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/amd-fma4.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/amd-fma4.hex new file mode 100644 index 0000000000..a1193179e5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/amd-fma4.hex @@ -0,0 +1,540 @@ +c4 +e3 +71 +69 +c2 +30 +c4 +e3 +71 +69 +00 +30 +c4 +e3 +71 +69 +00 +30 +c4 +e3 +f1 +69 +00 +20 +c4 +e3 +f1 +69 +00 +20 +c4 +e3 +75 +69 +c2 +30 +c4 +e3 +75 +69 +00 +30 +c4 +e3 +75 +69 +00 +30 +c4 +e3 +f5 +69 +00 +20 +c4 +e3 +f5 +69 +00 +20 +c4 +e3 +71 +68 +c2 +30 +c4 +e3 +71 +68 +00 +30 +c4 +e3 +f1 +68 +00 +20 +c4 +e3 +75 +68 +c2 +30 +c4 +e3 +75 +68 +00 +30 +c4 +e3 +f5 +68 +00 +20 +c4 +e3 +71 +6b +c2 +30 +c4 +e3 +71 +6b +00 +30 +c4 +e3 +71 +6b +00 +30 +c4 +e3 +f1 +6b +00 +20 +c4 +e3 +f1 +6b +00 +20 +c4 +e3 +71 +6a +c2 +30 +c4 +e3 +71 +6a +00 +30 +c4 +e3 +f1 +6a +00 +20 +c4 +e3 +71 +5d +c2 +30 +c4 +e3 +71 +5d +00 +30 +c4 +e3 +f1 +5d +00 +20 +c4 +e3 +75 +5d +c2 +30 +c4 +e3 +75 +5d +00 +30 +c4 +e3 +f5 +5d +00 +20 +c4 +e3 +71 +5c +c2 +30 +c4 +e3 +71 +5c +00 +30 +c4 +e3 +f1 +5c +00 +20 +c4 +e3 +75 +5c +c2 +30 +c4 +e3 +75 +5c +00 +30 +c4 +e3 +f5 +5c +00 +20 +c4 +e3 +71 +6d +c2 +30 +c4 +e3 +71 +6d +00 +30 +c4 +e3 +f1 +6d +00 +20 +c4 +e3 +75 +6d +c2 +30 +c4 +e3 +75 +6d +00 +30 +c4 +e3 +f5 +6d +00 +20 +c4 +e3 +71 +6c +c2 +30 +c4 +e3 +71 +6c +00 +30 +c4 +e3 +f1 +6c +00 +20 +c4 +e3 +75 +6c +c2 +30 +c4 +e3 +75 +6c +00 +30 +c4 +e3 +f5 +6c +00 +20 +c4 +e3 +71 +6f +c2 +30 +c4 +e3 +71 +6f +00 +30 +c4 +e3 +f1 +6f +00 +20 +c4 +e3 +71 +6e +c2 +30 +c4 +e3 +71 +6e +00 +30 +c4 +e3 +f1 +6e +00 +20 +c4 +e3 +71 +79 +c2 +30 +c4 +e3 +71 +79 +00 +30 +c4 +e3 +f1 +79 +00 +20 +c4 +e3 +75 +79 +c2 +30 +c4 +e3 +75 +79 +00 +30 +c4 +e3 +f5 +79 +00 +20 +c4 +e3 +71 +78 +c2 +30 +c4 +e3 +71 +78 +00 +30 +c4 +e3 +f1 +78 +00 +20 +c4 +e3 +75 +78 +c2 +30 +c4 +e3 +75 +78 +00 +30 +c4 +e3 +f5 +78 +00 +20 +c4 +e3 +71 +7b +c2 +30 +c4 +e3 +71 +7b +00 +30 +c4 +e3 +f1 +7b +00 +20 +c4 +e3 +71 +7a +c2 +30 +c4 +e3 +71 +7a +00 +30 +c4 +e3 +f1 +7a +00 +20 +c4 +e3 +71 +7d +c2 +30 +c4 +e3 +71 +7d +00 +30 +c4 +e3 +f1 +7d +00 +20 +c4 +e3 +75 +7d +c2 +30 +c4 +e3 +75 +7d +00 +30 +c4 +e3 +f5 +7d +00 +20 +c4 +e3 +71 +7c +c2 +30 +c4 +e3 +71 +7c +00 +30 +c4 +e3 +f1 +7c +00 +20 +c4 +e3 +75 +7c +c2 +30 +c4 +e3 +75 +7c +00 +30 +c4 +e3 +f5 +7c +00 +20 +c4 +e3 +71 +7f +c2 +30 +c4 +e3 +71 +7f +00 +30 +c4 +e3 +f1 +7f +00 +20 +c4 +e3 +71 +7e +c2 +30 +c4 +e3 +71 +7e +00 +30 +c4 +e3 +f1 +7e +00 +20 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/amd200707.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/amd200707.asm new file mode 100644 index 0000000000..42c26a3cf4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/amd200707.asm @@ -0,0 +1,31 @@ +bits 64 +extrq xmm0, 5, 4 +extrq xmm6, 0, 7 +extrq xmm2, xmm3 +insertq xmm0, xmm1, 5, 4 +insertq xmm5, xmm6, 0, 7 +insertq xmm2, xmm3 +movntsd [0], xmm1 +movntsd qword [0], xmm5 +movntss [0], xmm3 +movntss dword [0], xmm7 + +lzcnt ax, bx +lzcnt cx, word [0] +lzcnt dx, [0] +lzcnt eax, ebx +lzcnt ecx, dword [0] +lzcnt edx, [0] +lzcnt rax, rbx +lzcnt rcx, qword [0] +lzcnt rdx, [0] + +popcnt ax, bx +popcnt cx, word [0] +popcnt dx, [0] +popcnt eax, ebx +popcnt ecx, dword [0] +popcnt edx, [0] +popcnt rax, rbx +popcnt rcx, qword [0] +popcnt rdx, [0] diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/amd200707.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/amd200707.hex new file mode 100644 index 0000000000..28b58a12c2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/amd200707.hex @@ -0,0 +1,212 @@ +66 +0f +78 +c0 +05 +04 +66 +0f +78 +c6 +00 +07 +66 +0f +79 +d3 +f2 +0f +78 +c1 +05 +04 +f2 +0f +78 +ee +00 +07 +f2 +0f +79 +d3 +f2 +0f +2b +0c +25 +00 +00 +00 +00 +f2 +0f +2b +2c +25 +00 +00 +00 +00 +f3 +0f +2b +1c +25 +00 +00 +00 +00 +f3 +0f +2b +3c +25 +00 +00 +00 +00 +66 +f3 +0f +bd +c3 +66 +f3 +0f +bd +0c +25 +00 +00 +00 +00 +66 +f3 +0f +bd +14 +25 +00 +00 +00 +00 +f3 +0f +bd +c3 +f3 +0f +bd +0c +25 +00 +00 +00 +00 +f3 +0f +bd +14 +25 +00 +00 +00 +00 +f3 +48 +0f +bd +c3 +f3 +48 +0f +bd +0c +25 +00 +00 +00 +00 +f3 +48 +0f +bd +14 +25 +00 +00 +00 +00 +66 +f3 +0f +b8 +c3 +66 +f3 +0f +b8 +0c +25 +00 +00 +00 +00 +66 +f3 +0f +b8 +14 +25 +00 +00 +00 +00 +f3 +0f +b8 +c3 +f3 +0f +b8 +0c +25 +00 +00 +00 +00 +f3 +0f +b8 +14 +25 +00 +00 +00 +00 +f3 +48 +0f +b8 +c3 +f3 +48 +0f +b8 +0c +25 +00 +00 +00 +00 +f3 +48 +0f +b8 +14 +25 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/arithsmall.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/arithsmall.asm new file mode 100644 index 0000000000..e0ba978fac --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/arithsmall.asm @@ -0,0 +1,13 @@ +[bits 32] +and eax, 3584 +and eax, 35 +and eax, strict dword 3584 +and eax, strict dword 35 +and eax, strict byte 3584 +and eax, strict byte 35 +and ebx, 3584 +and ebx, 35 +and ebx, strict dword 3584 +and ebx, strict dword 35 +and ebx, strict byte 3584 +and ebx, strict byte 35 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/arithsmall.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/arithsmall.errwarn new file mode 100644 index 0000000000..7b1c7ab9f9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/arithsmall.errwarn @@ -0,0 +1,2 @@ +-:6: warning: value does not fit in signed 8 bit field +-:12: warning: value does not fit in signed 8 bit field diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/arithsmall.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/arithsmall.hex new file mode 100644 index 0000000000..72e811ac35 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/arithsmall.hex @@ -0,0 +1,51 @@ +25 +00 +0e +00 +00 +83 +e0 +23 +25 +00 +0e +00 +00 +25 +23 +00 +00 +00 +83 +e0 +00 +83 +e0 +23 +81 +e3 +00 +0e +00 +00 +83 +e3 +23 +81 +e3 +00 +0e +00 +00 +81 +e3 +23 +00 +00 +00 +83 +e3 +00 +83 +e3 +23 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx.asm new file mode 100644 index 0000000000..eff8cc972e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx.asm @@ -0,0 +1,2617 @@ +; Exhaustive test of AVX instructions +; Also includes based-upon SSE instructions for comparison +; +; Copyright (C) 2008 Peter Johnson +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions +; are met: +; 1. Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; 2. Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in the +; documentation and/or other materials provided with the distribution. +; +; THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. +; + +[bits 64] +addpd xmm1, xmm2 +addpd xmm1, [rax] +addpd xmm1, dqword [rax] +addpd xmm10, xmm12 +addpd xmm10, [rax+r15*4] +addpd xmm10, [r14+r15*4] + +vaddpd xmm1, xmm2 +vaddpd xmm1, [rax] +vaddpd xmm1, dqword [rax] +vaddpd xmm10, xmm12 +vaddpd xmm10, [rax+r15*4] +vaddpd xmm10, [r14+r15*4] + +vaddpd xmm1, xmm2, xmm3 +vaddpd xmm1, xmm2, [rax] +vaddpd xmm1, xmm2, dqword [rax] +vaddpd xmm10, xmm12, xmm13 +vaddpd xmm10, xmm12, [rax+r15*4] +vaddpd xmm10, xmm12, [r14+r15*4] + +vaddpd ymm1, ymm2, ymm3 +vaddpd ymm1, ymm2, [rax] +vaddpd ymm1, ymm2, yword [rax] +vaddpd ymm10, ymm12, ymm13 +vaddpd ymm10, ymm12, [rax+r15*4] +vaddpd ymm10, ymm12, [r14+r15*4] + +; Further instructions won't test high 8 registers (validated above) +addps xmm1, xmm2 +addps xmm1, [rax] +addps xmm1, dqword [rax] +vaddps xmm1, xmm2 +vaddps xmm1, [rax] +vaddps xmm1, dqword [rax] +vaddps xmm1, xmm2, xmm3 +vaddps xmm1, xmm2, [rax] +vaddps xmm1, xmm2, dqword [rax] +vaddps ymm1, ymm2, ymm3 +vaddps ymm1, ymm2, [rax] +vaddps ymm1, ymm2, yword [rax] + +addsd xmm1, xmm2 +addsd xmm1, [rax] +addsd xmm1, qword [rax] +vaddsd xmm1, xmm2 +vaddsd xmm1, [rax] +vaddsd xmm1, qword [rax] +vaddsd xmm1, xmm2, xmm3 +vaddsd xmm1, xmm2, [rax] +vaddsd xmm1, xmm2, qword [rax] + +addss xmm1, xmm2 +addss xmm1, [rax] +addss xmm1, dword [rax] +vaddss xmm1, xmm2 +vaddss xmm1, [rax] +vaddss xmm1, dword [rax] +vaddss xmm1, xmm2, xmm3 +vaddss xmm1, xmm2, [rax] +vaddss xmm1, xmm2, dword [rax] + +addsubpd xmm1, xmm2 +addsubpd xmm1, [rax] +addsubpd xmm1, dqword [rax] +vaddsubpd xmm1, xmm2 +vaddsubpd xmm1, [rax] +vaddsubpd xmm1, dqword [rax] +vaddsubpd xmm1, xmm2, xmm3 +vaddsubpd xmm1, xmm2, [rax] +vaddsubpd xmm1, xmm2, dqword [rax] +vaddsubpd ymm1, ymm2, ymm3 +vaddsubpd ymm1, ymm2, [rax] +vaddsubpd ymm1, ymm2, yword [rax] + +addsubps xmm1, xmm2 +addsubps xmm1, [rax] +addsubps xmm1, dqword [rax] +vaddsubps xmm1, xmm2 +vaddsubps xmm1, [rax] +vaddsubps xmm1, dqword [rax] +vaddsubps xmm1, xmm2, xmm3 +vaddsubps xmm1, xmm2, [rax] +vaddsubps xmm1, xmm2, dqword [rax] +vaddsubps ymm1, ymm2, ymm3 +vaddsubps ymm1, ymm2, [rax] +vaddsubps ymm1, ymm2, yword [rax] + +andpd xmm1, xmm2 +andpd xmm1, [rax] +andpd xmm1, dqword [rax] +vandpd xmm1, xmm2 +vandpd xmm1, [rax] +vandpd xmm1, dqword [rax] +vandpd xmm1, xmm2, xmm3 +vandpd xmm1, xmm2, [rax] +vandpd xmm1, xmm2, dqword [rax] +vandpd ymm1, ymm2, ymm3 +vandpd ymm1, ymm2, [rax] +vandpd ymm1, ymm2, yword [rax] + +andps xmm1, xmm2 +andps xmm1, [rax] +andps xmm1, dqword [rax] +vandps xmm1, xmm2 +vandps xmm1, [rax] +vandps xmm1, dqword [rax] +vandps xmm1, xmm2, xmm3 +vandps xmm1, xmm2, [rax] +vandps xmm1, xmm2, dqword [rax] +vandps ymm1, ymm2, ymm3 +vandps ymm1, ymm2, [rax] +vandps ymm1, ymm2, yword [rax] + +andnpd xmm1, xmm2 +andnpd xmm1, [rax] +andnpd xmm1, dqword [rax] +vandnpd xmm1, xmm2 +vandnpd xmm1, [rax] +vandnpd xmm1, dqword [rax] +vandnpd xmm1, xmm2, xmm3 +vandnpd xmm1, xmm2, [rax] +vandnpd xmm1, xmm2, dqword [rax] +vandnpd ymm1, ymm2, ymm3 +vandnpd ymm1, ymm2, [rax] +vandnpd ymm1, ymm2, yword [rax] + +andnps xmm1, xmm2 +andnps xmm1, [rax] +andnps xmm1, dqword [rax] +vandnps xmm1, xmm2 +vandnps xmm1, [rax] +vandnps xmm1, dqword [rax] +vandnps xmm1, xmm2, xmm3 +vandnps xmm1, xmm2, [rax] +vandnps xmm1, xmm2, dqword [rax] +vandnps ymm1, ymm2, ymm3 +vandnps ymm1, ymm2, [rax] +vandnps ymm1, ymm2, yword [rax] + +blendpd xmm1, xmm2, 5 +blendpd xmm1, [rax], byte 5 +blendpd xmm1, dqword [rax], 5 +vblendpd xmm1, xmm2, 5 +vblendpd xmm1, [rax], byte 5 +vblendpd xmm1, dqword [rax], 5 +vblendpd xmm1, xmm2, xmm3, 5 +vblendpd xmm1, xmm2, [rax], byte 5 +vblendpd xmm1, xmm2, dqword [rax], 5 +vblendpd ymm1, ymm2, ymm3, 5 +vblendpd ymm1, ymm2, [rax], byte 5 +vblendpd ymm1, ymm2, yword [rax], 5 + +blendps xmm1, xmm2, 5 +blendps xmm1, [rax], byte 5 +blendps xmm1, dqword [rax], 5 +vblendps xmm1, xmm2, 5 +vblendps xmm1, [rax], byte 5 +vblendps xmm1, dqword [rax], 5 +vblendps xmm1, xmm2, xmm3, 5 +vblendps xmm1, xmm2, [rax], byte 5 +vblendps xmm1, xmm2, dqword [rax], 5 +vblendps ymm1, ymm2, ymm3, 5 +vblendps ymm1, ymm2, [rax], byte 5 +vblendps ymm1, ymm2, yword [rax], 5 + +; blendvpd doesn't have vex-encoded version of implicit xmm0 +blendvpd xmm1, xmm3 +blendvpd xmm1, [rax] +blendvpd xmm1, dqword [rax] +blendvpd xmm1, xmm3, xmm0 +blendvpd xmm1, [rax], xmm0 +blendvpd xmm1, dqword [rax], xmm0 +vblendvpd xmm1, xmm2, xmm3, xmm4 +vblendvpd xmm1, xmm2, [rax], xmm4 +vblendvpd xmm1, xmm2, dqword [rax], xmm4 +vblendvpd ymm1, ymm2, ymm3, ymm4 +vblendvpd ymm1, ymm2, [rax], ymm4 +vblendvpd ymm1, ymm2, yword [rax], ymm4 + +; blendvps doesn't have vex-encoded version of implicit xmm0 +blendvps xmm1, xmm3 +blendvps xmm1, [rax] +blendvps xmm1, dqword [rax] +blendvps xmm1, xmm3, xmm0 +blendvps xmm1, [rax], xmm0 +blendvps xmm1, dqword [rax], xmm0 +vblendvps xmm1, xmm2, xmm3, xmm4 +vblendvps xmm1, xmm2, [rax], xmm4 +vblendvps xmm1, xmm2, dqword [rax], xmm4 +vblendvps ymm1, ymm2, ymm3, ymm4 +vblendvps ymm1, ymm2, [rax], ymm4 +vblendvps ymm1, ymm2, yword [rax], ymm4 + +vbroadcastss xmm1, [rax] +vbroadcastss xmm1, dword [rax] +vbroadcastss ymm1, [rax] +vbroadcastss ymm1, dword [rax] + +vbroadcastsd ymm1, [rax] +vbroadcastsd ymm1, qword [rax] + +vbroadcastf128 ymm1, [rax] +vbroadcastf128 ymm1, dqword [rax] + +cmppd xmm1, xmm2, 5 +cmppd xmm1, [rax], byte 5 +cmppd xmm1, dqword [rax], 5 +vcmppd xmm1, xmm2, 5 +vcmppd xmm1, [rax], byte 5 +vcmppd xmm1, dqword [rax], 5 +vcmppd xmm1, xmm2, xmm3, 5 +vcmppd xmm1, xmm2, [rax], byte 5 +vcmppd xmm1, xmm2, dqword [rax], 5 +vcmppd ymm1, ymm2, ymm3, 5 +vcmppd ymm1, ymm2, [rax], byte 5 +vcmppd ymm1, ymm2, yword [rax], 5 + +cmpps xmm1, xmm2, 5 +cmpps xmm1, [rax], byte 5 +cmpps xmm1, dqword [rax], 5 +vcmpps xmm1, xmm2, 5 +vcmpps xmm1, [rax], byte 5 +vcmpps xmm1, dqword [rax], 5 +vcmpps xmm1, xmm2, xmm3, 5 +vcmpps xmm1, xmm2, [rax], byte 5 +vcmpps xmm1, xmm2, dqword [rax], 5 +vcmpps ymm1, ymm2, ymm3, 5 +vcmpps ymm1, ymm2, [rax], byte 5 +vcmpps ymm1, ymm2, yword [rax], 5 + +cmpsd xmm1, xmm2, 5 +cmpsd xmm1, [rax], byte 5 +cmpsd xmm1, qword [rax], 5 +vcmpsd xmm1, xmm2, 5 +vcmpsd xmm1, [rax], byte 5 +vcmpsd xmm1, qword [rax], 5 +vcmpsd xmm1, xmm2, xmm3, 5 +vcmpsd xmm1, xmm2, [rax], byte 5 +vcmpsd xmm1, xmm2, qword [rax], 5 + +cmpss xmm1, xmm2, 5 +cmpss xmm1, [rax], byte 5 +cmpss xmm1, dword [rax], 5 +vcmpss xmm1, xmm2, 5 +vcmpss xmm1, [rax], byte 5 +vcmpss xmm1, dword [rax], 5 +vcmpss xmm1, xmm2, xmm3, 5 +vcmpss xmm1, xmm2, [rax], byte 5 +vcmpss xmm1, xmm2, dword [rax], 5 + +comisd xmm1, xmm2 +comisd xmm1, [rax] +comisd xmm1, qword [rax] +vcomisd xmm1, xmm2 +vcomisd xmm1, [rax] +vcomisd xmm1, qword [rax] + +comiss xmm1, xmm2 +comiss xmm1, [rax] +comiss xmm1, dword [rax] +vcomiss xmm1, xmm2 +vcomiss xmm1, [rax] +vcomiss xmm1, dword [rax] + +cvtdq2pd xmm1, xmm2 +cvtdq2pd xmm1, [rax] +cvtdq2pd xmm1, qword [rax] +vcvtdq2pd xmm1, xmm2 +vcvtdq2pd xmm1, [rax] +vcvtdq2pd xmm1, qword [rax] +vcvtdq2pd ymm1, xmm2 +vcvtdq2pd ymm1, [rax] +vcvtdq2pd ymm1, dqword [rax] + +cvtdq2ps xmm1, xmm2 +cvtdq2ps xmm1, [rax] +cvtdq2ps xmm1, dqword [rax] +vcvtdq2ps xmm1, xmm2 +vcvtdq2ps xmm1, [rax] +vcvtdq2ps xmm1, dqword [rax] +vcvtdq2ps ymm1, ymm2 +vcvtdq2ps ymm1, [rax] +vcvtdq2ps ymm1, yword [rax] + +; These require memory operand size to be specified (in AVX version) +cvtpd2dq xmm1, xmm2 +cvtpd2dq xmm1, [rax] +cvtpd2dq xmm1, dqword [rax] +vcvtpd2dq xmm1, xmm2 +vcvtpd2dq xmm1, dqword [rax] +vcvtpd2dq xmm1, ymm2 +vcvtpd2dq xmm1, yword [rax] + +cvtpd2ps xmm1, xmm2 +cvtpd2ps xmm1, [rax] +cvtpd2ps xmm1, dqword [rax] +vcvtpd2ps xmm1, xmm2 +vcvtpd2ps xmm1, dqword [rax] +vcvtpd2ps xmm1, ymm2 +vcvtpd2ps xmm1, yword [rax] + +cvtps2dq xmm1, xmm2 +cvtps2dq xmm1, [rax] +cvtps2dq xmm1, dqword [rax] +vcvtps2dq xmm1, xmm2 +vcvtps2dq xmm1, [rax] +vcvtps2dq xmm1, dqword [rax] +vcvtps2dq ymm1, ymm2 +vcvtps2dq ymm1, [rax] +vcvtps2dq ymm1, yword [rax] + +cvtps2pd xmm1, xmm2 +cvtps2pd xmm1, [rax] +cvtps2pd xmm1, qword [rax] +vcvtps2pd xmm1, xmm2 +vcvtps2pd xmm1, [rax] +vcvtps2pd xmm1, qword [rax] +vcvtps2pd ymm1, xmm2 +vcvtps2pd ymm1, [rax] +vcvtps2pd ymm1, dqword [rax] + +cvtsd2si eax, xmm2 +cvtsd2si eax, [rax] +cvtsd2si eax, qword [rax] +vcvtsd2si eax, xmm2 +vcvtsd2si eax, [rax] +vcvtsd2si eax, qword [rax] +cvtsd2si rax, xmm2 +cvtsd2si rax, [rax] +cvtsd2si rax, qword [rax] +vcvtsd2si rax, xmm2 +vcvtsd2si rax, [rax] +vcvtsd2si rax, qword [rax] + +cvtsd2ss xmm1, xmm2 +cvtsd2ss xmm1, [rax] +cvtsd2ss xmm1, qword [rax] +vcvtsd2ss xmm1, xmm2 +vcvtsd2ss xmm1, [rax] +vcvtsd2ss xmm1, qword [rax] +vcvtsd2ss xmm1, xmm2, xmm3 +vcvtsd2ss xmm1, xmm2, [rax] +vcvtsd2ss xmm1, xmm2, qword [rax] + +; unsized not valid +cvtsi2sd xmm1, eax +cvtsi2sd xmm1, dword [rax] +vcvtsi2sd xmm1, eax +vcvtsi2sd xmm1, dword [rax] +vcvtsi2sd xmm1, xmm2, eax +vcvtsi2sd xmm1, xmm2, dword [rax] +cvtsi2sd xmm1, rax +cvtsi2sd xmm1, qword [rax] +vcvtsi2sd xmm1, rax +vcvtsi2sd xmm1, qword [rax] +vcvtsi2sd xmm1, xmm2, rax +vcvtsi2sd xmm1, xmm2, qword [rax] + +cvtsi2ss xmm1, eax +cvtsi2ss xmm1, dword [rax] +vcvtsi2ss xmm1, eax +vcvtsi2ss xmm1, dword [rax] +vcvtsi2ss xmm1, xmm2, eax +vcvtsi2ss xmm1, xmm2, dword [rax] +cvtsi2ss xmm1, rax +cvtsi2ss xmm1, qword [rax] +vcvtsi2ss xmm1, rax +vcvtsi2ss xmm1, qword [rax] +vcvtsi2ss xmm1, xmm2, rax +vcvtsi2ss xmm1, xmm2, qword [rax] + +cvtss2sd xmm1, xmm2 +cvtss2sd xmm1, [rax] +cvtss2sd xmm1, dword [rax] +vcvtss2sd xmm1, xmm2 +vcvtss2sd xmm1, [rax] +vcvtss2sd xmm1, dword [rax] +vcvtss2sd xmm1, xmm2, xmm3 +vcvtss2sd xmm1, xmm2, [rax] +vcvtss2sd xmm1, xmm2, dword [rax] + +cvtss2si eax, xmm2 +cvtss2si eax, [rax] +cvtss2si eax, dword [rax] +vcvtss2si eax, xmm2 +vcvtss2si eax, [rax] +vcvtss2si eax, dword [rax] +cvtss2si rax, xmm2 +cvtss2si rax, [rax] +cvtss2si rax, dword [rax] +vcvtss2si rax, xmm2 +vcvtss2si rax, [rax] +vcvtss2si rax, dword [rax] + +; These require memory operand size to be specified (in AVX version) +cvttpd2dq xmm1, xmm2 +cvttpd2dq xmm1, [rax] +cvttpd2dq xmm1, dqword [rax] +vcvttpd2dq xmm1, xmm2 +vcvttpd2dq xmm1, dqword [rax] +vcvttpd2dq xmm1, ymm2 +vcvttpd2dq xmm1, yword [rax] + +cvttps2dq xmm1, xmm2 +cvttps2dq xmm1, [rax] +cvttps2dq xmm1, dqword [rax] +vcvttps2dq xmm1, xmm2 +vcvttps2dq xmm1, [rax] +vcvttps2dq xmm1, dqword [rax] +vcvttps2dq ymm1, ymm2 +vcvttps2dq ymm1, [rax] +vcvttps2dq ymm1, yword [rax] + +cvttsd2si eax, xmm2 +cvttsd2si eax, [rax] +cvttsd2si eax, qword [rax] +vcvttsd2si eax, xmm2 +vcvttsd2si eax, [rax] +vcvttsd2si eax, qword [rax] +cvttsd2si rax, xmm2 +cvttsd2si rax, [rax] +cvttsd2si rax, qword [rax] +vcvttsd2si rax, xmm2 +vcvttsd2si rax, [rax] +vcvttsd2si rax, qword [rax] + +cvttss2si eax, xmm2 +cvttss2si eax, [rax] +cvttss2si eax, dword [rax] +vcvttss2si eax, xmm2 +vcvttss2si eax, [rax] +vcvttss2si eax, dword [rax] +cvttss2si rax, xmm2 +cvttss2si rax, [rax] +cvttss2si rax, dword [rax] +vcvttss2si rax, xmm2 +vcvttss2si rax, [rax] +vcvttss2si rax, dword [rax] + +divpd xmm1, xmm2 +divpd xmm1, [rax] +divpd xmm1, dqword [rax] +vdivpd xmm1, xmm2 +vdivpd xmm1, [rax] +vdivpd xmm1, dqword [rax] +vdivpd xmm1, xmm2, xmm3 +vdivpd xmm1, xmm2, [rax] +vdivpd xmm1, xmm2, dqword [rax] +vdivpd ymm1, ymm2, ymm3 +vdivpd ymm1, ymm2, [rax] +vdivpd ymm1, ymm2, yword [rax] + +divps xmm1, xmm2 +divps xmm1, [rax] +divps xmm1, dqword [rax] +vdivps xmm1, xmm2 +vdivps xmm1, [rax] +vdivps xmm1, dqword [rax] +vdivps xmm1, xmm2, xmm3 +vdivps xmm1, xmm2, [rax] +vdivps xmm1, xmm2, dqword [rax] +vdivps ymm1, ymm2, ymm3 +vdivps ymm1, ymm2, [rax] +vdivps ymm1, ymm2, yword [rax] + +divsd xmm1, xmm2 +divsd xmm1, [rax] +divsd xmm1, qword [rax] +vdivsd xmm1, xmm2 +vdivsd xmm1, [rax] +vdivsd xmm1, qword [rax] +vdivsd xmm1, xmm2, xmm3 +vdivsd xmm1, xmm2, [rax] +vdivsd xmm1, xmm2, qword [rax] + +divss xmm1, xmm2 +divss xmm1, [rax] +divss xmm1, dword [rax] +vdivss xmm1, xmm2 +vdivss xmm1, [rax] +vdivss xmm1, dword [rax] +vdivss xmm1, xmm2, xmm3 +vdivss xmm1, xmm2, [rax] +vdivss xmm1, xmm2, dword [rax] + +dppd xmm1, xmm2, 5 +dppd xmm1, [rax], byte 5 +dppd xmm1, dqword [rax], 5 +vdppd xmm1, xmm2, 5 +vdppd xmm1, [rax], byte 5 +vdppd xmm1, dqword [rax], 5 +vdppd xmm1, xmm2, xmm3, 5 +vdppd xmm1, xmm2, [rax], byte 5 +vdppd xmm1, xmm2, dqword [rax], 5 +; no ymm version + +dpps xmm1, xmm2, 5 +dpps xmm1, [rax], byte 5 +dpps xmm1, dqword [rax], 5 +vdpps xmm1, xmm2, 5 +vdpps xmm1, [rax], byte 5 +vdpps xmm1, dqword [rax], 5 +vdpps xmm1, xmm2, xmm3, 5 +vdpps xmm1, xmm2, [rax], byte 5 +vdpps xmm1, xmm2, dqword [rax], 5 +vdpps ymm1, ymm2, ymm3, 5 +vdpps ymm1, ymm2, [rax], byte 5 +vdpps ymm1, ymm2, yword [rax], 5 + +vextractf128 xmm1, ymm2, 5 +vextractf128 [rax], ymm2, byte 5 +vextractf128 dqword [rax], ymm2, 5 + +extractps eax, xmm1, 5 +extractps rax, xmm1, 5 +extractps [rax], xmm1, byte 5 +extractps dword [rax], xmm1, 5 +vextractps eax, xmm1, 5 +vextractps rax, xmm1, 5 +vextractps [rax], xmm1, byte 5 +vextractps dword [rax], xmm1, 5 + +haddpd xmm1, xmm2 +haddpd xmm1, [rax] +haddpd xmm1, dqword [rax] +vhaddpd xmm1, xmm2 +vhaddpd xmm1, [rax] +vhaddpd xmm1, dqword [rax] +vhaddpd xmm1, xmm2, xmm3 +vhaddpd xmm1, xmm2, [rax] +vhaddpd xmm1, xmm2, dqword [rax] +vhaddpd ymm1, ymm2, ymm3 +vhaddpd ymm1, ymm2, [rax] +vhaddpd ymm1, ymm2, yword [rax] + +haddps xmm1, xmm2 +haddps xmm1, [rax] +haddps xmm1, dqword [rax] +vhaddps xmm1, xmm2 +vhaddps xmm1, [rax] +vhaddps xmm1, dqword [rax] +vhaddps xmm1, xmm2, xmm3 +vhaddps xmm1, xmm2, [rax] +vhaddps xmm1, xmm2, dqword [rax] +vhaddps ymm1, ymm2, ymm3 +vhaddps ymm1, ymm2, [rax] +vhaddps ymm1, ymm2, yword [rax] + +hsubpd xmm1, xmm2 +hsubpd xmm1, [rax] +hsubpd xmm1, dqword [rax] +vhsubpd xmm1, xmm2 +vhsubpd xmm1, [rax] +vhsubpd xmm1, dqword [rax] +vhsubpd xmm1, xmm2, xmm3 +vhsubpd xmm1, xmm2, [rax] +vhsubpd xmm1, xmm2, dqword [rax] +vhsubpd ymm1, ymm2, ymm3 +vhsubpd ymm1, ymm2, [rax] +vhsubpd ymm1, ymm2, yword [rax] + +hsubps xmm1, xmm2 +hsubps xmm1, [rax] +hsubps xmm1, dqword [rax] +vhsubps xmm1, xmm2 +vhsubps xmm1, [rax] +vhsubps xmm1, dqword [rax] +vhsubps xmm1, xmm2, xmm3 +vhsubps xmm1, xmm2, [rax] +vhsubps xmm1, xmm2, dqword [rax] +vhsubps ymm1, ymm2, ymm3 +vhsubps ymm1, ymm2, [rax] +vhsubps ymm1, ymm2, yword [rax] + +vinsertf128 ymm1, ymm2, xmm3, 5 +vinsertf128 ymm1, ymm2, [rax], byte 5 +vinsertf128 ymm1, ymm2, dqword [rax], 5 + +insertps xmm1, xmm2, 5 +insertps xmm1, [rax], byte 5 +insertps xmm1, dword [rax], 5 +vinsertps xmm1, xmm2, 5 +vinsertps xmm1, [rax], byte 5 +vinsertps xmm1, dword [rax], 5 +vinsertps xmm1, xmm2, xmm3, 5 +vinsertps xmm1, xmm2, [rax], byte 5 +vinsertps xmm1, xmm2, dword [rax], 5 + +lddqu xmm1, [rax] +lddqu xmm1, dqword [rax] +vlddqu xmm1, [rax] +vlddqu xmm1, dqword [rax] +vlddqu ymm1, [rax] +vlddqu ymm1, yword [rax] + +ldmxcsr [rax] +ldmxcsr dword [rax] +vldmxcsr [rax] +vldmxcsr dword [rax] + +maskmovdqu xmm1, xmm2 +vmaskmovdqu xmm1, xmm2 + +vmaskmovps xmm1, xmm2, [rax] +vmaskmovps xmm1, xmm2, dqword [rax] +vmaskmovps ymm1, ymm2, [rax] +vmaskmovps ymm1, ymm2, yword [rax] +vmaskmovps [rax], xmm2, xmm3 +vmaskmovps dqword [rax], xmm2, xmm3 +vmaskmovps [rax], ymm2, ymm3 +vmaskmovps yword [rax], ymm2, ymm3 + +vmaskmovpd xmm1, xmm2, [rax] +vmaskmovpd xmm1, xmm2, dqword [rax] +vmaskmovpd ymm1, ymm2, [rax] +vmaskmovpd ymm1, ymm2, yword [rax] +vmaskmovpd [rax], xmm2, xmm3 +vmaskmovpd dqword [rax], xmm2, xmm3 +vmaskmovpd [rax], ymm2, ymm3 +vmaskmovpd yword [rax], ymm2, ymm3 + +maxpd xmm1, xmm2 +maxpd xmm1, [rax] +maxpd xmm1, dqword [rax] +vmaxpd xmm1, xmm2 +vmaxpd xmm1, [rax] +vmaxpd xmm1, dqword [rax] +vmaxpd xmm1, xmm2, xmm3 +vmaxpd xmm1, xmm2, [rax] +vmaxpd xmm1, xmm2, dqword [rax] +vmaxpd ymm1, ymm2, ymm3 +vmaxpd ymm1, ymm2, [rax] +vmaxpd ymm1, ymm2, yword [rax] + +maxps xmm1, xmm2 +maxps xmm1, [rax] +maxps xmm1, dqword [rax] +vmaxps xmm1, xmm2 +vmaxps xmm1, [rax] +vmaxps xmm1, dqword [rax] +vmaxps xmm1, xmm2, xmm3 +vmaxps xmm1, xmm2, [rax] +vmaxps xmm1, xmm2, dqword [rax] +vmaxps ymm1, ymm2, ymm3 +vmaxps ymm1, ymm2, [rax] +vmaxps ymm1, ymm2, yword [rax] + +maxsd xmm1, xmm2 +maxsd xmm1, [rax] +maxsd xmm1, qword [rax] +vmaxsd xmm1, xmm2 +vmaxsd xmm1, [rax] +vmaxsd xmm1, qword [rax] +vmaxsd xmm1, xmm2, xmm3 +vmaxsd xmm1, xmm2, [rax] +vmaxsd xmm1, xmm2, qword [rax] + +maxss xmm1, xmm2 +maxss xmm1, [rax] +maxss xmm1, dword [rax] +vmaxss xmm1, xmm2 +vmaxss xmm1, [rax] +vmaxss xmm1, dword [rax] +vmaxss xmm1, xmm2, xmm3 +vmaxss xmm1, xmm2, [rax] +vmaxss xmm1, xmm2, dword [rax] + +minpd xmm1, xmm2 +minpd xmm1, [rax] +minpd xmm1, dqword [rax] +vminpd xmm1, xmm2 +vminpd xmm1, [rax] +vminpd xmm1, dqword [rax] +vminpd xmm1, xmm2, xmm3 +vminpd xmm1, xmm2, [rax] +vminpd xmm1, xmm2, dqword [rax] +vminpd ymm1, ymm2, ymm3 +vminpd ymm1, ymm2, [rax] +vminpd ymm1, ymm2, yword [rax] + +minps xmm1, xmm2 +minps xmm1, [rax] +minps xmm1, dqword [rax] +vminps xmm1, xmm2 +vminps xmm1, [rax] +vminps xmm1, dqword [rax] +vminps xmm1, xmm2, xmm3 +vminps xmm1, xmm2, [rax] +vminps xmm1, xmm2, dqword [rax] +vminps ymm1, ymm2, ymm3 +vminps ymm1, ymm2, [rax] +vminps ymm1, ymm2, yword [rax] + +minsd xmm1, xmm2 +minsd xmm1, [rax] +minsd xmm1, qword [rax] +vminsd xmm1, xmm2 +vminsd xmm1, [rax] +vminsd xmm1, qword [rax] +vminsd xmm1, xmm2, xmm3 +vminsd xmm1, xmm2, [rax] +vminsd xmm1, xmm2, qword [rax] + +minss xmm1, xmm2 +minss xmm1, [rax] +minss xmm1, dword [rax] +vminss xmm1, xmm2 +vminss xmm1, [rax] +vminss xmm1, dword [rax] +vminss xmm1, xmm2, xmm3 +vminss xmm1, xmm2, [rax] +vminss xmm1, xmm2, dword [rax] + +movapd xmm1, xmm2 +movapd xmm1, [rax] +movapd xmm1, dqword [rax] +vmovapd xmm1, xmm2 +vmovapd xmm1, [rax] +vmovapd xmm1, dqword [rax] +movapd [rax], xmm2 +movapd dqword [rax], xmm2 +vmovapd [rax], xmm2 +vmovapd dqword [rax], xmm2 +vmovapd ymm1, ymm2 +vmovapd ymm1, [rax] +vmovapd ymm1, yword [rax] +vmovapd [rax], ymm2 +vmovapd yword [rax], ymm2 + +movaps xmm1, xmm2 +movaps xmm1, [rax] +movaps xmm1, dqword [rax] +vmovaps xmm1, xmm2 +vmovaps xmm1, [rax] +vmovaps xmm1, dqword [rax] +movaps [rax], xmm2 +movaps dqword [rax], xmm2 +vmovaps [rax], xmm2 +vmovaps dqword [rax], xmm2 +vmovaps ymm1, ymm2 +vmovaps ymm1, [rax] +vmovaps ymm1, yword [rax] +vmovaps [rax], ymm2 +vmovaps yword [rax], ymm2 + +movd xmm1, eax +movd xmm1, [rax] +movd xmm1, dword [rax] +vmovd xmm1, eax +vmovd xmm1, [rax] +vmovd xmm1, dword [rax] +movd eax, xmm2 +movd [rax], xmm2 +movd dword [rax], xmm2 +vmovd eax, xmm2 +vmovd [rax], xmm2 +vmovd dword [rax], xmm2 + +movq xmm1, rax +movq xmm1, [rax] +movq xmm1, qword [rax] +vmovq xmm1, rax +vmovq xmm1, [rax] +vmovq xmm1, qword [rax] +movq rax, xmm2 +movq [rax], xmm2 +movq qword [rax], xmm2 +vmovq rax, xmm2 +vmovq [rax], xmm2 +vmovq qword [rax], xmm2 + +movq xmm1, xmm2 +movq xmm1, [rax] +movq xmm1, qword [rax] +vmovq xmm1, xmm2 +vmovq xmm1, [rax] +vmovq xmm1, qword [rax] +movq [rax], xmm1 +movq qword [rax], xmm1 +vmovq [rax], xmm1 +vmovq qword [rax], xmm1 + +movddup xmm1, xmm2 +movddup xmm1, [rax] +movddup xmm1, qword [rax] +vmovddup xmm1, xmm2 +vmovddup xmm1, [rax] +vmovddup xmm1, qword [rax] +vmovddup ymm1, ymm2 +vmovddup ymm1, [rax] +vmovddup ymm1, yword [rax] + +movdqa xmm1, xmm2 +movdqa xmm1, [rax] +movdqa xmm1, dqword [rax] +movdqa [rax], xmm2 +movdqa dqword [rax], xmm2 +vmovdqa xmm1, xmm2 +vmovdqa xmm1, [rax] +vmovdqa xmm1, dqword [rax] +vmovdqa [rax], xmm2 +vmovdqa dqword [rax], xmm2 +vmovdqa ymm1, ymm2 +vmovdqa ymm1, [rax] +vmovdqa ymm1, yword [rax] +vmovdqa [rax], ymm2 +vmovdqa yword [rax], ymm2 + +movdqu xmm1, xmm2 +movdqu xmm1, [rax] +movdqu xmm1, dqword [rax] +movdqu [rax], xmm2 +movdqu dqword [rax], xmm2 +vmovdqu xmm1, xmm2 +vmovdqu xmm1, [rax] +vmovdqu xmm1, dqword [rax] +vmovdqu [rax], xmm2 +vmovdqu dqword [rax], xmm2 +vmovdqu ymm1, ymm2 +vmovdqu ymm1, [rax] +vmovdqu ymm1, yword [rax] +vmovdqu [rax], ymm2 +vmovdqu yword [rax], ymm2 + +movhlps xmm1, xmm2 +vmovhlps xmm1, xmm2 +vmovhlps xmm1, xmm2, xmm3 + +movhpd xmm1, [rax] +movhpd xmm1, qword [rax] +vmovhpd xmm1, [rax] +vmovhpd xmm1, qword [rax] +vmovhpd xmm1, xmm2, [rax] +vmovhpd xmm1, xmm2, qword [rax] +movhpd [rax], xmm2 +movhpd qword [rax], xmm2 +vmovhpd [rax], xmm2 +vmovhpd qword [rax], xmm2 + +movhps xmm1, [rax] +movhps xmm1, qword [rax] +vmovhps xmm1, [rax] +vmovhps xmm1, qword [rax] +vmovhps xmm1, xmm2, [rax] +vmovhps xmm1, xmm2, qword [rax] +movhps [rax], xmm2 +movhps qword [rax], xmm2 +vmovhps [rax], xmm2 +vmovhps qword [rax], xmm2 + +movhlps xmm1, xmm2 +vmovhlps xmm1, xmm2 +vmovhlps xmm1, xmm2, xmm3 + +movlpd xmm1, [rax] +movlpd xmm1, qword [rax] +vmovlpd xmm1, [rax] +vmovlpd xmm1, qword [rax] +vmovlpd xmm1, xmm2, [rax] +vmovlpd xmm1, xmm2, qword [rax] +movlpd [rax], xmm2 +movlpd qword [rax], xmm2 +vmovlpd [rax], xmm2 +vmovlpd qword [rax], xmm2 + +movlps xmm1, [rax] +movlps xmm1, qword [rax] +vmovlps xmm1, [rax] +vmovlps xmm1, qword [rax] +vmovlps xmm1, xmm2, [rax] +vmovlps xmm1, xmm2, qword [rax] +movlps [rax], xmm2 +movlps qword [rax], xmm2 +vmovlps [rax], xmm2 +vmovlps qword [rax], xmm2 + +movmskpd eax, xmm2 +movmskpd rax, xmm2 +vmovmskpd eax, xmm2 +vmovmskpd rax, xmm2 +vmovmskpd eax, ymm2 +vmovmskpd rax, ymm2 + +movmskps eax, xmm2 +movmskps rax, xmm2 +vmovmskps eax, xmm2 +vmovmskps rax, xmm2 +vmovmskps eax, ymm2 +vmovmskps rax, ymm2 + +movntdq [rax], xmm1 +movntdq dqword [rax], xmm1 +vmovntdq [rax], xmm1 +vmovntdq dqword [rax], xmm1 +vmovntdq [rax], ymm1 +vmovntdq yword [rax], ymm1 + +movntdqa xmm1, [rax] +movntdqa xmm1, dqword [rax] +vmovntdqa xmm1, [rax] +vmovntdqa xmm1, dqword [rax] + +movntpd [rax], xmm1 +movntpd dqword [rax], xmm1 +vmovntpd [rax], xmm1 +vmovntpd dqword [rax], xmm1 +vmovntpd [rax], ymm1 +vmovntpd yword [rax], ymm1 + +movntps [rax], xmm1 +movntps dqword [rax], xmm1 +vmovntps [rax], xmm1 +vmovntps dqword [rax], xmm1 +vmovntps [rax], ymm1 +vmovntps yword [rax], ymm1 + +movsd xmm1, xmm2 +vmovsd xmm1, xmm2 +vmovsd xmm1, xmm2, xmm3 +movsd xmm1, [rax] +movsd xmm1, qword [rax] +vmovsd xmm1, [rax] +vmovsd xmm1, qword [rax] +movsd [rax], xmm2 +movsd qword [rax], xmm2 +vmovsd [rax], xmm2 +vmovsd qword [rax], xmm2 + +movshdup xmm1, xmm2 +movshdup xmm1, [rax] +movshdup xmm1, dqword [rax] +vmovshdup xmm1, xmm2 +vmovshdup xmm1, [rax] +vmovshdup xmm1, dqword [rax] +vmovshdup ymm1, ymm2 +vmovshdup ymm1, [rax] +vmovshdup ymm1, yword [rax] + +movsldup xmm1, xmm2 +movsldup xmm1, [rax] +movsldup xmm1, dqword [rax] +vmovsldup xmm1, xmm2 +vmovsldup xmm1, [rax] +vmovsldup xmm1, dqword [rax] +vmovsldup ymm1, ymm2 +vmovsldup ymm1, [rax] +vmovsldup ymm1, yword [rax] + +movss xmm1, xmm2 +vmovss xmm1, xmm2 +vmovss xmm1, xmm2, xmm3 +movss xmm1, [rax] +movss xmm1, dword [rax] +vmovss xmm1, [rax] +vmovss xmm1, dword [rax] +movss [rax], xmm2 +movss dword [rax], xmm2 +vmovss [rax], xmm2 +vmovss dword [rax], xmm2 + +movupd xmm1, xmm2 +movupd xmm1, [rax] +movupd xmm1, dqword [rax] +vmovupd xmm1, xmm2 +vmovupd xmm1, [rax] +vmovupd xmm1, dqword [rax] +movupd [rax], xmm2 +movupd dqword [rax], xmm2 +vmovupd [rax], xmm2 +vmovupd dqword [rax], xmm2 +vmovupd ymm1, ymm2 +vmovupd ymm1, [rax] +vmovupd ymm1, yword [rax] +vmovupd [rax], ymm2 +vmovupd yword [rax], ymm2 + +movups xmm1, xmm2 +movups xmm1, [rax] +movups xmm1, dqword [rax] +vmovups xmm1, xmm2 +vmovups xmm1, [rax] +vmovups xmm1, dqword [rax] +movups [rax], xmm2 +movups dqword [rax], xmm2 +vmovups [rax], xmm2 +vmovups dqword [rax], xmm2 +vmovups ymm1, ymm2 +vmovups ymm1, [rax] +vmovups ymm1, yword [rax] +vmovups [rax], ymm2 +vmovups yword [rax], ymm2 + +mpsadbw xmm1, xmm2, 5 +mpsadbw xmm1, [rax], byte 5 +mpsadbw xmm1, dqword [rax], 5 +vmpsadbw xmm1, xmm2, 5 +vmpsadbw xmm1, [rax], byte 5 +vmpsadbw xmm1, dqword [rax], 5 +vmpsadbw xmm1, xmm2, xmm3, 5 +vmpsadbw xmm1, xmm2, [rax], byte 5 +vmpsadbw xmm1, xmm2, dqword [rax], 5 + +mulpd xmm1, xmm2 +mulpd xmm1, [rax] +mulpd xmm1, dqword [rax] +vmulpd xmm1, xmm2 +vmulpd xmm1, [rax] +vmulpd xmm1, dqword [rax] +vmulpd xmm1, xmm2, xmm3 +vmulpd xmm1, xmm2, [rax] +vmulpd xmm1, xmm2, dqword [rax] +vmulpd ymm1, ymm2, ymm3 +vmulpd ymm1, ymm2, [rax] +vmulpd ymm1, ymm2, yword [rax] + +mulps xmm1, xmm2 +mulps xmm1, [rax] +mulps xmm1, dqword [rax] +vmulps xmm1, xmm2 +vmulps xmm1, [rax] +vmulps xmm1, dqword [rax] +vmulps xmm1, xmm2, xmm3 +vmulps xmm1, xmm2, [rax] +vmulps xmm1, xmm2, dqword [rax] +vmulps ymm1, ymm2, ymm3 +vmulps ymm1, ymm2, [rax] +vmulps ymm1, ymm2, yword [rax] + +mulsd xmm1, xmm2 +mulsd xmm1, [rax] +mulsd xmm1, qword [rax] +vmulsd xmm1, xmm2 +vmulsd xmm1, [rax] +vmulsd xmm1, qword [rax] +vmulsd xmm1, xmm2, xmm3 +vmulsd xmm1, xmm2, [rax] +vmulsd xmm1, xmm2, qword [rax] + +mulss xmm1, xmm2 +mulss xmm1, [rax] +mulss xmm1, dword [rax] +vmulss xmm1, xmm2 +vmulss xmm1, [rax] +vmulss xmm1, dword [rax] +vmulss xmm1, xmm2, xmm3 +vmulss xmm1, xmm2, [rax] +vmulss xmm1, xmm2, dword [rax] + +orpd xmm1, xmm2 +orpd xmm1, [rax] +orpd xmm1, dqword [rax] +vorpd xmm1, xmm2 +vorpd xmm1, [rax] +vorpd xmm1, dqword [rax] +vorpd xmm1, xmm2, xmm3 +vorpd xmm1, xmm2, [rax] +vorpd xmm1, xmm2, dqword [rax] +vorpd ymm1, ymm2, ymm3 +vorpd ymm1, ymm2, [rax] +vorpd ymm1, ymm2, yword [rax] + +orps xmm1, xmm2 +orps xmm1, [rax] +orps xmm1, dqword [rax] +vorps xmm1, xmm2 +vorps xmm1, [rax] +vorps xmm1, dqword [rax] +vorps xmm1, xmm2, xmm3 +vorps xmm1, xmm2, [rax] +vorps xmm1, xmm2, dqword [rax] +vorps ymm1, ymm2, ymm3 +vorps ymm1, ymm2, [rax] +vorps ymm1, ymm2, yword [rax] + +pabsb xmm1, xmm2 +pabsb xmm1, [rax] +pabsb xmm1, dqword [rax] +vpabsb xmm1, xmm2 +vpabsb xmm1, [rax] +vpabsb xmm1, dqword [rax] + +pabsw xmm1, xmm2 +pabsw xmm1, [rax] +pabsw xmm1, dqword [rax] +vpabsw xmm1, xmm2 +vpabsw xmm1, [rax] +vpabsw xmm1, dqword [rax] + +pabsd xmm1, xmm2 +pabsd xmm1, [rax] +pabsd xmm1, dqword [rax] +vpabsd xmm1, xmm2 +vpabsd xmm1, [rax] +vpabsd xmm1, dqword [rax] + +packsswb xmm1, xmm2 +packsswb xmm1, [rax] +packsswb xmm1, dqword [rax] +vpacksswb xmm1, xmm2 +vpacksswb xmm1, [rax] +vpacksswb xmm1, dqword [rax] +vpacksswb xmm1, xmm2, xmm3 +vpacksswb xmm1, xmm2, [rax] +vpacksswb xmm1, xmm2, dqword [rax] + +packssdw xmm1, xmm2 +packssdw xmm1, [rax] +packssdw xmm1, dqword [rax] +vpackssdw xmm1, xmm2 +vpackssdw xmm1, [rax] +vpackssdw xmm1, dqword [rax] +vpackssdw xmm1, xmm2, xmm3 +vpackssdw xmm1, xmm2, [rax] +vpackssdw xmm1, xmm2, dqword [rax] + +packuswb xmm1, xmm2 +packuswb xmm1, [rax] +packuswb xmm1, dqword [rax] +vpackuswb xmm1, xmm2 +vpackuswb xmm1, [rax] +vpackuswb xmm1, dqword [rax] +vpackuswb xmm1, xmm2, xmm3 +vpackuswb xmm1, xmm2, [rax] +vpackuswb xmm1, xmm2, dqword [rax] + +packusdw xmm1, xmm2 +packusdw xmm1, [rax] +packusdw xmm1, dqword [rax] +vpackusdw xmm1, xmm2 +vpackusdw xmm1, [rax] +vpackusdw xmm1, dqword [rax] +vpackusdw xmm1, xmm2, xmm3 +vpackusdw xmm1, xmm2, [rax] +vpackusdw xmm1, xmm2, dqword [rax] + +paddb xmm1, xmm2 +paddb xmm1, [rax] +paddb xmm1, dqword [rax] +vpaddb xmm1, xmm2 +vpaddb xmm1, [rax] +vpaddb xmm1, dqword [rax] +vpaddb xmm1, xmm2, xmm3 +vpaddb xmm1, xmm2, [rax] +vpaddb xmm1, xmm2, dqword [rax] + +paddw xmm1, xmm2 +paddw xmm1, [rax] +paddw xmm1, dqword [rax] +vpaddw xmm1, xmm2 +vpaddw xmm1, [rax] +vpaddw xmm1, dqword [rax] +vpaddw xmm1, xmm2, xmm3 +vpaddw xmm1, xmm2, [rax] +vpaddw xmm1, xmm2, dqword [rax] + +paddd xmm1, xmm2 +paddd xmm1, [rax] +paddd xmm1, dqword [rax] +vpaddd xmm1, xmm2 +vpaddd xmm1, [rax] +vpaddd xmm1, dqword [rax] +vpaddd xmm1, xmm2, xmm3 +vpaddd xmm1, xmm2, [rax] +vpaddd xmm1, xmm2, dqword [rax] + +paddq xmm1, xmm2 +paddq xmm1, [rax] +paddq xmm1, dqword [rax] +vpaddq xmm1, xmm2 +vpaddq xmm1, [rax] +vpaddq xmm1, dqword [rax] +vpaddq xmm1, xmm2, xmm3 +vpaddq xmm1, xmm2, [rax] +vpaddq xmm1, xmm2, dqword [rax] + +paddsb xmm1, xmm2 +paddsb xmm1, [rax] +paddsb xmm1, dqword [rax] +vpaddsb xmm1, xmm2 +vpaddsb xmm1, [rax] +vpaddsb xmm1, dqword [rax] +vpaddsb xmm1, xmm2, xmm3 +vpaddsb xmm1, xmm2, [rax] +vpaddsb xmm1, xmm2, dqword [rax] + +paddsw xmm1, xmm2 +paddsw xmm1, [rax] +paddsw xmm1, dqword [rax] +vpaddsw xmm1, xmm2 +vpaddsw xmm1, [rax] +vpaddsw xmm1, dqword [rax] +vpaddsw xmm1, xmm2, xmm3 +vpaddsw xmm1, xmm2, [rax] +vpaddsw xmm1, xmm2, dqword [rax] + +paddusb xmm1, xmm2 +paddusb xmm1, [rax] +paddusb xmm1, dqword [rax] +vpaddusb xmm1, xmm2 +vpaddusb xmm1, [rax] +vpaddusb xmm1, dqword [rax] +vpaddusb xmm1, xmm2, xmm3 +vpaddusb xmm1, xmm2, [rax] +vpaddusb xmm1, xmm2, dqword [rax] + +paddusw xmm1, xmm2 +paddusw xmm1, [rax] +paddusw xmm1, dqword [rax] +vpaddusw xmm1, xmm2 +vpaddusw xmm1, [rax] +vpaddusw xmm1, dqword [rax] +vpaddusw xmm1, xmm2, xmm3 +vpaddusw xmm1, xmm2, [rax] +vpaddusw xmm1, xmm2, dqword [rax] + +palignr xmm1, xmm2, 5 +palignr xmm1, [rax], byte 5 +palignr xmm1, dqword [rax], 5 +vpalignr xmm1, xmm2, 5 +vpalignr xmm1, [rax], byte 5 +vpalignr xmm1, dqword [rax], 5 +vpalignr xmm1, xmm2, xmm3, 5 +vpalignr xmm1, xmm2, [rax], byte 5 +vpalignr xmm1, xmm2, dqword [rax], 5 + +pand xmm1, xmm2 +pand xmm1, [rax] +pand xmm1, dqword [rax] +vpand xmm1, xmm2 +vpand xmm1, [rax] +vpand xmm1, dqword [rax] +vpand xmm1, xmm2, xmm3 +vpand xmm1, xmm2, [rax] +vpand xmm1, xmm2, dqword [rax] + +pandn xmm1, xmm2 +pandn xmm1, [rax] +pandn xmm1, dqword [rax] +vpandn xmm1, xmm2 +vpandn xmm1, [rax] +vpandn xmm1, dqword [rax] +vpandn xmm1, xmm2, xmm3 +vpandn xmm1, xmm2, [rax] +vpandn xmm1, xmm2, dqword [rax] + +pavgb xmm1, xmm2 +pavgb xmm1, [rax] +pavgb xmm1, dqword [rax] +vpavgb xmm1, xmm2 +vpavgb xmm1, [rax] +vpavgb xmm1, dqword [rax] +vpavgb xmm1, xmm2, xmm3 +vpavgb xmm1, xmm2, [rax] +vpavgb xmm1, xmm2, dqword [rax] + +pavgw xmm1, xmm2 +pavgw xmm1, [rax] +pavgw xmm1, dqword [rax] +vpavgw xmm1, xmm2 +vpavgw xmm1, [rax] +vpavgw xmm1, dqword [rax] +vpavgw xmm1, xmm2, xmm3 +vpavgw xmm1, xmm2, [rax] +vpavgw xmm1, xmm2, dqword [rax] + +; implicit XMM0 cannot be VEX encoded +pblendvb xmm1, xmm2 +pblendvb xmm1, [rax] +pblendvb xmm1, dqword [rax] +pblendvb xmm1, xmm2, xmm0 +pblendvb xmm1, [rax], xmm0 +pblendvb xmm1, dqword [rax], xmm0 +vpblendvb xmm1, xmm2, xmm3, xmm4 +vpblendvb xmm1, xmm2, [rax], xmm4 +vpblendvb xmm1, xmm2, dqword [rax], xmm4 + +pblendw xmm1, xmm2, 5 +pblendw xmm1, [rax], byte 5 +pblendw xmm1, dqword [rax], 5 +vpblendw xmm1, xmm2, 5 +vpblendw xmm1, [rax], byte 5 +vpblendw xmm1, dqword [rax], 5 +vpblendw xmm1, xmm2, xmm3, 5 +vpblendw xmm1, xmm2, [rax], byte 5 +vpblendw xmm1, xmm2, dqword [rax], 5 + +pcmpestri xmm1, xmm2, 5 +pcmpestri xmm1, [rax], byte 5 +pcmpestri xmm1, dqword [rax], 5 +vpcmpestri xmm1, xmm2, 5 +vpcmpestri xmm1, [rax], byte 5 +vpcmpestri xmm1, dqword [rax], 5 + +pcmpestrm xmm1, xmm2, 5 +pcmpestrm xmm1, [rax], byte 5 +pcmpestrm xmm1, dqword [rax], 5 +vpcmpestrm xmm1, xmm2, 5 +vpcmpestrm xmm1, [rax], byte 5 +vpcmpestrm xmm1, dqword [rax], 5 + +pcmpistri xmm1, xmm2, 5 +pcmpistri xmm1, [rax], byte 5 +pcmpistri xmm1, dqword [rax], 5 +vpcmpistri xmm1, xmm2, 5 +vpcmpistri xmm1, [rax], byte 5 +vpcmpistri xmm1, dqword [rax], 5 + +pcmpistrm xmm1, xmm2, 5 +pcmpistrm xmm1, [rax], byte 5 +pcmpistrm xmm1, dqword [rax], 5 +vpcmpistrm xmm1, xmm2, 5 +vpcmpistrm xmm1, [rax], byte 5 +vpcmpistrm xmm1, dqword [rax], 5 + +pcmpeqb xmm1, xmm2 +pcmpeqb xmm1, [rax] +pcmpeqb xmm1, dqword [rax] +vpcmpeqb xmm1, xmm2 +vpcmpeqb xmm1, [rax] +vpcmpeqb xmm1, dqword [rax] +vpcmpeqb xmm1, xmm2, xmm3 +vpcmpeqb xmm1, xmm2, [rax] +vpcmpeqb xmm1, xmm2, dqword [rax] + +pcmpeqw xmm1, xmm2 +pcmpeqw xmm1, [rax] +pcmpeqw xmm1, dqword [rax] +vpcmpeqw xmm1, xmm2 +vpcmpeqw xmm1, [rax] +vpcmpeqw xmm1, dqword [rax] +vpcmpeqw xmm1, xmm2, xmm3 +vpcmpeqw xmm1, xmm2, [rax] +vpcmpeqw xmm1, xmm2, dqword [rax] + +pcmpeqd xmm1, xmm2 +pcmpeqd xmm1, [rax] +pcmpeqd xmm1, dqword [rax] +vpcmpeqd xmm1, xmm2 +vpcmpeqd xmm1, [rax] +vpcmpeqd xmm1, dqword [rax] +vpcmpeqd xmm1, xmm2, xmm3 +vpcmpeqd xmm1, xmm2, [rax] +vpcmpeqd xmm1, xmm2, dqword [rax] + +pcmpeqq xmm1, xmm2 +pcmpeqq xmm1, [rax] +pcmpeqq xmm1, dqword [rax] +vpcmpeqq xmm1, xmm2 +vpcmpeqq xmm1, [rax] +vpcmpeqq xmm1, dqword [rax] +vpcmpeqq xmm1, xmm2, xmm3 +vpcmpeqq xmm1, xmm2, [rax] +vpcmpeqq xmm1, xmm2, dqword [rax] + +pcmpgtb xmm1, xmm2 +pcmpgtb xmm1, [rax] +pcmpgtb xmm1, dqword [rax] +vpcmpgtb xmm1, xmm2 +vpcmpgtb xmm1, [rax] +vpcmpgtb xmm1, dqword [rax] +vpcmpgtb xmm1, xmm2, xmm3 +vpcmpgtb xmm1, xmm2, [rax] +vpcmpgtb xmm1, xmm2, dqword [rax] + +pcmpgtw xmm1, xmm2 +pcmpgtw xmm1, [rax] +pcmpgtw xmm1, dqword [rax] +vpcmpgtw xmm1, xmm2 +vpcmpgtw xmm1, [rax] +vpcmpgtw xmm1, dqword [rax] +vpcmpgtw xmm1, xmm2, xmm3 +vpcmpgtw xmm1, xmm2, [rax] +vpcmpgtw xmm1, xmm2, dqword [rax] + +pcmpgtd xmm1, xmm2 +pcmpgtd xmm1, [rax] +pcmpgtd xmm1, dqword [rax] +vpcmpgtd xmm1, xmm2 +vpcmpgtd xmm1, [rax] +vpcmpgtd xmm1, dqword [rax] +vpcmpgtd xmm1, xmm2, xmm3 +vpcmpgtd xmm1, xmm2, [rax] +vpcmpgtd xmm1, xmm2, dqword [rax] + +pcmpgtq xmm1, xmm2 +pcmpgtq xmm1, [rax] +pcmpgtq xmm1, dqword [rax] +vpcmpgtq xmm1, xmm2 +vpcmpgtq xmm1, [rax] +vpcmpgtq xmm1, dqword [rax] +vpcmpgtq xmm1, xmm2, xmm3 +vpcmpgtq xmm1, xmm2, [rax] +vpcmpgtq xmm1, xmm2, dqword [rax] + +vpermilpd xmm1, xmm2, xmm3 +vpermilpd xmm1, xmm2, [rax] +vpermilpd xmm1, xmm2, dqword [rax] +vpermilpd ymm1, ymm2, ymm3 +vpermilpd ymm1, ymm2, [rax] +vpermilpd ymm1, ymm2, yword [rax] +vpermilpd xmm1, [rax], byte 5 +vpermilpd xmm1, dqword [rax], 5 +vpermilpd ymm1, [rax], byte 5 +vpermilpd ymm1, yword [rax], 5 + +vpermilps xmm1, xmm2, xmm3 +vpermilps xmm1, xmm2, [rax] +vpermilps xmm1, xmm2, dqword [rax] +vpermilps ymm1, ymm2, ymm3 +vpermilps ymm1, ymm2, [rax] +vpermilps ymm1, ymm2, yword [rax] +vpermilps xmm1, [rax], byte 5 +vpermilps xmm1, dqword [rax], 5 +vpermilps ymm1, [rax], byte 5 +vpermilps ymm1, yword [rax], 5 + +vperm2f128 ymm1, ymm2, ymm3, 5 +vperm2f128 ymm1, ymm2, [rax], byte 5 +vperm2f128 ymm1, ymm2, yword [rax], 5 + +pextrb eax, xmm2, 5 +pextrb eax, xmm2, byte 5 +pextrb rax, xmm2, 5 +pextrb rax, xmm2, byte 5 +pextrb byte [rax], xmm2, 5 +pextrb [rax], xmm2, byte 5 +vpextrb eax, xmm2, 5 +vpextrb eax, xmm2, byte 5 +vpextrb rax, xmm2, 5 +vpextrb rax, xmm2, byte 5 +vpextrb byte [rax], xmm2, 5 +vpextrb [rax], xmm2, byte 5 + +pextrw eax, xmm2, 5 +pextrw eax, xmm2, byte 5 +pextrw rax, xmm2, 5 +pextrw rax, xmm2, byte 5 +pextrw word [rax], xmm2, 5 +pextrw [rax], xmm2, byte 5 +vpextrw eax, xmm2, 5 +vpextrw eax, xmm2, byte 5 +vpextrw rax, xmm2, 5 +vpextrw rax, xmm2, byte 5 +vpextrw word [rax], xmm2, 5 +vpextrw [rax], xmm2, byte 5 + +pextrd eax, xmm2, 5 +pextrd eax, xmm2, byte 5 +pextrd dword [rax], xmm2, 5 +pextrd [rax], xmm2, byte 5 +vpextrd eax, xmm2, 5 +vpextrd eax, xmm2, byte 5 +vpextrd dword [rax], xmm2, 5 +vpextrd [rax], xmm2, byte 5 + +pextrq rax, xmm2, 5 +pextrq rax, xmm2, byte 5 +pextrq qword [rax], xmm2, 5 +pextrq [rax], xmm2, byte 5 +vpextrq rax, xmm2, 5 +vpextrq rax, xmm2, byte 5 +vpextrq qword [rax], xmm2, 5 +vpextrq [rax], xmm2, byte 5 + +phaddw xmm1, xmm2 +phaddw xmm1, [rax] +phaddw xmm1, dqword [rax] +vphaddw xmm1, xmm2 +vphaddw xmm1, [rax] +vphaddw xmm1, dqword [rax] +vphaddw xmm1, xmm2, xmm3 +vphaddw xmm1, xmm2, [rax] +vphaddw xmm1, xmm2, dqword [rax] + +phaddd xmm1, xmm2 +phaddd xmm1, [rax] +phaddd xmm1, dqword [rax] +vphaddd xmm1, xmm2 +vphaddd xmm1, [rax] +vphaddd xmm1, dqword [rax] +vphaddd xmm1, xmm2, xmm3 +vphaddd xmm1, xmm2, [rax] +vphaddd xmm1, xmm2, dqword [rax] + +phaddsw xmm1, xmm2 +phaddsw xmm1, [rax] +phaddsw xmm1, dqword [rax] +vphaddsw xmm1, xmm2 +vphaddsw xmm1, [rax] +vphaddsw xmm1, dqword [rax] +vphaddsw xmm1, xmm2, xmm3 +vphaddsw xmm1, xmm2, [rax] +vphaddsw xmm1, xmm2, dqword [rax] + +phminposuw xmm1, xmm2 +phminposuw xmm1, [rax] +phminposuw xmm1, dqword [rax] +vphminposuw xmm1, xmm2 +vphminposuw xmm1, [rax] +vphminposuw xmm1, dqword [rax] + +phsubw xmm1, xmm2 +phsubw xmm1, [rax] +phsubw xmm1, dqword [rax] +vphsubw xmm1, xmm2 +vphsubw xmm1, [rax] +vphsubw xmm1, dqword [rax] +vphsubw xmm1, xmm2, xmm3 +vphsubw xmm1, xmm2, [rax] +vphsubw xmm1, xmm2, dqword [rax] + +phsubd xmm1, xmm2 +phsubd xmm1, [rax] +phsubd xmm1, dqword [rax] +vphsubd xmm1, xmm2 +vphsubd xmm1, [rax] +vphsubd xmm1, dqword [rax] +vphsubd xmm1, xmm2, xmm3 +vphsubd xmm1, xmm2, [rax] +vphsubd xmm1, xmm2, dqword [rax] + +phsubsw xmm1, xmm2 +phsubsw xmm1, [rax] +phsubsw xmm1, dqword [rax] +vphsubsw xmm1, xmm2 +vphsubsw xmm1, [rax] +vphsubsw xmm1, dqword [rax] +vphsubsw xmm1, xmm2, xmm3 +vphsubsw xmm1, xmm2, [rax] +vphsubsw xmm1, xmm2, dqword [rax] + +pinsrb xmm1, eax, 5 +pinsrb xmm1, byte [rax], 5 +pinsrb xmm1, [rax], byte 5 +vpinsrb xmm1, eax, 5 +vpinsrb xmm1, byte [rax], 5 +vpinsrb xmm1, [rax], byte 5 +vpinsrb xmm1, xmm2, eax, 5 +vpinsrb xmm1, xmm2, byte [rax], 5 +vpinsrb xmm1, xmm2, [rax], byte 5 + +pinsrw xmm1, eax, 5 +pinsrw xmm1, word [rax], 5 +pinsrw xmm1, [rax], byte 5 +vpinsrw xmm1, eax, 5 +vpinsrw xmm1, word [rax], 5 +vpinsrw xmm1, [rax], byte 5 +vpinsrw xmm1, xmm2, eax, 5 +vpinsrw xmm1, xmm2, word [rax], 5 +vpinsrw xmm1, xmm2, [rax], byte 5 + +pinsrd xmm1, eax, 5 +pinsrd xmm1, dword [rax], 5 +pinsrd xmm1, [rax], byte 5 +vpinsrd xmm1, eax, 5 +vpinsrd xmm1, dword [rax], 5 +vpinsrd xmm1, [rax], byte 5 +vpinsrd xmm1, xmm2, eax, 5 +vpinsrd xmm1, xmm2, dword [rax], 5 +vpinsrd xmm1, xmm2, [rax], byte 5 + +pinsrq xmm1, rax, 5 +pinsrq xmm1, qword [rax], 5 +pinsrq xmm1, [rax], byte 5 +vpinsrq xmm1, rax, 5 +vpinsrq xmm1, qword [rax], 5 +vpinsrq xmm1, [rax], byte 5 +vpinsrq xmm1, xmm2, rax, 5 +vpinsrq xmm1, xmm2, qword [rax], 5 +vpinsrq xmm1, xmm2, [rax], byte 5 + +pmaddwd xmm1, xmm2 +pmaddwd xmm1, [rax] +pmaddwd xmm1, dqword [rax] +vpmaddwd xmm1, xmm2 +vpmaddwd xmm1, [rax] +vpmaddwd xmm1, dqword [rax] +vpmaddwd xmm1, xmm2, xmm3 +vpmaddwd xmm1, xmm2, [rax] +vpmaddwd xmm1, xmm2, dqword [rax] + +pmaddubsw xmm1, xmm2 +pmaddubsw xmm1, [rax] +pmaddubsw xmm1, dqword [rax] +vpmaddubsw xmm1, xmm2 +vpmaddubsw xmm1, [rax] +vpmaddubsw xmm1, dqword [rax] +vpmaddubsw xmm1, xmm2, xmm3 +vpmaddubsw xmm1, xmm2, [rax] +vpmaddubsw xmm1, xmm2, dqword [rax] + +pmaxsb xmm1, xmm2 +pmaxsb xmm1, [rax] +pmaxsb xmm1, dqword [rax] +vpmaxsb xmm1, xmm2 +vpmaxsb xmm1, [rax] +vpmaxsb xmm1, dqword [rax] +vpmaxsb xmm1, xmm2, xmm3 +vpmaxsb xmm1, xmm2, [rax] +vpmaxsb xmm1, xmm2, dqword [rax] + +pmaxsw xmm1, xmm2 +pmaxsw xmm1, [rax] +pmaxsw xmm1, dqword [rax] +vpmaxsw xmm1, xmm2 +vpmaxsw xmm1, [rax] +vpmaxsw xmm1, dqword [rax] +vpmaxsw xmm1, xmm2, xmm3 +vpmaxsw xmm1, xmm2, [rax] +vpmaxsw xmm1, xmm2, dqword [rax] + +pmaxsd xmm1, xmm2 +pmaxsd xmm1, [rax] +pmaxsd xmm1, dqword [rax] +vpmaxsd xmm1, xmm2 +vpmaxsd xmm1, [rax] +vpmaxsd xmm1, dqword [rax] +vpmaxsd xmm1, xmm2, xmm3 +vpmaxsd xmm1, xmm2, [rax] +vpmaxsd xmm1, xmm2, dqword [rax] + +pmaxub xmm1, xmm2 +pmaxub xmm1, [rax] +pmaxub xmm1, dqword [rax] +vpmaxub xmm1, xmm2 +vpmaxub xmm1, [rax] +vpmaxub xmm1, dqword [rax] +vpmaxub xmm1, xmm2, xmm3 +vpmaxub xmm1, xmm2, [rax] +vpmaxub xmm1, xmm2, dqword [rax] + +pmaxuw xmm1, xmm2 +pmaxuw xmm1, [rax] +pmaxuw xmm1, dqword [rax] +vpmaxuw xmm1, xmm2 +vpmaxuw xmm1, [rax] +vpmaxuw xmm1, dqword [rax] +vpmaxuw xmm1, xmm2, xmm3 +vpmaxuw xmm1, xmm2, [rax] +vpmaxuw xmm1, xmm2, dqword [rax] + +pmaxud xmm1, xmm2 +pmaxud xmm1, [rax] +pmaxud xmm1, dqword [rax] +vpmaxud xmm1, xmm2 +vpmaxud xmm1, [rax] +vpmaxud xmm1, dqword [rax] +vpmaxud xmm1, xmm2, xmm3 +vpmaxud xmm1, xmm2, [rax] +vpmaxud xmm1, xmm2, dqword [rax] + +pminsb xmm1, xmm2 +pminsb xmm1, [rax] +pminsb xmm1, dqword [rax] +vpminsb xmm1, xmm2 +vpminsb xmm1, [rax] +vpminsb xmm1, dqword [rax] +vpminsb xmm1, xmm2, xmm3 +vpminsb xmm1, xmm2, [rax] +vpminsb xmm1, xmm2, dqword [rax] + +pminsw xmm1, xmm2 +pminsw xmm1, [rax] +pminsw xmm1, dqword [rax] +vpminsw xmm1, xmm2 +vpminsw xmm1, [rax] +vpminsw xmm1, dqword [rax] +vpminsw xmm1, xmm2, xmm3 +vpminsw xmm1, xmm2, [rax] +vpminsw xmm1, xmm2, dqword [rax] + +pminsd xmm1, xmm2 +pminsd xmm1, [rax] +pminsd xmm1, dqword [rax] +vpminsd xmm1, xmm2 +vpminsd xmm1, [rax] +vpminsd xmm1, dqword [rax] +vpminsd xmm1, xmm2, xmm3 +vpminsd xmm1, xmm2, [rax] +vpminsd xmm1, xmm2, dqword [rax] + +pminub xmm1, xmm2 +pminub xmm1, [rax] +pminub xmm1, dqword [rax] +vpminub xmm1, xmm2 +vpminub xmm1, [rax] +vpminub xmm1, dqword [rax] +vpminub xmm1, xmm2, xmm3 +vpminub xmm1, xmm2, [rax] +vpminub xmm1, xmm2, dqword [rax] + +pminuw xmm1, xmm2 +pminuw xmm1, [rax] +pminuw xmm1, dqword [rax] +vpminuw xmm1, xmm2 +vpminuw xmm1, [rax] +vpminuw xmm1, dqword [rax] +vpminuw xmm1, xmm2, xmm3 +vpminuw xmm1, xmm2, [rax] +vpminuw xmm1, xmm2, dqword [rax] + +pminud xmm1, xmm2 +pminud xmm1, [rax] +pminud xmm1, dqword [rax] +vpminud xmm1, xmm2 +vpminud xmm1, [rax] +vpminud xmm1, dqword [rax] +vpminud xmm1, xmm2, xmm3 +vpminud xmm1, xmm2, [rax] +vpminud xmm1, xmm2, dqword [rax] + +pmovmskb eax, xmm1 +pmovmskb rax, xmm1 +vpmovmskb eax, xmm1 +vpmovmskb rax, xmm1 + +pmovsxbw xmm1, xmm2 +pmovsxbw xmm1, [rax] +pmovsxbw xmm1, qword [rax] +vpmovsxbw xmm1, xmm2 +vpmovsxbw xmm1, [rax] +vpmovsxbw xmm1, qword [rax] + +pmovsxbd xmm1, xmm2 +pmovsxbd xmm1, [rax] +pmovsxbd xmm1, dword [rax] +vpmovsxbd xmm1, xmm2 +vpmovsxbd xmm1, [rax] +vpmovsxbd xmm1, dword [rax] + +pmovsxbq xmm1, xmm2 +pmovsxbq xmm1, [rax] +pmovsxbq xmm1, word [rax] +vpmovsxbq xmm1, xmm2 +vpmovsxbq xmm1, [rax] +vpmovsxbq xmm1, word [rax] + +pmovsxwd xmm1, xmm2 +pmovsxwd xmm1, [rax] +pmovsxwd xmm1, qword [rax] +vpmovsxwd xmm1, xmm2 +vpmovsxwd xmm1, [rax] +vpmovsxwd xmm1, qword [rax] + +pmovsxwq xmm1, xmm2 +pmovsxwq xmm1, [rax] +pmovsxwq xmm1, dword [rax] +vpmovsxwq xmm1, xmm2 +vpmovsxwq xmm1, [rax] +vpmovsxwq xmm1, dword [rax] + +pmovsxdq xmm1, xmm2 +pmovsxdq xmm1, [rax] +pmovsxdq xmm1, qword [rax] +vpmovsxdq xmm1, xmm2 +vpmovsxdq xmm1, [rax] +vpmovsxdq xmm1, qword [rax] + +pmovzxbw xmm1, xmm2 +pmovzxbw xmm1, [rax] +pmovzxbw xmm1, qword [rax] +vpmovzxbw xmm1, xmm2 +vpmovzxbw xmm1, [rax] +vpmovzxbw xmm1, qword [rax] + +pmovzxbd xmm1, xmm2 +pmovzxbd xmm1, [rax] +pmovzxbd xmm1, dword [rax] +vpmovzxbd xmm1, xmm2 +vpmovzxbd xmm1, [rax] +vpmovzxbd xmm1, dword [rax] + +pmovzxbq xmm1, xmm2 +pmovzxbq xmm1, [rax] +pmovzxbq xmm1, word [rax] +vpmovzxbq xmm1, xmm2 +vpmovzxbq xmm1, [rax] +vpmovzxbq xmm1, word [rax] + +pmovzxwd xmm1, xmm2 +pmovzxwd xmm1, [rax] +pmovzxwd xmm1, qword [rax] +vpmovzxwd xmm1, xmm2 +vpmovzxwd xmm1, [rax] +vpmovzxwd xmm1, qword [rax] + +pmovzxwq xmm1, xmm2 +pmovzxwq xmm1, [rax] +pmovzxwq xmm1, dword [rax] +vpmovzxwq xmm1, xmm2 +vpmovzxwq xmm1, [rax] +vpmovzxwq xmm1, dword [rax] + +pmovzxdq xmm1, xmm2 +pmovzxdq xmm1, [rax] +pmovzxdq xmm1, qword [rax] +vpmovzxdq xmm1, xmm2 +vpmovzxdq xmm1, [rax] +vpmovzxdq xmm1, qword [rax] + +pmulhuw xmm1, xmm2 +pmulhuw xmm1, [rax] +pmulhuw xmm1, dqword [rax] +vpmulhuw xmm1, xmm2 +vpmulhuw xmm1, [rax] +vpmulhuw xmm1, dqword [rax] +vpmulhuw xmm1, xmm2, xmm3 +vpmulhuw xmm1, xmm2, [rax] +vpmulhuw xmm1, xmm2, dqword [rax] + +pmulhrsw xmm1, xmm2 +pmulhrsw xmm1, [rax] +pmulhrsw xmm1, dqword [rax] +vpmulhrsw xmm1, xmm2 +vpmulhrsw xmm1, [rax] +vpmulhrsw xmm1, dqword [rax] +vpmulhrsw xmm1, xmm2, xmm3 +vpmulhrsw xmm1, xmm2, [rax] +vpmulhrsw xmm1, xmm2, dqword [rax] + +pmulhw xmm1, xmm2 +pmulhw xmm1, [rax] +pmulhw xmm1, dqword [rax] +vpmulhw xmm1, xmm2 +vpmulhw xmm1, [rax] +vpmulhw xmm1, dqword [rax] +vpmulhw xmm1, xmm2, xmm3 +vpmulhw xmm1, xmm2, [rax] +vpmulhw xmm1, xmm2, dqword [rax] + +pmullw xmm1, xmm2 +pmullw xmm1, [rax] +pmullw xmm1, dqword [rax] +vpmullw xmm1, xmm2 +vpmullw xmm1, [rax] +vpmullw xmm1, dqword [rax] +vpmullw xmm1, xmm2, xmm3 +vpmullw xmm1, xmm2, [rax] +vpmullw xmm1, xmm2, dqword [rax] + +pmulld xmm1, xmm2 +pmulld xmm1, [rax] +pmulld xmm1, dqword [rax] +vpmulld xmm1, xmm2 +vpmulld xmm1, [rax] +vpmulld xmm1, dqword [rax] +vpmulld xmm1, xmm2, xmm3 +vpmulld xmm1, xmm2, [rax] +vpmulld xmm1, xmm2, dqword [rax] + +pmuludq xmm1, xmm2 +pmuludq xmm1, [rax] +pmuludq xmm1, dqword [rax] +vpmuludq xmm1, xmm2 +vpmuludq xmm1, [rax] +vpmuludq xmm1, dqword [rax] +vpmuludq xmm1, xmm2, xmm3 +vpmuludq xmm1, xmm2, [rax] +vpmuludq xmm1, xmm2, dqword [rax] + +pmuldq xmm1, xmm2 +pmuldq xmm1, [rax] +pmuldq xmm1, dqword [rax] +vpmuldq xmm1, xmm2 +vpmuldq xmm1, [rax] +vpmuldq xmm1, dqword [rax] +vpmuldq xmm1, xmm2, xmm3 +vpmuldq xmm1, xmm2, [rax] +vpmuldq xmm1, xmm2, dqword [rax] + +por xmm1, xmm2 +por xmm1, [rax] +por xmm1, dqword [rax] +vpor xmm1, xmm2 +vpor xmm1, [rax] +vpor xmm1, dqword [rax] +vpor xmm1, xmm2, xmm3 +vpor xmm1, xmm2, [rax] +vpor xmm1, xmm2, dqword [rax] + +psadbw xmm1, xmm2 +psadbw xmm1, [rax] +psadbw xmm1, dqword [rax] +vpsadbw xmm1, xmm2 +vpsadbw xmm1, [rax] +vpsadbw xmm1, dqword [rax] +vpsadbw xmm1, xmm2, xmm3 +vpsadbw xmm1, xmm2, [rax] +vpsadbw xmm1, xmm2, dqword [rax] + +pshufb xmm1, xmm2 +pshufb xmm1, [rax] +pshufb xmm1, dqword [rax] +vpshufb xmm1, xmm2 +vpshufb xmm1, [rax] +vpshufb xmm1, dqword [rax] +vpshufb xmm1, xmm2, xmm3 +vpshufb xmm1, xmm2, [rax] +vpshufb xmm1, xmm2, dqword [rax] + +pshufd xmm1, xmm2, 5 +pshufd xmm1, [rax], byte 5 +pshufd xmm1, dqword [rax], 5 +vpshufd xmm1, xmm2, 5 +vpshufd xmm1, [rax], byte 5 +vpshufd xmm1, dqword [rax], 5 + +pshufhw xmm1, xmm2, 5 +pshufhw xmm1, [rax], byte 5 +pshufhw xmm1, dqword [rax], 5 +vpshufhw xmm1, xmm2, 5 +vpshufhw xmm1, [rax], byte 5 +vpshufhw xmm1, dqword [rax], 5 + +pshuflw xmm1, xmm2, 5 +pshuflw xmm1, [rax], byte 5 +pshuflw xmm1, dqword [rax], 5 +vpshuflw xmm1, xmm2, 5 +vpshuflw xmm1, [rax], byte 5 +vpshuflw xmm1, dqword [rax], 5 + +psignb xmm1, xmm2 +psignb xmm1, [rax] +psignb xmm1, dqword [rax] +vpsignb xmm1, xmm2 +vpsignb xmm1, [rax] +vpsignb xmm1, dqword [rax] +vpsignb xmm1, xmm2, xmm3 +vpsignb xmm1, xmm2, [rax] +vpsignb xmm1, xmm2, dqword [rax] + +psignw xmm1, xmm2 +psignw xmm1, [rax] +psignw xmm1, dqword [rax] +vpsignw xmm1, xmm2 +vpsignw xmm1, [rax] +vpsignw xmm1, dqword [rax] +vpsignw xmm1, xmm2, xmm3 +vpsignw xmm1, xmm2, [rax] +vpsignw xmm1, xmm2, dqword [rax] + +psignd xmm1, xmm2 +psignd xmm1, [rax] +psignd xmm1, dqword [rax] +vpsignd xmm1, xmm2 +vpsignd xmm1, [rax] +vpsignd xmm1, dqword [rax] +vpsignd xmm1, xmm2, xmm3 +vpsignd xmm1, xmm2, [rax] +vpsignd xmm1, xmm2, dqword [rax] + +; Test these with high regs as it goes into VEX.B (REX.B) +pslldq xmm11, 5 +pslldq xmm11, byte 5 +vpslldq xmm11, 5 +vpslldq xmm11, byte 5 +vpslldq xmm11, xmm12, 5 +vpslldq xmm11, xmm12, byte 5 + +pslldq xmm1, 5 +pslldq xmm1, byte 5 +vpslldq xmm1, 5 +vpslldq xmm1, byte 5 +vpslldq xmm1, xmm2, 5 +vpslldq xmm1, xmm2, byte 5 + +psrldq xmm1, 5 +psrldq xmm1, byte 5 +vpsrldq xmm1, 5 +vpsrldq xmm1, byte 5 +vpsrldq xmm1, xmm2, 5 +vpsrldq xmm1, xmm2, byte 5 + +psllw xmm1, xmm2 +psllw xmm1, [rax] +psllw xmm1, dqword [rax] +vpsllw xmm1, xmm2 +vpsllw xmm1, [rax] +vpsllw xmm1, dqword [rax] +vpsllw xmm1, xmm2, xmm3 +vpsllw xmm1, xmm2, [rax] +vpsllw xmm1, xmm2, dqword [rax] +psllw xmm1, 5 +psllw xmm1, byte 5 +vpsllw xmm1, 5 +vpsllw xmm1, byte 5 +vpsllw xmm1, xmm2, 5 +vpsllw xmm1, xmm2, byte 5 + +pslld xmm1, xmm2 +pslld xmm1, [rax] +pslld xmm1, dqword [rax] +vpslld xmm1, xmm2 +vpslld xmm1, [rax] +vpslld xmm1, dqword [rax] +vpslld xmm1, xmm2, xmm3 +vpslld xmm1, xmm2, [rax] +vpslld xmm1, xmm2, dqword [rax] +pslld xmm1, 5 +pslld xmm1, byte 5 +vpslld xmm1, 5 +vpslld xmm1, byte 5 +vpslld xmm1, xmm2, 5 +vpslld xmm1, xmm2, byte 5 + +psllq xmm1, xmm2 +psllq xmm1, [rax] +psllq xmm1, dqword [rax] +vpsllq xmm1, xmm2 +vpsllq xmm1, [rax] +vpsllq xmm1, dqword [rax] +vpsllq xmm1, xmm2, xmm3 +vpsllq xmm1, xmm2, [rax] +vpsllq xmm1, xmm2, dqword [rax] +psllq xmm1, 5 +psllq xmm1, byte 5 +vpsllq xmm1, 5 +vpsllq xmm1, byte 5 +vpsllq xmm1, xmm2, 5 +vpsllq xmm1, xmm2, byte 5 + +psraw xmm1, xmm2 +psraw xmm1, [rax] +psraw xmm1, dqword [rax] +vpsraw xmm1, xmm2 +vpsraw xmm1, [rax] +vpsraw xmm1, dqword [rax] +vpsraw xmm1, xmm2, xmm3 +vpsraw xmm1, xmm2, [rax] +vpsraw xmm1, xmm2, dqword [rax] +psraw xmm1, 5 +psraw xmm1, byte 5 +vpsraw xmm1, 5 +vpsraw xmm1, byte 5 +vpsraw xmm1, xmm2, 5 +vpsraw xmm1, xmm2, byte 5 + +psrad xmm1, xmm2 +psrad xmm1, [rax] +psrad xmm1, dqword [rax] +vpsrad xmm1, xmm2 +vpsrad xmm1, [rax] +vpsrad xmm1, dqword [rax] +vpsrad xmm1, xmm2, xmm3 +vpsrad xmm1, xmm2, [rax] +vpsrad xmm1, xmm2, dqword [rax] +psrad xmm1, 5 +psrad xmm1, byte 5 +vpsrad xmm1, 5 +vpsrad xmm1, byte 5 +vpsrad xmm1, xmm2, 5 +vpsrad xmm1, xmm2, byte 5 + +psrlw xmm1, xmm2 +psrlw xmm1, [rax] +psrlw xmm1, dqword [rax] +vpsrlw xmm1, xmm2 +vpsrlw xmm1, [rax] +vpsrlw xmm1, dqword [rax] +vpsrlw xmm1, xmm2, xmm3 +vpsrlw xmm1, xmm2, [rax] +vpsrlw xmm1, xmm2, dqword [rax] +psrlw xmm1, 5 +psrlw xmm1, byte 5 +vpsrlw xmm1, 5 +vpsrlw xmm1, byte 5 +vpsrlw xmm1, xmm2, 5 +vpsrlw xmm1, xmm2, byte 5 + +psrld xmm1, xmm2 +psrld xmm1, [rax] +psrld xmm1, dqword [rax] +vpsrld xmm1, xmm2 +vpsrld xmm1, [rax] +vpsrld xmm1, dqword [rax] +vpsrld xmm1, xmm2, xmm3 +vpsrld xmm1, xmm2, [rax] +vpsrld xmm1, xmm2, dqword [rax] +psrld xmm1, 5 +psrld xmm1, byte 5 +vpsrld xmm1, 5 +vpsrld xmm1, byte 5 +vpsrld xmm1, xmm2, 5 +vpsrld xmm1, xmm2, byte 5 + +psrlq xmm1, xmm2 +psrlq xmm1, [rax] +psrlq xmm1, dqword [rax] +vpsrlq xmm1, xmm2 +vpsrlq xmm1, [rax] +vpsrlq xmm1, dqword [rax] +vpsrlq xmm1, xmm2, xmm3 +vpsrlq xmm1, xmm2, [rax] +vpsrlq xmm1, xmm2, dqword [rax] +psrlq xmm1, 5 +psrlq xmm1, byte 5 +vpsrlq xmm1, 5 +vpsrlq xmm1, byte 5 +vpsrlq xmm1, xmm2, 5 +vpsrlq xmm1, xmm2, byte 5 + +ptest xmm1, xmm2 +ptest xmm1, [rax] +ptest xmm1, dqword [rax] +vptest xmm1, xmm2 +vptest xmm1, [rax] +vptest xmm1, dqword [rax] +vptest ymm1, ymm2 +vptest ymm1, [rax] +vptest ymm1, yword [rax] + +vtestps xmm1, xmm2 +vtestps xmm1, [rax] +vtestps xmm1, dqword [rax] +vtestps ymm1, ymm2 +vtestps ymm1, [rax] +vtestps ymm1, yword [rax] + +vtestpd xmm1, xmm2 +vtestpd xmm1, [rax] +vtestpd xmm1, dqword [rax] +vtestpd ymm1, ymm2 +vtestpd ymm1, [rax] +vtestpd ymm1, yword [rax] + +psubb xmm1, xmm2 +psubb xmm1, [rax] +psubb xmm1, dqword [rax] +vpsubb xmm1, xmm2 +vpsubb xmm1, [rax] +vpsubb xmm1, dqword [rax] +vpsubb xmm1, xmm2, xmm3 +vpsubb xmm1, xmm2, [rax] +vpsubb xmm1, xmm2, dqword [rax] + +psubw xmm1, xmm2 +psubw xmm1, [rax] +psubw xmm1, dqword [rax] +vpsubw xmm1, xmm2 +vpsubw xmm1, [rax] +vpsubw xmm1, dqword [rax] +vpsubw xmm1, xmm2, xmm3 +vpsubw xmm1, xmm2, [rax] +vpsubw xmm1, xmm2, dqword [rax] + +psubd xmm1, xmm2 +psubd xmm1, [rax] +psubd xmm1, dqword [rax] +vpsubd xmm1, xmm2 +vpsubd xmm1, [rax] +vpsubd xmm1, dqword [rax] +vpsubd xmm1, xmm2, xmm3 +vpsubd xmm1, xmm2, [rax] +vpsubd xmm1, xmm2, dqword [rax] + +psubq xmm1, xmm2 +psubq xmm1, [rax] +psubq xmm1, dqword [rax] +vpsubq xmm1, xmm2 +vpsubq xmm1, [rax] +vpsubq xmm1, dqword [rax] +vpsubq xmm1, xmm2, xmm3 +vpsubq xmm1, xmm2, [rax] +vpsubq xmm1, xmm2, dqword [rax] + +psubsb xmm1, xmm2 +psubsb xmm1, [rax] +psubsb xmm1, dqword [rax] +vpsubsb xmm1, xmm2 +vpsubsb xmm1, [rax] +vpsubsb xmm1, dqword [rax] +vpsubsb xmm1, xmm2, xmm3 +vpsubsb xmm1, xmm2, [rax] +vpsubsb xmm1, xmm2, dqword [rax] + +psubsw xmm1, xmm2 +psubsw xmm1, [rax] +psubsw xmm1, dqword [rax] +vpsubsw xmm1, xmm2 +vpsubsw xmm1, [rax] +vpsubsw xmm1, dqword [rax] +vpsubsw xmm1, xmm2, xmm3 +vpsubsw xmm1, xmm2, [rax] +vpsubsw xmm1, xmm2, dqword [rax] + +psubusb xmm1, xmm2 +psubusb xmm1, [rax] +psubusb xmm1, dqword [rax] +vpsubusb xmm1, xmm2 +vpsubusb xmm1, [rax] +vpsubusb xmm1, dqword [rax] +vpsubusb xmm1, xmm2, xmm3 +vpsubusb xmm1, xmm2, [rax] +vpsubusb xmm1, xmm2, dqword [rax] + +psubusw xmm1, xmm2 +psubusw xmm1, [rax] +psubusw xmm1, dqword [rax] +vpsubusw xmm1, xmm2 +vpsubusw xmm1, [rax] +vpsubusw xmm1, dqword [rax] +vpsubusw xmm1, xmm2, xmm3 +vpsubusw xmm1, xmm2, [rax] +vpsubusw xmm1, xmm2, dqword [rax] + +punpckhbw xmm1, xmm2 +punpckhbw xmm1, [rax] +punpckhbw xmm1, dqword [rax] +vpunpckhbw xmm1, xmm2 +vpunpckhbw xmm1, [rax] +vpunpckhbw xmm1, dqword [rax] +vpunpckhbw xmm1, xmm2, xmm3 +vpunpckhbw xmm1, xmm2, [rax] +vpunpckhbw xmm1, xmm2, dqword [rax] + +punpckhwd xmm1, xmm2 +punpckhwd xmm1, [rax] +punpckhwd xmm1, dqword [rax] +vpunpckhwd xmm1, xmm2 +vpunpckhwd xmm1, [rax] +vpunpckhwd xmm1, dqword [rax] +vpunpckhwd xmm1, xmm2, xmm3 +vpunpckhwd xmm1, xmm2, [rax] +vpunpckhwd xmm1, xmm2, dqword [rax] + +punpckhdq xmm1, xmm2 +punpckhdq xmm1, [rax] +punpckhdq xmm1, dqword [rax] +vpunpckhdq xmm1, xmm2 +vpunpckhdq xmm1, [rax] +vpunpckhdq xmm1, dqword [rax] +vpunpckhdq xmm1, xmm2, xmm3 +vpunpckhdq xmm1, xmm2, [rax] +vpunpckhdq xmm1, xmm2, dqword [rax] + +punpckhqdq xmm1, xmm2 +punpckhqdq xmm1, [rax] +punpckhqdq xmm1, dqword [rax] +vpunpckhqdq xmm1, xmm2 +vpunpckhqdq xmm1, [rax] +vpunpckhqdq xmm1, dqword [rax] +vpunpckhqdq xmm1, xmm2, xmm3 +vpunpckhqdq xmm1, xmm2, [rax] +vpunpckhqdq xmm1, xmm2, dqword [rax] + +punpcklbw xmm1, xmm2 +punpcklbw xmm1, [rax] +punpcklbw xmm1, dqword [rax] +vpunpcklbw xmm1, xmm2 +vpunpcklbw xmm1, [rax] +vpunpcklbw xmm1, dqword [rax] +vpunpcklbw xmm1, xmm2, xmm3 +vpunpcklbw xmm1, xmm2, [rax] +vpunpcklbw xmm1, xmm2, dqword [rax] + +punpcklwd xmm1, xmm2 +punpcklwd xmm1, [rax] +punpcklwd xmm1, dqword [rax] +vpunpcklwd xmm1, xmm2 +vpunpcklwd xmm1, [rax] +vpunpcklwd xmm1, dqword [rax] +vpunpcklwd xmm1, xmm2, xmm3 +vpunpcklwd xmm1, xmm2, [rax] +vpunpcklwd xmm1, xmm2, dqword [rax] + +punpckldq xmm1, xmm2 +punpckldq xmm1, [rax] +punpckldq xmm1, dqword [rax] +vpunpckldq xmm1, xmm2 +vpunpckldq xmm1, [rax] +vpunpckldq xmm1, dqword [rax] +vpunpckldq xmm1, xmm2, xmm3 +vpunpckldq xmm1, xmm2, [rax] +vpunpckldq xmm1, xmm2, dqword [rax] + +punpcklqdq xmm1, xmm2 +punpcklqdq xmm1, [rax] +punpcklqdq xmm1, dqword [rax] +vpunpcklqdq xmm1, xmm2 +vpunpcklqdq xmm1, [rax] +vpunpcklqdq xmm1, dqword [rax] +vpunpcklqdq xmm1, xmm2, xmm3 +vpunpcklqdq xmm1, xmm2, [rax] +vpunpcklqdq xmm1, xmm2, dqword [rax] + +pxor xmm1, xmm2 +pxor xmm1, [rax] +pxor xmm1, dqword [rax] +vpxor xmm1, xmm2 +vpxor xmm1, [rax] +vpxor xmm1, dqword [rax] +vpxor xmm1, xmm2, xmm3 +vpxor xmm1, xmm2, [rax] +vpxor xmm1, xmm2, dqword [rax] + +rcpps xmm1, xmm2 +rcpps xmm1, [rax] +rcpps xmm1, dqword [rax] +vrcpps xmm1, xmm2 +vrcpps xmm1, [rax] +vrcpps xmm1, dqword [rax] +vrcpps ymm1, ymm2 +vrcpps ymm1, [rax] +vrcpps ymm1, yword [rax] + +rcpss xmm1, xmm2 +rcpss xmm1, [rax] +rcpss xmm1, dword [rax] +vrcpss xmm1, xmm2 +vrcpss xmm1, [rax] +vrcpss xmm1, dword [rax] +vrcpss xmm1, xmm2, xmm3 +vrcpss xmm1, xmm2, [rax] +vrcpss xmm1, xmm2, dword [rax] + +rsqrtps xmm1, xmm2 +rsqrtps xmm1, [rax] +rsqrtps xmm1, dqword [rax] +vrsqrtps xmm1, xmm2 +vrsqrtps xmm1, [rax] +vrsqrtps xmm1, dqword [rax] +vrsqrtps ymm1, ymm2 +vrsqrtps ymm1, [rax] +vrsqrtps ymm1, yword [rax] + +rsqrtss xmm1, xmm2 +rsqrtss xmm1, [rax] +rsqrtss xmm1, dword [rax] +vrsqrtss xmm1, xmm2 +vrsqrtss xmm1, [rax] +vrsqrtss xmm1, dword [rax] +vrsqrtss xmm1, xmm2, xmm3 +vrsqrtss xmm1, xmm2, [rax] +vrsqrtss xmm1, xmm2, dword [rax] + +roundpd xmm1, xmm2, 5 +roundpd xmm1, [rax], byte 5 +roundpd xmm1, dqword [rax], 5 +vroundpd xmm1, xmm2, 5 +vroundpd xmm1, [rax], byte 5 +vroundpd xmm1, dqword [rax], 5 +vroundpd ymm1, ymm2, 5 +vroundpd ymm1, [rax], byte 5 +vroundpd ymm1, yword [rax], 5 + +roundps xmm1, xmm2, 5 +roundps xmm1, [rax], byte 5 +roundps xmm1, dqword [rax], 5 +vroundps xmm1, xmm2, 5 +vroundps xmm1, [rax], byte 5 +vroundps xmm1, dqword [rax], 5 +vroundps ymm1, ymm2, 5 +vroundps ymm1, [rax], byte 5 +vroundps ymm1, yword [rax], 5 + +roundsd xmm1, xmm2, 5 +roundsd xmm1, [rax], byte 5 +roundsd xmm1, qword [rax], 5 +vroundsd xmm1, xmm2, 5 +vroundsd xmm1, [rax], byte 5 +vroundsd xmm1, qword [rax], 5 +vroundsd xmm1, xmm2, xmm3, 5 +vroundsd xmm1, xmm2, [rax], byte 5 +vroundsd xmm1, xmm2, qword [rax], 5 + +roundss xmm1, xmm2, 5 +roundss xmm1, [rax], byte 5 +roundss xmm1, dword [rax], 5 +vroundss xmm1, xmm2, 5 +vroundss xmm1, [rax], byte 5 +vroundss xmm1, dword [rax], 5 +vroundss xmm1, xmm2, xmm3, 5 +vroundss xmm1, xmm2, [rax], byte 5 +vroundss xmm1, xmm2, dword [rax], 5 + +shufpd xmm1, xmm2, 5 +shufpd xmm1, [rax], byte 5 +shufpd xmm1, dqword [rax], 5 +vshufpd xmm1, xmm2, 5 +vshufpd xmm1, [rax], byte 5 +vshufpd xmm1, dqword [rax], 5 +vshufpd xmm1, xmm2, xmm3, 5 +vshufpd xmm1, xmm2, [rax], byte 5 +vshufpd xmm1, xmm2, dqword [rax], 5 +vshufpd ymm1, ymm2, ymm3, 5 +vshufpd ymm1, ymm2, [rax], byte 5 +vshufpd ymm1, ymm2, yword [rax], 5 + +shufps xmm1, xmm2, 5 +shufps xmm1, [rax], byte 5 +shufps xmm1, dqword [rax], 5 +vshufps xmm1, xmm2, 5 +vshufps xmm1, [rax], byte 5 +vshufps xmm1, dqword [rax], 5 +vshufps xmm1, xmm2, xmm3, 5 +vshufps xmm1, xmm2, [rax], byte 5 +vshufps xmm1, xmm2, dqword [rax], 5 +vshufps ymm1, ymm2, ymm3, 5 +vshufps ymm1, ymm2, [rax], byte 5 +vshufps ymm1, ymm2, yword [rax], 5 + +sqrtpd xmm1, xmm2 +sqrtpd xmm1, [rax] +sqrtpd xmm1, dqword [rax] +vsqrtpd xmm1, xmm2 +vsqrtpd xmm1, [rax] +vsqrtpd xmm1, dqword [rax] +vsqrtpd ymm1, ymm2 +vsqrtpd ymm1, [rax] +vsqrtpd ymm1, yword [rax] + +sqrtps xmm1, xmm2 +sqrtps xmm1, [rax] +sqrtps xmm1, dqword [rax] +vsqrtps xmm1, xmm2 +vsqrtps xmm1, [rax] +vsqrtps xmm1, dqword [rax] +vsqrtps ymm1, ymm2 +vsqrtps ymm1, [rax] +vsqrtps ymm1, yword [rax] + +sqrtsd xmm1, xmm2 +sqrtsd xmm1, [rax] +sqrtsd xmm1, qword [rax] +vsqrtsd xmm1, xmm2 +vsqrtsd xmm1, [rax] +vsqrtsd xmm1, qword [rax] +vsqrtsd xmm1, xmm2, xmm3 +vsqrtsd xmm1, xmm2, [rax] +vsqrtsd xmm1, xmm2, qword [rax] + +sqrtss xmm1, xmm2 +sqrtss xmm1, [rax] +sqrtss xmm1, dword [rax] +vsqrtss xmm1, xmm2 +vsqrtss xmm1, [rax] +vsqrtss xmm1, dword [rax] +vsqrtss xmm1, xmm2, xmm3 +vsqrtss xmm1, xmm2, [rax] +vsqrtss xmm1, xmm2, dword [rax] + +stmxcsr [rax] +stmxcsr dword [rax] +vstmxcsr [rax] +vstmxcsr dword [rax] + +subpd xmm1, xmm2 +subpd xmm1, [rax] +subpd xmm1, dqword [rax] +vsubpd xmm1, xmm2 +vsubpd xmm1, [rax] +vsubpd xmm1, dqword [rax] +vsubpd xmm1, xmm2, xmm3 +vsubpd xmm1, xmm2, [rax] +vsubpd xmm1, xmm2, dqword [rax] +vsubpd ymm1, ymm2, ymm3 +vsubpd ymm1, ymm2, [rax] +vsubpd ymm1, ymm2, yword [rax] + +subps xmm1, xmm2 +subps xmm1, [rax] +subps xmm1, dqword [rax] +vsubps xmm1, xmm2 +vsubps xmm1, [rax] +vsubps xmm1, dqword [rax] +vsubps xmm1, xmm2, xmm3 +vsubps xmm1, xmm2, [rax] +vsubps xmm1, xmm2, dqword [rax] +vsubps ymm1, ymm2, ymm3 +vsubps ymm1, ymm2, [rax] +vsubps ymm1, ymm2, yword [rax] + +subsd xmm1, xmm2 +subsd xmm1, [rax] +subsd xmm1, qword [rax] +vsubsd xmm1, xmm2 +vsubsd xmm1, [rax] +vsubsd xmm1, qword [rax] +vsubsd xmm1, xmm2, xmm3 +vsubsd xmm1, xmm2, [rax] +vsubsd xmm1, xmm2, qword [rax] + +subss xmm1, xmm2 +subss xmm1, [rax] +subss xmm1, dword [rax] +vsubss xmm1, xmm2 +vsubss xmm1, [rax] +vsubss xmm1, dword [rax] +vsubss xmm1, xmm2, xmm3 +vsubss xmm1, xmm2, [rax] +vsubss xmm1, xmm2, dword [rax] + +ucomisd xmm1, xmm2 +ucomisd xmm1, [rax] +ucomisd xmm1, qword [rax] +vucomisd xmm1, xmm2 +vucomisd xmm1, [rax] +vucomisd xmm1, qword [rax] + +ucomiss xmm1, xmm2 +ucomiss xmm1, [rax] +ucomiss xmm1, dword [rax] +vucomiss xmm1, xmm2 +vucomiss xmm1, [rax] +vucomiss xmm1, dword [rax] + +unpckhpd xmm1, xmm2 +unpckhpd xmm1, [rax] +unpckhpd xmm1, dqword [rax] +vunpckhpd xmm1, xmm2 +vunpckhpd xmm1, [rax] +vunpckhpd xmm1, dqword [rax] +vunpckhpd xmm1, xmm2, xmm3 +vunpckhpd xmm1, xmm2, [rax] +vunpckhpd xmm1, xmm2, dqword [rax] +vunpckhpd ymm1, ymm2, ymm3 +vunpckhpd ymm1, ymm2, [rax] +vunpckhpd ymm1, ymm2, yword [rax] + +unpckhps xmm1, xmm2 +unpckhps xmm1, [rax] +unpckhps xmm1, dqword [rax] +vunpckhps xmm1, xmm2 +vunpckhps xmm1, [rax] +vunpckhps xmm1, dqword [rax] +vunpckhps xmm1, xmm2, xmm3 +vunpckhps xmm1, xmm2, [rax] +vunpckhps xmm1, xmm2, dqword [rax] +vunpckhps ymm1, ymm2, ymm3 +vunpckhps ymm1, ymm2, [rax] +vunpckhps ymm1, ymm2, yword [rax] + +unpcklpd xmm1, xmm2 +unpcklpd xmm1, [rax] +unpcklpd xmm1, dqword [rax] +vunpcklpd xmm1, xmm2 +vunpcklpd xmm1, [rax] +vunpcklpd xmm1, dqword [rax] +vunpcklpd xmm1, xmm2, xmm3 +vunpcklpd xmm1, xmm2, [rax] +vunpcklpd xmm1, xmm2, dqword [rax] +vunpcklpd ymm1, ymm2, ymm3 +vunpcklpd ymm1, ymm2, [rax] +vunpcklpd ymm1, ymm2, yword [rax] + +unpcklps xmm1, xmm2 +unpcklps xmm1, [rax] +unpcklps xmm1, dqword [rax] +vunpcklps xmm1, xmm2 +vunpcklps xmm1, [rax] +vunpcklps xmm1, dqword [rax] +vunpcklps xmm1, xmm2, xmm3 +vunpcklps xmm1, xmm2, [rax] +vunpcklps xmm1, xmm2, dqword [rax] +vunpcklps ymm1, ymm2, ymm3 +vunpcklps ymm1, ymm2, [rax] +vunpcklps ymm1, ymm2, yword [rax] + +xorpd xmm1, xmm2 +xorpd xmm1, [rax] +xorpd xmm1, dqword [rax] +vxorpd xmm1, xmm2 +vxorpd xmm1, [rax] +vxorpd xmm1, dqword [rax] +vxorpd xmm1, xmm2, xmm3 +vxorpd xmm1, xmm2, [rax] +vxorpd xmm1, xmm2, dqword [rax] +vxorpd ymm1, ymm2, ymm3 +vxorpd ymm1, ymm2, [rax] +vxorpd ymm1, ymm2, yword [rax] + +xorps xmm1, xmm2 +xorps xmm1, [rax] +xorps xmm1, dqword [rax] +vxorps xmm1, xmm2 +vxorps xmm1, [rax] +vxorps xmm1, dqword [rax] +vxorps xmm1, xmm2, xmm3 +vxorps xmm1, xmm2, [rax] +vxorps xmm1, xmm2, dqword [rax] +vxorps ymm1, ymm2, ymm3 +vxorps ymm1, ymm2, [rax] +vxorps ymm1, ymm2, yword [rax] + +vzeroall + +vzeroupper + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx.hex new file mode 100644 index 0000000000..57eb96f55b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx.hex @@ -0,0 +1,10332 @@ +66 +0f +58 +ca +66 +0f +58 +08 +66 +0f +58 +08 +66 +45 +0f +58 +d4 +66 +46 +0f +58 +14 +b8 +66 +47 +0f +58 +14 +be +c5 +f1 +58 +ca +c5 +f1 +58 +08 +c5 +f1 +58 +08 +c4 +41 +29 +58 +d4 +c4 +21 +29 +58 +14 +b8 +c4 +01 +29 +58 +14 +be +c5 +e9 +58 +cb +c5 +e9 +58 +08 +c5 +e9 +58 +08 +c4 +41 +19 +58 +d5 +c4 +21 +19 +58 +14 +b8 +c4 +01 +19 +58 +14 +be +c5 +ed +58 +cb +c5 +ed +58 +08 +c5 +ed +58 +08 +c4 +41 +1d +58 +d5 +c4 +21 +1d +58 +14 +b8 +c4 +01 +1d +58 +14 +be +0f +58 +ca +0f +58 +08 +0f +58 +08 +c5 +f0 +58 +ca +c5 +f0 +58 +08 +c5 +f0 +58 +08 +c5 +e8 +58 +cb +c5 +e8 +58 +08 +c5 +e8 +58 +08 +c5 +ec +58 +cb +c5 +ec +58 +08 +c5 +ec +58 +08 +f2 +0f +58 +ca +f2 +0f +58 +08 +f2 +0f +58 +08 +c5 +f3 +58 +ca +c5 +f3 +58 +08 +c5 +f3 +58 +08 +c5 +eb +58 +cb +c5 +eb +58 +08 +c5 +eb +58 +08 +f3 +0f +58 +ca +f3 +0f +58 +08 +f3 +0f +58 +08 +c5 +f2 +58 +ca +c5 +f2 +58 +08 +c5 +f2 +58 +08 +c5 +ea +58 +cb +c5 +ea +58 +08 +c5 +ea +58 +08 +66 +0f +d0 +ca +66 +0f +d0 +08 +66 +0f +d0 +08 +c5 +f1 +d0 +ca +c5 +f1 +d0 +08 +c5 +f1 +d0 +08 +c5 +e9 +d0 +cb +c5 +e9 +d0 +08 +c5 +e9 +d0 +08 +c5 +ed +d0 +cb +c5 +ed +d0 +08 +c5 +ed +d0 +08 +f2 +0f +d0 +ca +f2 +0f +d0 +08 +f2 +0f +d0 +08 +c5 +f3 +d0 +ca +c5 +f3 +d0 +08 +c5 +f3 +d0 +08 +c5 +eb +d0 +cb +c5 +eb +d0 +08 +c5 +eb +d0 +08 +c5 +ef +d0 +cb +c5 +ef +d0 +08 +c5 +ef +d0 +08 +66 +0f +54 +ca +66 +0f +54 +08 +66 +0f +54 +08 +c5 +f1 +54 +ca +c5 +f1 +54 +08 +c5 +f1 +54 +08 +c5 +e9 +54 +cb +c5 +e9 +54 +08 +c5 +e9 +54 +08 +c5 +ed +54 +cb +c5 +ed +54 +08 +c5 +ed +54 +08 +0f +54 +ca +0f +54 +08 +0f +54 +08 +c5 +f0 +54 +ca +c5 +f0 +54 +08 +c5 +f0 +54 +08 +c5 +e8 +54 +cb +c5 +e8 +54 +08 +c5 +e8 +54 +08 +c5 +ec +54 +cb +c5 +ec +54 +08 +c5 +ec +54 +08 +66 +0f +55 +ca +66 +0f +55 +08 +66 +0f +55 +08 +c5 +f1 +55 +ca +c5 +f1 +55 +08 +c5 +f1 +55 +08 +c5 +e9 +55 +cb +c5 +e9 +55 +08 +c5 +e9 +55 +08 +c5 +ed +55 +cb +c5 +ed +55 +08 +c5 +ed +55 +08 +0f +55 +ca +0f +55 +08 +0f +55 +08 +c5 +f0 +55 +ca +c5 +f0 +55 +08 +c5 +f0 +55 +08 +c5 +e8 +55 +cb +c5 +e8 +55 +08 +c5 +e8 +55 +08 +c5 +ec +55 +cb +c5 +ec +55 +08 +c5 +ec +55 +08 +66 +0f +3a +0d +ca +05 +66 +0f +3a +0d +08 +05 +66 +0f +3a +0d +08 +05 +c4 +e3 +71 +0d +ca +05 +c4 +e3 +71 +0d +08 +05 +c4 +e3 +71 +0d +08 +05 +c4 +e3 +69 +0d +cb +05 +c4 +e3 +69 +0d +08 +05 +c4 +e3 +69 +0d +08 +05 +c4 +e3 +6d +0d +cb +05 +c4 +e3 +6d +0d +08 +05 +c4 +e3 +6d +0d +08 +05 +66 +0f +3a +0c +ca +05 +66 +0f +3a +0c +08 +05 +66 +0f +3a +0c +08 +05 +c4 +e3 +71 +0c +ca +05 +c4 +e3 +71 +0c +08 +05 +c4 +e3 +71 +0c +08 +05 +c4 +e3 +69 +0c +cb +05 +c4 +e3 +69 +0c +08 +05 +c4 +e3 +69 +0c +08 +05 +c4 +e3 +6d +0c +cb +05 +c4 +e3 +6d +0c +08 +05 +c4 +e3 +6d +0c +08 +05 +66 +0f +38 +15 +cb +66 +0f +38 +15 +08 +66 +0f +38 +15 +08 +66 +0f +38 +15 +cb +66 +0f +38 +15 +08 +66 +0f +38 +15 +08 +c4 +e3 +69 +4b +cb +40 +c4 +e3 +69 +4b +08 +40 +c4 +e3 +69 +4b +08 +40 +c4 +e3 +6d +4b +cb +40 +c4 +e3 +6d +4b +08 +40 +c4 +e3 +6d +4b +08 +40 +66 +0f +38 +14 +cb +66 +0f +38 +14 +08 +66 +0f +38 +14 +08 +66 +0f +38 +14 +cb +66 +0f +38 +14 +08 +66 +0f +38 +14 +08 +c4 +e3 +69 +4a +cb +40 +c4 +e3 +69 +4a +08 +40 +c4 +e3 +69 +4a +08 +40 +c4 +e3 +6d +4a +cb +40 +c4 +e3 +6d +4a +08 +40 +c4 +e3 +6d +4a +08 +40 +c4 +e2 +79 +18 +08 +c4 +e2 +79 +18 +08 +c4 +e2 +7d +18 +08 +c4 +e2 +7d +18 +08 +c4 +e2 +7d +19 +08 +c4 +e2 +7d +19 +08 +c4 +e2 +7d +1a +08 +c4 +e2 +7d +1a +08 +66 +0f +c2 +ca +05 +66 +0f +c2 +08 +05 +66 +0f +c2 +08 +05 +c5 +f1 +c2 +ca +05 +c5 +f1 +c2 +08 +05 +c5 +f1 +c2 +08 +05 +c5 +e9 +c2 +cb +05 +c5 +e9 +c2 +08 +05 +c5 +e9 +c2 +08 +05 +c5 +ed +c2 +cb +05 +c5 +ed +c2 +08 +05 +c5 +ed +c2 +08 +05 +0f +c2 +ca +05 +0f +c2 +08 +05 +0f +c2 +08 +05 +c5 +f0 +c2 +ca +05 +c5 +f0 +c2 +08 +05 +c5 +f0 +c2 +08 +05 +c5 +e8 +c2 +cb +05 +c5 +e8 +c2 +08 +05 +c5 +e8 +c2 +08 +05 +c5 +ec +c2 +cb +05 +c5 +ec +c2 +08 +05 +c5 +ec +c2 +08 +05 +f2 +0f +c2 +ca +05 +f2 +0f +c2 +08 +05 +f2 +0f +c2 +08 +05 +c5 +f3 +c2 +ca +05 +c5 +f3 +c2 +08 +05 +c5 +f3 +c2 +08 +05 +c5 +eb +c2 +cb +05 +c5 +eb +c2 +08 +05 +c5 +eb +c2 +08 +05 +f3 +0f +c2 +ca +05 +f3 +0f +c2 +08 +05 +f3 +0f +c2 +08 +05 +c5 +f2 +c2 +ca +05 +c5 +f2 +c2 +08 +05 +c5 +f2 +c2 +08 +05 +c5 +ea +c2 +cb +05 +c5 +ea +c2 +08 +05 +c5 +ea +c2 +08 +05 +66 +0f +2f +ca +66 +0f +2f +08 +66 +0f +2f +08 +c5 +f9 +2f +ca +c5 +f9 +2f +08 +c5 +f9 +2f +08 +0f +2f +ca +0f +2f +08 +0f +2f +08 +c5 +f8 +2f +ca +c5 +f8 +2f +08 +c5 +f8 +2f +08 +f3 +0f +e6 +ca +f3 +0f +e6 +08 +f3 +0f +e6 +08 +c5 +fa +e6 +ca +c5 +fa +e6 +08 +c5 +fa +e6 +08 +c5 +fe +e6 +ca +c5 +fe +e6 +08 +c5 +fe +e6 +08 +0f +5b +ca +0f +5b +08 +0f +5b +08 +c5 +f8 +5b +ca +c5 +f8 +5b +08 +c5 +f8 +5b +08 +c5 +fc +5b +ca +c5 +fc +5b +08 +c5 +fc +5b +08 +f2 +0f +e6 +ca +f2 +0f +e6 +08 +f2 +0f +e6 +08 +c5 +fb +e6 +ca +c5 +fb +e6 +08 +c5 +ff +e6 +ca +c5 +ff +e6 +08 +66 +0f +5a +ca +66 +0f +5a +08 +66 +0f +5a +08 +c5 +f9 +5a +ca +c5 +f9 +5a +08 +c5 +fd +5a +ca +c5 +fd +5a +08 +66 +0f +5b +ca +66 +0f +5b +08 +66 +0f +5b +08 +c5 +f9 +5b +ca +c5 +f9 +5b +08 +c5 +f9 +5b +08 +c5 +fd +5b +ca +c5 +fd +5b +08 +c5 +fd +5b +08 +0f +5a +ca +0f +5a +08 +0f +5a +08 +c5 +f8 +5a +ca +c5 +f8 +5a +08 +c5 +f8 +5a +08 +c5 +fc +5a +ca +c5 +fc +5a +08 +c5 +fc +5a +08 +f2 +0f +2d +c2 +f2 +0f +2d +00 +f2 +0f +2d +00 +c5 +fb +2d +c2 +c5 +fb +2d +00 +c5 +fb +2d +00 +f2 +48 +0f +2d +c2 +f2 +48 +0f +2d +00 +f2 +48 +0f +2d +00 +c4 +e1 +fb +2d +c2 +c4 +e1 +fb +2d +00 +c4 +e1 +fb +2d +00 +f2 +0f +5a +ca +f2 +0f +5a +08 +f2 +0f +5a +08 +c5 +f3 +5a +ca +c5 +f3 +5a +08 +c5 +f3 +5a +08 +c5 +eb +5a +cb +c5 +eb +5a +08 +c5 +eb +5a +08 +f2 +0f +2a +c8 +f2 +0f +2a +08 +c5 +f3 +2a +c8 +c5 +f3 +2a +08 +c5 +eb +2a +c8 +c5 +eb +2a +08 +f2 +48 +0f +2a +c8 +f2 +48 +0f +2a +08 +c4 +e1 +f3 +2a +c8 +c4 +e1 +f3 +2a +08 +c4 +e1 +eb +2a +c8 +c4 +e1 +eb +2a +08 +f3 +0f +2a +c8 +f3 +0f +2a +08 +c5 +f2 +2a +c8 +c5 +f2 +2a +08 +c5 +ea +2a +c8 +c5 +ea +2a +08 +f3 +48 +0f +2a +c8 +f3 +48 +0f +2a +08 +c4 +e1 +f2 +2a +c8 +c4 +e1 +f2 +2a +08 +c4 +e1 +ea +2a +c8 +c4 +e1 +ea +2a +08 +f3 +0f +5a +ca +f3 +0f +5a +08 +f3 +0f +5a +08 +c5 +f2 +5a +ca +c5 +f2 +5a +08 +c5 +f2 +5a +08 +c5 +ea +5a +cb +c5 +ea +5a +08 +c5 +ea +5a +08 +f3 +0f +2d +c2 +f3 +0f +2d +00 +f3 +0f +2d +00 +c5 +fa +2d +c2 +c5 +fa +2d +00 +c5 +fa +2d +00 +f3 +48 +0f +2d +c2 +f3 +48 +0f +2d +00 +f3 +48 +0f +2d +00 +c4 +e1 +fa +2d +c2 +c4 +e1 +fa +2d +00 +c4 +e1 +fa +2d +00 +66 +0f +e6 +ca +66 +0f +e6 +08 +66 +0f +e6 +08 +c5 +f9 +e6 +ca +c5 +f9 +e6 +08 +c5 +fd +e6 +ca +c5 +fd +e6 +08 +f3 +0f +5b +ca +f3 +0f +5b +08 +f3 +0f +5b +08 +c5 +fa +5b +ca +c5 +fa +5b +08 +c5 +fa +5b +08 +c5 +fe +5b +ca +c5 +fe +5b +08 +c5 +fe +5b +08 +f2 +0f +2c +c2 +f2 +0f +2c +00 +f2 +0f +2c +00 +c5 +fb +2c +c2 +c5 +fb +2c +00 +c5 +fb +2c +00 +f2 +48 +0f +2c +c2 +f2 +48 +0f +2c +00 +f2 +48 +0f +2c +00 +c4 +e1 +fb +2c +c2 +c4 +e1 +fb +2c +00 +c4 +e1 +fb +2c +00 +f3 +0f +2c +c2 +f3 +0f +2c +00 +f3 +0f +2c +00 +c5 +fa +2c +c2 +c5 +fa +2c +00 +c5 +fa +2c +00 +f3 +48 +0f +2c +c2 +f3 +48 +0f +2c +00 +f3 +48 +0f +2c +00 +c4 +e1 +fa +2c +c2 +c4 +e1 +fa +2c +00 +c4 +e1 +fa +2c +00 +66 +0f +5e +ca +66 +0f +5e +08 +66 +0f +5e +08 +c5 +f1 +5e +ca +c5 +f1 +5e +08 +c5 +f1 +5e +08 +c5 +e9 +5e +cb +c5 +e9 +5e +08 +c5 +e9 +5e +08 +c5 +ed +5e +cb +c5 +ed +5e +08 +c5 +ed +5e +08 +0f +5e +ca +0f +5e +08 +0f +5e +08 +c5 +f0 +5e +ca +c5 +f0 +5e +08 +c5 +f0 +5e +08 +c5 +e8 +5e +cb +c5 +e8 +5e +08 +c5 +e8 +5e +08 +c5 +ec +5e +cb +c5 +ec +5e +08 +c5 +ec +5e +08 +f2 +0f +5e +ca +f2 +0f +5e +08 +f2 +0f +5e +08 +c5 +f3 +5e +ca +c5 +f3 +5e +08 +c5 +f3 +5e +08 +c5 +eb +5e +cb +c5 +eb +5e +08 +c5 +eb +5e +08 +f3 +0f +5e +ca +f3 +0f +5e +08 +f3 +0f +5e +08 +c5 +f2 +5e +ca +c5 +f2 +5e +08 +c5 +f2 +5e +08 +c5 +ea +5e +cb +c5 +ea +5e +08 +c5 +ea +5e +08 +66 +0f +3a +41 +ca +05 +66 +0f +3a +41 +08 +05 +66 +0f +3a +41 +08 +05 +c4 +e3 +71 +41 +ca +05 +c4 +e3 +71 +41 +08 +05 +c4 +e3 +71 +41 +08 +05 +c4 +e3 +69 +41 +cb +05 +c4 +e3 +69 +41 +08 +05 +c4 +e3 +69 +41 +08 +05 +66 +0f +3a +40 +ca +05 +66 +0f +3a +40 +08 +05 +66 +0f +3a +40 +08 +05 +c4 +e3 +71 +40 +ca +05 +c4 +e3 +71 +40 +08 +05 +c4 +e3 +71 +40 +08 +05 +c4 +e3 +69 +40 +cb +05 +c4 +e3 +69 +40 +08 +05 +c4 +e3 +69 +40 +08 +05 +c4 +e3 +6d +40 +cb +05 +c4 +e3 +6d +40 +08 +05 +c4 +e3 +6d +40 +08 +05 +c4 +e3 +7d +19 +d1 +05 +c4 +e3 +7d +19 +10 +05 +c4 +e3 +7d +19 +10 +05 +66 +0f +3a +17 +c8 +05 +66 +48 +0f +3a +17 +c8 +05 +66 +0f +3a +17 +08 +05 +66 +0f +3a +17 +08 +05 +c4 +e3 +79 +17 +c8 +05 +c4 +e3 +f9 +17 +c8 +05 +c4 +e3 +79 +17 +08 +05 +c4 +e3 +79 +17 +08 +05 +66 +0f +7c +ca +66 +0f +7c +08 +66 +0f +7c +08 +c5 +f1 +7c +ca +c5 +f1 +7c +08 +c5 +f1 +7c +08 +c5 +e9 +7c +cb +c5 +e9 +7c +08 +c5 +e9 +7c +08 +c5 +ed +7c +cb +c5 +ed +7c +08 +c5 +ed +7c +08 +f2 +0f +7c +ca +f2 +0f +7c +08 +f2 +0f +7c +08 +c5 +f3 +7c +ca +c5 +f3 +7c +08 +c5 +f3 +7c +08 +c5 +eb +7c +cb +c5 +eb +7c +08 +c5 +eb +7c +08 +c5 +ef +7c +cb +c5 +ef +7c +08 +c5 +ef +7c +08 +66 +0f +7d +ca +66 +0f +7d +08 +66 +0f +7d +08 +c5 +f1 +7d +ca +c5 +f1 +7d +08 +c5 +f1 +7d +08 +c5 +e9 +7d +cb +c5 +e9 +7d +08 +c5 +e9 +7d +08 +c5 +ed +7d +cb +c5 +ed +7d +08 +c5 +ed +7d +08 +f2 +0f +7d +ca +f2 +0f +7d +08 +f2 +0f +7d +08 +c5 +f3 +7d +ca +c5 +f3 +7d +08 +c5 +f3 +7d +08 +c5 +eb +7d +cb +c5 +eb +7d +08 +c5 +eb +7d +08 +c5 +ef +7d +cb +c5 +ef +7d +08 +c5 +ef +7d +08 +c4 +e3 +6d +18 +cb +05 +c4 +e3 +6d +18 +08 +05 +c4 +e3 +6d +18 +08 +05 +66 +0f +3a +21 +ca +05 +66 +0f +3a +21 +08 +05 +66 +0f +3a +21 +08 +05 +c4 +e3 +71 +21 +ca +05 +c4 +e3 +71 +21 +08 +05 +c4 +e3 +71 +21 +08 +05 +c4 +e3 +69 +21 +cb +05 +c4 +e3 +69 +21 +08 +05 +c4 +e3 +69 +21 +08 +05 +f2 +0f +f0 +08 +f2 +0f +f0 +08 +c5 +fb +f0 +08 +c5 +fb +f0 +08 +c5 +ff +f0 +08 +c5 +ff +f0 +08 +0f +ae +10 +0f +ae +10 +c5 +f8 +ae +10 +c5 +f8 +ae +10 +66 +0f +f7 +ca +c5 +f9 +f7 +ca +c4 +e2 +69 +2c +08 +c4 +e2 +69 +2c +08 +c4 +e2 +6d +2c +08 +c4 +e2 +6d +2c +08 +c4 +e2 +69 +2e +18 +c4 +e2 +69 +2e +18 +c4 +e2 +6d +2e +18 +c4 +e2 +6d +2e +18 +c4 +e2 +69 +2d +08 +c4 +e2 +69 +2d +08 +c4 +e2 +6d +2d +08 +c4 +e2 +6d +2d +08 +c4 +e2 +69 +2f +18 +c4 +e2 +69 +2f +18 +c4 +e2 +6d +2f +18 +c4 +e2 +6d +2f +18 +66 +0f +5f +ca +66 +0f +5f +08 +66 +0f +5f +08 +c5 +f1 +5f +ca +c5 +f1 +5f +08 +c5 +f1 +5f +08 +c5 +e9 +5f +cb +c5 +e9 +5f +08 +c5 +e9 +5f +08 +c5 +ed +5f +cb +c5 +ed +5f +08 +c5 +ed +5f +08 +0f +5f +ca +0f +5f +08 +0f +5f +08 +c5 +f0 +5f +ca +c5 +f0 +5f +08 +c5 +f0 +5f +08 +c5 +e8 +5f +cb +c5 +e8 +5f +08 +c5 +e8 +5f +08 +c5 +ec +5f +cb +c5 +ec +5f +08 +c5 +ec +5f +08 +f2 +0f +5f +ca +f2 +0f +5f +08 +f2 +0f +5f +08 +c5 +f3 +5f +ca +c5 +f3 +5f +08 +c5 +f3 +5f +08 +c5 +eb +5f +cb +c5 +eb +5f +08 +c5 +eb +5f +08 +f3 +0f +5f +ca +f3 +0f +5f +08 +f3 +0f +5f +08 +c5 +f2 +5f +ca +c5 +f2 +5f +08 +c5 +f2 +5f +08 +c5 +ea +5f +cb +c5 +ea +5f +08 +c5 +ea +5f +08 +66 +0f +5d +ca +66 +0f +5d +08 +66 +0f +5d +08 +c5 +f1 +5d +ca +c5 +f1 +5d +08 +c5 +f1 +5d +08 +c5 +e9 +5d +cb +c5 +e9 +5d +08 +c5 +e9 +5d +08 +c5 +ed +5d +cb +c5 +ed +5d +08 +c5 +ed +5d +08 +0f +5d +ca +0f +5d +08 +0f +5d +08 +c5 +f0 +5d +ca +c5 +f0 +5d +08 +c5 +f0 +5d +08 +c5 +e8 +5d +cb +c5 +e8 +5d +08 +c5 +e8 +5d +08 +c5 +ec +5d +cb +c5 +ec +5d +08 +c5 +ec +5d +08 +f2 +0f +5d +ca +f2 +0f +5d +08 +f2 +0f +5d +08 +c5 +f3 +5d +ca +c5 +f3 +5d +08 +c5 +f3 +5d +08 +c5 +eb +5d +cb +c5 +eb +5d +08 +c5 +eb +5d +08 +f3 +0f +5d +ca +f3 +0f +5d +08 +f3 +0f +5d +08 +c5 +f2 +5d +ca +c5 +f2 +5d +08 +c5 +f2 +5d +08 +c5 +ea +5d +cb +c5 +ea +5d +08 +c5 +ea +5d +08 +66 +0f +28 +ca +66 +0f +28 +08 +66 +0f +28 +08 +c5 +f9 +28 +ca +c5 +f9 +28 +08 +c5 +f9 +28 +08 +66 +0f +29 +10 +66 +0f +29 +10 +c5 +f9 +29 +10 +c5 +f9 +29 +10 +c5 +fd +28 +ca +c5 +fd +28 +08 +c5 +fd +28 +08 +c5 +fd +29 +10 +c5 +fd +29 +10 +0f +28 +ca +0f +28 +08 +0f +28 +08 +c5 +f8 +28 +ca +c5 +f8 +28 +08 +c5 +f8 +28 +08 +0f +29 +10 +0f +29 +10 +c5 +f8 +29 +10 +c5 +f8 +29 +10 +c5 +fc +28 +ca +c5 +fc +28 +08 +c5 +fc +28 +08 +c5 +fc +29 +10 +c5 +fc +29 +10 +66 +0f +6e +c8 +66 +0f +6e +08 +66 +0f +6e +08 +c5 +f9 +6e +c8 +c5 +f9 +6e +08 +c5 +f9 +6e +08 +66 +0f +7e +d0 +66 +0f +7e +10 +66 +0f +7e +10 +c5 +f9 +7e +d0 +c5 +f9 +7e +10 +c5 +f9 +7e +10 +66 +48 +0f +6e +c8 +f3 +0f +7e +08 +f3 +0f +7e +08 +c4 +e1 +f9 +6e +c8 +c5 +fa +7e +08 +c5 +fa +7e +08 +66 +48 +0f +7e +d0 +66 +0f +d6 +10 +66 +0f +d6 +10 +c4 +e1 +f9 +7e +d0 +c5 +f9 +d6 +10 +c5 +f9 +d6 +10 +f3 +0f +7e +ca +f3 +0f +7e +08 +f3 +0f +7e +08 +c5 +fa +7e +ca +c5 +fa +7e +08 +c5 +fa +7e +08 +66 +0f +d6 +08 +66 +0f +d6 +08 +c5 +f9 +d6 +08 +c5 +f9 +d6 +08 +f2 +0f +12 +ca +f2 +0f +12 +08 +f2 +0f +12 +08 +c5 +fb +12 +ca +c5 +fb +12 +08 +c5 +fb +12 +08 +c5 +ff +12 +ca +c5 +ff +12 +08 +c5 +ff +12 +08 +66 +0f +6f +ca +66 +0f +6f +08 +66 +0f +6f +08 +66 +0f +7f +10 +66 +0f +7f +10 +c5 +f9 +6f +ca +c5 +f9 +6f +08 +c5 +f9 +6f +08 +c5 +f9 +7f +10 +c5 +f9 +7f +10 +c5 +fd +6f +ca +c5 +fd +6f +08 +c5 +fd +6f +08 +c5 +fd +7f +10 +c5 +fd +7f +10 +f3 +0f +6f +ca +f3 +0f +6f +08 +f3 +0f +6f +08 +f3 +0f +7f +10 +f3 +0f +7f +10 +c5 +fa +6f +ca +c5 +fa +6f +08 +c5 +fa +6f +08 +c5 +fa +7f +10 +c5 +fa +7f +10 +c5 +fe +6f +ca +c5 +fe +6f +08 +c5 +fe +6f +08 +c5 +fe +7f +10 +c5 +fe +7f +10 +0f +12 +ca +c5 +f0 +12 +ca +c5 +e8 +12 +cb +66 +0f +16 +08 +66 +0f +16 +08 +c5 +f1 +16 +08 +c5 +f1 +16 +08 +c5 +e9 +16 +08 +c5 +e9 +16 +08 +66 +0f +17 +10 +66 +0f +17 +10 +c5 +f9 +17 +10 +c5 +f9 +17 +10 +0f +16 +08 +0f +16 +08 +c5 +f0 +16 +08 +c5 +f0 +16 +08 +c5 +e8 +16 +08 +c5 +e8 +16 +08 +0f +17 +10 +0f +17 +10 +c5 +f8 +17 +10 +c5 +f8 +17 +10 +0f +12 +ca +c5 +f0 +12 +ca +c5 +e8 +12 +cb +66 +0f +12 +08 +66 +0f +12 +08 +c5 +f1 +12 +08 +c5 +f1 +12 +08 +c5 +e9 +12 +08 +c5 +e9 +12 +08 +66 +0f +13 +10 +66 +0f +13 +10 +c5 +f9 +13 +10 +c5 +f9 +13 +10 +0f +12 +08 +0f +12 +08 +c5 +f0 +12 +08 +c5 +f0 +12 +08 +c5 +e8 +12 +08 +c5 +e8 +12 +08 +0f +13 +10 +0f +13 +10 +c5 +f8 +13 +10 +c5 +f8 +13 +10 +66 +0f +50 +c2 +66 +48 +0f +50 +c2 +c5 +f9 +50 +c2 +c4 +e1 +f9 +50 +c2 +c5 +fd +50 +c2 +c4 +e1 +fd +50 +c2 +0f +50 +c2 +48 +0f +50 +c2 +c5 +f8 +50 +c2 +c4 +e1 +f8 +50 +c2 +c5 +fc +50 +c2 +c4 +e1 +fc +50 +c2 +66 +0f +e7 +08 +66 +0f +e7 +08 +c5 +f9 +e7 +08 +c5 +f9 +e7 +08 +c5 +fd +e7 +08 +c5 +fd +e7 +08 +66 +0f +38 +2a +08 +66 +0f +38 +2a +08 +c4 +e2 +79 +2a +08 +c4 +e2 +79 +2a +08 +66 +0f +2b +08 +66 +0f +2b +08 +c5 +f9 +2b +08 +c5 +f9 +2b +08 +c5 +fd +2b +08 +c5 +fd +2b +08 +0f +2b +08 +0f +2b +08 +c5 +f8 +2b +08 +c5 +f8 +2b +08 +c5 +fc +2b +08 +c5 +fc +2b +08 +f2 +0f +10 +ca +c5 +f3 +10 +ca +c5 +eb +10 +cb +f2 +0f +10 +08 +f2 +0f +10 +08 +c5 +fb +10 +08 +c5 +fb +10 +08 +f2 +0f +11 +10 +f2 +0f +11 +10 +c5 +fb +11 +10 +c5 +fb +11 +10 +f3 +0f +16 +ca +f3 +0f +16 +08 +f3 +0f +16 +08 +c5 +fa +16 +ca +c5 +fa +16 +08 +c5 +fa +16 +08 +c5 +fe +16 +ca +c5 +fe +16 +08 +c5 +fe +16 +08 +f3 +0f +12 +ca +f3 +0f +12 +08 +f3 +0f +12 +08 +c5 +fa +12 +ca +c5 +fa +12 +08 +c5 +fa +12 +08 +c5 +fe +12 +ca +c5 +fe +12 +08 +c5 +fe +12 +08 +f3 +0f +10 +ca +c5 +f2 +10 +ca +c5 +ea +10 +cb +f3 +0f +10 +08 +f3 +0f +10 +08 +c5 +fa +10 +08 +c5 +fa +10 +08 +f3 +0f +11 +10 +f3 +0f +11 +10 +c5 +fa +11 +10 +c5 +fa +11 +10 +66 +0f +10 +ca +66 +0f +10 +08 +66 +0f +10 +08 +c5 +f9 +10 +ca +c5 +f9 +10 +08 +c5 +f9 +10 +08 +66 +0f +11 +10 +66 +0f +11 +10 +c5 +f9 +11 +10 +c5 +f9 +11 +10 +c5 +fd +10 +ca +c5 +fd +10 +08 +c5 +fd +10 +08 +c5 +fd +11 +10 +c5 +fd +11 +10 +0f +10 +ca +0f +10 +08 +0f +10 +08 +c5 +f8 +10 +ca +c5 +f8 +10 +08 +c5 +f8 +10 +08 +0f +11 +10 +0f +11 +10 +c5 +f8 +11 +10 +c5 +f8 +11 +10 +c5 +fc +10 +ca +c5 +fc +10 +08 +c5 +fc +10 +08 +c5 +fc +11 +10 +c5 +fc +11 +10 +66 +0f +3a +42 +ca +05 +66 +0f +3a +42 +08 +05 +66 +0f +3a +42 +08 +05 +c4 +e3 +71 +42 +ca +05 +c4 +e3 +71 +42 +08 +05 +c4 +e3 +71 +42 +08 +05 +c4 +e3 +69 +42 +cb +05 +c4 +e3 +69 +42 +08 +05 +c4 +e3 +69 +42 +08 +05 +66 +0f +59 +ca +66 +0f +59 +08 +66 +0f +59 +08 +c5 +f1 +59 +ca +c5 +f1 +59 +08 +c5 +f1 +59 +08 +c5 +e9 +59 +cb +c5 +e9 +59 +08 +c5 +e9 +59 +08 +c5 +ed +59 +cb +c5 +ed +59 +08 +c5 +ed +59 +08 +0f +59 +ca +0f +59 +08 +0f +59 +08 +c5 +f0 +59 +ca +c5 +f0 +59 +08 +c5 +f0 +59 +08 +c5 +e8 +59 +cb +c5 +e8 +59 +08 +c5 +e8 +59 +08 +c5 +ec +59 +cb +c5 +ec +59 +08 +c5 +ec +59 +08 +f2 +0f +59 +ca +f2 +0f +59 +08 +f2 +0f +59 +08 +c5 +f3 +59 +ca +c5 +f3 +59 +08 +c5 +f3 +59 +08 +c5 +eb +59 +cb +c5 +eb +59 +08 +c5 +eb +59 +08 +f3 +0f +59 +ca +f3 +0f +59 +08 +f3 +0f +59 +08 +c5 +f2 +59 +ca +c5 +f2 +59 +08 +c5 +f2 +59 +08 +c5 +ea +59 +cb +c5 +ea +59 +08 +c5 +ea +59 +08 +66 +0f +56 +ca +66 +0f +56 +08 +66 +0f +56 +08 +c5 +f1 +56 +ca +c5 +f1 +56 +08 +c5 +f1 +56 +08 +c5 +e9 +56 +cb +c5 +e9 +56 +08 +c5 +e9 +56 +08 +c5 +ed +56 +cb +c5 +ed +56 +08 +c5 +ed +56 +08 +0f +56 +ca +0f +56 +08 +0f +56 +08 +c5 +f0 +56 +ca +c5 +f0 +56 +08 +c5 +f0 +56 +08 +c5 +e8 +56 +cb +c5 +e8 +56 +08 +c5 +e8 +56 +08 +c5 +ec +56 +cb +c5 +ec +56 +08 +c5 +ec +56 +08 +66 +0f +38 +1c +ca +66 +0f +38 +1c +08 +66 +0f +38 +1c +08 +c4 +e2 +79 +1c +ca +c4 +e2 +79 +1c +08 +c4 +e2 +79 +1c +08 +66 +0f +38 +1d +ca +66 +0f +38 +1d +08 +66 +0f +38 +1d +08 +c4 +e2 +79 +1d +ca +c4 +e2 +79 +1d +08 +c4 +e2 +79 +1d +08 +66 +0f +38 +1e +ca +66 +0f +38 +1e +08 +66 +0f +38 +1e +08 +c4 +e2 +79 +1e +ca +c4 +e2 +79 +1e +08 +c4 +e2 +79 +1e +08 +66 +0f +63 +ca +66 +0f +63 +08 +66 +0f +63 +08 +c5 +f1 +63 +ca +c5 +f1 +63 +08 +c5 +f1 +63 +08 +c5 +e9 +63 +cb +c5 +e9 +63 +08 +c5 +e9 +63 +08 +66 +0f +6b +ca +66 +0f +6b +08 +66 +0f +6b +08 +c5 +f1 +6b +ca +c5 +f1 +6b +08 +c5 +f1 +6b +08 +c5 +e9 +6b +cb +c5 +e9 +6b +08 +c5 +e9 +6b +08 +66 +0f +67 +ca +66 +0f +67 +08 +66 +0f +67 +08 +c5 +f1 +67 +ca +c5 +f1 +67 +08 +c5 +f1 +67 +08 +c5 +e9 +67 +cb +c5 +e9 +67 +08 +c5 +e9 +67 +08 +66 +0f +38 +2b +ca +66 +0f +38 +2b +08 +66 +0f +38 +2b +08 +c4 +e2 +71 +2b +ca +c4 +e2 +71 +2b +08 +c4 +e2 +71 +2b +08 +c4 +e2 +69 +2b +cb +c4 +e2 +69 +2b +08 +c4 +e2 +69 +2b +08 +66 +0f +fc +ca +66 +0f +fc +08 +66 +0f +fc +08 +c5 +f1 +fc +ca +c5 +f1 +fc +08 +c5 +f1 +fc +08 +c5 +e9 +fc +cb +c5 +e9 +fc +08 +c5 +e9 +fc +08 +66 +0f +fd +ca +66 +0f +fd +08 +66 +0f +fd +08 +c5 +f1 +fd +ca +c5 +f1 +fd +08 +c5 +f1 +fd +08 +c5 +e9 +fd +cb +c5 +e9 +fd +08 +c5 +e9 +fd +08 +66 +0f +fe +ca +66 +0f +fe +08 +66 +0f +fe +08 +c5 +f1 +fe +ca +c5 +f1 +fe +08 +c5 +f1 +fe +08 +c5 +e9 +fe +cb +c5 +e9 +fe +08 +c5 +e9 +fe +08 +66 +0f +d4 +ca +66 +0f +d4 +08 +66 +0f +d4 +08 +c5 +f1 +d4 +ca +c5 +f1 +d4 +08 +c5 +f1 +d4 +08 +c5 +e9 +d4 +cb +c5 +e9 +d4 +08 +c5 +e9 +d4 +08 +66 +0f +ec +ca +66 +0f +ec +08 +66 +0f +ec +08 +c5 +f1 +ec +ca +c5 +f1 +ec +08 +c5 +f1 +ec +08 +c5 +e9 +ec +cb +c5 +e9 +ec +08 +c5 +e9 +ec +08 +66 +0f +ed +ca +66 +0f +ed +08 +66 +0f +ed +08 +c5 +f1 +ed +ca +c5 +f1 +ed +08 +c5 +f1 +ed +08 +c5 +e9 +ed +cb +c5 +e9 +ed +08 +c5 +e9 +ed +08 +66 +0f +dc +ca +66 +0f +dc +08 +66 +0f +dc +08 +c5 +f1 +dc +ca +c5 +f1 +dc +08 +c5 +f1 +dc +08 +c5 +e9 +dc +cb +c5 +e9 +dc +08 +c5 +e9 +dc +08 +66 +0f +dd +ca +66 +0f +dd +08 +66 +0f +dd +08 +c5 +f1 +dd +ca +c5 +f1 +dd +08 +c5 +f1 +dd +08 +c5 +e9 +dd +cb +c5 +e9 +dd +08 +c5 +e9 +dd +08 +66 +0f +3a +0f +ca +05 +66 +0f +3a +0f +08 +05 +66 +0f +3a +0f +08 +05 +c4 +e3 +71 +0f +ca +05 +c4 +e3 +71 +0f +08 +05 +c4 +e3 +71 +0f +08 +05 +c4 +e3 +69 +0f +cb +05 +c4 +e3 +69 +0f +08 +05 +c4 +e3 +69 +0f +08 +05 +66 +0f +db +ca +66 +0f +db +08 +66 +0f +db +08 +c5 +f1 +db +ca +c5 +f1 +db +08 +c5 +f1 +db +08 +c5 +e9 +db +cb +c5 +e9 +db +08 +c5 +e9 +db +08 +66 +0f +df +ca +66 +0f +df +08 +66 +0f +df +08 +c5 +f1 +df +ca +c5 +f1 +df +08 +c5 +f1 +df +08 +c5 +e9 +df +cb +c5 +e9 +df +08 +c5 +e9 +df +08 +66 +0f +e0 +ca +66 +0f +e0 +08 +66 +0f +e0 +08 +c5 +f1 +e0 +ca +c5 +f1 +e0 +08 +c5 +f1 +e0 +08 +c5 +e9 +e0 +cb +c5 +e9 +e0 +08 +c5 +e9 +e0 +08 +66 +0f +e3 +ca +66 +0f +e3 +08 +66 +0f +e3 +08 +c5 +f1 +e3 +ca +c5 +f1 +e3 +08 +c5 +f1 +e3 +08 +c5 +e9 +e3 +cb +c5 +e9 +e3 +08 +c5 +e9 +e3 +08 +66 +0f +38 +10 +ca +66 +0f +38 +10 +08 +66 +0f +38 +10 +08 +66 +0f +38 +10 +ca +66 +0f +38 +10 +08 +66 +0f +38 +10 +08 +c4 +e3 +69 +4c +cb +40 +c4 +e3 +69 +4c +08 +40 +c4 +e3 +69 +4c +08 +40 +66 +0f +3a +0e +ca +05 +66 +0f +3a +0e +08 +05 +66 +0f +3a +0e +08 +05 +c4 +e3 +71 +0e +ca +05 +c4 +e3 +71 +0e +08 +05 +c4 +e3 +71 +0e +08 +05 +c4 +e3 +69 +0e +cb +05 +c4 +e3 +69 +0e +08 +05 +c4 +e3 +69 +0e +08 +05 +66 +0f +3a +61 +ca +05 +66 +0f +3a +61 +08 +05 +66 +0f +3a +61 +08 +05 +c4 +e3 +79 +61 +ca +05 +c4 +e3 +79 +61 +08 +05 +c4 +e3 +79 +61 +08 +05 +66 +0f +3a +60 +ca +05 +66 +0f +3a +60 +08 +05 +66 +0f +3a +60 +08 +05 +c4 +e3 +79 +60 +ca +05 +c4 +e3 +79 +60 +08 +05 +c4 +e3 +79 +60 +08 +05 +66 +0f +3a +63 +ca +05 +66 +0f +3a +63 +08 +05 +66 +0f +3a +63 +08 +05 +c4 +e3 +79 +63 +ca +05 +c4 +e3 +79 +63 +08 +05 +c4 +e3 +79 +63 +08 +05 +66 +0f +3a +62 +ca +05 +66 +0f +3a +62 +08 +05 +66 +0f +3a +62 +08 +05 +c4 +e3 +79 +62 +ca +05 +c4 +e3 +79 +62 +08 +05 +c4 +e3 +79 +62 +08 +05 +66 +0f +74 +ca +66 +0f +74 +08 +66 +0f +74 +08 +c5 +f1 +74 +ca +c5 +f1 +74 +08 +c5 +f1 +74 +08 +c5 +e9 +74 +cb +c5 +e9 +74 +08 +c5 +e9 +74 +08 +66 +0f +75 +ca +66 +0f +75 +08 +66 +0f +75 +08 +c5 +f1 +75 +ca +c5 +f1 +75 +08 +c5 +f1 +75 +08 +c5 +e9 +75 +cb +c5 +e9 +75 +08 +c5 +e9 +75 +08 +66 +0f +76 +ca +66 +0f +76 +08 +66 +0f +76 +08 +c5 +f1 +76 +ca +c5 +f1 +76 +08 +c5 +f1 +76 +08 +c5 +e9 +76 +cb +c5 +e9 +76 +08 +c5 +e9 +76 +08 +66 +0f +38 +29 +ca +66 +0f +38 +29 +08 +66 +0f +38 +29 +08 +c4 +e2 +71 +29 +ca +c4 +e2 +71 +29 +08 +c4 +e2 +71 +29 +08 +c4 +e2 +69 +29 +cb +c4 +e2 +69 +29 +08 +c4 +e2 +69 +29 +08 +66 +0f +64 +ca +66 +0f +64 +08 +66 +0f +64 +08 +c5 +f1 +64 +ca +c5 +f1 +64 +08 +c5 +f1 +64 +08 +c5 +e9 +64 +cb +c5 +e9 +64 +08 +c5 +e9 +64 +08 +66 +0f +65 +ca +66 +0f +65 +08 +66 +0f +65 +08 +c5 +f1 +65 +ca +c5 +f1 +65 +08 +c5 +f1 +65 +08 +c5 +e9 +65 +cb +c5 +e9 +65 +08 +c5 +e9 +65 +08 +66 +0f +66 +ca +66 +0f +66 +08 +66 +0f +66 +08 +c5 +f1 +66 +ca +c5 +f1 +66 +08 +c5 +f1 +66 +08 +c5 +e9 +66 +cb +c5 +e9 +66 +08 +c5 +e9 +66 +08 +66 +0f +38 +37 +ca +66 +0f +38 +37 +08 +66 +0f +38 +37 +08 +c4 +e2 +71 +37 +ca +c4 +e2 +71 +37 +08 +c4 +e2 +71 +37 +08 +c4 +e2 +69 +37 +cb +c4 +e2 +69 +37 +08 +c4 +e2 +69 +37 +08 +c4 +e2 +69 +0d +cb +c4 +e2 +69 +0d +08 +c4 +e2 +69 +0d +08 +c4 +e2 +6d +0d +cb +c4 +e2 +6d +0d +08 +c4 +e2 +6d +0d +08 +c4 +e3 +79 +05 +08 +05 +c4 +e3 +79 +05 +08 +05 +c4 +e3 +7d +05 +08 +05 +c4 +e3 +7d +05 +08 +05 +c4 +e2 +69 +0c +cb +c4 +e2 +69 +0c +08 +c4 +e2 +69 +0c +08 +c4 +e2 +6d +0c +cb +c4 +e2 +6d +0c +08 +c4 +e2 +6d +0c +08 +c4 +e3 +79 +04 +08 +05 +c4 +e3 +79 +04 +08 +05 +c4 +e3 +7d +04 +08 +05 +c4 +e3 +7d +04 +08 +05 +c4 +e3 +6d +06 +cb +05 +c4 +e3 +6d +06 +08 +05 +c4 +e3 +6d +06 +08 +05 +66 +0f +3a +14 +d0 +05 +66 +0f +3a +14 +d0 +05 +66 +48 +0f +3a +14 +d0 +05 +66 +48 +0f +3a +14 +d0 +05 +66 +0f +3a +14 +10 +05 +66 +0f +3a +14 +10 +05 +c4 +e3 +79 +14 +d0 +05 +c4 +e3 +79 +14 +d0 +05 +c4 +e3 +f9 +14 +d0 +05 +c4 +e3 +f9 +14 +d0 +05 +c4 +e3 +79 +14 +10 +05 +c4 +e3 +79 +14 +10 +05 +66 +0f +c5 +c2 +05 +66 +0f +c5 +c2 +05 +66 +48 +0f +c5 +c2 +05 +66 +48 +0f +c5 +c2 +05 +66 +0f +3a +15 +10 +05 +66 +0f +3a +15 +10 +05 +c5 +f9 +c5 +c2 +05 +c5 +f9 +c5 +c2 +05 +c4 +e1 +f9 +c5 +c2 +05 +c4 +e1 +f9 +c5 +c2 +05 +c4 +e3 +79 +15 +10 +05 +c4 +e3 +79 +15 +10 +05 +66 +0f +3a +16 +d0 +05 +66 +0f +3a +16 +d0 +05 +66 +0f +3a +16 +10 +05 +66 +0f +3a +16 +10 +05 +c4 +e3 +79 +16 +d0 +05 +c4 +e3 +79 +16 +d0 +05 +c4 +e3 +79 +16 +10 +05 +c4 +e3 +79 +16 +10 +05 +66 +48 +0f +3a +16 +d0 +05 +66 +48 +0f +3a +16 +d0 +05 +66 +48 +0f +3a +16 +10 +05 +66 +48 +0f +3a +16 +10 +05 +c4 +e3 +f9 +16 +d0 +05 +c4 +e3 +f9 +16 +d0 +05 +c4 +e3 +f9 +16 +10 +05 +c4 +e3 +f9 +16 +10 +05 +66 +0f +38 +01 +ca +66 +0f +38 +01 +08 +66 +0f +38 +01 +08 +c4 +e2 +71 +01 +ca +c4 +e2 +71 +01 +08 +c4 +e2 +71 +01 +08 +c4 +e2 +69 +01 +cb +c4 +e2 +69 +01 +08 +c4 +e2 +69 +01 +08 +66 +0f +38 +02 +ca +66 +0f +38 +02 +08 +66 +0f +38 +02 +08 +c4 +e2 +71 +02 +ca +c4 +e2 +71 +02 +08 +c4 +e2 +71 +02 +08 +c4 +e2 +69 +02 +cb +c4 +e2 +69 +02 +08 +c4 +e2 +69 +02 +08 +66 +0f +38 +03 +ca +66 +0f +38 +03 +08 +66 +0f +38 +03 +08 +c4 +e2 +71 +03 +ca +c4 +e2 +71 +03 +08 +c4 +e2 +71 +03 +08 +c4 +e2 +69 +03 +cb +c4 +e2 +69 +03 +08 +c4 +e2 +69 +03 +08 +66 +0f +38 +41 +ca +66 +0f +38 +41 +08 +66 +0f +38 +41 +08 +c4 +e2 +79 +41 +ca +c4 +e2 +79 +41 +08 +c4 +e2 +79 +41 +08 +66 +0f +38 +05 +ca +66 +0f +38 +05 +08 +66 +0f +38 +05 +08 +c4 +e2 +71 +05 +ca +c4 +e2 +71 +05 +08 +c4 +e2 +71 +05 +08 +c4 +e2 +69 +05 +cb +c4 +e2 +69 +05 +08 +c4 +e2 +69 +05 +08 +66 +0f +38 +06 +ca +66 +0f +38 +06 +08 +66 +0f +38 +06 +08 +c4 +e2 +71 +06 +ca +c4 +e2 +71 +06 +08 +c4 +e2 +71 +06 +08 +c4 +e2 +69 +06 +cb +c4 +e2 +69 +06 +08 +c4 +e2 +69 +06 +08 +66 +0f +38 +07 +ca +66 +0f +38 +07 +08 +66 +0f +38 +07 +08 +c4 +e2 +71 +07 +ca +c4 +e2 +71 +07 +08 +c4 +e2 +71 +07 +08 +c4 +e2 +69 +07 +cb +c4 +e2 +69 +07 +08 +c4 +e2 +69 +07 +08 +66 +0f +3a +20 +c8 +05 +66 +0f +3a +20 +08 +05 +66 +0f +3a +20 +08 +05 +c4 +e3 +71 +20 +c8 +05 +c4 +e3 +71 +20 +08 +05 +c4 +e3 +71 +20 +08 +05 +c4 +e3 +69 +20 +c8 +05 +c4 +e3 +69 +20 +08 +05 +c4 +e3 +69 +20 +08 +05 +66 +0f +c4 +c8 +05 +66 +0f +c4 +08 +05 +66 +0f +c4 +08 +05 +c5 +f1 +c4 +c8 +05 +c5 +f1 +c4 +08 +05 +c5 +f1 +c4 +08 +05 +c5 +e9 +c4 +c8 +05 +c5 +e9 +c4 +08 +05 +c5 +e9 +c4 +08 +05 +66 +0f +3a +22 +c8 +05 +66 +0f +3a +22 +08 +05 +66 +0f +3a +22 +08 +05 +c4 +e3 +71 +22 +c8 +05 +c4 +e3 +71 +22 +08 +05 +c4 +e3 +71 +22 +08 +05 +c4 +e3 +69 +22 +c8 +05 +c4 +e3 +69 +22 +08 +05 +c4 +e3 +69 +22 +08 +05 +66 +48 +0f +3a +22 +c8 +05 +66 +48 +0f +3a +22 +08 +05 +66 +48 +0f +3a +22 +08 +05 +c4 +e3 +f1 +22 +c8 +05 +c4 +e3 +f1 +22 +08 +05 +c4 +e3 +f1 +22 +08 +05 +c4 +e3 +e9 +22 +c8 +05 +c4 +e3 +e9 +22 +08 +05 +c4 +e3 +e9 +22 +08 +05 +66 +0f +f5 +ca +66 +0f +f5 +08 +66 +0f +f5 +08 +c5 +f1 +f5 +ca +c5 +f1 +f5 +08 +c5 +f1 +f5 +08 +c5 +e9 +f5 +cb +c5 +e9 +f5 +08 +c5 +e9 +f5 +08 +66 +0f +38 +04 +ca +66 +0f +38 +04 +08 +66 +0f +38 +04 +08 +c4 +e2 +71 +04 +ca +c4 +e2 +71 +04 +08 +c4 +e2 +71 +04 +08 +c4 +e2 +69 +04 +cb +c4 +e2 +69 +04 +08 +c4 +e2 +69 +04 +08 +66 +0f +38 +3c +ca +66 +0f +38 +3c +08 +66 +0f +38 +3c +08 +c4 +e2 +71 +3c +ca +c4 +e2 +71 +3c +08 +c4 +e2 +71 +3c +08 +c4 +e2 +69 +3c +cb +c4 +e2 +69 +3c +08 +c4 +e2 +69 +3c +08 +66 +0f +ee +ca +66 +0f +ee +08 +66 +0f +ee +08 +c5 +f1 +ee +ca +c5 +f1 +ee +08 +c5 +f1 +ee +08 +c5 +e9 +ee +cb +c5 +e9 +ee +08 +c5 +e9 +ee +08 +66 +0f +38 +3d +ca +66 +0f +38 +3d +08 +66 +0f +38 +3d +08 +c4 +e2 +71 +3d +ca +c4 +e2 +71 +3d +08 +c4 +e2 +71 +3d +08 +c4 +e2 +69 +3d +cb +c4 +e2 +69 +3d +08 +c4 +e2 +69 +3d +08 +66 +0f +de +ca +66 +0f +de +08 +66 +0f +de +08 +c5 +f1 +de +ca +c5 +f1 +de +08 +c5 +f1 +de +08 +c5 +e9 +de +cb +c5 +e9 +de +08 +c5 +e9 +de +08 +66 +0f +38 +3e +ca +66 +0f +38 +3e +08 +66 +0f +38 +3e +08 +c4 +e2 +71 +3e +ca +c4 +e2 +71 +3e +08 +c4 +e2 +71 +3e +08 +c4 +e2 +69 +3e +cb +c4 +e2 +69 +3e +08 +c4 +e2 +69 +3e +08 +66 +0f +38 +3f +ca +66 +0f +38 +3f +08 +66 +0f +38 +3f +08 +c4 +e2 +71 +3f +ca +c4 +e2 +71 +3f +08 +c4 +e2 +71 +3f +08 +c4 +e2 +69 +3f +cb +c4 +e2 +69 +3f +08 +c4 +e2 +69 +3f +08 +66 +0f +38 +38 +ca +66 +0f +38 +38 +08 +66 +0f +38 +38 +08 +c4 +e2 +71 +38 +ca +c4 +e2 +71 +38 +08 +c4 +e2 +71 +38 +08 +c4 +e2 +69 +38 +cb +c4 +e2 +69 +38 +08 +c4 +e2 +69 +38 +08 +66 +0f +ea +ca +66 +0f +ea +08 +66 +0f +ea +08 +c5 +f1 +ea +ca +c5 +f1 +ea +08 +c5 +f1 +ea +08 +c5 +e9 +ea +cb +c5 +e9 +ea +08 +c5 +e9 +ea +08 +66 +0f +38 +39 +ca +66 +0f +38 +39 +08 +66 +0f +38 +39 +08 +c4 +e2 +71 +39 +ca +c4 +e2 +71 +39 +08 +c4 +e2 +71 +39 +08 +c4 +e2 +69 +39 +cb +c4 +e2 +69 +39 +08 +c4 +e2 +69 +39 +08 +66 +0f +da +ca +66 +0f +da +08 +66 +0f +da +08 +c5 +f1 +da +ca +c5 +f1 +da +08 +c5 +f1 +da +08 +c5 +e9 +da +cb +c5 +e9 +da +08 +c5 +e9 +da +08 +66 +0f +38 +3a +ca +66 +0f +38 +3a +08 +66 +0f +38 +3a +08 +c4 +e2 +71 +3a +ca +c4 +e2 +71 +3a +08 +c4 +e2 +71 +3a +08 +c4 +e2 +69 +3a +cb +c4 +e2 +69 +3a +08 +c4 +e2 +69 +3a +08 +66 +0f +38 +3b +ca +66 +0f +38 +3b +08 +66 +0f +38 +3b +08 +c4 +e2 +71 +3b +ca +c4 +e2 +71 +3b +08 +c4 +e2 +71 +3b +08 +c4 +e2 +69 +3b +cb +c4 +e2 +69 +3b +08 +c4 +e2 +69 +3b +08 +66 +0f +d7 +c1 +66 +0f +d7 +c1 +c5 +f9 +d7 +c1 +c5 +f9 +d7 +c1 +66 +0f +38 +20 +ca +66 +0f +38 +20 +08 +66 +0f +38 +20 +08 +c4 +e2 +79 +20 +ca +c4 +e2 +79 +20 +08 +c4 +e2 +79 +20 +08 +66 +0f +38 +21 +ca +66 +0f +38 +21 +08 +66 +0f +38 +21 +08 +c4 +e2 +79 +21 +ca +c4 +e2 +79 +21 +08 +c4 +e2 +79 +21 +08 +66 +0f +38 +22 +ca +66 +0f +38 +22 +08 +66 +0f +38 +22 +08 +c4 +e2 +79 +22 +ca +c4 +e2 +79 +22 +08 +c4 +e2 +79 +22 +08 +66 +0f +38 +23 +ca +66 +0f +38 +23 +08 +66 +0f +38 +23 +08 +c4 +e2 +79 +23 +ca +c4 +e2 +79 +23 +08 +c4 +e2 +79 +23 +08 +66 +0f +38 +24 +ca +66 +0f +38 +24 +08 +66 +0f +38 +24 +08 +c4 +e2 +79 +24 +ca +c4 +e2 +79 +24 +08 +c4 +e2 +79 +24 +08 +66 +0f +38 +25 +ca +66 +0f +38 +25 +08 +66 +0f +38 +25 +08 +c4 +e2 +79 +25 +ca +c4 +e2 +79 +25 +08 +c4 +e2 +79 +25 +08 +66 +0f +38 +30 +ca +66 +0f +38 +30 +08 +66 +0f +38 +30 +08 +c4 +e2 +79 +30 +ca +c4 +e2 +79 +30 +08 +c4 +e2 +79 +30 +08 +66 +0f +38 +31 +ca +66 +0f +38 +31 +08 +66 +0f +38 +31 +08 +c4 +e2 +79 +31 +ca +c4 +e2 +79 +31 +08 +c4 +e2 +79 +31 +08 +66 +0f +38 +32 +ca +66 +0f +38 +32 +08 +66 +0f +38 +32 +08 +c4 +e2 +79 +32 +ca +c4 +e2 +79 +32 +08 +c4 +e2 +79 +32 +08 +66 +0f +38 +33 +ca +66 +0f +38 +33 +08 +66 +0f +38 +33 +08 +c4 +e2 +79 +33 +ca +c4 +e2 +79 +33 +08 +c4 +e2 +79 +33 +08 +66 +0f +38 +34 +ca +66 +0f +38 +34 +08 +66 +0f +38 +34 +08 +c4 +e2 +79 +34 +ca +c4 +e2 +79 +34 +08 +c4 +e2 +79 +34 +08 +66 +0f +38 +35 +ca +66 +0f +38 +35 +08 +66 +0f +38 +35 +08 +c4 +e2 +79 +35 +ca +c4 +e2 +79 +35 +08 +c4 +e2 +79 +35 +08 +66 +0f +e4 +ca +66 +0f +e4 +08 +66 +0f +e4 +08 +c5 +f1 +e4 +ca +c5 +f1 +e4 +08 +c5 +f1 +e4 +08 +c5 +e9 +e4 +cb +c5 +e9 +e4 +08 +c5 +e9 +e4 +08 +66 +0f +38 +0b +ca +66 +0f +38 +0b +08 +66 +0f +38 +0b +08 +c4 +e2 +71 +0b +ca +c4 +e2 +71 +0b +08 +c4 +e2 +71 +0b +08 +c4 +e2 +69 +0b +cb +c4 +e2 +69 +0b +08 +c4 +e2 +69 +0b +08 +66 +0f +e5 +ca +66 +0f +e5 +08 +66 +0f +e5 +08 +c5 +f1 +e5 +ca +c5 +f1 +e5 +08 +c5 +f1 +e5 +08 +c5 +e9 +e5 +cb +c5 +e9 +e5 +08 +c5 +e9 +e5 +08 +66 +0f +d5 +ca +66 +0f +d5 +08 +66 +0f +d5 +08 +c5 +f1 +d5 +ca +c5 +f1 +d5 +08 +c5 +f1 +d5 +08 +c5 +e9 +d5 +cb +c5 +e9 +d5 +08 +c5 +e9 +d5 +08 +66 +0f +38 +40 +ca +66 +0f +38 +40 +08 +66 +0f +38 +40 +08 +c4 +e2 +71 +40 +ca +c4 +e2 +71 +40 +08 +c4 +e2 +71 +40 +08 +c4 +e2 +69 +40 +cb +c4 +e2 +69 +40 +08 +c4 +e2 +69 +40 +08 +66 +0f +f4 +ca +66 +0f +f4 +08 +66 +0f +f4 +08 +c5 +f1 +f4 +ca +c5 +f1 +f4 +08 +c5 +f1 +f4 +08 +c5 +e9 +f4 +cb +c5 +e9 +f4 +08 +c5 +e9 +f4 +08 +66 +0f +38 +28 +ca +66 +0f +38 +28 +08 +66 +0f +38 +28 +08 +c4 +e2 +71 +28 +ca +c4 +e2 +71 +28 +08 +c4 +e2 +71 +28 +08 +c4 +e2 +69 +28 +cb +c4 +e2 +69 +28 +08 +c4 +e2 +69 +28 +08 +66 +0f +eb +ca +66 +0f +eb +08 +66 +0f +eb +08 +c5 +f1 +eb +ca +c5 +f1 +eb +08 +c5 +f1 +eb +08 +c5 +e9 +eb +cb +c5 +e9 +eb +08 +c5 +e9 +eb +08 +66 +0f +f6 +ca +66 +0f +f6 +08 +66 +0f +f6 +08 +c5 +f1 +f6 +ca +c5 +f1 +f6 +08 +c5 +f1 +f6 +08 +c5 +e9 +f6 +cb +c5 +e9 +f6 +08 +c5 +e9 +f6 +08 +66 +0f +38 +00 +ca +66 +0f +38 +00 +08 +66 +0f +38 +00 +08 +c4 +e2 +71 +00 +ca +c4 +e2 +71 +00 +08 +c4 +e2 +71 +00 +08 +c4 +e2 +69 +00 +cb +c4 +e2 +69 +00 +08 +c4 +e2 +69 +00 +08 +66 +0f +70 +ca +05 +66 +0f +70 +08 +05 +66 +0f +70 +08 +05 +c5 +f9 +70 +ca +05 +c5 +f9 +70 +08 +05 +c5 +f9 +70 +08 +05 +f3 +0f +70 +ca +05 +f3 +0f +70 +08 +05 +f3 +0f +70 +08 +05 +c5 +fa +70 +ca +05 +c5 +fa +70 +08 +05 +c5 +fa +70 +08 +05 +f2 +0f +70 +ca +05 +f2 +0f +70 +08 +05 +f2 +0f +70 +08 +05 +c5 +fb +70 +ca +05 +c5 +fb +70 +08 +05 +c5 +fb +70 +08 +05 +66 +0f +38 +08 +ca +66 +0f +38 +08 +08 +66 +0f +38 +08 +08 +c4 +e2 +71 +08 +ca +c4 +e2 +71 +08 +08 +c4 +e2 +71 +08 +08 +c4 +e2 +69 +08 +cb +c4 +e2 +69 +08 +08 +c4 +e2 +69 +08 +08 +66 +0f +38 +09 +ca +66 +0f +38 +09 +08 +66 +0f +38 +09 +08 +c4 +e2 +71 +09 +ca +c4 +e2 +71 +09 +08 +c4 +e2 +71 +09 +08 +c4 +e2 +69 +09 +cb +c4 +e2 +69 +09 +08 +c4 +e2 +69 +09 +08 +66 +0f +38 +0a +ca +66 +0f +38 +0a +08 +66 +0f +38 +0a +08 +c4 +e2 +71 +0a +ca +c4 +e2 +71 +0a +08 +c4 +e2 +71 +0a +08 +c4 +e2 +69 +0a +cb +c4 +e2 +69 +0a +08 +c4 +e2 +69 +0a +08 +66 +41 +0f +73 +fb +05 +66 +41 +0f +73 +fb +05 +c4 +c1 +21 +73 +fb +05 +c4 +c1 +21 +73 +fb +05 +c4 +c1 +21 +73 +fc +05 +c4 +c1 +21 +73 +fc +05 +66 +0f +73 +f9 +05 +66 +0f +73 +f9 +05 +c5 +f1 +73 +f9 +05 +c5 +f1 +73 +f9 +05 +c5 +f1 +73 +fa +05 +c5 +f1 +73 +fa +05 +66 +0f +73 +d9 +05 +66 +0f +73 +d9 +05 +c5 +f1 +73 +d9 +05 +c5 +f1 +73 +d9 +05 +c5 +f1 +73 +da +05 +c5 +f1 +73 +da +05 +66 +0f +f1 +ca +66 +0f +f1 +08 +66 +0f +f1 +08 +c5 +f1 +f1 +ca +c5 +f1 +f1 +08 +c5 +f1 +f1 +08 +c5 +e9 +f1 +cb +c5 +e9 +f1 +08 +c5 +e9 +f1 +08 +66 +0f +71 +f1 +05 +66 +0f +71 +f1 +05 +c5 +f1 +71 +f1 +05 +c5 +f1 +71 +f1 +05 +c5 +f1 +71 +f2 +05 +c5 +f1 +71 +f2 +05 +66 +0f +f2 +ca +66 +0f +f2 +08 +66 +0f +f2 +08 +c5 +f1 +f2 +ca +c5 +f1 +f2 +08 +c5 +f1 +f2 +08 +c5 +e9 +f2 +cb +c5 +e9 +f2 +08 +c5 +e9 +f2 +08 +66 +0f +72 +f1 +05 +66 +0f +72 +f1 +05 +c5 +f1 +72 +f1 +05 +c5 +f1 +72 +f1 +05 +c5 +f1 +72 +f2 +05 +c5 +f1 +72 +f2 +05 +66 +0f +f3 +ca +66 +0f +f3 +08 +66 +0f +f3 +08 +c5 +f1 +f3 +ca +c5 +f1 +f3 +08 +c5 +f1 +f3 +08 +c5 +e9 +f3 +cb +c5 +e9 +f3 +08 +c5 +e9 +f3 +08 +66 +0f +73 +f1 +05 +66 +0f +73 +f1 +05 +c5 +f1 +73 +f1 +05 +c5 +f1 +73 +f1 +05 +c5 +f1 +73 +f2 +05 +c5 +f1 +73 +f2 +05 +66 +0f +e1 +ca +66 +0f +e1 +08 +66 +0f +e1 +08 +c5 +f1 +e1 +ca +c5 +f1 +e1 +08 +c5 +f1 +e1 +08 +c5 +e9 +e1 +cb +c5 +e9 +e1 +08 +c5 +e9 +e1 +08 +66 +0f +71 +e1 +05 +66 +0f +71 +e1 +05 +c5 +f1 +71 +e1 +05 +c5 +f1 +71 +e1 +05 +c5 +f1 +71 +e2 +05 +c5 +f1 +71 +e2 +05 +66 +0f +e2 +ca +66 +0f +e2 +08 +66 +0f +e2 +08 +c5 +f1 +e2 +ca +c5 +f1 +e2 +08 +c5 +f1 +e2 +08 +c5 +e9 +e2 +cb +c5 +e9 +e2 +08 +c5 +e9 +e2 +08 +66 +0f +72 +e1 +05 +66 +0f +72 +e1 +05 +c5 +f1 +72 +e1 +05 +c5 +f1 +72 +e1 +05 +c5 +f1 +72 +e2 +05 +c5 +f1 +72 +e2 +05 +66 +0f +d1 +ca +66 +0f +d1 +08 +66 +0f +d1 +08 +c5 +f1 +d1 +ca +c5 +f1 +d1 +08 +c5 +f1 +d1 +08 +c5 +e9 +d1 +cb +c5 +e9 +d1 +08 +c5 +e9 +d1 +08 +66 +0f +71 +d1 +05 +66 +0f +71 +d1 +05 +c5 +f1 +71 +d1 +05 +c5 +f1 +71 +d1 +05 +c5 +f1 +71 +d2 +05 +c5 +f1 +71 +d2 +05 +66 +0f +d2 +ca +66 +0f +d2 +08 +66 +0f +d2 +08 +c5 +f1 +d2 +ca +c5 +f1 +d2 +08 +c5 +f1 +d2 +08 +c5 +e9 +d2 +cb +c5 +e9 +d2 +08 +c5 +e9 +d2 +08 +66 +0f +72 +d1 +05 +66 +0f +72 +d1 +05 +c5 +f1 +72 +d1 +05 +c5 +f1 +72 +d1 +05 +c5 +f1 +72 +d2 +05 +c5 +f1 +72 +d2 +05 +66 +0f +d3 +ca +66 +0f +d3 +08 +66 +0f +d3 +08 +c5 +f1 +d3 +ca +c5 +f1 +d3 +08 +c5 +f1 +d3 +08 +c5 +e9 +d3 +cb +c5 +e9 +d3 +08 +c5 +e9 +d3 +08 +66 +0f +73 +d1 +05 +66 +0f +73 +d1 +05 +c5 +f1 +73 +d1 +05 +c5 +f1 +73 +d1 +05 +c5 +f1 +73 +d2 +05 +c5 +f1 +73 +d2 +05 +66 +0f +38 +17 +ca +66 +0f +38 +17 +08 +66 +0f +38 +17 +08 +c4 +e2 +79 +17 +ca +c4 +e2 +79 +17 +08 +c4 +e2 +79 +17 +08 +c4 +e2 +7d +17 +ca +c4 +e2 +7d +17 +08 +c4 +e2 +7d +17 +08 +c4 +e2 +79 +0e +ca +c4 +e2 +79 +0e +08 +c4 +e2 +79 +0e +08 +c4 +e2 +7d +0e +ca +c4 +e2 +7d +0e +08 +c4 +e2 +7d +0e +08 +c4 +e2 +79 +0f +ca +c4 +e2 +79 +0f +08 +c4 +e2 +79 +0f +08 +c4 +e2 +7d +0f +ca +c4 +e2 +7d +0f +08 +c4 +e2 +7d +0f +08 +66 +0f +f8 +ca +66 +0f +f8 +08 +66 +0f +f8 +08 +c5 +f1 +f8 +ca +c5 +f1 +f8 +08 +c5 +f1 +f8 +08 +c5 +e9 +f8 +cb +c5 +e9 +f8 +08 +c5 +e9 +f8 +08 +66 +0f +f9 +ca +66 +0f +f9 +08 +66 +0f +f9 +08 +c5 +f1 +f9 +ca +c5 +f1 +f9 +08 +c5 +f1 +f9 +08 +c5 +e9 +f9 +cb +c5 +e9 +f9 +08 +c5 +e9 +f9 +08 +66 +0f +fa +ca +66 +0f +fa +08 +66 +0f +fa +08 +c5 +f1 +fa +ca +c5 +f1 +fa +08 +c5 +f1 +fa +08 +c5 +e9 +fa +cb +c5 +e9 +fa +08 +c5 +e9 +fa +08 +66 +0f +fb +ca +66 +0f +fb +08 +66 +0f +fb +08 +c5 +f1 +fb +ca +c5 +f1 +fb +08 +c5 +f1 +fb +08 +c5 +e9 +fb +cb +c5 +e9 +fb +08 +c5 +e9 +fb +08 +66 +0f +e8 +ca +66 +0f +e8 +08 +66 +0f +e8 +08 +c5 +f1 +e8 +ca +c5 +f1 +e8 +08 +c5 +f1 +e8 +08 +c5 +e9 +e8 +cb +c5 +e9 +e8 +08 +c5 +e9 +e8 +08 +66 +0f +e9 +ca +66 +0f +e9 +08 +66 +0f +e9 +08 +c5 +f1 +e9 +ca +c5 +f1 +e9 +08 +c5 +f1 +e9 +08 +c5 +e9 +e9 +cb +c5 +e9 +e9 +08 +c5 +e9 +e9 +08 +66 +0f +d8 +ca +66 +0f +d8 +08 +66 +0f +d8 +08 +c5 +f1 +d8 +ca +c5 +f1 +d8 +08 +c5 +f1 +d8 +08 +c5 +e9 +d8 +cb +c5 +e9 +d8 +08 +c5 +e9 +d8 +08 +66 +0f +d9 +ca +66 +0f +d9 +08 +66 +0f +d9 +08 +c5 +f1 +d9 +ca +c5 +f1 +d9 +08 +c5 +f1 +d9 +08 +c5 +e9 +d9 +cb +c5 +e9 +d9 +08 +c5 +e9 +d9 +08 +66 +0f +68 +ca +66 +0f +68 +08 +66 +0f +68 +08 +c5 +f1 +68 +ca +c5 +f1 +68 +08 +c5 +f1 +68 +08 +c5 +e9 +68 +cb +c5 +e9 +68 +08 +c5 +e9 +68 +08 +66 +0f +69 +ca +66 +0f +69 +08 +66 +0f +69 +08 +c5 +f1 +69 +ca +c5 +f1 +69 +08 +c5 +f1 +69 +08 +c5 +e9 +69 +cb +c5 +e9 +69 +08 +c5 +e9 +69 +08 +66 +0f +6a +ca +66 +0f +6a +08 +66 +0f +6a +08 +c5 +f1 +6a +ca +c5 +f1 +6a +08 +c5 +f1 +6a +08 +c5 +e9 +6a +cb +c5 +e9 +6a +08 +c5 +e9 +6a +08 +66 +0f +6d +ca +66 +0f +6d +08 +66 +0f +6d +08 +c5 +f1 +6d +ca +c5 +f1 +6d +08 +c5 +f1 +6d +08 +c5 +e9 +6d +cb +c5 +e9 +6d +08 +c5 +e9 +6d +08 +66 +0f +60 +ca +66 +0f +60 +08 +66 +0f +60 +08 +c5 +f1 +60 +ca +c5 +f1 +60 +08 +c5 +f1 +60 +08 +c5 +e9 +60 +cb +c5 +e9 +60 +08 +c5 +e9 +60 +08 +66 +0f +61 +ca +66 +0f +61 +08 +66 +0f +61 +08 +c5 +f1 +61 +ca +c5 +f1 +61 +08 +c5 +f1 +61 +08 +c5 +e9 +61 +cb +c5 +e9 +61 +08 +c5 +e9 +61 +08 +66 +0f +62 +ca +66 +0f +62 +08 +66 +0f +62 +08 +c5 +f1 +62 +ca +c5 +f1 +62 +08 +c5 +f1 +62 +08 +c5 +e9 +62 +cb +c5 +e9 +62 +08 +c5 +e9 +62 +08 +66 +0f +6c +ca +66 +0f +6c +08 +66 +0f +6c +08 +c5 +f1 +6c +ca +c5 +f1 +6c +08 +c5 +f1 +6c +08 +c5 +e9 +6c +cb +c5 +e9 +6c +08 +c5 +e9 +6c +08 +66 +0f +ef +ca +66 +0f +ef +08 +66 +0f +ef +08 +c5 +f1 +ef +ca +c5 +f1 +ef +08 +c5 +f1 +ef +08 +c5 +e9 +ef +cb +c5 +e9 +ef +08 +c5 +e9 +ef +08 +0f +53 +ca +0f +53 +08 +0f +53 +08 +c5 +f8 +53 +ca +c5 +f8 +53 +08 +c5 +f8 +53 +08 +c5 +fc +53 +ca +c5 +fc +53 +08 +c5 +fc +53 +08 +f3 +0f +53 +ca +f3 +0f +53 +08 +f3 +0f +53 +08 +c5 +f2 +53 +ca +c5 +f2 +53 +08 +c5 +f2 +53 +08 +c5 +ea +53 +cb +c5 +ea +53 +08 +c5 +ea +53 +08 +0f +52 +ca +0f +52 +08 +0f +52 +08 +c5 +f8 +52 +ca +c5 +f8 +52 +08 +c5 +f8 +52 +08 +c5 +fc +52 +ca +c5 +fc +52 +08 +c5 +fc +52 +08 +f3 +0f +52 +ca +f3 +0f +52 +08 +f3 +0f +52 +08 +c5 +f2 +52 +ca +c5 +f2 +52 +08 +c5 +f2 +52 +08 +c5 +ea +52 +cb +c5 +ea +52 +08 +c5 +ea +52 +08 +66 +0f +3a +09 +ca +05 +66 +0f +3a +09 +08 +05 +66 +0f +3a +09 +08 +05 +c4 +e3 +79 +09 +ca +05 +c4 +e3 +79 +09 +08 +05 +c4 +e3 +79 +09 +08 +05 +c4 +e3 +7d +09 +ca +05 +c4 +e3 +7d +09 +08 +05 +c4 +e3 +7d +09 +08 +05 +66 +0f +3a +08 +ca +05 +66 +0f +3a +08 +08 +05 +66 +0f +3a +08 +08 +05 +c4 +e3 +79 +08 +ca +05 +c4 +e3 +79 +08 +08 +05 +c4 +e3 +79 +08 +08 +05 +c4 +e3 +7d +08 +ca +05 +c4 +e3 +7d +08 +08 +05 +c4 +e3 +7d +08 +08 +05 +66 +0f +3a +0b +ca +05 +66 +0f +3a +0b +08 +05 +66 +0f +3a +0b +08 +05 +c4 +e3 +71 +0b +ca +05 +c4 +e3 +71 +0b +08 +05 +c4 +e3 +71 +0b +08 +05 +c4 +e3 +69 +0b +cb +05 +c4 +e3 +69 +0b +08 +05 +c4 +e3 +69 +0b +08 +05 +66 +0f +3a +0a +ca +05 +66 +0f +3a +0a +08 +05 +66 +0f +3a +0a +08 +05 +c4 +e3 +71 +0a +ca +05 +c4 +e3 +71 +0a +08 +05 +c4 +e3 +71 +0a +08 +05 +c4 +e3 +69 +0a +cb +05 +c4 +e3 +69 +0a +08 +05 +c4 +e3 +69 +0a +08 +05 +66 +0f +c6 +ca +05 +66 +0f +c6 +08 +05 +66 +0f +c6 +08 +05 +c5 +f1 +c6 +ca +05 +c5 +f1 +c6 +08 +05 +c5 +f1 +c6 +08 +05 +c5 +e9 +c6 +cb +05 +c5 +e9 +c6 +08 +05 +c5 +e9 +c6 +08 +05 +c5 +ed +c6 +cb +05 +c5 +ed +c6 +08 +05 +c5 +ed +c6 +08 +05 +0f +c6 +ca +05 +0f +c6 +08 +05 +0f +c6 +08 +05 +c5 +f0 +c6 +ca +05 +c5 +f0 +c6 +08 +05 +c5 +f0 +c6 +08 +05 +c5 +e8 +c6 +cb +05 +c5 +e8 +c6 +08 +05 +c5 +e8 +c6 +08 +05 +c5 +ec +c6 +cb +05 +c5 +ec +c6 +08 +05 +c5 +ec +c6 +08 +05 +66 +0f +51 +ca +66 +0f +51 +08 +66 +0f +51 +08 +c5 +f9 +51 +ca +c5 +f9 +51 +08 +c5 +f9 +51 +08 +c5 +fd +51 +ca +c5 +fd +51 +08 +c5 +fd +51 +08 +0f +51 +ca +0f +51 +08 +0f +51 +08 +c5 +f8 +51 +ca +c5 +f8 +51 +08 +c5 +f8 +51 +08 +c5 +fc +51 +ca +c5 +fc +51 +08 +c5 +fc +51 +08 +f2 +0f +51 +ca +f2 +0f +51 +08 +f2 +0f +51 +08 +c5 +f3 +51 +ca +c5 +f3 +51 +08 +c5 +f3 +51 +08 +c5 +eb +51 +cb +c5 +eb +51 +08 +c5 +eb +51 +08 +f3 +0f +51 +ca +f3 +0f +51 +08 +f3 +0f +51 +08 +c5 +f2 +51 +ca +c5 +f2 +51 +08 +c5 +f2 +51 +08 +c5 +ea +51 +cb +c5 +ea +51 +08 +c5 +ea +51 +08 +0f +ae +18 +0f +ae +18 +c5 +f8 +ae +18 +c5 +f8 +ae +18 +66 +0f +5c +ca +66 +0f +5c +08 +66 +0f +5c +08 +c5 +f1 +5c +ca +c5 +f1 +5c +08 +c5 +f1 +5c +08 +c5 +e9 +5c +cb +c5 +e9 +5c +08 +c5 +e9 +5c +08 +c5 +ed +5c +cb +c5 +ed +5c +08 +c5 +ed +5c +08 +0f +5c +ca +0f +5c +08 +0f +5c +08 +c5 +f0 +5c +ca +c5 +f0 +5c +08 +c5 +f0 +5c +08 +c5 +e8 +5c +cb +c5 +e8 +5c +08 +c5 +e8 +5c +08 +c5 +ec +5c +cb +c5 +ec +5c +08 +c5 +ec +5c +08 +f2 +0f +5c +ca +f2 +0f +5c +08 +f2 +0f +5c +08 +c5 +f3 +5c +ca +c5 +f3 +5c +08 +c5 +f3 +5c +08 +c5 +eb +5c +cb +c5 +eb +5c +08 +c5 +eb +5c +08 +f3 +0f +5c +ca +f3 +0f +5c +08 +f3 +0f +5c +08 +c5 +f2 +5c +ca +c5 +f2 +5c +08 +c5 +f2 +5c +08 +c5 +ea +5c +cb +c5 +ea +5c +08 +c5 +ea +5c +08 +66 +0f +2e +ca +66 +0f +2e +08 +66 +0f +2e +08 +c5 +f9 +2e +ca +c5 +f9 +2e +08 +c5 +f9 +2e +08 +0f +2e +ca +0f +2e +08 +0f +2e +08 +c5 +f8 +2e +ca +c5 +f8 +2e +08 +c5 +f8 +2e +08 +66 +0f +15 +ca +66 +0f +15 +08 +66 +0f +15 +08 +c5 +f1 +15 +ca +c5 +f1 +15 +08 +c5 +f1 +15 +08 +c5 +e9 +15 +cb +c5 +e9 +15 +08 +c5 +e9 +15 +08 +c5 +ed +15 +cb +c5 +ed +15 +08 +c5 +ed +15 +08 +0f +15 +ca +0f +15 +08 +0f +15 +08 +c5 +f0 +15 +ca +c5 +f0 +15 +08 +c5 +f0 +15 +08 +c5 +e8 +15 +cb +c5 +e8 +15 +08 +c5 +e8 +15 +08 +c5 +ec +15 +cb +c5 +ec +15 +08 +c5 +ec +15 +08 +66 +0f +14 +ca +66 +0f +14 +08 +66 +0f +14 +08 +c5 +f1 +14 +ca +c5 +f1 +14 +08 +c5 +f1 +14 +08 +c5 +e9 +14 +cb +c5 +e9 +14 +08 +c5 +e9 +14 +08 +c5 +ed +14 +cb +c5 +ed +14 +08 +c5 +ed +14 +08 +0f +14 +ca +0f +14 +08 +0f +14 +08 +c5 +f0 +14 +ca +c5 +f0 +14 +08 +c5 +f0 +14 +08 +c5 +e8 +14 +cb +c5 +e8 +14 +08 +c5 +e8 +14 +08 +c5 +ec +14 +cb +c5 +ec +14 +08 +c5 +ec +14 +08 +66 +0f +57 +ca +66 +0f +57 +08 +66 +0f +57 +08 +c5 +f1 +57 +ca +c5 +f1 +57 +08 +c5 +f1 +57 +08 +c5 +e9 +57 +cb +c5 +e9 +57 +08 +c5 +e9 +57 +08 +c5 +ed +57 +cb +c5 +ed +57 +08 +c5 +ed +57 +08 +0f +57 +ca +0f +57 +08 +0f +57 +08 +c5 +f0 +57 +ca +c5 +f0 +57 +08 +c5 +f0 +57 +08 +c5 +e8 +57 +cb +c5 +e8 +57 +08 +c5 +e8 +57 +08 +c5 +ec +57 +cb +c5 +ec +57 +08 +c5 +ec +57 +08 +c5 +fc +77 +c5 +f8 +77 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx16.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx16.asm new file mode 100644 index 0000000000..7216758932 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx16.asm @@ -0,0 +1,10 @@ +[bits 16] +extractps eax, xmm1, 5 +vextractps eax, xmm1, 5 +pextrb eax, xmm1, 5 +vpextrb eax, xmm1, 5 +pextrw eax, xmm1, 5 +vpextrw eax, xmm1, 5 +pextrd eax, xmm1, 5 +vpextrd eax, xmm1, 5 +vpinsrd xmm1, xmm2, eax, 5 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx16.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx16.hex new file mode 100644 index 0000000000..6e3a538d82 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx16.hex @@ -0,0 +1,52 @@ +66 +0f +3a +17 +c8 +05 +c4 +e3 +79 +17 +c8 +05 +66 +0f +3a +14 +c8 +05 +c4 +e3 +79 +14 +c8 +05 +66 +0f +c5 +c1 +05 +c5 +f9 +c5 +c1 +05 +66 +0f +3a +16 +c8 +05 +c4 +e3 +79 +16 +c8 +05 +c4 +e3 +69 +22 +c8 +05 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx2.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx2.asm new file mode 100644 index 0000000000..e76016ca73 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx2.asm @@ -0,0 +1,652 @@ +; Exhaustive test of AVX2 instructions +; +; Copyright (C) 2011 Peter Johnson +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions +; are met: +; 1. Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; 2. Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in the +; documentation and/or other materials provided with the distribution. +; +; THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. +; + +[bits 64] + +vmpsadbw ymm1, ymm3, 3 ; c4 e3 75 42 cb 03 +vmpsadbw ymm1, yword [rax], 3 ; c4 e3 75 42 08 03 +vmpsadbw ymm1, ymm2, ymm3, 3 ; c4 e3 6d 42 cb 03 +vmpsadbw ymm1, ymm2, yword [rax], 3 ; c4 e3 6d 42 08 03 + +vpabsb ymm1, ymm2 ; c4 e2 7d 1c ca +vpabsb ymm1, yword [rax] ; c4 e2 7d 1c 08 + +vpabsw ymm1, ymm2 ; c4 e2 7d 1d ca +vpabsw ymm1, yword [rax] ; c4 e2 7d 1d 08 + +vpabsd ymm1, ymm2 ; c4 e2 7d 1e ca +vpabsd ymm1, yword [rax] ; c4 e2 7d 1e 08 + +vpacksswb ymm1, ymm3 ; c5 f5 63 cb +vpacksswb ymm1, yword [rax] ; c5 f5 63 08 +vpacksswb ymm1, ymm2, ymm3 ; c5 ed 63 cb +vpacksswb ymm1, ymm2, yword [rax] ; c5 ed 63 08 + +vpackssdw ymm1, ymm3 ; c5 f5 6b cb +vpackssdw ymm1, yword [rax] ; c5 f5 6b 08 +vpackssdw ymm1, ymm2, ymm3 ; c5 ed 6b cb +vpackssdw ymm1, ymm2, yword [rax] ; c5 ed 6b 08 + +vpackusdw ymm1, ymm3 ; c4 e2 75 2b cb +vpackusdw ymm1, yword [rax] ; c4 e2 75 2b 08 +vpackusdw ymm1, ymm2, ymm3 ; c4 e2 6d 2b cb +vpackusdw ymm1, ymm2, yword [rax] ; c4 e2 6d 2b 08 + +vpackuswb ymm1, ymm3 ; c5 f5 67 cb +vpackuswb ymm1, yword [rax] ; c5 f5 67 08 +vpackuswb ymm1, ymm2, ymm3 ; c5 ed 67 cb +vpackuswb ymm1, ymm2, yword [rax] ; c5 ed 67 08 + +vpaddb ymm1, ymm3 ; c5 f5 fc cb +vpaddb ymm1, yword [rax] ; c5 f5 fc 08 +vpaddb ymm1, ymm2, ymm3 ; c5 ed fc cb +vpaddb ymm1, ymm2, yword [rax] ; c5 ed fc 08 + +vpaddw ymm1, ymm3 ; c5 f5 fd cb +vpaddw ymm1, yword [rax] ; c5 f5 fd 08 +vpaddw ymm1, ymm2, ymm3 ; c5 ed fd cb +vpaddw ymm1, ymm2, yword [rax] ; c5 ed fd 08 + +vpaddd ymm1, ymm3 ; c5 f5 fe cb +vpaddd ymm1, yword [rax] ; c5 f5 fe 08 +vpaddd ymm1, ymm2, ymm3 ; c5 ed fe cb +vpaddd ymm1, ymm2, yword [rax] ; c5 ed fe 08 + +vpaddq ymm1, ymm3 ; c5 f5 d4 cb +vpaddq ymm1, yword [rax] ; c5 f5 d4 08 +vpaddq ymm1, ymm2, ymm3 ; c5 ed d4 cb +vpaddq ymm1, ymm2, yword [rax] ; c5 ed d4 08 + +vpaddsb ymm1, ymm3 ; c5 f5 ec cb +vpaddsb ymm1, yword [rax] ; c5 f5 ec 08 +vpaddsb ymm1, ymm2, ymm3 ; c5 ed ec cb +vpaddsb ymm1, ymm2, yword [rax] ; c5 ed ec 08 + +vpaddsw ymm1, ymm3 ; c5 f5 ed cb +vpaddsw ymm1, yword [rax] ; c5 f5 ed 08 +vpaddsw ymm1, ymm2, ymm3 ; c5 ed ed cb +vpaddsw ymm1, ymm2, yword [rax] ; c5 ed ed 08 + +vpaddusb ymm1, ymm3 ; c5 f5 dc cb +vpaddusb ymm1, yword [rax] ; c5 f5 dc 08 +vpaddusb ymm1, ymm2, ymm3 ; c5 ed dc cb +vpaddusb ymm1, ymm2, yword [rax] ; c5 ed dc 08 + +vpaddusw ymm1, ymm3 ; c5 f5 dd cb +vpaddusw ymm1, yword [rax] ; c5 f5 dd 08 +vpaddusw ymm1, ymm2, ymm3 ; c5 ed dd cb +vpaddusw ymm1, ymm2, yword [rax] ; c5 ed dd 08 + +vpalignr ymm1, ymm2, ymm3, 3 ; c4 e3 6d 0f cb 03 +vpalignr ymm1, ymm2, yword [rax], 3 ; c4 e3 6d 0f 08 03 + +vpand ymm1, ymm3 ; c5 f5 db cb +vpand ymm1, yword [rax] ; c5 f5 db 08 +vpand ymm1, ymm2, ymm3 ; c5 ed db cb +vpand ymm1, ymm2, yword [rax] ; c5 ed db 08 + +vpandn ymm1, ymm3 ; c5 f5 df cb +vpandn ymm1, yword [rax] ; c5 f5 df 08 +vpandn ymm1, ymm2, ymm3 ; c5 ed df cb +vpandn ymm1, ymm2, yword [rax] ; c5 ed df 08 + +vpavgb ymm1, ymm3 ; c5 f5 e0 cb +vpavgb ymm1, yword [rax] ; c5 f5 e0 08 +vpavgb ymm1, ymm2, ymm3 ; c5 ed e0 cb +vpavgb ymm1, ymm2, yword [rax] ; c5 ed e0 08 + +vpavgw ymm1, ymm3 ; c5 f5 e3 cb +vpavgw ymm1, yword [rax] ; c5 f5 e3 08 +vpavgw ymm1, ymm2, ymm3 ; c5 ed e3 cb +vpavgw ymm1, ymm2, yword [rax] ; c5 ed e3 08 + +vpblendvb ymm1, ymm2, ymm3, ymm4 ; c4 e3 6d 4c cb 40 +vpblendvb ymm1, ymm2, yword [rax], ymm4 ; c4 e3 6d 4c 08 40 + +vpblendw ymm1, ymm3, 3 ; c4 e3 75 0e cb 03 +vpblendw ymm1, yword [rax], 3 ; c4 e3 75 0e 08 03 +vpblendw ymm1, ymm2, ymm3, 3 ; c4 e3 6d 0e cb 03 +vpblendw ymm1, ymm2, yword [rax], 3 ; c4 e3 6d 0e 08 03 + +vpcmpeqb ymm1, ymm3 ; c5 f5 74 cb +vpcmpeqb ymm1, yword [rax] ; c5 f5 74 08 +vpcmpeqb ymm1, ymm2, ymm3 ; c5 ed 74 cb +vpcmpeqb ymm1, ymm2, yword [rax] ; c5 ed 74 08 + +vpcmpeqw ymm1, ymm3 ; c5 f5 75 cb +vpcmpeqw ymm1, yword [rax] ; c5 f5 75 08 +vpcmpeqw ymm1, ymm2, ymm3 ; c5 ed 75 cb +vpcmpeqw ymm1, ymm2, yword [rax] ; c5 ed 75 08 + +vpcmpeqd ymm1, ymm3 ; c5 f5 76 cb +vpcmpeqd ymm1, yword [rax] ; c5 f5 76 08 +vpcmpeqd ymm1, ymm2, ymm3 ; c5 ed 76 cb +vpcmpeqd ymm1, ymm2, yword [rax] ; c5 ed 76 08 + +vpcmpeqq ymm1, ymm3 ; c4 e2 75 29 cb +vpcmpeqq ymm1, yword [rax] ; c4 e2 75 29 08 +vpcmpeqq ymm1, ymm2, ymm3 ; c4 e2 6d 29 cb +vpcmpeqq ymm1, ymm2, yword [rax] ; c4 e2 6d 29 08 + +vpcmpgtb ymm1, ymm3 ; c5 f5 64 cb +vpcmpgtb ymm1, yword [rax] ; c5 f5 64 08 +vpcmpgtb ymm1, ymm2, ymm3 ; c5 ed 64 cb +vpcmpgtb ymm1, ymm2, yword [rax] ; c5 ed 64 08 + +vpcmpgtw ymm1, ymm3 ; c5 f5 65 cb +vpcmpgtw ymm1, yword [rax] ; c5 f5 65 08 +vpcmpgtw ymm1, ymm2, ymm3 ; c5 ed 65 cb +vpcmpgtw ymm1, ymm2, yword [rax] ; c5 ed 65 08 + +vpcmpgtd ymm1, ymm3 ; c5 f5 66 cb +vpcmpgtd ymm1, yword [rax] ; c5 f5 66 08 +vpcmpgtd ymm1, ymm2, ymm3 ; c5 ed 66 cb +vpcmpgtd ymm1, ymm2, yword [rax] ; c5 ed 66 08 + +vpcmpgtq ymm1, ymm3 ; c4 e2 75 37 cb +vpcmpgtq ymm1, yword [rax] ; c4 e2 75 37 08 +vpcmpgtq ymm1, ymm2, ymm3 ; c4 e2 6d 37 cb +vpcmpgtq ymm1, ymm2, yword [rax] ; c4 e2 6d 37 08 + +vphaddw ymm1, ymm3 ; c4 e2 75 01 cb +vphaddw ymm1, yword [rax] ; c4 e2 75 01 08 +vphaddw ymm1, ymm2, ymm3 ; c4 e2 6d 01 cb +vphaddw ymm1, ymm2, yword [rax] ; c4 e2 6d 01 08 + +vphaddd ymm1, ymm3 ; c4 e2 75 02 cb +vphaddd ymm1, yword [rax] ; c4 e2 75 02 08 +vphaddd ymm1, ymm2, ymm3 ; c4 e2 6d 02 cb +vphaddd ymm1, ymm2, yword [rax] ; c4 e2 6d 02 08 + +vphaddsw ymm1, ymm3 ; c4 e2 75 03 cb +vphaddsw ymm1, yword [rax] ; c4 e2 75 03 08 +vphaddsw ymm1, ymm2, ymm3 ; c4 e2 6d 03 cb +vphaddsw ymm1, ymm2, yword [rax] ; c4 e2 6d 03 08 + +vphsubw ymm1, ymm3 ; c4 e2 75 05 cb +vphsubw ymm1, yword [rax] ; c4 e2 75 05 08 +vphsubw ymm1, ymm2, ymm3 ; c4 e2 6d 05 cb +vphsubw ymm1, ymm2, yword [rax] ; c4 e2 6d 05 08 + +vphsubd ymm1, ymm3 ; c4 e2 75 06 cb +vphsubd ymm1, yword [rax] ; c4 e2 75 06 08 +vphsubd ymm1, ymm2, ymm3 ; c4 e2 6d 06 cb +vphsubd ymm1, ymm2, yword [rax] ; c4 e2 6d 06 08 + +vphsubsw ymm1, ymm3 ; c4 e2 75 07 cb +vphsubsw ymm1, yword [rax] ; c4 e2 75 07 08 +vphsubsw ymm1, ymm2, ymm3 ; c4 e2 6d 07 cb +vphsubsw ymm1, ymm2, yword [rax] ; c4 e2 6d 07 08 + +vpmaddubsw ymm1, ymm3 ; c4 e2 75 04 cb +vpmaddubsw ymm1, yword [rax] ; c4 e2 75 04 08 +vpmaddubsw ymm1, ymm2, ymm3 ; c4 e2 6d 04 cb +vpmaddubsw ymm1, ymm2, yword [rax] ; c4 e2 6d 04 08 + +vpmaddwd ymm1, ymm3 ; c5 f5 f5 cb +vpmaddwd ymm1, yword [rax] ; c5 f5 f5 08 +vpmaddwd ymm1, ymm2, ymm3 ; c5 ed f5 cb +vpmaddwd ymm1, ymm2, yword [rax] ; c5 ed f5 08 + +vpmaxsb ymm1, ymm3 ; c4 e2 75 3c cb +vpmaxsb ymm1, yword [rax] ; c4 e2 75 3c 08 +vpmaxsb ymm1, ymm2, ymm3 ; c4 e2 6d 3c cb +vpmaxsb ymm1, ymm2, yword [rax] ; c4 e2 6d 3c 08 + +vpmaxsw ymm1, ymm3 ; c5 f5 ee cb +vpmaxsw ymm1, yword [rax] ; c5 f5 ee 08 +vpmaxsw ymm1, ymm2, ymm3 ; c5 ed ee cb +vpmaxsw ymm1, ymm2, yword [rax] ; c5 ed ee 08 + +vpmaxsd ymm1, ymm3 ; c4 e2 75 3d cb +vpmaxsd ymm1, yword [rax] ; c4 e2 75 3d 08 +vpmaxsd ymm1, ymm2, ymm3 ; c4 e2 6d 3d cb +vpmaxsd ymm1, ymm2, yword [rax] ; c4 e2 6d 3d 08 + +vpmaxub ymm1, ymm3 ; c5 f5 de cb +vpmaxub ymm1, yword [rax] ; c5 f5 de 08 +vpmaxub ymm1, ymm2, ymm3 ; c5 ed de cb +vpmaxub ymm1, ymm2, yword [rax] ; c5 ed de 08 + +vpmaxuw ymm1, ymm3 ; c4 e2 75 3e cb +vpmaxuw ymm1, yword [rax] ; c4 e2 75 3e 08 +vpmaxuw ymm1, ymm2, ymm3 ; c4 e2 6d 3e cb +vpmaxuw ymm1, ymm2, yword [rax] ; c4 e2 6d 3e 08 + +vpmaxud ymm1, ymm3 ; c4 e2 75 3f cb +vpmaxud ymm1, yword [rax] ; c4 e2 75 3f 08 +vpmaxud ymm1, ymm2, ymm3 ; c4 e2 6d 3f cb +vpmaxud ymm1, ymm2, yword [rax] ; c4 e2 6d 3f 08 + +vpminsb ymm1, ymm3 ; c4 e2 75 38 cb +vpminsb ymm1, yword [rax] ; c4 e2 75 38 08 +vpminsb ymm1, ymm2, ymm3 ; c4 e2 6d 38 cb +vpminsb ymm1, ymm2, yword [rax] ; c4 e2 6d 38 08 + +vpminsw ymm1, ymm3 ; c5 f5 ea cb +vpminsw ymm1, yword [rax] ; c5 f5 ea 08 +vpminsw ymm1, ymm2, ymm3 ; c5 ed ea cb +vpminsw ymm1, ymm2, yword [rax] ; c5 ed ea 08 + +vpminsd ymm1, ymm3 ; c4 e2 75 39 cb +vpminsd ymm1, yword [rax] ; c4 e2 75 39 08 +vpminsd ymm1, ymm2, ymm3 ; c4 e2 6d 39 cb +vpminsd ymm1, ymm2, yword [rax] ; c4 e2 6d 39 08 + +vpminub ymm1, ymm3 ; c5 f5 da cb +vpminub ymm1, yword [rax] ; c5 f5 da 08 +vpminub ymm1, ymm2, ymm3 ; c5 ed da cb +vpminub ymm1, ymm2, yword [rax] ; c5 ed da 08 + +vpminuw ymm1, ymm3 ; c4 e2 75 3a cb +vpminuw ymm1, yword [rax] ; c4 e2 75 3a 08 +vpminuw ymm1, ymm2, ymm3 ; c4 e2 6d 3a cb +vpminuw ymm1, ymm2, yword [rax] ; c4 e2 6d 3a 08 + +vpminud ymm1, ymm3 ; c4 e2 75 3b cb +vpminud ymm1, yword [rax] ; c4 e2 75 3b 08 +vpminud ymm1, ymm2, ymm3 ; c4 e2 6d 3b cb +vpminud ymm1, ymm2, yword [rax] ; c4 e2 6d 3b 08 + +vpmovmskb eax, ymm1 ; c5 fd d7 c1 +vpmovmskb rax, ymm1 ; c5 fd d7 c1 + +vpmovsxbw ymm1, xmm2 ; c4 e2 7d 20 ca +vpmovsxbw ymm1, [rax] ; c4 e2 7d 20 08 +vpmovsxbw ymm1, oword [rax] ; c4 e2 7d 20 08 + +vpmovsxbd ymm1, xmm2 ; c4 e2 7d 21 ca +vpmovsxbd ymm1, [rax] ; c4 e2 7d 21 08 +vpmovsxbd ymm1, qword [rax] ; c4 e2 7d 21 08 + +vpmovsxbq ymm1, xmm2 ; c4 e2 7d 22 ca +vpmovsxbq ymm1, [rax] ; c4 e2 7d 22 08 +vpmovsxbq ymm1, dword [rax] ; c4 e2 7d 22 08 + +vpmovsxwd ymm1, xmm2 ; c4 e2 7d 23 ca +vpmovsxwd ymm1, [rax] ; c4 e2 7d 23 08 +vpmovsxwd ymm1, oword [rax] ; c4 e2 7d 23 08 + +vpmovsxwq ymm1, xmm2 ; c4 e2 7d 24 ca +vpmovsxwq ymm1, [rax] ; c4 e2 7d 24 08 +vpmovsxwq ymm1, qword [rax] ; c4 e2 7d 24 08 + +vpmovsxdq ymm1, xmm2 ; c4 e2 7d 25 ca +vpmovsxdq ymm1, [rax] ; c4 e2 7d 25 08 +vpmovsxdq ymm1, oword [rax] ; c4 e2 7d 25 08 + +vpmovzxbw ymm1, xmm2 ; c4 e2 7d 30 ca +vpmovzxbw ymm1, [rax] ; c4 e2 7d 30 08 +vpmovzxbw ymm1, oword [rax] ; c4 e2 7d 30 08 + +vpmovzxbd ymm1, xmm2 ; c4 e2 7d 31 ca +vpmovzxbd ymm1, [rax] ; c4 e2 7d 31 08 +vpmovzxbd ymm1, qword [rax] ; c4 e2 7d 31 08 + +vpmovzxbq ymm1, xmm2 ; c4 e2 7d 32 ca +vpmovzxbq ymm1, [rax] ; c4 e2 7d 32 08 +vpmovzxbq ymm1, dword [rax] ; c4 e2 7d 32 08 + +vpmovzxwd ymm1, xmm2 ; c4 e2 7d 33 ca +vpmovzxwd ymm1, [rax] ; c4 e2 7d 33 08 +vpmovzxwd ymm1, oword [rax] ; c4 e2 7d 33 08 + +vpmovzxwq ymm1, xmm2 ; c4 e2 7d 34 ca +vpmovzxwq ymm1, [rax] ; c4 e2 7d 34 08 +vpmovzxwq ymm1, qword [rax] ; c4 e2 7d 34 08 + +vpmovzxdq ymm1, xmm2 ; c4 e2 7d 35 ca +vpmovzxdq ymm1, [rax] ; c4 e2 7d 35 08 +vpmovzxdq ymm1, oword [rax] ; c4 e2 7d 35 08 + +vpmuldq ymm1, ymm3 ; c4 e2 75 28 cb +vpmuldq ymm1, yword [rax] ; c4 e2 75 28 08 +vpmuldq ymm1, ymm2, ymm3 ; c4 e2 6d 28 cb +vpmuldq ymm1, ymm2, yword [rax] ; c4 e2 6d 28 08 + +vpmulhrsw ymm1, ymm3 ; c4 e2 75 0b cb +vpmulhrsw ymm1, yword [rax] ; c4 e2 75 0b 08 +vpmulhrsw ymm1, ymm2, ymm3 ; c4 e2 6d 0b cb +vpmulhrsw ymm1, ymm2, yword [rax] ; c4 e2 6d 0b 08 + +vpmulhuw ymm1, ymm3 ; c5 f5 e4 cb +vpmulhuw ymm1, yword [rax] ; c5 f5 e4 08 +vpmulhuw ymm1, ymm2, ymm3 ; c5 ed e4 cb +vpmulhuw ymm1, ymm2, yword [rax] ; c5 ed e4 08 + +vpmulhw ymm1, ymm3 ; c5 f5 e5 cb +vpmulhw ymm1, yword [rax] ; c5 f5 e5 08 +vpmulhw ymm1, ymm2, ymm3 ; c5 ed e5 cb +vpmulhw ymm1, ymm2, yword [rax] ; c5 ed e5 08 + +vpmullw ymm1, ymm3 ; c5 f5 d5 cb +vpmullw ymm1, yword [rax] ; c5 f5 d5 08 +vpmullw ymm1, ymm2, ymm3 ; c5 ed d5 cb +vpmullw ymm1, ymm2, yword [rax] ; c5 ed d5 08 + +vpmulld ymm1, ymm3 ; c4 e2 75 40 cb +vpmulld ymm1, yword [rax] ; c4 e2 75 40 08 +vpmulld ymm1, ymm2, ymm3 ; c4 e2 6d 40 cb +vpmulld ymm1, ymm2, yword [rax] ; c4 e2 6d 40 08 + +vpmuludq ymm1, ymm3 ; c5 f5 f4 cb +vpmuludq ymm1, yword [rax] ; c5 f5 f4 08 +vpmuludq ymm1, ymm2, ymm3 ; c5 ed f4 cb +vpmuludq ymm1, ymm2, yword [rax] ; c5 ed f4 08 + +vpor ymm1, ymm3 ; c5 f5 eb cb +vpor ymm1, yword [rax] ; c5 f5 eb 08 +vpor ymm1, ymm2, ymm3 ; c5 ed eb cb +vpor ymm1, ymm2, yword [rax] ; c5 ed eb 08 + +vpsadbw ymm1, ymm3 ; c5 f5 f6 cb +vpsadbw ymm1, yword [rax] ; c5 f5 f6 08 +vpsadbw ymm1, ymm2, ymm3 ; c5 ed f6 cb +vpsadbw ymm1, ymm2, yword [rax] ; c5 ed f6 08 + +vpshufb ymm1, ymm3 ; c4 e2 75 00 cb +vpshufb ymm1, yword [rax] ; c4 e2 75 00 08 +vpshufb ymm1, ymm2, ymm3 ; c4 e2 6d 00 cb +vpshufb ymm1, ymm2, yword [rax] ; c4 e2 6d 00 08 + +vpshufd ymm1, ymm3, 3 ; c5 fd 70 cb 03 +vpshufd ymm1, yword [rax], 3 ; c5 fd 70 08 03 + +vpshufhw ymm1, ymm3, 3 ; c5 fe 70 cb 03 +vpshufhw ymm1, yword [rax], 3 ; c5 fe 70 08 03 + +vpshuflw ymm1, ymm3, 3 ; c5 ff 70 cb 03 +vpshuflw ymm1, yword [rax], 3 ; c5 ff 70 08 03 + +vpsignb ymm1, ymm3 ; c4 e2 75 08 cb +vpsignb ymm1, yword [rax] ; c4 e2 75 08 08 +vpsignb ymm1, ymm2, ymm3 ; c4 e2 6d 08 cb +vpsignb ymm1, ymm2, yword [rax] ; c4 e2 6d 08 08 + +vpsignw ymm1, ymm3 ; c4 e2 75 09 cb +vpsignw ymm1, yword [rax] ; c4 e2 75 09 08 +vpsignw ymm1, ymm2, ymm3 ; c4 e2 6d 09 cb +vpsignw ymm1, ymm2, yword [rax] ; c4 e2 6d 09 08 + +vpsignd ymm1, ymm3 ; c4 e2 75 0a cb +vpsignd ymm1, yword [rax] ; c4 e2 75 0a 08 +vpsignd ymm1, ymm2, ymm3 ; c4 e2 6d 0a cb +vpsignd ymm1, ymm2, yword [rax] ; c4 e2 6d 0a 08 + +vpslldq ymm1, 3 ; c5 f5 73 f9 03 +vpslldq ymm1, ymm2, 3 ; c5 f5 73 fa 03 + +vpsllw ymm1, xmm3 ; c5 f5 f1 cb +vpsllw ymm1, oword [rax] ; c5 f5 f1 08 +vpsllw ymm1, 3 ; c5 f5 71 f1 03 +vpsllw ymm1, ymm2, xmm3 ; c5 ed f1 cb +vpsllw ymm1, ymm2, oword [rax] ; c5 ed f1 08 +vpsllw ymm1, ymm2, 3 ; c5 f5 71 f2 03 + +vpslld ymm1, xmm3 ; c5 f5 f2 cb +vpslld ymm1, oword [rax] ; c5 f5 f2 08 +vpslld ymm1, 3 ; c5 f5 72 f1 03 +vpslld ymm1, ymm2, xmm3 ; c5 ed f2 cb +vpslld ymm1, ymm2, oword [rax] ; c5 ed f2 08 +vpslld ymm1, ymm2, 3 ; c5 f5 72 f2 03 + +vpsllq ymm1, xmm3 ; c5 f5 f3 cb +vpsllq ymm1, oword [rax] ; c5 f5 f3 08 +vpsllq ymm1, 3 ; c5 f5 73 f1 03 +vpsllq ymm1, ymm2, xmm3 ; c5 ed f3 cb +vpsllq ymm1, ymm2, oword [rax] ; c5 ed f3 08 +vpsllq ymm1, ymm2, 3 ; c5 f5 73 f2 03 + +vpsraw ymm1, xmm3 ; c5 f5 e1 cb +vpsraw ymm1, oword [rax] ; c5 f5 e1 08 +vpsraw ymm1, 3 ; c5 f5 71 e1 03 +vpsraw ymm1, ymm2, xmm3 ; c5 ed e1 cb +vpsraw ymm1, ymm2, oword [rax] ; c5 ed e1 08 +vpsraw ymm1, ymm2, 3 ; c5 f5 71 e2 03 + +vpsrad ymm1, xmm3 ; c5 f5 e2 cb +vpsrad ymm1, oword [rax] ; c5 f5 e2 08 +vpsrad ymm1, 3 ; c5 f5 72 e1 03 +vpsrad ymm1, ymm2, xmm3 ; c5 ed e2 cb +vpsrad ymm1, ymm2, oword [rax] ; c5 ed e2 08 +vpsrad ymm1, ymm2, 3 ; c5 f5 72 e2 03 + +vpsrldq ymm1, 3 ; c5 f5 73 d9 03 +vpsrldq ymm1, ymm2, 3 ; c5 f5 73 da 03 + +vpsrlw ymm1, xmm3 ; c5 f5 d1 cb +vpsrlw ymm1, oword [rax] ; c5 f5 d1 08 +vpsrlw ymm1, 3 ; c5 f5 71 d1 03 +vpsrlw ymm1, ymm2, xmm3 ; c5 ed d1 cb +vpsrlw ymm1, ymm2, oword [rax] ; c5 ed d1 08 +vpsrlw ymm1, ymm2, 3 ; c5 f5 71 d2 03 + +vpsrld ymm1, xmm3 ; c5 f5 d2 cb +vpsrld ymm1, oword [rax] ; c5 f5 d2 08 +vpsrld ymm1, 3 ; c5 f5 72 d1 03 +vpsrld ymm1, ymm2, xmm3 ; c5 ed d2 cb +vpsrld ymm1, ymm2, oword [rax] ; c5 ed d2 08 +vpsrld ymm1, ymm2, 3 ; c5 f5 72 d2 03 + +vpsrld ymm1, xmm3 ; c5 f5 d2 cb +vpsrld ymm1, oword [rax] ; c5 f5 d2 08 +vpsrld ymm1, 3 ; c5 f5 72 d1 03 +vpsrld ymm1, ymm2, xmm3 ; c5 ed d2 cb +vpsrld ymm1, ymm2, oword [rax] ; c5 ed d2 08 +vpsrld ymm1, ymm2, 3 ; c5 f5 72 d2 03 + +vpsubsb ymm1, ymm3 ; c5 f5 e8 cb +vpsubsb ymm1, yword [rax] ; c5 f5 e8 08 +vpsubsb ymm1, ymm2, ymm3 ; c5 ed e8 cb +vpsubsb ymm1, ymm2, yword [rax] ; c5 ed e8 08 + +vpsubsw ymm1, ymm3 ; c5 f5 e9 cb +vpsubsw ymm1, yword [rax] ; c5 f5 e9 08 +vpsubsw ymm1, ymm2, ymm3 ; c5 ed e9 cb +vpsubsw ymm1, ymm2, yword [rax] ; c5 ed e9 08 + +vpsubusb ymm1, ymm3 ; c5 f5 d8 cb +vpsubusb ymm1, yword [rax] ; c5 f5 d8 08 +vpsubusb ymm1, ymm2, ymm3 ; c5 ed d8 cb +vpsubusb ymm1, ymm2, yword [rax] ; c5 ed d8 08 + +vpsubusw ymm1, ymm3 ; c5 f5 d9 cb +vpsubusw ymm1, yword [rax] ; c5 f5 d9 08 +vpsubusw ymm1, ymm2, ymm3 ; c5 ed d9 cb +vpsubusw ymm1, ymm2, yword [rax] ; c5 ed d9 08 + +vpunpckhbw ymm1, ymm3 ; c5 f5 68 cb +vpunpckhbw ymm1, yword [rax] ; c5 f5 68 08 +vpunpckhbw ymm1, ymm2, ymm3 ; c5 ed 68 cb +vpunpckhbw ymm1, ymm2, yword [rax] ; c5 ed 68 08 + +vpunpckhwd ymm1, ymm3 ; c5 f5 69 cb +vpunpckhwd ymm1, yword [rax] ; c5 f5 69 08 +vpunpckhwd ymm1, ymm2, ymm3 ; c5 ed 69 cb +vpunpckhwd ymm1, ymm2, yword [rax] ; c5 ed 69 08 + +vpunpckhdq ymm1, ymm3 ; c5 f5 6a cb +vpunpckhdq ymm1, yword [rax] ; c5 f5 6a 08 +vpunpckhdq ymm1, ymm2, ymm3 ; c5 ed 6a cb +vpunpckhdq ymm1, ymm2, yword [rax] ; c5 ed 6a 08 + +vpunpckhqdq ymm1, ymm3 ; c5 f5 6d cb +vpunpckhqdq ymm1, yword [rax] ; c5 f5 6d 08 +vpunpckhqdq ymm1, ymm2, ymm3 ; c5 ed 6d cb +vpunpckhqdq ymm1, ymm2, yword [rax] ; c5 ed 6d 08 + +vpunpcklbw ymm1, ymm3 ; c5 f5 60 cb +vpunpcklbw ymm1, yword [rax] ; c5 f5 60 08 +vpunpcklbw ymm1, ymm2, ymm3 ; c5 ed 60 cb +vpunpcklbw ymm1, ymm2, yword [rax] ; c5 ed 60 08 + +vpunpcklwd ymm1, ymm3 ; c5 f5 61 cb +vpunpcklwd ymm1, yword [rax] ; c5 f5 61 08 +vpunpcklwd ymm1, ymm2, ymm3 ; c5 ed 61 cb +vpunpcklwd ymm1, ymm2, yword [rax] ; c5 ed 61 08 + +vpunpckldq ymm1, ymm3 ; c5 f5 62 cb +vpunpckldq ymm1, yword [rax] ; c5 f5 62 08 +vpunpckldq ymm1, ymm2, ymm3 ; c5 ed 62 cb +vpunpckldq ymm1, ymm2, yword [rax] ; c5 ed 62 08 + +vpunpcklqdq ymm1, ymm3 ; c5 f5 6c cb +vpunpcklqdq ymm1, yword [rax] ; c5 f5 6c 08 +vpunpcklqdq ymm1, ymm2, ymm3 ; c5 ed 6c cb +vpunpcklqdq ymm1, ymm2, yword [rax] ; c5 ed 6c 08 + +vpxor ymm1, ymm3 ; c5 f5 ef cb +vpxor ymm1, yword [rax] ; c5 f5 ef 08 +vpxor ymm1, ymm2, ymm3 ; c5 ed ef cb +vpxor ymm1, ymm2, yword [rax] ; c5 ed ef 08 + +vmovntdqa ymm1, yword [rax] ; c4 e2 7d 2a 08 + +vbroadcastss xmm1, xmm2 ; c4 e2 79 18 ca +vbroadcastss ymm1, xmm2 ; c4 e2 7d 18 ca + +vbroadcastsd ymm1, xmm2 ; c4 e2 7d 19 ca + +vbroadcasti128 ymm1, oword [rax] ; c4 e2 7d 5a 08 + +vpblendd ymm1, ymm2, ymm3, 3 ; c4 e3 6d 02 cb 03 +vpblendd ymm1, ymm2, yword [rax], 3 ; c4 e3 6d 02 08 03 + +vpbroadcastb xmm1, xmm2 ; c4 e2 79 78 ca +vpbroadcastb xmm1, byte [rax] ; c4 e2 79 78 08 +vpbroadcastb ymm1, xmm2 ; c4 e2 7d 78 ca +vpbroadcastb ymm1, byte [rax] ; c4 e2 7d 78 08 + +vpbroadcastw xmm1, xmm2 ; c4 e2 79 79 ca +vpbroadcastw xmm1, word [rax] ; c4 e2 79 79 08 +vpbroadcastw ymm1, xmm2 ; c4 e2 7d 79 ca +vpbroadcastw ymm1, word [rax] ; c4 e2 7d 79 08 + +vpbroadcastd xmm1, xmm2 ; c4 e2 79 58 ca +vpbroadcastd xmm1, dword [rax] ; c4 e2 79 58 08 +vpbroadcastd ymm1, xmm2 ; c4 e2 7d 58 ca +vpbroadcastd ymm1, dword [rax] ; c4 e2 7d 58 08 + +vpbroadcastq xmm1, xmm2 ; c4 e2 79 59 ca +vpbroadcastq xmm1, qword [rax] ; c4 e2 79 59 08 +vpbroadcastq ymm1, xmm2 ; c4 e2 7d 59 ca +vpbroadcastq ymm1, qword [rax] ; c4 e2 7d 59 08 + +vpermd ymm1, ymm2, ymm3 ; c4 e2 6d 36 cb +vpermd ymm1, ymm2, yword [rax] ; c4 e2 6d 36 08 + +vpermpd ymm1, ymm2, 3 ; c4 e3 fd 01 ca 03 +vpermpd ymm1, yword [rax], 3 ; c4 e3 fd 01 08 03 + +vpermps ymm1, ymm2, ymm3 ; c4 e2 6d 16 cb +vpermps ymm1, ymm2, yword [rax] ; c4 e2 6d 16 08 + +vpermq ymm1, ymm2, 3 ; c4 e3 fd 00 ca 03 +vpermq ymm1, yword [rax], 3 ; c4 e3 fd 00 08 03 + +vperm2i128 ymm1, ymm2, ymm3, 3 ; c4 e3 6d 46 cb 03 +vperm2i128 ymm1, ymm2, yword [rax], 3 ; c4 e3 6d 46 08 03 + +vextracti128 xmm1, ymm2, 3 ; c4 e3 7d 39 d1 03 +vextracti128 oword [rax], ymm2, 3 ; c4 e3 7d 39 10 03 + +vinserti128 ymm1, ymm2, xmm3, 3 ; c4 e3 6d 38 cb 03 +vinserti128 ymm1, ymm2, oword [rax], 3 ; c4 e3 6d 38 08 03 + +vpmaskmovd xmm1, xmm2, oword [rax] ; c4 e2 69 8c 08 +vpmaskmovd ymm1, ymm2, yword [rax] ; c4 e2 6d 8c 08 +vpmaskmovd oword [rax], xmm1, xmm2 ; c4 e2 71 8e 10 +vpmaskmovd yword [rax], ymm1, ymm2 ; c4 e2 75 8e 10 + +vpmaskmovq xmm1, xmm2, oword [rax] ; c4 e2 e9 8c 08 +vpmaskmovq ymm1, ymm2, yword [rax] ; c4 e2 ed 8c 08 +vpmaskmovq oword [rax], xmm1, xmm2 ; c4 e2 f1 8e 10 +vpmaskmovq yword [rax], ymm1, ymm2 ; c4 e2 f5 8e 10 + +vpsllvd xmm1, xmm2, xmm3 ; c4 e2 69 47 cb +vpsllvd xmm1, xmm2, oword [rax] ; c4 e2 69 47 08 +vpsllvd ymm1, ymm2, ymm3 ; c4 e2 6d 47 cb +vpsllvd ymm1, ymm2, yword [rax] ; c4 e2 6d 47 08 + +vpsllvq xmm1, xmm2, xmm3 ; c4 e2 e9 47 cb +vpsllvq xmm1, xmm2, oword [rax] ; c4 e2 e9 47 08 +vpsllvq ymm1, ymm2, ymm3 ; c4 e2 ed 47 cb +vpsllvq ymm1, ymm2, yword [rax] ; c4 e2 ed 47 08 + +vpsravd xmm1, xmm2, xmm3 ; c4 e2 69 46 cb +vpsravd xmm1, xmm2, oword [rax] ; c4 e2 69 46 08 +vpsravd ymm1, ymm2, ymm3 ; c4 e2 6d 46 cb +vpsravd ymm1, ymm2, yword [rax] ; c4 e2 6d 46 08 + +vpsrlvd xmm1, xmm2, xmm3 ; c4 e2 69 45 cb +vpsrlvd xmm1, xmm2, oword [rax] ; c4 e2 69 45 08 +vpsrlvd ymm1, ymm2, ymm3 ; c4 e2 6d 45 cb +vpsrlvd ymm1, ymm2, yword [rax] ; c4 e2 6d 45 08 + +vpsrlvq xmm1, xmm2, xmm3 ; c4 e2 e9 45 cb +vpsrlvq xmm1, xmm2, oword [rax] ; c4 e2 e9 45 08 +vpsrlvq ymm1, ymm2, ymm3 ; c4 e2 ed 45 cb +vpsrlvq ymm1, ymm2, yword [rax] ; c4 e2 ed 45 08 + +vgatherdpd xmm1, [rax+xmm1], xmm2 ; c4 e2 e9 92 0c 08 +vgatherdpd xmm1, qword [rax+xmm1], xmm2 ; c4 e2 e9 92 0c 08 +vgatherdpd ymm1, [rax+xmm1], ymm2 ; c4 e2 ed 92 0c 08 +vgatherdpd ymm1, qword [rax+xmm1], ymm2 ; c4 e2 ed 92 0c 08 + +vgatherqpd xmm1, [rax+xmm1], xmm2 ; c4 e2 e9 93 0c 08 +vgatherqpd xmm1, qword [rax+xmm1], xmm2 ; c4 e2 e9 93 0c 08 +vgatherqpd ymm1, [rax+ymm1], ymm2 ; c4 e2 ed 93 0c 08 +vgatherqpd ymm1, qword [rax+ymm1], ymm2 ; c4 e2 ed 93 0c 08 + +vgatherdps xmm1, [rax+xmm1], xmm2 ; c4 e2 69 92 0c 08 +vgatherdps xmm1, dword [rax+xmm1], xmm2 ; c4 e2 69 92 0c 08 +vgatherdps ymm1, [rax+ymm1], ymm2 ; c4 e2 6d 92 0c 08 +vgatherdps ymm1, dword [rax+ymm1], ymm2 ; c4 e2 6d 92 0c 08 + +vgatherqps xmm1, [rax+xmm1], xmm2 ; c4 e2 69 93 0c 08 +vgatherqps xmm1, dword [rax+xmm1], xmm2 ; c4 e2 69 93 0c 08 +vgatherqps xmm1, [rax+ymm1], xmm2 ; c4 e2 6d 93 0c 08 +vgatherqps xmm1, dword [rax+ymm1], xmm2 ; c4 e2 6d 93 0c 08 + +vpgatherdd xmm1, [rax+xmm1], xmm2 ; c4 e2 69 90 0c 08 +vpgatherdd xmm1, dword [rax+xmm1], xmm2 ; c4 e2 69 90 0c 08 +vpgatherdd ymm1, [rax+ymm1], ymm2 ; c4 e2 6d 90 0c 08 +vpgatherdd ymm1, dword [rax+ymm1], ymm2 ; c4 e2 6d 90 0c 08 + +vpgatherqd xmm1, [rax+xmm1], xmm2 ; c4 e2 69 91 0c 08 +vpgatherqd xmm1, dword [rax+xmm1], xmm2 ; c4 e2 69 91 0c 08 +vpgatherqd xmm1, [rax+ymm1], xmm2 ; c4 e2 6d 91 0c 08 +vpgatherqd xmm1, dword [rax+ymm1], xmm2 ; c4 e2 6d 91 0c 08 + +vpgatherdq xmm1, [rax+xmm1], xmm2 ; c4 e2 e9 90 0c 08 +vpgatherdq xmm1, qword [rax+xmm1], xmm2 ; c4 e2 e9 90 0c 08 +vpgatherdq ymm1, [rax+xmm1], ymm2 ; c4 e2 ed 90 0c 08 +vpgatherdq ymm1, qword [rax+xmm1], ymm2 ; c4 e2 ed 90 0c 08 + +vpgatherqq xmm1, [rax+xmm1], xmm2 ; c4 e2 e9 91 0c 08 +vpgatherqq xmm1, qword [rax+xmm1], xmm2 ; c4 e2 e9 91 0c 08 +vpgatherqq ymm1, [rax+ymm1], ymm2 ; c4 e2 ed 91 0c 08 +vpgatherqq ymm1, qword [rax+ymm1], ymm2 ; c4 e2 ed 91 0c 08 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx2.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx2.hex new file mode 100644 index 0000000000..17f84bd3a6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avx2.hex @@ -0,0 +1,2297 @@ +c4 +e3 +75 +42 +cb +03 +c4 +e3 +75 +42 +08 +03 +c4 +e3 +6d +42 +cb +03 +c4 +e3 +6d +42 +08 +03 +c4 +e2 +7d +1c +ca +c4 +e2 +7d +1c +08 +c4 +e2 +7d +1d +ca +c4 +e2 +7d +1d +08 +c4 +e2 +7d +1e +ca +c4 +e2 +7d +1e +08 +c5 +f5 +63 +cb +c5 +f5 +63 +08 +c5 +ed +63 +cb +c5 +ed +63 +08 +c5 +f5 +6b +cb +c5 +f5 +6b +08 +c5 +ed +6b +cb +c5 +ed +6b +08 +c4 +e2 +75 +2b +cb +c4 +e2 +75 +2b +08 +c4 +e2 +6d +2b +cb +c4 +e2 +6d +2b +08 +c5 +f5 +67 +cb +c5 +f5 +67 +08 +c5 +ed +67 +cb +c5 +ed +67 +08 +c5 +f5 +fc +cb +c5 +f5 +fc +08 +c5 +ed +fc +cb +c5 +ed +fc +08 +c5 +f5 +fd +cb +c5 +f5 +fd +08 +c5 +ed +fd +cb +c5 +ed +fd +08 +c5 +f5 +fe +cb +c5 +f5 +fe +08 +c5 +ed +fe +cb +c5 +ed +fe +08 +c5 +f5 +d4 +cb +c5 +f5 +d4 +08 +c5 +ed +d4 +cb +c5 +ed +d4 +08 +c5 +f5 +ec +cb +c5 +f5 +ec +08 +c5 +ed +ec +cb +c5 +ed +ec +08 +c5 +f5 +ed +cb +c5 +f5 +ed +08 +c5 +ed +ed +cb +c5 +ed +ed +08 +c5 +f5 +dc +cb +c5 +f5 +dc +08 +c5 +ed +dc +cb +c5 +ed +dc +08 +c5 +f5 +dd +cb +c5 +f5 +dd +08 +c5 +ed +dd +cb +c5 +ed +dd +08 +c4 +e3 +6d +0f +cb +03 +c4 +e3 +6d +0f +08 +03 +c5 +f5 +db +cb +c5 +f5 +db +08 +c5 +ed +db +cb +c5 +ed +db +08 +c5 +f5 +df +cb +c5 +f5 +df +08 +c5 +ed +df +cb +c5 +ed +df +08 +c5 +f5 +e0 +cb +c5 +f5 +e0 +08 +c5 +ed +e0 +cb +c5 +ed +e0 +08 +c5 +f5 +e3 +cb +c5 +f5 +e3 +08 +c5 +ed +e3 +cb +c5 +ed +e3 +08 +c4 +e3 +6d +4c +cb +40 +c4 +e3 +6d +4c +08 +40 +c4 +e3 +75 +0e +cb +03 +c4 +e3 +75 +0e +08 +03 +c4 +e3 +6d +0e +cb +03 +c4 +e3 +6d +0e +08 +03 +c5 +f5 +74 +cb +c5 +f5 +74 +08 +c5 +ed +74 +cb +c5 +ed +74 +08 +c5 +f5 +75 +cb +c5 +f5 +75 +08 +c5 +ed +75 +cb +c5 +ed +75 +08 +c5 +f5 +76 +cb +c5 +f5 +76 +08 +c5 +ed +76 +cb +c5 +ed +76 +08 +c4 +e2 +75 +29 +cb +c4 +e2 +75 +29 +08 +c4 +e2 +6d +29 +cb +c4 +e2 +6d +29 +08 +c5 +f5 +64 +cb +c5 +f5 +64 +08 +c5 +ed +64 +cb +c5 +ed +64 +08 +c5 +f5 +65 +cb +c5 +f5 +65 +08 +c5 +ed +65 +cb +c5 +ed +65 +08 +c5 +f5 +66 +cb +c5 +f5 +66 +08 +c5 +ed +66 +cb +c5 +ed +66 +08 +c4 +e2 +75 +37 +cb +c4 +e2 +75 +37 +08 +c4 +e2 +6d +37 +cb +c4 +e2 +6d +37 +08 +c4 +e2 +75 +01 +cb +c4 +e2 +75 +01 +08 +c4 +e2 +6d +01 +cb +c4 +e2 +6d +01 +08 +c4 +e2 +75 +02 +cb +c4 +e2 +75 +02 +08 +c4 +e2 +6d +02 +cb +c4 +e2 +6d +02 +08 +c4 +e2 +75 +03 +cb +c4 +e2 +75 +03 +08 +c4 +e2 +6d +03 +cb +c4 +e2 +6d +03 +08 +c4 +e2 +75 +05 +cb +c4 +e2 +75 +05 +08 +c4 +e2 +6d +05 +cb +c4 +e2 +6d +05 +08 +c4 +e2 +75 +06 +cb +c4 +e2 +75 +06 +08 +c4 +e2 +6d +06 +cb +c4 +e2 +6d +06 +08 +c4 +e2 +75 +07 +cb +c4 +e2 +75 +07 +08 +c4 +e2 +6d +07 +cb +c4 +e2 +6d +07 +08 +c4 +e2 +75 +04 +cb +c4 +e2 +75 +04 +08 +c4 +e2 +6d +04 +cb +c4 +e2 +6d +04 +08 +c5 +f5 +f5 +cb +c5 +f5 +f5 +08 +c5 +ed +f5 +cb +c5 +ed +f5 +08 +c4 +e2 +75 +3c +cb +c4 +e2 +75 +3c +08 +c4 +e2 +6d +3c +cb +c4 +e2 +6d +3c +08 +c5 +f5 +ee +cb +c5 +f5 +ee +08 +c5 +ed +ee +cb +c5 +ed +ee +08 +c4 +e2 +75 +3d +cb +c4 +e2 +75 +3d +08 +c4 +e2 +6d +3d +cb +c4 +e2 +6d +3d +08 +c5 +f5 +de +cb +c5 +f5 +de +08 +c5 +ed +de +cb +c5 +ed +de +08 +c4 +e2 +75 +3e +cb +c4 +e2 +75 +3e +08 +c4 +e2 +6d +3e +cb +c4 +e2 +6d +3e +08 +c4 +e2 +75 +3f +cb +c4 +e2 +75 +3f +08 +c4 +e2 +6d +3f +cb +c4 +e2 +6d +3f +08 +c4 +e2 +75 +38 +cb +c4 +e2 +75 +38 +08 +c4 +e2 +6d +38 +cb +c4 +e2 +6d +38 +08 +c5 +f5 +ea +cb +c5 +f5 +ea +08 +c5 +ed +ea +cb +c5 +ed +ea +08 +c4 +e2 +75 +39 +cb +c4 +e2 +75 +39 +08 +c4 +e2 +6d +39 +cb +c4 +e2 +6d +39 +08 +c5 +f5 +da +cb +c5 +f5 +da +08 +c5 +ed +da +cb +c5 +ed +da +08 +c4 +e2 +75 +3a +cb +c4 +e2 +75 +3a +08 +c4 +e2 +6d +3a +cb +c4 +e2 +6d +3a +08 +c4 +e2 +75 +3b +cb +c4 +e2 +75 +3b +08 +c4 +e2 +6d +3b +cb +c4 +e2 +6d +3b +08 +c5 +fd +d7 +c1 +c5 +fd +d7 +c1 +c4 +e2 +7d +20 +ca +c4 +e2 +7d +20 +08 +c4 +e2 +7d +20 +08 +c4 +e2 +7d +21 +ca +c4 +e2 +7d +21 +08 +c4 +e2 +7d +21 +08 +c4 +e2 +7d +22 +ca +c4 +e2 +7d +22 +08 +c4 +e2 +7d +22 +08 +c4 +e2 +7d +23 +ca +c4 +e2 +7d +23 +08 +c4 +e2 +7d +23 +08 +c4 +e2 +7d +24 +ca +c4 +e2 +7d +24 +08 +c4 +e2 +7d +24 +08 +c4 +e2 +7d +25 +ca +c4 +e2 +7d +25 +08 +c4 +e2 +7d +25 +08 +c4 +e2 +7d +30 +ca +c4 +e2 +7d +30 +08 +c4 +e2 +7d +30 +08 +c4 +e2 +7d +31 +ca +c4 +e2 +7d +31 +08 +c4 +e2 +7d +31 +08 +c4 +e2 +7d +32 +ca +c4 +e2 +7d +32 +08 +c4 +e2 +7d +32 +08 +c4 +e2 +7d +33 +ca +c4 +e2 +7d +33 +08 +c4 +e2 +7d +33 +08 +c4 +e2 +7d +34 +ca +c4 +e2 +7d +34 +08 +c4 +e2 +7d +34 +08 +c4 +e2 +7d +35 +ca +c4 +e2 +7d +35 +08 +c4 +e2 +7d +35 +08 +c4 +e2 +75 +28 +cb +c4 +e2 +75 +28 +08 +c4 +e2 +6d +28 +cb +c4 +e2 +6d +28 +08 +c4 +e2 +75 +0b +cb +c4 +e2 +75 +0b +08 +c4 +e2 +6d +0b +cb +c4 +e2 +6d +0b +08 +c5 +f5 +e4 +cb +c5 +f5 +e4 +08 +c5 +ed +e4 +cb +c5 +ed +e4 +08 +c5 +f5 +e5 +cb +c5 +f5 +e5 +08 +c5 +ed +e5 +cb +c5 +ed +e5 +08 +c5 +f5 +d5 +cb +c5 +f5 +d5 +08 +c5 +ed +d5 +cb +c5 +ed +d5 +08 +c4 +e2 +75 +40 +cb +c4 +e2 +75 +40 +08 +c4 +e2 +6d +40 +cb +c4 +e2 +6d +40 +08 +c5 +f5 +f4 +cb +c5 +f5 +f4 +08 +c5 +ed +f4 +cb +c5 +ed +f4 +08 +c5 +f5 +eb +cb +c5 +f5 +eb +08 +c5 +ed +eb +cb +c5 +ed +eb +08 +c5 +f5 +f6 +cb +c5 +f5 +f6 +08 +c5 +ed +f6 +cb +c5 +ed +f6 +08 +c4 +e2 +75 +00 +cb +c4 +e2 +75 +00 +08 +c4 +e2 +6d +00 +cb +c4 +e2 +6d +00 +08 +c5 +fd +70 +cb +03 +c5 +fd +70 +08 +03 +c5 +fe +70 +cb +03 +c5 +fe +70 +08 +03 +c5 +ff +70 +cb +03 +c5 +ff +70 +08 +03 +c4 +e2 +75 +08 +cb +c4 +e2 +75 +08 +08 +c4 +e2 +6d +08 +cb +c4 +e2 +6d +08 +08 +c4 +e2 +75 +09 +cb +c4 +e2 +75 +09 +08 +c4 +e2 +6d +09 +cb +c4 +e2 +6d +09 +08 +c4 +e2 +75 +0a +cb +c4 +e2 +75 +0a +08 +c4 +e2 +6d +0a +cb +c4 +e2 +6d +0a +08 +c5 +f5 +73 +f9 +03 +c5 +f5 +73 +fa +03 +c5 +f5 +f1 +cb +c5 +f5 +f1 +08 +c5 +f5 +71 +f1 +03 +c5 +ed +f1 +cb +c5 +ed +f1 +08 +c5 +f5 +71 +f2 +03 +c5 +f5 +f2 +cb +c5 +f5 +f2 +08 +c5 +f5 +72 +f1 +03 +c5 +ed +f2 +cb +c5 +ed +f2 +08 +c5 +f5 +72 +f2 +03 +c5 +f5 +f3 +cb +c5 +f5 +f3 +08 +c5 +f5 +73 +f1 +03 +c5 +ed +f3 +cb +c5 +ed +f3 +08 +c5 +f5 +73 +f2 +03 +c5 +f5 +e1 +cb +c5 +f5 +e1 +08 +c5 +f5 +71 +e1 +03 +c5 +ed +e1 +cb +c5 +ed +e1 +08 +c5 +f5 +71 +e2 +03 +c5 +f5 +e2 +cb +c5 +f5 +e2 +08 +c5 +f5 +72 +e1 +03 +c5 +ed +e2 +cb +c5 +ed +e2 +08 +c5 +f5 +72 +e2 +03 +c5 +f5 +73 +d9 +03 +c5 +f5 +73 +da +03 +c5 +f5 +d1 +cb +c5 +f5 +d1 +08 +c5 +f5 +71 +d1 +03 +c5 +ed +d1 +cb +c5 +ed +d1 +08 +c5 +f5 +71 +d2 +03 +c5 +f5 +d2 +cb +c5 +f5 +d2 +08 +c5 +f5 +72 +d1 +03 +c5 +ed +d2 +cb +c5 +ed +d2 +08 +c5 +f5 +72 +d2 +03 +c5 +f5 +d2 +cb +c5 +f5 +d2 +08 +c5 +f5 +72 +d1 +03 +c5 +ed +d2 +cb +c5 +ed +d2 +08 +c5 +f5 +72 +d2 +03 +c5 +f5 +e8 +cb +c5 +f5 +e8 +08 +c5 +ed +e8 +cb +c5 +ed +e8 +08 +c5 +f5 +e9 +cb +c5 +f5 +e9 +08 +c5 +ed +e9 +cb +c5 +ed +e9 +08 +c5 +f5 +d8 +cb +c5 +f5 +d8 +08 +c5 +ed +d8 +cb +c5 +ed +d8 +08 +c5 +f5 +d9 +cb +c5 +f5 +d9 +08 +c5 +ed +d9 +cb +c5 +ed +d9 +08 +c5 +f5 +68 +cb +c5 +f5 +68 +08 +c5 +ed +68 +cb +c5 +ed +68 +08 +c5 +f5 +69 +cb +c5 +f5 +69 +08 +c5 +ed +69 +cb +c5 +ed +69 +08 +c5 +f5 +6a +cb +c5 +f5 +6a +08 +c5 +ed +6a +cb +c5 +ed +6a +08 +c5 +f5 +6d +cb +c5 +f5 +6d +08 +c5 +ed +6d +cb +c5 +ed +6d +08 +c5 +f5 +60 +cb +c5 +f5 +60 +08 +c5 +ed +60 +cb +c5 +ed +60 +08 +c5 +f5 +61 +cb +c5 +f5 +61 +08 +c5 +ed +61 +cb +c5 +ed +61 +08 +c5 +f5 +62 +cb +c5 +f5 +62 +08 +c5 +ed +62 +cb +c5 +ed +62 +08 +c5 +f5 +6c +cb +c5 +f5 +6c +08 +c5 +ed +6c +cb +c5 +ed +6c +08 +c5 +f5 +ef +cb +c5 +f5 +ef +08 +c5 +ed +ef +cb +c5 +ed +ef +08 +c4 +e2 +7d +2a +08 +c4 +e2 +79 +18 +ca +c4 +e2 +7d +18 +ca +c4 +e2 +7d +19 +ca +c4 +e2 +7d +5a +08 +c4 +e3 +6d +02 +cb +03 +c4 +e3 +6d +02 +08 +03 +c4 +e2 +79 +78 +ca +c4 +e2 +79 +78 +08 +c4 +e2 +7d +78 +ca +c4 +e2 +7d +78 +08 +c4 +e2 +79 +79 +ca +c4 +e2 +79 +79 +08 +c4 +e2 +7d +79 +ca +c4 +e2 +7d +79 +08 +c4 +e2 +79 +58 +ca +c4 +e2 +79 +58 +08 +c4 +e2 +7d +58 +ca +c4 +e2 +7d +58 +08 +c4 +e2 +79 +59 +ca +c4 +e2 +79 +59 +08 +c4 +e2 +7d +59 +ca +c4 +e2 +7d +59 +08 +c4 +e2 +6d +36 +cb +c4 +e2 +6d +36 +08 +c4 +e3 +fd +01 +ca +03 +c4 +e3 +fd +01 +08 +03 +c4 +e2 +6d +16 +cb +c4 +e2 +6d +16 +08 +c4 +e3 +fd +00 +ca +03 +c4 +e3 +fd +00 +08 +03 +c4 +e3 +6d +46 +cb +03 +c4 +e3 +6d +46 +08 +03 +c4 +e3 +7d +39 +d1 +03 +c4 +e3 +7d +39 +10 +03 +c4 +e3 +6d +38 +cb +03 +c4 +e3 +6d +38 +08 +03 +c4 +e2 +69 +8c +08 +c4 +e2 +6d +8c +08 +c4 +e2 +71 +8e +10 +c4 +e2 +75 +8e +10 +c4 +e2 +e9 +8c +08 +c4 +e2 +ed +8c +08 +c4 +e2 +f1 +8e +10 +c4 +e2 +f5 +8e +10 +c4 +e2 +69 +47 +cb +c4 +e2 +69 +47 +08 +c4 +e2 +6d +47 +cb +c4 +e2 +6d +47 +08 +c4 +e2 +e9 +47 +cb +c4 +e2 +e9 +47 +08 +c4 +e2 +ed +47 +cb +c4 +e2 +ed +47 +08 +c4 +e2 +69 +46 +cb +c4 +e2 +69 +46 +08 +c4 +e2 +6d +46 +cb +c4 +e2 +6d +46 +08 +c4 +e2 +69 +45 +cb +c4 +e2 +69 +45 +08 +c4 +e2 +6d +45 +cb +c4 +e2 +6d +45 +08 +c4 +e2 +e9 +45 +cb +c4 +e2 +e9 +45 +08 +c4 +e2 +ed +45 +cb +c4 +e2 +ed +45 +08 +c4 +e2 +e9 +92 +0c +08 +c4 +e2 +e9 +92 +0c +08 +c4 +e2 +ed +92 +0c +08 +c4 +e2 +ed +92 +0c +08 +c4 +e2 +e9 +93 +0c +08 +c4 +e2 +e9 +93 +0c +08 +c4 +e2 +ed +93 +0c +08 +c4 +e2 +ed +93 +0c +08 +c4 +e2 +69 +92 +0c +08 +c4 +e2 +69 +92 +0c +08 +c4 +e2 +6d +92 +0c +08 +c4 +e2 +6d +92 +0c +08 +c4 +e2 +69 +93 +0c +08 +c4 +e2 +69 +93 +0c +08 +c4 +e2 +6d +93 +0c +08 +c4 +e2 +6d +93 +0c +08 +c4 +e2 +69 +90 +0c +08 +c4 +e2 +69 +90 +0c +08 +c4 +e2 +6d +90 +0c +08 +c4 +e2 +6d +90 +0c +08 +c4 +e2 +69 +91 +0c +08 +c4 +e2 +69 +91 +0c +08 +c4 +e2 +6d +91 +0c +08 +c4 +e2 +6d +91 +0c +08 +c4 +e2 +e9 +90 +0c +08 +c4 +e2 +e9 +90 +0c +08 +c4 +e2 +ed +90 +0c +08 +c4 +e2 +ed +90 +0c +08 +c4 +e2 +e9 +91 +0c +08 +c4 +e2 +e9 +91 +0c +08 +c4 +e2 +ed +91 +0c +08 +c4 +e2 +ed +91 +0c +08 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avxcc.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avxcc.asm new file mode 100644 index 0000000000..bcde2563bd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avxcc.asm @@ -0,0 +1,899 @@ +; Exhaustive test of AVX condition code aliases +; Also includes based-upon SSE instructions for comparison +; +; Copyright (C) 2008 Peter Johnson +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions +; are met: +; 1. Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; 2. Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in the +; documentation and/or other materials provided with the distribution. +; +; THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. +; + +[bits 64] + +cmpeqpd xmm1, xmm2 ; 00h +cmpltpd xmm1, xmm2 ; 01h +cmplepd xmm1, xmm2 ; 02h +cmpunordpd xmm1, xmm2 ; 03h +cmpneqpd xmm1, xmm2 ; 04h +cmpnltpd xmm1, xmm2 ; 05h +cmpnlepd xmm1, xmm2 ; 06h +cmpordpd xmm1, xmm2 ; 07h + +vcmpeqpd xmm1, xmm2 ; 00h +vcmpltpd xmm1, xmm2 ; 01h +vcmplepd xmm1, xmm2 ; 02h +vcmpunordpd xmm1, xmm2 ; 03h +vcmpneqpd xmm1, xmm2 ; 04h +vcmpnltpd xmm1, xmm2 ; 05h +vcmpnlepd xmm1, xmm2 ; 06h +vcmpordpd xmm1, xmm2 ; 07h + +vcmpeqpd xmm1, xmm2, xmm3 ; 00h +vcmpltpd xmm1, xmm2, xmm3 ; 01h +vcmplepd xmm1, xmm2, xmm3 ; 02h +vcmpunordpd xmm1, xmm2, xmm3 ; 03h +vcmpneqpd xmm1, xmm2, xmm3 ; 04h +vcmpnltpd xmm1, xmm2, xmm3 ; 05h +vcmpnlepd xmm1, xmm2, xmm3 ; 06h +vcmpordpd xmm1, xmm2, xmm3 ; 07h + +vcmpeq_uqpd xmm1, xmm2, xmm3 ; 08h +vcmpngepd xmm1, xmm2, xmm3 ; 09h +vcmpngtpd xmm1, xmm2, xmm3 ; 0Ah +vcmpfalsepd xmm1, xmm2, xmm3 ; 0Bh +vcmpneq_oqpd xmm1, xmm2, xmm3 ; 0Ch +vcmpgepd xmm1, xmm2, xmm3 ; 0Dh +vcmpgtpd xmm1, xmm2, xmm3 ; 0Eh +vcmptruepd xmm1, xmm2, xmm3 ; 0Fh + +vcmpeq_ospd xmm1, xmm2, xmm3 ; 10h +vcmplt_oqpd xmm1, xmm2, xmm3 ; 11h +vcmple_oqpd xmm1, xmm2, xmm3 ; 12h +vcmpunord_spd xmm1, xmm2, xmm3 ; 13h +vcmpneq_uspd xmm1, xmm2, xmm3 ; 14h +vcmpnlt_uqpd xmm1, xmm2, xmm3 ; 15h +vcmpnle_uqpd xmm1, xmm2, xmm3 ; 16h +vcmpord_spd xmm1, xmm2, xmm3 ; 17h + +vcmpeq_uspd xmm1, xmm2, xmm3 ; 18h +vcmpnge_uqpd xmm1, xmm2, xmm3 ; 19h +vcmpngt_uqpd xmm1, xmm2, xmm3 ; 1Ah +vcmpfalse_ospd xmm1, xmm2, xmm3 ; 1Bh +vcmpneq_ospd xmm1, xmm2, xmm3 ; 1Ch +vcmpge_oqpd xmm1, xmm2, xmm3 ; 1Dh +vcmpgt_oqpd xmm1, xmm2, xmm3 ; 1Eh +vcmptrue_uspd xmm1, xmm2, xmm3 ; 1Fh + +cmpeqpd xmm1, [rax] ; 00h +cmpltpd xmm1, [rax] ; 01h +cmplepd xmm1, [rax] ; 02h +cmpunordpd xmm1, [rax] ; 03h +cmpneqpd xmm1, [rax] ; 04h +cmpnltpd xmm1, [rax] ; 05h +cmpnlepd xmm1, [rax] ; 06h +cmpordpd xmm1, [rax] ; 07h + +vcmpeqpd xmm1, [rax] ; 00h +vcmpltpd xmm1, [rax] ; 01h +vcmplepd xmm1, [rax] ; 02h +vcmpunordpd xmm1, [rax] ; 03h +vcmpneqpd xmm1, [rax] ; 04h +vcmpnltpd xmm1, [rax] ; 05h +vcmpnlepd xmm1, [rax] ; 06h +vcmpordpd xmm1, [rax] ; 07h + +vcmpeqpd xmm1, xmm2, [rax] ; 00h +vcmpltpd xmm1, xmm2, [rax] ; 01h +vcmplepd xmm1, xmm2, [rax] ; 02h +vcmpunordpd xmm1, xmm2, [rax] ; 03h +vcmpneqpd xmm1, xmm2, [rax] ; 04h +vcmpnltpd xmm1, xmm2, [rax] ; 05h +vcmpnlepd xmm1, xmm2, [rax] ; 06h +vcmpordpd xmm1, xmm2, [rax] ; 07h + +vcmpeq_uqpd xmm1, xmm2, [rax] ; 08h +vcmpngepd xmm1, xmm2, [rax] ; 09h +vcmpngtpd xmm1, xmm2, [rax] ; 0Ah +vcmpfalsepd xmm1, xmm2, [rax] ; 0Bh +vcmpneq_oqpd xmm1, xmm2, [rax] ; 0Ch +vcmpgepd xmm1, xmm2, [rax] ; 0Dh +vcmpgtpd xmm1, xmm2, [rax] ; 0Eh +vcmptruepd xmm1, xmm2, [rax] ; 0Fh + +vcmpeq_ospd xmm1, xmm2, [rax] ; 10h +vcmplt_oqpd xmm1, xmm2, [rax] ; 11h +vcmple_oqpd xmm1, xmm2, [rax] ; 12h +vcmpunord_spd xmm1, xmm2, [rax] ; 13h +vcmpneq_uspd xmm1, xmm2, [rax] ; 14h +vcmpnlt_uqpd xmm1, xmm2, [rax] ; 15h +vcmpnle_uqpd xmm1, xmm2, [rax] ; 16h +vcmpord_spd xmm1, xmm2, [rax] ; 17h + +vcmpeq_uspd xmm1, xmm2, [rax] ; 18h +vcmpnge_uqpd xmm1, xmm2, [rax] ; 19h +vcmpngt_uqpd xmm1, xmm2, [rax] ; 1Ah +vcmpfalse_ospd xmm1, xmm2, [rax] ; 1Bh +vcmpneq_ospd xmm1, xmm2, [rax] ; 1Ch +vcmpge_oqpd xmm1, xmm2, [rax] ; 1Dh +vcmpgt_oqpd xmm1, xmm2, [rax] ; 1Eh +vcmptrue_uspd xmm1, xmm2, [rax] ; 1Fh + +cmpeqpd xmm1, dqword [rax] ; 00h +cmpltpd xmm1, dqword [rax] ; 01h +cmplepd xmm1, dqword [rax] ; 02h +cmpunordpd xmm1, dqword [rax] ; 03h +cmpneqpd xmm1, dqword [rax] ; 04h +cmpnltpd xmm1, dqword [rax] ; 05h +cmpnlepd xmm1, dqword [rax] ; 06h +cmpordpd xmm1, dqword [rax] ; 07h + +vcmpeqpd xmm1, dqword [rax] ; 00h +vcmpltpd xmm1, dqword [rax] ; 01h +vcmplepd xmm1, dqword [rax] ; 02h +vcmpunordpd xmm1, dqword [rax] ; 03h +vcmpneqpd xmm1, dqword [rax] ; 04h +vcmpnltpd xmm1, dqword [rax] ; 05h +vcmpnlepd xmm1, dqword [rax] ; 06h +vcmpordpd xmm1, dqword [rax] ; 07h + +vcmpeqpd xmm1, xmm2, dqword [rax] ; 00h +vcmpltpd xmm1, xmm2, dqword [rax] ; 01h +vcmplepd xmm1, xmm2, dqword [rax] ; 02h +vcmpunordpd xmm1, xmm2, dqword [rax] ; 03h +vcmpneqpd xmm1, xmm2, dqword [rax] ; 04h +vcmpnltpd xmm1, xmm2, dqword [rax] ; 05h +vcmpnlepd xmm1, xmm2, dqword [rax] ; 06h +vcmpordpd xmm1, xmm2, dqword [rax] ; 07h + +vcmpeq_uqpd xmm1, xmm2, dqword [rax] ; 08h +vcmpngepd xmm1, xmm2, dqword [rax] ; 09h +vcmpngtpd xmm1, xmm2, dqword [rax] ; 0Ah +vcmpfalsepd xmm1, xmm2, dqword [rax] ; 0Bh +vcmpneq_oqpd xmm1, xmm2, dqword [rax] ; 0Ch +vcmpgepd xmm1, xmm2, dqword [rax] ; 0Dh +vcmpgtpd xmm1, xmm2, dqword [rax] ; 0Eh +vcmptruepd xmm1, xmm2, dqword [rax] ; 0Fh + +vcmpeq_ospd xmm1, xmm2, dqword [rax] ; 10h +vcmplt_oqpd xmm1, xmm2, dqword [rax] ; 11h +vcmple_oqpd xmm1, xmm2, dqword [rax] ; 12h +vcmpunord_spd xmm1, xmm2, dqword [rax] ; 13h +vcmpneq_uspd xmm1, xmm2, dqword [rax] ; 14h +vcmpnlt_uqpd xmm1, xmm2, dqword [rax] ; 15h +vcmpnle_uqpd xmm1, xmm2, dqword [rax] ; 16h +vcmpord_spd xmm1, xmm2, dqword [rax] ; 17h + +vcmpeq_uspd xmm1, xmm2, dqword [rax] ; 18h +vcmpnge_uqpd xmm1, xmm2, dqword [rax] ; 19h +vcmpngt_uqpd xmm1, xmm2, dqword [rax] ; 1Ah +vcmpfalse_ospd xmm1, xmm2, dqword [rax] ; 1Bh +vcmpneq_ospd xmm1, xmm2, dqword [rax] ; 1Ch +vcmpge_oqpd xmm1, xmm2, dqword [rax] ; 1Dh +vcmpgt_oqpd xmm1, xmm2, dqword [rax] ; 1Eh +vcmptrue_uspd xmm1, xmm2, dqword [rax] ; 1Fh + +vcmpeqpd ymm1, ymm2, ymm3 ; 00h +vcmpltpd ymm1, ymm2, ymm3 ; 01h +vcmplepd ymm1, ymm2, ymm3 ; 02h +vcmpunordpd ymm1, ymm2, ymm3 ; 03h +vcmpneqpd ymm1, ymm2, ymm3 ; 04h +vcmpnltpd ymm1, ymm2, ymm3 ; 05h +vcmpnlepd ymm1, ymm2, ymm3 ; 06h +vcmpordpd ymm1, ymm2, ymm3 ; 07h + +vcmpeq_uqpd ymm1, ymm2, ymm3 ; 08h +vcmpngepd ymm1, ymm2, ymm3 ; 09h +vcmpngtpd ymm1, ymm2, ymm3 ; 0Ah +vcmpfalsepd ymm1, ymm2, ymm3 ; 0Bh +vcmpneq_oqpd ymm1, ymm2, ymm3 ; 0Ch +vcmpgepd ymm1, ymm2, ymm3 ; 0Dh +vcmpgtpd ymm1, ymm2, ymm3 ; 0Eh +vcmptruepd ymm1, ymm2, ymm3 ; 0Fh + +vcmpeq_ospd ymm1, ymm2, ymm3 ; 10h +vcmplt_oqpd ymm1, ymm2, ymm3 ; 11h +vcmple_oqpd ymm1, ymm2, ymm3 ; 12h +vcmpunord_spd ymm1, ymm2, ymm3 ; 13h +vcmpneq_uspd ymm1, ymm2, ymm3 ; 14h +vcmpnlt_uqpd ymm1, ymm2, ymm3 ; 15h +vcmpnle_uqpd ymm1, ymm2, ymm3 ; 16h +vcmpord_spd ymm1, ymm2, ymm3 ; 17h + +vcmpeq_uspd ymm1, ymm2, ymm3 ; 18h +vcmpnge_uqpd ymm1, ymm2, ymm3 ; 19h +vcmpngt_uqpd ymm1, ymm2, ymm3 ; 1Ah +vcmpfalse_ospd ymm1, ymm2, ymm3 ; 1Bh +vcmpneq_ospd ymm1, ymm2, ymm3 ; 1Ch +vcmpge_oqpd ymm1, ymm2, ymm3 ; 1Dh +vcmpgt_oqpd ymm1, ymm2, ymm3 ; 1Eh +vcmptrue_uspd ymm1, ymm2, ymm3 ; 1Fh + +vcmpeqpd ymm1, ymm2, [rax] ; 00h +vcmpltpd ymm1, ymm2, [rax] ; 01h +vcmplepd ymm1, ymm2, [rax] ; 02h +vcmpunordpd ymm1, ymm2, [rax] ; 03h +vcmpneqpd ymm1, ymm2, [rax] ; 04h +vcmpnltpd ymm1, ymm2, [rax] ; 05h +vcmpnlepd ymm1, ymm2, [rax] ; 06h +vcmpordpd ymm1, ymm2, [rax] ; 07h + +vcmpeq_uqpd ymm1, ymm2, [rax] ; 08h +vcmpngepd ymm1, ymm2, [rax] ; 09h +vcmpngtpd ymm1, ymm2, [rax] ; 0Ah +vcmpfalsepd ymm1, ymm2, [rax] ; 0Bh +vcmpneq_oqpd ymm1, ymm2, [rax] ; 0Ch +vcmpgepd ymm1, ymm2, [rax] ; 0Dh +vcmpgtpd ymm1, ymm2, [rax] ; 0Eh +vcmptruepd ymm1, ymm2, [rax] ; 0Fh + +vcmpeq_ospd ymm1, ymm2, [rax] ; 10h +vcmplt_oqpd ymm1, ymm2, [rax] ; 11h +vcmple_oqpd ymm1, ymm2, [rax] ; 12h +vcmpunord_spd ymm1, ymm2, [rax] ; 13h +vcmpneq_uspd ymm1, ymm2, [rax] ; 14h +vcmpnlt_uqpd ymm1, ymm2, [rax] ; 15h +vcmpnle_uqpd ymm1, ymm2, [rax] ; 16h +vcmpord_spd ymm1, ymm2, [rax] ; 17h + +vcmpeq_uspd ymm1, ymm2, [rax] ; 18h +vcmpnge_uqpd ymm1, ymm2, [rax] ; 19h +vcmpngt_uqpd ymm1, ymm2, [rax] ; 1Ah +vcmpfalse_ospd ymm1, ymm2, [rax] ; 1Bh +vcmpneq_ospd ymm1, ymm2, [rax] ; 1Ch +vcmpge_oqpd ymm1, ymm2, [rax] ; 1Dh +vcmpgt_oqpd ymm1, ymm2, [rax] ; 1Eh +vcmptrue_uspd ymm1, ymm2, [rax] ; 1Fh + +vcmpeqpd ymm1, ymm2, yword [rax] ; 00h +vcmpltpd ymm1, ymm2, yword [rax] ; 01h +vcmplepd ymm1, ymm2, yword [rax] ; 02h +vcmpunordpd ymm1, ymm2, yword [rax] ; 03h +vcmpneqpd ymm1, ymm2, yword [rax] ; 04h +vcmpnltpd ymm1, ymm2, yword [rax] ; 05h +vcmpnlepd ymm1, ymm2, yword [rax] ; 06h +vcmpordpd ymm1, ymm2, yword [rax] ; 07h + +vcmpeq_uqpd ymm1, ymm2, yword [rax] ; 08h +vcmpngepd ymm1, ymm2, yword [rax] ; 09h +vcmpngtpd ymm1, ymm2, yword [rax] ; 0Ah +vcmpfalsepd ymm1, ymm2, yword [rax] ; 0Bh +vcmpneq_oqpd ymm1, ymm2, yword [rax] ; 0Ch +vcmpgepd ymm1, ymm2, yword [rax] ; 0Dh +vcmpgtpd ymm1, ymm2, yword [rax] ; 0Eh +vcmptruepd ymm1, ymm2, yword [rax] ; 0Fh + +vcmpeq_ospd ymm1, ymm2, yword [rax] ; 10h +vcmplt_oqpd ymm1, ymm2, yword [rax] ; 11h +vcmple_oqpd ymm1, ymm2, yword [rax] ; 12h +vcmpunord_spd ymm1, ymm2, yword [rax] ; 13h +vcmpneq_uspd ymm1, ymm2, yword [rax] ; 14h +vcmpnlt_uqpd ymm1, ymm2, yword [rax] ; 15h +vcmpnle_uqpd ymm1, ymm2, yword [rax] ; 16h +vcmpord_spd ymm1, ymm2, yword [rax] ; 17h + +vcmpeq_uspd ymm1, ymm2, yword [rax] ; 18h +vcmpnge_uqpd ymm1, ymm2, yword [rax] ; 19h +vcmpngt_uqpd ymm1, ymm2, yword [rax] ; 1Ah +vcmpfalse_ospd ymm1, ymm2, yword [rax] ; 1Bh +vcmpneq_ospd ymm1, ymm2, yword [rax] ; 1Ch +vcmpge_oqpd ymm1, ymm2, yword [rax] ; 1Dh +vcmpgt_oqpd ymm1, ymm2, yword [rax] ; 1Eh +vcmptrue_uspd ymm1, ymm2, yword [rax] ; 1Fh + +;----------------------------------------------------------------------------- + +cmpeqps xmm1, xmm2 ; 00h +cmpltps xmm1, xmm2 ; 01h +cmpleps xmm1, xmm2 ; 02h +cmpunordps xmm1, xmm2 ; 03h +cmpneqps xmm1, xmm2 ; 04h +cmpnltps xmm1, xmm2 ; 05h +cmpnleps xmm1, xmm2 ; 06h +cmpordps xmm1, xmm2 ; 07h + +vcmpeqps xmm1, xmm2 ; 00h +vcmpltps xmm1, xmm2 ; 01h +vcmpleps xmm1, xmm2 ; 02h +vcmpunordps xmm1, xmm2 ; 03h +vcmpneqps xmm1, xmm2 ; 04h +vcmpnltps xmm1, xmm2 ; 05h +vcmpnleps xmm1, xmm2 ; 06h +vcmpordps xmm1, xmm2 ; 07h + +vcmpeqps xmm1, xmm2, xmm3 ; 00h +vcmpltps xmm1, xmm2, xmm3 ; 01h +vcmpleps xmm1, xmm2, xmm3 ; 02h +vcmpunordps xmm1, xmm2, xmm3 ; 03h +vcmpneqps xmm1, xmm2, xmm3 ; 04h +vcmpnltps xmm1, xmm2, xmm3 ; 05h +vcmpnleps xmm1, xmm2, xmm3 ; 06h +vcmpordps xmm1, xmm2, xmm3 ; 07h + +vcmpeq_uqps xmm1, xmm2, xmm3 ; 08h +vcmpngeps xmm1, xmm2, xmm3 ; 09h +vcmpngtps xmm1, xmm2, xmm3 ; 0Ah +vcmpfalseps xmm1, xmm2, xmm3 ; 0Bh +vcmpneq_oqps xmm1, xmm2, xmm3 ; 0Ch +vcmpgeps xmm1, xmm2, xmm3 ; 0Dh +vcmpgtps xmm1, xmm2, xmm3 ; 0Eh +vcmptrueps xmm1, xmm2, xmm3 ; 0Fh + +vcmpeq_osps xmm1, xmm2, xmm3 ; 10h +vcmplt_oqps xmm1, xmm2, xmm3 ; 11h +vcmple_oqps xmm1, xmm2, xmm3 ; 12h +vcmpunord_sps xmm1, xmm2, xmm3 ; 13h +vcmpneq_usps xmm1, xmm2, xmm3 ; 14h +vcmpnlt_uqps xmm1, xmm2, xmm3 ; 15h +vcmpnle_uqps xmm1, xmm2, xmm3 ; 16h +vcmpord_sps xmm1, xmm2, xmm3 ; 17h + +vcmpeq_usps xmm1, xmm2, xmm3 ; 18h +vcmpnge_uqps xmm1, xmm2, xmm3 ; 19h +vcmpngt_uqps xmm1, xmm2, xmm3 ; 1Ah +vcmpfalse_osps xmm1, xmm2, xmm3 ; 1Bh +vcmpneq_osps xmm1, xmm2, xmm3 ; 1Ch +vcmpge_oqps xmm1, xmm2, xmm3 ; 1Dh +vcmpgt_oqps xmm1, xmm2, xmm3 ; 1Eh +vcmptrue_usps xmm1, xmm2, xmm3 ; 1Fh + +cmpeqps xmm1, [rax] ; 00h +cmpltps xmm1, [rax] ; 01h +cmpleps xmm1, [rax] ; 02h +cmpunordps xmm1, [rax] ; 03h +cmpneqps xmm1, [rax] ; 04h +cmpnltps xmm1, [rax] ; 05h +cmpnleps xmm1, [rax] ; 06h +cmpordps xmm1, [rax] ; 07h + +vcmpeqps xmm1, [rax] ; 00h +vcmpltps xmm1, [rax] ; 01h +vcmpleps xmm1, [rax] ; 02h +vcmpunordps xmm1, [rax] ; 03h +vcmpneqps xmm1, [rax] ; 04h +vcmpnltps xmm1, [rax] ; 05h +vcmpnleps xmm1, [rax] ; 06h +vcmpordps xmm1, [rax] ; 07h + +vcmpeqps xmm1, xmm2, [rax] ; 00h +vcmpltps xmm1, xmm2, [rax] ; 01h +vcmpleps xmm1, xmm2, [rax] ; 02h +vcmpunordps xmm1, xmm2, [rax] ; 03h +vcmpneqps xmm1, xmm2, [rax] ; 04h +vcmpnltps xmm1, xmm2, [rax] ; 05h +vcmpnleps xmm1, xmm2, [rax] ; 06h +vcmpordps xmm1, xmm2, [rax] ; 07h + +vcmpeq_uqps xmm1, xmm2, [rax] ; 08h +vcmpngeps xmm1, xmm2, [rax] ; 09h +vcmpngtps xmm1, xmm2, [rax] ; 0Ah +vcmpfalseps xmm1, xmm2, [rax] ; 0Bh +vcmpneq_oqps xmm1, xmm2, [rax] ; 0Ch +vcmpgeps xmm1, xmm2, [rax] ; 0Dh +vcmpgtps xmm1, xmm2, [rax] ; 0Eh +vcmptrueps xmm1, xmm2, [rax] ; 0Fh + +vcmpeq_osps xmm1, xmm2, [rax] ; 10h +vcmplt_oqps xmm1, xmm2, [rax] ; 11h +vcmple_oqps xmm1, xmm2, [rax] ; 12h +vcmpunord_sps xmm1, xmm2, [rax] ; 13h +vcmpneq_usps xmm1, xmm2, [rax] ; 14h +vcmpnlt_uqps xmm1, xmm2, [rax] ; 15h +vcmpnle_uqps xmm1, xmm2, [rax] ; 16h +vcmpord_sps xmm1, xmm2, [rax] ; 17h + +vcmpeq_usps xmm1, xmm2, [rax] ; 18h +vcmpnge_uqps xmm1, xmm2, [rax] ; 19h +vcmpngt_uqps xmm1, xmm2, [rax] ; 1Ah +vcmpfalse_osps xmm1, xmm2, [rax] ; 1Bh +vcmpneq_osps xmm1, xmm2, [rax] ; 1Ch +vcmpge_oqps xmm1, xmm2, [rax] ; 1Dh +vcmpgt_oqps xmm1, xmm2, [rax] ; 1Eh +vcmptrue_usps xmm1, xmm2, [rax] ; 1Fh + +cmpeqps xmm1, dqword [rax] ; 00h +cmpltps xmm1, dqword [rax] ; 01h +cmpleps xmm1, dqword [rax] ; 02h +cmpunordps xmm1, dqword [rax] ; 03h +cmpneqps xmm1, dqword [rax] ; 04h +cmpnltps xmm1, dqword [rax] ; 05h +cmpnleps xmm1, dqword [rax] ; 06h +cmpordps xmm1, dqword [rax] ; 07h + +vcmpeqps xmm1, dqword [rax] ; 00h +vcmpltps xmm1, dqword [rax] ; 01h +vcmpleps xmm1, dqword [rax] ; 02h +vcmpunordps xmm1, dqword [rax] ; 03h +vcmpneqps xmm1, dqword [rax] ; 04h +vcmpnltps xmm1, dqword [rax] ; 05h +vcmpnleps xmm1, dqword [rax] ; 06h +vcmpordps xmm1, dqword [rax] ; 07h + +vcmpeqps xmm1, xmm2, dqword [rax] ; 00h +vcmpltps xmm1, xmm2, dqword [rax] ; 01h +vcmpleps xmm1, xmm2, dqword [rax] ; 02h +vcmpunordps xmm1, xmm2, dqword [rax] ; 03h +vcmpneqps xmm1, xmm2, dqword [rax] ; 04h +vcmpnltps xmm1, xmm2, dqword [rax] ; 05h +vcmpnleps xmm1, xmm2, dqword [rax] ; 06h +vcmpordps xmm1, xmm2, dqword [rax] ; 07h + +vcmpeq_uqps xmm1, xmm2, dqword [rax] ; 08h +vcmpngeps xmm1, xmm2, dqword [rax] ; 09h +vcmpngtps xmm1, xmm2, dqword [rax] ; 0Ah +vcmpfalseps xmm1, xmm2, dqword [rax] ; 0Bh +vcmpneq_oqps xmm1, xmm2, dqword [rax] ; 0Ch +vcmpgeps xmm1, xmm2, dqword [rax] ; 0Dh +vcmpgtps xmm1, xmm2, dqword [rax] ; 0Eh +vcmptrueps xmm1, xmm2, dqword [rax] ; 0Fh + +vcmpeq_osps xmm1, xmm2, dqword [rax] ; 10h +vcmplt_oqps xmm1, xmm2, dqword [rax] ; 11h +vcmple_oqps xmm1, xmm2, dqword [rax] ; 12h +vcmpunord_sps xmm1, xmm2, dqword [rax] ; 13h +vcmpneq_usps xmm1, xmm2, dqword [rax] ; 14h +vcmpnlt_uqps xmm1, xmm2, dqword [rax] ; 15h +vcmpnle_uqps xmm1, xmm2, dqword [rax] ; 16h +vcmpord_sps xmm1, xmm2, dqword [rax] ; 17h + +vcmpeq_usps xmm1, xmm2, dqword [rax] ; 18h +vcmpnge_uqps xmm1, xmm2, dqword [rax] ; 19h +vcmpngt_uqps xmm1, xmm2, dqword [rax] ; 1Ah +vcmpfalse_osps xmm1, xmm2, dqword [rax] ; 1Bh +vcmpneq_osps xmm1, xmm2, dqword [rax] ; 1Ch +vcmpge_oqps xmm1, xmm2, dqword [rax] ; 1Dh +vcmpgt_oqps xmm1, xmm2, dqword [rax] ; 1Eh +vcmptrue_usps xmm1, xmm2, dqword [rax] ; 1Fh + +vcmpeqps ymm1, ymm2, ymm3 ; 00h +vcmpltps ymm1, ymm2, ymm3 ; 01h +vcmpleps ymm1, ymm2, ymm3 ; 02h +vcmpunordps ymm1, ymm2, ymm3 ; 03h +vcmpneqps ymm1, ymm2, ymm3 ; 04h +vcmpnltps ymm1, ymm2, ymm3 ; 05h +vcmpnleps ymm1, ymm2, ymm3 ; 06h +vcmpordps ymm1, ymm2, ymm3 ; 07h + +vcmpeq_uqps ymm1, ymm2, ymm3 ; 08h +vcmpngeps ymm1, ymm2, ymm3 ; 09h +vcmpngtps ymm1, ymm2, ymm3 ; 0Ah +vcmpfalseps ymm1, ymm2, ymm3 ; 0Bh +vcmpneq_oqps ymm1, ymm2, ymm3 ; 0Ch +vcmpgeps ymm1, ymm2, ymm3 ; 0Dh +vcmpgtps ymm1, ymm2, ymm3 ; 0Eh +vcmptrueps ymm1, ymm2, ymm3 ; 0Fh + +vcmpeq_osps ymm1, ymm2, ymm3 ; 10h +vcmplt_oqps ymm1, ymm2, ymm3 ; 11h +vcmple_oqps ymm1, ymm2, ymm3 ; 12h +vcmpunord_sps ymm1, ymm2, ymm3 ; 13h +vcmpneq_usps ymm1, ymm2, ymm3 ; 14h +vcmpnlt_uqps ymm1, ymm2, ymm3 ; 15h +vcmpnle_uqps ymm1, ymm2, ymm3 ; 16h +vcmpord_sps ymm1, ymm2, ymm3 ; 17h + +vcmpeq_usps ymm1, ymm2, ymm3 ; 18h +vcmpnge_uqps ymm1, ymm2, ymm3 ; 19h +vcmpngt_uqps ymm1, ymm2, ymm3 ; 1Ah +vcmpfalse_osps ymm1, ymm2, ymm3 ; 1Bh +vcmpneq_osps ymm1, ymm2, ymm3 ; 1Ch +vcmpge_oqps ymm1, ymm2, ymm3 ; 1Dh +vcmpgt_oqps ymm1, ymm2, ymm3 ; 1Eh +vcmptrue_usps ymm1, ymm2, ymm3 ; 1Fh + +vcmpeqps ymm1, ymm2, [rax] ; 00h +vcmpltps ymm1, ymm2, [rax] ; 01h +vcmpleps ymm1, ymm2, [rax] ; 02h +vcmpunordps ymm1, ymm2, [rax] ; 03h +vcmpneqps ymm1, ymm2, [rax] ; 04h +vcmpnltps ymm1, ymm2, [rax] ; 05h +vcmpnleps ymm1, ymm2, [rax] ; 06h +vcmpordps ymm1, ymm2, [rax] ; 07h + +vcmpeq_uqps ymm1, ymm2, [rax] ; 08h +vcmpngeps ymm1, ymm2, [rax] ; 09h +vcmpngtps ymm1, ymm2, [rax] ; 0Ah +vcmpfalseps ymm1, ymm2, [rax] ; 0Bh +vcmpneq_oqps ymm1, ymm2, [rax] ; 0Ch +vcmpgeps ymm1, ymm2, [rax] ; 0Dh +vcmpgtps ymm1, ymm2, [rax] ; 0Eh +vcmptrueps ymm1, ymm2, [rax] ; 0Fh + +vcmpeq_osps ymm1, ymm2, [rax] ; 10h +vcmplt_oqps ymm1, ymm2, [rax] ; 11h +vcmple_oqps ymm1, ymm2, [rax] ; 12h +vcmpunord_sps ymm1, ymm2, [rax] ; 13h +vcmpneq_usps ymm1, ymm2, [rax] ; 14h +vcmpnlt_uqps ymm1, ymm2, [rax] ; 15h +vcmpnle_uqps ymm1, ymm2, [rax] ; 16h +vcmpord_sps ymm1, ymm2, [rax] ; 17h + +vcmpeq_usps ymm1, ymm2, [rax] ; 18h +vcmpnge_uqps ymm1, ymm2, [rax] ; 19h +vcmpngt_uqps ymm1, ymm2, [rax] ; 1Ah +vcmpfalse_osps ymm1, ymm2, [rax] ; 1Bh +vcmpneq_osps ymm1, ymm2, [rax] ; 1Ch +vcmpge_oqps ymm1, ymm2, [rax] ; 1Dh +vcmpgt_oqps ymm1, ymm2, [rax] ; 1Eh +vcmptrue_usps ymm1, ymm2, [rax] ; 1Fh + +vcmpeqps ymm1, ymm2, yword [rax] ; 00h +vcmpltps ymm1, ymm2, yword [rax] ; 01h +vcmpleps ymm1, ymm2, yword [rax] ; 02h +vcmpunordps ymm1, ymm2, yword [rax] ; 03h +vcmpneqps ymm1, ymm2, yword [rax] ; 04h +vcmpnltps ymm1, ymm2, yword [rax] ; 05h +vcmpnleps ymm1, ymm2, yword [rax] ; 06h +vcmpordps ymm1, ymm2, yword [rax] ; 07h + +vcmpeq_uqps ymm1, ymm2, yword [rax] ; 08h +vcmpngeps ymm1, ymm2, yword [rax] ; 09h +vcmpngtps ymm1, ymm2, yword [rax] ; 0Ah +vcmpfalseps ymm1, ymm2, yword [rax] ; 0Bh +vcmpneq_oqps ymm1, ymm2, yword [rax] ; 0Ch +vcmpgeps ymm1, ymm2, yword [rax] ; 0Dh +vcmpgtps ymm1, ymm2, yword [rax] ; 0Eh +vcmptrueps ymm1, ymm2, yword [rax] ; 0Fh + +vcmpeq_osps ymm1, ymm2, yword [rax] ; 10h +vcmplt_oqps ymm1, ymm2, yword [rax] ; 11h +vcmple_oqps ymm1, ymm2, yword [rax] ; 12h +vcmpunord_sps ymm1, ymm2, yword [rax] ; 13h +vcmpneq_usps ymm1, ymm2, yword [rax] ; 14h +vcmpnlt_uqps ymm1, ymm2, yword [rax] ; 15h +vcmpnle_uqps ymm1, ymm2, yword [rax] ; 16h +vcmpord_sps ymm1, ymm2, yword [rax] ; 17h + +vcmpeq_usps ymm1, ymm2, yword [rax] ; 18h +vcmpnge_uqps ymm1, ymm2, yword [rax] ; 19h +vcmpngt_uqps ymm1, ymm2, yword [rax] ; 1Ah +vcmpfalse_osps ymm1, ymm2, yword [rax] ; 1Bh +vcmpneq_osps ymm1, ymm2, yword [rax] ; 1Ch +vcmpge_oqps ymm1, ymm2, yword [rax] ; 1Dh +vcmpgt_oqps ymm1, ymm2, yword [rax] ; 1Eh +vcmptrue_usps ymm1, ymm2, yword [rax] ; 1Fh + +;----------------------------------------------------------------------------- + +cmpeqsd xmm1, xmm2 ; 00h +cmpltsd xmm1, xmm2 ; 01h +cmplesd xmm1, xmm2 ; 02h +cmpunordsd xmm1, xmm2 ; 03h +cmpneqsd xmm1, xmm2 ; 04h +cmpnltsd xmm1, xmm2 ; 05h +cmpnlesd xmm1, xmm2 ; 06h +cmpordsd xmm1, xmm2 ; 07h + +vcmpeqsd xmm1, xmm2 ; 00h +vcmpltsd xmm1, xmm2 ; 01h +vcmplesd xmm1, xmm2 ; 02h +vcmpunordsd xmm1, xmm2 ; 03h +vcmpneqsd xmm1, xmm2 ; 04h +vcmpnltsd xmm1, xmm2 ; 05h +vcmpnlesd xmm1, xmm2 ; 06h +vcmpordsd xmm1, xmm2 ; 07h + +vcmpeqsd xmm1, xmm2, xmm3 ; 00h +vcmpltsd xmm1, xmm2, xmm3 ; 01h +vcmplesd xmm1, xmm2, xmm3 ; 02h +vcmpunordsd xmm1, xmm2, xmm3 ; 03h +vcmpneqsd xmm1, xmm2, xmm3 ; 04h +vcmpnltsd xmm1, xmm2, xmm3 ; 05h +vcmpnlesd xmm1, xmm2, xmm3 ; 06h +vcmpordsd xmm1, xmm2, xmm3 ; 07h + +vcmpeq_uqsd xmm1, xmm2, xmm3 ; 08h +vcmpngesd xmm1, xmm2, xmm3 ; 09h +vcmpngtsd xmm1, xmm2, xmm3 ; 0Ah +vcmpfalsesd xmm1, xmm2, xmm3 ; 0Bh +vcmpneq_oqsd xmm1, xmm2, xmm3 ; 0Ch +vcmpgesd xmm1, xmm2, xmm3 ; 0Dh +vcmpgtsd xmm1, xmm2, xmm3 ; 0Eh +vcmptruesd xmm1, xmm2, xmm3 ; 0Fh + +vcmpeq_ossd xmm1, xmm2, xmm3 ; 10h +vcmplt_oqsd xmm1, xmm2, xmm3 ; 11h +vcmple_oqsd xmm1, xmm2, xmm3 ; 12h +vcmpunord_ssd xmm1, xmm2, xmm3 ; 13h +vcmpneq_ussd xmm1, xmm2, xmm3 ; 14h +vcmpnlt_uqsd xmm1, xmm2, xmm3 ; 15h +vcmpnle_uqsd xmm1, xmm2, xmm3 ; 16h +vcmpord_ssd xmm1, xmm2, xmm3 ; 17h + +vcmpeq_ussd xmm1, xmm2, xmm3 ; 18h +vcmpnge_uqsd xmm1, xmm2, xmm3 ; 19h +vcmpngt_uqsd xmm1, xmm2, xmm3 ; 1Ah +vcmpfalse_ossd xmm1, xmm2, xmm3 ; 1Bh +vcmpneq_ossd xmm1, xmm2, xmm3 ; 1Ch +vcmpge_oqsd xmm1, xmm2, xmm3 ; 1Dh +vcmpgt_oqsd xmm1, xmm2, xmm3 ; 1Eh +vcmptrue_ussd xmm1, xmm2, xmm3 ; 1Fh + +cmpeqsd xmm1, [rax] ; 00h +cmpltsd xmm1, [rax] ; 01h +cmplesd xmm1, [rax] ; 02h +cmpunordsd xmm1, [rax] ; 03h +cmpneqsd xmm1, [rax] ; 04h +cmpnltsd xmm1, [rax] ; 05h +cmpnlesd xmm1, [rax] ; 06h +cmpordsd xmm1, [rax] ; 07h + +vcmpeqsd xmm1, [rax] ; 00h +vcmpltsd xmm1, [rax] ; 01h +vcmplesd xmm1, [rax] ; 02h +vcmpunordsd xmm1, [rax] ; 03h +vcmpneqsd xmm1, [rax] ; 04h +vcmpnltsd xmm1, [rax] ; 05h +vcmpnlesd xmm1, [rax] ; 06h +vcmpordsd xmm1, [rax] ; 07h + +vcmpeqsd xmm1, xmm2, [rax] ; 00h +vcmpltsd xmm1, xmm2, [rax] ; 01h +vcmplesd xmm1, xmm2, [rax] ; 02h +vcmpunordsd xmm1, xmm2, [rax] ; 03h +vcmpneqsd xmm1, xmm2, [rax] ; 04h +vcmpnltsd xmm1, xmm2, [rax] ; 05h +vcmpnlesd xmm1, xmm2, [rax] ; 06h +vcmpordsd xmm1, xmm2, [rax] ; 07h + +vcmpeq_uqsd xmm1, xmm2, [rax] ; 08h +vcmpngesd xmm1, xmm2, [rax] ; 09h +vcmpngtsd xmm1, xmm2, [rax] ; 0Ah +vcmpfalsesd xmm1, xmm2, [rax] ; 0Bh +vcmpneq_oqsd xmm1, xmm2, [rax] ; 0Ch +vcmpgesd xmm1, xmm2, [rax] ; 0Dh +vcmpgtsd xmm1, xmm2, [rax] ; 0Eh +vcmptruesd xmm1, xmm2, [rax] ; 0Fh + +vcmpeq_ossd xmm1, xmm2, [rax] ; 10h +vcmplt_oqsd xmm1, xmm2, [rax] ; 11h +vcmple_oqsd xmm1, xmm2, [rax] ; 12h +vcmpunord_ssd xmm1, xmm2, [rax] ; 13h +vcmpneq_ussd xmm1, xmm2, [rax] ; 14h +vcmpnlt_uqsd xmm1, xmm2, [rax] ; 15h +vcmpnle_uqsd xmm1, xmm2, [rax] ; 16h +vcmpord_ssd xmm1, xmm2, [rax] ; 17h + +vcmpeq_ussd xmm1, xmm2, [rax] ; 18h +vcmpnge_uqsd xmm1, xmm2, [rax] ; 19h +vcmpngt_uqsd xmm1, xmm2, [rax] ; 1Ah +vcmpfalse_ossd xmm1, xmm2, [rax] ; 1Bh +vcmpneq_ossd xmm1, xmm2, [rax] ; 1Ch +vcmpge_oqsd xmm1, xmm2, [rax] ; 1Dh +vcmpgt_oqsd xmm1, xmm2, [rax] ; 1Eh +vcmptrue_ussd xmm1, xmm2, [rax] ; 1Fh + +cmpeqsd xmm1, qword [rax] ; 00h +cmpltsd xmm1, qword [rax] ; 01h +cmplesd xmm1, qword [rax] ; 02h +cmpunordsd xmm1, qword [rax] ; 03h +cmpneqsd xmm1, qword [rax] ; 04h +cmpnltsd xmm1, qword [rax] ; 05h +cmpnlesd xmm1, qword [rax] ; 06h +cmpordsd xmm1, qword [rax] ; 07h + +vcmpeqsd xmm1, qword [rax] ; 00h +vcmpltsd xmm1, qword [rax] ; 01h +vcmplesd xmm1, qword [rax] ; 02h +vcmpunordsd xmm1, qword [rax] ; 03h +vcmpneqsd xmm1, qword [rax] ; 04h +vcmpnltsd xmm1, qword [rax] ; 05h +vcmpnlesd xmm1, qword [rax] ; 06h +vcmpordsd xmm1, qword [rax] ; 07h + +vcmpeqsd xmm1, xmm2, qword [rax] ; 00h +vcmpltsd xmm1, xmm2, qword [rax] ; 01h +vcmplesd xmm1, xmm2, qword [rax] ; 02h +vcmpunordsd xmm1, xmm2, qword [rax] ; 03h +vcmpneqsd xmm1, xmm2, qword [rax] ; 04h +vcmpnltsd xmm1, xmm2, qword [rax] ; 05h +vcmpnlesd xmm1, xmm2, qword [rax] ; 06h +vcmpordsd xmm1, xmm2, qword [rax] ; 07h + +vcmpeq_uqsd xmm1, xmm2, qword [rax] ; 08h +vcmpngesd xmm1, xmm2, qword [rax] ; 09h +vcmpngtsd xmm1, xmm2, qword [rax] ; 0Ah +vcmpfalsesd xmm1, xmm2, qword [rax] ; 0Bh +vcmpneq_oqsd xmm1, xmm2, qword [rax] ; 0Ch +vcmpgesd xmm1, xmm2, qword [rax] ; 0Dh +vcmpgtsd xmm1, xmm2, qword [rax] ; 0Eh +vcmptruesd xmm1, xmm2, qword [rax] ; 0Fh + +vcmpeq_ossd xmm1, xmm2, qword [rax] ; 10h +vcmplt_oqsd xmm1, xmm2, qword [rax] ; 11h +vcmple_oqsd xmm1, xmm2, qword [rax] ; 12h +vcmpunord_ssd xmm1, xmm2, qword [rax] ; 13h +vcmpneq_ussd xmm1, xmm2, qword [rax] ; 14h +vcmpnlt_uqsd xmm1, xmm2, qword [rax] ; 15h +vcmpnle_uqsd xmm1, xmm2, qword [rax] ; 16h +vcmpord_ssd xmm1, xmm2, qword [rax] ; 17h + +vcmpeq_ussd xmm1, xmm2, qword [rax] ; 18h +vcmpnge_uqsd xmm1, xmm2, qword [rax] ; 19h +vcmpngt_uqsd xmm1, xmm2, qword [rax] ; 1Ah +vcmpfalse_ossd xmm1, xmm2, qword [rax] ; 1Bh +vcmpneq_ossd xmm1, xmm2, qword [rax] ; 1Ch +vcmpge_oqsd xmm1, xmm2, qword [rax] ; 1Dh +vcmpgt_oqsd xmm1, xmm2, qword [rax] ; 1Eh +vcmptrue_ussd xmm1, xmm2, qword [rax] ; 1Fh + +;----------------------------------------------------------------------------- + +cmpeqss xmm1, xmm2 ; 00h +cmpltss xmm1, xmm2 ; 01h +cmpless xmm1, xmm2 ; 02h +cmpunordss xmm1, xmm2 ; 03h +cmpneqss xmm1, xmm2 ; 04h +cmpnltss xmm1, xmm2 ; 05h +cmpnless xmm1, xmm2 ; 06h +cmpordss xmm1, xmm2 ; 07h + +vcmpeqss xmm1, xmm2 ; 00h +vcmpltss xmm1, xmm2 ; 01h +vcmpless xmm1, xmm2 ; 02h +vcmpunordss xmm1, xmm2 ; 03h +vcmpneqss xmm1, xmm2 ; 04h +vcmpnltss xmm1, xmm2 ; 05h +vcmpnless xmm1, xmm2 ; 06h +vcmpordss xmm1, xmm2 ; 07h + +vcmpeqss xmm1, xmm2, xmm3 ; 00h +vcmpltss xmm1, xmm2, xmm3 ; 01h +vcmpless xmm1, xmm2, xmm3 ; 02h +vcmpunordss xmm1, xmm2, xmm3 ; 03h +vcmpneqss xmm1, xmm2, xmm3 ; 04h +vcmpnltss xmm1, xmm2, xmm3 ; 05h +vcmpnless xmm1, xmm2, xmm3 ; 06h +vcmpordss xmm1, xmm2, xmm3 ; 07h + +vcmpeq_uqss xmm1, xmm2, xmm3 ; 08h +vcmpngess xmm1, xmm2, xmm3 ; 09h +vcmpngtss xmm1, xmm2, xmm3 ; 0Ah +vcmpfalsess xmm1, xmm2, xmm3 ; 0Bh +vcmpneq_oqss xmm1, xmm2, xmm3 ; 0Ch +vcmpgess xmm1, xmm2, xmm3 ; 0Dh +vcmpgtss xmm1, xmm2, xmm3 ; 0Eh +vcmptruess xmm1, xmm2, xmm3 ; 0Fh + +vcmpeq_osss xmm1, xmm2, xmm3 ; 10h +vcmplt_oqss xmm1, xmm2, xmm3 ; 11h +vcmple_oqss xmm1, xmm2, xmm3 ; 12h +vcmpunord_sss xmm1, xmm2, xmm3 ; 13h +vcmpneq_usss xmm1, xmm2, xmm3 ; 14h +vcmpnlt_uqss xmm1, xmm2, xmm3 ; 15h +vcmpnle_uqss xmm1, xmm2, xmm3 ; 16h +vcmpord_sss xmm1, xmm2, xmm3 ; 17h + +vcmpeq_usss xmm1, xmm2, xmm3 ; 18h +vcmpnge_uqss xmm1, xmm2, xmm3 ; 19h +vcmpngt_uqss xmm1, xmm2, xmm3 ; 1Ah +vcmpfalse_osss xmm1, xmm2, xmm3 ; 1Bh +vcmpneq_osss xmm1, xmm2, xmm3 ; 1Ch +vcmpge_oqss xmm1, xmm2, xmm3 ; 1Dh +vcmpgt_oqss xmm1, xmm2, xmm3 ; 1Eh +vcmptrue_usss xmm1, xmm2, xmm3 ; 1Fh + +cmpeqss xmm1, [rax] ; 00h +cmpltss xmm1, [rax] ; 01h +cmpless xmm1, [rax] ; 02h +cmpunordss xmm1, [rax] ; 03h +cmpneqss xmm1, [rax] ; 04h +cmpnltss xmm1, [rax] ; 05h +cmpnless xmm1, [rax] ; 06h +cmpordss xmm1, [rax] ; 07h + +vcmpeqss xmm1, [rax] ; 00h +vcmpltss xmm1, [rax] ; 01h +vcmpless xmm1, [rax] ; 02h +vcmpunordss xmm1, [rax] ; 03h +vcmpneqss xmm1, [rax] ; 04h +vcmpnltss xmm1, [rax] ; 05h +vcmpnless xmm1, [rax] ; 06h +vcmpordss xmm1, [rax] ; 07h + +vcmpeqss xmm1, xmm2, [rax] ; 00h +vcmpltss xmm1, xmm2, [rax] ; 01h +vcmpless xmm1, xmm2, [rax] ; 02h +vcmpunordss xmm1, xmm2, [rax] ; 03h +vcmpneqss xmm1, xmm2, [rax] ; 04h +vcmpnltss xmm1, xmm2, [rax] ; 05h +vcmpnless xmm1, xmm2, [rax] ; 06h +vcmpordss xmm1, xmm2, [rax] ; 07h + +vcmpeq_uqss xmm1, xmm2, [rax] ; 08h +vcmpngess xmm1, xmm2, [rax] ; 09h +vcmpngtss xmm1, xmm2, [rax] ; 0Ah +vcmpfalsess xmm1, xmm2, [rax] ; 0Bh +vcmpneq_oqss xmm1, xmm2, [rax] ; 0Ch +vcmpgess xmm1, xmm2, [rax] ; 0Dh +vcmpgtss xmm1, xmm2, [rax] ; 0Eh +vcmptruess xmm1, xmm2, [rax] ; 0Fh + +vcmpeq_osss xmm1, xmm2, [rax] ; 10h +vcmplt_oqss xmm1, xmm2, [rax] ; 11h +vcmple_oqss xmm1, xmm2, [rax] ; 12h +vcmpunord_sss xmm1, xmm2, [rax] ; 13h +vcmpneq_usss xmm1, xmm2, [rax] ; 14h +vcmpnlt_uqss xmm1, xmm2, [rax] ; 15h +vcmpnle_uqss xmm1, xmm2, [rax] ; 16h +vcmpord_sss xmm1, xmm2, [rax] ; 17h + +vcmpeq_usss xmm1, xmm2, [rax] ; 18h +vcmpnge_uqss xmm1, xmm2, [rax] ; 19h +vcmpngt_uqss xmm1, xmm2, [rax] ; 1Ah +vcmpfalse_osss xmm1, xmm2, [rax] ; 1Bh +vcmpneq_osss xmm1, xmm2, [rax] ; 1Ch +vcmpge_oqss xmm1, xmm2, [rax] ; 1Dh +vcmpgt_oqss xmm1, xmm2, [rax] ; 1Eh +vcmptrue_usss xmm1, xmm2, [rax] ; 1Fh + +cmpeqss xmm1, dword [rax] ; 00h +cmpltss xmm1, dword [rax] ; 01h +cmpless xmm1, dword [rax] ; 02h +cmpunordss xmm1, dword [rax] ; 03h +cmpneqss xmm1, dword [rax] ; 04h +cmpnltss xmm1, dword [rax] ; 05h +cmpnless xmm1, dword [rax] ; 06h +cmpordss xmm1, dword [rax] ; 07h + +vcmpeqss xmm1, dword [rax] ; 00h +vcmpltss xmm1, dword [rax] ; 01h +vcmpless xmm1, dword [rax] ; 02h +vcmpunordss xmm1, dword [rax] ; 03h +vcmpneqss xmm1, dword [rax] ; 04h +vcmpnltss xmm1, dword [rax] ; 05h +vcmpnless xmm1, dword [rax] ; 06h +vcmpordss xmm1, dword [rax] ; 07h + +vcmpeqss xmm1, xmm2, dword [rax] ; 00h +vcmpltss xmm1, xmm2, dword [rax] ; 01h +vcmpless xmm1, xmm2, dword [rax] ; 02h +vcmpunordss xmm1, xmm2, dword [rax] ; 03h +vcmpneqss xmm1, xmm2, dword [rax] ; 04h +vcmpnltss xmm1, xmm2, dword [rax] ; 05h +vcmpnless xmm1, xmm2, dword [rax] ; 06h +vcmpordss xmm1, xmm2, dword [rax] ; 07h + +vcmpeq_uqss xmm1, xmm2, dword [rax] ; 08h +vcmpngess xmm1, xmm2, dword [rax] ; 09h +vcmpngtss xmm1, xmm2, dword [rax] ; 0Ah +vcmpfalsess xmm1, xmm2, dword [rax] ; 0Bh +vcmpneq_oqss xmm1, xmm2, dword [rax] ; 0Ch +vcmpgess xmm1, xmm2, dword [rax] ; 0Dh +vcmpgtss xmm1, xmm2, dword [rax] ; 0Eh +vcmptruess xmm1, xmm2, dword [rax] ; 0Fh + +vcmpeq_osss xmm1, xmm2, dword [rax] ; 10h +vcmplt_oqss xmm1, xmm2, dword [rax] ; 11h +vcmple_oqss xmm1, xmm2, dword [rax] ; 12h +vcmpunord_sss xmm1, xmm2, dword [rax] ; 13h +vcmpneq_usss xmm1, xmm2, dword [rax] ; 14h +vcmpnlt_uqss xmm1, xmm2, dword [rax] ; 15h +vcmpnle_uqss xmm1, xmm2, dword [rax] ; 16h +vcmpord_sss xmm1, xmm2, dword [rax] ; 17h + +vcmpeq_usss xmm1, xmm2, dword [rax] ; 18h +vcmpnge_uqss xmm1, xmm2, dword [rax] ; 19h +vcmpngt_uqss xmm1, xmm2, dword [rax] ; 1Ah +vcmpfalse_osss xmm1, xmm2, dword [rax] ; 1Bh +vcmpneq_osss xmm1, xmm2, dword [rax] ; 1Ch +vcmpge_oqss xmm1, xmm2, dword [rax] ; 1Dh +vcmpgt_oqss xmm1, xmm2, dword [rax] ; 1Eh +vcmptrue_usss xmm1, xmm2, dword [rax] ; 1Fh + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avxcc.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avxcc.hex new file mode 100644 index 0000000000..c6ed929a75 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/avxcc.hex @@ -0,0 +1,3816 @@ +66 +0f +c2 +ca +00 +66 +0f +c2 +ca +01 +66 +0f +c2 +ca +02 +66 +0f +c2 +ca +03 +66 +0f +c2 +ca +04 +66 +0f +c2 +ca +05 +66 +0f +c2 +ca +06 +66 +0f +c2 +ca +07 +c5 +f1 +c2 +ca +00 +c5 +f1 +c2 +ca +01 +c5 +f1 +c2 +ca +02 +c5 +f1 +c2 +ca +03 +c5 +f1 +c2 +ca +04 +c5 +f1 +c2 +ca +05 +c5 +f1 +c2 +ca +06 +c5 +f1 +c2 +ca +07 +c5 +e9 +c2 +cb +00 +c5 +e9 +c2 +cb +01 +c5 +e9 +c2 +cb +02 +c5 +e9 +c2 +cb +03 +c5 +e9 +c2 +cb +04 +c5 +e9 +c2 +cb +05 +c5 +e9 +c2 +cb +06 +c5 +e9 +c2 +cb +07 +c5 +e9 +c2 +cb +08 +c5 +e9 +c2 +cb +09 +c5 +e9 +c2 +cb +0a +c5 +e9 +c2 +cb +0b +c5 +e9 +c2 +cb +0c +c5 +e9 +c2 +cb +0d +c5 +e9 +c2 +cb +0e +c5 +e9 +c2 +cb +0f +c5 +e9 +c2 +cb +10 +c5 +e9 +c2 +cb +11 +c5 +e9 +c2 +cb +12 +c5 +e9 +c2 +cb +13 +c5 +e9 +c2 +cb +14 +c5 +e9 +c2 +cb +15 +c5 +e9 +c2 +cb +16 +c5 +e9 +c2 +cb +17 +c5 +e9 +c2 +cb +18 +c5 +e9 +c2 +cb +19 +c5 +e9 +c2 +cb +1a +c5 +e9 +c2 +cb +1b +c5 +e9 +c2 +cb +1c +c5 +e9 +c2 +cb +1d +c5 +e9 +c2 +cb +1e +c5 +e9 +c2 +cb +1f +66 +0f +c2 +08 +00 +66 +0f +c2 +08 +01 +66 +0f +c2 +08 +02 +66 +0f +c2 +08 +03 +66 +0f +c2 +08 +04 +66 +0f +c2 +08 +05 +66 +0f +c2 +08 +06 +66 +0f +c2 +08 +07 +c5 +f1 +c2 +08 +00 +c5 +f1 +c2 +08 +01 +c5 +f1 +c2 +08 +02 +c5 +f1 +c2 +08 +03 +c5 +f1 +c2 +08 +04 +c5 +f1 +c2 +08 +05 +c5 +f1 +c2 +08 +06 +c5 +f1 +c2 +08 +07 +c5 +e9 +c2 +08 +00 +c5 +e9 +c2 +08 +01 +c5 +e9 +c2 +08 +02 +c5 +e9 +c2 +08 +03 +c5 +e9 +c2 +08 +04 +c5 +e9 +c2 +08 +05 +c5 +e9 +c2 +08 +06 +c5 +e9 +c2 +08 +07 +c5 +e9 +c2 +08 +08 +c5 +e9 +c2 +08 +09 +c5 +e9 +c2 +08 +0a +c5 +e9 +c2 +08 +0b +c5 +e9 +c2 +08 +0c +c5 +e9 +c2 +08 +0d +c5 +e9 +c2 +08 +0e +c5 +e9 +c2 +08 +0f +c5 +e9 +c2 +08 +10 +c5 +e9 +c2 +08 +11 +c5 +e9 +c2 +08 +12 +c5 +e9 +c2 +08 +13 +c5 +e9 +c2 +08 +14 +c5 +e9 +c2 +08 +15 +c5 +e9 +c2 +08 +16 +c5 +e9 +c2 +08 +17 +c5 +e9 +c2 +08 +18 +c5 +e9 +c2 +08 +19 +c5 +e9 +c2 +08 +1a +c5 +e9 +c2 +08 +1b +c5 +e9 +c2 +08 +1c +c5 +e9 +c2 +08 +1d +c5 +e9 +c2 +08 +1e +c5 +e9 +c2 +08 +1f +66 +0f +c2 +08 +00 +66 +0f +c2 +08 +01 +66 +0f +c2 +08 +02 +66 +0f +c2 +08 +03 +66 +0f +c2 +08 +04 +66 +0f +c2 +08 +05 +66 +0f +c2 +08 +06 +66 +0f +c2 +08 +07 +c5 +f1 +c2 +08 +00 +c5 +f1 +c2 +08 +01 +c5 +f1 +c2 +08 +02 +c5 +f1 +c2 +08 +03 +c5 +f1 +c2 +08 +04 +c5 +f1 +c2 +08 +05 +c5 +f1 +c2 +08 +06 +c5 +f1 +c2 +08 +07 +c5 +e9 +c2 +08 +00 +c5 +e9 +c2 +08 +01 +c5 +e9 +c2 +08 +02 +c5 +e9 +c2 +08 +03 +c5 +e9 +c2 +08 +04 +c5 +e9 +c2 +08 +05 +c5 +e9 +c2 +08 +06 +c5 +e9 +c2 +08 +07 +c5 +e9 +c2 +08 +08 +c5 +e9 +c2 +08 +09 +c5 +e9 +c2 +08 +0a +c5 +e9 +c2 +08 +0b +c5 +e9 +c2 +08 +0c +c5 +e9 +c2 +08 +0d +c5 +e9 +c2 +08 +0e +c5 +e9 +c2 +08 +0f +c5 +e9 +c2 +08 +10 +c5 +e9 +c2 +08 +11 +c5 +e9 +c2 +08 +12 +c5 +e9 +c2 +08 +13 +c5 +e9 +c2 +08 +14 +c5 +e9 +c2 +08 +15 +c5 +e9 +c2 +08 +16 +c5 +e9 +c2 +08 +17 +c5 +e9 +c2 +08 +18 +c5 +e9 +c2 +08 +19 +c5 +e9 +c2 +08 +1a +c5 +e9 +c2 +08 +1b +c5 +e9 +c2 +08 +1c +c5 +e9 +c2 +08 +1d +c5 +e9 +c2 +08 +1e +c5 +e9 +c2 +08 +1f +c5 +ed +c2 +cb +00 +c5 +ed +c2 +cb +01 +c5 +ed +c2 +cb +02 +c5 +ed +c2 +cb +03 +c5 +ed +c2 +cb +04 +c5 +ed +c2 +cb +05 +c5 +ed +c2 +cb +06 +c5 +ed +c2 +cb +07 +c5 +ed +c2 +cb +08 +c5 +ed +c2 +cb +09 +c5 +ed +c2 +cb +0a +c5 +ed +c2 +cb +0b +c5 +ed +c2 +cb +0c +c5 +ed +c2 +cb +0d +c5 +ed +c2 +cb +0e +c5 +ed +c2 +cb +0f +c5 +ed +c2 +cb +10 +c5 +ed +c2 +cb +11 +c5 +ed +c2 +cb +12 +c5 +ed +c2 +cb +13 +c5 +ed +c2 +cb +14 +c5 +ed +c2 +cb +15 +c5 +ed +c2 +cb +16 +c5 +ed +c2 +cb +17 +c5 +ed +c2 +cb +18 +c5 +ed +c2 +cb +19 +c5 +ed +c2 +cb +1a +c5 +ed +c2 +cb +1b +c5 +ed +c2 +cb +1c +c5 +ed +c2 +cb +1d +c5 +ed +c2 +cb +1e +c5 +ed +c2 +cb +1f +c5 +ed +c2 +08 +00 +c5 +ed +c2 +08 +01 +c5 +ed +c2 +08 +02 +c5 +ed +c2 +08 +03 +c5 +ed +c2 +08 +04 +c5 +ed +c2 +08 +05 +c5 +ed +c2 +08 +06 +c5 +ed +c2 +08 +07 +c5 +ed +c2 +08 +08 +c5 +ed +c2 +08 +09 +c5 +ed +c2 +08 +0a +c5 +ed +c2 +08 +0b +c5 +ed +c2 +08 +0c +c5 +ed +c2 +08 +0d +c5 +ed +c2 +08 +0e +c5 +ed +c2 +08 +0f +c5 +ed +c2 +08 +10 +c5 +ed +c2 +08 +11 +c5 +ed +c2 +08 +12 +c5 +ed +c2 +08 +13 +c5 +ed +c2 +08 +14 +c5 +ed +c2 +08 +15 +c5 +ed +c2 +08 +16 +c5 +ed +c2 +08 +17 +c5 +ed +c2 +08 +18 +c5 +ed +c2 +08 +19 +c5 +ed +c2 +08 +1a +c5 +ed +c2 +08 +1b +c5 +ed +c2 +08 +1c +c5 +ed +c2 +08 +1d +c5 +ed +c2 +08 +1e +c5 +ed +c2 +08 +1f +c5 +ed +c2 +08 +00 +c5 +ed +c2 +08 +01 +c5 +ed +c2 +08 +02 +c5 +ed +c2 +08 +03 +c5 +ed +c2 +08 +04 +c5 +ed +c2 +08 +05 +c5 +ed +c2 +08 +06 +c5 +ed +c2 +08 +07 +c5 +ed +c2 +08 +08 +c5 +ed +c2 +08 +09 +c5 +ed +c2 +08 +0a +c5 +ed +c2 +08 +0b +c5 +ed +c2 +08 +0c +c5 +ed +c2 +08 +0d +c5 +ed +c2 +08 +0e +c5 +ed +c2 +08 +0f +c5 +ed +c2 +08 +10 +c5 +ed +c2 +08 +11 +c5 +ed +c2 +08 +12 +c5 +ed +c2 +08 +13 +c5 +ed +c2 +08 +14 +c5 +ed +c2 +08 +15 +c5 +ed +c2 +08 +16 +c5 +ed +c2 +08 +17 +c5 +ed +c2 +08 +18 +c5 +ed +c2 +08 +19 +c5 +ed +c2 +08 +1a +c5 +ed +c2 +08 +1b +c5 +ed +c2 +08 +1c +c5 +ed +c2 +08 +1d +c5 +ed +c2 +08 +1e +c5 +ed +c2 +08 +1f +0f +c2 +ca +00 +0f +c2 +ca +01 +0f +c2 +ca +02 +0f +c2 +ca +03 +0f +c2 +ca +04 +0f +c2 +ca +05 +0f +c2 +ca +06 +0f +c2 +ca +07 +c5 +f0 +c2 +ca +00 +c5 +f0 +c2 +ca +01 +c5 +f0 +c2 +ca +02 +c5 +f0 +c2 +ca +03 +c5 +f0 +c2 +ca +04 +c5 +f0 +c2 +ca +05 +c5 +f0 +c2 +ca +06 +c5 +f0 +c2 +ca +07 +c5 +e8 +c2 +cb +00 +c5 +e8 +c2 +cb +01 +c5 +e8 +c2 +cb +02 +c5 +e8 +c2 +cb +03 +c5 +e8 +c2 +cb +04 +c5 +e8 +c2 +cb +05 +c5 +e8 +c2 +cb +06 +c5 +e8 +c2 +cb +07 +c5 +e8 +c2 +cb +08 +c5 +e8 +c2 +cb +09 +c5 +e8 +c2 +cb +0a +c5 +e8 +c2 +cb +0b +c5 +e8 +c2 +cb +0c +c5 +e8 +c2 +cb +0d +c5 +e8 +c2 +cb +0e +c5 +e8 +c2 +cb +0f +c5 +e8 +c2 +cb +10 +c5 +e8 +c2 +cb +11 +c5 +e8 +c2 +cb +12 +c5 +e8 +c2 +cb +13 +c5 +e8 +c2 +cb +14 +c5 +e8 +c2 +cb +15 +c5 +e8 +c2 +cb +16 +c5 +e8 +c2 +cb +17 +c5 +e8 +c2 +cb +18 +c5 +e8 +c2 +cb +19 +c5 +e8 +c2 +cb +1a +c5 +e8 +c2 +cb +1b +c5 +e8 +c2 +cb +1c +c5 +e8 +c2 +cb +1d +c5 +e8 +c2 +cb +1e +c5 +e8 +c2 +cb +1f +0f +c2 +08 +00 +0f +c2 +08 +01 +0f +c2 +08 +02 +0f +c2 +08 +03 +0f +c2 +08 +04 +0f +c2 +08 +05 +0f +c2 +08 +06 +0f +c2 +08 +07 +c5 +f0 +c2 +08 +00 +c5 +f0 +c2 +08 +01 +c5 +f0 +c2 +08 +02 +c5 +f0 +c2 +08 +03 +c5 +f0 +c2 +08 +04 +c5 +f0 +c2 +08 +05 +c5 +f0 +c2 +08 +06 +c5 +f0 +c2 +08 +07 +c5 +e8 +c2 +08 +00 +c5 +e8 +c2 +08 +01 +c5 +e8 +c2 +08 +02 +c5 +e8 +c2 +08 +03 +c5 +e8 +c2 +08 +04 +c5 +e8 +c2 +08 +05 +c5 +e8 +c2 +08 +06 +c5 +e8 +c2 +08 +07 +c5 +e8 +c2 +08 +08 +c5 +e8 +c2 +08 +09 +c5 +e8 +c2 +08 +0a +c5 +e8 +c2 +08 +0b +c5 +e8 +c2 +08 +0c +c5 +e8 +c2 +08 +0d +c5 +e8 +c2 +08 +0e +c5 +e8 +c2 +08 +0f +c5 +e8 +c2 +08 +10 +c5 +e8 +c2 +08 +11 +c5 +e8 +c2 +08 +12 +c5 +e8 +c2 +08 +13 +c5 +e8 +c2 +08 +14 +c5 +e8 +c2 +08 +15 +c5 +e8 +c2 +08 +16 +c5 +e8 +c2 +08 +17 +c5 +e8 +c2 +08 +18 +c5 +e8 +c2 +08 +19 +c5 +e8 +c2 +08 +1a +c5 +e8 +c2 +08 +1b +c5 +e8 +c2 +08 +1c +c5 +e8 +c2 +08 +1d +c5 +e8 +c2 +08 +1e +c5 +e8 +c2 +08 +1f +0f +c2 +08 +00 +0f +c2 +08 +01 +0f +c2 +08 +02 +0f +c2 +08 +03 +0f +c2 +08 +04 +0f +c2 +08 +05 +0f +c2 +08 +06 +0f +c2 +08 +07 +c5 +f0 +c2 +08 +00 +c5 +f0 +c2 +08 +01 +c5 +f0 +c2 +08 +02 +c5 +f0 +c2 +08 +03 +c5 +f0 +c2 +08 +04 +c5 +f0 +c2 +08 +05 +c5 +f0 +c2 +08 +06 +c5 +f0 +c2 +08 +07 +c5 +e8 +c2 +08 +00 +c5 +e8 +c2 +08 +01 +c5 +e8 +c2 +08 +02 +c5 +e8 +c2 +08 +03 +c5 +e8 +c2 +08 +04 +c5 +e8 +c2 +08 +05 +c5 +e8 +c2 +08 +06 +c5 +e8 +c2 +08 +07 +c5 +e8 +c2 +08 +08 +c5 +e8 +c2 +08 +09 +c5 +e8 +c2 +08 +0a +c5 +e8 +c2 +08 +0b +c5 +e8 +c2 +08 +0c +c5 +e8 +c2 +08 +0d +c5 +e8 +c2 +08 +0e +c5 +e8 +c2 +08 +0f +c5 +e8 +c2 +08 +10 +c5 +e8 +c2 +08 +11 +c5 +e8 +c2 +08 +12 +c5 +e8 +c2 +08 +13 +c5 +e8 +c2 +08 +14 +c5 +e8 +c2 +08 +15 +c5 +e8 +c2 +08 +16 +c5 +e8 +c2 +08 +17 +c5 +e8 +c2 +08 +18 +c5 +e8 +c2 +08 +19 +c5 +e8 +c2 +08 +1a +c5 +e8 +c2 +08 +1b +c5 +e8 +c2 +08 +1c +c5 +e8 +c2 +08 +1d +c5 +e8 +c2 +08 +1e +c5 +e8 +c2 +08 +1f +c5 +ec +c2 +cb +00 +c5 +ec +c2 +cb +01 +c5 +ec +c2 +cb +02 +c5 +ec +c2 +cb +03 +c5 +ec +c2 +cb +04 +c5 +ec +c2 +cb +05 +c5 +ec +c2 +cb +06 +c5 +ec +c2 +cb +07 +c5 +ec +c2 +cb +08 +c5 +ec +c2 +cb +09 +c5 +ec +c2 +cb +0a +c5 +ec +c2 +cb +0b +c5 +ec +c2 +cb +0c +c5 +ec +c2 +cb +0d +c5 +ec +c2 +cb +0e +c5 +ec +c2 +cb +0f +c5 +ec +c2 +cb +10 +c5 +ec +c2 +cb +11 +c5 +ec +c2 +cb +12 +c5 +ec +c2 +cb +13 +c5 +ec +c2 +cb +14 +c5 +ec +c2 +cb +15 +c5 +ec +c2 +cb +16 +c5 +ec +c2 +cb +17 +c5 +ec +c2 +cb +18 +c5 +ec +c2 +cb +19 +c5 +ec +c2 +cb +1a +c5 +ec +c2 +cb +1b +c5 +ec +c2 +cb +1c +c5 +ec +c2 +cb +1d +c5 +ec +c2 +cb +1e +c5 +ec +c2 +cb +1f +c5 +ec +c2 +08 +00 +c5 +ec +c2 +08 +01 +c5 +ec +c2 +08 +02 +c5 +ec +c2 +08 +03 +c5 +ec +c2 +08 +04 +c5 +ec +c2 +08 +05 +c5 +ec +c2 +08 +06 +c5 +ec +c2 +08 +07 +c5 +ec +c2 +08 +08 +c5 +ec +c2 +08 +09 +c5 +ec +c2 +08 +0a +c5 +ec +c2 +08 +0b +c5 +ec +c2 +08 +0c +c5 +ec +c2 +08 +0d +c5 +ec +c2 +08 +0e +c5 +ec +c2 +08 +0f +c5 +ec +c2 +08 +10 +c5 +ec +c2 +08 +11 +c5 +ec +c2 +08 +12 +c5 +ec +c2 +08 +13 +c5 +ec +c2 +08 +14 +c5 +ec +c2 +08 +15 +c5 +ec +c2 +08 +16 +c5 +ec +c2 +08 +17 +c5 +ec +c2 +08 +18 +c5 +ec +c2 +08 +19 +c5 +ec +c2 +08 +1a +c5 +ec +c2 +08 +1b +c5 +ec +c2 +08 +1c +c5 +ec +c2 +08 +1d +c5 +ec +c2 +08 +1e +c5 +ec +c2 +08 +1f +c5 +ec +c2 +08 +00 +c5 +ec +c2 +08 +01 +c5 +ec +c2 +08 +02 +c5 +ec +c2 +08 +03 +c5 +ec +c2 +08 +04 +c5 +ec +c2 +08 +05 +c5 +ec +c2 +08 +06 +c5 +ec +c2 +08 +07 +c5 +ec +c2 +08 +08 +c5 +ec +c2 +08 +09 +c5 +ec +c2 +08 +0a +c5 +ec +c2 +08 +0b +c5 +ec +c2 +08 +0c +c5 +ec +c2 +08 +0d +c5 +ec +c2 +08 +0e +c5 +ec +c2 +08 +0f +c5 +ec +c2 +08 +10 +c5 +ec +c2 +08 +11 +c5 +ec +c2 +08 +12 +c5 +ec +c2 +08 +13 +c5 +ec +c2 +08 +14 +c5 +ec +c2 +08 +15 +c5 +ec +c2 +08 +16 +c5 +ec +c2 +08 +17 +c5 +ec +c2 +08 +18 +c5 +ec +c2 +08 +19 +c5 +ec +c2 +08 +1a +c5 +ec +c2 +08 +1b +c5 +ec +c2 +08 +1c +c5 +ec +c2 +08 +1d +c5 +ec +c2 +08 +1e +c5 +ec +c2 +08 +1f +f2 +0f +c2 +ca +00 +f2 +0f +c2 +ca +01 +f2 +0f +c2 +ca +02 +f2 +0f +c2 +ca +03 +f2 +0f +c2 +ca +04 +f2 +0f +c2 +ca +05 +f2 +0f +c2 +ca +06 +f2 +0f +c2 +ca +07 +c5 +f3 +c2 +ca +00 +c5 +f3 +c2 +ca +01 +c5 +f3 +c2 +ca +02 +c5 +f3 +c2 +ca +03 +c5 +f3 +c2 +ca +04 +c5 +f3 +c2 +ca +05 +c5 +f3 +c2 +ca +06 +c5 +f3 +c2 +ca +07 +c5 +eb +c2 +cb +00 +c5 +eb +c2 +cb +01 +c5 +eb +c2 +cb +02 +c5 +eb +c2 +cb +03 +c5 +eb +c2 +cb +04 +c5 +eb +c2 +cb +05 +c5 +eb +c2 +cb +06 +c5 +eb +c2 +cb +07 +c5 +eb +c2 +cb +08 +c5 +eb +c2 +cb +09 +c5 +eb +c2 +cb +0a +c5 +eb +c2 +cb +0b +c5 +eb +c2 +cb +0c +c5 +eb +c2 +cb +0d +c5 +eb +c2 +cb +0e +c5 +eb +c2 +cb +0f +c5 +eb +c2 +cb +10 +c5 +eb +c2 +cb +11 +c5 +eb +c2 +cb +12 +c5 +eb +c2 +cb +13 +c5 +eb +c2 +cb +14 +c5 +eb +c2 +cb +15 +c5 +eb +c2 +cb +16 +c5 +eb +c2 +cb +17 +c5 +eb +c2 +cb +18 +c5 +eb +c2 +cb +19 +c5 +eb +c2 +cb +1a +c5 +eb +c2 +cb +1b +c5 +eb +c2 +cb +1c +c5 +eb +c2 +cb +1d +c5 +eb +c2 +cb +1e +c5 +eb +c2 +cb +1f +f2 +0f +c2 +08 +00 +f2 +0f +c2 +08 +01 +f2 +0f +c2 +08 +02 +f2 +0f +c2 +08 +03 +f2 +0f +c2 +08 +04 +f2 +0f +c2 +08 +05 +f2 +0f +c2 +08 +06 +f2 +0f +c2 +08 +07 +c5 +f3 +c2 +08 +00 +c5 +f3 +c2 +08 +01 +c5 +f3 +c2 +08 +02 +c5 +f3 +c2 +08 +03 +c5 +f3 +c2 +08 +04 +c5 +f3 +c2 +08 +05 +c5 +f3 +c2 +08 +06 +c5 +f3 +c2 +08 +07 +c5 +eb +c2 +08 +00 +c5 +eb +c2 +08 +01 +c5 +eb +c2 +08 +02 +c5 +eb +c2 +08 +03 +c5 +eb +c2 +08 +04 +c5 +eb +c2 +08 +05 +c5 +eb +c2 +08 +06 +c5 +eb +c2 +08 +07 +c5 +eb +c2 +08 +08 +c5 +eb +c2 +08 +09 +c5 +eb +c2 +08 +0a +c5 +eb +c2 +08 +0b +c5 +eb +c2 +08 +0c +c5 +eb +c2 +08 +0d +c5 +eb +c2 +08 +0e +c5 +eb +c2 +08 +0f +c5 +eb +c2 +08 +10 +c5 +eb +c2 +08 +11 +c5 +eb +c2 +08 +12 +c5 +eb +c2 +08 +13 +c5 +eb +c2 +08 +14 +c5 +eb +c2 +08 +15 +c5 +eb +c2 +08 +16 +c5 +eb +c2 +08 +17 +c5 +eb +c2 +08 +18 +c5 +eb +c2 +08 +19 +c5 +eb +c2 +08 +1a +c5 +eb +c2 +08 +1b +c5 +eb +c2 +08 +1c +c5 +eb +c2 +08 +1d +c5 +eb +c2 +08 +1e +c5 +eb +c2 +08 +1f +f2 +0f +c2 +08 +00 +f2 +0f +c2 +08 +01 +f2 +0f +c2 +08 +02 +f2 +0f +c2 +08 +03 +f2 +0f +c2 +08 +04 +f2 +0f +c2 +08 +05 +f2 +0f +c2 +08 +06 +f2 +0f +c2 +08 +07 +c5 +f3 +c2 +08 +00 +c5 +f3 +c2 +08 +01 +c5 +f3 +c2 +08 +02 +c5 +f3 +c2 +08 +03 +c5 +f3 +c2 +08 +04 +c5 +f3 +c2 +08 +05 +c5 +f3 +c2 +08 +06 +c5 +f3 +c2 +08 +07 +c5 +eb +c2 +08 +00 +c5 +eb +c2 +08 +01 +c5 +eb +c2 +08 +02 +c5 +eb +c2 +08 +03 +c5 +eb +c2 +08 +04 +c5 +eb +c2 +08 +05 +c5 +eb +c2 +08 +06 +c5 +eb +c2 +08 +07 +c5 +eb +c2 +08 +08 +c5 +eb +c2 +08 +09 +c5 +eb +c2 +08 +0a +c5 +eb +c2 +08 +0b +c5 +eb +c2 +08 +0c +c5 +eb +c2 +08 +0d +c5 +eb +c2 +08 +0e +c5 +eb +c2 +08 +0f +c5 +eb +c2 +08 +10 +c5 +eb +c2 +08 +11 +c5 +eb +c2 +08 +12 +c5 +eb +c2 +08 +13 +c5 +eb +c2 +08 +14 +c5 +eb +c2 +08 +15 +c5 +eb +c2 +08 +16 +c5 +eb +c2 +08 +17 +c5 +eb +c2 +08 +18 +c5 +eb +c2 +08 +19 +c5 +eb +c2 +08 +1a +c5 +eb +c2 +08 +1b +c5 +eb +c2 +08 +1c +c5 +eb +c2 +08 +1d +c5 +eb +c2 +08 +1e +c5 +eb +c2 +08 +1f +f3 +0f +c2 +ca +00 +f3 +0f +c2 +ca +01 +f3 +0f +c2 +ca +02 +f3 +0f +c2 +ca +03 +f3 +0f +c2 +ca +04 +f3 +0f +c2 +ca +05 +f3 +0f +c2 +ca +06 +f3 +0f +c2 +ca +07 +c5 +f2 +c2 +ca +00 +c5 +f2 +c2 +ca +01 +c5 +f2 +c2 +ca +02 +c5 +f2 +c2 +ca +03 +c5 +f2 +c2 +ca +04 +c5 +f2 +c2 +ca +05 +c5 +f2 +c2 +ca +06 +c5 +f2 +c2 +ca +07 +c5 +ea +c2 +cb +00 +c5 +ea +c2 +cb +01 +c5 +ea +c2 +cb +02 +c5 +ea +c2 +cb +03 +c5 +ea +c2 +cb +04 +c5 +ea +c2 +cb +05 +c5 +ea +c2 +cb +06 +c5 +ea +c2 +cb +07 +c5 +ea +c2 +cb +08 +c5 +ea +c2 +cb +09 +c5 +ea +c2 +cb +0a +c5 +ea +c2 +cb +0b +c5 +ea +c2 +cb +0c +c5 +ea +c2 +cb +0d +c5 +ea +c2 +cb +0e +c5 +ea +c2 +cb +0f +c5 +ea +c2 +cb +10 +c5 +ea +c2 +cb +11 +c5 +ea +c2 +cb +12 +c5 +ea +c2 +cb +13 +c5 +ea +c2 +cb +14 +c5 +ea +c2 +cb +15 +c5 +ea +c2 +cb +16 +c5 +ea +c2 +cb +17 +c5 +ea +c2 +cb +18 +c5 +ea +c2 +cb +19 +c5 +ea +c2 +cb +1a +c5 +ea +c2 +cb +1b +c5 +ea +c2 +cb +1c +c5 +ea +c2 +cb +1d +c5 +ea +c2 +cb +1e +c5 +ea +c2 +cb +1f +f3 +0f +c2 +08 +00 +f3 +0f +c2 +08 +01 +f3 +0f +c2 +08 +02 +f3 +0f +c2 +08 +03 +f3 +0f +c2 +08 +04 +f3 +0f +c2 +08 +05 +f3 +0f +c2 +08 +06 +f3 +0f +c2 +08 +07 +c5 +f2 +c2 +08 +00 +c5 +f2 +c2 +08 +01 +c5 +f2 +c2 +08 +02 +c5 +f2 +c2 +08 +03 +c5 +f2 +c2 +08 +04 +c5 +f2 +c2 +08 +05 +c5 +f2 +c2 +08 +06 +c5 +f2 +c2 +08 +07 +c5 +ea +c2 +08 +00 +c5 +ea +c2 +08 +01 +c5 +ea +c2 +08 +02 +c5 +ea +c2 +08 +03 +c5 +ea +c2 +08 +04 +c5 +ea +c2 +08 +05 +c5 +ea +c2 +08 +06 +c5 +ea +c2 +08 +07 +c5 +ea +c2 +08 +08 +c5 +ea +c2 +08 +09 +c5 +ea +c2 +08 +0a +c5 +ea +c2 +08 +0b +c5 +ea +c2 +08 +0c +c5 +ea +c2 +08 +0d +c5 +ea +c2 +08 +0e +c5 +ea +c2 +08 +0f +c5 +ea +c2 +08 +10 +c5 +ea +c2 +08 +11 +c5 +ea +c2 +08 +12 +c5 +ea +c2 +08 +13 +c5 +ea +c2 +08 +14 +c5 +ea +c2 +08 +15 +c5 +ea +c2 +08 +16 +c5 +ea +c2 +08 +17 +c5 +ea +c2 +08 +18 +c5 +ea +c2 +08 +19 +c5 +ea +c2 +08 +1a +c5 +ea +c2 +08 +1b +c5 +ea +c2 +08 +1c +c5 +ea +c2 +08 +1d +c5 +ea +c2 +08 +1e +c5 +ea +c2 +08 +1f +f3 +0f +c2 +08 +00 +f3 +0f +c2 +08 +01 +f3 +0f +c2 +08 +02 +f3 +0f +c2 +08 +03 +f3 +0f +c2 +08 +04 +f3 +0f +c2 +08 +05 +f3 +0f +c2 +08 +06 +f3 +0f +c2 +08 +07 +c5 +f2 +c2 +08 +00 +c5 +f2 +c2 +08 +01 +c5 +f2 +c2 +08 +02 +c5 +f2 +c2 +08 +03 +c5 +f2 +c2 +08 +04 +c5 +f2 +c2 +08 +05 +c5 +f2 +c2 +08 +06 +c5 +f2 +c2 +08 +07 +c5 +ea +c2 +08 +00 +c5 +ea +c2 +08 +01 +c5 +ea +c2 +08 +02 +c5 +ea +c2 +08 +03 +c5 +ea +c2 +08 +04 +c5 +ea +c2 +08 +05 +c5 +ea +c2 +08 +06 +c5 +ea +c2 +08 +07 +c5 +ea +c2 +08 +08 +c5 +ea +c2 +08 +09 +c5 +ea +c2 +08 +0a +c5 +ea +c2 +08 +0b +c5 +ea +c2 +08 +0c +c5 +ea +c2 +08 +0d +c5 +ea +c2 +08 +0e +c5 +ea +c2 +08 +0f +c5 +ea +c2 +08 +10 +c5 +ea +c2 +08 +11 +c5 +ea +c2 +08 +12 +c5 +ea +c2 +08 +13 +c5 +ea +c2 +08 +14 +c5 +ea +c2 +08 +15 +c5 +ea +c2 +08 +16 +c5 +ea +c2 +08 +17 +c5 +ea +c2 +08 +18 +c5 +ea +c2 +08 +19 +c5 +ea +c2 +08 +1a +c5 +ea +c2 +08 +1b +c5 +ea +c2 +08 +1c +c5 +ea +c2 +08 +1d +c5 +ea +c2 +08 +1e +c5 +ea +c2 +08 +1f diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bittest.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bittest.asm new file mode 100644 index 0000000000..62c245d43e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bittest.asm @@ -0,0 +1 @@ +btr eax, 4 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bittest.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bittest.hex new file mode 100644 index 0000000000..fff4f07843 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bittest.hex @@ -0,0 +1,5 @@ +66 +0f +ba +f0 +04 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bmi1.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bmi1.asm new file mode 100644 index 0000000000..4913a4f811 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bmi1.asm @@ -0,0 +1,32 @@ +[bits 64] +andn eax, ebx, ecx ; c4 e2 60 f2 c1 +andn eax, ebx, [0] ; c4 e2 60 f2 04 25 00 00 00 00 +andn rax, rbx, rcx ; c4 e2 e0 f2 c1 +andn rax, rbx, [0] ; c4 e2 e0 f2 04 25 00 00 00 00 + +bextr eax, ebx, ecx ; c4 e2 70 f7 c3 +bextr eax, [0], ecx ; c4 e2 70 f7 04 25 00 00 00 00 +bextr rax, rbx, rcx ; c4 e2 f0 f7 c3 +bextr rax, [0], rcx ; c4 e2 f0 f7 04 25 00 00 00 00 + +blsi eax, ecx ; c4 e2 78 f3 d9 +blsi eax, [0] ; c4 e2 78 f3 1c 25 00 00 00 00 +blsi rax, rcx ; c4 e2 f8 f3 d9 +blsi rax, [0] ; c4 e2 f8 f3 1c 25 00 00 00 00 + +blsmsk eax, ecx ; c4 e2 78 f3 d1 +blsmsk eax, [0] ; c4 e2 78 f3 14 25 00 00 00 00 +blsmsk rax, rcx ; c4 e2 f8 f3 d1 +blsmsk rax, [0] ; c4 e2 f8 f3 14 25 00 00 00 00 + +blsr eax, ecx ; c4 e2 78 f3 c9 +blsr eax, [0] ; c4 e2 78 f3 0c 25 00 00 00 00 +blsr rax, rcx ; c4 e2 f8 f3 c9 +blsr rax, [0] ; c4 e2 f8 f3 0c 25 00 00 00 00 + +tzcnt ax, bx ; 66 f3 0f bc c3 +tzcnt ax, [0] ; 66 f3 0f bc 04 25 00 00 00 00 +tzcnt eax, ebx ; f3 0f bc c3 +tzcnt eax, [0] ; f3 0f bc 04 25 00 00 00 00 +tzcnt rax, rbx ; f3 48 0f bc c3 +tzcnt rax, [0] ; f3 48 0f bc 04 25 00 00 00 00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bmi1.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bmi1.hex new file mode 100644 index 0000000000..fc692cdef6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bmi1.hex @@ -0,0 +1,193 @@ +c4 +e2 +60 +f2 +c1 +c4 +e2 +60 +f2 +04 +25 +00 +00 +00 +00 +c4 +e2 +e0 +f2 +c1 +c4 +e2 +e0 +f2 +04 +25 +00 +00 +00 +00 +c4 +e2 +70 +f7 +c3 +c4 +e2 +70 +f7 +04 +25 +00 +00 +00 +00 +c4 +e2 +f0 +f7 +c3 +c4 +e2 +f0 +f7 +04 +25 +00 +00 +00 +00 +c4 +e2 +78 +f3 +d9 +c4 +e2 +78 +f3 +1c +25 +00 +00 +00 +00 +c4 +e2 +f8 +f3 +d9 +c4 +e2 +f8 +f3 +1c +25 +00 +00 +00 +00 +c4 +e2 +78 +f3 +d1 +c4 +e2 +78 +f3 +14 +25 +00 +00 +00 +00 +c4 +e2 +f8 +f3 +d1 +c4 +e2 +f8 +f3 +14 +25 +00 +00 +00 +00 +c4 +e2 +78 +f3 +c9 +c4 +e2 +78 +f3 +0c +25 +00 +00 +00 +00 +c4 +e2 +f8 +f3 +c9 +c4 +e2 +f8 +f3 +0c +25 +00 +00 +00 +00 +66 +f3 +0f +bc +c3 +66 +f3 +0f +bc +04 +25 +00 +00 +00 +00 +f3 +0f +bc +c3 +f3 +0f +bc +04 +25 +00 +00 +00 +00 +f3 +48 +0f +bc +c3 +f3 +48 +0f +bc +04 +25 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bmi2.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bmi2.asm new file mode 100644 index 0000000000..d19d7f3ae5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bmi2.asm @@ -0,0 +1,40 @@ +[bits 64] +bzhi eax, ebx, ecx ; c4 e2 70 f5 c3 +bzhi eax, [0], ecx ; c4 e2 70 f5 04 25 00 00 00 00 +bzhi rax, rbx, rcx ; c4 e2 f0 f5 c3 +bzhi rax, [0], rcx ; c4 e2 f0 f5 04 25 00 00 00 00 + +mulx eax, ebx, ecx ; c4 e2 63 f6 c1 +mulx eax, ebx, [0] ; c4 e2 63 f6 04 25 00 00 00 00 +mulx rax, rbx, rcx ; c4 e2 e3 f6 c1 +mulx rax, rbx, [0] ; c4 e2 e3 f6 04 25 00 00 00 00 + +pdep eax, ebx, ecx ; c4 e2 63 f5 c1 +pdep eax, ebx, [0] ; c4 e2 63 f5 04 25 00 00 00 00 +pdep rax, rbx, rcx ; c4 e2 e3 f5 c1 +pdep rax, rbx, [0] ; c4 e2 e3 f5 04 25 00 00 00 00 + +pext eax, ebx, ecx ; c4 e2 62 f5 c1 +pext eax, ebx, [0] ; c4 e2 62 f5 04 25 00 00 00 00 +pext rax, rbx, rcx ; c4 e2 e2 f5 c1 +pext rax, rbx, [0] ; c4 e2 e2 f5 04 25 00 00 00 00 + +rorx eax, ebx, 3 ; c4 e3 7b f0 c3 03 +rorx eax, [0], 3 ; c4 e3 7b f0 04 25 00 00 00 00 03 +rorx rax, rbx, 3 ; c4 e3 fb f0 c3 03 +rorx rax, [0], 3 ; c4 e3 fb f0 04 25 00 00 00 00 03 + +sarx eax, ebx, ecx ; c4 e2 72 f7 c3 +sarx eax, [0], ecx ; c4 e2 72 f7 04 25 00 00 00 00 +sarx rax, rbx, rcx ; c4 e2 f2 f7 c3 +sarx rax, [0], rcx ; c4 e2 f2 f7 04 25 00 00 00 00 + +shlx eax, ebx, ecx ; c4 e2 71 f7 c3 +shlx eax, [0], ecx ; c4 e2 71 f7 04 25 00 00 00 00 +shlx rax, rbx, rcx ; c4 e2 f1 f7 c3 +shlx rax, [0], rcx ; c4 e2 f1 f7 04 25 00 00 00 00 + +shrx eax, ebx, ecx ; c4 e2 73 f7 c3 +shrx eax, [0], ecx ; c4 e2 73 f7 04 25 00 00 00 00 +shrx rax, rbx, rcx ; c4 e2 f3 f7 c3 +shrx rax, [0], rcx ; c4 e2 f3 f7 04 25 00 00 00 00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bmi2.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bmi2.hex new file mode 100644 index 0000000000..c152972921 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bmi2.hex @@ -0,0 +1,244 @@ +c4 +e2 +70 +f5 +c3 +c4 +e2 +70 +f5 +04 +25 +00 +00 +00 +00 +c4 +e2 +f0 +f5 +c3 +c4 +e2 +f0 +f5 +04 +25 +00 +00 +00 +00 +c4 +e2 +63 +f6 +c1 +c4 +e2 +63 +f6 +04 +25 +00 +00 +00 +00 +c4 +e2 +e3 +f6 +c1 +c4 +e2 +e3 +f6 +04 +25 +00 +00 +00 +00 +c4 +e2 +63 +f5 +c1 +c4 +e2 +63 +f5 +04 +25 +00 +00 +00 +00 +c4 +e2 +e3 +f5 +c1 +c4 +e2 +e3 +f5 +04 +25 +00 +00 +00 +00 +c4 +e2 +62 +f5 +c1 +c4 +e2 +62 +f5 +04 +25 +00 +00 +00 +00 +c4 +e2 +e2 +f5 +c1 +c4 +e2 +e2 +f5 +04 +25 +00 +00 +00 +00 +c4 +e3 +7b +f0 +c3 +03 +c4 +e3 +7b +f0 +04 +25 +00 +00 +00 +00 +03 +c4 +e3 +fb +f0 +c3 +03 +c4 +e3 +fb +f0 +04 +25 +00 +00 +00 +00 +03 +c4 +e2 +72 +f7 +c3 +c4 +e2 +72 +f7 +04 +25 +00 +00 +00 +00 +c4 +e2 +f2 +f7 +c3 +c4 +e2 +f2 +f7 +04 +25 +00 +00 +00 +00 +c4 +e2 +71 +f7 +c3 +c4 +e2 +71 +f7 +04 +25 +00 +00 +00 +00 +c4 +e2 +f1 +f7 +c3 +c4 +e2 +f1 +f7 +04 +25 +00 +00 +00 +00 +c4 +e2 +73 +f7 +c3 +c4 +e2 +73 +f7 +04 +25 +00 +00 +00 +00 +c4 +e2 +f3 +f7 +c3 +c4 +e2 +f3 +f7 +04 +25 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bswap64.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bswap64.asm new file mode 100644 index 0000000000..d6a39ad267 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bswap64.asm @@ -0,0 +1,4 @@ +[bits 64] + +bswap r8 +bswap rax diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bswap64.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bswap64.hex new file mode 100644 index 0000000000..91560d3dc8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/bswap64.hex @@ -0,0 +1,6 @@ +49 +0f +c8 +48 +0f +c8 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/clmul.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/clmul.asm new file mode 100644 index 0000000000..92e168ef89 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/clmul.asm @@ -0,0 +1,42 @@ +[bits 64] + +pclmulqdq xmm1, xmm2, 5 +pclmulqdq xmm1, [rax], byte 5 +pclmulqdq xmm1, dqword [rax], 5 +vpclmulqdq xmm1, xmm2, 0x10 +vpclmulqdq xmm1, dqword [rbx], 0x10 +vpclmulqdq xmm0, xmm1, xmm2, 0x10 +vpclmulqdq xmm0, xmm1, dqword [rbx], 0x10 + +pclmullqlqdq xmm1, xmm2 +pclmullqlqdq xmm1, [rax] +pclmullqlqdq xmm1, dqword [rax] +vpclmullqlqdq xmm1, xmm2 +vpclmullqlqdq xmm1, dqword[rbx] +vpclmullqlqdq xmm0, xmm1, xmm2 +vpclmullqlqdq xmm0, xmm1, dqword[rbx] + +pclmulhqlqdq xmm1, xmm2 +pclmulhqlqdq xmm1, [rax] +pclmulhqlqdq xmm1, dqword [rax] +vpclmulhqlqdq xmm1, xmm2 +vpclmulhqlqdq xmm1, dqword[rbx] +vpclmulhqlqdq xmm0, xmm1, xmm2 +vpclmulhqlqdq xmm0, xmm1, dqword[rbx] + +pclmullqhqdq xmm1, xmm2 +pclmullqhqdq xmm1, [rax] +pclmullqhqdq xmm1, dqword [rax] +vpclmullqhqdq xmm1, xmm2 +vpclmullqhqdq xmm1, dqword[rbx] +vpclmullqhqdq xmm0, xmm1, xmm2 +vpclmullqhqdq xmm0, xmm1, dqword[rbx] + +pclmulhqhqdq xmm1, xmm2 +pclmulhqhqdq xmm1, [rax] +pclmulhqhqdq xmm1, dqword [rax] +vpclmulhqhqdq xmm1, xmm2 +vpclmulhqhqdq xmm1, dqword[rbx] +vpclmulhqhqdq xmm0, xmm1, xmm2 +vpclmulhqhqdq xmm0, xmm1, dqword[rbx] + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/clmul.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/clmul.hex new file mode 100644 index 0000000000..6aad748ac3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/clmul.hex @@ -0,0 +1,210 @@ +66 +0f +3a +44 +ca +05 +66 +0f +3a +44 +08 +05 +66 +0f +3a +44 +08 +05 +c4 +e3 +71 +44 +ca +10 +c4 +e3 +71 +44 +0b +10 +c4 +e3 +71 +44 +c2 +10 +c4 +e3 +71 +44 +03 +10 +66 +0f +3a +44 +ca +00 +66 +0f +3a +44 +08 +00 +66 +0f +3a +44 +08 +00 +c4 +e3 +71 +44 +ca +00 +c4 +e3 +71 +44 +0b +00 +c4 +e3 +71 +44 +c2 +00 +c4 +e3 +71 +44 +03 +00 +66 +0f +3a +44 +ca +01 +66 +0f +3a +44 +08 +01 +66 +0f +3a +44 +08 +01 +c4 +e3 +71 +44 +ca +01 +c4 +e3 +71 +44 +0b +01 +c4 +e3 +71 +44 +c2 +01 +c4 +e3 +71 +44 +03 +01 +66 +0f +3a +44 +ca +10 +66 +0f +3a +44 +08 +10 +66 +0f +3a +44 +08 +10 +c4 +e3 +71 +44 +ca +10 +c4 +e3 +71 +44 +0b +10 +c4 +e3 +71 +44 +c2 +10 +c4 +e3 +71 +44 +03 +10 +66 +0f +3a +44 +ca +11 +66 +0f +3a +44 +08 +11 +66 +0f +3a +44 +08 +11 +c4 +e3 +71 +44 +ca +11 +c4 +e3 +71 +44 +0b +11 +c4 +e3 +71 +44 +c2 +11 +c4 +e3 +71 +44 +03 +11 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cmpxchg.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cmpxchg.asm new file mode 100644 index 0000000000..f306540cac --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cmpxchg.asm @@ -0,0 +1,5 @@ +[bits 64] +cmpxchg8b qword [0] +cmpxchg8b [0] +cmpxchg16b dqword [0] +cmpxchg16b [0] diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cmpxchg.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cmpxchg.hex new file mode 100644 index 0000000000..b2879fdcbb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cmpxchg.hex @@ -0,0 +1,34 @@ +0f +c7 +0c +25 +00 +00 +00 +00 +0f +c7 +0c +25 +00 +00 +00 +00 +48 +0f +c7 +0c +25 +00 +00 +00 +00 +48 +0f +c7 +0c +25 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cpubasic-err.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cpubasic-err.asm new file mode 100644 index 0000000000..795dc90077 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cpubasic-err.asm @@ -0,0 +1,17 @@ +[cpu 8086] +pause + +shl ax, 2 + +cpu 386 +fninit + +cpu 386 fpu +fninit + +cpu 8086 + +shl ax, 1 +shl ax, 2 +movsd +push 0 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cpubasic-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cpubasic-err.errwarn new file mode 100644 index 0000000000..3c2b876c0f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cpubasic-err.errwarn @@ -0,0 +1,6 @@ +-:2: warning: `pause' is an instruction in CPU P4 +-:4: error: requires CPU 186 +-:7: warning: `fninit' is an instruction in CPU FPU +-:15: error: requires CPU 186 +-:16: warning: `movsd' is an instruction in CPU 386 +-:17: error: requires CPU 186 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cyrix.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cyrix.asm new file mode 100644 index 0000000000..44ced814b8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cyrix.asm @@ -0,0 +1,17 @@ +[bits 32] + svdc tword [2*eax+esi+12345678h],cs + svdc tword [2*eax+esi+12345678h],ds + svdc [2*eax+esi+12345678h],es + + rsdc cs,tword [2*eax+esi+12345678h] + rsdc ds,tword [2*eax+esi+12345678h] + rsdc es,[2*eax+esi+12345678h] + + wrshr eax + wrshr dword [4*edx+esi+12345678h] + wrshr [4*edx+esi+12345678h] + + rdshr eax + rdshr dword [4*edx+esi+12345678h] + rdshr [4*edx+esi+12345678h] + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cyrix.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cyrix.hex new file mode 100644 index 0000000000..1d1c07a741 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/cyrix.hex @@ -0,0 +1,86 @@ +0f +78 +8c +46 +78 +56 +34 +12 +0f +78 +9c +46 +78 +56 +34 +12 +0f +78 +84 +46 +78 +56 +34 +12 +0f +79 +8c +46 +78 +56 +34 +12 +0f +79 +9c +46 +78 +56 +34 +12 +0f +79 +84 +46 +78 +56 +34 +12 +0f +37 +c0 +0f +37 +84 +96 +78 +56 +34 +12 +0f +37 +84 +96 +78 +56 +34 +12 +0f +36 +c0 +0f +36 +84 +96 +78 +56 +34 +12 +0f +36 +84 +96 +78 +56 +34 +12 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/div-err.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/div-err.asm new file mode 100644 index 0000000000..0afd8cc465 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/div-err.asm @@ -0,0 +1,7 @@ +div byte si +div word si +div dword si +div byte esi +div word esi +div dword esi + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/div-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/div-err.errwarn new file mode 100644 index 0000000000..af46625262 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/div-err.errwarn @@ -0,0 +1,4 @@ +-:1: error: cannot override register size +-:3: error: cannot override register size +-:4: error: cannot override register size +-:5: error: cannot override register size diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-nonzero.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-nonzero.asm new file mode 100644 index 0000000000..27d36bd0f8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-nonzero.asm @@ -0,0 +1,6 @@ +; Ticket #58 +; Also tests that this isn't seen as a circular reference. +[bits 64] +a: +lea rbp,[rsi+rbp*1+(b-a)] +b: diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-nonzero.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-nonzero.hex new file mode 100644 index 0000000000..dd2b57ec14 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-nonzero.hex @@ -0,0 +1,5 @@ +48 +8d +6c +2e +05 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-over.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-over.asm new file mode 100644 index 0000000000..13185717ba --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-over.asm @@ -0,0 +1,4 @@ +[bits 32] +%define P 0xB7E15163 +%define Q 0x9E3779B9 +lea eax,[eax+P+Q] diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-over.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-over.errwarn new file mode 100644 index 0000000000..6a622a996e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-over.errwarn @@ -0,0 +1 @@ +-:4: warning: value does not fit in 32 bit field diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-over.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-over.hex new file mode 100644 index 0000000000..7a32106c13 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-over.hex @@ -0,0 +1,6 @@ +8d +80 +1c +cb +18 +56 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-warn.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-warn.asm new file mode 100644 index 0000000000..62e9444887 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-warn.asm @@ -0,0 +1,18 @@ +[bits 32] +add [byte ebp*8+06h],ecx ;db 01,0c,0ed,06 probably wrong +dd 90909090h +add [dword ebp*8+06h],ecx ;db 01,0c,0ed,06,0,0,0 OK +dd 90909090h +add ecx,[byte ebp*8+06h] ;db 03,0c,0ed,06 probably wrong +dd 90909090h +add ecx,[dword ebp*8+06h] +dd 90909090h +add ecx,[ebp*8+06h] +dd 90909090h +add ecx,[byte ebx*8+06h] ;db 03,0c,0dd,06 probably wrong +dd 90909090h +add ecx,[dword ebx*8+06h] +dd 90909090h +add ecx,[ebx*8+06h] +dd 90909090h + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-warn.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-warn.errwarn new file mode 100644 index 0000000000..d805738ce6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-warn.errwarn @@ -0,0 +1,3 @@ +-:2: warning: invalid displacement size; fixed +-:6: warning: invalid displacement size; fixed +-:12: warning: invalid displacement size; fixed diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-warn.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-warn.hex new file mode 100644 index 0000000000..b9c2b021db --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ea-warn.hex @@ -0,0 +1,88 @@ +01 +0c +ed +06 +00 +00 +00 +90 +90 +90 +90 +01 +0c +ed +06 +00 +00 +00 +90 +90 +90 +90 +03 +0c +ed +06 +00 +00 +00 +90 +90 +90 +90 +03 +0c +ed +06 +00 +00 +00 +90 +90 +90 +90 +03 +0c +ed +06 +00 +00 +00 +90 +90 +90 +90 +03 +0c +dd +06 +00 +00 +00 +90 +90 +90 +90 +03 +0c +dd +06 +00 +00 +00 +90 +90 +90 +90 +03 +0c +dd +06 +00 +00 +00 +90 +90 +90 +90 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ebpindex.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ebpindex.asm new file mode 100644 index 0000000000..bf9f1fc9b3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ebpindex.asm @@ -0,0 +1,5 @@ +[bits 32] +xor eax, [ebp+4*ecx ] +xor ebx, [ebp+4*ecx+ 4] +xor esi, [ebp+4*ecx+ 8] +xor edi, [ebp+4*ecx+12] diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ebpindex.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ebpindex.hex new file mode 100644 index 0000000000..bbc1fcaf67 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ebpindex.hex @@ -0,0 +1,16 @@ +33 +44 +8d +00 +33 +5c +8d +04 +33 +74 +8d +08 +33 +7c +8d +0c diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/effaddr.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/effaddr.asm new file mode 100644 index 0000000000..1a22a15803 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/effaddr.asm @@ -0,0 +1,18 @@ +[bits 32] +mov ax,[eax+ebx+ecx-eax] +mov ax,[eax+ecx+ebx-eax] +lea edi,[edi*8+eax+label] +lea edi,[eax+edi*8+label] +mov eax,[eax*2] +mov eax,[nosplit eax*2] +mov eax,[esi+ebp] +mov eax,[ebp+esi] +mov eax,[esi*1+ebp] +mov eax,[ebp*1+esi] +mov eax,[byte eax] +mov eax,[dword eax] +label +dd 5 +label2 +;mov ax,[eax+ebx*(label2-label)] ; not supported +mov ax,[eax*2+ebx*2-ebx] diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/effaddr.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/effaddr.hex new file mode 100644 index 0000000000..225a21523a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/effaddr.hex @@ -0,0 +1,63 @@ +66 +8b +04 +0b +66 +8b +04 +19 +8d +bc +f8 +37 +00 +00 +00 +8d +bc +f8 +37 +00 +00 +00 +8b +04 +00 +8b +04 +45 +00 +00 +00 +00 +8b +04 +2e +8b +44 +35 +00 +8b +44 +35 +00 +8b +04 +2e +8b +40 +00 +8b +80 +00 +00 +00 +00 +05 +00 +00 +00 +66 +8b +04 +43 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/enter.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/enter.asm new file mode 100644 index 0000000000..b8118dccbd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/enter.asm @@ -0,0 +1,9 @@ +[bits 32] +enter 4,0 +o32 enter 4,0 +o16 enter 4,0 + +[bits 16] +enter 4,0 +a32 o32 enter 4,0 +a32 o16 enter 4,0 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/enter.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/enter.errwarn new file mode 100644 index 0000000000..a198a9109f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/enter.errwarn @@ -0,0 +1,2 @@ +-:8: warning: address size override ignored +-:9: warning: address size override ignored diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/enter.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/enter.hex new file mode 100644 index 0000000000..51b874141d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/enter.hex @@ -0,0 +1,26 @@ +c8 +04 +00 +00 +c8 +04 +00 +00 +66 +c8 +04 +00 +00 +c8 +04 +00 +00 +66 +c8 +04 +00 +00 +c8 +04 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/eptvpid.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/eptvpid.asm new file mode 100644 index 0000000000..8c4881f4d9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/eptvpid.asm @@ -0,0 +1,8 @@ +[bits 32] +invept eax, [eax] +invvpid eax, [eax] + +[bits 64] +invept rax, [rax] +invvpid rax, [rax] + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/eptvpid.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/eptvpid.hex new file mode 100644 index 0000000000..1e2c24202b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/eptvpid.hex @@ -0,0 +1,22 @@ +66 +0f +38 +80 +00 +66 +0f +38 +81 +00 +66 +48 +0f +38 +80 +00 +66 +48 +0f +38 +81 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/f16c.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/f16c.asm new file mode 100644 index 0000000000..06fa5f1d74 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/f16c.asm @@ -0,0 +1,10 @@ +[bits 64] +vcvtph2ps ymm1, xmm2 +vcvtph2ps ymm1, oword [0] +vcvtph2ps xmm1, xmm2 +vcvtph2ps xmm1, qword [0] + +vcvtps2ph xmm1, ymm2, 4 +vcvtps2ph oword [0], ymm2, 8 +vcvtps2ph xmm1, xmm2, 3 +vcvtps2ph qword [0], xmm2, 5 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/f16c.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/f16c.hex new file mode 100644 index 0000000000..8ba06fc7d6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/f16c.hex @@ -0,0 +1,64 @@ +c4 +e2 +7d +13 +ca +c4 +e2 +7d +13 +0c +25 +00 +00 +00 +00 +c4 +e2 +79 +13 +ca +c4 +e2 +79 +13 +0c +25 +00 +00 +00 +00 +c4 +e3 +7d +1d +d1 +04 +c4 +e3 +7d +1d +14 +25 +00 +00 +00 +00 +08 +c4 +e3 +79 +1d +d1 +03 +c4 +e3 +79 +1d +14 +25 +00 +00 +00 +00 +05 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/far64.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/far64.asm new file mode 100644 index 0000000000..4456b88de0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/far64.asm @@ -0,0 +1,7 @@ +[bits 64] +call far dword [0] +call far qword [0] +call far [0] +jmp far dword [0] +jmp far qword [0] +jmp far [0] diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/far64.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/far64.hex new file mode 100644 index 0000000000..88bdcd75bb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/far64.hex @@ -0,0 +1,44 @@ +ff +1c +25 +00 +00 +00 +00 +48 +ff +1c +25 +00 +00 +00 +00 +ff +1c +25 +00 +00 +00 +00 +ff +2c +25 +00 +00 +00 +00 +48 +ff +2c +25 +00 +00 +00 +00 +ff +2c +25 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/farbasic.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/farbasic.asm new file mode 100644 index 0000000000..fa1ced0fc0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/farbasic.asm @@ -0,0 +1,12 @@ +equval equ 6:7 + +[bits 32] + +jmp 5:4 + +jmp far equval + +[bits 16] + +jmp 8:9 + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/farbasic.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/farbasic.hex new file mode 100644 index 0000000000..3f07a9a3fd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/farbasic.hex @@ -0,0 +1,19 @@ +ea +04 +00 +00 +00 +05 +00 +ea +07 +00 +00 +00 +06 +00 +ea +09 +00 +08 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/farithr.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/farithr.asm new file mode 100644 index 0000000000..6b004dad89 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/farithr.asm @@ -0,0 +1,9 @@ + fsub st1 + fsubp st1 + fsubr st1 + fsubrp st1 + fdiv st1 + fdivp st1 + fdivr st1 + fdivrp st1 + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/farithr.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/farithr.hex new file mode 100644 index 0000000000..7d06b3c1b5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/farithr.hex @@ -0,0 +1,16 @@ +d8 +e1 +de +e9 +d8 +e9 +de +e1 +d8 +f1 +de +f9 +d8 +f9 +de +f1 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fcmov.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fcmov.asm new file mode 100644 index 0000000000..07f8358a30 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fcmov.asm @@ -0,0 +1,8 @@ +fcmovb st0, st1 +fcmovbe st0, st1 +fcmove st0, st1 +fcmovnb st0, st1 +fcmovnbe st0, st1 +fcmovne st0, st1 +fcmovnu st0, st1 +fcmovu st0, st1 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fcmov.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fcmov.hex new file mode 100644 index 0000000000..e8e9c821c0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fcmov.hex @@ -0,0 +1,16 @@ +da +c1 +da +d1 +da +c9 +db +c1 +db +d1 +db +c9 +db +d9 +da +d9 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fma.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fma.asm new file mode 100644 index 0000000000..9bfb512be0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fma.asm @@ -0,0 +1,289 @@ +[bits 64] +vfmadd132ss xmm1, xmm2, xmm3 +vfmadd132ss xmm1, xmm2, dword [rax] +vfmadd132ss xmm1, xmm2, [rax] +vfmadd231ss xmm1, xmm2, xmm3 +vfmadd231ss xmm1, xmm2, dword [rax] +vfmadd231ss xmm1, xmm2, [rax] +vfmadd213ss xmm1, xmm2, xmm3 +vfmadd213ss xmm1, xmm2, dword [rax] +vfmadd213ss xmm1, xmm2, [rax] +vfmadd132sd xmm1, xmm2, xmm3 +vfmadd132sd xmm1, xmm2, qword [rax] +vfmadd132sd xmm1, xmm2, [rax] +vfmadd231sd xmm1, xmm2, xmm3 +vfmadd231sd xmm1, xmm2, qword [rax] +vfmadd231sd xmm1, xmm2, [rax] +vfmadd213sd xmm1, xmm2, xmm3 +vfmadd213sd xmm1, xmm2, qword [rax] +vfmadd213sd xmm1, xmm2, [rax] +vfmadd132ps xmm1, xmm2, xmm3 +vfmadd132ps xmm1, xmm2, xmm3 +vfmadd132ps xmm1, xmm2, [rax] +vfmadd231ps xmm1, xmm2, xmm3 +vfmadd231ps xmm1, xmm2, xmm3 +vfmadd231ps xmm1, xmm2, [rax] +vfmadd213ps xmm1, xmm2, xmm3 +vfmadd213ps xmm1, xmm2, xmm3 +vfmadd213ps xmm1, xmm2, [rax] +vfmadd132ps ymm1, ymm2, ymm3 +vfmadd132ps ymm1, ymm2, yword [rax] +vfmadd132ps ymm1, ymm2, [rax] +vfmadd231ps ymm1, ymm2, ymm3 +vfmadd231ps ymm1, ymm2, yword [rax] +vfmadd231ps ymm1, ymm2, [rax] +vfmadd213ps ymm1, ymm2, ymm3 +vfmadd213ps ymm1, ymm2, yword [rax] +vfmadd213ps ymm1, ymm2, [rax] +vfmadd132pd xmm1, xmm2, xmm3 +vfmadd132pd xmm1, xmm2, dqword [rax] +vfmadd132pd xmm1, xmm2, [rax] +vfmadd231pd xmm1, xmm2, xmm3 +vfmadd231pd xmm1, xmm2, dqword [rax] +vfmadd231pd xmm1, xmm2, [rax] +vfmadd213pd xmm1, xmm2, xmm3 +vfmadd213pd xmm1, xmm2, dqword [rax] +vfmadd213pd xmm1, xmm2, [rax] +vfmadd132pd ymm1, ymm2, ymm3 +vfmadd132pd ymm1, ymm2, yword [rax] +vfmadd132pd ymm1, ymm2, [rax] +vfmadd231pd ymm1, ymm2, ymm3 +vfmadd231pd ymm1, ymm2, yword [rax] +vfmadd231pd ymm1, ymm2, [rax] +vfmadd213pd ymm1, ymm2, ymm3 +vfmadd213pd ymm1, ymm2, yword [rax] +vfmadd213pd ymm1, ymm2, [rax] +vfmsub132ss xmm1, xmm2, xmm3 +vfmsub132ss xmm1, xmm2, dword [rax] +vfmsub132ss xmm1, xmm2, [rax] +vfmsub231ss xmm1, xmm2, xmm3 +vfmsub231ss xmm1, xmm2, dword [rax] +vfmsub231ss xmm1, xmm2, [rax] +vfmsub213ss xmm1, xmm2, xmm3 +vfmsub213ss xmm1, xmm2, dword [rax] +vfmsub213ss xmm1, xmm2, [rax] +vfmsub132sd xmm1, xmm2, xmm3 +vfmsub132sd xmm1, xmm2, qword [rax] +vfmsub132sd xmm1, xmm2, [rax] +vfmsub231sd xmm1, xmm2, xmm3 +vfmsub231sd xmm1, xmm2, qword [rax] +vfmsub231sd xmm1, xmm2, [rax] +vfmsub213sd xmm1, xmm2, xmm3 +vfmsub213sd xmm1, xmm2, qword [rax] +vfmsub213sd xmm1, xmm2, [rax] +vfmsub132ps xmm1, xmm2, xmm3 +vfmsub132ps xmm1, xmm2, xmm3 +vfmsub132ps xmm1, xmm2, [rax] +vfmsub231ps xmm1, xmm2, xmm3 +vfmsub231ps xmm1, xmm2, xmm3 +vfmsub231ps xmm1, xmm2, [rax] +vfmsub213ps xmm1, xmm2, xmm3 +vfmsub213ps xmm1, xmm2, xmm3 +vfmsub213ps xmm1, xmm2, [rax] +vfmsub132ps ymm1, ymm2, ymm3 +vfmsub132ps ymm1, ymm2, yword [rax] +vfmsub132ps ymm1, ymm2, [rax] +vfmsub231ps ymm1, ymm2, ymm3 +vfmsub231ps ymm1, ymm2, yword [rax] +vfmsub231ps ymm1, ymm2, [rax] +vfmsub213ps ymm1, ymm2, ymm3 +vfmsub213ps ymm1, ymm2, yword [rax] +vfmsub213ps ymm1, ymm2, [rax] +vfmsub132pd xmm1, xmm2, xmm3 +vfmsub132pd xmm1, xmm2, dqword [rax] +vfmsub132pd xmm1, xmm2, [rax] +vfmsub231pd xmm1, xmm2, xmm3 +vfmsub231pd xmm1, xmm2, dqword [rax] +vfmsub231pd xmm1, xmm2, [rax] +vfmsub213pd xmm1, xmm2, xmm3 +vfmsub213pd xmm1, xmm2, dqword [rax] +vfmsub213pd xmm1, xmm2, [rax] +vfmsub132pd ymm1, ymm2, ymm3 +vfmsub132pd ymm1, ymm2, yword [rax] +vfmsub132pd ymm1, ymm2, [rax] +vfmsub231pd ymm1, ymm2, ymm3 +vfmsub231pd ymm1, ymm2, yword [rax] +vfmsub231pd ymm1, ymm2, [rax] +vfmsub213pd ymm1, ymm2, ymm3 +vfmsub213pd ymm1, ymm2, yword [rax] +vfmsub213pd ymm1, ymm2, [rax] +vfnmadd132ss xmm1, xmm2, xmm3 +vfnmadd132ss xmm1, xmm2, dword [rax] +vfnmadd132ss xmm1, xmm2, [rax] +vfnmadd231ss xmm1, xmm2, xmm3 +vfnmadd231ss xmm1, xmm2, dword [rax] +vfnmadd231ss xmm1, xmm2, [rax] +vfnmadd213ss xmm1, xmm2, xmm3 +vfnmadd213ss xmm1, xmm2, dword [rax] +vfnmadd213ss xmm1, xmm2, [rax] +vfnmadd132sd xmm1, xmm2, xmm3 +vfnmadd132sd xmm1, xmm2, qword [rax] +vfnmadd132sd xmm1, xmm2, [rax] +vfnmadd231sd xmm1, xmm2, xmm3 +vfnmadd231sd xmm1, xmm2, qword [rax] +vfnmadd231sd xmm1, xmm2, [rax] +vfnmadd213sd xmm1, xmm2, xmm3 +vfnmadd213sd xmm1, xmm2, qword [rax] +vfnmadd213sd xmm1, xmm2, [rax] +vfnmadd132ps xmm1, xmm2, xmm3 +vfnmadd132ps xmm1, xmm2, xmm3 +vfnmadd132ps xmm1, xmm2, [rax] +vfnmadd231ps xmm1, xmm2, xmm3 +vfnmadd231ps xmm1, xmm2, xmm3 +vfnmadd231ps xmm1, xmm2, [rax] +vfnmadd213ps xmm1, xmm2, xmm3 +vfnmadd213ps xmm1, xmm2, xmm3 +vfnmadd213ps xmm1, xmm2, [rax] +vfnmadd132ps ymm1, ymm2, ymm3 +vfnmadd132ps ymm1, ymm2, yword [rax] +vfnmadd132ps ymm1, ymm2, [rax] +vfnmadd231ps ymm1, ymm2, ymm3 +vfnmadd231ps ymm1, ymm2, yword [rax] +vfnmadd231ps ymm1, ymm2, [rax] +vfnmadd213ps ymm1, ymm2, ymm3 +vfnmadd213ps ymm1, ymm2, yword [rax] +vfnmadd213ps ymm1, ymm2, [rax] +vfnmadd132pd xmm1, xmm2, xmm3 +vfnmadd132pd xmm1, xmm2, dqword [rax] +vfnmadd132pd xmm1, xmm2, [rax] +vfnmadd231pd xmm1, xmm2, xmm3 +vfnmadd231pd xmm1, xmm2, dqword [rax] +vfnmadd231pd xmm1, xmm2, [rax] +vfnmadd213pd xmm1, xmm2, xmm3 +vfnmadd213pd xmm1, xmm2, dqword [rax] +vfnmadd213pd xmm1, xmm2, [rax] +vfnmadd132pd ymm1, ymm2, ymm3 +vfnmadd132pd ymm1, ymm2, yword [rax] +vfnmadd132pd ymm1, ymm2, [rax] +vfnmadd231pd ymm1, ymm2, ymm3 +vfnmadd231pd ymm1, ymm2, yword [rax] +vfnmadd231pd ymm1, ymm2, [rax] +vfnmadd213pd ymm1, ymm2, ymm3 +vfnmadd213pd ymm1, ymm2, yword [rax] +vfnmadd213pd ymm1, ymm2, [rax] +vfnmsub132ss xmm1, xmm2, xmm3 +vfnmsub132ss xmm1, xmm2, dword [rax] +vfnmsub132ss xmm1, xmm2, [rax] +vfnmsub231ss xmm1, xmm2, xmm3 +vfnmsub231ss xmm1, xmm2, dword [rax] +vfnmsub231ss xmm1, xmm2, [rax] +vfnmsub213ss xmm1, xmm2, xmm3 +vfnmsub213ss xmm1, xmm2, dword [rax] +vfnmsub213ss xmm1, xmm2, [rax] +vfnmsub132sd xmm1, xmm2, xmm3 +vfnmsub132sd xmm1, xmm2, qword [rax] +vfnmsub132sd xmm1, xmm2, [rax] +vfnmsub231sd xmm1, xmm2, xmm3 +vfnmsub231sd xmm1, xmm2, qword [rax] +vfnmsub231sd xmm1, xmm2, [rax] +vfnmsub213sd xmm1, xmm2, xmm3 +vfnmsub213sd xmm1, xmm2, qword [rax] +vfnmsub213sd xmm1, xmm2, [rax] +vfnmsub132ps xmm1, xmm2, xmm3 +vfnmsub132ps xmm1, xmm2, xmm3 +vfnmsub132ps xmm1, xmm2, [rax] +vfnmsub231ps xmm1, xmm2, xmm3 +vfnmsub231ps xmm1, xmm2, xmm3 +vfnmsub231ps xmm1, xmm2, [rax] +vfnmsub213ps xmm1, xmm2, xmm3 +vfnmsub213ps xmm1, xmm2, xmm3 +vfnmsub213ps xmm1, xmm2, [rax] +vfnmsub132ps ymm1, ymm2, ymm3 +vfnmsub132ps ymm1, ymm2, yword [rax] +vfnmsub132ps ymm1, ymm2, [rax] +vfnmsub231ps ymm1, ymm2, ymm3 +vfnmsub231ps ymm1, ymm2, yword [rax] +vfnmsub231ps ymm1, ymm2, [rax] +vfnmsub213ps ymm1, ymm2, ymm3 +vfnmsub213ps ymm1, ymm2, yword [rax] +vfnmsub213ps ymm1, ymm2, [rax] +vfnmsub132pd xmm1, xmm2, xmm3 +vfnmsub132pd xmm1, xmm2, dqword [rax] +vfnmsub132pd xmm1, xmm2, [rax] +vfnmsub231pd xmm1, xmm2, xmm3 +vfnmsub231pd xmm1, xmm2, dqword [rax] +vfnmsub231pd xmm1, xmm2, [rax] +vfnmsub213pd xmm1, xmm2, xmm3 +vfnmsub213pd xmm1, xmm2, dqword [rax] +vfnmsub213pd xmm1, xmm2, [rax] +vfnmsub132pd ymm1, ymm2, ymm3 +vfnmsub132pd ymm1, ymm2, yword [rax] +vfnmsub132pd ymm1, ymm2, [rax] +vfnmsub231pd ymm1, ymm2, ymm3 +vfnmsub231pd ymm1, ymm2, yword [rax] +vfnmsub231pd ymm1, ymm2, [rax] +vfnmsub213pd ymm1, ymm2, ymm3 +vfnmsub213pd ymm1, ymm2, yword [rax] +vfnmsub213pd ymm1, ymm2, [rax] +vfmaddsub132ps xmm1, xmm2, xmm3 +vfmaddsub132ps xmm1, xmm2, xmm3 +vfmaddsub132ps xmm1, xmm2, [rax] +vfmaddsub231ps xmm1, xmm2, xmm3 +vfmaddsub231ps xmm1, xmm2, xmm3 +vfmaddsub231ps xmm1, xmm2, [rax] +vfmaddsub213ps xmm1, xmm2, xmm3 +vfmaddsub213ps xmm1, xmm2, xmm3 +vfmaddsub213ps xmm1, xmm2, [rax] +vfmaddsub132ps ymm1, ymm2, ymm3 +vfmaddsub132ps ymm1, ymm2, yword [rax] +vfmaddsub132ps ymm1, ymm2, [rax] +vfmaddsub231ps ymm1, ymm2, ymm3 +vfmaddsub231ps ymm1, ymm2, yword [rax] +vfmaddsub231ps ymm1, ymm2, [rax] +vfmaddsub213ps ymm1, ymm2, ymm3 +vfmaddsub213ps ymm1, ymm2, yword [rax] +vfmaddsub213ps ymm1, ymm2, [rax] +vfmaddsub132pd xmm1, xmm2, xmm3 +vfmaddsub132pd xmm1, xmm2, dqword [rax] +vfmaddsub132pd xmm1, xmm2, [rax] +vfmaddsub231pd xmm1, xmm2, xmm3 +vfmaddsub231pd xmm1, xmm2, dqword [rax] +vfmaddsub231pd xmm1, xmm2, [rax] +vfmaddsub213pd xmm1, xmm2, xmm3 +vfmaddsub213pd xmm1, xmm2, dqword [rax] +vfmaddsub213pd xmm1, xmm2, [rax] +vfmaddsub132pd ymm1, ymm2, ymm3 +vfmaddsub132pd ymm1, ymm2, yword [rax] +vfmaddsub132pd ymm1, ymm2, [rax] +vfmaddsub231pd ymm1, ymm2, ymm3 +vfmaddsub231pd ymm1, ymm2, yword [rax] +vfmaddsub231pd ymm1, ymm2, [rax] +vfmaddsub213pd ymm1, ymm2, ymm3 +vfmaddsub213pd ymm1, ymm2, yword [rax] +vfmaddsub213pd ymm1, ymm2, [rax] +vfmsubadd132ps xmm1, xmm2, xmm3 +vfmsubadd132ps xmm1, xmm2, xmm3 +vfmsubadd132ps xmm1, xmm2, [rax] +vfmsubadd231ps xmm1, xmm2, xmm3 +vfmsubadd231ps xmm1, xmm2, xmm3 +vfmsubadd231ps xmm1, xmm2, [rax] +vfmsubadd213ps xmm1, xmm2, xmm3 +vfmsubadd213ps xmm1, xmm2, xmm3 +vfmsubadd213ps xmm1, xmm2, [rax] +vfmsubadd132ps ymm1, ymm2, ymm3 +vfmsubadd132ps ymm1, ymm2, yword [rax] +vfmsubadd132ps ymm1, ymm2, [rax] +vfmsubadd231ps ymm1, ymm2, ymm3 +vfmsubadd231ps ymm1, ymm2, yword [rax] +vfmsubadd231ps ymm1, ymm2, [rax] +vfmsubadd213ps ymm1, ymm2, ymm3 +vfmsubadd213ps ymm1, ymm2, yword [rax] +vfmsubadd213ps ymm1, ymm2, [rax] +vfmsubadd132pd xmm1, xmm2, xmm3 +vfmsubadd132pd xmm1, xmm2, dqword [rax] +vfmsubadd132pd xmm1, xmm2, [rax] +vfmsubadd231pd xmm1, xmm2, xmm3 +vfmsubadd231pd xmm1, xmm2, dqword [rax] +vfmsubadd231pd xmm1, xmm2, [rax] +vfmsubadd213pd xmm1, xmm2, xmm3 +vfmsubadd213pd xmm1, xmm2, dqword [rax] +vfmsubadd213pd xmm1, xmm2, [rax] +vfmsubadd132pd ymm1, ymm2, ymm3 +vfmsubadd132pd ymm1, ymm2, yword [rax] +vfmsubadd132pd ymm1, ymm2, [rax] +vfmsubadd231pd ymm1, ymm2, ymm3 +vfmsubadd231pd ymm1, ymm2, yword [rax] +vfmsubadd231pd ymm1, ymm2, [rax] +vfmsubadd213pd ymm1, ymm2, ymm3 +vfmsubadd213pd ymm1, ymm2, yword [rax] +vfmsubadd213pd ymm1, ymm2, [rax] diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fma.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fma.hex new file mode 100644 index 0000000000..161933f955 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fma.hex @@ -0,0 +1,1440 @@ +c4 +e2 +69 +99 +cb +c4 +e2 +69 +99 +08 +c4 +e2 +69 +99 +08 +c4 +e2 +69 +b9 +cb +c4 +e2 +69 +b9 +08 +c4 +e2 +69 +b9 +08 +c4 +e2 +69 +a9 +cb +c4 +e2 +69 +a9 +08 +c4 +e2 +69 +a9 +08 +c4 +e2 +e9 +99 +cb +c4 +e2 +e9 +99 +08 +c4 +e2 +e9 +99 +08 +c4 +e2 +e9 +b9 +cb +c4 +e2 +e9 +b9 +08 +c4 +e2 +e9 +b9 +08 +c4 +e2 +e9 +a9 +cb +c4 +e2 +e9 +a9 +08 +c4 +e2 +e9 +a9 +08 +c4 +e2 +69 +98 +cb +c4 +e2 +69 +98 +cb +c4 +e2 +69 +98 +08 +c4 +e2 +69 +b8 +cb +c4 +e2 +69 +b8 +cb +c4 +e2 +69 +b8 +08 +c4 +e2 +69 +a8 +cb +c4 +e2 +69 +a8 +cb +c4 +e2 +69 +a8 +08 +c4 +e2 +6d +98 +cb +c4 +e2 +6d +98 +08 +c4 +e2 +6d +98 +08 +c4 +e2 +6d +b8 +cb +c4 +e2 +6d +b8 +08 +c4 +e2 +6d +b8 +08 +c4 +e2 +6d +a8 +cb +c4 +e2 +6d +a8 +08 +c4 +e2 +6d +a8 +08 +c4 +e2 +e9 +98 +cb +c4 +e2 +e9 +98 +08 +c4 +e2 +e9 +98 +08 +c4 +e2 +e9 +b8 +cb +c4 +e2 +e9 +b8 +08 +c4 +e2 +e9 +b8 +08 +c4 +e2 +e9 +a8 +cb +c4 +e2 +e9 +a8 +08 +c4 +e2 +e9 +a8 +08 +c4 +e2 +ed +98 +cb +c4 +e2 +ed +98 +08 +c4 +e2 +ed +98 +08 +c4 +e2 +ed +b8 +cb +c4 +e2 +ed +b8 +08 +c4 +e2 +ed +b8 +08 +c4 +e2 +ed +a8 +cb +c4 +e2 +ed +a8 +08 +c4 +e2 +ed +a8 +08 +c4 +e2 +69 +9b +cb +c4 +e2 +69 +9b +08 +c4 +e2 +69 +9b +08 +c4 +e2 +69 +bb +cb +c4 +e2 +69 +bb +08 +c4 +e2 +69 +bb +08 +c4 +e2 +69 +ab +cb +c4 +e2 +69 +ab +08 +c4 +e2 +69 +ab +08 +c4 +e2 +e9 +9b +cb +c4 +e2 +e9 +9b +08 +c4 +e2 +e9 +9b +08 +c4 +e2 +e9 +bb +cb +c4 +e2 +e9 +bb +08 +c4 +e2 +e9 +bb +08 +c4 +e2 +e9 +ab +cb +c4 +e2 +e9 +ab +08 +c4 +e2 +e9 +ab +08 +c4 +e2 +69 +9a +cb +c4 +e2 +69 +9a +cb +c4 +e2 +69 +9a +08 +c4 +e2 +69 +ba +cb +c4 +e2 +69 +ba +cb +c4 +e2 +69 +ba +08 +c4 +e2 +69 +aa +cb +c4 +e2 +69 +aa +cb +c4 +e2 +69 +aa +08 +c4 +e2 +6d +9a +cb +c4 +e2 +6d +9a +08 +c4 +e2 +6d +9a +08 +c4 +e2 +6d +ba +cb +c4 +e2 +6d +ba +08 +c4 +e2 +6d +ba +08 +c4 +e2 +6d +aa +cb +c4 +e2 +6d +aa +08 +c4 +e2 +6d +aa +08 +c4 +e2 +e9 +9a +cb +c4 +e2 +e9 +9a +08 +c4 +e2 +e9 +9a +08 +c4 +e2 +e9 +ba +cb +c4 +e2 +e9 +ba +08 +c4 +e2 +e9 +ba +08 +c4 +e2 +e9 +aa +cb +c4 +e2 +e9 +aa +08 +c4 +e2 +e9 +aa +08 +c4 +e2 +ed +9a +cb +c4 +e2 +ed +9a +08 +c4 +e2 +ed +9a +08 +c4 +e2 +ed +ba +cb +c4 +e2 +ed +ba +08 +c4 +e2 +ed +ba +08 +c4 +e2 +ed +aa +cb +c4 +e2 +ed +aa +08 +c4 +e2 +ed +aa +08 +c4 +e2 +69 +9d +cb +c4 +e2 +69 +9d +08 +c4 +e2 +69 +9d +08 +c4 +e2 +69 +bd +cb +c4 +e2 +69 +bd +08 +c4 +e2 +69 +bd +08 +c4 +e2 +69 +ad +cb +c4 +e2 +69 +ad +08 +c4 +e2 +69 +ad +08 +c4 +e2 +e9 +9d +cb +c4 +e2 +e9 +9d +08 +c4 +e2 +e9 +9d +08 +c4 +e2 +e9 +bd +cb +c4 +e2 +e9 +bd +08 +c4 +e2 +e9 +bd +08 +c4 +e2 +e9 +ad +cb +c4 +e2 +e9 +ad +08 +c4 +e2 +e9 +ad +08 +c4 +e2 +69 +9c +cb +c4 +e2 +69 +9c +cb +c4 +e2 +69 +9c +08 +c4 +e2 +69 +bc +cb +c4 +e2 +69 +bc +cb +c4 +e2 +69 +bc +08 +c4 +e2 +69 +ac +cb +c4 +e2 +69 +ac +cb +c4 +e2 +69 +ac +08 +c4 +e2 +6d +9c +cb +c4 +e2 +6d +9c +08 +c4 +e2 +6d +9c +08 +c4 +e2 +6d +bc +cb +c4 +e2 +6d +bc +08 +c4 +e2 +6d +bc +08 +c4 +e2 +6d +ac +cb +c4 +e2 +6d +ac +08 +c4 +e2 +6d +ac +08 +c4 +e2 +e9 +9c +cb +c4 +e2 +e9 +9c +08 +c4 +e2 +e9 +9c +08 +c4 +e2 +e9 +bc +cb +c4 +e2 +e9 +bc +08 +c4 +e2 +e9 +bc +08 +c4 +e2 +e9 +ac +cb +c4 +e2 +e9 +ac +08 +c4 +e2 +e9 +ac +08 +c4 +e2 +ed +9c +cb +c4 +e2 +ed +9c +08 +c4 +e2 +ed +9c +08 +c4 +e2 +ed +bc +cb +c4 +e2 +ed +bc +08 +c4 +e2 +ed +bc +08 +c4 +e2 +ed +ac +cb +c4 +e2 +ed +ac +08 +c4 +e2 +ed +ac +08 +c4 +e2 +69 +9f +cb +c4 +e2 +69 +9f +08 +c4 +e2 +69 +9f +08 +c4 +e2 +69 +bf +cb +c4 +e2 +69 +bf +08 +c4 +e2 +69 +bf +08 +c4 +e2 +69 +af +cb +c4 +e2 +69 +af +08 +c4 +e2 +69 +af +08 +c4 +e2 +e9 +9f +cb +c4 +e2 +e9 +9f +08 +c4 +e2 +e9 +9f +08 +c4 +e2 +e9 +bf +cb +c4 +e2 +e9 +bf +08 +c4 +e2 +e9 +bf +08 +c4 +e2 +e9 +af +cb +c4 +e2 +e9 +af +08 +c4 +e2 +e9 +af +08 +c4 +e2 +69 +9e +cb +c4 +e2 +69 +9e +cb +c4 +e2 +69 +9e +08 +c4 +e2 +69 +be +cb +c4 +e2 +69 +be +cb +c4 +e2 +69 +be +08 +c4 +e2 +69 +ae +cb +c4 +e2 +69 +ae +cb +c4 +e2 +69 +ae +08 +c4 +e2 +6d +9e +cb +c4 +e2 +6d +9e +08 +c4 +e2 +6d +9e +08 +c4 +e2 +6d +be +cb +c4 +e2 +6d +be +08 +c4 +e2 +6d +be +08 +c4 +e2 +6d +ae +cb +c4 +e2 +6d +ae +08 +c4 +e2 +6d +ae +08 +c4 +e2 +e9 +9e +cb +c4 +e2 +e9 +9e +08 +c4 +e2 +e9 +9e +08 +c4 +e2 +e9 +be +cb +c4 +e2 +e9 +be +08 +c4 +e2 +e9 +be +08 +c4 +e2 +e9 +ae +cb +c4 +e2 +e9 +ae +08 +c4 +e2 +e9 +ae +08 +c4 +e2 +ed +9e +cb +c4 +e2 +ed +9e +08 +c4 +e2 +ed +9e +08 +c4 +e2 +ed +be +cb +c4 +e2 +ed +be +08 +c4 +e2 +ed +be +08 +c4 +e2 +ed +ae +cb +c4 +e2 +ed +ae +08 +c4 +e2 +ed +ae +08 +c4 +e2 +69 +96 +cb +c4 +e2 +69 +96 +cb +c4 +e2 +69 +96 +08 +c4 +e2 +69 +b6 +cb +c4 +e2 +69 +b6 +cb +c4 +e2 +69 +b6 +08 +c4 +e2 +69 +a6 +cb +c4 +e2 +69 +a6 +cb +c4 +e2 +69 +a6 +08 +c4 +e2 +6d +96 +cb +c4 +e2 +6d +96 +08 +c4 +e2 +6d +96 +08 +c4 +e2 +6d +b6 +cb +c4 +e2 +6d +b6 +08 +c4 +e2 +6d +b6 +08 +c4 +e2 +6d +a6 +cb +c4 +e2 +6d +a6 +08 +c4 +e2 +6d +a6 +08 +c4 +e2 +e9 +96 +cb +c4 +e2 +e9 +96 +08 +c4 +e2 +e9 +96 +08 +c4 +e2 +e9 +b6 +cb +c4 +e2 +e9 +b6 +08 +c4 +e2 +e9 +b6 +08 +c4 +e2 +e9 +a6 +cb +c4 +e2 +e9 +a6 +08 +c4 +e2 +e9 +a6 +08 +c4 +e2 +ed +96 +cb +c4 +e2 +ed +96 +08 +c4 +e2 +ed +96 +08 +c4 +e2 +ed +b6 +cb +c4 +e2 +ed +b6 +08 +c4 +e2 +ed +b6 +08 +c4 +e2 +ed +a6 +cb +c4 +e2 +ed +a6 +08 +c4 +e2 +ed +a6 +08 +c4 +e2 +69 +97 +cb +c4 +e2 +69 +97 +cb +c4 +e2 +69 +97 +08 +c4 +e2 +69 +b7 +cb +c4 +e2 +69 +b7 +cb +c4 +e2 +69 +b7 +08 +c4 +e2 +69 +a7 +cb +c4 +e2 +69 +a7 +cb +c4 +e2 +69 +a7 +08 +c4 +e2 +6d +97 +cb +c4 +e2 +6d +97 +08 +c4 +e2 +6d +97 +08 +c4 +e2 +6d +b7 +cb +c4 +e2 +6d +b7 +08 +c4 +e2 +6d +b7 +08 +c4 +e2 +6d +a7 +cb +c4 +e2 +6d +a7 +08 +c4 +e2 +6d +a7 +08 +c4 +e2 +e9 +97 +cb +c4 +e2 +e9 +97 +08 +c4 +e2 +e9 +97 +08 +c4 +e2 +e9 +b7 +cb +c4 +e2 +e9 +b7 +08 +c4 +e2 +e9 +b7 +08 +c4 +e2 +e9 +a7 +cb +c4 +e2 +e9 +a7 +08 +c4 +e2 +e9 +a7 +08 +c4 +e2 +ed +97 +cb +c4 +e2 +ed +97 +08 +c4 +e2 +ed +97 +08 +c4 +e2 +ed +b7 +cb +c4 +e2 +ed +b7 +08 +c4 +e2 +ed +b7 +08 +c4 +e2 +ed +a7 +cb +c4 +e2 +ed +a7 +08 +c4 +e2 +ed +a7 +08 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fsgsbase.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fsgsbase.asm new file mode 100644 index 0000000000..bae730131a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fsgsbase.asm @@ -0,0 +1,10 @@ +[bits 64] +rdfsbase ebx +rdfsbase rbx +rdgsbase ecx +rdgsbase rcx + +wrfsbase ebx +wrfsbase rbx +wrgsbase ecx +wrgsbase rcx diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fsgsbase.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fsgsbase.hex new file mode 100644 index 0000000000..27b5eee0ae --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fsgsbase.hex @@ -0,0 +1,36 @@ +f3 +0f +ae +c3 +f3 +48 +0f +ae +c3 +f3 +0f +ae +c9 +f3 +48 +0f +ae +c9 +f3 +0f +ae +d3 +f3 +48 +0f +ae +d3 +f3 +0f +ae +d9 +f3 +48 +0f +ae +d9 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fwdequ64.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fwdequ64.asm new file mode 100644 index 0000000000..ac096a5fae --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fwdequ64.asm @@ -0,0 +1,4 @@ +[bits 64] +l1: +inc dword [l2] +l2 equ 4-(l1-$$) diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fwdequ64.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fwdequ64.hex new file mode 100644 index 0000000000..26b664da06 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/fwdequ64.hex @@ -0,0 +1,7 @@ +ff +04 +25 +04 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/Makefile.inc new file mode 100644 index 0000000000..2f58c66899 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/Makefile.inc @@ -0,0 +1,24 @@ +TESTS += modules/arch/x86/tests/gas32/x86_gas32_test.sh + +EXTRA_DIST += modules/arch/x86/tests/gas32/x86_gas32_test.sh +EXTRA_DIST += modules/arch/x86/tests/gas32/align32.asm +EXTRA_DIST += modules/arch/x86/tests/gas32/align32.hex +EXTRA_DIST += modules/arch/x86/tests/gas32/gas-farithr.asm +EXTRA_DIST += modules/arch/x86/tests/gas32/gas-farithr.hex +EXTRA_DIST += modules/arch/x86/tests/gas32/gas-farjump.asm +EXTRA_DIST += modules/arch/x86/tests/gas32/gas-farjump.hex +EXTRA_DIST += modules/arch/x86/tests/gas32/gas-fpmem.asm +EXTRA_DIST += modules/arch/x86/tests/gas32/gas-fpmem.hex +EXTRA_DIST += modules/arch/x86/tests/gas32/gas-invlpg.asm +EXTRA_DIST += modules/arch/x86/tests/gas32/gas-invlpg.hex +EXTRA_DIST += modules/arch/x86/tests/gas32/gas-loop32.asm +EXTRA_DIST += modules/arch/x86/tests/gas32/gas-loop32.hex +EXTRA_DIST += modules/arch/x86/tests/gas32/gas-movdq32.asm +EXTRA_DIST += modules/arch/x86/tests/gas32/gas-movdq32.hex +EXTRA_DIST += modules/arch/x86/tests/gas32/gas-movsd.asm +EXTRA_DIST += modules/arch/x86/tests/gas32/gas-movsd.hex +EXTRA_DIST += modules/arch/x86/tests/gas32/gas-pop.asm +EXTRA_DIST += modules/arch/x86/tests/gas32/gas-pop.hex +EXTRA_DIST += modules/arch/x86/tests/gas32/gas32-jmpcall.asm +EXTRA_DIST += modules/arch/x86/tests/gas32/gas32-jmpcall.hex + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/align32.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/align32.asm new file mode 100644 index 0000000000..7d5dfa61ca --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/align32.asm @@ -0,0 +1,82 @@ +.text +# 15 fill +.byte 0xff +.p2align 4 +# 14 fill +.byte 0xff +.byte 0xff +.p2align 4 +# 13 fill +.byte 0xff +.byte 0xff +.byte 0xff +.p2align 4 +# 12 fill +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.p2align 4 +# 11 fill +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.p2align 4 +# 10 fill +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.p2align 4 +# 9 fill +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.p2align 4 +# 8 fill +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.p2align 4 +# 7 fill +.byte 0xff +.p2align 3 +# 6 fill +.byte 0xff +.byte 0xff +.p2align 3 +# 5 fill +.byte 0xff +.byte 0xff +.byte 0xff +.p2align 3 +# 4 fill +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.p2align 3 +# 3 fill +.byte 0xff +.p2align 2 +# 2 fill +.byte 0xff +.byte 0xff +.p2align 2 +# 1 fill +.byte 0xff +.p2align 1 + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/align32.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/align32.hex new file mode 100644 index 0000000000..8fb42419ec --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/align32.hex @@ -0,0 +1,536 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +ff +ff +eb +0c +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +ff +ff +ff +eb +0b +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +ff +ff +ff +ff +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +ff +ff +ff +ff +ff +eb +09 +90 +90 +90 +90 +90 +90 +90 +90 +90 +ff +ff +ff +ff +ff +ff +eb +08 +90 +90 +90 +90 +90 +90 +90 +90 +ff +ff +ff +ff +ff +ff +ff +eb +07 +90 +90 +90 +90 +90 +90 +90 +ff +ff +ff +ff +ff +ff +ff +ff +90 +8d +b4 +26 +00 +00 +00 +00 +ff +8d +b4 +26 +00 +00 +00 +00 +ff +ff +8d +b6 +00 +00 +00 +00 +ff +ff +ff +90 +8d +74 +26 +00 +ff +ff +ff +ff +8d +74 +26 +00 +ff +8d +76 +00 +ff +ff +66 +90 +ff +90 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ec +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +01 +00 +00 +30 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +aa +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farithr.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farithr.asm new file mode 100644 index 0000000000..4b1ca13b16 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farithr.asm @@ -0,0 +1,18 @@ +.text + fsub %st(0),%st(1) + fsub %st(3),%st + fsubp %st(0),%st(1) + #fsubp %st(3),%st + fsubr %st(0),%st(1) + fsubr %st(3),%st + fsubrp %st(0),%st(1) + #fsubrp %st(3),%st + fdiv %st(0),%st(1) + fdiv %st(3),%st + fdivp %st(0),%st(1) + #fdivp %st(3),%st + fdivr %st(0),%st(1) + fdivr %st(3),%st + fdivrp %st(0),%st(1) + #fdivrp %st(3),%st + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farithr.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farithr.hex new file mode 100644 index 0000000000..f0f4bddc24 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farithr.hex @@ -0,0 +1,376 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +dc +e1 +d8 +e3 +de +e1 +dc +e9 +d8 +eb +de +e9 +dc +f1 +d8 +f3 +de +f1 +dc +f9 +d8 +fb +de +f9 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +58 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +30 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farjump.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farjump.asm new file mode 100644 index 0000000000..6d890da2d6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farjump.asm @@ -0,0 +1,13 @@ +call $0x1234, $0x567890ab +lcall $0x1234, $0x567890ab +jmp $0x1234, $0x567890ab +ljmp $0x1234, $0x567890ab +ljmp *(%eax) +lcall *(%eax) +jmp *(%eax) +call *(%eax) +jmp *%eax +call *%eax +ret +lret +lret $0x100 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farjump.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farjump.hex new file mode 100644 index 0000000000..839492d4f4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-farjump.hex @@ -0,0 +1,408 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9a +ab +90 +78 +56 +34 +12 +9a +ab +90 +78 +56 +34 +12 +ea +ab +90 +78 +56 +34 +12 +ea +ab +90 +78 +56 +34 +12 +ff +28 +ff +18 +ff +20 +ff +10 +ff +e0 +ff +d0 +c3 +cb +ca +00 +01 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +94 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +98 +00 +00 +00 +30 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-fpmem.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-fpmem.asm new file mode 100644 index 0000000000..ca905308c2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-fpmem.asm @@ -0,0 +1,11 @@ +.text +fcomp +fcomp %st(1) +fcomp 0(%eax) +fcomps 0(%eax) +fcompl 0(%eax) + +fistp 0(%eax) +fistps 0(%eax) +fistpl 0(%eax) + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-fpmem.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-fpmem.hex new file mode 100644 index 0000000000..81d6a3a07f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-fpmem.hex @@ -0,0 +1,376 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d8 +d9 +d8 +d9 +d8 +18 +d8 +18 +dc +18 +df +18 +df +18 +db +18 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +74 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +00 +00 +00 +30 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-invlpg.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-invlpg.asm new file mode 100644 index 0000000000..f7d6faa947 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-invlpg.asm @@ -0,0 +1,2 @@ +invlpg (%eax) + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-invlpg.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-invlpg.hex new file mode 100644 index 0000000000..c40e0506c9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-invlpg.hex @@ -0,0 +1,360 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +01 +38 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +68 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +00 +00 +00 +30 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-loop32.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-loop32.asm new file mode 100644 index 0000000000..3b5777de48 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-loop32.asm @@ -0,0 +1,5 @@ +loop label +loopw label +loopl label +#loopq label +label: diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-loop32.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-loop32.hex new file mode 100644 index 0000000000..5bf161bc18 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-loop32.hex @@ -0,0 +1,376 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e2 +05 +67 +e2 +02 +e2 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +00 +00 +00 +40 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movdq32.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movdq32.asm new file mode 100644 index 0000000000..a90c1a6e8c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movdq32.asm @@ -0,0 +1,20 @@ +movd %mm0, %eax +movd %eax, %mm0 +movd %mm0, 0 +movd 0, %mm(0) + +movd %xmm0, %eax +movd %eax, %xmm0 +movd %xmm0, 0 +movd 0, %xmm0 + +movq %xmm0, 0 +movq 0, %xmm0 +movq %xmm1, %xmm0 +movq %xmm0, %xmm1 + +movq %mm0, 0 +movq 0, %mm0 +movq %mm1, %mm0 +movq %mm0, %mm1 + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movdq32.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movdq32.hex new file mode 100644 index 0000000000..66836822fd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movdq32.hex @@ -0,0 +1,440 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +7e +c0 +0f +6e +c0 +0f +7e +05 +00 +00 +00 +00 +0f +6e +05 +00 +00 +00 +00 +66 +0f +7e +c0 +66 +0f +6e +c0 +66 +0f +7e +05 +00 +00 +00 +00 +66 +0f +6e +05 +00 +00 +00 +00 +66 +0f +d6 +05 +00 +00 +00 +00 +f3 +0f +7e +05 +00 +00 +00 +00 +f3 +0f +7e +c1 +f3 +0f +7e +c8 +0f +7f +05 +00 +00 +00 +00 +0f +6f +05 +00 +00 +00 +00 +0f +6f +c1 +0f +6f +c8 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +98 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bc +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +00 +00 +00 +30 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +58 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movsd.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movsd.asm new file mode 100644 index 0000000000..3d3c0c734f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movsd.asm @@ -0,0 +1,3 @@ +.text +movsd +movsl diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movsd.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movsd.hex new file mode 100644 index 0000000000..70701e6d56 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-movsd.hex @@ -0,0 +1,360 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a5 +a5 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +68 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +00 +00 +00 +30 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-pop.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-pop.asm new file mode 100644 index 0000000000..7c47ebef51 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-pop.asm @@ -0,0 +1,50 @@ +.code64 +push %cx # out: 66 51 +pop %cx # out: 66 59 +push %rcx # out: 51 +pop %rcx # out: 59 +pushw %cx # out: 66 51 +popw %cx # out: 66 59 +pushq %rcx # out: 51 +popq %rcx # out: 59 + +push -24(%rcx) # out: ff 71 e8 +pop -24(%rcx) # out: 8f 41 e8 +pushw -24(%rcx) # out: 66 ff 71 e8 +popw -24(%rcx) # out: 66 8f 41 e8 +pushq -24(%rcx) # out: ff 71 e8 +popq -24(%rcx) # out: 8f 41 e8 + +.code32 +push %cx # out: 66 51 +pop %cx # out: 66 59 +push %ecx # out: 51 +pop %ecx # out: 59 +pushw %cx # out: 66 51 +popw %cx # out: 66 59 +pushl %ecx # out: 51 +popl %ecx # out: 59 + +push -24(%ecx) # out: ff 71 e8 +pop -24(%ecx) # out: 8f 41 e8 +pushw -24(%ecx) # out: 66 ff 71 e8 +popw -24(%ecx) # out: 66 8f 41 e8 +pushl -24(%ecx) # out: ff 71 e8 +popl -24(%ecx) # out: 8f 41 e8 + +.code16 +push %cx # out: 51 +pop %cx # out: 59 +push %ecx # out: 66 51 +pop %ecx # out: 66 59 +pushw %cx # out: 51 +popw %cx # out: 59 +pushl %ecx # out: 66 51 +popl %ecx # out: 66 59 + +push -24(%bp) # out: ff 76 e8 +pop -24(%bp) # out: 8f 46 e8 +pushw -24(%bp) # out: ff 76 e8 +popw -24(%bp) # out: 8f 46 e8 +pushl -24(%bp) # out: 66 ff 76 e8 +popl -24(%bp) # out: 66 8f 46 e8 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-pop.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-pop.hex new file mode 100644 index 0000000000..3074437829 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas-pop.hex @@ -0,0 +1,456 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +66 +51 +66 +59 +51 +59 +66 +51 +66 +59 +51 +59 +ff +71 +e8 +8f +41 +e8 +66 +ff +71 +e8 +66 +8f +41 +e8 +ff +71 +e8 +8f +41 +e8 +66 +51 +66 +59 +51 +59 +66 +51 +66 +59 +51 +59 +ff +71 +e8 +8f +41 +e8 +66 +ff +71 +e8 +66 +8f +41 +e8 +ff +71 +e8 +8f +41 +e8 +51 +59 +66 +51 +66 +59 +51 +59 +66 +51 +66 +59 +ff +76 +e8 +8f +46 +e8 +ff +76 +e8 +8f +46 +e8 +66 +ff +76 +e8 +66 +8f +46 +e8 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c4 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c8 +00 +00 +00 +30 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas32-jmpcall.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas32-jmpcall.asm new file mode 100644 index 0000000000..f1707419ac --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas32-jmpcall.asm @@ -0,0 +1,6 @@ +call foo +calll foo + +jmp foo +#jmpl foo + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas32-jmpcall.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas32-jmpcall.hex new file mode 100644 index 0000000000..2a656ca47b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/gas32-jmpcall.hex @@ -0,0 +1,464 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +06 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e8 +fc +ff +ff +ff +e8 +fc +ff +ff +ff +e9 +fc +ff +ff +ff +00 +01 +00 +00 +00 +02 +03 +00 +00 +06 +00 +00 +00 +02 +03 +00 +00 +0b +00 +00 +00 +02 +03 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +2d +00 +66 +6f +6f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +68 +00 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +94 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9c +00 +00 +00 +40 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +00 +00 +00 +18 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/x86_gas32_test.sh b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/x86_gas32_test.sh new file mode 100755 index 0000000000..b1d6c03cbe --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas32/x86_gas32_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh x86_gas32_test modules/arch/x86/tests/gas32 "x86 gas format" "-f elf32 -p gas" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/Makefile.inc new file mode 100644 index 0000000000..00baf62638 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/Makefile.inc @@ -0,0 +1,35 @@ +TESTS += modules/arch/x86/tests/gas64/x86_gas64_test.sh + +EXTRA_DIST += modules/arch/x86/tests/gas64/x86_gas64_test.sh +EXTRA_DIST += modules/arch/x86/tests/gas64/align64.asm +EXTRA_DIST += modules/arch/x86/tests/gas64/align64.hex +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-cbw.asm +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-cbw.hex +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-fp.asm +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-fp.hex +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-inout.asm +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-inout.hex +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-loop64.asm +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-loop64.hex +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-moreinsn.asm +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-moreinsn.hex +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-movabs.asm +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-movabs.hex +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-movdq64.asm +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-movdq64.hex +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-movsxs.asm +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-movsxs.hex +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-muldiv.asm +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-muldiv.hex +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-prefix.asm +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-prefix.errwarn +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-prefix.hex +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-retenter.asm +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-retenter.hex +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-shift.asm +EXTRA_DIST += modules/arch/x86/tests/gas64/gas-shift.hex +EXTRA_DIST += modules/arch/x86/tests/gas64/gas64-jmpcall.asm +EXTRA_DIST += modules/arch/x86/tests/gas64/gas64-jmpcall.hex +EXTRA_DIST += modules/arch/x86/tests/gas64/riprel.asm +EXTRA_DIST += modules/arch/x86/tests/gas64/riprel.hex + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/align64.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/align64.asm new file mode 100644 index 0000000000..7d5dfa61ca --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/align64.asm @@ -0,0 +1,82 @@ +.text +# 15 fill +.byte 0xff +.p2align 4 +# 14 fill +.byte 0xff +.byte 0xff +.p2align 4 +# 13 fill +.byte 0xff +.byte 0xff +.byte 0xff +.p2align 4 +# 12 fill +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.p2align 4 +# 11 fill +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.p2align 4 +# 10 fill +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.p2align 4 +# 9 fill +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.p2align 4 +# 8 fill +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.p2align 4 +# 7 fill +.byte 0xff +.p2align 3 +# 6 fill +.byte 0xff +.byte 0xff +.p2align 3 +# 5 fill +.byte 0xff +.byte 0xff +.byte 0xff +.p2align 3 +# 4 fill +.byte 0xff +.byte 0xff +.byte 0xff +.byte 0xff +.p2align 3 +# 3 fill +.byte 0xff +.p2align 2 +# 2 fill +.byte 0xff +.byte 0xff +.p2align 2 +# 1 fill +.byte 0xff +.p2align 1 + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/align64.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/align64.hex new file mode 100644 index 0000000000..ecfbf7ab90 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/align64.hex @@ -0,0 +1,672 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +05 +00 +01 +00 +ff +66 +66 +66 +66 +66 +66 +2e +0f +1f +84 +00 +00 +00 +00 +00 +ff +ff +66 +66 +66 +66 +66 +2e +0f +1f +84 +00 +00 +00 +00 +00 +ff +ff +ff +66 +66 +66 +66 +2e +0f +1f +84 +00 +00 +00 +00 +00 +ff +ff +ff +ff +66 +66 +66 +2e +0f +1f +84 +00 +00 +00 +00 +00 +ff +ff +ff +ff +ff +66 +66 +2e +0f +1f +84 +00 +00 +00 +00 +00 +ff +ff +ff +ff +ff +ff +66 +2e +0f +1f +84 +00 +00 +00 +00 +00 +ff +ff +ff +ff +ff +ff +ff +66 +0f +1f +84 +00 +00 +00 +00 +00 +ff +ff +ff +ff +ff +ff +ff +ff +0f +1f +84 +00 +00 +00 +00 +00 +ff +0f +1f +80 +00 +00 +00 +00 +ff +ff +66 +0f +1f +44 +00 +00 +ff +ff +ff +0f +1f +44 +00 +00 +ff +ff +ff +ff +0f +1f +40 +00 +ff +0f +1f +00 +ff +ff +66 +90 +ff +90 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ec +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +01 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +aa +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-cbw.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-cbw.asm new file mode 100644 index 0000000000..4c96877ec8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-cbw.asm @@ -0,0 +1,12 @@ +cbw +cdqe +cwde +cwd +cdq +cqo +cbtw +cltq +cwtl +cwtd +cltd +cqto diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-cbw.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-cbw.hex new file mode 100644 index 0000000000..d421f3720c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-cbw.hex @@ -0,0 +1,528 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +05 +00 +01 +00 +66 +98 +48 +98 +98 +66 +99 +99 +48 +99 +66 +98 +48 +98 +98 +66 +99 +99 +48 +99 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +54 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-fp.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-fp.asm new file mode 100644 index 0000000000..37e3b81e3f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-fp.asm @@ -0,0 +1,32 @@ +fld %st(5) +flds 10 +fldl 10 +filds 10 +fildl 10 +fildll 10 +fldt 10 + +fst %st(2) +fsts 10 +fstl 10 +fists 10 +fistl 10 +fstp %st(1) +fstps 10 +fstpl 10 +fistps 10 +fistpl 10 +fistpq 10 +fistpll 10 +fstpt 10 + +fxch %st(2) +fxch + +fcom %st(7) +fcom +fcoms 10 +fcoml 10 +ficoms 10 +ficoml 10 + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-fp.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-fp.hex new file mode 100644 index 0000000000..cfea272711 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-fp.hex @@ -0,0 +1,672 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +05 +00 +01 +00 +d9 +c5 +d9 +04 +25 +0a +00 +00 +00 +dd +04 +25 +0a +00 +00 +00 +df +04 +25 +0a +00 +00 +00 +db +04 +25 +0a +00 +00 +00 +df +2c +25 +0a +00 +00 +00 +db +2c +25 +0a +00 +00 +00 +dd +d2 +d9 +14 +25 +0a +00 +00 +00 +dd +14 +25 +0a +00 +00 +00 +df +14 +25 +0a +00 +00 +00 +db +14 +25 +0a +00 +00 +00 +dd +d9 +d9 +1c +25 +0a +00 +00 +00 +dd +1c +25 +0a +00 +00 +00 +df +1c +25 +0a +00 +00 +00 +db +1c +25 +0a +00 +00 +00 +df +3c +25 +0a +00 +00 +00 +df +3c +25 +0a +00 +00 +00 +db +3c +25 +0a +00 +00 +00 +d9 +ca +d9 +c9 +d8 +d7 +d8 +d1 +d8 +14 +25 +0a +00 +00 +00 +dc +14 +25 +0a +00 +00 +00 +de +14 +25 +0a +00 +00 +00 +da +14 +25 +0a +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e4 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +01 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +01 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +a1 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-inout.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-inout.asm new file mode 100644 index 0000000000..0a89689d2e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-inout.asm @@ -0,0 +1,12 @@ +inb $10, %al +inw $10, %ax +inl $10, %eax +inb $10 +inw $10 +inl $10 +outb %al, $10 +outw %ax, $10 +outl %eax, $10 +outb $10 +outw $10 +outl $10 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-inout.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-inout.hex new file mode 100644 index 0000000000..11161efbaf --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-inout.hex @@ -0,0 +1,528 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +05 +00 +01 +00 +e4 +0a +66 +e5 +0a +e5 +0a +e4 +0a +66 +e5 +0a +e5 +0a +e6 +0a +66 +e7 +0a +e7 +0a +e6 +0a +66 +e7 +0a +e7 +0a +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5c +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-loop64.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-loop64.asm new file mode 100644 index 0000000000..d441ad6988 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-loop64.asm @@ -0,0 +1,5 @@ +loop label +#loopw label +loopl label +loopq label +label: diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-loop64.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-loop64.hex new file mode 100644 index 0000000000..7c1e924626 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-loop64.hex @@ -0,0 +1,528 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +05 +00 +01 +00 +e2 +05 +67 +e2 +02 +e2 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +00 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-moreinsn.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-moreinsn.asm new file mode 100644 index 0000000000..9e321837b3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-moreinsn.asm @@ -0,0 +1,66 @@ +movsl +movsq + +smovb +smovw +smovl +smovq + +scasl +scasq + +sscab +sscaw +sscal +sscaq + +lgdtq 0 +lidtq 0 +lldtw 0 + +ltrw 0 + +sgdtq 0 +sidtq 0 +sldtw %ax +sldtl %eax +sldtq %rax +smsww %ax +smswl %eax +smswq %rax + +cvtsi2ssl %eax, %xmm0 +cvtsi2ssq %rax, %xmm0 +cvtss2sil %xmm0, %eax +cvtss2siq %xmm0, %rax +cvttss2sil %xmm0, %eax +cvttss2siq %xmm0, %rax + +movmskpsl %xmm0, %eax +movmskpsq %xmm0, %rax + +pextrwl $5, %mm0, %eax +pextrwq $10, %mm1, %rax +pextrwl $5, %xmm0, %eax +pextrwq $10, %xmm1, %rax + +pinsrwl $5, %eax, %mm0 +pinsrwq $10, %rax, %mm1 +pinsrwl $5, %eax, %xmm0 +pinsrwq $10, %rax, %xmm1 + +pmovmskbl %mm0, %eax +pmovmskbq %mm0, %rax +pmovmskbl %xmm0, %eax +pmovmskbq %xmm0, %rax + +cvtsi2sdl %eax, %xmm0 +cvtsi2sdq %rax, %xmm0 + +cvttsd2sil %xmm0, %eax +cvttsd2siq %xmm0, %rax + +fistps 0 +fistpl 0 +fistpq 0 +fistpll 0 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-moreinsn.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-moreinsn.hex new file mode 100644 index 0000000000..fa76e393d0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-moreinsn.hex @@ -0,0 +1,720 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +05 +00 +01 +00 +a5 +48 +a5 +a4 +66 +a5 +a5 +48 +a5 +af +48 +af +ae +66 +af +af +48 +af +0f +01 +14 +25 +00 +00 +00 +00 +0f +01 +1c +25 +00 +00 +00 +00 +0f +00 +14 +25 +00 +00 +00 +00 +0f +00 +1c +25 +00 +00 +00 +00 +0f +01 +04 +25 +00 +00 +00 +00 +0f +01 +0c +25 +00 +00 +00 +00 +66 +0f +00 +c0 +0f +00 +c0 +48 +0f +00 +c0 +66 +0f +01 +e0 +0f +01 +e0 +48 +0f +01 +e0 +f3 +0f +2a +c0 +f3 +48 +0f +2a +c0 +f3 +0f +2d +c0 +f3 +48 +0f +2d +c0 +f3 +0f +2c +c0 +f3 +48 +0f +2c +c0 +0f +50 +c0 +48 +0f +50 +c0 +0f +c5 +c0 +05 +48 +0f +c5 +c1 +0a +66 +0f +c5 +c0 +05 +66 +48 +0f +c5 +c1 +0a +0f +c4 +c0 +05 +0f +c4 +c8 +0a +66 +0f +c4 +c0 +05 +66 +0f +c4 +c8 +0a +0f +d7 +c0 +0f +d7 +c0 +66 +0f +d7 +c0 +66 +0f +d7 +c0 +f2 +0f +2a +c0 +f2 +48 +0f +2a +c0 +f2 +0f +2c +c0 +f2 +48 +0f +2c +c0 +df +1c +25 +00 +00 +00 +00 +db +1c +25 +00 +00 +00 +00 +df +3c +25 +00 +00 +00 +00 +df +3c +25 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1c +01 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +01 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +01 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +dc +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movabs.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movabs.asm new file mode 100644 index 0000000000..d4d9a1a97a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movabs.asm @@ -0,0 +1,4 @@ +.comm _CONE, 4, 16 + +movabsl %eax,(_CONE) +movabsl (_CONE), %eax diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movabs.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movabs.hex new file mode 100644 index 0000000000..05c97a3129 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movabs.hex @@ -0,0 +1,672 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +06 +00 +01 +00 +a3 +00 +00 +00 +00 +00 +00 +00 +00 +a1 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +5f +43 +4f +4e +45 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +10 +00 +f2 +ff +10 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +00 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +00 +00 +00 +00 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1a +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bc +00 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +54 +00 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movdq64.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movdq64.asm new file mode 100644 index 0000000000..657114b1f2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movdq64.asm @@ -0,0 +1,30 @@ +movd %mm(0), %eax +movd %eax, %mm(0) +movd %mm(0), %rax +movd %rax, %mm(0) +movd %mm(0), 0 +movd 0, %mm(0) + +movd %xmm(0), %eax +movd %eax, %xmm(0) +movd %xmm(0), %rax +movd %rax, %xmm(0) +movd %xmm(0), 0 +movd 0, %xmm(0) + +movq %xmm(0), 0 +movq 0, %xmm(0) +movq %xmm(1), %xmm(0) +movq %xmm(0), %xmm(1) + +movq %mm(0), 0 +movq 0, %mm(0) +movq %mm(1), %mm(0) +movq %mm(0), %mm(1) + +movq %xmm(0), %rax +movq %rax, %xmm(0) + +movq %mm(0), %rax +movq %rax, %mm(0) + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movdq64.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movdq64.hex new file mode 100644 index 0000000000..512892805b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movdq64.hex @@ -0,0 +1,640 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +05 +00 +01 +00 +0f +7e +c0 +0f +6e +c0 +48 +0f +7e +c0 +48 +0f +6e +c0 +0f +7e +04 +25 +00 +00 +00 +00 +0f +6e +04 +25 +00 +00 +00 +00 +66 +0f +7e +c0 +66 +0f +6e +c0 +66 +48 +0f +7e +c0 +66 +48 +0f +6e +c0 +66 +0f +7e +04 +25 +00 +00 +00 +00 +66 +0f +6e +04 +25 +00 +00 +00 +00 +66 +0f +d6 +04 +25 +00 +00 +00 +00 +f3 +0f +7e +04 +25 +00 +00 +00 +00 +f3 +0f +7e +c1 +f3 +0f +7e +c8 +0f +7f +04 +25 +00 +00 +00 +00 +0f +6f +04 +25 +00 +00 +00 +00 +0f +6f +c1 +0f +6f +c8 +66 +48 +0f +7e +c0 +66 +48 +0f +6e +c0 +48 +0f +7e +c0 +48 +0f +6e +c0 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c4 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ec +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +84 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movsxs.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movsxs.asm new file mode 100644 index 0000000000..7216a8ca2d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movsxs.asm @@ -0,0 +1,32 @@ +movsbl %al, %eax +movsbw %al, %ax +movswl %ax, %eax +movsbq %al, %rax +movswq %ax, %rax +movslq %eax, %rax +# Intel formats - untested for now +#movsxw %ax, %eax +#movsxb %al, %ax +#movsxb %al, %rax +#movsxw %ax, %rax +#movsxl %eax, %rax + +movzbl %al, %eax +movzbw %al, %ax +movzwl %ax, %eax +movzbq %al, %rax +movzwq %ax, %rax + +movsbw 5,%ax +movsbl 5,%eax +movswl 5,%eax +movsbq 5,%rax +movswq 5,%rax +movsx 5,%eax +movzbw 5,%ax +movzbl 5,%eax +movzwl 5,%eax +movzbq 5,%rax +movzwq 5,%rax +movzx 5,%eax + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movsxs.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movsxs.hex new file mode 100644 index 0000000000..50abeba2d9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-movsxs.hex @@ -0,0 +1,640 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +05 +00 +01 +00 +0f +be +c0 +66 +0f +be +c0 +0f +bf +c0 +48 +0f +be +c0 +48 +0f +bf +c0 +48 +63 +c0 +0f +b6 +c0 +66 +0f +b6 +c0 +0f +b7 +c0 +48 +0f +b6 +c0 +48 +0f +b7 +c0 +66 +0f +be +04 +25 +05 +00 +00 +00 +0f +be +04 +25 +05 +00 +00 +00 +0f +bf +04 +25 +05 +00 +00 +00 +48 +0f +be +04 +25 +05 +00 +00 +00 +48 +0f +bf +04 +25 +05 +00 +00 +00 +0f +be +04 +25 +05 +00 +00 +00 +66 +0f +b6 +04 +25 +05 +00 +00 +00 +0f +b6 +04 +25 +05 +00 +00 +00 +0f +b7 +04 +25 +05 +00 +00 +00 +48 +0f +b6 +04 +25 +05 +00 +00 +00 +48 +0f +b7 +04 +25 +05 +00 +00 +00 +0f +b6 +04 +25 +05 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f4 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f8 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +8d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-muldiv.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-muldiv.asm new file mode 100644 index 0000000000..e4596363c0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-muldiv.asm @@ -0,0 +1,36 @@ +mulb %bl +mulw %bx +mull %ebx +mulq %rbx +imulw %bx, %cx +imull %ebx, %ecx +imulq %rbx, %rcx +imulw $5, %bx, %cx +imull $5, %ebx, %ecx +imulq $5, %rbx, %rcx +imulw $5000, %bx, %cx +imull $5000, %ebx, %ecx +imulq $5000, %rbx, %rcx +imulw $5, %cx +imull $5, %ecx +imulq $5, %rcx +imulw $5000, %cx +imull $5000, %ecx +imulq $5000, %rcx +divb %cl +divw %cx +divl %ecx +divq %rcx +divb %cl, %al +divw %cx, %ax +divl %ecx, %eax +divq %rcx, %rax +idivb %cl +idivw %cx +idivl %ecx +idivq %rcx +idivb %cl, %al +idivw %cx, %ax +idivl %ecx, %eax +idivq %rcx, %rax + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-muldiv.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-muldiv.hex new file mode 100644 index 0000000000..51900e5f15 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-muldiv.hex @@ -0,0 +1,624 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +05 +00 +01 +00 +f6 +e3 +66 +f7 +e3 +f7 +e3 +48 +f7 +e3 +66 +0f +af +cb +0f +af +cb +48 +0f +af +cb +66 +6b +cb +05 +6b +cb +05 +48 +6b +cb +05 +66 +69 +cb +88 +13 +69 +cb +88 +13 +00 +00 +48 +69 +cb +88 +13 +00 +00 +66 +6b +c9 +05 +6b +c9 +05 +48 +6b +c9 +05 +66 +69 +c9 +88 +13 +69 +c9 +88 +13 +00 +00 +48 +69 +c9 +88 +13 +00 +00 +f6 +f1 +66 +f7 +f1 +f7 +f1 +48 +f7 +f1 +f6 +f1 +66 +f7 +f1 +f7 +f1 +48 +f7 +f1 +f6 +f9 +66 +f7 +f9 +f7 +f9 +48 +f7 +f9 +f6 +f9 +66 +f7 +f9 +f7 +f9 +48 +f7 +f9 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b8 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +dc +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e0 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +77 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-prefix.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-prefix.asm new file mode 100644 index 0000000000..7fa5ed4ee2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-prefix.asm @@ -0,0 +1,9 @@ +rep +movsb +rexx +rexx rexy +rex jmp foo +rex movb $0, %ah +rex movb $0, %sil +rex64 movl $0, %eax +foo: diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-prefix.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-prefix.errwarn new file mode 100644 index 0000000000..580f2573e4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-prefix.errwarn @@ -0,0 +1,4 @@ +-:4: warning: multiple REX prefixes, using leftmost +-:5: warning: ignoring REX prefix on jump +-:6: warning: REX prefix not allowed on this instruction, ignoring +-:7: warning: overriding generated REX prefix diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-prefix.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-prefix.hex new file mode 100644 index 0000000000..61f99ae391 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-prefix.hex @@ -0,0 +1,544 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +05 +00 +01 +00 +f3 +a4 +44 +44 +eb +0b +b4 +00 +40 +b6 +00 +48 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +54 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +00 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-retenter.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-retenter.asm new file mode 100644 index 0000000000..d809a5f897 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-retenter.asm @@ -0,0 +1,20 @@ +ret +retw +#retl +retq +retw $5 +#retl $5 +retq $5 +lretw +lretl +lretq +lretw $5 +lretl $5 +lretq $5 + +enterw $5000, $5 +#enterl +enterq $5000, $5 +leavew +#leavel +leaveq diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-retenter.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-retenter.hex new file mode 100644 index 0000000000..ab56fdfa92 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-retenter.hex @@ -0,0 +1,544 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +05 +00 +01 +00 +c3 +66 +c3 +c3 +66 +c2 +05 +00 +c2 +05 +00 +66 +cb +cb +48 +cb +66 +ca +05 +00 +ca +05 +00 +48 +ca +05 +00 +66 +c8 +88 +13 +05 +c8 +88 +13 +05 +66 +c9 +c9 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +68 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8c +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-shift.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-shift.asm new file mode 100644 index 0000000000..bfbef9760c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-shift.asm @@ -0,0 +1,26 @@ +shlb $1, %al +shlb $5, %al +shlb %cl, %al +shlb %al +shlw $1, %ax +shlw $5, %ax +shlw %cl, %ax +shlw %ax +shll $1, %eax +shll $5, %eax +shll %cl, %eax +shll %eax +shlq $1, %rax +shlq $5, %rax +shlq %cl, %rax +shlq %rax + +shldw $5, %bx, %dx +shldw %cl, %bx, %dx +shldw %bx, %dx +shldl $5, %ebx, %edx +shldl %cl, %ebx, %edx +shldl %ebx, %edx +shldq $5, %rbx, %rdx +shldq %cl, %rbx, %rdx +shldq %rbx, %rdx diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-shift.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-shift.hex new file mode 100644 index 0000000000..56e7e2405d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas-shift.hex @@ -0,0 +1,576 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +05 +00 +01 +00 +d0 +e0 +c0 +e0 +05 +d2 +e0 +d0 +e0 +66 +d1 +e0 +66 +c1 +e0 +05 +66 +d3 +e0 +66 +d1 +e0 +d1 +e0 +c1 +e0 +05 +d3 +e0 +d1 +e0 +48 +d1 +e0 +48 +c1 +e0 +05 +48 +d3 +e0 +48 +d1 +e0 +66 +0f +a4 +da +05 +66 +0f +a5 +da +66 +0f +a5 +da +0f +a4 +da +05 +0f +a5 +da +0f +a5 +da +48 +0f +a4 +da +05 +48 +0f +a5 +da +48 +0f +a5 +da +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b4 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b8 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas64-jmpcall.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas64-jmpcall.asm new file mode 100644 index 0000000000..2c1f92d09d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas64-jmpcall.asm @@ -0,0 +1,6 @@ +call foo +callq foo + +jmp foo +#jmpq foo + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas64-jmpcall.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas64-jmpcall.hex new file mode 100644 index 0000000000..51c0ab3f9e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/gas64-jmpcall.hex @@ -0,0 +1,688 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +06 +00 +01 +00 +e8 +00 +00 +00 +00 +e8 +00 +00 +00 +00 +e9 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +06 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +0b +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +00 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +66 +6f +6f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +98 +00 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c4 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1a +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cc +00 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/riprel.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/riprel.asm new file mode 100644 index 0000000000..3cd8425045 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/riprel.asm @@ -0,0 +1 @@ +mov %rax,foo(%rip) diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/riprel.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/riprel.hex new file mode 100644 index 0000000000..437b65697b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/riprel.hex @@ -0,0 +1,640 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +06 +00 +01 +00 +48 +89 +05 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +00 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +66 +6f +6f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8c +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1a +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +94 +00 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/x86_gas64_test.sh b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/x86_gas64_test.sh new file mode 100755 index 0000000000..b5b2cdf30e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gas64/x86_gas64_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh x86_gas64_test modules/arch/x86/tests/gas64 "amd64 gas format" "-f elf -m amd64 -p gas" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gen-fma-test.py b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gen-fma-test.py new file mode 100755 index 0000000000..a8f4e02529 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/gen-fma-test.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python + +def emit(opcode,suffix,width,order,optype): + d = {} + d['opcode']=opcode + d['suffix']=suffix + d['order']=order + if width == 128: + d['op1']= 'xmm1' + d['op2']= 'xmm2' + d['op3']= 'xmm3' + if optype == 'rrr': + d['op3']= 'xmm3' + elif suffix == 'pd': + d['op3']= 'dqword [rax]' + elif suffix == 'sd': + d['op3']= 'qword [rax]' + elif suffix == 'ss': + d['op3']= 'dword [rax]' + else: + d['op1']= 'ymm1' + d['op2']= 'ymm2' + if optype == 'rrr': + d['op3']= 'ymm3' + else: + d['op3']= 'yword [rax]' + + + print "v%(opcode)s%(order)s%(suffix)s %(op1)s, %(op2)s, %(op3)s" % (d) + if optype == 'rrm': + d['op3']= '[rax]' + print "v%(opcode)s%(order)s%(suffix)s %(op1)s, %(op2)s, %(op3)s" % (d) + +def gen(opcodes, combos, optypes, orders): + for opcode in opcodes: + for (suffix,width) in combos: + for order in orders: + for optype in optypes: + emit(opcode,suffix,width,order,optype) + + +if __name__ == '__main__': + orders = ['132', '231', '213'] + + all_combos = [('ss',128), + ('sd',128), + ('ps',128), + ('ps',256), + ('pd',128), + ('pd',256) ] + packed_combos = [ ('ps',128), + ('ps',256), + ('pd',128), + ('pd',256) ] + + opcodes1 = ['fmadd', 'fmsub', 'fnmadd', 'fnmsub'] + opcodes2 = ['fmaddsub', 'fmsubadd'] + + optypes = ['rrr','rrm'] + + print "[bits 64]" + gen(opcodes1, all_combos,optypes, orders) + gen(opcodes2, packed_combos,optypes, orders) diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/genopcode.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/genopcode.asm new file mode 100644 index 0000000000..357c010eaa --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/genopcode.asm @@ -0,0 +1,178 @@ +[bits 16] +mov al, 0 +mov byte al, 0 +mov al, byte 0 +mov byte al, byte 0 +;mov al, word 0 +mov byte [0], 0 +mov [0], word 0 +mov dword [0], dword 0 +;mov [0], 0 +mov eax, 0 +mov dword eax, 0 +mov eax, dword 0 +;mov eax, word 0 +mov dword eax, dword 0 +mov bx, 1h +mov cr0, eax +mov cr2, ebx +mov cr4, edx +mov ecx, cr4 +mov dr3, edx +mov eax, dr7 + +mov [0], al +mov [0], bl +mov [1], al +mov [1], bl +mov ecx, edx +movsx ax, [ecx] +;movzx eax, [edx] +movzx ebx, word [eax] +movzx ecx, byte [ebx] +fnstenv [es:ecx+5] +nop + +push cs +push word cs +push dword cs ; NASM unsupported +push ds +push es +push fs +push gs +pop ds +pop es +pop fs +pop gs +xchg al, bl +xchg al, [0] +xchg [0], al +xchg ax, bx +xchg cx, ax +xchg [0], ax +xchg [0], cx +xchg cx, [0] +xchg eax, edx +xchg ebx, eax +xchg ecx, ebx +xchg [0], ecx +xchg eax, [0] +in al, 55 +in ax, 99 +in eax, 100 +in al, dx +in ax, dx +in eax, dx +out 55, al +out 66, ax +out 77, eax +out dx, al +out dx, ax +out dx, eax +lea bx, [5] +lea ebx, [32] +lds si, [0] +lds ax, [1] +;lds ax, dword [1] +les di, [5] +lds eax, [7] +les ebx, [9] +lss esp, [11] +lfs ecx, [13] +lgs edx, [15] +;; TODO: add arith stuff +imul eax, 4 +aad +aam +aad 5 +aam 10 +shl al, 5 +shl bl, 1 +shl cl, cl +shr ax, 5 +shr bx, 1 +shr cx, cl +shld ax, bx, 5 +shrd cx, dx, cl +shld ecx, edx, 10 +shld eax, ebx, cl +retn +retf +retn 8 +retf 16 +enter 10, 12 +setc al +setc [0] +;; TODO: add bit manip +int 10 +;; TODO: add bound +;; TODO: add protection control +fld dword [0] +fld qword [4] +fld tword [16] +fld st2 +fstp dword [0] +fstp st4 +fild word [0] +fild dword [4] +fild qword [8] +fbld [100] +fbld tword [10] +fst dword [1] +fst qword [8] +fst st1 +fxch +fxch st1 +fxch st0, st2 +fxch st2, st0 +fcom dword [0] +fcom qword [8] +fcom st1 +fcom st0, st0 +fucom st7 +fucomp st0, st5 +fadd dword [10] +fadd qword [5] +fadd st0 +fadd st0, st5 +fadd to st7 +fadd st6, st0 +faddp ;NASM unsupported +faddp st2 +faddp st5, st0 +fiadd word [10] +fisub dword [4] +fldcw [0] +fnstcw [4] +fstcw word [4] +fnstsw [8] +fnstsw ax +fstsw word [0] +fstsw ax +ffree st1 +ffreep st0 ;NASM unsupported +jc short label +jc label +label: +jz label +jz near label +loop label +jcxz label +jecxz label +call label +call [label] +call dword [label] +;jmp label +jmp short label +jmp near label +jmp far [label] +jmp far dword [label] +call far word [label] +loop short label +jcxz short label +jecxz short label +[bits 16] +push si +push esi +[bits 32] +push esi diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/genopcode.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/genopcode.hex new file mode 100644 index 0000000000..37b3cf94ff --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/genopcode.hex @@ -0,0 +1,495 @@ +b0 +00 +b0 +00 +b0 +00 +b0 +00 +c6 +06 +00 +00 +00 +c7 +06 +00 +00 +00 +00 +66 +c7 +06 +00 +00 +00 +00 +00 +00 +66 +b8 +00 +00 +00 +00 +66 +b8 +00 +00 +00 +00 +66 +b8 +00 +00 +00 +00 +66 +b8 +00 +00 +00 +00 +bb +01 +00 +0f +22 +c0 +0f +22 +d3 +0f +22 +e2 +0f +20 +e1 +0f +23 +da +0f +21 +f8 +a2 +00 +00 +88 +1e +00 +00 +a2 +01 +00 +88 +1e +01 +00 +66 +89 +d1 +67 +0f +be +01 +67 +66 +0f +b7 +18 +67 +66 +0f +b6 +0b +26 +67 +d9 +71 +05 +90 +0e +0e +66 +0e +1e +06 +0f +a0 +0f +a8 +1f +07 +0f +a1 +0f +a9 +86 +d8 +86 +06 +00 +00 +86 +06 +00 +00 +93 +91 +87 +06 +00 +00 +87 +0e +00 +00 +87 +0e +00 +00 +66 +92 +66 +93 +66 +87 +d9 +66 +87 +0e +00 +00 +66 +87 +06 +00 +00 +e4 +37 +e5 +63 +66 +e5 +64 +ec +ed +66 +ed +e6 +37 +e7 +42 +66 +e7 +4d +ee +ef +66 +ef +8d +1e +05 +00 +66 +8d +1e +20 +00 +c5 +36 +00 +00 +c5 +06 +01 +00 +c4 +3e +05 +00 +66 +c5 +06 +07 +00 +66 +c4 +1e +09 +00 +66 +0f +b2 +26 +0b +00 +66 +0f +b4 +0e +0d +00 +66 +0f +b5 +16 +0f +00 +66 +6b +c0 +04 +d5 +0a +d4 +0a +d5 +05 +d4 +0a +c0 +e0 +05 +d0 +e3 +d2 +e1 +c1 +e8 +05 +d1 +eb +d3 +e9 +0f +a4 +d8 +05 +0f +ad +d1 +66 +0f +a4 +d1 +0a +66 +0f +a5 +d8 +c3 +cb +c2 +08 +00 +ca +10 +00 +c8 +0a +00 +0c +0f +92 +d0 +0f +92 +16 +00 +00 +cd +0a +d9 +06 +00 +00 +dd +06 +04 +00 +db +2e +10 +00 +d9 +c2 +d9 +1e +00 +00 +dd +dc +df +06 +00 +00 +db +06 +04 +00 +df +2e +08 +00 +df +26 +64 +00 +df +26 +0a +00 +d9 +16 +01 +00 +dd +16 +08 +00 +dd +d1 +d9 +c9 +d9 +c9 +d9 +ca +d9 +ca +d8 +16 +00 +00 +dc +16 +08 +00 +d8 +d1 +d8 +d0 +dd +e7 +dd +ed +d8 +06 +0a +00 +dc +06 +05 +00 +d8 +c0 +d8 +c5 +dc +c7 +dc +c6 +de +c1 +de +c2 +de +c5 +de +06 +0a +00 +da +26 +04 +00 +d9 +2e +00 +00 +d9 +3e +04 +00 +9b +d9 +3e +04 +00 +dd +3e +08 +00 +df +e0 +9b +dd +3e +00 +00 +9b +df +e0 +dd +c1 +df +c0 +72 +02 +72 +00 +74 +fe +0f +84 +fa +ff +e2 +f8 +e3 +f6 +67 +e3 +f3 +e8 +f0 +ff +ff +16 +b9 +01 +66 +ff +16 +b9 +01 +eb +e5 +e9 +e2 +ff +ff +2e +b9 +01 +66 +ff +2e +b9 +01 +ff +1e +b9 +01 +e2 +d3 +e3 +d1 +67 +e3 +ce +56 +66 +56 +56 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/imm64.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/imm64.asm new file mode 100644 index 0000000000..5b41bfaeb9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/imm64.asm @@ -0,0 +1,35 @@ +bits 64 +default abs +;extern label1 +label1: +label2: + +mov rax, 0x1000 ; 32-bit imm +mov rax, 0x1122334455667788 ; 64-bit imm (larger than signed 32-bit) +;mov rax, 0x80000000 ; 64-bit imm (larger than signed 32-bit) +mov rax, label1 ; 32-bit imm <--- not 64-bit! +mov rax, label2 ; 32-bit imm <--- not 64-bit! +mov rax, qword 0x1000 ; 64-bit imm +mov rax, qword label1 ; 64-bit imm +mov rax, qword label2 ; 64-bit imm + +mov qword [rax], 0x1000 ; 32-bit imm +mov qword [rax], 0x1122334455667788 ; 32-bit imm, overflow warning +;mov qword [rax], 0x80000000 ; 32-bit imm, overflow warning +mov qword [rax], label1 ; 32-bit imm (matches default above) +mov qword [rax], label2 ; 32-bit imm (matches default above) + +add rax, 0x1000 ; 32-bit imm +add rax, 0x1122334455667788 ; 32-bit imm, overflow warning +;add rax, 0x80000000 ; 32-bit imm, overflow warning +add rax, label1 ; 32-bit imm (matches default above) +add rax, label2 ; 32-bit imm (matches default above) + +mov [0x1000], rax ; 32-bit disp +mov [abs 0x1122334455667788], rax ; 64-bit disp +mov [label1], rax ; 32-bit disp +mov [label2], rax ; 32-bit disp +mov [qword 0x1000], rax ; 64-bit disp +mov [qword label1], rax ; 64-bit disp +mov [qword label2], rax ; 64-bit disp + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/imm64.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/imm64.errwarn new file mode 100644 index 0000000000..a0487353fb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/imm64.errwarn @@ -0,0 +1,3 @@ +-:17: warning: value does not fit in 32 bit field +-:23: warning: value does not fit in 32 bit field +-:29: warning: value does not fit in 32 bit field diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/imm64.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/imm64.hex new file mode 100644 index 0000000000..af46a7198e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/imm64.hex @@ -0,0 +1,175 @@ +48 +c7 +c0 +00 +10 +00 +00 +48 +b8 +88 +77 +66 +55 +44 +33 +22 +11 +48 +c7 +c0 +00 +00 +00 +00 +48 +c7 +c0 +00 +00 +00 +00 +48 +b8 +00 +10 +00 +00 +00 +00 +00 +00 +48 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +48 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +48 +c7 +00 +00 +10 +00 +00 +48 +c7 +00 +88 +77 +66 +55 +48 +c7 +00 +00 +00 +00 +00 +48 +c7 +00 +00 +00 +00 +00 +48 +05 +00 +10 +00 +00 +48 +05 +88 +77 +66 +55 +48 +05 +00 +00 +00 +00 +48 +05 +00 +00 +00 +00 +48 +89 +04 +25 +00 +10 +00 +00 +48 +89 +04 +25 +88 +77 +66 +55 +48 +89 +04 +25 +00 +00 +00 +00 +48 +89 +04 +25 +00 +00 +00 +00 +48 +a3 +00 +10 +00 +00 +00 +00 +00 +00 +48 +a3 +00 +00 +00 +00 +00 +00 +00 +00 +48 +a3 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/invpcid.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/invpcid.asm new file mode 100644 index 0000000000..90f517aa6e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/invpcid.asm @@ -0,0 +1,6 @@ +[bits 32] +invpcid eax, oword [0] ; 66 0f 38 82 05 00 00 00 00 + +[bits 64] +invpcid rax, oword [0] ; 66 0f 38 82 04 25 00 00 00 00 + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/invpcid.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/invpcid.hex new file mode 100644 index 0000000000..cfc8726b11 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/invpcid.hex @@ -0,0 +1,19 @@ +66 +0f +38 +82 +05 +00 +00 +00 +00 +66 +0f +38 +82 +04 +25 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/iret.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/iret.asm new file mode 100644 index 0000000000..2521f58406 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/iret.asm @@ -0,0 +1,13 @@ +[bits 16] +iret +iretw +iretd +[bits 32] +iret +iretw +iretd +[bits 64] +iret +iretw +iretd +iretq diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/iret.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/iret.hex new file mode 100644 index 0000000000..571c637d6a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/iret.hex @@ -0,0 +1,14 @@ +cf +cf +66 +cf +cf +66 +cf +cf +cf +66 +cf +cf +48 +cf diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-1.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-1.asm new file mode 100644 index 0000000000..d9d8a9ee20 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-1.asm @@ -0,0 +1,6 @@ +[bits 64] +l1: +mov dword [l2], l2 +jc l3 +l3: +l2 equ $-l1 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-1.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-1.hex new file mode 100644 index 0000000000..d0dd23bae7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-1.hex @@ -0,0 +1,13 @@ +c7 +04 +25 +0d +00 +00 +00 +0d +00 +00 +00 +72 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-2.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-2.asm new file mode 100644 index 0000000000..ac9316c01a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-2.asm @@ -0,0 +1,6 @@ +[bits 64] +l1: +mov dword [l2], l2 +jc short l3 +l3: +l2 equ $-l1 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-2.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-2.hex new file mode 100644 index 0000000000..d0dd23bae7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-2.hex @@ -0,0 +1,13 @@ +c7 +04 +25 +0d +00 +00 +00 +0d +00 +00 +00 +72 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-3.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-3.asm new file mode 100644 index 0000000000..7d8fa99716 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-3.asm @@ -0,0 +1,7 @@ +[bits 64] +l1: +mov dword [l2], l2 +jc short l3 +db 0x0 +l3: +l2 equ $-l1 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-3.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-3.hex new file mode 100644 index 0000000000..d6c315db97 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-3.hex @@ -0,0 +1,14 @@ +c7 +04 +25 +0e +00 +00 +00 +0e +00 +00 +00 +72 +01 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-4.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-4.asm new file mode 100644 index 0000000000..e8075c812c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-4.asm @@ -0,0 +1,7 @@ +[bits 64] +l1: +mov dword [l2], l2 +jc l3 +db 0x0 +l3: +l2 equ $-l1 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-4.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-4.hex new file mode 100644 index 0000000000..d6c315db97 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-4.hex @@ -0,0 +1,14 @@ +c7 +04 +25 +0e +00 +00 +00 +0e +00 +00 +00 +72 +01 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-5.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-5.asm new file mode 100644 index 0000000000..fda4dc6915 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-5.asm @@ -0,0 +1,7 @@ +[bits 64] +l1: +mov dword [l2], l2 +jc l3 +times 0x10001 db 0x0 +l3: +l2 equ $-l1 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-5.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-5.hex new file mode 100644 index 0000000000..bc0de726a7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-5.hex @@ -0,0 +1,65554 @@ +c7 +04 +25 +12 +00 +01 +00 +12 +00 +01 +00 +0f +82 +01 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-6.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-6.asm new file mode 100644 index 0000000000..cd6d84ac20 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-6.asm @@ -0,0 +1,7 @@ +[bits 64] +mov dword [l4-l1], 0x0 +l4: +l1: +jc short l3 +db 0x0 +l3: diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-6.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-6.hex new file mode 100644 index 0000000000..c4665a4357 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmp64-6.hex @@ -0,0 +1,14 @@ +c7 +04 +25 +00 +00 +00 +00 +00 +00 +00 +00 +72 +01 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmpfar.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmpfar.asm new file mode 100644 index 0000000000..92ef261b09 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmpfar.asm @@ -0,0 +1,16 @@ +jmp 1234:5678 ; YASM: far jump +jmp near 1234:5678 ; YASM: near jump; NASM: mismatch in operand sizes +jmp far 1234:5678 ; YASM: far jump; NASM: mismatch in operand sizes +;dw seg (1234:5678) +far1 equ 1234:5678 +jmp far1 ; both: near jump +jmp near far1 ; both: near jump +jmp far far1 ; YASM: far jump; NASM: value referenced by FAR is not relocatable +dw seg far1 +jmp far2 ; both: near jump +jmp near far2 ; both: near jump +jmp far far2 ; YASM: far jump; NASM: value referenced by FAR is not relocatable +dw seg far2 +far2 equ 1234:5678 +;mov ax, [1234:5678] ; YASM: invalid segment in effective address; NASM: invalid segment override +;mov ax, 1234:5678 ; YASM: immediate does not support segment; NASM: invalid combination of opcode and operands diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmpfar.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmpfar.hex new file mode 100644 index 0000000000..f9d3ea424a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/jmpfar.hex @@ -0,0 +1,39 @@ +ea +2e +16 +d2 +04 +e9 +26 +16 +ea +2e +16 +d2 +04 +e9 +1e +16 +e9 +1b +16 +ea +2e +16 +d2 +04 +d2 +04 +e9 +11 +16 +e9 +0e +16 +ea +2e +16 +d2 +04 +d2 +04 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/larlsl.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/larlsl.asm new file mode 100644 index 0000000000..51c3fecafd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/larlsl.asm @@ -0,0 +1,59 @@ +[bits 16] +lar ax, bx +lar ax, [bx] +lar ax, word [bx] +lar eax, bx +lar eax, ebx +lar eax, [bx] +lar eax, word [bx] + +lsl ax, bx +lsl ax, [bx] +lsl ax, word [bx] +lsl eax, bx +lsl eax, ebx +lsl eax, [bx] +lsl eax, word [bx] + +[bits 32] +lar ax, bx +lar ax, [ebx] +lar ax, word [ebx] +lar eax, bx +lar eax, ebx +lar eax, [ebx] +lar eax, word [ebx] + +lsl ax, bx +lsl ax, [ebx] +lsl ax, word [ebx] +lsl eax, bx +lsl eax, ebx +lsl eax, [ebx] +lsl eax, word [ebx] + +[bits 64] +lar ax, bx +lar ax, [rbx] +lar ax, word [rbx] +lar eax, bx +lar eax, ebx +lar eax, [rbx] +lar eax, word [rbx] +lar rax, bx +lar rax, ebx +lar rax, [rbx] +lar rax, word [rbx] + +lsl ax, bx +lsl ax, [rbx] +lsl ax, word [rbx] +lsl eax, bx +lsl eax, ebx +lsl eax, [rbx] +lsl eax, word [rbx] +lsl rax, bx +lsl rax, ebx +lsl rax, [rbx] +lsl rax, word [rbx] + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/larlsl.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/larlsl.hex new file mode 100644 index 0000000000..38c8b973d5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/larlsl.hex @@ -0,0 +1,178 @@ +0f +02 +c3 +0f +02 +07 +0f +02 +07 +66 +0f +02 +c3 +66 +0f +02 +c3 +66 +0f +02 +07 +66 +0f +02 +07 +0f +03 +c3 +0f +03 +07 +0f +03 +07 +66 +0f +03 +c3 +66 +0f +03 +c3 +66 +0f +03 +07 +66 +0f +03 +07 +66 +0f +02 +c3 +66 +0f +02 +03 +66 +0f +02 +03 +0f +02 +c3 +0f +02 +c3 +0f +02 +03 +0f +02 +03 +66 +0f +03 +c3 +66 +0f +03 +03 +66 +0f +03 +03 +0f +03 +c3 +0f +03 +c3 +0f +03 +03 +0f +03 +03 +66 +0f +02 +c3 +66 +0f +02 +03 +66 +0f +02 +03 +0f +02 +c3 +0f +02 +c3 +0f +02 +03 +0f +02 +03 +48 +0f +02 +c3 +48 +0f +02 +c3 +48 +0f +02 +03 +48 +0f +02 +03 +66 +0f +03 +c3 +66 +0f +03 +03 +66 +0f +03 +03 +0f +03 +c3 +0f +03 +c3 +0f +03 +03 +0f +03 +03 +48 +0f +03 +c3 +48 +0f +03 +c3 +48 +0f +03 +03 +48 +0f +03 +03 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lds.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lds.asm new file mode 100644 index 0000000000..a9c70be4bb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lds.asm @@ -0,0 +1,6 @@ +lds ax,[1] +lds ax,word [1] +lds ax,dword [1] +lds eax,[1] +lds eax,word [1] +lds eax,dword [1] diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lds.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lds.hex new file mode 100644 index 0000000000..c3909546da --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lds.hex @@ -0,0 +1,27 @@ +c5 +06 +01 +00 +c5 +06 +01 +00 +c5 +06 +01 +00 +66 +c5 +06 +01 +00 +66 +c5 +06 +01 +00 +66 +c5 +06 +01 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lfs64.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lfs64.asm new file mode 100644 index 0000000000..5ee04760ac --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lfs64.asm @@ -0,0 +1,10 @@ +[bits 64] +lfs ax, [rbx] +lfs eax, [rbx] +lfs rax, [rbx] +lgs ax, [rbx] +lgs eax, [rbx] +lgs rax, [rbx] +lss ax, [rbx] +lss eax, [rbx] +lss rax, [rbx] diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lfs64.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lfs64.hex new file mode 100644 index 0000000000..8eb718648f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lfs64.hex @@ -0,0 +1,33 @@ +66 +0f +b4 +03 +0f +b4 +03 +48 +0f +b4 +03 +66 +0f +b5 +03 +0f +b5 +03 +48 +0f +b5 +03 +66 +0f +b2 +03 +0f +b2 +03 +48 +0f +b2 +03 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/loopadsz.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/loopadsz.asm new file mode 100644 index 0000000000..8624a6c01a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/loopadsz.asm @@ -0,0 +1,7 @@ +[bits 16] +foo: a32 loop foo ; 67 E2 FD +bar: loop bar, ecx ; 67 E2 FD + +[bits 32] +baz: a16 loop baz ; 67 E2 FD +qux: loop qux, cx ; 67 E2 FD diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/loopadsz.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/loopadsz.hex new file mode 100644 index 0000000000..b47e4711a2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/loopadsz.hex @@ -0,0 +1,12 @@ +67 +e2 +fd +67 +e2 +fd +67 +e2 +fd +67 +e2 +fd diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lsahf.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lsahf.asm new file mode 100644 index 0000000000..c88fc56c93 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lsahf.asm @@ -0,0 +1,9 @@ +[bits 16] +lahf +sahf +[bits 32] +lahf +sahf +[bits 64] +lahf +sahf diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lsahf.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lsahf.hex new file mode 100644 index 0000000000..08bd028b95 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lsahf.hex @@ -0,0 +1,6 @@ +9f +9e +9f +9e +9f +9e diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lzcnt.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lzcnt.asm new file mode 100644 index 0000000000..4e545dfa4f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lzcnt.asm @@ -0,0 +1,8 @@ +[bits 64] + +lzcnt ax, bx ; 66 f3 0f bd c3 +lzcnt ax, [0] ; 66 f3 0f bd 04 25 00 00 00 00 +lzcnt eax, ebx ; f3 0f bd c3 +lzcnt eax, [0] ; f3 0f bd 04 25 00 00 00 00 +lzcnt rax, rbx ; f3 48 0f bd c3 +lzcnt rax, [0] ; f3 48 0f bd 04 25 00 00 00 00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lzcnt.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lzcnt.hex new file mode 100644 index 0000000000..ed14eb0e09 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/lzcnt.hex @@ -0,0 +1,43 @@ +66 +f3 +0f +bd +c3 +66 +f3 +0f +bd +04 +25 +00 +00 +00 +00 +f3 +0f +bd +c3 +f3 +0f +bd +04 +25 +00 +00 +00 +00 +f3 +48 +0f +bd +c3 +f3 +48 +0f +bd +04 +25 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64-err.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64-err.asm new file mode 100644 index 0000000000..404721671e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64-err.asm @@ -0,0 +1,7 @@ +[bits 64] +mov ax, [word 0] +;a16 mov ax, [0] +mov ax, [ax] +mov eax, [rip+rcx] +mov rbx, [rcx+ebx] +mov ah, [r8] diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64-err.errwarn new file mode 100644 index 0000000000..6f37650d02 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64-err.errwarn @@ -0,0 +1,5 @@ +-:2: error: 16-bit addresses not supported in 64-bit mode +-:4: error: 16-bit addresses not supported in 64-bit mode +-:5: error: invalid effective address +-:6: error: invalid effective address +-:7: error: cannot use A/B/C/DH with instruction needing REX diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64.asm new file mode 100644 index 0000000000..f88d81d16f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64.asm @@ -0,0 +1,25 @@ +[bits 64] +mov ax, [0] ; 66 8B 04 25 00 00 00 00 +mov rax, [qword 0] ; 48 A1 00 00 00 00 00 00 00 00 +mov rax, [0] ; 48 8B 04 25 00 00 00 00 +mov rax, [dword 0] ; 48 8B 04 25 00 00 00 00 +mov al, [qword 0xfedcba9876543210] ; A0 10 32 54 76 98 BA DC FE +mov al, [0xfedcba9876543210] ; 8A 04 25 10 32 54 76 (+ warning) +a32 mov rax, [0] ; 67 48 A1 00 00 00 00 +a32 mov eax, [0] ; 67 A1 00 00 00 00 +mov ecx, [0] ; 8B 0C 25 00 00 00 00 +mov edx, [dword 0] ; 8B 14 25 00 00 00 00 +mov rbx, [0] ; 48 8B 1C 25 00 00 00 00 +a32 mov rbx, [0] ; 67 48 8B 1C 25 00 00 00 00 +mov ebx, [rcx] ; 8B 19 +mov r8, [r9] ; 4D 8B 01 +mov ecx, [ebx] ; 67 8B 0B +mov edx, [rip] ; 8B 15 00 00 00 00 +a32 mov rcx, [rip+5] ; 67 48 8B 0D 05 00 00 00 +mov rbx, [rax+rbx*4] ; 48 8B 1C 98 +mov rdx, [rsp] ; 48 8B 14 24 +mov rax, [r12] ; 49 8B 04 24 +mov rcx, [rbp] ; 48 8B 4D 00 +mov rbx, [r13] ; 49 8B 5D 00 +mov ah, [rip] ; 8A 25 00 00 00 00 +mov bh, [rcx] ; 8A 39 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64.errwarn new file mode 100644 index 0000000000..0b47ad9b6e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64.errwarn @@ -0,0 +1 @@ +-:7: warning: value does not fit in 32 bit field diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64.hex new file mode 100644 index 0000000000..eeb726b8e0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64.hex @@ -0,0 +1,144 @@ +66 +8b +04 +25 +00 +00 +00 +00 +48 +a1 +00 +00 +00 +00 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +a0 +10 +32 +54 +76 +98 +ba +dc +fe +8a +04 +25 +10 +32 +54 +76 +67 +48 +a1 +00 +00 +00 +00 +67 +a1 +00 +00 +00 +00 +8b +0c +25 +00 +00 +00 +00 +8b +14 +25 +00 +00 +00 +00 +48 +8b +1c +25 +00 +00 +00 +00 +67 +48 +8b +1c +25 +00 +00 +00 +00 +8b +19 +4d +8b +01 +67 +8b +0b +8b +15 +00 +00 +00 +00 +67 +48 +8b +0d +05 +00 +00 +00 +48 +8b +1c +98 +48 +8b +14 +24 +49 +8b +04 +24 +48 +8b +4d +00 +49 +8b +5d +00 +8a +25 +00 +00 +00 +00 +8a +39 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64hi32.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64hi32.asm new file mode 100644 index 0000000000..d2fe07c575 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64hi32.asm @@ -0,0 +1,3 @@ +[bits 64] +adc byte [eax], 12h +adc byte [r8d], 12h diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64hi32.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64hi32.hex new file mode 100644 index 0000000000..1122f24514 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64hi32.hex @@ -0,0 +1,9 @@ +67 +80 +10 +12 +67 +41 +80 +10 +12 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64rip.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64rip.asm new file mode 100644 index 0000000000..31c250aa79 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64rip.asm @@ -0,0 +1,8 @@ +[bits 64] +mov eax, [rip] +mov eax, [rip+2] +mov eax, [rip+sym] +mov eax, [sym wrt rip] +sym: +mov eax, [sym wrt rip] +call sym diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64rip.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64rip.hex new file mode 100644 index 0000000000..f173aec109 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mem64rip.hex @@ -0,0 +1,35 @@ +8b +05 +00 +00 +00 +00 +8b +05 +02 +00 +00 +00 +8b +05 +18 +00 +00 +00 +8b +05 +00 +00 +00 +00 +8b +05 +fa +ff +ff +ff +e8 +f5 +ff +ff +ff diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mixcase.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mixcase.asm new file mode 100644 index 0000000000..66a9686561 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mixcase.asm @@ -0,0 +1,3 @@ +CPU SSSE3 +MOV AX,5 + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mixcase.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mixcase.hex new file mode 100644 index 0000000000..76dc00b990 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/mixcase.hex @@ -0,0 +1,3 @@ +b8 +05 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movbe.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movbe.asm new file mode 100644 index 0000000000..637524aee0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movbe.asm @@ -0,0 +1,20 @@ +[bits 64] +movbe cx, [5] +movbe cx, word [5] +movbe ecx, [5] +movbe ecx, dword [5] +movbe rcx, [5] +movbe rcx, qword [5] +movbe r9, [5] +movbe r9, qword [5] +movbe [5], bx +movbe word [5], bx +movbe [5], ebx +movbe dword [5], ebx +movbe [5], r10d +movbe dword [5], r10d +movbe [5], rbx +movbe qword [5], rbx +movbe [5], r10 +movbe qword [5], r10 + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movbe.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movbe.hex new file mode 100644 index 0000000000..108bedf700 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movbe.hex @@ -0,0 +1,176 @@ +66 +0f +38 +f0 +0c +25 +05 +00 +00 +00 +66 +0f +38 +f0 +0c +25 +05 +00 +00 +00 +0f +38 +f0 +0c +25 +05 +00 +00 +00 +0f +38 +f0 +0c +25 +05 +00 +00 +00 +48 +0f +38 +f0 +0c +25 +05 +00 +00 +00 +48 +0f +38 +f0 +0c +25 +05 +00 +00 +00 +4c +0f +38 +f0 +0c +25 +05 +00 +00 +00 +4c +0f +38 +f0 +0c +25 +05 +00 +00 +00 +66 +0f +38 +f1 +1c +25 +05 +00 +00 +00 +66 +0f +38 +f1 +1c +25 +05 +00 +00 +00 +0f +38 +f1 +1c +25 +05 +00 +00 +00 +0f +38 +f1 +1c +25 +05 +00 +00 +00 +44 +0f +38 +f1 +14 +25 +05 +00 +00 +00 +44 +0f +38 +f1 +14 +25 +05 +00 +00 +00 +48 +0f +38 +f1 +1c +25 +05 +00 +00 +00 +48 +0f +38 +f1 +1c +25 +05 +00 +00 +00 +4c +0f +38 +f1 +14 +25 +05 +00 +00 +00 +4c +0f +38 +f1 +14 +25 +05 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movdq32.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movdq32.asm new file mode 100644 index 0000000000..c000e58e39 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movdq32.asm @@ -0,0 +1,21 @@ +[bits 32] +movd eax, mm0 +movd mm0, eax +movd [0], mm0 +movd mm0, [0] + +movd eax, xmm0 +movd xmm0, eax +movd [0], xmm0 +movd xmm0, [0] + +movq [0], xmm0 +movq xmm0, [0] +movq xmm0, xmm1 +movq xmm1, xmm0 + +movq [0], mm0 +movq mm0, [0] +movq mm0, mm1 +movq mm1, mm0 + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movdq32.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movdq32.hex new file mode 100644 index 0000000000..6fea672661 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movdq32.hex @@ -0,0 +1,88 @@ +0f +7e +c0 +0f +6e +c0 +0f +7e +05 +00 +00 +00 +00 +0f +6e +05 +00 +00 +00 +00 +66 +0f +7e +c0 +66 +0f +6e +c0 +66 +0f +7e +05 +00 +00 +00 +00 +66 +0f +6e +05 +00 +00 +00 +00 +66 +0f +d6 +05 +00 +00 +00 +00 +f3 +0f +7e +05 +00 +00 +00 +00 +f3 +0f +7e +c1 +f3 +0f +7e +c8 +0f +7f +05 +00 +00 +00 +00 +0f +6f +05 +00 +00 +00 +00 +0f +6f +c1 +0f +6f +c8 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movdq64.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movdq64.asm new file mode 100644 index 0000000000..ba367171a4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movdq64.asm @@ -0,0 +1,31 @@ +[bits 64] +movd eax, mm0 +movd mm0, eax +movd rax, mm0 +movd mm0, rax +movd [0], mm0 +movd mm0, [0] + +movd eax, xmm0 +movd xmm0, eax +movd rax, xmm0 +movd xmm0, rax +movd [0], xmm0 +movd xmm0, [0] + +movq [0], xmm0 +movq xmm0, [0] +movq xmm0, xmm1 +movq xmm1, xmm0 + +movq [0], mm0 +movq mm0, [0] +movq mm0, mm1 +movq mm1, mm0 + +movq rax, xmm0 +movq xmm0, rax + +movq rax, mm0 +movq mm0, rax + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movdq64.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movdq64.hex new file mode 100644 index 0000000000..d80f0c25d9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/movdq64.hex @@ -0,0 +1,132 @@ +0f +7e +c0 +0f +6e +c0 +48 +0f +7e +c0 +48 +0f +6e +c0 +0f +7e +04 +25 +00 +00 +00 +00 +0f +6e +04 +25 +00 +00 +00 +00 +66 +0f +7e +c0 +66 +0f +6e +c0 +66 +48 +0f +7e +c0 +66 +48 +0f +6e +c0 +66 +0f +7e +04 +25 +00 +00 +00 +00 +66 +0f +6e +04 +25 +00 +00 +00 +00 +66 +0f +d6 +04 +25 +00 +00 +00 +00 +f3 +0f +7e +04 +25 +00 +00 +00 +00 +f3 +0f +7e +c1 +f3 +0f +7e +c8 +0f +7f +04 +25 +00 +00 +00 +00 +0f +6f +04 +25 +00 +00 +00 +00 +0f +6f +c1 +0f +6f +c8 +66 +48 +0f +7e +c0 +66 +48 +0f +6e +c0 +48 +0f +7e +c0 +48 +0f +6e +c0 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/negequ.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/negequ.asm new file mode 100644 index 0000000000..cfd2746909 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/negequ.asm @@ -0,0 +1,8 @@ +[bits 32] +off equ -4 +pos equ 4 + +mov [ebp+off], eax +mov [ebp+pos], eax +mov [ebp-off], eax +mov [ebp-pos], eax diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/negequ.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/negequ.hex new file mode 100644 index 0000000000..8f015a2898 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/negequ.hex @@ -0,0 +1,12 @@ +89 +45 +fc +89 +45 +04 +89 +45 +04 +89 +45 +fc diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64-err.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64-err.asm new file mode 100644 index 0000000000..09ff36abbd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64-err.asm @@ -0,0 +1,17 @@ +[bits 64] +push es +pop fs +pushaw +popa +lds eax, [5] +aas +das +aad +into +salc +[bits 32] +xmm9: +rax: +rdx: +cdqe +swapgs diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64-err.errwarn new file mode 100644 index 0000000000..73bfcf975b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64-err.errwarn @@ -0,0 +1,14 @@ +-:2: warning: `es' segment register ignored in 64-bit mode +-:4: error: `pushaw' invalid in 64-bit mode +-:5: error: `popa' invalid in 64-bit mode +-:6: error: `lds' invalid in 64-bit mode +-:7: error: `aas' invalid in 64-bit mode +-:8: error: `das' invalid in 64-bit mode +-:9: error: `aad' invalid in 64-bit mode +-:10: error: `into' invalid in 64-bit mode +-:11: error: `salc' invalid in 64-bit mode +-:13: warning: `xmm9' is a register in 64-bit mode +-:14: warning: `rax' is a register in 64-bit mode +-:15: warning: `rdx' is a register in 64-bit mode +-:16: warning: `cdqe' is an instruction in 64-bit mode +-:17: warning: `swapgs' is an instruction in 64-bit mode diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64-err2.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64-err2.asm new file mode 100644 index 0000000000..85eb0491a7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64-err2.asm @@ -0,0 +1,3 @@ +[bits 64] +mov bh, r8b +mov r8b, ch diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64-err2.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64-err2.errwarn new file mode 100644 index 0000000000..8a78539210 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64-err2.errwarn @@ -0,0 +1,2 @@ +-:2: error: cannot use A/B/C/DH with instruction needing REX +-:3: error: cannot use A/B/C/DH with instruction needing REX diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64.asm new file mode 100644 index 0000000000..464039d474 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64.asm @@ -0,0 +1,28 @@ +[bits 64] +mov ah, 5 +mov ax, 5 +mov eax, 5 +mov rax, 5 ; optimized to signed 32-bit form +mov rax, dword 5 ; explicitly 32-bit +mov rax, qword 5 ; explicitly 64-bit +; test sign optimization cases +mov rax, 0x7fffffff +mov rax, dword 0x7fffffff +mov rax, qword 0x7fffffff +mov rax, 0x80000000 +mov rax, dword 0x80000000 +mov rax, qword 0x80000000 +mov rax, -0x80000000 +mov rax, dword -0x80000000 +mov rax, qword -0x80000000 +mov rax, 0x100000000 +mov rax, dword 0x100000000 +mov rax, qword 0x100000000 +mov ah, bl +mov bl, r8b +mov sil, r9b +mov r10w, r11w +mov r15d, r12d +mov r13, r14 +inc ebx +dec ecx diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64.errwarn new file mode 100644 index 0000000000..0c6e292047 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64.errwarn @@ -0,0 +1 @@ +-:19: warning: value does not fit in 32 bit field diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64.hex new file mode 100644 index 0000000000..6103b10764 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/nomem64.hex @@ -0,0 +1,159 @@ +b4 +05 +66 +b8 +05 +00 +b8 +05 +00 +00 +00 +48 +c7 +c0 +05 +00 +00 +00 +48 +c7 +c0 +05 +00 +00 +00 +48 +b8 +05 +00 +00 +00 +00 +00 +00 +00 +48 +c7 +c0 +ff +ff +ff +7f +48 +c7 +c0 +ff +ff +ff +7f +48 +b8 +ff +ff +ff +7f +00 +00 +00 +00 +48 +b8 +00 +00 +00 +80 +00 +00 +00 +00 +48 +c7 +c0 +00 +00 +00 +80 +48 +b8 +00 +00 +00 +80 +00 +00 +00 +00 +48 +c7 +c0 +00 +00 +00 +80 +48 +c7 +c0 +00 +00 +00 +80 +48 +b8 +00 +00 +00 +80 +ff +ff +ff +ff +48 +b8 +00 +00 +00 +00 +01 +00 +00 +00 +48 +c7 +c0 +00 +00 +00 +00 +48 +b8 +00 +00 +00 +00 +01 +00 +00 +00 +88 +dc +44 +88 +c3 +44 +88 +ce +66 +45 +89 +da +45 +89 +e7 +4d +89 +f5 +ff +c3 +ff +c9 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64.asm new file mode 100644 index 0000000000..7029c0a276 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64.asm @@ -0,0 +1,5 @@ +[bits 64] +fxsave [0] +o64 fxsave [0] +sysret +o64 sysret diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64.hex new file mode 100644 index 0000000000..04c69b81ee --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64.hex @@ -0,0 +1,22 @@ +0f +ae +04 +25 +00 +00 +00 +00 +48 +0f +ae +04 +25 +00 +00 +00 +00 +0f +07 +48 +0f +07 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64loop.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64loop.asm new file mode 100644 index 0000000000..14f7951bbb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64loop.asm @@ -0,0 +1,3 @@ +[bits 64] +o64 loop next +next: diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64loop.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64loop.errwarn new file mode 100644 index 0000000000..55f8201b01 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64loop.errwarn @@ -0,0 +1 @@ +-:2: warning: ignoring REX prefix on jump diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64loop.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64loop.hex new file mode 100644 index 0000000000..55e2c21434 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/o64loop.hex @@ -0,0 +1,2 @@ +e2 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/opersize.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/opersize.asm new file mode 100644 index 0000000000..f520e3573a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/opersize.asm @@ -0,0 +1,17 @@ +[bits 32] +o32 mov ax, bx +o16 mov ax, bx +mov ax, bx + +o32 mov eax, ebx +o16 mov eax, ebx +mov eax, ebx + +[bits 16] +o32 mov ax, bx +o16 mov ax, bx +mov ax, bx + +o32 mov eax, ebx +o16 mov eax, ebx +mov eax, ebx diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/opersize.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/opersize.hex new file mode 100644 index 0000000000..f226c75617 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/opersize.hex @@ -0,0 +1,30 @@ +89 +d8 +66 +89 +d8 +66 +89 +d8 +89 +d8 +66 +89 +d8 +89 +d8 +66 +89 +d8 +89 +d8 +89 +d8 +66 +89 +d8 +89 +d8 +66 +89 +d8 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/opsize-err.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/opsize-err.asm new file mode 100644 index 0000000000..161a7f6fd9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/opsize-err.asm @@ -0,0 +1,3 @@ +mov ax,1 +mov ax,word 1 +mov ax,byte 1 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/opsize-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/opsize-err.errwarn new file mode 100644 index 0000000000..f515f51e3c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/opsize-err.errwarn @@ -0,0 +1 @@ +-:3: error: invalid size for operand 2 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/overflow.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/overflow.asm new file mode 100644 index 0000000000..075824c1b5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/overflow.asm @@ -0,0 +1,12 @@ +[bits 16] +mov ax, 'abcd' +mov ax, 0x1ffff +mov eax, 0x111111111 + +dd 0x123456789 +dd -1 +dw 0x12345 +dw -1 + +jmp 0x1234:0x56789ABC +jmp dword 0x1234:0x56789ABC diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/overflow.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/overflow.errwarn new file mode 100644 index 0000000000..a648c58688 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/overflow.errwarn @@ -0,0 +1,6 @@ +-:2: warning: value does not fit in 16 bit field +-:3: warning: value does not fit in 16 bit field +-:4: warning: value does not fit in 32 bit field +-:6: warning: value does not fit in 32 bit field +-:8: warning: value does not fit in 16 bit field +-:11: warning: value does not fit in 16 bit field diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/overflow.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/overflow.hex new file mode 100644 index 0000000000..327f0108a0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/overflow.hex @@ -0,0 +1,37 @@ +b8 +61 +62 +b8 +ff +ff +66 +b8 +11 +11 +11 +11 +89 +67 +45 +23 +ff +ff +ff +ff +45 +23 +ff +ff +ea +bc +9a +34 +12 +66 +ea +bc +9a +78 +56 +34 +12 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/padlock.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/padlock.asm new file mode 100644 index 0000000000..24fb75521f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/padlock.asm @@ -0,0 +1,16 @@ +;xstore-rng +xstorerng +xstore +;xcrypt-ecb +xcryptecb +;xcrypt-cbc +xcryptcbc +;xcrypt-ctr +xcryptctr +;xcrypt-cfb +xcryptcfb +;xcrypt-ofb +xcryptofb +montmul +xsha1 +xsha256 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/padlock.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/padlock.hex new file mode 100644 index 0000000000..081730eb19 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/padlock.hex @@ -0,0 +1,38 @@ +0f +a7 +c0 +0f +a7 +c0 +f3 +0f +a7 +c8 +f3 +0f +a7 +d0 +f3 +0f +a7 +d8 +f3 +0f +a7 +e0 +f3 +0f +a7 +e8 +f3 +0f +a6 +c0 +f3 +0f +a6 +c8 +f3 +0f +a6 +d0 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pinsrb.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pinsrb.asm new file mode 100644 index 0000000000..7ee059d7ae --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pinsrb.asm @@ -0,0 +1,6 @@ +[bits 16] +pinsrb xmm4, eax, 0x55 +[bits 32] +pinsrb xmm4, eax, 0x55 +[bits 64] +pinsrb xmm4, eax, 0x55 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pinsrb.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pinsrb.hex new file mode 100644 index 0000000000..27e71a9e21 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pinsrb.hex @@ -0,0 +1,18 @@ +66 +0f +3a +20 +e0 +55 +66 +0f +3a +20 +e0 +55 +66 +0f +3a +20 +e0 +55 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pshift.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pshift.asm new file mode 100644 index 0000000000..b864f42bc6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pshift.asm @@ -0,0 +1,11 @@ +psrlw mm0, 1 +psrld mm0, 1 +psrlq mm0, 1 +psraw mm1, 1 +psrad mm1, 1 + +psrlw xmm0, 1 +psrld xmm0, 1 +psrlq xmm0, 1 +psraw xmm1, 1 +psrad xmm1, 1 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pshift.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pshift.hex new file mode 100644 index 0000000000..943c9a50a6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pshift.hex @@ -0,0 +1,45 @@ +0f +71 +d0 +01 +0f +72 +d0 +01 +0f +73 +d0 +01 +0f +71 +e1 +01 +0f +72 +e1 +01 +66 +0f +71 +d0 +01 +66 +0f +72 +d0 +01 +66 +0f +73 +d0 +01 +66 +0f +71 +e1 +01 +66 +0f +72 +e1 +01 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/push64.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/push64.asm new file mode 100644 index 0000000000..bddcf4b0f3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/push64.asm @@ -0,0 +1,6 @@ +[bits 64] +push dword 50 +push dword -1 +push strict dword 50 +push strict dword -1 +push dword 1000000000000 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/push64.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/push64.errwarn new file mode 100644 index 0000000000..fa3a5fd6ed --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/push64.errwarn @@ -0,0 +1 @@ +-:6: warning: value does not fit in signed 32 bit field diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/push64.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/push64.hex new file mode 100644 index 0000000000..e6a2d6bf17 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/push64.hex @@ -0,0 +1,19 @@ +6a +32 +6a +ff +68 +32 +00 +00 +00 +68 +ff +ff +ff +ff +68 +00 +10 +a5 +d4 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushf-err.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushf-err.asm new file mode 100644 index 0000000000..13ea49777c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushf-err.asm @@ -0,0 +1,29 @@ +[bits 16] +pushf +pushfw +pushfd +pushfq +popf +popfw +popfd +popfq + +[bits 32] +pushf +pushfw +pushfd +pushfq +popf +popfw +popfd +popfq + +[bits 64] +pushf +pushfw +pushfd +pushfq +popf +popfw +popfd +popfq diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushf-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushf-err.errwarn new file mode 100644 index 0000000000..498610ba54 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushf-err.errwarn @@ -0,0 +1,10 @@ +-:5: warning: `pushfq' is an instruction in 64-bit mode +-:9: warning: `popfq' is an instruction in 64-bit mode +-:15: warning: `pushfq' is an instruction in 64-bit mode +-:15: error: redefinition of `pushfq' +-:5: error: `pushfq' previously defined here +-:19: warning: `popfq' is an instruction in 64-bit mode +-:19: error: redefinition of `popfq' +-:9: error: `popfq' previously defined here +-:24: error: `pushfd' invalid in 64-bit mode +-:28: error: `popfd' invalid in 64-bit mode diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushf.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushf.asm new file mode 100644 index 0000000000..35a504ef1e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushf.asm @@ -0,0 +1,29 @@ +[bits 16] +pushf +pushfw +pushfd +;pushfq +popf +popfw +popfd +;popfq + +[bits 32] +pushf +pushfw +pushfd +;pushfq +popf +popfw +popfd +;popfq + +[bits 64] +pushf +pushfw +;pushfd +pushfq +popf +popfw +;popfd +popfq diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushf.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushf.hex new file mode 100644 index 0000000000..c34b407d78 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushf.hex @@ -0,0 +1,24 @@ +9c +9c +66 +9c +9d +9d +66 +9d +9c +66 +9c +9c +9d +66 +9d +9d +9c +66 +9c +9c +9d +66 +9d +9d diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushnosize.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushnosize.asm new file mode 100644 index 0000000000..ada9be176d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushnosize.asm @@ -0,0 +1,47 @@ +[bits 16] +push 0 ; 6A 00 - equivalent to push byte 0 +push byte 0 ; 6A 00 +push word 0 ; 6A 00 - optimized +push dword 0 ; 66 6A 00 - optimized +push strict byte 0 ; 6A 00 +push strict word 0 ; 68 0000 +push strict dword 0 ; 66 68 00000000 +push 128 ; 68 8000 - doesn't fit in byte, equivalent to push word 128 +push byte 128 ; 6A 80 - warning (signed overflow) +push word 128 ; 68 8000 +push dword 128 ; 66 68 80000000 +push strict byte 128 ; 6A 80 - warning (signed overflow) +push strict word 128 ; 68 8000 +push strict dword 128 ; 66 68 80000000 + +[bits 32] +push 0 ; 6A 00 - equivalent to push byte 0 +push byte 0 ; 6A 00 +push word 0 ; 66 6A 00 - optimized +push dword 0 ; 6A 00 - optimized +push strict byte 0 ; 6A 00 +push strict word 0 ; 66 68 0000 +push strict dword 0 ; 68 00000000 +push 128 ; 68 80000000 - doesn't fit in byte -> push dword 128 +push byte 128 ; 6A 80 - warning (signed overflow) +push word 128 ; 66 6A 8000 +push dword 128 ; 6A 80000000 +push strict byte 128 ; 6A 80 - warning (signed overflow) +push strict word 128 ; 66 6A 8000 +push strict dword 128 ; 6A 80000000 + +[bits 64] +push 0 ; same as bits 32 output +push byte 0 ; 6A 00; 64 bits pushed onto stack +push word 0 ; 66 6A 00 - 66h prefix, optimized to byte +push dword 0 ; 6A 00 - optimized to byte; note 64 bits pushed onto stack +push strict byte 0 ; 6A 00; 64 bits pushed onto stack +push strict word 0 ; 66 68 0000 +push strict dword 0 ; 68 00000000; note 64 bits pushed onto stack +push 128 +push byte 128 ; warning +push word 128 +push dword 128 +push strict byte 128 ; warning +push strict word 128 +push strict dword 128 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushnosize.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushnosize.errwarn new file mode 100644 index 0000000000..8a405ecade --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushnosize.errwarn @@ -0,0 +1,6 @@ +-:10: warning: value does not fit in signed 8 bit field +-:13: warning: value does not fit in signed 8 bit field +-:26: warning: value does not fit in signed 8 bit field +-:29: warning: value does not fit in signed 8 bit field +-:42: warning: value does not fit in signed 8 bit field +-:45: warning: value does not fit in signed 8 bit field diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushnosize.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushnosize.hex new file mode 100644 index 0000000000..0896020274 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/pushnosize.hex @@ -0,0 +1,139 @@ +6a +00 +6a +00 +6a +00 +66 +6a +00 +6a +00 +68 +00 +00 +66 +68 +00 +00 +00 +00 +68 +80 +00 +6a +80 +68 +80 +00 +66 +68 +80 +00 +00 +00 +6a +80 +68 +80 +00 +66 +68 +80 +00 +00 +00 +6a +00 +6a +00 +66 +6a +00 +6a +00 +6a +00 +66 +68 +00 +00 +68 +00 +00 +00 +00 +68 +80 +00 +00 +00 +6a +80 +66 +68 +80 +00 +68 +80 +00 +00 +00 +6a +80 +66 +68 +80 +00 +68 +80 +00 +00 +00 +6a +00 +6a +00 +66 +6a +00 +6a +00 +6a +00 +66 +68 +00 +00 +68 +00 +00 +00 +00 +68 +80 +00 +00 +00 +6a +80 +66 +68 +80 +00 +68 +80 +00 +00 +00 +6a +80 +66 +68 +80 +00 +68 +80 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/rdrnd.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/rdrnd.asm new file mode 100644 index 0000000000..234451df3e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/rdrnd.asm @@ -0,0 +1,4 @@ +[bits 64] +rdrand cx +rdrand ecx +rdrand rcx diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/rdrnd.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/rdrnd.hex new file mode 100644 index 0000000000..be4bb8091d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/rdrnd.hex @@ -0,0 +1,11 @@ +66 +0f +c7 +f1 +0f +c7 +f1 +48 +0f +c7 +f1 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/rep.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/rep.asm new file mode 100644 index 0000000000..e3e12b6cc2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/rep.asm @@ -0,0 +1,5 @@ +repne lodsw +repnz lodsd +rep stosb +repe cmpsb +repz movsb diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/rep.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/rep.hex new file mode 100644 index 0000000000..9d95dcc6be --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/rep.hex @@ -0,0 +1,11 @@ +f2 +ad +66 +f2 +ad +f3 +aa +f3 +a6 +f3 +a4 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ret.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ret.asm new file mode 100644 index 0000000000..27317d4014 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ret.asm @@ -0,0 +1,29 @@ +[bits 16] +ret +ret 4 +ret word 2 +retn 6 +retn word 2 +retf +retf 8 +retf word 2 + +[bits 32] +ret +ret 4 +ret word 2 +retn 6 +retn word 2 +retf +retf 8 +retf word 2 + +[bits 64] +ret +ret 4 +ret word 2 +retn 6 +retn word 2 +retf +retf 8 +retf word 2 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ret.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ret.hex new file mode 100644 index 0000000000..431c192462 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ret.hex @@ -0,0 +1,63 @@ +c3 +c2 +04 +00 +c2 +02 +00 +c2 +06 +00 +c2 +02 +00 +cb +ca +08 +00 +ca +02 +00 +c3 +c2 +04 +00 +c2 +02 +00 +c2 +06 +00 +c2 +02 +00 +cb +ca +08 +00 +ca +02 +00 +c3 +c2 +04 +00 +c2 +02 +00 +c2 +06 +00 +c2 +02 +00 +48 +cb +48 +ca +08 +00 +48 +ca +02 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel1.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel1.asm new file mode 100644 index 0000000000..b1fdbecb91 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel1.asm @@ -0,0 +1,66 @@ +bits 64 +val: +default abs + +mov rax, val ; 32-bit imm +mov rax, dword val ; 32-bit imm +mov rax, qword val ; 64-bit imm + +mov rbx, val ; 32-bit imm +mov rbx, dword val ; 32-bit imm +mov rbx, qword val ; 64-bit imm + +mov rax, [val] ; 48 8b ... (32-bit disp) +mov rax, [dword val] ; 48 8b ... (32-bit disp) +mov rax, [qword val] ; 48 a1 ... (64-bit disp) +a32 mov rax, [val] ; 67 48 a1 ... (32-bit disp) +a32 mov rax, [dword val] ; 67 48 a1 ... (32-bit disp) +a32 mov rax, [qword val] ; 67 48 a1 ... (32-bit disp) + ; [this one is debatable on correctness, + ; I chose in yasm to make a32 override] +a64 mov rax, [val] ; 48 8b ... (32-bit disp) +a64 mov rax, [dword val] ; 48 8b ... (32-bit disp) +a64 mov rax, [qword val] ; 48 a1 ... (64-bit disp) + +mov rbx, [val] ; 48 8b ... (32-bit disp) +mov rbx, [dword val] ; 48 8b ... (32-bit disp) +;mov rbx, [qword val] ; illegal (can't have 64-bit disp) +a32 mov rbx, [val] ; 67 48 8b ... (32-bit disp) +a32 mov rbx, [dword val] ; 67 48 8b ... (32-bit disp) +;a32 mov rbx, [qword val] ; illegal (can't have 64-bit disp) +a64 mov rbx, [val] ; 48 8b ... (32-bit disp) +a64 mov rbx, [dword val] ; 48 8b ... (32-bit disp) +;a64 mov rbx, [qword val] ; illegal (can't have 64-bit disp) + +default rel + +mov rax, val ; 32-bit imm +mov rax, dword val ; 32-bit imm +mov rax, qword val ; 64-bit imm + +mov rbx, val ; 32-bit imm +mov rbx, dword val ; 32-bit imm +mov rbx, qword val ; 64-bit imm + +mov rax, [val] ; 48 8b ... (32-bit disp, RIP-rel) +mov rax, [dword val] ; 48 8b ... (32-bit disp, RIP-rel) +mov rax, [qword val] ; 48 a1 ... (64-bit disp, ABS) +a32 mov rax, [val] ; 67 48 8b ... (32-bit disp, RIP-rel) +a32 mov rax, [dword val] ; 67 48 8b ... (32-bit disp, RIP-rel) +a32 mov rax, [qword val] ; 67 48 a1 ... (32-bit disp, ABS) + ; [this one is debatable on correctness, + ; I chose in yasm to make a32 override] +a64 mov rax, [val] ; 48 8b ... (32-bit disp, RIP-rel) +a64 mov rax, [dword val] ; 48 8b ... (32-bit disp, RIP-rel) +a64 mov rax, [qword val] ; 48 a1 ... (64-bit disp, ABS) + +mov rbx, [val] ; 48 8b ... (32-bit disp, RIP-rel) +mov rbx, [dword val] ; 48 8b ... (32-bit disp, RIP-rel) +;mov rbx, [qword val] ; illegal (can't have 64-bit disp) +a32 mov rbx, [val] ; 67 48 8b ... (32-bit disp, RIP-rel) +a32 mov rbx, [dword val] ; 67 48 8b ... (32-bit disp, RIP-rel) +;a32 mov rbx, [qword val] ; illegal (can't have 64-bit disp) +a64 mov rbx, [val] ; 48 8b ... (32-bit disp, RIP-rel) +a64 mov rbx, [dword val] ; 48 8b ... (32-bit disp, RIP-rel) +;a64 mov rbx, [qword val] ; illegal (can't have 64-bit disp) + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel1.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel1.hex new file mode 100644 index 0000000000..78f28bff19 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel1.hex @@ -0,0 +1,334 @@ +48 +c7 +c0 +00 +00 +00 +00 +48 +c7 +c0 +00 +00 +00 +00 +48 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +48 +c7 +c3 +00 +00 +00 +00 +48 +c7 +c3 +00 +00 +00 +00 +48 +bb +00 +00 +00 +00 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +a1 +00 +00 +00 +00 +00 +00 +00 +00 +67 +48 +a1 +00 +00 +00 +00 +67 +48 +a1 +00 +00 +00 +00 +67 +48 +a1 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +a1 +00 +00 +00 +00 +00 +00 +00 +00 +48 +8b +1c +25 +00 +00 +00 +00 +48 +8b +1c +25 +00 +00 +00 +00 +67 +48 +8b +1c +25 +00 +00 +00 +00 +67 +48 +8b +1c +25 +00 +00 +00 +00 +48 +8b +1c +25 +00 +00 +00 +00 +48 +8b +1c +25 +00 +00 +00 +00 +48 +c7 +c0 +00 +00 +00 +00 +48 +c7 +c0 +00 +00 +00 +00 +48 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +48 +c7 +c3 +00 +00 +00 +00 +48 +c7 +c3 +00 +00 +00 +00 +48 +bb +00 +00 +00 +00 +00 +00 +00 +00 +48 +8b +05 +1e +ff +ff +ff +48 +8b +05 +17 +ff +ff +ff +48 +a1 +00 +00 +00 +00 +00 +00 +00 +00 +67 +48 +8b +05 +05 +ff +ff +ff +67 +48 +8b +05 +fd +fe +ff +ff +67 +48 +a1 +00 +00 +00 +00 +48 +8b +05 +ef +fe +ff +ff +48 +8b +05 +e8 +fe +ff +ff +48 +a1 +00 +00 +00 +00 +00 +00 +00 +00 +48 +8b +1d +d7 +fe +ff +ff +48 +8b +1d +d0 +fe +ff +ff +67 +48 +8b +1d +c8 +fe +ff +ff +67 +48 +8b +1d +c0 +fe +ff +ff +48 +8b +1d +b9 +fe +ff +ff +48 +8b +1d +b2 +fe +ff +ff diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel2.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel2.asm new file mode 100644 index 0000000000..7f3be69a1c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel2.asm @@ -0,0 +1,110 @@ + bits 64 + + default abs ; default abs, except for explicit rel + + mov rax,[foo] + mov rax,[qword 123456789abcdef0h] + mov rbx,[foo] + mov rax,[dword foo] + mov rbx,[dword foo] + mov rax,[qword foo] + mov rax,[rel foo] ; rel + mov rbx,[rel foo] ; rel + mov rax,[rel dword foo] ; rel + ;mov rax,[rel qword foo] ; illegal + mov rax,[abs foo] + mov rbx,[abs foo] + mov rax,[abs dword foo] + mov rax,[abs qword foo] + + mov rax,[es:foo] + mov rax,[qword es:123456789abcdef0h] + mov rbx,[es:foo] + mov rax,[dword es:foo] + mov rbx,[dword es:foo] + mov rax,[qword es:foo] + mov rax,[rel es:foo] ; rel + mov rbx,[rel es:foo] ; rel + mov rax,[rel dword es:foo] ; rel + ;mov rax,[rel qword es:foo] ; illegal + mov rax,[abs es:foo] + mov rbx,[abs es:foo] + mov rax,[abs dword es:foo] + mov rax,[abs qword es:foo] + + mov rax,[fs:foo] + mov rax,[qword fs:123456789abcdef0h] + mov rbx,[fs:foo] + mov rax,[dword fs:foo] + mov rbx,[dword fs:foo] + mov rax,[qword fs:foo] + mov rax,[rel fs:foo] ; rel + mov rbx,[rel fs:foo] ; rel + mov rax,[rel dword fs:foo] ; rel + ;mov rax,[rel qword fs:foo] ; illegal + mov rax,[abs fs:foo] + mov rbx,[abs fs:foo] + mov rax,[abs dword fs:foo] + mov rax,[abs qword fs:foo] + + mov rax,[rbx] + mov rax,[rel rbx] + mov rax,[abs rbx] + + default rel + + ; all of these are default rel, except for 64-bit displacements + mov rax,[foo] + mov rax,[qword 123456789abcdef0h] ; abs + mov rbx,[foo] + mov rax,[dword foo] + mov rbx,[dword foo] + mov rax,[qword foo] ; abs + mov rax,[rel foo] + mov rbx,[rel foo] + mov rax,[rel dword foo] + ;mov rax,[rel qword foo] ; illegal + mov rax,[abs foo] + mov rbx,[abs foo] + mov rax,[abs dword foo] + mov rax,[abs qword foo] + + ; all of these are default rel, except for 64-bit displacements + mov rax,[es:foo] + mov rax,[qword es:123456789abcdef0h] + mov rbx,[es:foo] + mov rax,[dword es:foo] + mov rbx,[dword es:foo] + mov rax,[qword es:foo] + mov rax,[rel es:foo] ; rel + mov rbx,[rel es:foo] ; rel + mov rax,[rel dword es:foo] ; rel + ;mov rax,[rel qword es:foo] ; illegal + mov rax,[abs es:foo] + mov rbx,[abs es:foo] + mov rax,[abs dword es:foo] + mov rax,[abs qword es:foo] + + ; all of these are abs due to fs:, except for explicit rel + mov rax,[fs:foo] + mov rax,[qword fs:123456789abcdef0h] + mov rbx,[fs:foo] + mov rax,[dword fs:foo] + mov rbx,[dword fs:foo] + mov rax,[qword fs:foo] + mov rax,[rel fs:foo] ; rel + mov rbx,[rel fs:foo] ; rel + mov rax,[rel dword fs:foo] ; rel + ;mov rax,[rel qword fs:foo] ; illegal + mov rax,[abs fs:foo] + mov rbx,[abs fs:foo] + mov rax,[abs dword fs:foo] + mov rax,[abs qword fs:foo] + + mov rax,[rbx] + mov rax,[rel rbx] + mov rax,[abs rbx] + + section .data +foo equ $ + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel2.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel2.errwarn new file mode 100644 index 0000000000..b219dc7ef4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel2.errwarn @@ -0,0 +1,26 @@ +-:20: warning: `es' segment register ignored in 64-bit mode +-:21: warning: `es' segment register ignored in 64-bit mode +-:22: warning: `es' segment register ignored in 64-bit mode +-:23: warning: `es' segment register ignored in 64-bit mode +-:24: warning: `es' segment register ignored in 64-bit mode +-:25: warning: `es' segment register ignored in 64-bit mode +-:26: warning: `es' segment register ignored in 64-bit mode +-:27: warning: `es' segment register ignored in 64-bit mode +-:28: warning: `es' segment register ignored in 64-bit mode +-:30: warning: `es' segment register ignored in 64-bit mode +-:31: warning: `es' segment register ignored in 64-bit mode +-:32: warning: `es' segment register ignored in 64-bit mode +-:33: warning: `es' segment register ignored in 64-bit mode +-:73: warning: `es' segment register ignored in 64-bit mode +-:74: warning: `es' segment register ignored in 64-bit mode +-:75: warning: `es' segment register ignored in 64-bit mode +-:76: warning: `es' segment register ignored in 64-bit mode +-:77: warning: `es' segment register ignored in 64-bit mode +-:78: warning: `es' segment register ignored in 64-bit mode +-:79: warning: `es' segment register ignored in 64-bit mode +-:80: warning: `es' segment register ignored in 64-bit mode +-:81: warning: `es' segment register ignored in 64-bit mode +-:83: warning: `es' segment register ignored in 64-bit mode +-:84: warning: `es' segment register ignored in 64-bit mode +-:85: warning: `es' segment register ignored in 64-bit mode +-:86: warning: `es' segment register ignored in 64-bit mode diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel2.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel2.hex new file mode 100644 index 0000000000..a7b6f1127d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/riprel2.hex @@ -0,0 +1,704 @@ +48 +8b +04 +25 +c0 +02 +00 +00 +48 +a1 +f0 +de +bc +9a +78 +56 +34 +12 +48 +8b +1c +25 +c0 +02 +00 +00 +48 +8b +04 +25 +c0 +02 +00 +00 +48 +8b +1c +25 +c0 +02 +00 +00 +48 +a1 +c0 +02 +00 +00 +00 +00 +00 +00 +48 +8b +05 +85 +02 +00 +00 +48 +8b +1d +7e +02 +00 +00 +48 +8b +05 +77 +02 +00 +00 +48 +8b +04 +25 +c0 +02 +00 +00 +48 +8b +1c +25 +c0 +02 +00 +00 +48 +8b +04 +25 +c0 +02 +00 +00 +48 +a1 +c0 +02 +00 +00 +00 +00 +00 +00 +26 +48 +8b +04 +25 +c0 +02 +00 +00 +26 +48 +a1 +f0 +de +bc +9a +78 +56 +34 +12 +26 +48 +8b +1c +25 +c0 +02 +00 +00 +26 +48 +8b +04 +25 +c0 +02 +00 +00 +26 +48 +8b +1c +25 +c0 +02 +00 +00 +26 +48 +a1 +c0 +02 +00 +00 +00 +00 +00 +00 +26 +48 +8b +05 +13 +02 +00 +00 +26 +48 +8b +1d +0b +02 +00 +00 +26 +48 +8b +05 +03 +02 +00 +00 +26 +48 +8b +04 +25 +c0 +02 +00 +00 +26 +48 +8b +1c +25 +c0 +02 +00 +00 +26 +48 +8b +04 +25 +c0 +02 +00 +00 +26 +48 +a1 +c0 +02 +00 +00 +00 +00 +00 +00 +64 +48 +8b +04 +25 +c0 +02 +00 +00 +64 +48 +a1 +f0 +de +bc +9a +78 +56 +34 +12 +64 +48 +8b +1c +25 +c0 +02 +00 +00 +64 +48 +8b +04 +25 +c0 +02 +00 +00 +64 +48 +8b +1c +25 +c0 +02 +00 +00 +64 +48 +a1 +c0 +02 +00 +00 +00 +00 +00 +00 +64 +48 +8b +05 +9b +01 +00 +00 +64 +48 +8b +1d +93 +01 +00 +00 +64 +48 +8b +05 +8b +01 +00 +00 +64 +48 +8b +04 +25 +c0 +02 +00 +00 +64 +48 +8b +1c +25 +c0 +02 +00 +00 +64 +48 +8b +04 +25 +c0 +02 +00 +00 +64 +48 +a1 +c0 +02 +00 +00 +00 +00 +00 +00 +48 +8b +03 +48 +8b +03 +48 +8b +03 +48 +8b +05 +55 +01 +00 +00 +48 +a1 +f0 +de +bc +9a +78 +56 +34 +12 +48 +8b +1d +44 +01 +00 +00 +48 +8b +05 +3d +01 +00 +00 +48 +8b +1d +36 +01 +00 +00 +48 +a1 +c0 +02 +00 +00 +00 +00 +00 +00 +48 +8b +05 +25 +01 +00 +00 +48 +8b +1d +1e +01 +00 +00 +48 +8b +05 +17 +01 +00 +00 +48 +8b +04 +25 +c0 +02 +00 +00 +48 +8b +1c +25 +c0 +02 +00 +00 +48 +8b +04 +25 +c0 +02 +00 +00 +48 +a1 +c0 +02 +00 +00 +00 +00 +00 +00 +26 +48 +8b +05 +ed +00 +00 +00 +26 +48 +a1 +f0 +de +bc +9a +78 +56 +34 +12 +26 +48 +8b +1d +da +00 +00 +00 +26 +48 +8b +05 +d2 +00 +00 +00 +26 +48 +8b +1d +ca +00 +00 +00 +26 +48 +a1 +c0 +02 +00 +00 +00 +00 +00 +00 +26 +48 +8b +05 +b7 +00 +00 +00 +26 +48 +8b +1d +af +00 +00 +00 +26 +48 +8b +05 +a7 +00 +00 +00 +26 +48 +8b +04 +25 +c0 +02 +00 +00 +26 +48 +8b +1c +25 +c0 +02 +00 +00 +26 +48 +8b +04 +25 +c0 +02 +00 +00 +26 +48 +a1 +c0 +02 +00 +00 +00 +00 +00 +00 +64 +48 +8b +04 +25 +c0 +02 +00 +00 +64 +48 +a1 +f0 +de +bc +9a +78 +56 +34 +12 +64 +48 +8b +1c +25 +c0 +02 +00 +00 +64 +48 +8b +04 +25 +c0 +02 +00 +00 +64 +48 +8b +1c +25 +c0 +02 +00 +00 +64 +48 +a1 +c0 +02 +00 +00 +00 +00 +00 +00 +64 +48 +8b +05 +3f +00 +00 +00 +64 +48 +8b +1d +37 +00 +00 +00 +64 +48 +8b +05 +2f +00 +00 +00 +64 +48 +8b +04 +25 +c0 +02 +00 +00 +64 +48 +8b +1c +25 +c0 +02 +00 +00 +64 +48 +8b +04 +25 +c0 +02 +00 +00 +64 +48 +a1 +c0 +02 +00 +00 +00 +00 +00 +00 +48 +8b +03 +48 +8b +03 +48 +8b +03 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ripseg.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ripseg.asm new file mode 100644 index 0000000000..1779a1c9ef --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ripseg.asm @@ -0,0 +1,35 @@ +bits 64 +foo: + +default abs +mov rbx, [foo] +mov rbx, [es:foo] +mov rbx, [fs:foo] +mov rbx, [gs:foo] +mov rbx, [rel es:foo] +mov rbx, [rel fs:foo] +mov rbx, [rel gs:foo] +mov rbx, [abs es:foo] +mov rbx, [abs fs:foo] +mov rbx, [abs gs:foo] +;mov rbx, [es:rel foo] +;mov rbx, [fs:rel foo] +;mov rbx, [es:abs foo] +;mov rbx, [fs:abs foo] + +default rel +mov rbx, [foo] +mov rbx, [es:foo] +mov rbx, [fs:foo] +mov rbx, [gs:foo] +mov rbx, [rel es:foo] +mov rbx, [rel fs:foo] +mov rbx, [rel gs:foo] +mov rbx, [abs es:foo] +mov rbx, [abs fs:foo] +mov rbx, [abs gs:foo] +;mov rbx, [es:rel foo] +;mov rbx, [fs:rel foo] +;mov rbx, [es:abs foo] +;mov rbx, [fs:abs foo] + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ripseg.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ripseg.errwarn new file mode 100644 index 0000000000..19782ddd9e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ripseg.errwarn @@ -0,0 +1,6 @@ +-:6: warning: `es' segment register ignored in 64-bit mode +-:9: warning: `es' segment register ignored in 64-bit mode +-:12: warning: `es' segment register ignored in 64-bit mode +-:22: warning: `es' segment register ignored in 64-bit mode +-:25: warning: `es' segment register ignored in 64-bit mode +-:28: warning: `es' segment register ignored in 64-bit mode diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ripseg.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ripseg.hex new file mode 100644 index 0000000000..5303fe944f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ripseg.hex @@ -0,0 +1,170 @@ +48 +8b +1c +25 +00 +00 +00 +00 +26 +48 +8b +1c +25 +00 +00 +00 +00 +64 +48 +8b +1c +25 +00 +00 +00 +00 +65 +48 +8b +1c +25 +00 +00 +00 +00 +26 +48 +8b +1d +d5 +ff +ff +ff +64 +48 +8b +1d +cd +ff +ff +ff +65 +48 +8b +1d +c5 +ff +ff +ff +26 +48 +8b +1c +25 +00 +00 +00 +00 +64 +48 +8b +1c +25 +00 +00 +00 +00 +65 +48 +8b +1c +25 +00 +00 +00 +00 +48 +8b +1d +a3 +ff +ff +ff +26 +48 +8b +1d +9b +ff +ff +ff +64 +48 +8b +1c +25 +00 +00 +00 +00 +65 +48 +8b +1c +25 +00 +00 +00 +00 +26 +48 +8b +1d +81 +ff +ff +ff +64 +48 +8b +1d +79 +ff +ff +ff +65 +48 +8b +1d +71 +ff +ff +ff +26 +48 +8b +1c +25 +00 +00 +00 +00 +64 +48 +8b +1c +25 +00 +00 +00 +00 +65 +48 +8b +1c +25 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segmov.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segmov.asm new file mode 100644 index 0000000000..4a6eb0a195 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segmov.asm @@ -0,0 +1,9 @@ +mov [0], ds +mov word [0], ds +mov ax, ds +mov eax, ds +mov ds, ax +mov ds, eax +mov ds, [0] +mov ds, word [0] +mov word ds, [0] diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segmov.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segmov.hex new file mode 100644 index 0000000000..8f5d969183 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segmov.hex @@ -0,0 +1,29 @@ +8c +1e +00 +00 +8c +1e +00 +00 +8c +d8 +66 +8c +d8 +8e +d8 +8e +d8 +8e +1e +00 +00 +8e +1e +00 +00 +8e +1e +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segoff-err.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segoff-err.asm new file mode 100644 index 0000000000..ac76927d5f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segoff-err.asm @@ -0,0 +1,6 @@ +; all of these should be illegal + +jmp far[1:2] +mov ax,[1:2] +push dword [1:2] +mov ax,1:2 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segoff-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segoff-err.errwarn new file mode 100644 index 0000000000..98a96c7b06 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segoff-err.errwarn @@ -0,0 +1,4 @@ +-:3: error: invalid segment in effective address +-:4: error: invalid segment in effective address +-:5: error: invalid segment in effective address +-:6: error: immediate does not support segment diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segoff.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segoff.asm new file mode 100644 index 0000000000..7a2091fe1a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segoff.asm @@ -0,0 +1,7 @@ +; all of these should be legal and should just result in the offset portion + +foo equ 1:2 +jmp far[foo] +mov ax,[foo] +push dword [foo] +mov ax,foo diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segoff.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segoff.hex new file mode 100644 index 0000000000..7520242acb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/segoff.hex @@ -0,0 +1,15 @@ +ff +2e +02 +00 +a1 +02 +00 +66 +ff +36 +02 +00 +b8 +02 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/shift.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/shift.asm new file mode 100644 index 0000000000..eb689a379c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/shift.asm @@ -0,0 +1,6 @@ +blah equ 1 + +shl al, 1 +shl al, 2-1 +shl al, blah +shl al, 2-blah diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/shift.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/shift.hex new file mode 100644 index 0000000000..ca17b1d757 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/shift.hex @@ -0,0 +1,8 @@ +d0 +e0 +d0 +e0 +d0 +e0 +d0 +e0 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/shift64.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/shift64.asm new file mode 100644 index 0000000000..c1ce6b1c3c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/shift64.asm @@ -0,0 +1,5 @@ +[bits 64] +shl rax, 5 +shl rax, 32 +shr rax, 5 +shr rax, 32 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/shift64.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/shift64.hex new file mode 100644 index 0000000000..ad28eb246e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/shift64.hex @@ -0,0 +1,16 @@ +48 +c1 +e0 +05 +48 +c1 +e0 +20 +48 +c1 +e8 +05 +48 +c1 +e8 +20 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd-1.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd-1.asm new file mode 100644 index 0000000000..0b752d93eb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd-1.asm @@ -0,0 +1,11 @@ +[bits 32] +movntps [0], xmm4 +movntps dqword [0], xmm5 +movntq [8], mm6 +movntq qword [8], mm7 +movss xmm0, [0] +movss xmm1, dword [8] +movss [0], xmm2 +movss dword [8], xmm3 +pcmpeqb xmm3, xmm4 +pcmpgtw mm0, mm2 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd-1.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd-1.hex new file mode 100644 index 0000000000..2f564c7b63 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd-1.hex @@ -0,0 +1,67 @@ +0f +2b +25 +00 +00 +00 +00 +0f +2b +2d +00 +00 +00 +00 +0f +e7 +35 +08 +00 +00 +00 +0f +e7 +3d +08 +00 +00 +00 +f3 +0f +10 +05 +00 +00 +00 +00 +f3 +0f +10 +0d +08 +00 +00 +00 +f3 +0f +11 +15 +00 +00 +00 +00 +f3 +0f +11 +1d +08 +00 +00 +00 +66 +0f +74 +dc +0f +65 +c2 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd-2.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd-2.asm new file mode 100644 index 0000000000..a3a351aa59 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd-2.asm @@ -0,0 +1,104 @@ +[bits 32] +pextrw ebx, mm5, 0 ; 0F C5 DD 00 +pextrw ecx, xmm0, 1 ; 66 0F C5 C8 01 + +pinsrw mm3, esi, 5 ; 0F C4 DE 05 +pinsrw mm3, [0], 4 ; 0F C4 1D 00 00 00 00 04 + +pinsrw xmm1, eax, 3 ; 66 0F C4 C8 03 +pinsrw xmm1, [0], 2 ; 66 0F C4 0D 00 00 00 00 02 + +movmskpd edx, xmm7 ; 66 0F 50 D7 +movmskps eax, xmm1 ; 0F 50 C1 + +pmovmskb edi, mm0 ; 0F D7 F8 +pmovmskb esi, xmm1 ; 66 0F D7 F1 + +cvtdq2pd xmm5, xmm4 ; F3 0F E6 EC +cvtdq2pd xmm3, [0] ; F3 0F E6 1D 00 00 00 00 +cvtdq2pd xmm2, qword [0] ; F3 0F E6 15 00 00 00 00 + +cvtdq2ps xmm1, xmm2 ; 0F 5B CA +cvtdq2ps xmm4, [0] ; 0F 5B 25 00 00 00 00 +cvtdq2ps xmm5, dqword [0] ; 0F 5B 2D 00 00 00 00 + +cvtpd2dq xmm0, xmm1 ; F2 0F E6 C1 +cvtpd2dq xmm2, [0] ; F2 0F E6 15 00 00 00 00 +cvtpd2dq xmm3, dqword [0] ; F2 0F E6 1D 00 00 00 00 + +cvtpd2pi mm4, xmm5 ; 66 0F 2D E5 +cvtpd2pi mm6, [0] ; 66 0F 2D 35 00 00 00 00 +cvtpd2pi mm7, dqword [0] ; 66 0F 2D 3D 00 00 00 00 + +cvtpd2ps xmm1, xmm2 ; 66 0F 5A CA +cvtpd2ps xmm3, [0] ; 66 0F 5A 1D 00 00 00 00 +cvtpd2ps xmm4, dqword [0] ; 66 0F 5A 25 00 00 00 00 + +cvtpi2pd xmm5, mm6 ; 66 0F 2A EE +cvtpi2pd xmm7, [0] ; 66 0F 2A 3D 00 00 00 00 +cvtpi2pd xmm0, qword [0] ; 66 0F 2A 05 00 00 00 00 + +cvtpi2ps xmm2, mm3 ; 0F 2A D3 +cvtpi2ps xmm4, [0] ; 0F 2A 25 00 00 00 00 +cvtpi2ps xmm5, qword [0] ; 0F 2A 2D 00 00 00 00 + +cvtps2dq xmm6, xmm7 ; 66 0F 5B F7 +cvtps2dq xmm0, [0] ; 66 0F 5B 05 00 00 00 00 +cvtps2dq xmm1, dqword [0] ; 66 0F 5B 0D 00 00 00 00 + +cvtps2pd xmm2, xmm3 ; 0F 5A D3 +cvtps2pd xmm4, [0] ; 0F 5A 25 00 00 00 00 +cvtps2pd xmm5, qword [0] ; 0F 5A 2D 00 00 00 00 + +cvtps2pi mm6, xmm7 ; 0F 2D F7 +cvtps2pi mm0, [0] ; 0F 2D 05 00 00 00 00 +cvtps2pi mm1, qword [0] ; 0F 2D 0D 00 00 00 00 + +cvtsd2si edx, xmm0 ; F2 0F 2D D0 +cvtsd2si eax, [0] ; F2 0F 2D 05 00 00 00 00 +cvtsd2si ebx, qword [0] ; F2 0F 2D 1D 00 00 00 00 + +cvtsd2ss xmm1, xmm2 ; F2 0F 5A CA +cvtsd2ss xmm3, [0] ; F2 0F 5A 1D 00 00 00 00 +cvtsd2ss xmm4, qword [0] ; F2 0F 5A 25 00 00 00 00 + +cvtsi2sd xmm5, eax ; F2 0F 2A E8 +cvtsi2sd xmm6, [0] ; F2 0F 2A 35 00 00 00 00 +cvtsi2sd xmm7, dword [0] ; F2 0F 2A 3D 00 00 00 00 + +cvtsi2ss xmm0, edx ; F3 0F 2A C2 +cvtsi2ss xmm1, [0] ; F3 0F 2A 0D 00 00 00 00 +cvtsi2ss xmm2, dword [0] ; F3 0F 2A 15 00 00 00 00 + +cvtss2sd xmm3, xmm4 ; F3 0F 5A DC +cvtss2sd xmm5, [0] ; F3 0F 5A 2D 00 00 00 00 +cvtss2sd xmm6, dword [0] ; F3 0F 5A 35 00 00 00 00 + +cvtss2si ebx, xmm7 ; F3 0F 2D DF +cvtss2si ecx, [0] ; F3 0F 2D 0D 00 00 00 00 +cvtss2si eax, dword [0] ; F3 0F 2D 05 00 00 00 00 + +cvttpd2pi mm0, xmm1 ; 66 0F 2C C1 +cvttpd2pi mm2, [0] ; 66 0F 2C 15 00 00 00 00 +cvttpd2pi mm3, dqword [0] ; 66 0F 2C 1D 00 00 00 00 + +cvttpd2dq xmm4, xmm5 ; 66 0F E6 E5 +cvttpd2dq xmm6, [0] ; 66 0F E6 35 00 00 00 00 +cvttpd2dq xmm7, dqword [0] ; 66 0F E6 3D 00 00 00 00 + +cvttps2dq xmm0, xmm1 ; F3 0F 5B C1 +cvttps2dq xmm2, [0] ; F3 0F 5B 15 00 00 00 00 +cvttps2dq xmm3, dqword [0] ; F3 0F 5B 1D 00 00 00 00 + +cvttps2pi mm4, xmm5 ; 0F 2C E5 +cvttps2pi mm6, [0] ; 0F 2C 35 00 00 00 00 +cvttps2pi mm7, qword [0] ; 0F 2C 3D 00 00 00 00 + +cvttsd2si ecx, xmm0 ; F2 0F 2C C8 +cvttsd2si ebx, [0] ; F2 0F 2C 1D 00 00 00 00 +cvttsd2si edi, qword [0] ; F2 0F 2C 3D 00 00 00 00 + +cvttss2si esi, xmm3 ; F3 0F 2C F3 +cvttss2si ebp, [0] ; F3 0F 2C 2D 00 00 00 00 +cvttss2si eax, dword [0] ; F3 0F 2C 05 00 00 00 00 + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd-2.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd-2.hex new file mode 100644 index 0000000000..a34ddc10cf --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd-2.hex @@ -0,0 +1,474 @@ +0f +c5 +dd +00 +66 +0f +c5 +c8 +01 +0f +c4 +de +05 +0f +c4 +1d +00 +00 +00 +00 +04 +66 +0f +c4 +c8 +03 +66 +0f +c4 +0d +00 +00 +00 +00 +02 +66 +0f +50 +d7 +0f +50 +c1 +0f +d7 +f8 +66 +0f +d7 +f1 +f3 +0f +e6 +ec +f3 +0f +e6 +1d +00 +00 +00 +00 +f3 +0f +e6 +15 +00 +00 +00 +00 +0f +5b +ca +0f +5b +25 +00 +00 +00 +00 +0f +5b +2d +00 +00 +00 +00 +f2 +0f +e6 +c1 +f2 +0f +e6 +15 +00 +00 +00 +00 +f2 +0f +e6 +1d +00 +00 +00 +00 +66 +0f +2d +e5 +66 +0f +2d +35 +00 +00 +00 +00 +66 +0f +2d +3d +00 +00 +00 +00 +66 +0f +5a +ca +66 +0f +5a +1d +00 +00 +00 +00 +66 +0f +5a +25 +00 +00 +00 +00 +66 +0f +2a +ee +66 +0f +2a +3d +00 +00 +00 +00 +66 +0f +2a +05 +00 +00 +00 +00 +0f +2a +d3 +0f +2a +25 +00 +00 +00 +00 +0f +2a +2d +00 +00 +00 +00 +66 +0f +5b +f7 +66 +0f +5b +05 +00 +00 +00 +00 +66 +0f +5b +0d +00 +00 +00 +00 +0f +5a +d3 +0f +5a +25 +00 +00 +00 +00 +0f +5a +2d +00 +00 +00 +00 +0f +2d +f7 +0f +2d +05 +00 +00 +00 +00 +0f +2d +0d +00 +00 +00 +00 +f2 +0f +2d +d0 +f2 +0f +2d +05 +00 +00 +00 +00 +f2 +0f +2d +1d +00 +00 +00 +00 +f2 +0f +5a +ca +f2 +0f +5a +1d +00 +00 +00 +00 +f2 +0f +5a +25 +00 +00 +00 +00 +f2 +0f +2a +e8 +f2 +0f +2a +35 +00 +00 +00 +00 +f2 +0f +2a +3d +00 +00 +00 +00 +f3 +0f +2a +c2 +f3 +0f +2a +0d +00 +00 +00 +00 +f3 +0f +2a +15 +00 +00 +00 +00 +f3 +0f +5a +dc +f3 +0f +5a +2d +00 +00 +00 +00 +f3 +0f +5a +35 +00 +00 +00 +00 +f3 +0f +2d +df +f3 +0f +2d +0d +00 +00 +00 +00 +f3 +0f +2d +05 +00 +00 +00 +00 +66 +0f +2c +c1 +66 +0f +2c +15 +00 +00 +00 +00 +66 +0f +2c +1d +00 +00 +00 +00 +66 +0f +e6 +e5 +66 +0f +e6 +35 +00 +00 +00 +00 +66 +0f +e6 +3d +00 +00 +00 +00 +f3 +0f +5b +c1 +f3 +0f +5b +15 +00 +00 +00 +00 +f3 +0f +5b +1d +00 +00 +00 +00 +0f +2c +e5 +0f +2c +35 +00 +00 +00 +00 +0f +2c +3d +00 +00 +00 +00 +f2 +0f +2c +c8 +f2 +0f +2c +1d +00 +00 +00 +00 +f2 +0f +2c +3d +00 +00 +00 +00 +f3 +0f +2c +f3 +f3 +0f +2c +2d +00 +00 +00 +00 +f3 +0f +2c +05 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd64-1.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd64-1.asm new file mode 100644 index 0000000000..01a01ada39 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd64-1.asm @@ -0,0 +1,2 @@ +[bits 64] +movdqa xmm10, xmm1 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd64-1.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd64-1.hex new file mode 100644 index 0000000000..3526cb2cbd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd64-1.hex @@ -0,0 +1,5 @@ +66 +44 +0f +6f +d1 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd64-2.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd64-2.asm new file mode 100644 index 0000000000..45a698a2a8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd64-2.asm @@ -0,0 +1,11 @@ +[bits 64] + +cvtsi2sd xmm0,eax +cvtsi2sd xmm0,rax +cvtsd2si rax,xmm0 +cvtsi2ss xmm0,rax +cvtsd2si rax,xmm0 +cvtss2si rax,xmm0 +cvttsd2si rax,xmm0 +cvttss2si rax,xmm0 + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd64-2.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd64-2.hex new file mode 100644 index 0000000000..93d40eec73 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/simd64-2.hex @@ -0,0 +1,39 @@ +f2 +0f +2a +c0 +f2 +48 +0f +2a +c0 +f2 +48 +0f +2d +c0 +f3 +48 +0f +2a +c0 +f2 +48 +0f +2d +c0 +f3 +48 +0f +2d +c0 +f2 +48 +0f +2c +c0 +f3 +48 +0f +2c +c0 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/smx.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/smx.asm new file mode 100644 index 0000000000..e5ca5b5ac2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/smx.asm @@ -0,0 +1,3 @@ +[bits 32] +getsec + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/smx.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/smx.hex new file mode 100644 index 0000000000..7e6dae1fe8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/smx.hex @@ -0,0 +1,2 @@ +0f +37 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse-prefix.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse-prefix.asm new file mode 100644 index 0000000000..3c19960ec5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse-prefix.asm @@ -0,0 +1,39 @@ +[bits 32] +movsw +es movsw +rep movsw +rep fs movsw +fs rep movsw + +movsd +es movsd +rep movsd +rep fs movsd +fs rep movsd + +cmpss xmm0, [eax], 0 +cmpss xmm0, [es:eax], 0 + +cmpsd +fs cmpsd +rep fs cmpsd +fs rep cmpsd + +cmpsd xmm0, [eax], 0 +cmpsd xmm0, [es:eax], 0 + +[bits 64] +movsw +rep movsw + +movsd +rep movsd + +cmpss xmm0, [r8], 0 + +cmpsd +rep cmpsd + +cmpsd xmm0, [r8], 0 + + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse-prefix.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse-prefix.hex new file mode 100644 index 0000000000..968c69f084 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse-prefix.hex @@ -0,0 +1,81 @@ +66 +a5 +66 +26 +a5 +66 +f3 +a5 +66 +f3 +64 +a5 +66 +f3 +64 +a5 +a5 +26 +a5 +f3 +a5 +f3 +64 +a5 +f3 +64 +a5 +f3 +0f +c2 +00 +00 +26 +f3 +0f +c2 +00 +00 +a7 +64 +a7 +f3 +64 +a7 +f3 +64 +a7 +f2 +0f +c2 +00 +00 +26 +f2 +0f +c2 +00 +00 +66 +a5 +66 +f3 +a5 +a5 +f3 +a5 +f3 +41 +0f +c2 +00 +00 +a7 +f3 +a7 +f2 +41 +0f +c2 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse3.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse3.asm new file mode 100644 index 0000000000..bf53ab0009 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse3.asm @@ -0,0 +1,25 @@ +[bits 32] +addsubpd xmm5, xmm7 +addsubpd xmm0, [eax] +addsubps xmm1, xmm5 +addsubps xmm3, dqword [edx] +fisttp word [0] +fisttp dword [4] +fisttp qword [8] +haddpd xmm2, xmm4 +haddpd xmm7, [ecx+4] +haddps xmm6, xmm1 +haddps xmm0, dqword [0] +hsubpd xmm5, xmm3 +hsubpd xmm1, [ebp] +hsubps xmm4, xmm1 +hsubps xmm2, [esp] +lddqu xmm3, [ecx+edx*4+8] +monitor +movddup xmm7, xmm6 +movddup xmm1, qword [4] +movshdup xmm3, xmm4 +movshdup xmm2, [0] +movsldup xmm0, xmm7 +movsldup xmm5, dqword [eax+ebx] +mwait diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse3.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse3.hex new file mode 100644 index 0000000000..86014e61e7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse3.hex @@ -0,0 +1,118 @@ +66 +0f +d0 +ef +66 +0f +d0 +00 +f2 +0f +d0 +cd +f2 +0f +d0 +1a +df +0d +00 +00 +00 +00 +db +0d +04 +00 +00 +00 +dd +0d +08 +00 +00 +00 +66 +0f +7c +d4 +66 +0f +7c +79 +04 +f2 +0f +7c +f1 +f2 +0f +7c +05 +00 +00 +00 +00 +66 +0f +7d +eb +66 +0f +7d +4d +00 +f2 +0f +7d +e1 +f2 +0f +7d +14 +24 +f2 +0f +f0 +5c +91 +08 +0f +01 +c8 +f2 +0f +12 +fe +f2 +0f +12 +0d +04 +00 +00 +00 +f3 +0f +16 +dc +f3 +0f +16 +15 +00 +00 +00 +00 +f3 +0f +12 +c7 +f3 +0f +12 +2c +18 +0f +01 +c9 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse4-err.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse4-err.asm new file mode 100644 index 0000000000..1375834e48 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse4-err.asm @@ -0,0 +1,4 @@ +[bits 64] +crc32 r8d, bh ; error +crc32 rax, bh ; error + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse4-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse4-err.errwarn new file mode 100644 index 0000000000..8a78539210 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse4-err.errwarn @@ -0,0 +1,2 @@ +-:2: error: cannot use A/B/C/DH with instruction needing REX +-:3: error: cannot use A/B/C/DH with instruction needing REX diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse4.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse4.asm new file mode 100644 index 0000000000..9c76ab1690 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse4.asm @@ -0,0 +1,226 @@ +[bits 64] +blendpd xmm1, xmm2, 5 +blendpd xmm1, [0], 5 + +blendps xmm1, xmm2, 5 +blendps xmm1, [0], 5 + +blendvpd xmm1, xmm2 +blendvpd xmm1, xmm2, xmm0 +blendvpd xmm1, [0] +blendvpd xmm1, [0], xmm0 + +blendvps xmm1, xmm2 +blendvps xmm1, xmm2, xmm0 +blendvps xmm1, [0] +blendvps xmm1, [0], xmm0 + +crc32 eax, bl +crc32 eax, bh +crc32 eax, r9b +crc32 eax, byte [0] +crc32 eax, bx +crc32 eax, word [0] +crc32 eax, ebx +crc32 eax, dword [0] + +crc32 r8d, bl +;crc32 r8d, bh ; error +crc32 r8d, r9b +crc32 r8d, byte [0] +crc32 r8d, bx +crc32 r8d, word [0] +crc32 r8d, ebx +crc32 r8d, dword [0] + +crc32 rax, bl +;crc32 rax, bh ; error +crc32 rax, r9b +crc32 rax, byte [0] +crc32 rax, rbx +crc32 rax, qword [0] + +dppd xmm1, xmm2, 5 +dppd xmm1, [0], 5 + +dpps xmm1, xmm2, 5 +dpps xmm1, [0], 5 + +extractps eax, xmm1, 5 +extractps [0], xmm1, 5 +extractps dword [0], xmm1, 5 +extractps r8d, xmm1, 5 +extractps rax, xmm1, 5 + +insertps xmm1, xmm2, 5 +insertps xmm1, [0], 5 +insertps xmm1, dword [0], 5 + +movntdqa xmm1, [0] +movntdqa xmm1, dqword [0] + +mpsadbw xmm1, xmm2, 5 +mpsadbw xmm1, [0], 5 + +packusdw xmm1, xmm2 +packusdw xmm1, [0] + +pblendvb xmm1, xmm2, xmm0 +pblendvb xmm1, [0], xmm0 +pblendvb xmm1, xmm2 +pblendvb xmm1, [0] + +pblendw xmm1, xmm2, 5 +pblendw xmm1, [0], 5 + +pcmpeqq xmm1, xmm2 +pcmpeqq xmm1, [0] + +pcmpestri xmm1, xmm2, 5 +pcmpestri xmm1, [0], 5 + +pcmpestrm xmm1, xmm2, 5 +pcmpestrm xmm1, [0], 5 + +pcmpistri xmm1, xmm2, 5 +pcmpistri xmm1, [0], 5 + +pcmpistrm xmm1, xmm2, 5 +pcmpistrm xmm1, [0], 5 + +pcmpgtq xmm1, xmm2 +pcmpgtq xmm1, [0] + +pextrb eax, xmm1, 5 +pextrb rax, xmm1, 5 +pextrb [0], xmm1, 5 +pextrb byte [0], xmm1, 5 + +pextrd eax, xmm1, 5 +pextrd [0], xmm1, 5 +pextrd dword [0], xmm1, 5 +pextrq rax, xmm1, 5 +pextrq qword [0], xmm1, 5 + +; To get the SSE4 versions we need to disable the SSE2 versions +cpu nosse2 +pextrw eax, xmm1, 5 +pextrw [0], xmm1, 5 +pextrw word [0], xmm1, 5 +pextrw rax, xmm1, 5 + +phminposuw xmm1, xmm2 +phminposuw xmm1, [0] + +pinsrb xmm1, eax, 5 +pinsrb xmm1, [0], 5 +pinsrb xmm1, byte [0], 5 + +pinsrd xmm1, eax, 5 +pinsrd xmm1, [0], 5 +pinsrd xmm1, dword [0], 5 + +pinsrq xmm1, rax, 5 +pinsrq xmm1, [0], 5 +pinsrq xmm1, qword [0], 5 + +pmaxsb xmm1, xmm2 +pmaxsb xmm1, [0] + +pmaxsd xmm1, xmm2 +pmaxsd xmm1, [0] + +pmaxud xmm1, xmm2 +pmaxud xmm1, [0] + +pmaxuw xmm1, xmm2 +pmaxuw xmm1, [0] + +pminsb xmm1, xmm2 +pminsb xmm1, [0] + +pminsd xmm1, xmm2 +pminsd xmm1, [0] + +pminud xmm1, xmm2 +pminud xmm1, [0] + +pminuw xmm1, xmm2 +pminuw xmm1, [0] + +pmovsxbw xmm1, xmm2 +pmovsxbw xmm1, [0] +pmovsxbw xmm1, qword [0] + +pmovsxbd xmm1, xmm2 +pmovsxbd xmm1, [0] +pmovsxbd xmm1, dword [0] + +pmovsxbq xmm1, xmm2 +pmovsxbq xmm1, [0] +pmovsxbq xmm1, word [0] + +pmovsxwd xmm1, xmm2 +pmovsxwd xmm1, [0] +pmovsxwd xmm1, qword [0] + +pmovsxwq xmm1, xmm2 +pmovsxwq xmm1, [0] +pmovsxwq xmm1, dword [0] + +pmovsxdq xmm1, xmm2 +pmovsxdq xmm1, [0] +pmovsxdq xmm1, qword [0] + +pmovzxbw xmm1, xmm2 +pmovzxbw xmm1, [0] +pmovzxbw xmm1, qword [0] + +pmovzxbd xmm1, xmm2 +pmovzxbd xmm1, [0] +pmovzxbd xmm1, dword [0] + +pmovzxbq xmm1, xmm2 +pmovzxbq xmm1, [0] +pmovzxbq xmm1, word [0] + +pmovzxwd xmm1, xmm2 +pmovzxwd xmm1, [0] +pmovzxwd xmm1, qword [0] + +pmovzxwq xmm1, xmm2 +pmovzxwq xmm1, [0] +pmovzxwq xmm1, dword [0] + +pmovzxdq xmm1, xmm2 +pmovzxdq xmm1, [0] +pmovzxdq xmm1, qword [0] + +pmuldq xmm1, xmm2 +pmuldq xmm1, [0] + +pmulld xmm1, xmm2 +pmulld xmm1, [0] + +popcnt ax, bx +popcnt ax, [0] +popcnt ebx, ecx +popcnt ebx, [0] +popcnt rcx, rdx +popcnt rcx, [0] + +ptest xmm1, xmm2 +ptest xmm1, [0] + +roundpd xmm1, xmm2, 5 +roundpd xmm1, [0], 5 + +roundps xmm1, xmm2, 5 +roundps xmm1, [0], 5 + +roundsd xmm1, xmm2, 5 +roundsd xmm1, [0], 5 + +roundss xmm1, xmm2, 5 +roundss xmm1, [0], 5 + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse4.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse4.hex new file mode 100644 index 0000000000..e5e3748105 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/sse4.hex @@ -0,0 +1,1347 @@ +66 +0f +3a +0d +ca +05 +66 +0f +3a +0d +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +0c +ca +05 +66 +0f +3a +0c +0c +25 +00 +00 +00 +00 +05 +66 +0f +38 +15 +ca +66 +0f +38 +15 +ca +66 +0f +38 +15 +0c +25 +00 +00 +00 +00 +66 +0f +38 +15 +0c +25 +00 +00 +00 +00 +66 +0f +38 +14 +ca +66 +0f +38 +14 +ca +66 +0f +38 +14 +0c +25 +00 +00 +00 +00 +66 +0f +38 +14 +0c +25 +00 +00 +00 +00 +f2 +0f +38 +f0 +c3 +f2 +0f +38 +f0 +c7 +f2 +41 +0f +38 +f0 +c1 +f2 +0f +38 +f0 +04 +25 +00 +00 +00 +00 +66 +f2 +0f +38 +f1 +c3 +66 +f2 +0f +38 +f1 +04 +25 +00 +00 +00 +00 +f2 +0f +38 +f1 +c3 +f2 +0f +38 +f1 +04 +25 +00 +00 +00 +00 +f2 +44 +0f +38 +f0 +c3 +f2 +45 +0f +38 +f0 +c1 +f2 +44 +0f +38 +f0 +04 +25 +00 +00 +00 +00 +66 +f2 +44 +0f +38 +f1 +c3 +66 +f2 +44 +0f +38 +f1 +04 +25 +00 +00 +00 +00 +f2 +44 +0f +38 +f1 +c3 +f2 +44 +0f +38 +f1 +04 +25 +00 +00 +00 +00 +f2 +48 +0f +38 +f0 +c3 +f2 +49 +0f +38 +f0 +c1 +f2 +48 +0f +38 +f0 +04 +25 +00 +00 +00 +00 +f2 +48 +0f +38 +f1 +c3 +f2 +48 +0f +38 +f1 +04 +25 +00 +00 +00 +00 +66 +0f +3a +41 +ca +05 +66 +0f +3a +41 +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +40 +ca +05 +66 +0f +3a +40 +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +17 +c8 +05 +66 +0f +3a +17 +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +17 +0c +25 +00 +00 +00 +00 +05 +66 +41 +0f +3a +17 +c8 +05 +66 +48 +0f +3a +17 +c8 +05 +66 +0f +3a +21 +ca +05 +66 +0f +3a +21 +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +21 +0c +25 +00 +00 +00 +00 +05 +66 +0f +38 +2a +0c +25 +00 +00 +00 +00 +66 +0f +38 +2a +0c +25 +00 +00 +00 +00 +66 +0f +3a +42 +ca +05 +66 +0f +3a +42 +0c +25 +00 +00 +00 +00 +05 +66 +0f +38 +2b +ca +66 +0f +38 +2b +0c +25 +00 +00 +00 +00 +66 +0f +38 +10 +ca +66 +0f +38 +10 +0c +25 +00 +00 +00 +00 +66 +0f +38 +10 +ca +66 +0f +38 +10 +0c +25 +00 +00 +00 +00 +66 +0f +3a +0e +ca +05 +66 +0f +3a +0e +0c +25 +00 +00 +00 +00 +05 +66 +0f +38 +29 +ca +66 +0f +38 +29 +0c +25 +00 +00 +00 +00 +66 +0f +3a +61 +ca +05 +66 +0f +3a +61 +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +60 +ca +05 +66 +0f +3a +60 +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +63 +ca +05 +66 +0f +3a +63 +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +62 +ca +05 +66 +0f +3a +62 +0c +25 +00 +00 +00 +00 +05 +66 +0f +38 +37 +ca +66 +0f +38 +37 +0c +25 +00 +00 +00 +00 +66 +0f +3a +14 +c8 +05 +66 +48 +0f +3a +14 +c8 +05 +66 +0f +3a +14 +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +14 +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +16 +c8 +05 +66 +0f +3a +16 +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +16 +0c +25 +00 +00 +00 +00 +05 +66 +48 +0f +3a +16 +c8 +05 +66 +48 +0f +3a +16 +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +15 +c8 +05 +66 +0f +3a +15 +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +15 +0c +25 +00 +00 +00 +00 +05 +66 +48 +0f +3a +15 +c8 +05 +66 +0f +38 +41 +ca +66 +0f +38 +41 +0c +25 +00 +00 +00 +00 +66 +0f +3a +20 +c8 +05 +66 +0f +3a +20 +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +20 +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +22 +c8 +05 +66 +0f +3a +22 +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +22 +0c +25 +00 +00 +00 +00 +05 +66 +48 +0f +3a +22 +c8 +05 +66 +48 +0f +3a +22 +0c +25 +00 +00 +00 +00 +05 +66 +48 +0f +3a +22 +0c +25 +00 +00 +00 +00 +05 +66 +0f +38 +3c +ca +66 +0f +38 +3c +0c +25 +00 +00 +00 +00 +66 +0f +38 +3d +ca +66 +0f +38 +3d +0c +25 +00 +00 +00 +00 +66 +0f +38 +3f +ca +66 +0f +38 +3f +0c +25 +00 +00 +00 +00 +66 +0f +38 +3e +ca +66 +0f +38 +3e +0c +25 +00 +00 +00 +00 +66 +0f +38 +38 +ca +66 +0f +38 +38 +0c +25 +00 +00 +00 +00 +66 +0f +38 +39 +ca +66 +0f +38 +39 +0c +25 +00 +00 +00 +00 +66 +0f +38 +3b +ca +66 +0f +38 +3b +0c +25 +00 +00 +00 +00 +66 +0f +38 +3a +ca +66 +0f +38 +3a +0c +25 +00 +00 +00 +00 +66 +0f +38 +20 +ca +66 +0f +38 +20 +0c +25 +00 +00 +00 +00 +66 +0f +38 +20 +0c +25 +00 +00 +00 +00 +66 +0f +38 +21 +ca +66 +0f +38 +21 +0c +25 +00 +00 +00 +00 +66 +0f +38 +21 +0c +25 +00 +00 +00 +00 +66 +0f +38 +22 +ca +66 +0f +38 +22 +0c +25 +00 +00 +00 +00 +66 +0f +38 +22 +0c +25 +00 +00 +00 +00 +66 +0f +38 +23 +ca +66 +0f +38 +23 +0c +25 +00 +00 +00 +00 +66 +0f +38 +23 +0c +25 +00 +00 +00 +00 +66 +0f +38 +24 +ca +66 +0f +38 +24 +0c +25 +00 +00 +00 +00 +66 +0f +38 +24 +0c +25 +00 +00 +00 +00 +66 +0f +38 +25 +ca +66 +0f +38 +25 +0c +25 +00 +00 +00 +00 +66 +0f +38 +25 +0c +25 +00 +00 +00 +00 +66 +0f +38 +30 +ca +66 +0f +38 +30 +0c +25 +00 +00 +00 +00 +66 +0f +38 +30 +0c +25 +00 +00 +00 +00 +66 +0f +38 +31 +ca +66 +0f +38 +31 +0c +25 +00 +00 +00 +00 +66 +0f +38 +31 +0c +25 +00 +00 +00 +00 +66 +0f +38 +32 +ca +66 +0f +38 +32 +0c +25 +00 +00 +00 +00 +66 +0f +38 +32 +0c +25 +00 +00 +00 +00 +66 +0f +38 +33 +ca +66 +0f +38 +33 +0c +25 +00 +00 +00 +00 +66 +0f +38 +33 +0c +25 +00 +00 +00 +00 +66 +0f +38 +34 +ca +66 +0f +38 +34 +0c +25 +00 +00 +00 +00 +66 +0f +38 +34 +0c +25 +00 +00 +00 +00 +66 +0f +38 +35 +ca +66 +0f +38 +35 +0c +25 +00 +00 +00 +00 +66 +0f +38 +35 +0c +25 +00 +00 +00 +00 +66 +0f +38 +28 +ca +66 +0f +38 +28 +0c +25 +00 +00 +00 +00 +66 +0f +38 +40 +ca +66 +0f +38 +40 +0c +25 +00 +00 +00 +00 +66 +f3 +0f +b8 +c3 +66 +f3 +0f +b8 +04 +25 +00 +00 +00 +00 +f3 +0f +b8 +d9 +f3 +0f +b8 +1c +25 +00 +00 +00 +00 +f3 +48 +0f +b8 +ca +f3 +48 +0f +b8 +0c +25 +00 +00 +00 +00 +66 +0f +38 +17 +ca +66 +0f +38 +17 +0c +25 +00 +00 +00 +00 +66 +0f +3a +09 +ca +05 +66 +0f +3a +09 +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +08 +ca +05 +66 +0f +3a +08 +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +0b +ca +05 +66 +0f +3a +0b +0c +25 +00 +00 +00 +00 +05 +66 +0f +3a +0a +ca +05 +66 +0f +3a +0a +0c +25 +00 +00 +00 +00 +05 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssewidth.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssewidth.asm new file mode 100644 index 0000000000..0824b76945 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssewidth.asm @@ -0,0 +1,566 @@ +[bits 64] +addpd xmm1, xmm2 +addpd xmm1, dqword [rbx] + +addps xmm1, xmm2 +addps xmm1, dqword [rbx] + +addsd xmm1, xmm2 +addsd xmm1, qword [rbx] + +addss xmm1, xmm2 +addss xmm1, dword [rbx] + +addsubpd xmm1, xmm2 +addsubpd xmm1, dqword [rbx] + +addsubps xmm1, xmm2 +addsubps xmm1, dqword [rbx] + +andnpd xmm1, xmm2 +andnpd xmm1, dqword [rbx] + +andnps xmm1, xmm2 +andnps xmm1, dqword [rbx] + +andpd xmm1, xmm2 +andpd xmm1, dqword [rbx] + +andps xmm1, xmm2 +andps xmm1, dqword [rbx] + +cmppd xmm1, xmm2, 0 +cmppd xmm1, dqword [rbx], 0 +cmpeqpd xmm1, xmm2 +cmpeqpd xmm1, dqword [rbx] + +cmpps xmm1, xmm2, 0 +cmpps xmm1, dqword [rbx], 0 +cmpeqps xmm1, xmm2 +cmpeqps xmm1, dqword [rbx] + +cmpsd xmm1, xmm2, 0 +cmpsd xmm1, qword [rbx], 0 +cmpeqsd xmm1, xmm2 +cmpeqsd xmm1, qword [rbx] + +cmpss xmm1, xmm2, 0 +cmpss xmm1, dword [rbx], 0 +cmpeqss xmm1, xmm2 +cmpeqss xmm1, dword [rbx] + +comisd xmm1, xmm2 +comisd xmm1, qword [rbx] + +comiss xmm1, xmm2 +comiss xmm1, dword [rbx] + +cvtdq2pd xmm1, xmm2 +cvtdq2pd xmm1, qword [rbx] + +cvtdq2ps xmm1, xmm2 +cvtdq2ps xmm1, dqword [rbx] + +cvtpd2dq xmm1, xmm2 +cvtpd2dq xmm1, dqword [rbx] + +cvtpd2pi mm1, xmm2 ; mmx +cvtpd2pi mm1, dqword [rbx] + +cvtpd2ps xmm1, xmm2 +cvtpd2ps xmm1, dqword [rbx] + +cvtpi2pd xmm1, mm2 ; mmx +cvtpi2pd xmm1, qword [rbx] + +cvtpi2ps xmm1, mm2 ; mmx +cvtpi2ps xmm1, qword [rbx] + +cvtps2dq xmm1, xmm2 +cvtps2dq xmm1, dqword [rbx] + +cvtps2pd xmm1, xmm2 +cvtps2pd xmm1, qword [rbx] + +cvtps2pi mm1, xmm2 +cvtps2pi mm1, qword [rbx] + +cvtsd2si rbx, xmm2 +cvtsd2si rbx, qword [rbx] + +cvtsd2ss xmm1, xmm2 +cvtsd2ss xmm1, qword [rbx] + +cvtsi2sd xmm1, ebx +cvtsi2sd xmm1, dword [rbx] +cvtsi2sd xmm1, rbx +cvtsi2sd xmm1, qword [rbx] + +cvtsi2ss xmm1, ebx +cvtsi2ss xmm1, dword [rbx] +cvtsi2ss xmm1, rbx +cvtsi2ss xmm1, qword [rbx] + +cvtss2sd xmm1, xmm2 +cvtss2sd xmm1, dword [rbx] + +cvtss2si ebx, xmm2 +cvtss2si ebx, dword [rbx] +cvtss2si rbx, xmm2 +cvtss2si rbx, dword [rbx] + +cvttpd2dq xmm1, xmm2 +cvttpd2dq xmm1, dqword [rbx] + +cvttpd2pi mm1, xmm2 +cvttpd2pi mm1, dqword [rbx] + +cvttps2dq xmm1, xmm2 +cvttps2dq xmm1, dqword [rbx] + +cvttps2pi mm1, xmm2 +cvttps2pi mm1, qword [rbx] + +cvttsd2si eax, xmm1 +cvttsd2si eax, qword [rbx] +cvttsd2si rax, xmm1 +cvttsd2si rax, qword [rbx] + +cvttss2si eax, xmm1 +cvttss2si eax, dword [rbx] +cvttss2si rax, xmm1 +cvttss2si rax, dword [rbx] + +divpd xmm1, xmm2 +divpd xmm1, dqword [rbx] + +divps xmm1, xmm2 +divps xmm1, dqword [rbx] + +divsd xmm1, xmm2 +divsd xmm1, qword [rbx] + +divss xmm1, xmm2 +divss xmm1, dword [rbx] + +extrq xmm1, 0, 1 +extrq xmm1, byte 0, byte 1 +extrq xmm1, xmm2 + +haddpd xmm1, xmm2 +haddpd xmm1, dqword [rbx] + +haddps xmm1, xmm2 +haddps xmm1, dqword [rbx] + +hsubpd xmm1, xmm2 +hsubpd xmm1, dqword [rbx] + +hsubps xmm1, xmm2 +hsubps xmm1, dqword [rbx] + +insertq xmm1, xmm2, 0, 1 +insertq xmm1, xmm2, byte 0, byte 1 +insertq xmm1, xmm2 + +lddqu xmm1, dqword [rbx] + +ldmxcsr dword [rbx] + +maskmovdqu xmm1, xmm2 + +maxpd xmm1, xmm2 +maxpd xmm1, dqword [rbx] + +maxps xmm1, xmm2 +maxps xmm1, dqword [rbx] + +maxsd xmm1, xmm2 +maxsd xmm1, qword [rbx] + +maxss xmm1, xmm2 +maxss xmm1, dword [rbx] + +minpd xmm1, xmm2 +minpd xmm1, dqword [rbx] + +minps xmm1, xmm2 +minps xmm1, dqword [rbx] + +minsd xmm1, xmm2 +minsd xmm1, qword [rbx] + +minss xmm1, xmm2 +minss xmm1, dword [rbx] + +movapd xmm1, xmm2 +movapd xmm1, dqword [rbx] +movapd dqword [rbx], xmm2 + +movaps xmm1, xmm2 +movaps xmm1, dqword [rbx] +movaps dqword [rbx], xmm2 + +movd xmm1, ebx +movd xmm1, dword [rbx] +movd xmm1, rbx +movd xmm1, qword [rbx] +movd dword [rbx], xmm2 +movd qword [rbx], xmm2 + +movddup xmm1, xmm2 +movddup xmm1, qword [rbx] + +movdq2q mm1, xmm2 + +movdqa xmm1, xmm2 +movdqa xmm1, dqword [rbx] +movdqa dqword [rbx], xmm2 + +movdqu xmm1, xmm2 +movdqu xmm1, dqword [rbx] +movdqu dqword [rbx], xmm2 + +movhlps xmm1, xmm2 + +movhpd xmm1, qword [rbx] +movhpd qword [rbx], xmm2 + +movhps xmm1, qword [rbx] +movhps qword [rbx], xmm2 + +movlhps xmm1, xmm2 + +movlpd xmm1, qword [rbx] +movlpd qword [rbx], xmm2 + +movlps xmm1, qword [rbx] +movlps qword [rbx], xmm2 + +movmskpd ebx, xmm2 + +movmskps ebx, xmm2 + +movntdq dqword [rbx], xmm2 + +movntpd dqword [rbx], xmm2 + +movntps dqword [rbx], xmm2 + +movntsd qword [rbx], xmm2 + +movntss dword [rbx], xmm2 + +movq xmm1, xmm2 +movq xmm1, qword [rbx] +movq qword [rbx], xmm2 + +movq2dq xmm1, mm2 + +movsd xmm1, xmm2 +movsd xmm1, qword [rbx] +movsd qword [rbx], xmm2 + +movshdup xmm1, xmm2 +movshdup xmm1, dqword [rbx] + +movsldup xmm1, xmm2 +movsldup xmm1, dqword [rbx] + +movss xmm1, xmm2 +movss xmm1, dword [rbx] +movss dword [rbx], xmm2 + +movupd xmm1, xmm2 +movupd xmm1, dqword [rbx] +movupd dqword [rbx], xmm2 + +movups xmm1, xmm2 +movups xmm1, dqword [rbx] +movups dqword [rbx], xmm2 + +mulpd xmm1, xmm2 +mulpd xmm1, dqword [rbx] + +mulps xmm1, xmm2 +mulps xmm1, dqword [rbx] + +mulsd xmm1, xmm2 +mulsd xmm1, qword [rbx] + +mulss xmm1, xmm2 +mulss xmm1, dword [rbx] + +orpd xmm1, xmm2 +orpd xmm1, dqword [rbx] + +orps xmm1, xmm2 +orps xmm1, dqword [rbx] + +packssdw xmm1, xmm2 +packssdw xmm1, dqword [rbx] + +packsswb xmm1, xmm2 +packsswb xmm1, dqword [rbx] + +packuswb xmm1, xmm2 +packuswb xmm1, dqword [rbx] + +paddb xmm1, xmm2 +paddb xmm1, dqword [rbx] + +paddd xmm1, xmm2 +paddd xmm1, dqword [rbx] + +paddq xmm1, xmm2 +paddq xmm1, dqword [rbx] + +paddsb xmm1, xmm2 +paddsb xmm1, dqword [rbx] + +paddsw xmm1, xmm2 +paddsw xmm1, dqword [rbx] + +paddusb xmm1, xmm2 +paddusb xmm1, dqword [rbx] + +paddusw xmm1, xmm2 +paddusw xmm1, dqword [rbx] + +paddw xmm1, xmm2 +paddw xmm1, dqword [rbx] + +pand xmm1, xmm2 +pand xmm1, dqword [rbx] + +pandn xmm1, xmm2 +pandn xmm1, dqword [rbx] + +pavgb xmm1, xmm2 +pavgb xmm1, dqword [rbx] + +pavgw xmm1, xmm2 +pavgw xmm1, dqword [rbx] + +pcmpeqb xmm1, xmm2 +pcmpeqb xmm1, dqword [rbx] + +pcmpeqd xmm1, xmm2 +pcmpeqd xmm1, dqword [rbx] + +pcmpeqw xmm1, xmm2 +pcmpeqw xmm1, dqword [rbx] + +pcmpgtb xmm1, xmm2 +pcmpgtb xmm1, dqword [rbx] + +pcmpgtd xmm1, xmm2 +pcmpgtd xmm1, dqword [rbx] + +pcmpgtw xmm1, xmm2 +pcmpgtw xmm1, dqword [rbx] + +pextrw ebx, xmm2, byte 0 + +pinsrw xmm1, ebx, byte 0 +pinsrw xmm1, word [rbx], byte 0 + +pmaddwd xmm1, xmm2 +pmaddwd xmm1, dqword [rbx] + +pmaxsw xmm1, xmm2 +pmaxsw xmm1, dqword [rbx] + +pmaxub xmm1, xmm2 +pmaxub xmm1, dqword [rbx] + +pminsw xmm1, xmm2 +pminsw xmm1, dqword [rbx] + +pminub xmm1, xmm2 +pminub xmm1, dqword [rbx] + +pmovmskb eax, xmm2 + +pmulhuw xmm1, xmm2 +pmulhuw xmm1, dqword [rbx] + +pmulhw xmm1, xmm2 +pmulhw xmm1, dqword [rbx] + +pmullw xmm1, xmm2 +pmullw xmm1, dqword [rbx] + +pmuludq xmm1, xmm2 +pmuludq xmm1, dqword [rbx] + +por xmm1, xmm2 +por xmm1, dqword [rbx] + +psadbw xmm1, xmm2 +psadbw xmm1, dqword [rbx] + +pshufd xmm1, xmm2, byte 0 +pshufd xmm1, dqword [rbx], byte 0 + +pshufhw xmm1, xmm2, byte 0 +pshufhw xmm1, dqword [rbx], byte 0 + +pshuflw xmm1, xmm2, byte 0 +pshuflw xmm1, dqword [rbx], byte 0 + +pslld xmm1, xmm2 +pslld xmm1, dqword [rbx] +pslld xmm1, byte 5 + +pslldq xmm1, byte 5 + +psllq xmm1, xmm2 +psllq xmm1, dqword [rbx] +psllq xmm1, byte 5 + +psllw xmm1, xmm2 +psllw xmm1, dqword [rbx] +psllw xmm1, byte 5 + +psrad xmm1, xmm2 +psrad xmm1, dqword [rbx] +psrad xmm1, byte 5 + +psraw xmm1, xmm2 +psraw xmm1, dqword [rbx] +psraw xmm1, byte 5 + +psrld xmm1, xmm2 +psrld xmm1, dqword [rbx] +psrld xmm1, byte 5 + +psrldq xmm1, byte 5 + +psrlq xmm1, xmm2 +psrlq xmm1, dqword [rbx] +psrlq xmm1, byte 5 + +psrlw xmm1, xmm2 +psrlw xmm1, dqword [rbx] +psrlw xmm1, byte 5 + +psubb xmm1, xmm2 +psubb xmm1, dqword [rbx] + +psubd xmm1, xmm2 +psubd xmm1, dqword [rbx] + +psubq xmm1, xmm2 +psubq xmm1, dqword [rbx] + +psubsb xmm1, xmm2 +psubsb xmm1, dqword [rbx] + +psubsw xmm1, xmm2 +psubsw xmm1, dqword [rbx] + +psubusb xmm1, xmm2 +psubusb xmm1, dqword [rbx] + +psubusw xmm1, xmm2 +psubusw xmm1, dqword [rbx] + +psubw xmm1, xmm2 +psubw xmm1, dqword [rbx] + +punpckhbw xmm1, xmm2 +punpckhbw xmm1, dqword [rbx] + +punpckhdq xmm1, xmm2 +punpckhdq xmm1, dqword [rbx] + +punpckhqdq xmm1, xmm2 +punpckhqdq xmm1, dqword [rbx] + +punpckhwd xmm1, xmm2 +punpckhwd xmm1, dqword [rbx] + +punpcklbw xmm1, xmm2 +punpcklbw xmm1, dqword [rbx] + +punpckldq xmm1, xmm2 +punpckldq xmm1, dqword [rbx] + +punpcklqdq xmm1, xmm2 +punpcklqdq xmm1, dqword [rbx] + +punpcklwd xmm1, xmm2 +punpcklwd xmm1, dqword [rbx] + +pxor xmm1, xmm2 +pxor xmm1, dqword [rbx] + +rcpps xmm1, xmm2 +rcpps xmm1, dqword [rbx] + +rcpss xmm1, xmm2 +rcpss xmm1, dword [rbx] + +rsqrtps xmm1, xmm2 +rsqrtps xmm1, dqword [rbx] + +rsqrtss xmm1, xmm2 +rsqrtss xmm1, dword [rbx] + +shufpd xmm1, xmm2, 0 +shufpd xmm1, dqword [rbx], byte 0 + +shufps xmm1, xmm2, 0 +shufps xmm1, dqword [rbx], byte 0 + +sqrtpd xmm1, xmm2 +sqrtpd xmm1, dqword [rbx] + +sqrtps xmm1, xmm2 +sqrtps xmm1, dqword [rbx] + +sqrtsd xmm1, xmm2 +sqrtsd xmm1, qword [rbx] + +sqrtss xmm1, xmm2 +sqrtss xmm1, dword [rbx] + +stmxcsr dword [rbx] + +subpd xmm1, xmm2 +subpd xmm1, dqword [rbx] + +subps xmm1, xmm2 +subps xmm1, dqword [rbx] + +subsd xmm1, xmm2 +subsd xmm1, qword [rbx] + +subss xmm1, xmm2 +subss xmm1, dword [rbx] + +ucomisd xmm1, xmm2 +ucomisd xmm1, qword [rbx] + +ucomiss xmm1, xmm2 +ucomiss xmm1, dword [rbx] + +unpckhpd xmm1, xmm2 +unpckhpd xmm1, dqword [rbx] + +unpckhps xmm1, xmm2 +unpckhps xmm1, dqword [rbx] + +unpcklpd xmm1, xmm2 +unpcklpd xmm1, dqword [rbx] + +unpcklps xmm1, xmm2 +unpcklps xmm1, dqword [rbx] + +xorpd xmm1, xmm2 +xorpd xmm1, dqword [rbx] + +xorps xmm1, xmm2 +xorps xmm1, dqword [rbx] + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssewidth.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssewidth.hex new file mode 100644 index 0000000000..fc24e8da29 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssewidth.hex @@ -0,0 +1,1532 @@ +66 +0f +58 +ca +66 +0f +58 +0b +0f +58 +ca +0f +58 +0b +f2 +0f +58 +ca +f2 +0f +58 +0b +f3 +0f +58 +ca +f3 +0f +58 +0b +66 +0f +d0 +ca +66 +0f +d0 +0b +f2 +0f +d0 +ca +f2 +0f +d0 +0b +66 +0f +55 +ca +66 +0f +55 +0b +0f +55 +ca +0f +55 +0b +66 +0f +54 +ca +66 +0f +54 +0b +0f +54 +ca +0f +54 +0b +66 +0f +c2 +ca +00 +66 +0f +c2 +0b +00 +66 +0f +c2 +ca +00 +66 +0f +c2 +0b +00 +0f +c2 +ca +00 +0f +c2 +0b +00 +0f +c2 +ca +00 +0f +c2 +0b +00 +f2 +0f +c2 +ca +00 +f2 +0f +c2 +0b +00 +f2 +0f +c2 +ca +00 +f2 +0f +c2 +0b +00 +f3 +0f +c2 +ca +00 +f3 +0f +c2 +0b +00 +f3 +0f +c2 +ca +00 +f3 +0f +c2 +0b +00 +66 +0f +2f +ca +66 +0f +2f +0b +0f +2f +ca +0f +2f +0b +f3 +0f +e6 +ca +f3 +0f +e6 +0b +0f +5b +ca +0f +5b +0b +f2 +0f +e6 +ca +f2 +0f +e6 +0b +66 +0f +2d +ca +66 +0f +2d +0b +66 +0f +5a +ca +66 +0f +5a +0b +66 +0f +2a +ca +66 +0f +2a +0b +0f +2a +ca +0f +2a +0b +66 +0f +5b +ca +66 +0f +5b +0b +0f +5a +ca +0f +5a +0b +0f +2d +ca +0f +2d +0b +f2 +48 +0f +2d +da +f2 +48 +0f +2d +1b +f2 +0f +5a +ca +f2 +0f +5a +0b +f2 +0f +2a +cb +f2 +0f +2a +0b +f2 +48 +0f +2a +cb +f2 +48 +0f +2a +0b +f3 +0f +2a +cb +f3 +0f +2a +0b +f3 +48 +0f +2a +cb +f3 +48 +0f +2a +0b +f3 +0f +5a +ca +f3 +0f +5a +0b +f3 +0f +2d +da +f3 +0f +2d +1b +f3 +48 +0f +2d +da +f3 +48 +0f +2d +1b +66 +0f +e6 +ca +66 +0f +e6 +0b +66 +0f +2c +ca +66 +0f +2c +0b +f3 +0f +5b +ca +f3 +0f +5b +0b +0f +2c +ca +0f +2c +0b +f2 +0f +2c +c1 +f2 +0f +2c +03 +f2 +48 +0f +2c +c1 +f2 +48 +0f +2c +03 +f3 +0f +2c +c1 +f3 +0f +2c +03 +f3 +48 +0f +2c +c1 +f3 +48 +0f +2c +03 +66 +0f +5e +ca +66 +0f +5e +0b +0f +5e +ca +0f +5e +0b +f2 +0f +5e +ca +f2 +0f +5e +0b +f3 +0f +5e +ca +f3 +0f +5e +0b +66 +0f +78 +c1 +00 +01 +66 +0f +78 +c1 +00 +01 +66 +0f +79 +ca +66 +0f +7c +ca +66 +0f +7c +0b +f2 +0f +7c +ca +f2 +0f +7c +0b +66 +0f +7d +ca +66 +0f +7d +0b +f2 +0f +7d +ca +f2 +0f +7d +0b +f2 +0f +78 +ca +00 +01 +f2 +0f +78 +ca +00 +01 +f2 +0f +79 +ca +f2 +0f +f0 +0b +0f +ae +13 +66 +0f +f7 +ca +66 +0f +5f +ca +66 +0f +5f +0b +0f +5f +ca +0f +5f +0b +f2 +0f +5f +ca +f2 +0f +5f +0b +f3 +0f +5f +ca +f3 +0f +5f +0b +66 +0f +5d +ca +66 +0f +5d +0b +0f +5d +ca +0f +5d +0b +f2 +0f +5d +ca +f2 +0f +5d +0b +f3 +0f +5d +ca +f3 +0f +5d +0b +66 +0f +28 +ca +66 +0f +28 +0b +66 +0f +29 +13 +0f +28 +ca +0f +28 +0b +0f +29 +13 +66 +0f +6e +cb +66 +0f +6e +0b +66 +48 +0f +6e +cb +66 +48 +0f +6e +0b +66 +0f +7e +13 +66 +48 +0f +7e +13 +f2 +0f +12 +ca +f2 +0f +12 +0b +f2 +0f +d6 +ca +66 +0f +6f +ca +66 +0f +6f +0b +66 +0f +7f +13 +f3 +0f +6f +ca +f3 +0f +6f +0b +f3 +0f +7f +13 +0f +12 +ca +66 +0f +16 +0b +66 +0f +17 +13 +0f +16 +0b +0f +17 +13 +0f +16 +ca +66 +0f +12 +0b +66 +0f +13 +13 +0f +12 +0b +0f +13 +13 +66 +0f +50 +da +0f +50 +da +66 +0f +e7 +13 +66 +0f +2b +13 +0f +2b +13 +f2 +0f +2b +13 +f3 +0f +2b +13 +f3 +0f +7e +ca +f3 +0f +7e +0b +66 +0f +d6 +13 +f3 +0f +d6 +ca +f2 +0f +10 +ca +f2 +0f +10 +0b +f2 +0f +11 +13 +f3 +0f +16 +ca +f3 +0f +16 +0b +f3 +0f +12 +ca +f3 +0f +12 +0b +f3 +0f +10 +ca +f3 +0f +10 +0b +f3 +0f +11 +13 +66 +0f +10 +ca +66 +0f +10 +0b +66 +0f +11 +13 +0f +10 +ca +0f +10 +0b +0f +11 +13 +66 +0f +59 +ca +66 +0f +59 +0b +0f +59 +ca +0f +59 +0b +f2 +0f +59 +ca +f2 +0f +59 +0b +f3 +0f +59 +ca +f3 +0f +59 +0b +66 +0f +56 +ca +66 +0f +56 +0b +0f +56 +ca +0f +56 +0b +66 +0f +6b +ca +66 +0f +6b +0b +66 +0f +63 +ca +66 +0f +63 +0b +66 +0f +67 +ca +66 +0f +67 +0b +66 +0f +fc +ca +66 +0f +fc +0b +66 +0f +fe +ca +66 +0f +fe +0b +66 +0f +d4 +ca +66 +0f +d4 +0b +66 +0f +ec +ca +66 +0f +ec +0b +66 +0f +ed +ca +66 +0f +ed +0b +66 +0f +dc +ca +66 +0f +dc +0b +66 +0f +dd +ca +66 +0f +dd +0b +66 +0f +fd +ca +66 +0f +fd +0b +66 +0f +db +ca +66 +0f +db +0b +66 +0f +df +ca +66 +0f +df +0b +66 +0f +e0 +ca +66 +0f +e0 +0b +66 +0f +e3 +ca +66 +0f +e3 +0b +66 +0f +74 +ca +66 +0f +74 +0b +66 +0f +76 +ca +66 +0f +76 +0b +66 +0f +75 +ca +66 +0f +75 +0b +66 +0f +64 +ca +66 +0f +64 +0b +66 +0f +66 +ca +66 +0f +66 +0b +66 +0f +65 +ca +66 +0f +65 +0b +66 +0f +c5 +da +00 +66 +0f +c4 +cb +00 +66 +0f +c4 +0b +00 +66 +0f +f5 +ca +66 +0f +f5 +0b +66 +0f +ee +ca +66 +0f +ee +0b +66 +0f +de +ca +66 +0f +de +0b +66 +0f +ea +ca +66 +0f +ea +0b +66 +0f +da +ca +66 +0f +da +0b +66 +0f +d7 +c2 +66 +0f +e4 +ca +66 +0f +e4 +0b +66 +0f +e5 +ca +66 +0f +e5 +0b +66 +0f +d5 +ca +66 +0f +d5 +0b +66 +0f +f4 +ca +66 +0f +f4 +0b +66 +0f +eb +ca +66 +0f +eb +0b +66 +0f +f6 +ca +66 +0f +f6 +0b +66 +0f +70 +ca +00 +66 +0f +70 +0b +00 +f3 +0f +70 +ca +00 +f3 +0f +70 +0b +00 +f2 +0f +70 +ca +00 +f2 +0f +70 +0b +00 +66 +0f +f2 +ca +66 +0f +f2 +0b +66 +0f +72 +f1 +05 +66 +0f +73 +f9 +05 +66 +0f +f3 +ca +66 +0f +f3 +0b +66 +0f +73 +f1 +05 +66 +0f +f1 +ca +66 +0f +f1 +0b +66 +0f +71 +f1 +05 +66 +0f +e2 +ca +66 +0f +e2 +0b +66 +0f +72 +e1 +05 +66 +0f +e1 +ca +66 +0f +e1 +0b +66 +0f +71 +e1 +05 +66 +0f +d2 +ca +66 +0f +d2 +0b +66 +0f +72 +d1 +05 +66 +0f +73 +d9 +05 +66 +0f +d3 +ca +66 +0f +d3 +0b +66 +0f +73 +d1 +05 +66 +0f +d1 +ca +66 +0f +d1 +0b +66 +0f +71 +d1 +05 +66 +0f +f8 +ca +66 +0f +f8 +0b +66 +0f +fa +ca +66 +0f +fa +0b +66 +0f +fb +ca +66 +0f +fb +0b +66 +0f +e8 +ca +66 +0f +e8 +0b +66 +0f +e9 +ca +66 +0f +e9 +0b +66 +0f +d8 +ca +66 +0f +d8 +0b +66 +0f +d9 +ca +66 +0f +d9 +0b +66 +0f +f9 +ca +66 +0f +f9 +0b +66 +0f +68 +ca +66 +0f +68 +0b +66 +0f +6a +ca +66 +0f +6a +0b +66 +0f +6d +ca +66 +0f +6d +0b +66 +0f +69 +ca +66 +0f +69 +0b +66 +0f +60 +ca +66 +0f +60 +0b +66 +0f +62 +ca +66 +0f +62 +0b +66 +0f +6c +ca +66 +0f +6c +0b +66 +0f +61 +ca +66 +0f +61 +0b +66 +0f +ef +ca +66 +0f +ef +0b +0f +53 +ca +0f +53 +0b +f3 +0f +53 +ca +f3 +0f +53 +0b +0f +52 +ca +0f +52 +0b +f3 +0f +52 +ca +f3 +0f +52 +0b +66 +0f +c6 +ca +00 +66 +0f +c6 +0b +00 +0f +c6 +ca +00 +0f +c6 +0b +00 +66 +0f +51 +ca +66 +0f +51 +0b +0f +51 +ca +0f +51 +0b +f2 +0f +51 +ca +f2 +0f +51 +0b +f3 +0f +51 +ca +f3 +0f +51 +0b +0f +ae +1b +66 +0f +5c +ca +66 +0f +5c +0b +0f +5c +ca +0f +5c +0b +f2 +0f +5c +ca +f2 +0f +5c +0b +f3 +0f +5c +ca +f3 +0f +5c +0b +66 +0f +2e +ca +66 +0f +2e +0b +0f +2e +ca +0f +2e +0b +66 +0f +15 +ca +66 +0f +15 +0b +0f +15 +ca +0f +15 +0b +66 +0f +14 +ca +66 +0f +14 +0b +0f +14 +ca +0f +14 +0b +66 +0f +57 +ca +66 +0f +57 +0b +0f +57 +ca +0f +57 +0b diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssse3.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssse3.asm new file mode 100644 index 0000000000..a9e8578d67 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssse3.asm @@ -0,0 +1,71 @@ +%MACRO TEST_GENERIC 5 +;global _test_ %+ %1 %+ _ %+ %4 +;global test_ %+ %1 %+ _ %+ %4 +_test_ %+ %1 %+ _ %+ %4: +test_ %+ %1 %+ _ %+ %4: + mov edx, [ esp + 4 ] + mov eax, [ esp + 8 ] + %2 %3, [ edx ] + %2 %5, [ eax ] + %1 %3, %5 + %2 [ edx ], %3 + ret +%ENDMACRO + +TEST_GENERIC pabsb, movq, mm0, mmx, mm1 +TEST_GENERIC pabsw, movq, mm0, mmx, mm1 +TEST_GENERIC pabsd, movq, mm0, mmx, mm1 + +TEST_GENERIC pabsb, movdqu, xmm0, xmm, xmm1 +TEST_GENERIC pabsw, movdqu, xmm0, xmm, xmm1 +TEST_GENERIC pabsd, movdqu, xmm0, xmm, xmm1 + +TEST_GENERIC psignb, movq, mm0, mmx, mm1 +TEST_GENERIC psignw, movq, mm0, mmx, mm1 +TEST_GENERIC psignd, movq, mm0, mmx, mm1 + +TEST_GENERIC psignb, movdqu, xmm0, xmm, xmm1 +TEST_GENERIC psignw, movdqu, xmm0, xmm, xmm1 +TEST_GENERIC psignd, movdqu, xmm0, xmm, xmm1 + +TEST_GENERIC phaddw, movq, mm0, mmx, mm1 +TEST_GENERIC phaddsw, movq, mm0, mmx, mm1 +TEST_GENERIC phaddd, movq, mm0, mmx, mm1 + +TEST_GENERIC phaddw, movdqu, xmm0, xmm, xmm1 +TEST_GENERIC phaddsw, movdqu, xmm0, xmm, xmm1 +TEST_GENERIC phaddd, movdqu, xmm0, xmm, xmm1 + +TEST_GENERIC phsubw, movq, mm0, mmx, mm1 +TEST_GENERIC phsubsw, movq, mm0, mmx, mm1 +TEST_GENERIC phsubd, movq, mm0, mmx, mm1 + +TEST_GENERIC phsubw, movdqu, xmm0, xmm, xmm1 +TEST_GENERIC phsubsw, movdqu, xmm0, xmm, xmm1 +TEST_GENERIC phsubd, movdqu, xmm0, xmm, xmm1 + +TEST_GENERIC pmulhrsw, movq, mm0, mmx, mm1 +TEST_GENERIC pmulhrsw, movdqu, xmm0, xmm, xmm1 + +TEST_GENERIC pmaddubsw, movq, mm0, mmx, mm1 +TEST_GENERIC pmaddubsw, movdqu, xmm0, xmm, xmm1 + +TEST_GENERIC pshufb, movq, mm0, mmx, mm1 +TEST_GENERIC pshufb, movdqu, xmm0, xmm, xmm1 + +%MACRO TEST_ALIGNR 5 +;global _test_ %+ %1 %+ _ %+ %4 +;global test_ %+ %1 %+ _ %+ %4 +_test_ %+ %1 %+ _ %+ %4: +test_ %+ %1 %+ _ %+ %4: + mov edx, [ esp + 4 ] + mov eax, [ esp + 8 ] + %2 %3, [ edx ] + %2 %5, [ eax ] + %1 %3, %5, 3 + %2 [ edx ], %3 + ret +%ENDMACRO + +TEST_ALIGNR palignr, movq, mm0, mmx, mm1 +TEST_ALIGNR palignr, movdqu, xmm0, xmm, xmm1 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssse3.c b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssse3.c new file mode 100644 index 0000000000..419a12711e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssse3.c @@ -0,0 +1,223 @@ +#include +#include +#include + +#define SAT(x) (((x) < -32768) ? -32768 : (((x) > 32767) ? 32767 : (x))) + +static void test_pabsb_c(char *pDst, char *pSrc, int xmm) +{ + int i; + + for ( i = 0; i < (8 << xmm); i++ ) + pDst[ i ] = pSrc[ i ] > 0 ? pSrc[i ] : -pSrc[ i ]; +} + +static void test_pabsw_c(short *pDst, short *pSrc, int xmm) +{ + int i; + + for ( i = 0; i < (4 << xmm); i++ ) + pDst[ i ] = pSrc[ i ] > 0 ? pSrc[i ] : -pSrc[ i ]; +} + +static void test_pabsd_c(int *pDst, int *pSrc, int xmm) +{ + int i; + + for ( i = 0; i < (2 << xmm); i++ ) + pDst[ i ] = pSrc[ i ] > 0 ? pSrc[i ] : -pSrc[ i ]; +} + +static void test_psignb_c(char *pDst, char *pSrc, int xmm) +{ + int i; + + for ( i = 0; i < (8 << xmm); i++ ) + pDst[ i ] = pSrc[i] ? ( pSrc[ i ] >= 0 ? pDst[i ] : -pDst[ i ] ) : 0; +} + +static void test_psignw_c(short *pDst, short *pSrc, int xmm) +{ + int i; + + for ( i = 0; i < (4 << xmm); i++ ) + pDst[ i ] = pSrc[i] ? ( pSrc[ i ] >= 0 ? pDst[i ] : -pDst[ i ] ) : 0; +} + +static void test_psignd_c(int *pDst, int *pSrc, int xmm) +{ + int i; + + for ( i = 0; i < (2 << xmm); i++ ) + pDst[ i ] = pSrc[i] ? ( pSrc[ i ] >= 0 ? pDst[i ] : -pDst[ i ] ) : 0; +} + +static void test_phaddw_c(unsigned short *pDst,unsigned short *pSrc, int xmm) +{ + int i; + + for ( i = 0; i < (2 << xmm); i++ ) + pDst[ i ] = pDst[ i * 2 ] + pDst[ i * 2 + 1 ]; + + for ( i = 0; i < (2 << xmm); i++ ) + pDst[ i + (2 << xmm) ] = pSrc[ i * 2 ] + pSrc[ i * 2 + 1 ]; +} + +static void test_phaddsw_c(short *pDst, short *pSrc, int xmm) +{ + int i; + + for ( i = 0; i < (2 << xmm); i++ ) + pDst[ i ] = SAT( pDst[ i * 2 ] + pDst[ i * 2 + 1 ] ); + + for ( i = 0; i < (2 << xmm); i++ ) + pDst[ i + (2 << xmm) ] = SAT( pSrc[ i * 2 ] + pSrc[ i * 2 + 1 ] ); +} + +static void test_phaddd_c(unsigned int *pDst, unsigned int *pSrc, int xmm) +{ + int i; + + for ( i = 0; i < (1 << xmm); i++ ) + pDst[ i ] = pDst[ i * 2 ] + pDst[ i * 2 + 1 ]; + + for ( i = 0; i < (1 << xmm); i++ ) + pDst[ i + (1 << xmm) ] = pSrc[ i * 2 ] + pSrc[ i * 2 + 1 ]; +} + +static void test_phsubw_c(unsigned short *pDst,unsigned short *pSrc, int xmm) +{ + int i; + + for ( i = 0; i < (2 << xmm); i++ ) + pDst[ i ] = pDst[ i * 2 ] - pDst[ i * 2 + 1 ]; + + for ( i = 0; i < (2 << xmm); i++ ) + pDst[ i + (2 << xmm) ] = pSrc[ i * 2 ] - pSrc[ i * 2 + 1 ]; +} + +static void test_phsubsw_c(short *pDst, short *pSrc, int xmm) +{ + int i; + + for ( i = 0; i < (2 << xmm); i++ ) + pDst[ i ] = SAT( pDst[ i * 2 ] - pDst[ i * 2 + 1 ] ); + + for ( i = 0; i < (2 << xmm); i++ ) + pDst[ i + (2 << xmm) ] = SAT( pSrc[ i * 2 ] - pSrc[ i * 2 + 1 ] ); +} + +static void test_phsubd_c(unsigned int *pDst, unsigned int *pSrc, int xmm) +{ + int i; + + for ( i = 0; i < (1 << xmm); i++ ) + pDst[ i ] = pDst[ i * 2 ] - pDst[ i * 2 + 1 ]; + + for ( i = 0; i < (1 << xmm); i++ ) + pDst[ i + (1 << xmm) ] = pSrc[ i * 2 ] - pSrc[ i * 2 + 1 ]; +} + +static void test_pmulhrsw_c(short *pDst, short *pSrc, int xmm) +{ + int i; + + for ( i = 0; i < (4 << xmm); i++ ) + { + int a = pSrc[ i ] * pDst[ i ]; + pDst[i] = (short)(((a >> 14) + 1) >> 1); + } +} + +static void test_pmaddubsw_c(unsigned char *pDst, signed char *pSrc, int xmm) +{ + int i; + + for ( i = 0; i < (4 << xmm); i++ ) + { + int a = pSrc[ 2 * i ] * pDst[ 2 * i ] + pSrc[ 2 * i + 1 ] * pDst[ 2 * i + 1]; + ((signed short *)pDst)[i] = SAT(a); + } +} + +static void test_pshufb_c(unsigned char *pDst, unsigned char *pSrc, int xmm) +{ + unsigned char bla[16]; + int i; + + memcpy( bla, pDst, ( 8 << xmm ) ); + + for ( i = 0; i < (8 << xmm); i++ ) + pDst[ i ] = (pSrc[ i ] >= 0x80) ? 0 : bla[ pSrc[ i ] & ((1 << (xmm + 3)) - 1) ]; +} + +static void test_palignr_c(unsigned char *pDst, unsigned char *pSrc, int xmm) +{ + int i; + + for ( i = 0; i < 3; i++ ) + pDst[ i + (8 << xmm) - 3 ] = pDst[ i ]; + + for ( i = 3; i < (8 << xmm); i++ ) + pDst[ i - 3 ] = pSrc[ i ]; +} + +static void randomize_args(unsigned char *pDst, unsigned char *pSrc) +{ + int j; + for ( j = 0; j < 16; j++ ) + { + pDst[ j ] = rand() % 256; + pSrc[ j ] = rand() % 256; + } +} + +#define CHECK_FUNCTION(instruction, extension, additionnal, pDst, pSrc) \ + do { \ + unsigned char temp_dst[16]; \ + unsigned char temp_src[16]; \ + randomize_args( pDst, pSrc ); \ + memcpy( temp_dst, pDst, 16 ); \ + memcpy( temp_src, pSrc, 16 ); \ + test_##instruction##_c( pDst, pSrc, additionnal ); \ + test_##instruction##_##extension( temp_dst, temp_src ); \ + assert( !memcmp( pDst, temp_dst, (8 << additionnal) ) ); \ + } while( 0 ) + +#define CHECK_FUNCTIONS(instruction) \ + CHECK_FUNCTION(instruction, mmx, 0, pDst, pSrc); \ + CHECK_FUNCTION(instruction, xmm, 1, pDst, pSrc) + + +void main(int nArgC, char *pArgv[]) +{ + void *pSrc = malloc(16); + void *pDst = malloc(16); + int nIter = atoi( pArgv[ 1 ] ); + int i; + + for ( i = 0; i < nIter; i++ ) + { + CHECK_FUNCTIONS( psignb ); + CHECK_FUNCTIONS( psignw ); + CHECK_FUNCTIONS( psignd ); + + CHECK_FUNCTIONS( pabsb ); + CHECK_FUNCTIONS( pabsw ); + CHECK_FUNCTIONS( pabsd ); + + CHECK_FUNCTIONS( phaddw ); + CHECK_FUNCTIONS( phaddsw ); + CHECK_FUNCTIONS( phaddd ); + + CHECK_FUNCTIONS( phsubw ); + CHECK_FUNCTIONS( phsubsw ); + CHECK_FUNCTIONS( phsubd ); + + CHECK_FUNCTIONS( pmulhrsw ); + CHECK_FUNCTIONS( pmaddubsw ); + + CHECK_FUNCTIONS( pshufb ); + CHECK_FUNCTIONS( palignr ); + } +} \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssse3.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssse3.hex new file mode 100644 index 0000000000..2366d2fda2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/ssse3.hex @@ -0,0 +1,994 @@ +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +0f +6f +02 +67 +0f +6f +08 +0f +38 +1c +c1 +67 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +0f +6f +02 +67 +0f +6f +08 +0f +38 +1d +c1 +67 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +0f +6f +02 +67 +0f +6f +08 +0f +38 +1e +c1 +67 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +f3 +0f +6f +02 +67 +f3 +0f +6f +08 +66 +0f +38 +1c +c1 +67 +f3 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +f3 +0f +6f +02 +67 +f3 +0f +6f +08 +66 +0f +38 +1d +c1 +67 +f3 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +f3 +0f +6f +02 +67 +f3 +0f +6f +08 +66 +0f +38 +1e +c1 +67 +f3 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +0f +6f +02 +67 +0f +6f +08 +0f +38 +08 +c1 +67 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +0f +6f +02 +67 +0f +6f +08 +0f +38 +09 +c1 +67 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +0f +6f +02 +67 +0f +6f +08 +0f +38 +0a +c1 +67 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +f3 +0f +6f +02 +67 +f3 +0f +6f +08 +66 +0f +38 +08 +c1 +67 +f3 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +f3 +0f +6f +02 +67 +f3 +0f +6f +08 +66 +0f +38 +09 +c1 +67 +f3 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +f3 +0f +6f +02 +67 +f3 +0f +6f +08 +66 +0f +38 +0a +c1 +67 +f3 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +0f +6f +02 +67 +0f +6f +08 +0f +38 +01 +c1 +67 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +0f +6f +02 +67 +0f +6f +08 +0f +38 +03 +c1 +67 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +0f +6f +02 +67 +0f +6f +08 +0f +38 +02 +c1 +67 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +f3 +0f +6f +02 +67 +f3 +0f +6f +08 +66 +0f +38 +01 +c1 +67 +f3 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +f3 +0f +6f +02 +67 +f3 +0f +6f +08 +66 +0f +38 +03 +c1 +67 +f3 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +f3 +0f +6f +02 +67 +f3 +0f +6f +08 +66 +0f +38 +02 +c1 +67 +f3 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +0f +6f +02 +67 +0f +6f +08 +0f +38 +05 +c1 +67 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +0f +6f +02 +67 +0f +6f +08 +0f +38 +07 +c1 +67 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +0f +6f +02 +67 +0f +6f +08 +0f +38 +06 +c1 +67 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +f3 +0f +6f +02 +67 +f3 +0f +6f +08 +66 +0f +38 +05 +c1 +67 +f3 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +f3 +0f +6f +02 +67 +f3 +0f +6f +08 +66 +0f +38 +07 +c1 +67 +f3 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +f3 +0f +6f +02 +67 +f3 +0f +6f +08 +66 +0f +38 +06 +c1 +67 +f3 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +0f +6f +02 +67 +0f +6f +08 +0f +38 +0b +c1 +67 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +f3 +0f +6f +02 +67 +f3 +0f +6f +08 +66 +0f +38 +0b +c1 +67 +f3 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +0f +6f +02 +67 +0f +6f +08 +0f +38 +04 +c1 +67 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +f3 +0f +6f +02 +67 +f3 +0f +6f +08 +66 +0f +38 +04 +c1 +67 +f3 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +0f +6f +02 +67 +0f +6f +08 +0f +38 +00 +c1 +67 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +f3 +0f +6f +02 +67 +f3 +0f +6f +08 +66 +0f +38 +00 +c1 +67 +f3 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +0f +6f +02 +67 +0f +6f +08 +0f +3a +0f +c1 +03 +67 +0f +7f +02 +c3 +67 +66 +8b +54 +24 +04 +67 +66 +8b +44 +24 +08 +67 +f3 +0f +6f +02 +67 +f3 +0f +6f +08 +66 +0f +3a +0f +c1 +03 +67 +f3 +0f +7f +02 +c3 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stos.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stos.asm new file mode 100644 index 0000000000..4e9682b033 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stos.asm @@ -0,0 +1,13 @@ +[bits 16] +stosb +stosw +stosd +[bits 32] +stosb +stosw +stosd +[bits 64] +stosb +stosw +stosd +stosq diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stos.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stos.hex new file mode 100644 index 0000000000..b495827e49 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stos.hex @@ -0,0 +1,14 @@ +aa +ab +66 +ab +aa +66 +ab +ab +aa +66 +ab +ab +48 +ab diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/str.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/str.asm new file mode 100644 index 0000000000..3310b9aca8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/str.asm @@ -0,0 +1,4 @@ +[bits 32] +str [esp] +[bits 16] +str [bp] diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/str.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/str.hex new file mode 100644 index 0000000000..82c563c9e8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/str.hex @@ -0,0 +1,8 @@ +0f +00 +0c +24 +0f +00 +4e +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict-err.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict-err.asm new file mode 100644 index 0000000000..3a97062df9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict-err.asm @@ -0,0 +1,5 @@ +bits 64 +add [rax], dword 4 ; illegal; must use dword [eax], 4 +add [rax], strict dword 4 ; illegal; must use dword [eax], strict dword 4 +add [rax], qword 4 ; illegal; must use qword [rax], 4 +add [rax], strict qword 4 ; illegal; must use qword [eax], strict dword 4 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict-err.errwarn new file mode 100644 index 0000000000..ac3b21b874 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict-err.errwarn @@ -0,0 +1,4 @@ +-:2: error: invalid size for operand 1 +-:3: error: invalid size for operand 1 +-:4: error: invalid size for operand 2 +-:5: error: invalid size for operand 2 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict.asm new file mode 100644 index 0000000000..80b2260f04 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict.asm @@ -0,0 +1,163 @@ +bits 32 + +;jmp strict near foo +;jmp near foo +;jmp strict short foo +;jmp short foo +;jmp foo +; +;jz strict near foo +;jz near foo +;jz strict short foo +;jz short foo +;jz foo +; +;foo: + +add eax, 4 +add eax, strict 4 ; NASM generates dword, yasm generates byte +add eax, byte 4 +add eax, strict byte 4 +add eax, dword 4 ; optimized to byte +add eax, strict dword 4 +add eax, 400 +add eax, strict 400 +add eax, byte 400 ; generates warning +add eax, strict byte 400 ; generates warning +add eax, dword 400 ; optimized to byte +add eax, strict dword 400 + +add ebx, 4 +add ebx, strict 4 ; NASM generates dword, yasm generates byte +add ebx, byte 4 +add ebx, strict byte 4 +add ebx, dword 4 ; optimized to byte +add ebx, strict dword 4 +add ebx, 400 +add ebx, strict 400 +add ebx, byte 400 ; generates warning +add ebx, strict byte 400 ; generates warning +add ebx, dword 400 ; optimized to byte +add ebx, strict dword 400 + +add [eax], byte 4 ; same as byte [eax], 4 +add [eax], strict byte 4 ; same as byte [eax], 4 +add [eax], dword 4 ; generates dword [eax], byte 4 +add [eax], strict dword 4 ; generates dword [eax], dword 4 + +add dword [eax], 4 +add dword [eax], strict 4 ; NASM generates dword, yasm generates byte +add dword [eax], byte 4 +add dword [eax], strict byte 4 +add dword [eax], dword 4 ; optimized to byte +add dword [eax], strict dword 4 +add dword [eax], 400 +add dword [eax], strict 400 +add dword [eax], byte 400 ; generates warning +add dword [eax], strict byte 400; generates warning +add dword [eax], dword 400 ; optimized to byte +add dword [eax], strict dword 400 + +push 4 +push strict 4 ; NASM generates dword, yasm generates byte +push byte 4 +push strict byte 4 +push dword 4 ; optimized to byte +push strict dword 4 +push 400 +push strict 400 +push byte 400 ; generates warning +push strict byte 400 ; generates warning +push dword 400 +push strict dword 400 + +imul eax, 4 +imul eax, strict 4 ; NASM generates dword, yasm generates byte +imul eax, byte 4 +imul eax, strict byte 4 +imul eax, dword 4 ; optimized to byte +imul eax, strict dword 4 +imul eax, 400 +imul eax, strict 400 +imul eax, byte 400 ; generates warning +imul eax, strict byte 400 ; generates warning +imul eax, dword 400 +imul eax, strict dword 400 + +%ifndef __NASM_VERSION_ID__ +bits 64 +add rax, 4 +add rax, strict 4 ; NASM generates dword, yasm generates byte +add rax, byte 4 +add rax, strict byte 4 +add rax, dword 4 +add rax, strict dword 4 +add rax, 400 +add rax, strict 400 +add rax, byte 400 ; generates warning +add rax, strict byte 400 ; generates warning +add rax, dword 400 +add rax, strict dword 400 + +add rbx, 4 +add rbx, strict 4 ; NASM generates dword, yasm generates byte +add rbx, byte 4 +add rbx, strict byte 4 +add rbx, dword 4 +add rbx, strict dword 4 +add rbx, 400 +add rbx, strict 400 +add rbx, byte 400 ; generates warning +add rbx, strict byte 400 ; generates warning +add rbx, dword 400 +add rbx, strict dword 400 + +add [rax], byte 4 ; same as byte [rax], 4 +add [rax], strict byte 4 ; same as byte [rax], 4 +add [rax], word 4 ; same as word [rax], 4 +add [rax], strict word 4 ; same as word [rax], strict word 4 + +add dword [rax], 4 +add dword [rax], strict 4 +add dword [rax], byte 4 +add dword [rax], strict byte 4 +add dword [rax], dword 4 +add dword [rax], strict dword 4 +add dword [rax], 400 +add dword [rax], strict 400 +add dword [rax], byte 400 ; generates warning +add dword [rax], strict byte 400; generates warning +add dword [rax], dword 400 +add dword [rax], strict dword 400 + +add qword [rax], 4 +add qword [rax], strict 4 +add qword [rax], byte 4 +add qword [rax], strict byte 4 +add qword [rax], dword 4 +add qword [rax], strict dword 4 +add qword [rax], 400 +add qword [rax], strict 400 +add qword [rax], byte 400 ; generates warning +add qword [rax], strict byte 400; generates warning +add qword [rax], dword 400 +add qword [rax], strict dword 400 + +push 4 +push strict 4 ; NASM generates dword, yasm generates byte +push byte 4 +push strict byte 4 +push dword 4 ; optimized to byte +push strict dword 4 +;push qword 4 ; illegal +;push strict qword 4 ; illegal +push 400 +push strict 400 +push byte 400 ; generates warning +push strict byte 400 ; generates warning +push dword 400 +push strict dword 400 +;push qword 400 ; illegal +;push strict qword 400 ; illegal + +%endif diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict.errwarn new file mode 100644 index 0000000000..b87d3aac05 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict.errwarn @@ -0,0 +1,20 @@ +-:25: warning: value does not fit in signed 8 bit field +-:26: warning: value does not fit in signed 8 bit field +-:38: warning: value does not fit in signed 8 bit field +-:39: warning: value does not fit in signed 8 bit field +-:56: warning: value does not fit in signed 8 bit field +-:57: warning: value does not fit in signed 8 bit field +-:69: warning: value does not fit in signed 8 bit field +-:70: warning: value does not fit in signed 8 bit field +-:82: warning: value does not fit in signed 8 bit field +-:83: warning: value does not fit in signed 8 bit field +-:97: warning: value does not fit in signed 8 bit field +-:98: warning: value does not fit in signed 8 bit field +-:110: warning: value does not fit in signed 8 bit field +-:111: warning: value does not fit in signed 8 bit field +-:128: warning: value does not fit in signed 8 bit field +-:129: warning: value does not fit in signed 8 bit field +-:141: warning: value does not fit in signed 8 bit field +-:142: warning: value does not fit in signed 8 bit field +-:156: warning: value does not fit in signed 8 bit field +-:157: warning: value does not fit in signed 8 bit field diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict.hex new file mode 100644 index 0000000000..3642df6ca4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/strict.hex @@ -0,0 +1,542 @@ +83 +c0 +04 +83 +c0 +04 +83 +c0 +04 +83 +c0 +04 +83 +c0 +04 +05 +04 +00 +00 +00 +05 +90 +01 +00 +00 +05 +90 +01 +00 +00 +83 +c0 +90 +83 +c0 +90 +05 +90 +01 +00 +00 +05 +90 +01 +00 +00 +83 +c3 +04 +83 +c3 +04 +83 +c3 +04 +83 +c3 +04 +83 +c3 +04 +81 +c3 +04 +00 +00 +00 +81 +c3 +90 +01 +00 +00 +81 +c3 +90 +01 +00 +00 +83 +c3 +90 +83 +c3 +90 +81 +c3 +90 +01 +00 +00 +81 +c3 +90 +01 +00 +00 +80 +00 +04 +80 +00 +04 +83 +00 +04 +81 +00 +04 +00 +00 +00 +83 +00 +04 +83 +00 +04 +83 +00 +04 +83 +00 +04 +83 +00 +04 +81 +00 +04 +00 +00 +00 +81 +00 +90 +01 +00 +00 +81 +00 +90 +01 +00 +00 +83 +00 +90 +83 +00 +90 +81 +00 +90 +01 +00 +00 +81 +00 +90 +01 +00 +00 +6a +04 +6a +04 +6a +04 +6a +04 +6a +04 +68 +04 +00 +00 +00 +68 +90 +01 +00 +00 +68 +90 +01 +00 +00 +6a +90 +6a +90 +68 +90 +01 +00 +00 +68 +90 +01 +00 +00 +6b +c0 +04 +6b +c0 +04 +6b +c0 +04 +6b +c0 +04 +6b +c0 +04 +69 +c0 +04 +00 +00 +00 +69 +c0 +90 +01 +00 +00 +69 +c0 +90 +01 +00 +00 +6b +c0 +90 +6b +c0 +90 +69 +c0 +90 +01 +00 +00 +69 +c0 +90 +01 +00 +00 +48 +83 +c0 +04 +48 +83 +c0 +04 +48 +83 +c0 +04 +48 +83 +c0 +04 +48 +83 +c0 +04 +48 +05 +04 +00 +00 +00 +48 +05 +90 +01 +00 +00 +48 +05 +90 +01 +00 +00 +48 +83 +c0 +90 +48 +83 +c0 +90 +48 +05 +90 +01 +00 +00 +48 +05 +90 +01 +00 +00 +48 +83 +c3 +04 +48 +83 +c3 +04 +48 +83 +c3 +04 +48 +83 +c3 +04 +48 +83 +c3 +04 +48 +81 +c3 +04 +00 +00 +00 +48 +81 +c3 +90 +01 +00 +00 +48 +81 +c3 +90 +01 +00 +00 +48 +83 +c3 +90 +48 +83 +c3 +90 +48 +81 +c3 +90 +01 +00 +00 +48 +81 +c3 +90 +01 +00 +00 +80 +00 +04 +80 +00 +04 +66 +83 +00 +04 +66 +81 +00 +04 +00 +83 +00 +04 +83 +00 +04 +83 +00 +04 +83 +00 +04 +83 +00 +04 +81 +00 +04 +00 +00 +00 +81 +00 +90 +01 +00 +00 +81 +00 +90 +01 +00 +00 +83 +00 +90 +83 +00 +90 +81 +00 +90 +01 +00 +00 +81 +00 +90 +01 +00 +00 +48 +83 +00 +04 +48 +83 +00 +04 +48 +83 +00 +04 +48 +83 +00 +04 +48 +83 +00 +04 +48 +81 +00 +04 +00 +00 +00 +48 +81 +00 +90 +01 +00 +00 +48 +81 +00 +90 +01 +00 +00 +48 +83 +00 +90 +48 +83 +00 +90 +48 +81 +00 +90 +01 +00 +00 +48 +81 +00 +90 +01 +00 +00 +6a +04 +6a +04 +6a +04 +6a +04 +6a +04 +68 +04 +00 +00 +00 +68 +90 +01 +00 +00 +68 +90 +01 +00 +00 +6a +90 +6a +90 +68 +90 +01 +00 +00 +68 +90 +01 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stringseg.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stringseg.asm new file mode 100644 index 0000000000..2d15f08685 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stringseg.asm @@ -0,0 +1,5 @@ +es stosb +es stosw +fs stosd +gs movsb +es fs gs movsw diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stringseg.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stringseg.errwarn new file mode 100644 index 0000000000..53f9d69847 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stringseg.errwarn @@ -0,0 +1 @@ +-:5: warning: multiple segment overrides, using leftmost diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stringseg.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stringseg.hex new file mode 100644 index 0000000000..9b8ef854f2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/stringseg.hex @@ -0,0 +1,11 @@ +26 +aa +26 +ab +66 +64 +ab +65 +a4 +26 +a5 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/svm.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/svm.asm new file mode 100644 index 0000000000..a2fa295c86 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/svm.asm @@ -0,0 +1,39 @@ +[bits 64] +rdtscp +clgi +invlpga +invlpga [rax], ecx +invlpga [eax], ecx +; invlpga [ax], ecx ; invalid +skinit +; skinit [rax] ; invalid +skinit [eax] +stgi +vmload +vmload [rax] +vmload [eax] +vmmcall +vmrun +vmrun [rax] +vmrun [eax] +vmsave +vmsave [rax] +vmsave [eax] + +[bits 32] +invlpga +invlpga [eax], ecx +invlpga [ax], ecx +skinit +skinit [eax] +; skinit [ax] ; invalid +vmload +vmload [eax] +vmload [ax] +vmrun +vmrun [eax] +vmrun [ax] +vmsave +vmsave [eax] +vmsave [ax] + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/svm.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/svm.hex new file mode 100644 index 0000000000..e4517a2f09 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/svm.hex @@ -0,0 +1,104 @@ +0f +01 +f9 +0f +01 +dd +0f +01 +df +0f +01 +df +67 +0f +01 +df +0f +01 +de +0f +01 +de +0f +01 +dc +0f +01 +da +0f +01 +da +67 +0f +01 +da +0f +01 +d9 +0f +01 +d8 +0f +01 +d8 +67 +0f +01 +d8 +0f +01 +db +0f +01 +db +67 +0f +01 +db +0f +01 +df +0f +01 +df +67 +0f +01 +df +0f +01 +de +0f +01 +de +0f +01 +da +0f +01 +da +67 +0f +01 +da +0f +01 +d8 +0f +01 +d8 +67 +0f +01 +d8 +0f +01 +db +0f +01 +db +67 +0f +01 +db diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/twobytemem.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/twobytemem.asm new file mode 100644 index 0000000000..8a6dbecb47 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/twobytemem.asm @@ -0,0 +1,15 @@ +lgdt [0] +lidt [0x100] +sgdt [0x1000] +sidt [0x2004] +fstenv [0x4] +fsave [0x800] +invlpg [0xffff0000] +fxsave [0x200] +fxrstor [0x400] +prefetchnta [0x4] +prefetcht0 [0x8] +prefetcht1 [0xC] +prefetcht2 [0x10] +prefetch [0x50] +prefetchw [0x60] diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/twobytemem.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/twobytemem.errwarn new file mode 100644 index 0000000000..e0cc27f8bc --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/twobytemem.errwarn @@ -0,0 +1 @@ +-:7: warning: value does not fit in 16 bit field diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/twobytemem.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/twobytemem.hex new file mode 100644 index 0000000000..c7fc297c3b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/twobytemem.hex @@ -0,0 +1,75 @@ +0f +01 +16 +00 +00 +0f +01 +1e +00 +01 +0f +01 +06 +00 +10 +0f +01 +0e +04 +20 +9b +d9 +36 +04 +00 +9b +dd +36 +00 +08 +0f +01 +3e +00 +00 +0f +ae +06 +00 +02 +0f +ae +0e +00 +04 +0f +18 +06 +04 +00 +0f +18 +0e +08 +00 +0f +18 +16 +0c +00 +0f +18 +1e +10 +00 +0f +0d +06 +50 +00 +0f +0d +0e +60 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vmx-err.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vmx-err.asm new file mode 100644 index 0000000000..8786355db2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vmx-err.asm @@ -0,0 +1,8 @@ +[bits 32] +;vmread [ebx], rcx +;vmwrite rbp, [ebp] + +[bits 64] +vmread [rax], eax +vmwrite eax, [rcx] + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vmx-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vmx-err.errwarn new file mode 100644 index 0000000000..7db4b3cbad --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vmx-err.errwarn @@ -0,0 +1,2 @@ +-:6: error: invalid size for operand 2 +-:7: error: invalid size for operand 1 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vmx.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vmx.asm new file mode 100644 index 0000000000..a8669b19e7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vmx.asm @@ -0,0 +1,25 @@ +[bits 32] +vmcall +vmclear [0] +vmlaunch +vmresume +vmptrld [0] +vmptrst [eax] +vmread [ebx], ecx +vmwrite ebp, [ebp] +vmxoff +vmxon [esi] + +[bits 64] +vmcall +vmclear [0] +vmlaunch +vmresume +vmptrld [0] +vmptrst [rdx] +;vmread [rax], eax -- invalid +vmread [rax], rdx +vmwrite rax, [rcx] +vmxoff +vmxon [rsi] + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vmx.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vmx.hex new file mode 100644 index 0000000000..46c9416ed5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vmx.hex @@ -0,0 +1,83 @@ +0f +01 +c1 +66 +0f +c7 +35 +00 +00 +00 +00 +0f +01 +c2 +0f +01 +c3 +0f +c7 +35 +00 +00 +00 +00 +0f +c7 +38 +0f +78 +0b +0f +79 +6d +00 +0f +01 +c4 +f3 +0f +c7 +36 +0f +01 +c1 +66 +0f +c7 +34 +25 +00 +00 +00 +00 +0f +01 +c2 +0f +01 +c3 +0f +c7 +34 +25 +00 +00 +00 +00 +0f +c7 +3a +0f +78 +10 +0f +79 +01 +0f +01 +c4 +f3 +0f +c7 +36 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib-err.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib-err.asm new file mode 100644 index 0000000000..ee30603822 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib-err.asm @@ -0,0 +1,14 @@ +; Errors caught during instruction matching + +[bits 64] + +vpgatherdq xmm0,xmm0,xmm0 ; no reg EA template + +vpgatherdq xmm0,[ymm0],xmm0 ; not a VSIB256 template +vpgatherqq ymm0,[xmm0],ymm0 ; not a VSIB128 template + +vpgatherdq xmm0,[rel 0],xmm0 +vpgatherdq xmm0,[0],xmm0 +vpgatherdq xmm0,[rax],xmm0 +vpgatherdq xmm0,[rax+rbx],xmm0 + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib-err.errwarn new file mode 100644 index 0000000000..8d2d084fd8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib-err.errwarn @@ -0,0 +1,7 @@ +-:5: error: invalid combination of opcode and operands +-:7: error: invalid combination of opcode and operands +-:8: error: invalid combination of opcode and operands +-:10: error: invalid combination of opcode and operands +-:11: error: invalid combination of opcode and operands +-:12: error: invalid combination of opcode and operands +-:13: error: invalid combination of opcode and operands diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib.asm new file mode 100644 index 0000000000..fc2a705b02 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib.asm @@ -0,0 +1,114 @@ +[bits 16] +; test promotion to 32-bit address size +vpgatherdq xmm0,[xmm0],xmm0 ; 67 c4 e2 f9 90 04 05 00 00 00 00 +vpgatherqq ymm0,[ymm0],ymm0 ; 67 c4 e2 fd 91 04 05 00 00 00 00 + +[bits 32] +; test promotion from base to index +vpgatherdq xmm0,[xmm0],xmm0 ; c4 e2 f9 90 04 05 00 00 00 00 +vpgatherqq ymm0,[ymm0],ymm0 ; c4 e2 fd 91 04 05 00 00 00 00 + +; various combinations +vpgatherdq xmm0,[ecx+xmm5],xmm0 ; c4 e2 f9 90 04 29 +vpgatherqq ymm0,[ecx+ymm5],ymm0 ; c4 e2 fd 91 04 29 +vpgatherdq xmm0,[ebp+xmm5],xmm0 ; c4 e2 f9 90 44 2d 00 +vpgatherqq ymm0,[ebp+ymm5],ymm0 ; c4 e2 fd 91 44 2d 00 + +vpgatherdq xmm0,[xmm5+ecx],xmm0 ; c4 e2 f9 90 04 29 +vpgatherqq ymm0,[ymm5+ecx],ymm0 ; c4 e2 fd 91 04 29 +vpgatherdq xmm0,[xmm5+ebp],xmm0 ; c4 e2 f9 90 44 2d 00 +vpgatherqq ymm0,[ymm5+ebp],ymm0 ; c4 e2 fd 91 44 2d 00 + +vpgatherdq xmm0,[ecx+xmm5*1],xmm0 ; c4 e2 f9 90 04 29 +vpgatherqq ymm0,[ecx+ymm5*1],ymm0 ; c4 e2 fd 91 04 29 +vpgatherdq xmm0,[ebp+xmm5*1],xmm0 ; c4 e2 f9 90 44 2d 00 +vpgatherqq ymm0,[ebp+ymm5*1],ymm0 ; c4 e2 fd 91 44 2d 00 + +vpgatherdq xmm0,[xmm5+ecx*1],xmm0 ; c4 e2 f9 90 04 29 +vpgatherqq ymm0,[ymm5+ecx*1],ymm0 ; c4 e2 fd 91 04 29 +vpgatherdq xmm0,[xmm5+ebp*1],xmm0 ; c4 e2 f9 90 44 2d 00 +vpgatherqq ymm0,[ymm5+ebp*1],ymm0 ; c4 e2 fd 91 44 2d 00 + +vpgatherdq xmm0,[nosplit 12345678h + xmm5*1],xmm0; c4 e2 f9 90 04 2d 78 56 34 12 +vpgatherqq ymm0,[nosplit 12345678h + ymm5*1],ymm0; c4 e2 fd 91 04 2d 78 56 34 12 + +vpgatherdq xmm0,[byte ecx + 12 + xmm5*2],xmm0 ; c4 e2 f9 90 44 69 0c +vpgatherqq ymm0,[byte ecx + 12 + ymm5*2],ymm0 ; c4 e2 fd 91 44 69 0c +vpgatherdq xmm0,[byte ebp + 12 + xmm5*2],xmm0 ; c4 e2 f9 90 44 6d 0c +vpgatherqq ymm0,[byte ebp + 12 + ymm5*2],ymm0 ; c4 e2 fd 91 44 6d 0c + +vpgatherdq xmm0,[dword ecx + 12 + xmm5*4],xmm0 ; c4 e2 f9 90 84 a9 0c 00 00 00 +vpgatherqq ymm0,[dword ecx + 12 + ymm5*4],ymm0 ; c4 e2 fd 91 84 a9 0c 00 00 00 +vpgatherdq xmm0,[dword ebp + 12 + xmm5*4],xmm0 ; c4 e2 f9 90 84 ad 0c 00 00 00 +vpgatherqq ymm0,[dword ebp + 12 + ymm5*4],ymm0 ; c4 e2 fd 91 84 ad 0c 00 00 00 + +vpgatherdq xmm0,[ecx + 12345678h + xmm5*4],xmm0 ; c4 e2 f9 90 84 a9 78 56 34 12 +vpgatherqq ymm0,[ecx + 12345678h + ymm5*4],ymm0 ; c4 e2 fd 91 84 a9 78 56 34 12 +vpgatherdq xmm0,[ebp + 12345678h + xmm5*4],xmm0 ; c4 e2 f9 90 84 ad 78 56 34 12 +vpgatherqq ymm0,[ebp + 12345678h + ymm5*4],ymm0 ; c4 e2 fd 91 84 ad 78 56 34 12 + +vpgatherdq xmm0,[ecx + 12 + xmm5*4],xmm0 ; c4 e2 f9 90 44 a9 0c +vpgatherqq ymm0,[ecx + 12 + ymm5*4],ymm0 ; c4 e2 fd 91 44 a9 0c +vpgatherdq xmm0,[ebp + 12 + xmm5*4],xmm0 ; c4 e2 f9 90 44 ad 0c +vpgatherqq ymm0,[ebp + 12 + ymm5*4],ymm0 ; c4 e2 fd 91 44 ad 0c + +vpgatherdq xmm0,[dword 12 + xmm5*8],xmm0 ; c4 e2 f9 90 04 ed 0c 00 00 00 +vpgatherqq ymm0,[dword 12 + ymm5*8],ymm0 ; c4 e2 fd 91 04 ed 0c 00 00 00 +vpgatherdq xmm0,[12 + xmm5*8],xmm0 ; c4 e2 f9 90 04 ed 0c 00 00 00 +vpgatherqq ymm0,[12 + ymm5*8],ymm0 ; c4 e2 fd 91 04 ed 0c 00 00 00 + +[bits 64] +; test promotion from base to index +vpgatherdq xmm0,[xmm0],xmm0 ; c4 e2 f9 90 04 05 00 00 00 00 +vpgatherqq ymm0,[ymm0],ymm0 ; c4 e2 fd 91 04 05 00 00 00 00 + +; various combinations +vpgatherdq xmm0,[rcx+xmm5],xmm0 ; c4 e2 f9 90 04 29 +vpgatherqq ymm0,[rcx+ymm13],ymm0 ; c4 a2 fd 91 04 29 +vpgatherdq xmm0,[r13+xmm13],xmm0 ; c4 82 f9 90 44 2d 00 +vpgatherqq ymm0,[r13+ymm5],ymm0 ; c4 c2 fd 91 44 2d 00 + +vpgatherdq xmm0,[xmm5+rcx],xmm0 ; c4 e2 f9 90 04 29 +vpgatherqq ymm0,[ymm13+rcx],ymm0 ; c4 a2 fd 91 04 29 +vpgatherdq xmm0,[xmm13+r13],xmm0 ; c4 82 f9 90 44 2d 00 +vpgatherqq ymm0,[ymm5+r13],ymm0 ; c4 c2 fd 91 44 2d 00 + +vpgatherdq xmm0,[rcx+xmm5*1],xmm0 ; c4 e2 f9 90 04 29 +vpgatherqq ymm0,[rcx+ymm13*1],ymm0 ; c4 a2 fd 91 04 29 +vpgatherdq xmm0,[r13+xmm13*1],xmm0 ; c4 82 f9 90 44 2d 00 +vpgatherqq ymm0,[r13+ymm5*1],ymm0 ; c4 c2 fd 91 44 2d 00 + +vpgatherdq xmm0,[xmm5+rcx*1],xmm0 ; c4 e2 f9 90 04 29 +vpgatherqq ymm0,[ymm13+rcx*1],ymm0 ; c4 a2 fd 91 04 29 +vpgatherdq xmm0,[xmm13+r13*1],xmm0 ; c4 82 f9 90 44 2d 00 +vpgatherqq ymm0,[ymm5+r13*1],ymm0 ; c4 c2 fd 91 44 2d 00 + +vpgatherdq xmm0,[nosplit 12345678h + xmm5*1],xmm0; c4 e2 f9 90 04 2d 78 56 34 12 +vpgatherqq ymm0,[nosplit 12345678h + ymm5*1],ymm0; c4 e2 fd 91 04 2d 78 56 34 12 + +vpgatherdq xmm0,[byte rcx + 12 + xmm5*2],xmm0 ; c4 e2 f9 90 44 69 0c +vpgatherqq ymm0,[byte rcx + 12 + ymm13*2],ymm0 ; c4 a2 fd 91 44 69 0c +vpgatherdq xmm0,[byte r13 + 12 + xmm13*2],xmm0 ; c4 82 f9 90 44 6d 0c +vpgatherqq ymm0,[byte r13 + 12 + ymm5*2],ymm0 ; c4 c2 fd 91 44 6d 0c + +vpgatherdq xmm0,[dword rcx + 12 + xmm5*4],xmm0 ; c4 e2 f9 90 84 a9 0c 00 00 00 +vpgatherqq ymm0,[dword rcx + 12 + ymm13*4],ymm0 ; c4 a2 fd 91 84 a9 0c 00 00 00 +vpgatherdq xmm0,[dword r13 + 12 + xmm13*4],xmm0 ; c4 82 f9 90 84 ad 0c 00 00 00 +vpgatherqq ymm0,[dword r13 + 12 + ymm5*4],ymm0 ; c4 c2 fd 91 84 ad 0c 00 00 00 + +vpgatherdq xmm0,[rcx + 12345678h + xmm5*4],xmm0 ; c4 e2 f9 90 84 a9 78 56 34 12 +vpgatherqq ymm0,[rcx + 12345678h + ymm13*4],ymm0; c4 a2 fd 91 84 a9 78 56 34 12 +vpgatherdq xmm0,[r13 + 12345678h + xmm13*4],xmm0; c4 82 f9 90 84 ad 78 56 34 12 +vpgatherqq ymm0,[r13 + 12345678h + ymm5*4],ymm0 ; c4 c2 fd 91 84 ad 78 56 34 12 + +vpgatherdq xmm0,[rcx + 12 + xmm5*4],xmm0 ; c4 e2 f9 90 44 a9 0c +vpgatherqq ymm0,[rcx + 12 + ymm13*4],ymm0 ; c4 a2 fd 91 44 a9 0c +vpgatherdq xmm0,[r13 + 12 + xmm13*4],xmm0 ; c4 82 f9 90 44 ad 0c +vpgatherqq ymm0,[r13 + 12 + ymm5*4],ymm0 ; c4 c2 fd 91 44 ad 0c + +vpgatherdq xmm0,[dword 12 + xmm5*8],xmm0 ; c4 e2 f9 90 04 ed 0c 00 00 00 +vpgatherqq ymm0,[dword 12 + ymm13*8],ymm0 ; c4 a2 fd 91 04 ed 0c 00 00 00 +vpgatherdq xmm0,[12 + xmm13*8],xmm0 ; c4 a2 f9 90 04 ed 0c 00 00 00 +vpgatherqq ymm0,[12 + ymm5*8],ymm0 ; c4 e2 fd 91 04 ed 0c 00 00 00 + + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib.hex new file mode 100644 index 0000000000..7dfde8861a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib.hex @@ -0,0 +1,662 @@ +67 +c4 +e2 +f9 +90 +04 +05 +00 +00 +00 +00 +67 +c4 +e2 +fd +91 +04 +05 +00 +00 +00 +00 +c4 +e2 +f9 +90 +04 +05 +00 +00 +00 +00 +c4 +e2 +fd +91 +04 +05 +00 +00 +00 +00 +c4 +e2 +f9 +90 +04 +29 +c4 +e2 +fd +91 +04 +29 +c4 +e2 +f9 +90 +44 +2d +00 +c4 +e2 +fd +91 +44 +2d +00 +c4 +e2 +f9 +90 +04 +29 +c4 +e2 +fd +91 +04 +29 +c4 +e2 +f9 +90 +44 +2d +00 +c4 +e2 +fd +91 +44 +2d +00 +c4 +e2 +f9 +90 +04 +29 +c4 +e2 +fd +91 +04 +29 +c4 +e2 +f9 +90 +44 +2d +00 +c4 +e2 +fd +91 +44 +2d +00 +c4 +e2 +f9 +90 +04 +29 +c4 +e2 +fd +91 +04 +29 +c4 +e2 +f9 +90 +44 +2d +00 +c4 +e2 +fd +91 +44 +2d +00 +c4 +e2 +f9 +90 +04 +2d +78 +56 +34 +12 +c4 +e2 +fd +91 +04 +2d +78 +56 +34 +12 +c4 +e2 +f9 +90 +44 +69 +0c +c4 +e2 +fd +91 +44 +69 +0c +c4 +e2 +f9 +90 +44 +6d +0c +c4 +e2 +fd +91 +44 +6d +0c +c4 +e2 +f9 +90 +84 +a9 +0c +00 +00 +00 +c4 +e2 +fd +91 +84 +a9 +0c +00 +00 +00 +c4 +e2 +f9 +90 +84 +ad +0c +00 +00 +00 +c4 +e2 +fd +91 +84 +ad +0c +00 +00 +00 +c4 +e2 +f9 +90 +84 +a9 +78 +56 +34 +12 +c4 +e2 +fd +91 +84 +a9 +78 +56 +34 +12 +c4 +e2 +f9 +90 +84 +ad +78 +56 +34 +12 +c4 +e2 +fd +91 +84 +ad +78 +56 +34 +12 +c4 +e2 +f9 +90 +44 +a9 +0c +c4 +e2 +fd +91 +44 +a9 +0c +c4 +e2 +f9 +90 +44 +ad +0c +c4 +e2 +fd +91 +44 +ad +0c +c4 +e2 +f9 +90 +04 +ed +0c +00 +00 +00 +c4 +e2 +fd +91 +04 +ed +0c +00 +00 +00 +c4 +e2 +f9 +90 +04 +ed +0c +00 +00 +00 +c4 +e2 +fd +91 +04 +ed +0c +00 +00 +00 +c4 +e2 +f9 +90 +04 +05 +00 +00 +00 +00 +c4 +e2 +fd +91 +04 +05 +00 +00 +00 +00 +c4 +e2 +f9 +90 +04 +29 +c4 +a2 +fd +91 +04 +29 +c4 +82 +f9 +90 +44 +2d +00 +c4 +c2 +fd +91 +44 +2d +00 +c4 +e2 +f9 +90 +04 +29 +c4 +a2 +fd +91 +04 +29 +c4 +82 +f9 +90 +44 +2d +00 +c4 +c2 +fd +91 +44 +2d +00 +c4 +e2 +f9 +90 +04 +29 +c4 +a2 +fd +91 +04 +29 +c4 +82 +f9 +90 +44 +2d +00 +c4 +c2 +fd +91 +44 +2d +00 +c4 +e2 +f9 +90 +04 +29 +c4 +a2 +fd +91 +04 +29 +c4 +82 +f9 +90 +44 +2d +00 +c4 +c2 +fd +91 +44 +2d +00 +c4 +e2 +f9 +90 +04 +2d +78 +56 +34 +12 +c4 +e2 +fd +91 +04 +2d +78 +56 +34 +12 +c4 +e2 +f9 +90 +44 +69 +0c +c4 +a2 +fd +91 +44 +69 +0c +c4 +82 +f9 +90 +44 +6d +0c +c4 +c2 +fd +91 +44 +6d +0c +c4 +e2 +f9 +90 +84 +a9 +0c +00 +00 +00 +c4 +a2 +fd +91 +84 +a9 +0c +00 +00 +00 +c4 +82 +f9 +90 +84 +ad +0c +00 +00 +00 +c4 +c2 +fd +91 +84 +ad +0c +00 +00 +00 +c4 +e2 +f9 +90 +84 +a9 +78 +56 +34 +12 +c4 +a2 +fd +91 +84 +a9 +78 +56 +34 +12 +c4 +82 +f9 +90 +84 +ad +78 +56 +34 +12 +c4 +c2 +fd +91 +84 +ad +78 +56 +34 +12 +c4 +e2 +f9 +90 +44 +a9 +0c +c4 +a2 +fd +91 +44 +a9 +0c +c4 +82 +f9 +90 +44 +ad +0c +c4 +c2 +fd +91 +44 +ad +0c +c4 +e2 +f9 +90 +04 +ed +0c +00 +00 +00 +c4 +a2 +fd +91 +04 +ed +0c +00 +00 +00 +c4 +a2 +f9 +90 +04 +ed +0c +00 +00 +00 +c4 +e2 +fd +91 +04 +ed +0c +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib2-err.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib2-err.asm new file mode 100644 index 0000000000..7e3ac55e6d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib2-err.asm @@ -0,0 +1,19 @@ +; Errors caught during EA checking + +[bits 32] +vpgatherqq ymm0,[ymm0+ecx*2],ymm0 + +[bits 64] +addpd xmm0,[xmm0] ; not a VSIB128 template +addpd xmm0,[ymm0] ; not a VSIB256 template + +[bits 32] +vpgatherdq xmm0,[bp+xmm0],xmm0 + +vpgatherdq xmm0,[xmm0+ymm0],xmm0 + +vpgatherqq ymm0,[word ymm0],ymm0 + +vpgatherqq ymm0,[byte ymm0],ymm0 + + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib2-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib2-err.errwarn new file mode 100644 index 0000000000..877ce62e1f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/vsib2-err.errwarn @@ -0,0 +1,7 @@ +-:4: error: invalid effective address +-:7: error: invalid effective address +-:8: error: invalid effective address +-:11: error: invalid effective address +-:13: error: invalid effective address +-:15: error: invalid effective address +-:17: warning: invalid displacement size; fixed diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/x86_test.sh b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/x86_test.sh new file mode 100755 index 0000000000..a4fd2e37df --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/x86_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh x86_test modules/arch/x86/tests "x86 arch" "-f bin" "" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/x86label.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/x86label.asm new file mode 100644 index 0000000000..66e01d954d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/x86label.asm @@ -0,0 +1,2 @@ +and_label: +jmp and_label diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/x86label.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/x86label.hex new file mode 100644 index 0000000000..2debae8063 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/x86label.hex @@ -0,0 +1,2 @@ +eb +fe diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xchg64.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xchg64.asm new file mode 100644 index 0000000000..794d4f1cc4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xchg64.asm @@ -0,0 +1,32 @@ +[bits 64] +xchg ax, ax +xchg ax, bx +xchg bx, ax +xchg eax, eax +xchg eax, ebx +xchg ebx, eax +xchg rax, rax +xchg rax, rbx +xchg rbx, rax + +xchg al, al +xchg al, r8b +xchg r8b, al + +xchg ax, ax +xchg ax, r8w +xchg r8w, ax +xchg ax, r9w +xchg r9w, ax + +xchg eax, eax +xchg eax, r8d +xchg r8d, eax +xchg eax, r9d +xchg r9d, eax + +xchg rax, rax +xchg rax, r8 +xchg r8, rax +xchg rax, r9 +xchg r9, rax diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xchg64.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xchg64.hex new file mode 100644 index 0000000000..44adfca85c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xchg64.hex @@ -0,0 +1,56 @@ +66 +90 +66 +93 +66 +93 +87 +c0 +93 +93 +90 +48 +93 +48 +93 +86 +c0 +44 +86 +c0 +41 +86 +c0 +66 +90 +66 +41 +90 +66 +41 +90 +66 +41 +91 +66 +41 +91 +87 +c0 +41 +90 +41 +90 +41 +91 +41 +91 +90 +49 +90 +49 +90 +49 +91 +49 +91 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xmm64.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xmm64.asm new file mode 100644 index 0000000000..4a963f5329 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xmm64.asm @@ -0,0 +1,3 @@ +[bits 64] +xorps xmm2, xmm2 +xorps xmm10, xmm10 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xmm64.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xmm64.hex new file mode 100644 index 0000000000..c387aa2222 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xmm64.hex @@ -0,0 +1,7 @@ +0f +57 +d2 +45 +0f +57 +d2 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-all.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-all.asm new file mode 100644 index 0000000000..db5dabf0a8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-all.asm @@ -0,0 +1,266 @@ +; Instructions are ordered in XOP databook order +; BITS=16 to minimize output length +[bits 16] +vfrczpd xmm1, xmm2 ; 8F E9 78 81 312 +vfrczpd xmm1, [0] ; 8F E9 78 81 016 00 00 +vfrczpd xmm1, dqword [0] ; 8F E9 78 81 016 00 00 +vfrczpd ymm1, ymm2 ; 8F E9 7C 81 312 +vfrczpd ymm1, [0] ; 8F E9 7C 81 016 00 00 +vfrczpd ymm1, yword [0] ; 8F E9 7C 81 016 00 00 + +vfrczps xmm1, xmm2 ; 8F E9 78 80 312 +vfrczps xmm1, [0] ; 8F E9 78 80 016 00 00 +vfrczps xmm1, dqword [0] ; 8F E9 78 80 016 00 00 +vfrczps ymm1, ymm2 ; 8F E9 7C 80 312 +vfrczps ymm1, [0] ; 8F E9 7C 80 016 00 00 +vfrczps ymm1, yword [0] ; 8F E9 7C 80 016 00 00 + +vfrczsd xmm1, xmm2 ; 8F E9 78 83 312 +vfrczsd xmm1, [0] ; 8F E9 78 83 016 00 00 +vfrczsd xmm1, qword [0] ; 8F E9 78 83 016 00 00 + +vfrczss xmm1, xmm2 ; 8F E9 78 82 312 +vfrczss xmm1, [0] ; 8F E9 78 82 016 00 00 +vfrczss xmm1, dword [0] ; 8F E9 78 82 016 00 00 + +vpcmov xmm1, xmm2, xmm3, xmm4 ; 8F E8 68 A2 313 40 /or/ 8F E8 E8 A2 314 30 +vpcmov xmm1, xmm2, xmm3, [0] ; 8F E8 E8 A2 016 00 00 30 +vpcmov xmm1, xmm2, xmm3, dqword [0] ; 8F E8 E8 A2 016 00 00 30 +vpcmov xmm1, xmm2, [0], xmm4 ; 8F E8 68 A2 016 00 00 40 +vpcmov xmm1, xmm2, dqword [0], xmm4 ; 8F E8 68 A2 016 00 00 40 +vpcmov ymm1, ymm2, ymm3, ymm4 ; 8F E8 6C A2 313 40 /or/ 8F E8 EC A2 314 30 +vpcmov ymm1, ymm2, ymm3, [0] ; 8F E8 EC A2 016 00 00 30 +vpcmov ymm1, ymm2, ymm3, yword [0] ; 8F E8 EC A2 016 00 00 30 +vpcmov ymm1, ymm2, [0], ymm4 ; 8F E8 6C A2 016 00 00 40 +vpcmov ymm1, ymm2, yword [0], ymm4 ; 8F E8 6C A2 016 00 00 40 + +vpcomb xmm1, xmm4, xmm7, 5 ; 8F E8 58 CC 317 05 +vpcomb xmm2, xmm5, [0], byte 5 ; 8F E8 50 CC 026 00 00 05 +vpcomb xmm3, xmm6, dqword [0], 5 ; 8F E8 48 CC 036 00 00 05 + +vpcomd xmm1, xmm4, xmm7, 5 ; 8F E8 58 CE 317 05 +vpcomd xmm2, xmm5, [0], byte 5 ; 8F E8 50 CE 026 00 00 05 +vpcomd xmm3, xmm6, dqword [0], 5 ; 8F E8 48 CE 036 00 00 05 + +vpcomq xmm1, xmm4, xmm7, 5 ; 8F E8 58 CF 317 05 +vpcomq xmm2, xmm5, [0], byte 5 ; 8F E8 50 CF 026 00 00 05 +vpcomq xmm3, xmm6, dqword [0], 5 ; 8F E8 48 CF 036 00 00 05 + +vpcomub xmm1, xmm4, xmm7, 5 ; 8F E8 58 EC 317 05 +vpcomub xmm2, xmm5, [0], byte 5 ; 8F E8 50 EC 026 00 00 05 +vpcomub xmm3, xmm6, dqword [0], 5 ; 8F E8 48 EC 036 00 00 05 + +vpcomud xmm1, xmm4, xmm7, 5 ; 8F E8 58 EE 317 05 +vpcomud xmm2, xmm5, [0], byte 5 ; 8F E8 50 EE 026 00 00 05 +vpcomud xmm3, xmm6, dqword [0], 5 ; 8F E8 48 EE 036 00 00 05 + +vpcomuq xmm1, xmm4, xmm7, 5 ; 8F E8 58 EF 317 05 +vpcomuq xmm2, xmm5, [0], byte 5 ; 8F E8 50 EF 026 00 00 05 +vpcomuq xmm3, xmm6, dqword [0], 5 ; 8F E8 48 EF 036 00 00 05 + +vpcomuw xmm1, xmm4, xmm7, 5 ; 8F E8 58 ED 317 05 +vpcomuw xmm2, xmm5, [0], byte 5 ; 8F E8 50 ED 026 00 00 05 +vpcomuw xmm3, xmm6, dqword [0], 5 ; 8F E8 48 ED 036 00 00 05 + +vpcomw xmm1, xmm4, xmm7, 5 ; 8F E8 58 CD 317 05 +vpcomw xmm2, xmm5, [0], byte 5 ; 8F E8 50 CD 026 00 00 05 +vpcomw xmm3, xmm6, dqword [0], 5 ; 8F E8 48 CD 036 00 00 05 + +vphaddbd xmm1, xmm2 ; 8F E9 78 C2 312 +vphaddbd xmm1, [0] ; 8F E9 78 C2 016 00 00 +vphaddbd xmm1, dqword [0] ; 8F E9 78 C2 016 00 00 + +vphaddbq xmm1, xmm2 ; 8F E9 78 C3 312 +vphaddbq xmm1, [0] ; 8F E9 78 C3 016 00 00 +vphaddbq xmm1, dqword [0] ; 8F E9 78 C3 016 00 00 + +vphaddbw xmm1, xmm2 ; 8F E9 78 C1 312 +vphaddbw xmm1, [0] ; 8F E9 78 C1 016 00 00 +vphaddbw xmm1, dqword [0] ; 8F E9 78 C1 016 00 00 + +vphadddq xmm1, xmm2 ; 8F E9 78 CB 312 +vphadddq xmm1, [0] ; 8F E9 78 CB 016 00 00 +vphadddq xmm1, dqword [0] ; 8F E9 78 CB 016 00 00 + +vphaddubd xmm1, xmm2 ; 8F E9 78 D2 312 +vphaddubd xmm1, [0] ; 8F E9 78 D2 016 00 00 +vphaddubd xmm1, dqword [0] ; 8F E9 78 D2 016 00 00 + +vphaddubq xmm1, xmm2 ; 8F E9 78 D3 312 +vphaddubq xmm1, [0] ; 8F E9 78 D3 016 00 00 +vphaddubq xmm1, dqword [0] ; 8F E9 78 D3 016 00 00 + +vphaddubw xmm1, xmm2 ; 8F E9 78 D1 312 +vphaddubw xmm1, [0] ; 8F E9 78 D1 016 00 00 +vphaddubw xmm1, dqword [0] ; 8F E9 78 D1 016 00 00 + +vphaddudq xmm1, xmm2 ; 8F E9 78 DB 312 +vphaddudq xmm1, [0] ; 8F E9 78 DB 016 00 00 +vphaddudq xmm1, dqword [0] ; 8F E9 78 DB 016 00 00 + +vphadduwd xmm1, xmm2 ; 8F E9 78 D6 312 +vphadduwd xmm1, [0] ; 8F E9 78 D6 016 00 00 +vphadduwd xmm1, dqword [0] ; 8F E9 78 D6 016 00 00 + +vphadduwq xmm1, xmm2 ; 8F E9 78 D7 312 +vphadduwq xmm1, [0] ; 8F E9 78 D7 016 00 00 +vphadduwq xmm1, dqword [0] ; 8F E9 78 D7 016 00 00 + +vphaddwd xmm1, xmm2 ; 8F E9 78 C6 312 +vphaddwd xmm1, [0] ; 8F E9 78 C6 016 00 00 +vphaddwd xmm1, dqword [0] ; 8F E9 78 C6 016 00 00 + +vphaddwq xmm1, xmm2 ; 8F E9 78 C7 312 +vphaddwq xmm1, [0] ; 8F E9 78 C7 016 00 00 +vphaddwq xmm1, dqword [0] ; 8F E9 78 C7 016 00 00 + +vphsubbw xmm1, xmm2 ; 8F E9 78 E1 312 +vphsubbw xmm1, [0] ; 8F E9 78 E1 016 00 00 +vphsubbw xmm1, dqword [0] ; 8F E9 78 E1 016 00 00 + +vphsubdq xmm1, xmm2 ; 8F E9 78 E3 312 +vphsubdq xmm1, [0] ; 8F E9 78 E3 016 00 00 +vphsubdq xmm1, dqword [0] ; 8F E9 78 E3 016 00 00 + +vphsubwd xmm1, xmm2 ; 8F E9 78 E2 312 +vphsubwd xmm1, [0] ; 8F E9 78 E2 016 00 00 +vphsubwd xmm1, dqword [0] ; 8F E9 78 E2 016 00 00 + +vpmacsdd xmm1, xmm4, xmm7, xmm3 ; 8F E8 58 9E 317 30 +vpmacsdd xmm2, xmm5, [0], xmm0 ; 8F E8 50 9E 026 00 00 00 +vpmacsdd xmm3, xmm6, dqword [0], xmm2 ; 8F E8 48 9E 036 00 00 20 + +vpmacsdqh xmm1, xmm4, xmm7, xmm3 ; 8F E8 58 9F 317 30 +vpmacsdqh xmm2, xmm5, [0], xmm0 ; 8F E8 50 9F 026 00 00 00 +vpmacsdqh xmm3, xmm6, dqword [0], xmm2 ; 8F E8 48 9F 036 00 00 20 + +vpmacsdql xmm1, xmm4, xmm7, xmm3 ; 8F E8 58 97 317 30 +vpmacsdql xmm2, xmm5, [0], xmm0 ; 8F E8 50 97 026 00 00 00 +vpmacsdql xmm3, xmm6, dqword [0], xmm2 ; 8F E8 48 97 036 00 00 20 + +vpmacssdd xmm1, xmm4, xmm7, xmm3 ; 8F E8 58 8E 317 30 +vpmacssdd xmm2, xmm5, [0], xmm0 ; 8F E8 50 8E 026 00 00 00 +vpmacssdd xmm3, xmm6, dqword [0], xmm2 ; 8F E8 48 8E 036 00 00 20 + +vpmacssdqh xmm1, xmm4, xmm7, xmm3 ; 8F E8 58 8F 317 30 +vpmacssdqh xmm2, xmm5, [0], xmm0 ; 8F E8 50 8F 026 00 00 00 +vpmacssdqh xmm3, xmm6, dqword [0], xmm2 ; 8F E8 48 8F 036 00 00 20 + +vpmacssdql xmm1, xmm4, xmm7, xmm3 ; 8F E8 58 87 317 30 +vpmacssdql xmm2, xmm5, [0], xmm0 ; 8F E8 50 87 026 00 00 00 +vpmacssdql xmm3, xmm6, dqword [0], xmm2 ; 8F E8 48 87 036 00 00 20 + +vpmacsswd xmm1, xmm4, xmm7, xmm3 ; 8F E8 58 86 317 30 +vpmacsswd xmm2, xmm5, [0], xmm0 ; 8F E8 50 86 026 00 00 00 +vpmacsswd xmm3, xmm6, dqword [0], xmm2 ; 8F E8 48 86 036 00 00 20 + +vpmacssww xmm1, xmm4, xmm7, xmm3 ; 8F E8 58 85 317 30 +vpmacssww xmm2, xmm5, [0], xmm0 ; 8F E8 50 85 026 00 00 00 +vpmacssww xmm3, xmm6, dqword [0], xmm2 ; 8F E8 48 85 036 00 00 20 + +vpmacswd xmm1, xmm4, xmm7, xmm3 ; 8F E8 58 96 317 30 +vpmacswd xmm2, xmm5, [0], xmm0 ; 8F E8 50 96 026 00 00 00 +vpmacswd xmm3, xmm6, dqword [0], xmm2 ; 8F E8 48 96 036 00 00 20 + +vpmacsww xmm1, xmm4, xmm7, xmm3 ; 8F E8 58 95 317 30 +vpmacsww xmm2, xmm5, [0], xmm0 ; 8F E8 50 95 026 00 00 00 +vpmacsww xmm3, xmm6, dqword [0], xmm2 ; 8F E8 48 95 036 00 00 20 + +vpmadcsswd xmm1, xmm4, xmm7, xmm3 ; 8F E8 58 A6 317 30 +vpmadcsswd xmm2, xmm5, [0], xmm0 ; 8F E8 50 A6 026 00 00 00 +vpmadcsswd xmm3, xmm6, dqword [0], xmm2 ; 8F E8 48 A6 036 00 00 20 + +vpmadcswd xmm1, xmm4, xmm7, xmm3 ; 8F E8 58 B6 317 30 +vpmadcswd xmm2, xmm5, [0], xmm0 ; 8F E8 50 B6 026 00 00 00 +vpmadcswd xmm3, xmm6, dqword [0], xmm2 ; 8F E8 48 B6 036 00 00 20 + +vpperm xmm1, xmm2, xmm3, xmm4 ; 8F E8 68 A3 313 40 /or/ 8F E8 E8 A3 314 30 +vpperm xmm1, xmm2, xmm3, [0] ; 8F E8 E8 A3 016 00 00 30 +vpperm xmm1, xmm2, xmm3, dqword [0] ; 8F E8 E8 A3 016 00 00 30 +vpperm xmm1, xmm2, [0], xmm4 ; 8F E8 68 A3 016 00 00 40 +vpperm xmm1, xmm2, dqword [0], xmm4 ; 8F E8 68 A3 016 00 00 40 + +vprotb xmm1, xmm2, xmm3 ; 8F E9 60 90 312 /or/ 8F E9 E8 90 313 +vprotb xmm1, xmm2, [0] ; 8F E9 E8 90 016 00 00 +vprotb xmm1, xmm2, dqword [0] ; 8F E9 E8 90 016 00 00 +vprotb xmm1, [0], xmm3 ; 8F E9 60 90 016 00 00 +vprotb xmm1, dqword [0], xmm3 ; 8F E9 60 90 016 00 00 +vprotb xmm1, xmm2, byte 5 ; 8F E8 78 C0 312 05 +vprotb xmm1, [0], byte 5 ; 8F E8 78 C0 016 00 00 05 +vprotb xmm1, dqword [0], 5 ; 8F E8 78 C0 016 00 00 05 + +vprotd xmm1, xmm2, xmm3 ; 8F E9 60 92 312 /or/ 8F E9 E8 92 313 +vprotd xmm1, xmm2, [0] ; 8F E9 E8 92 016 00 00 +vprotd xmm1, xmm2, dqword [0] ; 8F E9 E8 92 016 00 00 +vprotd xmm1, [0], xmm3 ; 8F E9 60 92 016 00 00 +vprotd xmm1, dqword [0], xmm3 ; 8F E9 60 92 016 00 00 +vprotd xmm1, xmm2, byte 5 ; 8F E8 78 C2 312 05 +vprotd xmm1, [0], byte 5 ; 8F E8 78 C2 016 00 00 05 +vprotd xmm1, dqword [0], 5 ; 8F E8 78 C2 016 00 00 05 + +vprotq xmm1, xmm2, xmm3 ; 8F E9 60 93 312 /or/ 8F E9 E8 93 313 +vprotq xmm1, xmm2, [0] ; 8F E9 E8 93 016 00 00 +vprotq xmm1, xmm2, dqword [0] ; 8F E9 E8 93 016 00 00 +vprotq xmm1, [0], xmm3 ; 8F E9 60 93 016 00 00 +vprotq xmm1, dqword [0], xmm3 ; 8F E9 60 93 016 00 00 +vprotq xmm1, xmm2, byte 5 ; 8F E8 78 C3 312 05 +vprotq xmm1, [0], byte 5 ; 8F E8 78 C3 016 00 00 05 +vprotq xmm1, dqword [0], 5 ; 8F E8 78 C3 016 00 00 05 + +vprotw xmm1, xmm2, xmm3 ; 8F E9 60 91 312 /or/ 8F E9 E8 91 313 +vprotw xmm1, xmm2, [0] ; 8F E9 E8 91 016 00 00 +vprotw xmm1, xmm2, dqword [0] ; 8F E9 E8 91 016 00 00 +vprotw xmm1, [0], xmm3 ; 8F E9 60 91 016 00 00 +vprotw xmm1, dqword [0], xmm3 ; 8F E9 60 91 016 00 00 +vprotw xmm1, xmm2, byte 5 ; 8F E8 78 C1 312 05 +vprotw xmm1, [0], byte 5 ; 8F E8 78 C1 016 00 00 05 +vprotw xmm1, dqword [0], 5 ; 8F E8 78 C1 016 00 00 05 + +vpshab xmm1, xmm2, xmm3 ; 8F E9 60 98 312 /or/ 8F E9 E8 98 313 +vpshab xmm1, xmm2, [0] ; 8F E9 E8 98 016 00 00 +vpshab xmm1, xmm2, dqword [0] ; 8F E9 E8 98 016 00 00 +vpshab xmm1, [0], xmm3 ; 8F E9 60 98 016 00 00 +vpshab xmm1, dqword [0], xmm3 ; 8F E9 60 98 016 00 00 + +vpshad xmm1, xmm2, xmm3 ; 8F E9 60 9A 312 /or/ 8F E9 E8 9A 313 +vpshad xmm1, xmm2, [0] ; 8F E9 E8 9A 016 00 00 +vpshad xmm1, xmm2, dqword [0] ; 8F E9 E8 9A 016 00 00 +vpshad xmm1, [0], xmm3 ; 8F E9 60 9A 016 00 00 +vpshad xmm1, dqword [0], xmm3 ; 8F E9 60 9A 016 00 00 + +vpshaq xmm1, xmm2, xmm3 ; 8F E9 60 9B 312 /or/ 8F E9 E8 9B 313 +vpshaq xmm1, xmm2, [0] ; 8F E9 E8 9B 016 00 00 +vpshaq xmm1, xmm2, dqword [0] ; 8F E9 E8 9B 016 00 00 +vpshaq xmm1, [0], xmm3 ; 8F E9 60 9B 016 00 00 +vpshaq xmm1, dqword [0], xmm3 ; 8F E9 60 9B 016 00 00 + +vpshaw xmm1, xmm2, xmm3 ; 8F E9 60 99 312 /or/ 8F E9 E8 99 313 +vpshaw xmm1, xmm2, [0] ; 8F E9 E8 99 016 00 00 +vpshaw xmm1, xmm2, dqword [0] ; 8F E9 E8 99 016 00 00 +vpshaw xmm1, [0], xmm3 ; 8F E9 60 99 016 00 00 +vpshaw xmm1, dqword [0], xmm3 ; 8F E9 60 99 016 00 00 + +vpshlb xmm1, xmm2, xmm3 ; 8F E9 60 94 312 /or/ 8F E9 E8 94 313 +vpshlb xmm1, xmm2, [0] ; 8F E9 E8 94 016 00 00 +vpshlb xmm1, xmm2, dqword [0] ; 8F E9 E8 94 016 00 00 +vpshlb xmm1, [0], xmm3 ; 8F E9 60 94 016 00 00 +vpshlb xmm1, dqword [0], xmm3 ; 8F E9 60 94 016 00 00 + +vpshld xmm1, xmm2, xmm3 ; 8F E9 60 96 312 /or/ 8F E9 E8 96 313 +vpshld xmm1, xmm2, [0] ; 8F E9 E8 96 016 00 00 +vpshld xmm1, xmm2, dqword [0] ; 8F E9 E8 96 016 00 00 +vpshld xmm1, [0], xmm3 ; 8F E9 60 96 016 00 00 +vpshld xmm1, dqword [0], xmm3 ; 8F E9 60 96 016 00 00 + +vpshlq xmm1, xmm2, xmm3 ; 8F E9 60 97 312 /or/ 8F E9 E8 97 313 +vpshlq xmm1, xmm2, [0] ; 8F E9 E8 97 016 00 00 +vpshlq xmm1, xmm2, dqword [0] ; 8F E9 E8 97 016 00 00 +vpshlq xmm1, [0], xmm3 ; 8F E9 60 97 016 00 00 +vpshlq xmm1, dqword [0], xmm3 ; 8F E9 60 97 016 00 00 + +vpshlw xmm1, xmm2, xmm3 ; 8F E9 60 95 312 /or/ 8F E9 E8 95 313 +vpshlw xmm1, xmm2, [0] ; 8F E9 E8 95 016 00 00 +vpshlw xmm1, xmm2, dqword [0] ; 8F E9 E8 95 016 00 00 +vpshlw xmm1, [0], xmm3 ; 8F E9 60 95 016 00 00 +vpshlw xmm1, dqword [0], xmm3 ; 8F E9 60 95 016 00 00 + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-all.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-all.hex new file mode 100644 index 0000000000..ee9fd7fbd9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-all.hex @@ -0,0 +1,1437 @@ +8f +e9 +78 +81 +ca +8f +e9 +78 +81 +0e +00 +00 +8f +e9 +78 +81 +0e +00 +00 +8f +e9 +7c +81 +ca +8f +e9 +7c +81 +0e +00 +00 +8f +e9 +7c +81 +0e +00 +00 +8f +e9 +78 +80 +ca +8f +e9 +78 +80 +0e +00 +00 +8f +e9 +78 +80 +0e +00 +00 +8f +e9 +7c +80 +ca +8f +e9 +7c +80 +0e +00 +00 +8f +e9 +7c +80 +0e +00 +00 +8f +e9 +78 +83 +ca +8f +e9 +78 +83 +0e +00 +00 +8f +e9 +78 +83 +0e +00 +00 +8f +e9 +78 +82 +ca +8f +e9 +78 +82 +0e +00 +00 +8f +e9 +78 +82 +0e +00 +00 +8f +e8 +68 +a2 +cb +40 +8f +e8 +e8 +a2 +0e +00 +00 +30 +8f +e8 +e8 +a2 +0e +00 +00 +30 +8f +e8 +68 +a2 +0e +00 +00 +40 +8f +e8 +68 +a2 +0e +00 +00 +40 +8f +e8 +6c +a2 +cb +40 +8f +e8 +ec +a2 +0e +00 +00 +30 +8f +e8 +ec +a2 +0e +00 +00 +30 +8f +e8 +6c +a2 +0e +00 +00 +40 +8f +e8 +6c +a2 +0e +00 +00 +40 +8f +e8 +58 +cc +cf +05 +8f +e8 +50 +cc +16 +00 +00 +05 +8f +e8 +48 +cc +1e +00 +00 +05 +8f +e8 +58 +ce +cf +05 +8f +e8 +50 +ce +16 +00 +00 +05 +8f +e8 +48 +ce +1e +00 +00 +05 +8f +e8 +58 +cf +cf +05 +8f +e8 +50 +cf +16 +00 +00 +05 +8f +e8 +48 +cf +1e +00 +00 +05 +8f +e8 +58 +ec +cf +05 +8f +e8 +50 +ec +16 +00 +00 +05 +8f +e8 +48 +ec +1e +00 +00 +05 +8f +e8 +58 +ee +cf +05 +8f +e8 +50 +ee +16 +00 +00 +05 +8f +e8 +48 +ee +1e +00 +00 +05 +8f +e8 +58 +ef +cf +05 +8f +e8 +50 +ef +16 +00 +00 +05 +8f +e8 +48 +ef +1e +00 +00 +05 +8f +e8 +58 +ed +cf +05 +8f +e8 +50 +ed +16 +00 +00 +05 +8f +e8 +48 +ed +1e +00 +00 +05 +8f +e8 +58 +cd +cf +05 +8f +e8 +50 +cd +16 +00 +00 +05 +8f +e8 +48 +cd +1e +00 +00 +05 +8f +e9 +78 +c2 +ca +8f +e9 +78 +c2 +0e +00 +00 +8f +e9 +78 +c2 +0e +00 +00 +8f +e9 +78 +c3 +ca +8f +e9 +78 +c3 +0e +00 +00 +8f +e9 +78 +c3 +0e +00 +00 +8f +e9 +78 +c1 +ca +8f +e9 +78 +c1 +0e +00 +00 +8f +e9 +78 +c1 +0e +00 +00 +8f +e9 +78 +cb +ca +8f +e9 +78 +cb +0e +00 +00 +8f +e9 +78 +cb +0e +00 +00 +8f +e9 +78 +d2 +ca +8f +e9 +78 +d2 +0e +00 +00 +8f +e9 +78 +d2 +0e +00 +00 +8f +e9 +78 +d3 +ca +8f +e9 +78 +d3 +0e +00 +00 +8f +e9 +78 +d3 +0e +00 +00 +8f +e9 +78 +d1 +ca +8f +e9 +78 +d1 +0e +00 +00 +8f +e9 +78 +d1 +0e +00 +00 +8f +e9 +78 +db +ca +8f +e9 +78 +db +0e +00 +00 +8f +e9 +78 +db +0e +00 +00 +8f +e9 +78 +d6 +ca +8f +e9 +78 +d6 +0e +00 +00 +8f +e9 +78 +d6 +0e +00 +00 +8f +e9 +78 +d7 +ca +8f +e9 +78 +d7 +0e +00 +00 +8f +e9 +78 +d7 +0e +00 +00 +8f +e9 +78 +c6 +ca +8f +e9 +78 +c6 +0e +00 +00 +8f +e9 +78 +c6 +0e +00 +00 +8f +e9 +78 +c7 +ca +8f +e9 +78 +c7 +0e +00 +00 +8f +e9 +78 +c7 +0e +00 +00 +8f +e9 +78 +e1 +ca +8f +e9 +78 +e1 +0e +00 +00 +8f +e9 +78 +e1 +0e +00 +00 +8f +e9 +78 +e3 +ca +8f +e9 +78 +e3 +0e +00 +00 +8f +e9 +78 +e3 +0e +00 +00 +8f +e9 +78 +e2 +ca +8f +e9 +78 +e2 +0e +00 +00 +8f +e9 +78 +e2 +0e +00 +00 +8f +e8 +58 +9e +cf +30 +8f +e8 +50 +9e +16 +00 +00 +00 +8f +e8 +48 +9e +1e +00 +00 +20 +8f +e8 +58 +9f +cf +30 +8f +e8 +50 +9f +16 +00 +00 +00 +8f +e8 +48 +9f +1e +00 +00 +20 +8f +e8 +58 +97 +cf +30 +8f +e8 +50 +97 +16 +00 +00 +00 +8f +e8 +48 +97 +1e +00 +00 +20 +8f +e8 +58 +8e +cf +30 +8f +e8 +50 +8e +16 +00 +00 +00 +8f +e8 +48 +8e +1e +00 +00 +20 +8f +e8 +58 +8f +cf +30 +8f +e8 +50 +8f +16 +00 +00 +00 +8f +e8 +48 +8f +1e +00 +00 +20 +8f +e8 +58 +87 +cf +30 +8f +e8 +50 +87 +16 +00 +00 +00 +8f +e8 +48 +87 +1e +00 +00 +20 +8f +e8 +58 +86 +cf +30 +8f +e8 +50 +86 +16 +00 +00 +00 +8f +e8 +48 +86 +1e +00 +00 +20 +8f +e8 +58 +85 +cf +30 +8f +e8 +50 +85 +16 +00 +00 +00 +8f +e8 +48 +85 +1e +00 +00 +20 +8f +e8 +58 +96 +cf +30 +8f +e8 +50 +96 +16 +00 +00 +00 +8f +e8 +48 +96 +1e +00 +00 +20 +8f +e8 +58 +95 +cf +30 +8f +e8 +50 +95 +16 +00 +00 +00 +8f +e8 +48 +95 +1e +00 +00 +20 +8f +e8 +58 +a6 +cf +30 +8f +e8 +50 +a6 +16 +00 +00 +00 +8f +e8 +48 +a6 +1e +00 +00 +20 +8f +e8 +58 +b6 +cf +30 +8f +e8 +50 +b6 +16 +00 +00 +00 +8f +e8 +48 +b6 +1e +00 +00 +20 +8f +e8 +68 +a3 +cb +40 +8f +e8 +e8 +a3 +0e +00 +00 +30 +8f +e8 +e8 +a3 +0e +00 +00 +30 +8f +e8 +68 +a3 +0e +00 +00 +40 +8f +e8 +68 +a3 +0e +00 +00 +40 +8f +e9 +60 +90 +ca +8f +e9 +e8 +90 +0e +00 +00 +8f +e9 +e8 +90 +0e +00 +00 +8f +e9 +60 +90 +0e +00 +00 +8f +e9 +60 +90 +0e +00 +00 +8f +e8 +78 +c0 +ca +05 +8f +e8 +78 +c0 +0e +00 +00 +05 +8f +e8 +78 +c0 +0e +00 +00 +05 +8f +e9 +60 +92 +ca +8f +e9 +e8 +92 +0e +00 +00 +8f +e9 +e8 +92 +0e +00 +00 +8f +e9 +60 +92 +0e +00 +00 +8f +e9 +60 +92 +0e +00 +00 +8f +e8 +78 +c2 +ca +05 +8f +e8 +78 +c2 +0e +00 +00 +05 +8f +e8 +78 +c2 +0e +00 +00 +05 +8f +e9 +60 +93 +ca +8f +e9 +e8 +93 +0e +00 +00 +8f +e9 +e8 +93 +0e +00 +00 +8f +e9 +60 +93 +0e +00 +00 +8f +e9 +60 +93 +0e +00 +00 +8f +e8 +78 +c3 +ca +05 +8f +e8 +78 +c3 +0e +00 +00 +05 +8f +e8 +78 +c3 +0e +00 +00 +05 +8f +e9 +60 +91 +ca +8f +e9 +e8 +91 +0e +00 +00 +8f +e9 +e8 +91 +0e +00 +00 +8f +e9 +60 +91 +0e +00 +00 +8f +e9 +60 +91 +0e +00 +00 +8f +e8 +78 +c1 +ca +05 +8f +e8 +78 +c1 +0e +00 +00 +05 +8f +e8 +78 +c1 +0e +00 +00 +05 +8f +e9 +60 +98 +ca +8f +e9 +e8 +98 +0e +00 +00 +8f +e9 +e8 +98 +0e +00 +00 +8f +e9 +60 +98 +0e +00 +00 +8f +e9 +60 +98 +0e +00 +00 +8f +e9 +60 +9a +ca +8f +e9 +e8 +9a +0e +00 +00 +8f +e9 +e8 +9a +0e +00 +00 +8f +e9 +60 +9a +0e +00 +00 +8f +e9 +60 +9a +0e +00 +00 +8f +e9 +60 +9b +ca +8f +e9 +e8 +9b +0e +00 +00 +8f +e9 +e8 +9b +0e +00 +00 +8f +e9 +60 +9b +0e +00 +00 +8f +e9 +60 +9b +0e +00 +00 +8f +e9 +60 +99 +ca +8f +e9 +e8 +99 +0e +00 +00 +8f +e9 +e8 +99 +0e +00 +00 +8f +e9 +60 +99 +0e +00 +00 +8f +e9 +60 +99 +0e +00 +00 +8f +e9 +60 +94 +ca +8f +e9 +e8 +94 +0e +00 +00 +8f +e9 +e8 +94 +0e +00 +00 +8f +e9 +60 +94 +0e +00 +00 +8f +e9 +60 +94 +0e +00 +00 +8f +e9 +60 +96 +ca +8f +e9 +e8 +96 +0e +00 +00 +8f +e9 +e8 +96 +0e +00 +00 +8f +e9 +60 +96 +0e +00 +00 +8f +e9 +60 +96 +0e +00 +00 +8f +e9 +60 +97 +ca +8f +e9 +e8 +97 +0e +00 +00 +8f +e9 +e8 +97 +0e +00 +00 +8f +e9 +60 +97 +0e +00 +00 +8f +e9 +60 +97 +0e +00 +00 +8f +e9 +60 +95 +ca +8f +e9 +e8 +95 +0e +00 +00 +8f +e9 +e8 +95 +0e +00 +00 +8f +e9 +60 +95 +0e +00 +00 +8f +e9 +60 +95 +0e +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-basic.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-basic.asm new file mode 100644 index 0000000000..516b4bd20a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-basic.asm @@ -0,0 +1,8 @@ +[bits 64] +vfrczpd ymm9, ymm10 ; 8F 49 7C 81 312 +vfrczpd ymm9, [0] ; 8F 69 7C 81 0C 25 00 00 00 00 +vfrczpd ymm9, yword [0] ; 8F 69 7C 81 0C 25 00 00 00 00 +vfrczpd ymm9, [r8*4] ; 8F 29 7C 81 0C 85 00 00 00 00 +vfrczpd ymm9, [r8*4+r9] ; 8F 09 7C 81 0C 81 + +vpcmov ymm10, ymm11, ymm12, ymm13 ; 8F 48 24 A2 324 D0 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-basic.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-basic.hex new file mode 100644 index 0000000000..6be478a1e6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-basic.hex @@ -0,0 +1,47 @@ +8f +49 +7c +81 +ca +8f +69 +7c +81 +0c +25 +00 +00 +00 +00 +8f +69 +7c +81 +0c +25 +00 +00 +00 +00 +8f +29 +7c +81 +0c +85 +00 +00 +00 +00 +8f +09 +7c +81 +0c +81 +8f +48 +24 +a2 +d4 +d0 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-cc.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-cc.asm new file mode 100644 index 0000000000..8b8bbe39d1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-cc.asm @@ -0,0 +1,22 @@ +[bits 16] +vpcomltb xmm1, xmm2, xmm3 ; 8F E8 68 CC 313 00 +vpcomleb xmm1, xmm2, xmm3 ; 8F E8 68 CC 313 01 +vpcomgtb xmm1, xmm2, xmm3 ; 8F E8 68 CC 313 02 +vpcomgeb xmm1, xmm2, xmm3 ; 8F E8 68 CC 313 03 +vpcomeqb xmm1, xmm2, xmm3 ; 8F E8 68 CC 313 04 +vpcomneqb xmm1, xmm2, xmm3 ; 8F E8 68 CC 313 05 +vpcomneb xmm1, xmm2, xmm3 ; 8F E8 68 CC 313 05 +vpcomfalseb xmm1, xmm2, xmm3 ; 8F E8 68 CC 313 06 +vpcomtrueb xmm1, xmm2, xmm3 ; 8F E8 68 CC 313 07 + +vpcomltuw xmm1, xmm2, xmm3 ; 8F E8 68 ED 313 00 +vpcomleuw xmm1, xmm2, xmm3 ; 8F E8 68 ED 313 01 +vpcomgtuw xmm1, xmm2, xmm3 ; 8F E8 68 ED 313 02 +vpcomgeuw xmm1, xmm2, xmm3 ; 8F E8 68 ED 313 03 +vpcomequw xmm1, xmm2, xmm3 ; 8F E8 68 ED 313 04 +vpcomnequw xmm1, xmm2, xmm3 ; 8F E8 68 ED 313 05 +vpcomneuw xmm1, xmm2, xmm3 ; 8F E8 68 ED 313 05 +vpcomfalseuw xmm1, xmm2, xmm3 ; 8F E8 68 ED 313 06 +vpcomtrueuw xmm1, xmm2, xmm3 ; 8F E8 68 ED 313 07 + + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-cc.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-cc.hex new file mode 100644 index 0000000000..24300585f0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xop-cc.hex @@ -0,0 +1,108 @@ +8f +e8 +68 +cc +cb +00 +8f +e8 +68 +cc +cb +01 +8f +e8 +68 +cc +cb +02 +8f +e8 +68 +cc +cb +03 +8f +e8 +68 +cc +cb +04 +8f +e8 +68 +cc +cb +05 +8f +e8 +68 +cc +cb +05 +8f +e8 +68 +cc +cb +06 +8f +e8 +68 +cc +cb +07 +8f +e8 +68 +ed +cb +00 +8f +e8 +68 +ed +cb +01 +8f +e8 +68 +ed +cb +02 +8f +e8 +68 +ed +cb +03 +8f +e8 +68 +ed +cb +04 +8f +e8 +68 +ed +cb +05 +8f +e8 +68 +ed +cb +05 +8f +e8 +68 +ed +cb +06 +8f +e8 +68 +ed +cb +07 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xsave.asm b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xsave.asm new file mode 100644 index 0000000000..43f5f28d83 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xsave.asm @@ -0,0 +1,8 @@ +xsave [0] +xrstor [0] +xgetbv +xsetbv + +xsaveopt [0] +[bits 64] +xsaveopt64 [0] diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xsave.hex b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xsave.hex new file mode 100644 index 0000000000..21e3a19396 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/tests/xsave.hex @@ -0,0 +1,30 @@ +0f +ae +26 +00 +00 +0f +ae +2e +00 +00 +0f +01 +d0 +0f +01 +d1 +0f +ae +36 +00 +00 +48 +0f +ae +34 +25 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86arch.c b/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86arch.c new file mode 100644 index 0000000000..bac11774ea --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86arch.c @@ -0,0 +1,633 @@ +/* + * x86 architecture description + * + * Copyright (C) 2002-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "x86arch.h" + + +yasm_arch_module yasm_x86_LTX_arch; + + +static /*@only@*/ yasm_arch * +x86_create(const char *machine, const char *parser, + /*@out@*/ yasm_arch_create_error *error) +{ + yasm_arch_x86 *arch_x86; + unsigned int amd64_machine, address_size; + + *error = YASM_ARCH_CREATE_OK; + + if (yasm__strcasecmp(machine, "x86") == 0) { + amd64_machine = 0; + address_size = 32; + } else if (yasm__strcasecmp(machine, "amd64") == 0) { + amd64_machine = 1; + address_size = 64; + } else if (yasm__strcasecmp(machine, "x32") == 0) { + amd64_machine = 1; + address_size = 32; + } + else { + *error = YASM_ARCH_CREATE_BAD_MACHINE; + return NULL; + } + + arch_x86 = yasm_xmalloc(sizeof(yasm_arch_x86)); + + arch_x86->arch.module = &yasm_x86_LTX_arch; + + /* default to all instructions/features enabled */ + arch_x86->active_cpu = 0; + arch_x86->cpu_enables_size = 1; + arch_x86->cpu_enables = yasm_xmalloc(sizeof(wordptr)); + arch_x86->cpu_enables[0] = BitVector_Create(64, FALSE); + BitVector_Fill(arch_x86->cpu_enables[0]); + + arch_x86->amd64_machine = amd64_machine; + arch_x86->mode_bits = 0; + arch_x86->address_size = address_size; + arch_x86->force_strict = 0; + arch_x86->default_rel = 0; + arch_x86->gas_intel_mode = 0; + arch_x86->nop = X86_NOP_BASIC; + + if (yasm__strcasecmp(parser, "nasm") == 0) + arch_x86->parser = X86_PARSER_NASM; + else if (yasm__strcasecmp(parser, "tasm") == 0) + arch_x86->parser = X86_PARSER_TASM; + else if (yasm__strcasecmp(parser, "gas") == 0 + || yasm__strcasecmp(parser, "gnu") == 0) + arch_x86->parser = X86_PARSER_GAS; + else { + yasm_xfree(arch_x86); + *error = YASM_ARCH_CREATE_BAD_PARSER; + return NULL; + } + + return (yasm_arch *)arch_x86; +} + +static void +x86_destroy(/*@only@*/ yasm_arch *arch) +{ + yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)arch; + unsigned int i; + for (i=0; icpu_enables_size; i++) + BitVector_Destroy(arch_x86->cpu_enables[i]); + yasm_xfree(arch_x86->cpu_enables); + yasm_xfree(arch); +} + +static const char * +x86_get_machine(const yasm_arch *arch) +{ + const yasm_arch_x86 *arch_x86 = (const yasm_arch_x86 *)arch; + if (arch_x86->amd64_machine) { + if (arch_x86->address_size == 32) + return "x32"; + else + return "amd64"; + } else + return "x86"; +} + +static unsigned int +x86_get_address_size(const yasm_arch *arch) +{ + const yasm_arch_x86 *arch_x86 = (const yasm_arch_x86 *)arch; + if (arch_x86->mode_bits != 0) + return arch_x86->mode_bits; + return arch_x86->address_size; +} + +static int +x86_set_var(yasm_arch *arch, const char *var, unsigned long val) +{ + yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)arch; + if (yasm__strcasecmp(var, "mode_bits") == 0) + arch_x86->mode_bits = (unsigned int)val; + else if (yasm__strcasecmp(var, "force_strict") == 0) + arch_x86->force_strict = (unsigned int)val; + else if (yasm__strcasecmp(var, "default_rel") == 0) { + if (arch_x86->mode_bits != 64) + yasm_warn_set(YASM_WARN_GENERAL, + N_("ignoring default rel in non-64-bit mode")); + else + arch_x86->default_rel = (unsigned int)val; + } else if (yasm__strcasecmp(var, "gas_intel_mode") == 0) { + arch_x86->gas_intel_mode = (unsigned int)val; + } else + return 1; + return 0; +} + +static void +x86_dir_cpu(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)object->arch; + + yasm_valparam *vp; + yasm_vps_foreach(vp, valparams) { + /*@null@*/ /*@dependent@*/ const char *s = yasm_vp_string(vp); + if (s) + yasm_x86__parse_cpu(arch_x86, s, strlen(s)); + else if (vp->type == YASM_PARAM_EXPR) { + const yasm_intnum *intcpu; + intcpu = yasm_expr_get_intnum(&vp->param.e, 0); + if (!intcpu) + yasm_error_set(YASM_ERROR_SYNTAX, + N_("invalid argument to [%s]"), "CPU"); + else { + char strcpu[16]; + sprintf(strcpu, "%lu", yasm_intnum_get_uint(intcpu)); + yasm_x86__parse_cpu(arch_x86, strcpu, strlen(strcpu)); + } + } else + yasm_error_set(YASM_ERROR_SYNTAX, N_("invalid argument to [%s]"), + "CPU"); + } +} + +static void +x86_dir_bits(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)object->arch; + yasm_valparam *vp; + /*@only@*/ /*@null@*/ yasm_expr *e = NULL; + const yasm_intnum *intn; + long lval; + + if ((vp = yasm_vps_first(valparams)) && !vp->val && + (e = yasm_vp_expr(vp, object->symtab, line)) != NULL && + (intn = yasm_expr_get_intnum(&e, 0)) != NULL && + (lval = yasm_intnum_get_int(intn)) && + (lval == 16 || lval == 32 || lval == 64)) + arch_x86->mode_bits = (unsigned char)lval; + else + yasm_error_set(YASM_ERROR_VALUE, N_("invalid argument to [%s]"), + "BITS"); + if (e) + yasm_expr_destroy(e); +} + +static void +x86_dir_code16(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)object->arch; + arch_x86->mode_bits = 16; +} + +static void +x86_dir_code32(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)object->arch; + arch_x86->mode_bits = 32; +} + +static void +x86_dir_code64(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)object->arch; + arch_x86->mode_bits = 64; +} + +static const unsigned char ** +x86_get_fill(const yasm_arch *arch) +{ + const yasm_arch_x86 *arch_x86 = (const yasm_arch_x86 *)arch; + + /* Fill patterns that GAS uses. */ + static const unsigned char fill16_1[1] = + {0x90}; /* 1 - nop */ + static const unsigned char fill16_2[2] = + {0x89, 0xf6}; /* 2 - mov si, si */ + static const unsigned char fill16_3[3] = + {0x8d, 0x74, 0x00}; /* 3 - lea si, [si+byte 0] */ + static const unsigned char fill16_4[4] = + {0x8d, 0xb4, 0x00, 0x00}; /* 4 - lea si, [si+word 0] */ + static const unsigned char fill16_5[5] = + {0x90, /* 5 - nop */ + 0x8d, 0xb4, 0x00, 0x00}; /* lea si, [si+word 0] */ + static const unsigned char fill16_6[6] = + {0x89, 0xf6, /* 6 - mov si, si */ + 0x8d, 0xbd, 0x00, 0x00}; /* lea di, [di+word 0] */ + static const unsigned char fill16_7[7] = + {0x8d, 0x74, 0x00, /* 7 - lea si, [si+byte 0] */ + 0x8d, 0xbd, 0x00, 0x00}; /* lea di, [di+word 0] */ + static const unsigned char fill16_8[8] = + {0x8d, 0xb4, 0x00, 0x00, /* 8 - lea si, [si+word 0] */ + 0x8d, 0xbd, 0x00, 0x00}; /* lea di, [di+word 0] */ + static const unsigned char fill16_9[9] = + {0xeb, 0x07, 0x90, 0x90, 0x90, 0x90, /* 9 - jmp $+9; nop fill */ + 0x90, 0x90, 0x90}; + static const unsigned char fill16_10[10] = + {0xeb, 0x08, 0x90, 0x90, 0x90, 0x90, /* 10 - jmp $+10; nop fill */ + 0x90, 0x90, 0x90, 0x90}; + static const unsigned char fill16_11[11] = + {0xeb, 0x09, 0x90, 0x90, 0x90, 0x90, /* 11 - jmp $+11; nop fill */ + 0x90, 0x90, 0x90, 0x90, 0x90}; + static const unsigned char fill16_12[12] = + {0xeb, 0x0a, 0x90, 0x90, 0x90, 0x90, /* 12 - jmp $+12; nop fill */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90}; + static const unsigned char fill16_13[13] = + {0xeb, 0x0b, 0x90, 0x90, 0x90, 0x90, /* 13 - jmp $+13; nop fill */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90}; + static const unsigned char fill16_14[14] = + {0xeb, 0x0c, 0x90, 0x90, 0x90, 0x90, /* 14 - jmp $+14; nop fill */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90}; + static const unsigned char fill16_15[15] = + {0xeb, 0x0d, 0x90, 0x90, 0x90, 0x90, /* 15 - jmp $+15; nop fill */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90}; + static const unsigned char *fill16[16] = + { + NULL, fill16_1, fill16_2, fill16_3, + fill16_4, fill16_5, fill16_6, fill16_7, + fill16_8, fill16_9, fill16_10, fill16_11, + fill16_12, fill16_13, fill16_14, fill16_15 + }; + + static const unsigned char fill32_1[1] = + {0x90}; /* 1 - nop */ + static const unsigned char fill32_2[2] = + {0x66, 0x90}; /* 2 - xchg ax, ax (o16 nop) */ + static const unsigned char fill32_3[3] = + {0x8d, 0x76, 0x00}; /* 3 - lea esi, [esi+byte 0] */ + static const unsigned char fill32_4[4] = + {0x8d, 0x74, 0x26, 0x00}; /* 4 - lea esi, [esi*1+byte 0] */ + static const unsigned char fill32_5[5] = + {0x90, /* 5 - nop */ + 0x8d, 0x74, 0x26, 0x00}; /* lea esi, [esi*1+byte 0] */ + static const unsigned char fill32_6[6] = + {0x8d, 0xb6, 0x00, 0x00, 0x00, 0x00};/* 6 - lea esi, [esi+dword 0] */ + static const unsigned char fill32_7[7] = + {0x8d, 0xb4, 0x26, 0x00, 0x00, 0x00, /* 7 - lea esi, [esi*1+dword 0] */ + 0x00}; + static const unsigned char fill32_8[8] = + {0x90, /* 8 - nop */ + 0x8d, 0xb4, 0x26, 0x00, 0x00, 0x00, /* lea esi, [esi*1+dword 0] */ + 0x00}; +#if 0 + /* GAS uses these */ + static const unsigned char fill32_9[9] = + {0x89, 0xf6, /* 9 - mov esi, esi */ + 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, /* lea edi, [edi*1+dword 0] */ + 0x00}; + static const unsigned char fill32_10[10] = + {0x8d, 0x76, 0x00, /* 10 - lea esi, [esi+byte 0] */ + 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, /* lea edi, [edi+dword 0] */ + 0x00}; + static const unsigned char fill32_11[11] = + {0x8d, 0x74, 0x26, 0x00, /* 11 - lea esi, [esi*1+byte 0] */ + 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, /* lea edi, [edi*1+dword 0] */ + 0x00}; + static const unsigned char fill32_12[12] = + {0x8d, 0xb6, 0x00, 0x00, 0x00, 0x00, /* 12 - lea esi, [esi+dword 0] */ + 0x8d, 0xbf, 0x00, 0x00, 0x00, 0x00};/* lea edi, [edi+dword 0] */ + static const unsigned char fill32_13[13] = + {0x8d, 0xb6, 0x00, 0x00, 0x00, 0x00, /* 13 - lea esi, [esi+dword 0] */ + 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, /* lea edi, [edi*1+dword 0] */ + 0x00}; + static const unsigned char fill32_14[14] = + {0x8d, 0xb4, 0x26, 0x00, 0x00, 0x00, /* 14 - lea esi, [esi*1+dword 0] */ + 0x00, + 0x8d, 0xbc, 0x27, 0x00, 0x00, 0x00, /* lea edi, [edi*1+dword 0] */ + 0x00}; +#else + /* But on newer processors, these are recommended */ + static const unsigned char fill32_9[9] = + {0xeb, 0x07, 0x90, 0x90, 0x90, 0x90, /* 9 - jmp $+9; nop fill */ + 0x90, 0x90, 0x90}; + static const unsigned char fill32_10[10] = + {0xeb, 0x08, 0x90, 0x90, 0x90, 0x90, /* 10 - jmp $+10; nop fill */ + 0x90, 0x90, 0x90, 0x90}; + static const unsigned char fill32_11[11] = + {0xeb, 0x09, 0x90, 0x90, 0x90, 0x90, /* 11 - jmp $+11; nop fill */ + 0x90, 0x90, 0x90, 0x90, 0x90}; + static const unsigned char fill32_12[12] = + {0xeb, 0x0a, 0x90, 0x90, 0x90, 0x90, /* 12 - jmp $+12; nop fill */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90}; + static const unsigned char fill32_13[13] = + {0xeb, 0x0b, 0x90, 0x90, 0x90, 0x90, /* 13 - jmp $+13; nop fill */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90}; + static const unsigned char fill32_14[14] = + {0xeb, 0x0c, 0x90, 0x90, 0x90, 0x90, /* 14 - jmp $+14; nop fill */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90}; +#endif + static const unsigned char fill32_15[15] = + {0xeb, 0x0d, 0x90, 0x90, 0x90, 0x90, /* 15 - jmp $+15; nop fill */ + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90}; + static const unsigned char *fill32[16] = + { + NULL, fill32_1, fill32_2, fill32_3, + fill32_4, fill32_5, fill32_6, fill32_7, + fill32_8, fill32_9, fill32_10, fill32_11, + fill32_12, fill32_13, fill32_14, fill32_15 + }; + + /* Long form nops available on more recent Intel and AMD processors */ + static const unsigned char fill32new_3[3] = + {0x0f, 0x1f, 0x00}; /* 3 - nop(3) */ + static const unsigned char fill32new_4[4] = + {0x0f, 0x1f, 0x40, 0x00}; /* 4 - nop(4) */ + static const unsigned char fill32new_5[5] = + {0x0f, 0x1f, 0x44, 0x00, 0x00}; /* 5 - nop(5) */ + static const unsigned char fill32new_6[6] = + {0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00}; /* 6 - nop(6) */ + static const unsigned char fill32new_7[7] = + {0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00}; /* 7 - nop(7) */ + static const unsigned char fill32new_8[8] = + {0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, /* 8 - nop(8) */ + 0x00}; + static const unsigned char fill32new_9[9] = + {0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, /* 9 - nop(9) */ + 0x00, 0x00}; + + /* Longer forms preferred by Intel use repeated o16 prefixes */ + static const unsigned char fill32intel_10[10] = + {0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, /* 10 - o16; cs; nop */ + 0x00, 0x00, 0x00}; + static const unsigned char fill32intel_11[11] = + {0x66, 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, /* 11 - 2x o16; cs; nop */ + 0x00, 0x00, 0x00, 0x00}; + static const unsigned char fill32intel_12[12] = + {0x66, 0x66, 0x66, 0x2e, 0x0f, 0x1f, 0x84, /* 12 - 3x o16; cs; nop */ + 0x00, 0x00, 0x00, 0x00, 0x00}; + static const unsigned char fill32intel_13[13] = + {0x66, 0x66, 0x66, 0x66, 0x2e, 0x0f, 0x1f, /* 13 - 4x o16; cs; nop */ + 0x84, 0x00, 0x00, 0x00, 0x00, 0x00}; + static const unsigned char fill32intel_14[14] = + {0x66, 0x66, 0x66, 0x66, 0x66, 0x2e, 0x0f, /* 14 - 5x o16; cs; nop */ + 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00}; + static const unsigned char fill32intel_15[15] = + {0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x2e, /* 15 - 6x o16; cs; nop */ + 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00}; + + /* Longer forms preferred by AMD use fewer o16 prefixes and no CS prefix; + * Source: Software Optimisation Guide for AMD Family 10h + * Processors 40546 revision 3.10 February 2009 + */ + static const unsigned char fill32amd_10[10] = + {0x66, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, /* 10 - nop(10) */ + 0x00, 0x00, 0x00}; + static const unsigned char fill32amd_11[11] = + {0x0f, 0x1f, 0x44, 0x00, 0x00, /* 11 - nop(5) */ + 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00}; /* nop(6) */ + static const unsigned char fill32amd_12[12] = + {0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00, /* 12 - nop(6) */ + 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00}; /* nop(6) */ + static const unsigned char fill32amd_13[13] = + {0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00, /* 13 - nop(6) */ + 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00}; /* nop(7) */ + static const unsigned char fill32amd_14[14] = + {0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, /* 14 - nop(7) */ + 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00}; /* nop(7) */ + static const unsigned char fill32amd_15[15] = + {0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, /* 15 - nop(7) */ + 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00}; /* nop(8) */ + + static const unsigned char *fill32_intel[16] = + { + NULL, fill32_1, fill32_2, fill32new_3, + fill32new_4, fill32new_5, fill32new_6, fill32new_7, + fill32new_8, fill32new_9, fill32intel_10, fill32intel_11, + fill32intel_12, fill32intel_13, fill32intel_14, fill32intel_15 + }; + static const unsigned char *fill32_amd[16] = + { + NULL, fill32_1, fill32_2, fill32new_3, + fill32new_4, fill32new_5, fill32new_6, fill32new_7, + fill32new_8, fill32new_9, fill32amd_10, fill32amd_11, + fill32amd_12, fill32amd_13, fill32amd_14, fill32amd_15 + }; + + switch (arch_x86->mode_bits) { + case 16: + return fill16; + case 32: + if (arch_x86->nop == X86_NOP_INTEL) + return fill32_intel; + else if (arch_x86->nop == X86_NOP_AMD) + return fill32_amd; + else + return fill32; + case 64: + /* We know long nops are available in 64-bit mode; default to Intel + * ones if unspecified (to match GAS behavior). + */ + if (arch_x86->nop == X86_NOP_AMD) + return fill32_amd; + else + return fill32_intel; + default: + yasm_error_set(YASM_ERROR_VALUE, + N_("Invalid mode_bits in x86_get_fill")); + return NULL; + } +} + +unsigned int +yasm_x86__get_reg_size(uintptr_t reg) +{ + switch ((x86_expritem_reg_size)(reg & ~0xFUL)) { + case X86_REG8: + case X86_REG8X: + return 8; + case X86_REG16: + return 16; + case X86_REG32: + case X86_CRREG: + case X86_DRREG: + case X86_TRREG: + return 32; + case X86_REG64: + case X86_MMXREG: + return 64; + case X86_XMMREG: + return 128; + case X86_YMMREG: + return 256; + case X86_FPUREG: + return 80; + default: + yasm_error_set(YASM_ERROR_VALUE, N_("unknown register size")); + } + return 0; +} + +static unsigned int +x86_get_reg_size(yasm_arch *arch, uintptr_t reg) +{ + return yasm_x86__get_reg_size(reg); +} + +static uintptr_t +x86_reggroup_get_reg(yasm_arch *arch, uintptr_t reggroup, + unsigned long regindex) +{ + yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)arch; + switch ((x86_expritem_reg_size)(reggroup & ~0xFUL)) { + case X86_XMMREG: + case X86_YMMREG: + if (arch_x86->mode_bits == 64) { + if (regindex > 15) + return 0; + return reggroup | (regindex & 15); + } + /*@fallthrough@*/ + case X86_MMXREG: + case X86_FPUREG: + if (regindex > 7) + return 0; + return reggroup | (regindex & 7); + default: + yasm_error_set(YASM_ERROR_VALUE, N_("bad register group")); + } + return 0; +} + +static void +x86_reg_print(yasm_arch *arch, uintptr_t reg, FILE *f) +{ + static const char *name8[] = {"al","cl","dl","bl","ah","ch","dh","bh"}; + static const char *name8x[] = { + "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil", + "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b" + }; + static const char *name16[] = { + "ax", "cx", "dx", "bx", "sp", "bp", "si", "di", + "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w" + }; + static const char *name32[] = { + "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi", + "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d" + }; + static const char *name64[] = { + "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15" + }; + + switch ((x86_expritem_reg_size)(reg & ~0xFUL)) { + case X86_REG8: + fprintf(f, "%s", name8[reg&0xF]); + break; + case X86_REG8X: + fprintf(f, "%s", name8x[reg&0xF]); + break; + case X86_REG16: + fprintf(f, "%s", name16[reg&0xF]); + break; + case X86_REG32: + fprintf(f, "%s", name32[reg&0xF]); + break; + case X86_REG64: + fprintf(f, "%s", name64[reg&0xF]); + break; + case X86_MMXREG: + fprintf(f, "mm%d", (int)(reg&0xF)); + break; + case X86_XMMREG: + fprintf(f, "xmm%d", (int)(reg&0xF)); + break; + case X86_YMMREG: + fprintf(f, "ymm%d", (int)(reg&0xF)); + break; + case X86_CRREG: + fprintf(f, "cr%d", (int)(reg&0xF)); + break; + case X86_DRREG: + fprintf(f, "dr%d", (int)(reg&0xF)); + break; + case X86_TRREG: + fprintf(f, "tr%d", (int)(reg&0xF)); + break; + case X86_FPUREG: + fprintf(f, "st%d", (int)(reg&0xF)); + break; + default: + yasm_error_set(YASM_ERROR_VALUE, N_("unknown register size")); + } +} + +static void +x86_segreg_print(yasm_arch *arch, uintptr_t segreg, FILE *f) +{ + static const char *name[] = {"es","cs","ss","ds","fs","gs"}; + fprintf(f, "%s", name[segreg&7]); +} + +/* Define x86 machines -- see arch.h for details */ +static const yasm_arch_machine x86_machines[] = { + { "IA-32 and derivatives", "x86" }, + { "AMD64", "amd64" }, + { "X32", "x32" }, + { NULL, NULL } +}; + +static const yasm_directive x86_directives[] = { + { "cpu", "nasm", x86_dir_cpu, YASM_DIR_ARG_REQUIRED }, + { "bits", "nasm", x86_dir_bits, YASM_DIR_ARG_REQUIRED }, + { ".code16", "gas", x86_dir_code16, YASM_DIR_ANY }, + { ".code32", "gas", x86_dir_code32, YASM_DIR_ANY }, + { ".code64", "gas", x86_dir_code64, YASM_DIR_ANY }, + { NULL, NULL, NULL, 0 } +}; + +/* Define arch structure -- see arch.h for details */ +yasm_arch_module yasm_x86_LTX_arch = { + "x86 (IA-32 and derivatives), AMD64", + "x86", + x86_directives, + x86_create, + x86_destroy, + x86_get_machine, + x86_get_address_size, + x86_set_var, + yasm_x86__parse_check_insnprefix, + yasm_x86__parse_check_regtmod, + x86_get_fill, + yasm_x86__floatnum_tobytes, + yasm_x86__intnum_tobytes, + x86_get_reg_size, + x86_reggroup_get_reg, + x86_reg_print, + x86_segreg_print, + yasm_x86__ea_create_expr, + yasm_x86__ea_destroy, + yasm_x86__ea_print, + yasm_x86__create_empty_insn, + x86_machines, + "x86", + 16, + 1 +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86arch.h b/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86arch.h new file mode 100644 index 0000000000..78c3d73920 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86arch.h @@ -0,0 +1,336 @@ +/* + * x86 Architecture header file + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + */ +#ifndef YASM_X86ARCH_H +#define YASM_X86ARCH_H + +#include + +/* Available CPU feature flags */ +#define CPU_Any 0 /* Any old cpu will do */ +#define CPU_086 CPU_Any +#define CPU_186 1 /* i186 or better required */ +#define CPU_286 2 /* i286 or better required */ +#define CPU_386 3 /* i386 or better required */ +#define CPU_486 4 /* i486 or better required */ +#define CPU_586 5 /* i585 or better required */ +#define CPU_686 6 /* i686 or better required */ +#define CPU_P3 7 /* Pentium3 or better required */ +#define CPU_P4 8 /* Pentium4 or better required */ +#define CPU_IA64 9 /* IA-64 or better required */ +#define CPU_K6 10 /* AMD K6 or better required */ +#define CPU_Athlon 11 /* AMD Athlon or better required */ +#define CPU_Hammer 12 /* AMD Sledgehammer or better required */ +#define CPU_FPU 13 /* FPU support required */ +#define CPU_MMX 14 /* MMX support required */ +#define CPU_SSE 15 /* Streaming SIMD extensions required */ +#define CPU_SSE2 16 /* Streaming SIMD extensions 2 required */ +#define CPU_SSE3 17 /* Streaming SIMD extensions 3 required */ +#define CPU_3DNow 18 /* 3DNow! support required */ +#define CPU_Cyrix 19 /* Cyrix-specific instruction */ +#define CPU_AMD 20 /* AMD-specific inst. (older than K6) */ +#define CPU_SMM 21 /* System Management Mode instruction */ +#define CPU_Prot 22 /* Protected mode only instruction */ +#define CPU_Undoc 23 /* Undocumented instruction */ +#define CPU_Obs 24 /* Obsolete instruction */ +#define CPU_Priv 25 /* Priveleged instruction */ +#define CPU_SVM 26 /* Secure Virtual Machine instruction */ +#define CPU_PadLock 27 /* VIA PadLock instruction */ +#define CPU_EM64T 28 /* Intel EM64T or better */ +#define CPU_SSSE3 29 /* Streaming SIMD extensions 3 required */ +#define CPU_SSE41 30 /* Streaming SIMD extensions 4.1 required */ +#define CPU_SSE42 31 /* Streaming SIMD extensions 4.2 required */ +#define CPU_SSE4a 32 /* AMD Streaming SIMD extensions 4a required */ +#define CPU_XSAVE 33 /* Intel XSAVE instructions */ +#define CPU_AVX 34 /* Intel Advanced Vector Extensions */ +#define CPU_FMA 35 /* Intel Fused-Multiply-Add Extensions */ +#define CPU_AES 36 /* AES instruction */ +#define CPU_CLMUL 37 /* PCLMULQDQ instruction */ +#define CPU_MOVBE 38 /* MOVBE instruction */ +#define CPU_XOP 39 /* AMD XOP extensions */ +#define CPU_FMA4 40 /* AMD Fused-Multiply-Add extensions */ +#define CPU_F16C 41 /* Intel float-16 instructions */ +#define CPU_FSGSBASE 42 /* Intel FSGSBASE instructions */ +#define CPU_RDRAND 43 /* Intel RDRAND instruction */ +#define CPU_XSAVEOPT 44 /* Intel XSAVEOPT instruction */ +#define CPU_EPTVPID 45 /* Intel INVEPT, INVVPID instructions */ +#define CPU_SMX 46 /* Intel SMX instruction (GETSEC) */ +#define CPU_AVX2 47 /* Intel AVX2 instructions */ +#define CPU_BMI1 48 /* Intel BMI1 instructions */ +#define CPU_BMI2 49 /* Intel BMI2 instructions */ +#define CPU_INVPCID 50 /* Intel INVPCID instruction */ +#define CPU_LZCNT 51 /* Intel LZCNT instruction */ +#define CPU_TBM 52 /* AMD TBM instruction */ +#define CPU_TSX 53 /* Intel TSX instructions */ +#define CPU_SHA 54 /* Intel SHA instructions */ +#define CPU_SMAP 55 /* Intel SMAP instructions */ +#define CPU_RDSEED 56 /* Intel RDSEED instruction */ +#define CPU_ADX 57 /* Intel ADCX and ADOX instructions */ +#define CPU_PRFCHW 58 /* Intel/AMD PREFETCHW instruction */ + +enum x86_parser_type { + X86_PARSER_NASM = 0, + X86_PARSER_TASM = 1, + X86_PARSER_GAS = 2 +}; + +#define PARSER(arch) (((arch)->parser == X86_PARSER_GAS && (arch)->gas_intel_mode) ? X86_PARSER_NASM : (arch)->parser) + +typedef struct yasm_arch_x86 { + yasm_arch_base arch; /* base structure */ + + /* What instructions/features are enabled? */ + unsigned int active_cpu; /* active index into cpu_enables table */ + unsigned int cpu_enables_size; /* size of cpu_enables table */ + wordptr *cpu_enables; + + unsigned int amd64_machine; + enum x86_parser_type parser; + unsigned int mode_bits; + unsigned int address_size; + unsigned int force_strict; + unsigned int default_rel; + unsigned int gas_intel_mode; + + enum { + X86_NOP_BASIC = 0, + X86_NOP_INTEL = 1, + X86_NOP_AMD = 2 + } nop; +} yasm_arch_x86; + +/* 0-15 (low 4 bits) used for register number, stored in same data area. + * Note 8-15 are only valid for some registers, and only in 64-bit mode. + */ +typedef enum { + X86_REG8 = 0x1<<4, + X86_REG8X = 0x2<<4, /* 64-bit mode only, REX prefix version of REG8 */ + X86_REG16 = 0x3<<4, + X86_REG32 = 0x4<<4, + X86_REG64 = 0x5<<4, /* 64-bit mode only */ + X86_FPUREG = 0x6<<4, + X86_MMXREG = 0x7<<4, + X86_XMMREG = 0x8<<4, + X86_YMMREG = 0x9<<4, + X86_CRREG = 0xA<<4, + X86_DRREG = 0xB<<4, + X86_TRREG = 0xC<<4, + X86_RIP = 0xD<<4 /* 64-bit mode only, always RIP (regnum ignored) */ +} x86_expritem_reg_size; + +/* Low 8 bits are used for the prefix value, stored in same data area. */ +typedef enum { + X86_LOCKREP = 1<<8, + X86_ADDRSIZE = 2<<8, + X86_OPERSIZE = 3<<8, + X86_SEGREG = 4<<8, + X86_REX = 5<<8, + X86_ACQREL = 6<<8 /*TSX hint prefixes*/ +} x86_parse_insn_prefix; + +typedef enum { + X86_NEAR = 1, + X86_SHORT, + X86_FAR, + X86_TO +} x86_parse_targetmod; + +typedef enum { + JMP_NONE, + JMP_SHORT, + JMP_NEAR, + JMP_SHORT_FORCED, + JMP_NEAR_FORCED +} x86_jmp_opcode_sel; + +typedef enum { + X86_REX_W = 3, + X86_REX_R = 2, + X86_REX_X = 1, + X86_REX_B = 0 +} x86_rex_bit_pos; + +/* Sets REX (4th bit) and 3 LS bits from register size/number. Returns 1 if + * impossible to fit reg into REX, otherwise returns 0. Input parameter rexbit + * indicates bit of REX to use if REX is needed. Will not modify REX if not + * in 64-bit mode or if it wasn't needed to express reg. + */ +int yasm_x86__set_rex_from_reg(unsigned char *rex, unsigned char *low3, + uintptr_t reg, unsigned int bits, + x86_rex_bit_pos rexbit); + +/* Effective address type */ +typedef struct x86_effaddr { + yasm_effaddr ea; /* base structure */ + + /* VSIB uses the normal SIB byte, but this flag enables it. */ + unsigned char vsib_mode; /* 0 if not, 1 if XMM, 2 if YMM */ + + /* How the spare (register) bits in Mod/RM are handled: + * Even if valid_modrm=0, the spare bits are still valid (don't overwrite!) + * They're set in bytecode_create_insn(). + */ + unsigned char modrm; + unsigned char valid_modrm; /* 1 if Mod/RM byte currently valid, 0 if not */ + unsigned char need_modrm; /* 1 if Mod/RM byte needed, 0 if not */ + + unsigned char sib; + unsigned char valid_sib; /* 1 if SIB byte currently valid, 0 if not */ + unsigned char need_sib; /* 1 if SIB byte needed, 0 if not, + 0xff if unknown */ +} x86_effaddr; + +void yasm_x86__ea_init(x86_effaddr *x86_ea, unsigned int spare, + yasm_bytecode *precbc); + +void yasm_x86__ea_set_disponly(x86_effaddr *x86_ea); +x86_effaddr *yasm_x86__ea_create_reg(x86_effaddr *x86_ea, unsigned long reg, + unsigned char *rex, unsigned int bits); +x86_effaddr *yasm_x86__ea_create_imm + (x86_effaddr *x86_ea, /*@keep@*/ yasm_expr *imm, unsigned int im_len); +yasm_effaddr *yasm_x86__ea_create_expr(yasm_arch *arch, + /*@keep@*/ yasm_expr *e); +void yasm_x86__ea_destroy(yasm_effaddr *ea); +void yasm_x86__ea_print(const yasm_effaddr *ea, FILE *f, int indent_level); + +void yasm_x86__bc_insn_opersize_override(yasm_bytecode *bc, + unsigned int opersize); +void yasm_x86__bc_insn_addrsize_override(yasm_bytecode *bc, + unsigned int addrsize); +void yasm_x86__bc_insn_set_lockrep_prefix(yasm_bytecode *bc, + unsigned int prefix); + +/* Bytecode types */ +typedef struct x86_common { + unsigned char addrsize; /* 0 or =mode_bits => no override */ + unsigned char opersize; /* 0 or =mode_bits => no override */ + unsigned char lockrep_pre; /* 0 indicates no prefix */ + unsigned char acqrel_pre; /* 0 indicates no prefix. We need this because + xqcuire/xrelease might require F0 prefix */ + + unsigned char mode_bits; +} x86_common; + +typedef struct x86_opcode { + unsigned char opcode[3]; /* opcode */ + unsigned char len; +} x86_opcode; + +typedef struct x86_insn { + x86_common common; /* common x86 information */ + x86_opcode opcode; + + /*@null@*/ x86_effaddr *x86_ea; /* effective address */ + + /*@null@*/ yasm_value *imm; /* immediate or relative value */ + + unsigned char def_opersize_64; /* default operand size in 64-bit mode */ + unsigned char special_prefix; /* "special" prefix (0=none) */ + + unsigned char rex; /* REX AMD64 extension, 0 if none, + 0xff if not allowed (high 8 bit reg used) */ + + /* Postponed (from parsing to later binding) action options. */ + enum { + /* None */ + X86_POSTOP_NONE = 0, + + /* Instructions that take a sign-extended imm8 as well as imm values + * (eg, the arith instructions and a subset of the imul instructions) + * should set this and put the imm8 form as the "normal" opcode (in + * the first one or two bytes) and non-imm8 form in the second or + * third byte of the opcode. + */ + X86_POSTOP_SIGNEXT_IMM8, + + /* Override any attempt at address-size override to 16 bits, and never + * generate a prefix. This is used for the ENTER opcode. + */ + X86_POSTOP_ADDRESS16 + } postop; +} x86_insn; + +typedef struct x86_jmp { + x86_common common; /* common x86 information */ + x86_opcode shortop, nearop; + + yasm_value target; /* jump target */ + + /* which opcode are we using? */ + /* The *FORCED forms are specified in the source as such */ + x86_jmp_opcode_sel op_sel; +} x86_jmp; + +/* Direct (immediate) FAR jumps ONLY; indirect FAR jumps get turned into + * x86_insn bytecodes; relative jumps turn into x86_jmp bytecodes. + * This bytecode is not legal in 64-bit mode. + */ +typedef struct x86_jmpfar { + x86_common common; /* common x86 information */ + x86_opcode opcode; + + yasm_value segment; /* target segment */ + yasm_value offset; /* target offset */ +} x86_jmpfar; + +void yasm_x86__bc_transform_insn(yasm_bytecode *bc, x86_insn *insn); +void yasm_x86__bc_transform_jmp(yasm_bytecode *bc, x86_jmp *jmp); +void yasm_x86__bc_transform_jmpfar(yasm_bytecode *bc, x86_jmpfar *jmpfar); + +void yasm_x86__bc_apply_prefixes + (x86_common *common, unsigned char *rex, unsigned int def_opersize_64, + unsigned int num_prefixes, uintptr_t *prefixes); + +/* Check an effective address. Returns 0 if EA was successfully determined, + * 1 if invalid EA, or 2 if indeterminate EA. + */ +int yasm_x86__expr_checkea + (x86_effaddr *x86_ea, unsigned char *addrsize, unsigned int bits, + int address16_op, unsigned char *rex, yasm_bytecode *bc); + +void yasm_x86__parse_cpu(yasm_arch_x86 *arch_x86, const char *cpuid, + size_t cpuid_len); + +yasm_arch_insnprefix yasm_x86__parse_check_insnprefix + (yasm_arch *arch, const char *id, size_t id_len, unsigned long line, + /*@out@*/ yasm_bytecode **bc, /*@out@*/ uintptr_t *prefix); +yasm_arch_regtmod yasm_x86__parse_check_regtmod + (yasm_arch *arch, const char *id, size_t id_len, + /*@out@*/ uintptr_t *data); + +int yasm_x86__floatnum_tobytes + (yasm_arch *arch, const yasm_floatnum *flt, unsigned char *buf, + size_t destsize, size_t valsize, size_t shift, int warn); +int yasm_x86__intnum_tobytes + (yasm_arch *arch, const yasm_intnum *intn, unsigned char *buf, + size_t destsize, size_t valsize, int shift, const yasm_bytecode *bc, + int warn); + +unsigned int yasm_x86__get_reg_size(uintptr_t reg); + +/*@only@*/ yasm_bytecode *yasm_x86__create_empty_insn(yasm_arch *arch, + unsigned long line); +#endif diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86bc.c b/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86bc.c new file mode 100644 index 0000000000..a6681552dd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86bc.c @@ -0,0 +1,1062 @@ +/* + * x86 bytecode utility functions + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "x86arch.h" + + +/* Bytecode callback function prototypes */ + +static void x86_bc_insn_destroy(void *contents); +static void x86_bc_insn_print(const void *contents, FILE *f, + int indent_level); +static int x86_bc_insn_calc_len(yasm_bytecode *bc, + yasm_bc_add_span_func add_span, + void *add_span_data); +static int x86_bc_insn_expand(yasm_bytecode *bc, int span, long old_val, + long new_val, /*@out@*/ long *neg_thres, + /*@out@*/ long *pos_thres); +static int x86_bc_insn_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, + void *d, yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +static void x86_bc_jmp_destroy(void *contents); +static void x86_bc_jmp_print(const void *contents, FILE *f, int indent_level); +static int x86_bc_jmp_calc_len(yasm_bytecode *bc, + yasm_bc_add_span_func add_span, + void *add_span_data); +static int x86_bc_jmp_expand(yasm_bytecode *bc, int span, long old_val, + long new_val, /*@out@*/ long *neg_thres, + /*@out@*/ long *pos_thres); +static int x86_bc_jmp_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, + void *d, yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +static void x86_bc_jmpfar_destroy(void *contents); +static void x86_bc_jmpfar_print(const void *contents, FILE *f, + int indent_level); +static int x86_bc_jmpfar_calc_len(yasm_bytecode *bc, + yasm_bc_add_span_func add_span, + void *add_span_data); +static int x86_bc_jmpfar_tobytes + (yasm_bytecode *bc, unsigned char **bufp, unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +/* Bytecode callback structures */ + +static const yasm_bytecode_callback x86_bc_callback_insn = { + x86_bc_insn_destroy, + x86_bc_insn_print, + yasm_bc_finalize_common, + NULL, + x86_bc_insn_calc_len, + x86_bc_insn_expand, + x86_bc_insn_tobytes, + 0 +}; + +static const yasm_bytecode_callback x86_bc_callback_jmp = { + x86_bc_jmp_destroy, + x86_bc_jmp_print, + yasm_bc_finalize_common, + NULL, + x86_bc_jmp_calc_len, + x86_bc_jmp_expand, + x86_bc_jmp_tobytes, + 0 +}; + +static const yasm_bytecode_callback x86_bc_callback_jmpfar = { + x86_bc_jmpfar_destroy, + x86_bc_jmpfar_print, + yasm_bc_finalize_common, + NULL, + x86_bc_jmpfar_calc_len, + yasm_bc_expand_common, + x86_bc_jmpfar_tobytes, + 0 +}; + +int +yasm_x86__set_rex_from_reg(unsigned char *rex, unsigned char *low3, + uintptr_t reg, unsigned int bits, + x86_rex_bit_pos rexbit) +{ + *low3 = (unsigned char)(reg&7); + + if (bits == 64) { + x86_expritem_reg_size size = (x86_expritem_reg_size)(reg & ~0xFUL); + + if (size == X86_REG8X || (reg & 0xF) >= 8) { + /* Check to make sure we can set it */ + if (*rex == 0xff) { + yasm_error_set(YASM_ERROR_TYPE, + N_("cannot use A/B/C/DH with instruction needing REX")); + return 1; + } + *rex |= 0x40 | (((reg & 8) >> 3) << rexbit); + } else if (size == X86_REG8 && (reg & 7) >= 4) { + /* AH/BH/CH/DH, so no REX allowed */ + if (*rex != 0 && *rex != 0xff) { + yasm_error_set(YASM_ERROR_TYPE, + N_("cannot use A/B/C/DH with instruction needing REX")); + return 1; + } + *rex = 0xff; /* Flag so we can NEVER set it (see above) */ + } + } + + return 0; +} + +void +yasm_x86__bc_transform_insn(yasm_bytecode *bc, x86_insn *insn) +{ + yasm_bc_transform(bc, &x86_bc_callback_insn, insn); +} + +void +yasm_x86__bc_transform_jmp(yasm_bytecode *bc, x86_jmp *jmp) +{ + yasm_bc_transform(bc, &x86_bc_callback_jmp, jmp); +} + +void +yasm_x86__bc_transform_jmpfar(yasm_bytecode *bc, x86_jmpfar *jmpfar) +{ + yasm_bc_transform(bc, &x86_bc_callback_jmpfar, jmpfar); +} + +void +yasm_x86__ea_init(x86_effaddr *x86_ea, unsigned int spare, + yasm_bytecode *precbc) +{ + if (yasm_value_finalize(&x86_ea->ea.disp, precbc)) + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("effective address too complex")); + x86_ea->modrm &= 0xC7; /* zero spare/reg bits */ + x86_ea->modrm |= (spare << 3) & 0x38; /* plug in provided bits */ +} + +void +yasm_x86__ea_set_disponly(x86_effaddr *x86_ea) +{ + x86_ea->valid_modrm = 0; + x86_ea->need_modrm = 0; + x86_ea->valid_sib = 0; + x86_ea->need_sib = 0; +} + +static x86_effaddr * +ea_create(void) +{ + x86_effaddr *x86_ea = yasm_xmalloc(sizeof(x86_effaddr)); + + yasm_value_initialize(&x86_ea->ea.disp, NULL, 0); + x86_ea->ea.need_nonzero_len = 0; + x86_ea->ea.need_disp = 0; + x86_ea->ea.nosplit = 0; + x86_ea->ea.strong = 0; + x86_ea->ea.segreg = 0; + x86_ea->ea.pc_rel = 0; + x86_ea->ea.not_pc_rel = 0; + x86_ea->ea.data_len = 0; + x86_ea->vsib_mode = 0; + x86_ea->modrm = 0; + x86_ea->valid_modrm = 0; + x86_ea->need_modrm = 0; + x86_ea->sib = 0; + x86_ea->valid_sib = 0; + x86_ea->need_sib = 0; + + return x86_ea; +} + +x86_effaddr * +yasm_x86__ea_create_reg(x86_effaddr *x86_ea, unsigned long reg, + unsigned char *rex, unsigned int bits) +{ + unsigned char rm; + + if (yasm_x86__set_rex_from_reg(rex, &rm, reg, bits, X86_REX_B)) + return NULL; + + if (!x86_ea) + x86_ea = ea_create(); + x86_ea->modrm = 0xC0 | rm; /* Mod=11, R/M=Reg, Reg=0 */ + x86_ea->valid_modrm = 1; + x86_ea->need_modrm = 1; + + return x86_ea; +} + +yasm_effaddr * +yasm_x86__ea_create_expr(yasm_arch *arch, yasm_expr *e) +{ + yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)arch; + x86_effaddr *x86_ea; + + x86_ea = ea_create(); + + if (arch_x86->parser == X86_PARSER_GAS) { + /* Need to change foo+rip into foo wrt rip (even in .intel_syntax mode). + * Note this assumes a particular ordering coming from the parser + * to work (it's not very smart)! + */ + if (e->op == YASM_EXPR_ADD && e->terms[0].type == YASM_EXPR_REG + && e->terms[0].data.reg == X86_RIP) { + /* replace register with 0 */ + e->terms[0].type = YASM_EXPR_INT; + e->terms[0].data.intn = yasm_intnum_create_uint(0); + /* build new wrt expression */ + e = yasm_expr_create(YASM_EXPR_WRT, yasm_expr_expr(e), + yasm_expr_reg(X86_RIP), e->line); + } + } + yasm_value_initialize(&x86_ea->ea.disp, e, 0); + x86_ea->ea.need_disp = 1; + x86_ea->need_modrm = 1; + /* We won't know whether we need an SIB until we know more about expr and + * the BITS/address override setting. + */ + x86_ea->need_sib = 0xff; + + x86_ea->ea.data_len = 0; + + return (yasm_effaddr *)x86_ea; +} + +/*@-compmempass@*/ +x86_effaddr * +yasm_x86__ea_create_imm(x86_effaddr *x86_ea, yasm_expr *imm, + unsigned int im_len) +{ + if (!x86_ea) + x86_ea = ea_create(); + yasm_value_initialize(&x86_ea->ea.disp, imm, im_len); + x86_ea->ea.need_disp = 1; + + return x86_ea; +} +/*@=compmempass@*/ + +void +yasm_x86__bc_apply_prefixes(x86_common *common, unsigned char *rex, + unsigned int def_opersize_64, + unsigned int num_prefixes, uintptr_t *prefixes) +{ + unsigned int i; + int first = 1; + + for (i=0; iacqrel_pre != 0) + yasm_warn_set(YASM_WARN_GENERAL, + N_("multiple XACQUIRE/XRELEASE prefixes, " + "using leftmost")); + common->acqrel_pre = (unsigned char)prefixes[i] & 0xff; + break; + case X86_LOCKREP: + if (common->lockrep_pre != 0) + yasm_warn_set(YASM_WARN_GENERAL, + N_("multiple LOCK or REP prefixes, using leftmost")); + common->lockrep_pre = (unsigned char)prefixes[i] & 0xff; + break; + case X86_ADDRSIZE: + common->addrsize = (unsigned char)prefixes[i] & 0xff; + break; + case X86_OPERSIZE: + common->opersize = (unsigned char)prefixes[i] & 0xff; + if (common->mode_bits == 64 && common->opersize == 64 && + def_opersize_64 != 64) { + if (!rex) + yasm_warn_set(YASM_WARN_GENERAL, + N_("ignoring REX prefix on jump")); + else if (*rex == 0xff) + yasm_warn_set(YASM_WARN_GENERAL, + N_("REX prefix not allowed on this instruction, ignoring")); + else + *rex = 0x48; + } + break; + case X86_SEGREG: + /* This is a hack.. we should really be putting this in the + * the effective address! + */ + common->lockrep_pre = (unsigned char)prefixes[i] & 0xff; + break; + case X86_REX: + if (!rex) + yasm_warn_set(YASM_WARN_GENERAL, + N_("ignoring REX prefix on jump")); + else if (*rex == 0xff) + yasm_warn_set(YASM_WARN_GENERAL, + N_("REX prefix not allowed on this instruction, ignoring")); + else { + if (*rex != 0) { + if (first) + yasm_warn_set(YASM_WARN_GENERAL, + N_("overriding generated REX prefix")); + else + yasm_warn_set(YASM_WARN_GENERAL, + N_("multiple REX prefixes, using leftmost")); + } + /* Here we assume that we can't get this prefix in non + * 64 bit mode due to checks in parse_check_prefix(). + */ + common->mode_bits = 64; + *rex = (unsigned char)prefixes[i] & 0xff; + } + first = 0; + break; + } + } +} + +static void +x86_bc_insn_destroy(void *contents) +{ + x86_insn *insn = (x86_insn *)contents; + if (insn->x86_ea) + yasm_x86__ea_destroy((yasm_effaddr *)insn->x86_ea); + if (insn->imm) { + yasm_value_delete(insn->imm); + yasm_xfree(insn->imm); + } + yasm_xfree(contents); +} + +static void +x86_bc_jmp_destroy(void *contents) +{ + x86_jmp *jmp = (x86_jmp *)contents; + yasm_value_delete(&jmp->target); + yasm_xfree(contents); +} + +static void +x86_bc_jmpfar_destroy(void *contents) +{ + x86_jmpfar *jmpfar = (x86_jmpfar *)contents; + yasm_value_delete(&jmpfar->segment); + yasm_value_delete(&jmpfar->offset); + yasm_xfree(contents); +} + +void +yasm_x86__ea_destroy(yasm_effaddr *ea) +{ + yasm_value_delete(&ea->disp); + yasm_xfree(ea); +} + +void +yasm_x86__ea_print(const yasm_effaddr *ea, FILE *f, int indent_level) +{ + const x86_effaddr *x86_ea = (const x86_effaddr *)ea; + fprintf(f, "%*sDisp:\n", indent_level, ""); + yasm_value_print(&ea->disp, f, indent_level+1); + fprintf(f, "%*sNoSplit=%u\n", indent_level, "", (unsigned int)ea->nosplit); + fprintf(f, "%*sSegmentOv=%02x\n", indent_level, "", + (unsigned int)x86_ea->ea.segreg); + fprintf(f, "%*sVSIBMode=%u\n", indent_level, "", + (unsigned int)x86_ea->vsib_mode); + fprintf(f, "%*sModRM=%03o ValidRM=%u NeedRM=%u\n", indent_level, "", + (unsigned int)x86_ea->modrm, (unsigned int)x86_ea->valid_modrm, + (unsigned int)x86_ea->need_modrm); + fprintf(f, "%*sSIB=%03o ValidSIB=%u NeedSIB=%u\n", indent_level, "", + (unsigned int)x86_ea->sib, (unsigned int)x86_ea->valid_sib, + (unsigned int)x86_ea->need_sib); +} + +static void +x86_common_print(const x86_common *common, FILE *f, int indent_level) +{ + fprintf(f, "%*sAddrSize=%u OperSize=%u LockRepPre=%02x " + "ACQREL_Pre=%02x BITS=%u\n", + indent_level, "", + (unsigned int)common->addrsize, + (unsigned int)common->opersize, + (unsigned int)common->lockrep_pre, + (unsigned int)common->acqrel_pre, + (unsigned int)common->mode_bits); +} + +static void +x86_opcode_print(const x86_opcode *opcode, FILE *f, int indent_level) +{ + fprintf(f, "%*sOpcode: %02x %02x %02x OpLen=%u\n", indent_level, "", + (unsigned int)opcode->opcode[0], + (unsigned int)opcode->opcode[1], + (unsigned int)opcode->opcode[2], + (unsigned int)opcode->len); +} + +static void +x86_bc_insn_print(const void *contents, FILE *f, int indent_level) +{ + const x86_insn *insn = (const x86_insn *)contents; + + fprintf(f, "%*s_Instruction_\n", indent_level, ""); + fprintf(f, "%*sEffective Address:", indent_level, ""); + if (insn->x86_ea) { + fprintf(f, "\n"); + yasm_x86__ea_print((yasm_effaddr *)insn->x86_ea, f, indent_level+1); + } else + fprintf(f, " (nil)\n"); + fprintf(f, "%*sImmediate Value:", indent_level, ""); + if (!insn->imm) + fprintf(f, " (nil)\n"); + else { + indent_level++; + fprintf(f, "\n"); + yasm_value_print(insn->imm, f, indent_level); + indent_level--; + } + x86_opcode_print(&insn->opcode, f, indent_level); + x86_common_print(&insn->common, f, indent_level); + fprintf(f, "%*sSpPre=%02x REX=%03o PostOp=%u\n", indent_level, "", + (unsigned int)insn->special_prefix, + (unsigned int)insn->rex, + (unsigned int)insn->postop); +} + +static void +x86_bc_jmp_print(const void *contents, FILE *f, int indent_level) +{ + const x86_jmp *jmp = (const x86_jmp *)contents; + + fprintf(f, "%*s_Jump_\n", indent_level, ""); + fprintf(f, "%*sTarget:\n", indent_level, ""); + yasm_value_print(&jmp->target, f, indent_level+1); + /* FIXME + fprintf(f, "%*sOrigin=\n", indent_level, ""); + yasm_symrec_print(jmp->origin, f, indent_level+1); + */ + fprintf(f, "\n%*sShort Form:\n", indent_level, ""); + if (jmp->shortop.len == 0) + fprintf(f, "%*sNone\n", indent_level+1, ""); + else + x86_opcode_print(&jmp->shortop, f, indent_level+1); + fprintf(f, "%*sNear Form:\n", indent_level, ""); + if (jmp->nearop.len == 0) + fprintf(f, "%*sNone\n", indent_level+1, ""); + else + x86_opcode_print(&jmp->nearop, f, indent_level+1); + fprintf(f, "%*sOpSel=", indent_level, ""); + switch (jmp->op_sel) { + case JMP_NONE: + fprintf(f, "None"); + break; + case JMP_SHORT: + fprintf(f, "Short"); + break; + case JMP_NEAR: + fprintf(f, "Near"); + break; + case JMP_SHORT_FORCED: + fprintf(f, "Forced Short"); + break; + case JMP_NEAR_FORCED: + fprintf(f, "Forced Near"); + break; + default: + fprintf(f, "UNKNOWN!!"); + break; + } + x86_common_print(&jmp->common, f, indent_level); +} + +static void +x86_bc_jmpfar_print(const void *contents, FILE *f, int indent_level) +{ + const x86_jmpfar *jmpfar = (const x86_jmpfar *)contents; + + fprintf(f, "%*s_Far_Jump_\n", indent_level, ""); + fprintf(f, "%*sSegment:\n", indent_level, ""); + yasm_value_print(&jmpfar->segment, f, indent_level+1); + fprintf(f, "%*sOffset:\n", indent_level, ""); + yasm_value_print(&jmpfar->offset, f, indent_level+1); + x86_opcode_print(&jmpfar->opcode, f, indent_level); + x86_common_print(&jmpfar->common, f, indent_level); +} + +static unsigned int +x86_common_calc_len(const x86_common *common) +{ + unsigned int len = 0; + + if (common->addrsize != 0 && common->addrsize != common->mode_bits) + len++; + if (common->opersize != 0 && + ((common->mode_bits != 64 && common->opersize != common->mode_bits) || + (common->mode_bits == 64 && common->opersize == 16))) + len++; + if (common->lockrep_pre != 0) + len++; + if (common->acqrel_pre != 0) + len++; + + + return len; +} + +static int +x86_bc_insn_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + x86_insn *insn = (x86_insn *)bc->contents; + x86_effaddr *x86_ea = insn->x86_ea; + yasm_value *imm = insn->imm; + + if (x86_ea) { + /* Check validity of effective address and calc R/M bits of + * Mod/RM byte and SIB byte. We won't know the Mod field + * of the Mod/RM byte until we know more about the + * displacement. + */ + if (yasm_x86__expr_checkea(x86_ea, &insn->common.addrsize, + insn->common.mode_bits, insn->postop == X86_POSTOP_ADDRESS16, + &insn->rex, bc)) + /* failed, don't bother checking rest of insn */ + return -1; + + if (x86_ea->ea.disp.size == 0 && x86_ea->ea.need_nonzero_len) { + /* Handle unknown case, default to byte-sized and set as + * critical expression. + */ + x86_ea->ea.disp.size = 8; + add_span(add_span_data, bc, 1, &x86_ea->ea.disp, -128, 127); + } + bc->len += x86_ea->ea.disp.size/8; + + /* Handle address16 postop case */ + if (insn->postop == X86_POSTOP_ADDRESS16) + insn->common.addrsize = 0; + + /* Compute length of ea and add to total */ + bc->len += x86_ea->need_modrm + (x86_ea->need_sib ? 1:0); + bc->len += (x86_ea->ea.segreg != 0) ? 1 : 0; + } + + if (imm) { + unsigned int immlen = imm->size; + + /* TODO: check imm->len vs. sized len from expr? */ + + /* Handle signext_imm8 postop special-casing */ + if (insn->postop == X86_POSTOP_SIGNEXT_IMM8) { + /*@null@*/ /*@only@*/ yasm_intnum *num; + num = yasm_value_get_intnum(imm, NULL, 0); + + if (!num) { + /* Unknown; default to byte form and set as critical + * expression. + */ + immlen = 8; + add_span(add_span_data, bc, 2, imm, -128, 127); + } else { + if (yasm_intnum_in_range(num, -128, 127)) { + /* We can use the sign-extended byte form: shorten + * the immediate length to 1 and make the byte form + * permanent. + */ + imm->size = 8; + imm->sign = 1; + immlen = 8; + } else { + /* We can't. Copy over the word-sized opcode. */ + insn->opcode.opcode[0] = + insn->opcode.opcode[insn->opcode.len]; + insn->opcode.len = 1; + } + insn->postop = X86_POSTOP_NONE; + yasm_intnum_destroy(num); + } + } + + bc->len += immlen/8; + } + + /* VEX and XOP prefixes never have REX (it's embedded in the opcode). + * For VEX, we can come into this function with the three byte form, + * so we need to see if we can optimize to the two byte form. + * We can't do it earlier, as we don't know all of the REX byte until now. + */ + if (insn->special_prefix == 0xC4) { + /* See if we can shorten the VEX prefix to its two byte form. + * In order to do this, REX.X, REX.B, and REX.W/VEX.W must all be 0, + * and the VEX mmmmm field must be 1. + */ + if ((insn->opcode.opcode[0] & 0x1F) == 1 && + (insn->opcode.opcode[1] & 0x80) == 0 && + (insn->rex == 0xff || (insn->rex & 0x0B) == 0)) { + insn->opcode.opcode[0] = insn->opcode.opcode[1]; + insn->opcode.opcode[1] = insn->opcode.opcode[2]; + insn->opcode.opcode[2] = 0; /* sanity */ + insn->opcode.len = 2; + insn->special_prefix = 0xC5; /* mark as two-byte VEX */ + } + } else if (insn->rex != 0xff && insn->rex != 0 && + insn->special_prefix != 0xC5 && insn->special_prefix != 0x8F) + bc->len++; + + bc->len += insn->opcode.len; + bc->len += x86_common_calc_len(&insn->common); + bc->len += (insn->special_prefix != 0) ? 1:0; + return 0; +} + +static int +x86_bc_insn_expand(yasm_bytecode *bc, int span, long old_val, long new_val, + /*@out@*/ long *neg_thres, /*@out@*/ long *pos_thres) +{ + x86_insn *insn = (x86_insn *)bc->contents; + x86_effaddr *x86_ea = insn->x86_ea; + yasm_effaddr *ea = &x86_ea->ea; + yasm_value *imm = insn->imm; + + if (ea && span == 1) { + /* Change displacement length into word-sized */ + if (ea->disp.size == 8) { + ea->disp.size = (insn->common.addrsize == 16) ? 16 : 32; + x86_ea->modrm &= ~0300; + x86_ea->modrm |= 0200; + bc->len--; + bc->len += ea->disp.size/8; + } + } + + if (imm && span == 2) { + if (insn->postop == X86_POSTOP_SIGNEXT_IMM8) { + /* Update bc->len for new opcode and immediate size */ + bc->len -= insn->opcode.len; + bc->len += imm->size/8; + + /* Change to the word-sized opcode */ + insn->opcode.opcode[0] = insn->opcode.opcode[insn->opcode.len]; + insn->opcode.len = 1; + insn->postop = X86_POSTOP_NONE; + } + } + + return 0; +} + +static int +x86_bc_jmp_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + x86_jmp *jmp = (x86_jmp *)bc->contents; + yasm_bytecode *target_prevbc; + unsigned char opersize; + + /* As opersize may be 0, figure out its "real" value. */ + opersize = (jmp->common.opersize == 0) ? + jmp->common.mode_bits : jmp->common.opersize; + + bc->len += x86_common_calc_len(&jmp->common); + + if (jmp->op_sel == JMP_NEAR_FORCED || jmp->shortop.len == 0) { + if (jmp->nearop.len == 0) { + yasm_error_set(YASM_ERROR_TYPE, N_("near jump does not exist")); + return -1; + } + + /* Near jump, no spans needed */ + if (jmp->shortop.len == 0) + jmp->op_sel = JMP_NEAR; + bc->len += jmp->nearop.len; + bc->len += (opersize == 16) ? 2 : 4; + return 0; + } + + if (jmp->op_sel == JMP_SHORT_FORCED || jmp->nearop.len == 0) { + if (jmp->shortop.len == 0) { + yasm_error_set(YASM_ERROR_TYPE, N_("short jump does not exist")); + return -1; + } + + /* We want to be sure to error if we exceed short length, so + * put it in as a dependent expression (falling through). + */ + } + + if (jmp->target.rel + && (!yasm_symrec_get_label(jmp->target.rel, &target_prevbc) + || target_prevbc->section != bc->section)) { + /* External or out of segment, so we can't check distance. + * Allowing short jumps depends on the objfmt supporting + * 8-bit relocs. While most don't, some might, so allow it here. + * Otherwise default to word-sized. + * The objfmt will error if not supported. + */ + if (jmp->op_sel == JMP_SHORT_FORCED || jmp->nearop.len == 0) { + if (jmp->op_sel == JMP_NONE) + jmp->op_sel = JMP_SHORT; + bc->len += jmp->shortop.len + 1; + } else { + jmp->op_sel = JMP_NEAR; + bc->len += jmp->nearop.len; + bc->len += (opersize == 16) ? 2 : 4; + } + return 0; + } + + /* Default to short jump and generate span */ + if (jmp->op_sel == JMP_NONE) + jmp->op_sel = JMP_SHORT; + bc->len += jmp->shortop.len + 1; + add_span(add_span_data, bc, 1, &jmp->target, -128+(long)bc->len, + 127+(long)bc->len); + return 0; +} + +static int +x86_bc_jmp_expand(yasm_bytecode *bc, int span, long old_val, long new_val, + /*@out@*/ long *neg_thres, /*@out@*/ long *pos_thres) +{ + x86_jmp *jmp = (x86_jmp *)bc->contents; + unsigned char opersize; + + if (span != 1) + yasm_internal_error(N_("unrecognized span id")); + + /* As opersize may be 0, figure out its "real" value. */ + opersize = (jmp->common.opersize == 0) ? + jmp->common.mode_bits : jmp->common.opersize; + + if (jmp->op_sel == JMP_SHORT_FORCED || jmp->nearop.len == 0) { + yasm_error_set(YASM_ERROR_VALUE, N_("short jump out of range")); + return -1; + } + + if (jmp->op_sel == JMP_NEAR) + yasm_internal_error(N_("trying to expand an already-near jump")); + + /* Upgrade to a near jump */ + jmp->op_sel = JMP_NEAR; + bc->len -= jmp->shortop.len + 1; + bc->len += jmp->nearop.len; + bc->len += (opersize == 16) ? 2 : 4; + + return 0; +} + +static int +x86_bc_jmpfar_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + x86_jmpfar *jmpfar = (x86_jmpfar *)bc->contents; + unsigned char opersize; + + opersize = (jmpfar->common.opersize == 0) ? + jmpfar->common.mode_bits : jmpfar->common.opersize; + + bc->len += jmpfar->opcode.len; + bc->len += 2; /* segment */ + bc->len += (opersize == 16) ? 2 : 4; + bc->len += x86_common_calc_len(&jmpfar->common); + + return 0; +} + +static void +x86_common_tobytes(const x86_common *common, unsigned char **bufp, + unsigned int segreg) +{ + if (segreg != 0) + YASM_WRITE_8(*bufp, (unsigned char)segreg); + if (common->addrsize != 0 && common->addrsize != common->mode_bits) + YASM_WRITE_8(*bufp, 0x67); + if (common->opersize != 0 && + ((common->mode_bits != 64 && common->opersize != common->mode_bits) || + (common->mode_bits == 64 && common->opersize == 16))) + YASM_WRITE_8(*bufp, 0x66); + /*TSX hints come before lock prefix*/ + if (common->acqrel_pre != 0) + YASM_WRITE_8(*bufp, common->acqrel_pre); + if (common->lockrep_pre != 0) + YASM_WRITE_8(*bufp, common->lockrep_pre); +} + +static void +x86_opcode_tobytes(const x86_opcode *opcode, unsigned char **bufp) +{ + unsigned int i; + for (i=0; ilen; i++) + YASM_WRITE_8(*bufp, opcode->opcode[i]); +} + +static int +x86_bc_insn_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@unused@*/ yasm_output_reloc_func output_reloc) +{ + x86_insn *insn = (x86_insn *)bc->contents; + /*@null@*/ x86_effaddr *x86_ea = (x86_effaddr *)insn->x86_ea; + yasm_value *imm = insn->imm; + + /* Prefixes */ + x86_common_tobytes(&insn->common, bufp, + x86_ea ? (unsigned int)(x86_ea->ea.segreg>>8) : 0); + if (insn->special_prefix != 0) + YASM_WRITE_8(*bufp, insn->special_prefix); + if (insn->special_prefix == 0xC4 || insn->special_prefix == 0x8F) { + /* 3-byte VEX/XOP; merge in 1s complement of REX.R, REX.X, REX.B */ + insn->opcode.opcode[0] &= 0x1F; + if (insn->rex != 0xff) + insn->opcode.opcode[0] |= ((~insn->rex) & 0x07) << 5; + /* merge REX.W via ORing; there should never be a case in which REX.W + * is important when VEX.W is already set by the instruction. + */ + if (insn->rex != 0xff && (insn->rex & 0x8) != 0) + insn->opcode.opcode[1] |= 0x80; + } else if (insn->special_prefix == 0xC5) { + /* 2-byte VEX; merge in 1s complement of REX.R */ + insn->opcode.opcode[0] &= 0x7F; + if (insn->rex != 0xff && (insn->rex & 0x4) == 0) + insn->opcode.opcode[0] |= 0x80; + /* No other REX bits should be set */ + if (insn->rex != 0xff && (insn->rex & 0xB) != 0) + yasm_internal_error(N_("x86: REX.WXB set, but 2-byte VEX")); + } else if (insn->rex != 0xff && insn->rex != 0) { + if (insn->common.mode_bits != 64) + yasm_internal_error(N_("x86: got a REX prefix in non-64-bit mode")); + YASM_WRITE_8(*bufp, insn->rex); + } + + /* Opcode */ + x86_opcode_tobytes(&insn->opcode, bufp); + + /* Effective address: ModR/M (if required), SIB (if required), and + * displacement (if required). + */ + if (x86_ea) { + if (x86_ea->need_modrm) { + if (!x86_ea->valid_modrm) + yasm_internal_error(N_("invalid Mod/RM in x86 tobytes_insn")); + YASM_WRITE_8(*bufp, x86_ea->modrm); + } + + if (x86_ea->need_sib) { + if (!x86_ea->valid_sib) + yasm_internal_error(N_("invalid SIB in x86 tobytes_insn")); + YASM_WRITE_8(*bufp, x86_ea->sib); + } + + if (x86_ea->ea.need_disp) { + unsigned int disp_len = x86_ea->ea.disp.size/8; + + if (x86_ea->ea.disp.ip_rel) { + /* Adjust relative displacement to end of bytecode */ + /*@only@*/ yasm_intnum *delta; + delta = yasm_intnum_create_int(-(long)bc->len); + if (!x86_ea->ea.disp.abs) + x86_ea->ea.disp.abs = + yasm_expr_create_ident(yasm_expr_int(delta), bc->line); + else + x86_ea->ea.disp.abs = + yasm_expr_create(YASM_EXPR_ADD, + yasm_expr_expr(x86_ea->ea.disp.abs), + yasm_expr_int(delta), bc->line); + } + if (output_value(&x86_ea->ea.disp, *bufp, disp_len, + (unsigned long)(*bufp-bufstart), bc, 1, d)) + return 1; + *bufp += disp_len; + } + } + + /* Immediate (if required) */ + if (imm) { + unsigned int imm_len; + if (insn->postop == X86_POSTOP_SIGNEXT_IMM8) { + /* If we got here with this postop still set, we need to force + * imm size to 8 here. + */ + imm->size = 8; + imm->sign = 1; + imm_len = 1; + } else + imm_len = imm->size/8; + if (output_value(imm, *bufp, imm_len, (unsigned long)(*bufp-bufstart), + bc, 1, d)) + return 1; + *bufp += imm_len; + } + + return 0; +} + +static int +x86_bc_jmp_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@unused@*/ yasm_output_reloc_func output_reloc) +{ + x86_jmp *jmp = (x86_jmp *)bc->contents; + unsigned char opersize; + unsigned int i; + /*@only@*/ yasm_intnum *delta; + + /* Prefixes */ + x86_common_tobytes(&jmp->common, bufp, 0); + + /* As opersize may be 0, figure out its "real" value. */ + opersize = (jmp->common.opersize == 0) ? + jmp->common.mode_bits : jmp->common.opersize; + + /* Check here again to see if forms are actually legal. */ + switch (jmp->op_sel) { + case JMP_SHORT_FORCED: + case JMP_SHORT: + /* 1 byte relative displacement */ + if (jmp->shortop.len == 0) + yasm_internal_error(N_("short jump does not exist")); + + /* Opcode */ + x86_opcode_tobytes(&jmp->shortop, bufp); + + /* Adjust relative displacement to end of bytecode */ + delta = yasm_intnum_create_int(-(long)bc->len); + if (!jmp->target.abs) + jmp->target.abs = yasm_expr_create_ident(yasm_expr_int(delta), + bc->line); + else + jmp->target.abs = + yasm_expr_create(YASM_EXPR_ADD, + yasm_expr_expr(jmp->target.abs), + yasm_expr_int(delta), bc->line); + + jmp->target.size = 8; + jmp->target.sign = 1; + if (output_value(&jmp->target, *bufp, 1, + (unsigned long)(*bufp-bufstart), bc, 1, d)) + return 1; + *bufp += 1; + break; + case JMP_NEAR_FORCED: + case JMP_NEAR: + /* 2/4 byte relative displacement (depending on operand size) */ + if (jmp->nearop.len == 0) { + yasm_error_set(YASM_ERROR_TYPE, + N_("near jump does not exist")); + return 1; + } + + /* Opcode */ + x86_opcode_tobytes(&jmp->nearop, bufp); + + i = (opersize == 16) ? 2 : 4; + + /* Adjust relative displacement to end of bytecode */ + delta = yasm_intnum_create_int(-(long)bc->len); + if (!jmp->target.abs) + jmp->target.abs = yasm_expr_create_ident(yasm_expr_int(delta), + bc->line); + else + jmp->target.abs = + yasm_expr_create(YASM_EXPR_ADD, + yasm_expr_expr(jmp->target.abs), + yasm_expr_int(delta), bc->line); + + jmp->target.size = i*8; + jmp->target.sign = 1; + if (output_value(&jmp->target, *bufp, i, + (unsigned long)(*bufp-bufstart), bc, 1, d)) + return 1; + *bufp += i; + break; + case JMP_NONE: + yasm_internal_error(N_("jump op_sel cannot be JMP_NONE in tobytes")); + default: + yasm_internal_error(N_("unrecognized relative jump op_sel")); + } + return 0; +} + +static int +x86_bc_jmpfar_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@unused@*/ yasm_output_reloc_func output_reloc) +{ + x86_jmpfar *jmpfar = (x86_jmpfar *)bc->contents; + unsigned int i; + unsigned char opersize; + + x86_common_tobytes(&jmpfar->common, bufp, 0); + x86_opcode_tobytes(&jmpfar->opcode, bufp); + + /* As opersize may be 0, figure out its "real" value. */ + opersize = (jmpfar->common.opersize == 0) ? + jmpfar->common.mode_bits : jmpfar->common.opersize; + + /* Absolute displacement: segment and offset */ + i = (opersize == 16) ? 2 : 4; + jmpfar->offset.size = i*8; + if (output_value(&jmpfar->offset, *bufp, i, + (unsigned long)(*bufp-bufstart), bc, 1, d)) + return 1; + *bufp += i; + jmpfar->segment.size = 16; + if (output_value(&jmpfar->segment, *bufp, 2, + (unsigned long)(*bufp-bufstart), bc, 1, d)) + return 1; + *bufp += 2; + + return 0; +} + +int +yasm_x86__intnum_tobytes(yasm_arch *arch, const yasm_intnum *intn, + unsigned char *buf, size_t destsize, size_t valsize, + int shift, const yasm_bytecode *bc, int warn) +{ + /* Write value out. */ + yasm_intnum_get_sized(intn, buf, destsize, valsize, shift, 0, warn); + return 0; +} diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86cpu.gperf b/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86cpu.gperf new file mode 100644 index 0000000000..334ea1c8c1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86cpu.gperf @@ -0,0 +1,496 @@ +# +# x86 CPU recognition +# +# Copyright (C) 2002-2007 Peter Johnson +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include +#include +#include + +#include "modules/arch/x86/x86arch.h" + +#define PROC_8086 0 +#define PROC_186 1 +#define PROC_286 2 +#define PROC_386 3 +#define PROC_486 4 +#define PROC_586 5 +#define PROC_686 6 +#define PROC_p2 7 +#define PROC_p3 8 +#define PROC_p4 9 +#define PROC_prescott 10 +#define PROC_conroe 11 +#define PROC_penryn 12 +#define PROC_nehalem 13 +#define PROC_westmere 14 +#define PROC_sandybridge 15 +#define PROC_ivybridge 16 +#define PROC_haswell 17 +#define PROC_broadwell 18 +#define PROC_skylake 19 + +static void +x86_cpu_intel(wordptr cpu, yasm_arch_x86 *arch_x86, unsigned int data) +{ + BitVector_Empty(cpu); + + BitVector_Bit_On(cpu, CPU_Priv); + if (data >= PROC_286) + BitVector_Bit_On(cpu, CPU_Prot); + if (data >= PROC_386) + BitVector_Bit_On(cpu, CPU_SMM); + if (data >= PROC_skylake) { + BitVector_Bit_On(cpu, CPU_SHA); + } + if (data >= PROC_broadwell) { + BitVector_Bit_On(cpu, CPU_RDSEED); + BitVector_Bit_On(cpu, CPU_ADX); + BitVector_Bit_On(cpu, CPU_PRFCHW); + } + if (data >= PROC_haswell) { + BitVector_Bit_On(cpu, CPU_FMA); + BitVector_Bit_On(cpu, CPU_AVX2); + BitVector_Bit_On(cpu, CPU_BMI1); + BitVector_Bit_On(cpu, CPU_BMI2); + BitVector_Bit_On(cpu, CPU_INVPCID); + BitVector_Bit_On(cpu, CPU_LZCNT); + BitVector_Bit_On(cpu, CPU_TSX); + BitVector_Bit_On(cpu, CPU_SMAP); + } + if (data >= PROC_ivybridge) { + BitVector_Bit_On(cpu, CPU_F16C); + BitVector_Bit_On(cpu, CPU_FSGSBASE); + BitVector_Bit_On(cpu, CPU_RDRAND); + } + if (data >= PROC_sandybridge) { + BitVector_Bit_On(cpu, CPU_AVX); + BitVector_Bit_On(cpu, CPU_XSAVEOPT); + BitVector_Bit_On(cpu, CPU_EPTVPID); + BitVector_Bit_On(cpu, CPU_SMX); + } + if (data >= PROC_westmere) { + BitVector_Bit_On(cpu, CPU_AES); + BitVector_Bit_On(cpu, CPU_CLMUL); + } + if (data >= PROC_nehalem) { + BitVector_Bit_On(cpu, CPU_SSE42); + BitVector_Bit_On(cpu, CPU_XSAVE); + } + if (data >= PROC_penryn) + BitVector_Bit_On(cpu, CPU_SSE41); + if (data >= PROC_conroe) + BitVector_Bit_On(cpu, CPU_SSSE3); + if (data >= PROC_prescott) + BitVector_Bit_On(cpu, CPU_SSE3); + if (data >= PROC_p4) + BitVector_Bit_On(cpu, CPU_SSE2); + if (data >= PROC_p3) + BitVector_Bit_On(cpu, CPU_SSE); + if (data >= PROC_p2) + BitVector_Bit_On(cpu, CPU_MMX); + if (data >= PROC_486) + BitVector_Bit_On(cpu, CPU_FPU); + if (data >= PROC_prescott) + BitVector_Bit_On(cpu, CPU_EM64T); + + if (data >= PROC_p4) + BitVector_Bit_On(cpu, CPU_P4); + if (data >= PROC_p3) + BitVector_Bit_On(cpu, CPU_P3); + if (data >= PROC_686) + BitVector_Bit_On(cpu, CPU_686); + if (data >= PROC_586) + BitVector_Bit_On(cpu, CPU_586); + if (data >= PROC_486) + BitVector_Bit_On(cpu, CPU_486); + if (data >= PROC_386) + BitVector_Bit_On(cpu, CPU_386); + if (data >= PROC_286) + BitVector_Bit_On(cpu, CPU_286); + if (data >= PROC_186) + BitVector_Bit_On(cpu, CPU_186); + BitVector_Bit_On(cpu, CPU_086); + + /* Use Intel long NOPs if 686 or better */ + if (data >= PROC_686) + arch_x86->nop = X86_NOP_INTEL; + else + arch_x86->nop = X86_NOP_BASIC; +} + +static void +x86_cpu_ia64(wordptr cpu, yasm_arch_x86 *arch_x86, unsigned int data) +{ + BitVector_Empty(cpu); + BitVector_Bit_On(cpu, CPU_Priv); + BitVector_Bit_On(cpu, CPU_Prot); + BitVector_Bit_On(cpu, CPU_SMM); + BitVector_Bit_On(cpu, CPU_SSE2); + BitVector_Bit_On(cpu, CPU_SSE); + BitVector_Bit_On(cpu, CPU_MMX); + BitVector_Bit_On(cpu, CPU_FPU); + BitVector_Bit_On(cpu, CPU_IA64); + BitVector_Bit_On(cpu, CPU_P4); + BitVector_Bit_On(cpu, CPU_P3); + BitVector_Bit_On(cpu, CPU_686); + BitVector_Bit_On(cpu, CPU_586); + BitVector_Bit_On(cpu, CPU_486); + BitVector_Bit_On(cpu, CPU_386); + BitVector_Bit_On(cpu, CPU_286); + BitVector_Bit_On(cpu, CPU_186); + BitVector_Bit_On(cpu, CPU_086); +} + +#define PROC_bulldozer 11 +#define PROC_k10 10 +#define PROC_venice 9 +#define PROC_hammer 8 +#define PROC_k7 7 +#define PROC_k6 6 + +static void +x86_cpu_amd(wordptr cpu, yasm_arch_x86 *arch_x86, unsigned int data) +{ + BitVector_Empty(cpu); + + BitVector_Bit_On(cpu, CPU_Priv); + BitVector_Bit_On(cpu, CPU_Prot); + BitVector_Bit_On(cpu, CPU_SMM); + BitVector_Bit_On(cpu, CPU_3DNow); + if (data >= PROC_bulldozer) { + BitVector_Bit_On(cpu, CPU_XOP); + BitVector_Bit_On(cpu, CPU_FMA4); + } + if (data >= PROC_k10) + BitVector_Bit_On(cpu, CPU_SSE4a); + if (data >= PROC_venice) + BitVector_Bit_On(cpu, CPU_SSE3); + if (data >= PROC_hammer) + BitVector_Bit_On(cpu, CPU_SSE2); + if (data >= PROC_k7) + BitVector_Bit_On(cpu, CPU_SSE); + if (data >= PROC_k6) + BitVector_Bit_On(cpu, CPU_MMX); + BitVector_Bit_On(cpu, CPU_FPU); + + if (data >= PROC_hammer) + BitVector_Bit_On(cpu, CPU_Hammer); + if (data >= PROC_k7) + BitVector_Bit_On(cpu, CPU_Athlon); + if (data >= PROC_k6) + BitVector_Bit_On(cpu, CPU_K6); + BitVector_Bit_On(cpu, CPU_686); + BitVector_Bit_On(cpu, CPU_586); + BitVector_Bit_On(cpu, CPU_486); + BitVector_Bit_On(cpu, CPU_386); + BitVector_Bit_On(cpu, CPU_286); + BitVector_Bit_On(cpu, CPU_186); + BitVector_Bit_On(cpu, CPU_086); + + /* Use AMD long NOPs if k6 or better */ + if (data >= PROC_k6) + arch_x86->nop = X86_NOP_AMD; + else + arch_x86->nop = X86_NOP_BASIC; +} + +static void +x86_cpu_set(wordptr cpu, yasm_arch_x86 *arch_x86, unsigned int data) +{ + BitVector_Bit_On(cpu, data); +} + +static void +x86_cpu_clear(wordptr cpu, yasm_arch_x86 *arch_x86, unsigned int data) +{ + BitVector_Bit_Off(cpu, data); +} + +static void +x86_cpu_set_sse4(wordptr cpu, yasm_arch_x86 *arch_x86, unsigned int data) +{ + BitVector_Bit_On(cpu, CPU_SSE41); + BitVector_Bit_On(cpu, CPU_SSE42); +} + +static void +x86_cpu_clear_sse4(wordptr cpu, yasm_arch_x86 *arch_x86, unsigned int data) +{ + BitVector_Bit_Off(cpu, CPU_SSE41); + BitVector_Bit_Off(cpu, CPU_SSE42); +} + +static void +x86_nop(wordptr cpu, yasm_arch_x86 *arch_x86, unsigned int data) +{ + arch_x86->nop = data; +} + +%} +%ignore-case +%language=ANSI-C +%compare-strncmp +%readonly-tables +%enum +%struct-type +%define hash-function-name cpu_hash +%define lookup-function-name cpu_find +struct cpu_parse_data { + const char *name; + void (*handler) (wordptr cpu, yasm_arch_x86 *arch_x86, unsigned int data); + unsigned int data; +}; +%% +8086, x86_cpu_intel, PROC_8086 +186, x86_cpu_intel, PROC_186 +80186, x86_cpu_intel, PROC_186 +i186, x86_cpu_intel, PROC_186 +286, x86_cpu_intel, PROC_286 +80286, x86_cpu_intel, PROC_286 +i286, x86_cpu_intel, PROC_286 +386, x86_cpu_intel, PROC_386 +80386, x86_cpu_intel, PROC_386 +i386, x86_cpu_intel, PROC_386 +486, x86_cpu_intel, PROC_486 +80486, x86_cpu_intel, PROC_486 +i486, x86_cpu_intel, PROC_486 +586, x86_cpu_intel, PROC_586 +i586, x86_cpu_intel, PROC_586 +pentium, x86_cpu_intel, PROC_586 +p5, x86_cpu_intel, PROC_586 +686, x86_cpu_intel, PROC_686 +i686, x86_cpu_intel, PROC_686 +p6, x86_cpu_intel, PROC_686 +ppro, x86_cpu_intel, PROC_686 +pentiumpro, x86_cpu_intel, PROC_686 +p2, x86_cpu_intel, PROC_p2 +pentium2, x86_cpu_intel, PROC_p2 +pentium-2, x86_cpu_intel, PROC_p2 +pentiumii, x86_cpu_intel, PROC_p2 +pentium-ii, x86_cpu_intel, PROC_p2 +p3, x86_cpu_intel, PROC_p3 +pentium3, x86_cpu_intel, PROC_p3 +pentium-3, x86_cpu_intel, PROC_p3 +pentiumiii, x86_cpu_intel, PROC_p3 +pentium-iii, x86_cpu_intel, PROC_p3 +katmai, x86_cpu_intel, PROC_p3 +p4, x86_cpu_intel, PROC_p4 +pentium4, x86_cpu_intel, PROC_p4 +pentium-4, x86_cpu_intel, PROC_p4 +pentiumiv, x86_cpu_intel, PROC_p4 +pentium-iv, x86_cpu_intel, PROC_p4 +williamette, x86_cpu_intel, PROC_p4 +ia64, x86_cpu_ia64, 0 +ia-64, x86_cpu_ia64, 0 +itanium, x86_cpu_ia64, 0 +k6, x86_cpu_amd, PROC_k6 +k7, x86_cpu_amd, PROC_k7 +athlon, x86_cpu_amd, PROC_k7 +k8, x86_cpu_amd, PROC_hammer +hammer, x86_cpu_amd, PROC_hammer +clawhammer, x86_cpu_amd, PROC_hammer +opteron, x86_cpu_amd, PROC_hammer +athlon64, x86_cpu_amd, PROC_hammer +athlon-64, x86_cpu_amd, PROC_hammer +venice, x86_cpu_amd, PROC_venice +k10, x86_cpu_amd, PROC_k10 +phenom, x86_cpu_amd, PROC_k10 +family10h, x86_cpu_amd, PROC_k10 +bulldozer, x86_cpu_amd, PROC_bulldozer +prescott, x86_cpu_intel, PROC_prescott +conroe, x86_cpu_intel, PROC_conroe +core2, x86_cpu_intel, PROC_conroe +penryn, x86_cpu_intel, PROC_penryn +nehalem, x86_cpu_intel, PROC_nehalem +corei7, x86_cpu_intel, PROC_nehalem +westmere, x86_cpu_intel, PROC_westmere +sandybridge, x86_cpu_intel, PROC_sandybridge +ivybridge, x86_cpu_intel, PROC_ivybridge +haswell, x86_cpu_intel, PROC_haswell +broadwell, x86_cpu_intel, PROC_broadwell +skylake, x86_cpu_intel, PROC_skylake +# +# Features have "no" versions to disable them, and only set/reset the +# specific feature being changed. All other bits are left alone. +# +fpu, x86_cpu_set, CPU_FPU +nofpu, x86_cpu_clear, CPU_FPU +mmx, x86_cpu_set, CPU_MMX +nommx, x86_cpu_clear, CPU_MMX +sse, x86_cpu_set, CPU_SSE +nosse, x86_cpu_clear, CPU_SSE +sse2, x86_cpu_set, CPU_SSE2 +nosse2, x86_cpu_clear, CPU_SSE2 +sse3, x86_cpu_set, CPU_SSE3 +nosse3, x86_cpu_clear, CPU_SSE3 +#pni, x86_cpu_set, CPU_PNI +#nopni, x86_cpu_clear, CPU_PNI +3dnow, x86_cpu_set, CPU_3DNow +no3dnow, x86_cpu_clear, CPU_3DNow +cyrix, x86_cpu_set, CPU_Cyrix +nocyrix, x86_cpu_clear, CPU_Cyrix +amd, x86_cpu_set, CPU_AMD +noamd, x86_cpu_clear, CPU_AMD +smm, x86_cpu_set, CPU_SMM +nosmm, x86_cpu_clear, CPU_SMM +prot, x86_cpu_set, CPU_Prot +noprot, x86_cpu_clear, CPU_Prot +protected, x86_cpu_set, CPU_Prot +noprotected, x86_cpu_clear, CPU_Prot +undoc, x86_cpu_set, CPU_Undoc +noundoc, x86_cpu_clear, CPU_Undoc +undocumented, x86_cpu_set, CPU_Undoc +noundocumented, x86_cpu_clear, CPU_Undoc +obs, x86_cpu_set, CPU_Obs +noobs, x86_cpu_clear, CPU_Obs +obsolete, x86_cpu_set, CPU_Obs +noobsolete, x86_cpu_clear, CPU_Obs +priv, x86_cpu_set, CPU_Priv +nopriv, x86_cpu_clear, CPU_Priv +privileged, x86_cpu_set, CPU_Priv +noprivileged, x86_cpu_clear, CPU_Priv +svm, x86_cpu_set, CPU_SVM +nosvm, x86_cpu_clear, CPU_SVM +padlock, x86_cpu_set, CPU_PadLock +nopadlock, x86_cpu_clear, CPU_PadLock +em64t, x86_cpu_set, CPU_EM64T +noem64t, x86_cpu_clear, CPU_EM64T +ssse3, x86_cpu_set, CPU_SSSE3 +nossse3, x86_cpu_clear, CPU_SSSE3 +sse4.1, x86_cpu_set, CPU_SSE41 +nosse4.1, x86_cpu_clear, CPU_SSE41 +sse41, x86_cpu_set, CPU_SSE41 +nosse41, x86_cpu_clear, CPU_SSE41 +sse4.2, x86_cpu_set, CPU_SSE42 +nosse4.2, x86_cpu_clear, CPU_SSE42 +sse42, x86_cpu_set, CPU_SSE42 +nosse42, x86_cpu_clear, CPU_SSE42 +sse4a, x86_cpu_set, CPU_SSE4a +nosse4a, x86_cpu_clear, CPU_SSE4a +sse4, x86_cpu_set_sse4, 0 +nosse4, x86_cpu_clear_sse4, 0 +xsave, x86_cpu_set, CPU_XSAVE +noxsave, x86_cpu_clear, CPU_XSAVE +avx, x86_cpu_set, CPU_AVX +noavx, x86_cpu_clear, CPU_AVX +fma, x86_cpu_set, CPU_FMA +nofma, x86_cpu_clear, CPU_FMA +aes, x86_cpu_set, CPU_AES +noaes, x86_cpu_clear, CPU_AES +clmul, x86_cpu_set, CPU_CLMUL +noclmul, x86_cpu_clear, CPU_CLMUL +pclmulqdq, x86_cpu_set, CPU_CLMUL +nopclmulqdq, x86_cpu_clear, CPU_CLMUL +movbe, x86_cpu_set, CPU_MOVBE +nomovbe, x86_cpu_clear, CPU_MOVBE +xop, x86_cpu_set, CPU_XOP +noxop, x86_cpu_clear, CPU_XOP +fma4, x86_cpu_set, CPU_FMA4 +nofma4, x86_cpu_clear, CPU_FMA4 +f16c, x86_cpu_set, CPU_F16C +nof16c, x86_cpu_clear, CPU_F16C +fsgsbase, x86_cpu_set, CPU_FSGSBASE +nofsgsbase, x86_cpu_clear, CPU_FSGSBASE +rdrand, x86_cpu_set, CPU_RDRAND +nordrand, x86_cpu_clear, CPU_RDRAND +xsaveopt, x86_cpu_set, CPU_XSAVEOPT +noxsaveopt, x86_cpu_clear, CPU_XSAVEOPT +eptvpid, x86_cpu_set, CPU_EPTVPID +noeptvpid, x86_cpu_clear, CPU_EPTVPID +smx, x86_cpu_set, CPU_SMX +nosmx, x86_cpu_clear, CPU_SMX +avx2, x86_cpu_set, CPU_AVX2 +noavx2, x86_cpu_clear, CPU_AVX2 +tsx, x86_cpu_set, CPU_TSX +notsx, x86_cpu_clear, CPU_TSX +bmi1, x86_cpu_set, CPU_BMI1 +nobmi1, x86_cpu_clear, CPU_BMI1 +bmi2, x86_cpu_set, CPU_BMI2 +nobmi2, x86_cpu_clear, CPU_BMI2 +invpcid, x86_cpu_set, CPU_INVPCID +noinvpcid, x86_cpu_clear, CPU_INVPCID +lzcnt, x86_cpu_set, CPU_LZCNT +nolzcnt, x86_cpu_clear, CPU_LZCNT +tbm, x86_cpu_set, CPU_TBM +notbm, x86_cpu_clear, CPU_TBM +sha, x86_cpu_set, CPU_SHA +nosha, x86_cpu_clear, CPU_SHA +smap, x86_cpu_set, CPU_SMAP +nosmap, x86_cpu_clear, CPU_SMAP +rdseed, x86_cpu_set, CPU_RDSEED +nordseed, x86_cpu_clear, CPU_RDSEED +adx, x86_cpu_set, CPU_ADX +noadx, x86_cpu_clear, CPU_ADX +prfchw, x86_cpu_set, CPU_PRFCHW +noprfchw, x86_cpu_clear, CPU_PRFCHW +# Change NOP patterns +basicnop, x86_nop, X86_NOP_BASIC +intelnop, x86_nop, X86_NOP_INTEL +amdnop, x86_nop, X86_NOP_AMD +%% + +void +yasm_x86__parse_cpu(yasm_arch_x86 *arch_x86, const char *cpuid, + size_t cpuid_len) +{ + /*@null@*/ const struct cpu_parse_data *pdata; + wordptr new_cpu; + size_t i; + static char lcaseid[16]; + + if (cpuid_len > 15) + return; + for (i=0; icpu_enables[arch_x86->active_cpu]); + pdata->handler(new_cpu, arch_x86, pdata->data); + + /* try to find an existing match in the CPU table first */ + for (i=0; icpu_enables_size; i++) { + if (BitVector_equal(arch_x86->cpu_enables[i], new_cpu)) { + arch_x86->active_cpu = i; + BitVector_Destroy(new_cpu); + return; + } + } + + /* not found, need to add a new entry */ + arch_x86->active_cpu = arch_x86->cpu_enables_size++; + arch_x86->cpu_enables = + yasm_xrealloc(arch_x86->cpu_enables, + arch_x86->cpu_enables_size*sizeof(wordptr)); + arch_x86->cpu_enables[arch_x86->active_cpu] = new_cpu; +} diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86expr.c b/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86expr.c new file mode 100644 index 0000000000..e9ddcce57e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86expr.c @@ -0,0 +1,1061 @@ +/* + * x86 expression handling + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "x86arch.h" + + +typedef struct x86_checkea_reg3264_data { + int *regs; /* total multiplier for each reg */ + unsigned char vsib_mode; + unsigned char bits; + unsigned char addrsize; +} x86_checkea_reg3264_data; + +/* Only works if ei->type == EXPR_REG (doesn't check). + * Overwrites ei with intnum of 0 (to eliminate regs from the final expr). + */ +static /*@null@*/ /*@dependent@*/ int * +x86_expr_checkea_get_reg3264(yasm_expr__item *ei, int *regnum, + /*returned*/ void *d) +{ + x86_checkea_reg3264_data *data = d; + + switch ((x86_expritem_reg_size)(ei->data.reg & ~0xFUL)) { + case X86_REG32: + if (data->addrsize != 32) + return 0; + *regnum = (unsigned int)(ei->data.reg & 0xF); + break; + case X86_REG64: + if (data->addrsize != 64) + return 0; + *regnum = (unsigned int)(ei->data.reg & 0xF); + break; + case X86_XMMREG: + if (data->vsib_mode != 1) + return 0; + if (data->bits != 64 && (ei->data.reg & 0x8) == 0x8) + return 0; + *regnum = 17+(unsigned int)(ei->data.reg & 0xF); + break; + case X86_YMMREG: + if (data->vsib_mode != 2) + return 0; + if (data->bits != 64 && (ei->data.reg & 0x8) == 0x8) + return 0; + *regnum = 17+(unsigned int)(ei->data.reg & 0xF); + break; + case X86_RIP: + if (data->bits != 64) + return 0; + *regnum = 16; + break; + default: + return 0; + } + + /* overwrite with 0 to eliminate register from displacement expr */ + ei->type = YASM_EXPR_INT; + ei->data.intn = yasm_intnum_create_uint(0); + + /* we're okay */ + return &data->regs[*regnum]; +} + +typedef struct x86_checkea_reg16_data { + int bx, si, di, bp; /* total multiplier for each reg */ +} x86_checkea_reg16_data; + +/* Only works if ei->type == EXPR_REG (doesn't check). + * Overwrites ei with intnum of 0 (to eliminate regs from the final expr). + */ +static /*@null@*/ int * +x86_expr_checkea_get_reg16(yasm_expr__item *ei, int *regnum, void *d) +{ + x86_checkea_reg16_data *data = d; + /* in order: ax,cx,dx,bx,sp,bp,si,di */ + /*@-nullassign@*/ + static int *reg16[8] = {0,0,0,0,0,0,0,0}; + /*@=nullassign@*/ + + reg16[3] = &data->bx; + reg16[5] = &data->bp; + reg16[6] = &data->si; + reg16[7] = &data->di; + + /* don't allow 32-bit registers */ + if ((ei->data.reg & ~0xFUL) != X86_REG16) + return 0; + + /* & 7 for sanity check */ + *regnum = (unsigned int)(ei->data.reg & 0x7); + + /* only allow BX, SI, DI, BP */ + if (!reg16[*regnum]) + return 0; + + /* overwrite with 0 to eliminate register from displacement expr */ + ei->type = YASM_EXPR_INT; + ei->data.intn = yasm_intnum_create_uint(0); + + /* we're okay */ + return reg16[*regnum]; +} + +/* Distribute over registers to help bring them to the topmost level of e. + * Also check for illegal operations against registers. + * Returns 0 if something was illegal, 1 if legal and nothing in e changed, + * and 2 if legal and e needs to be simplified. + * + * Only half joking: Someday make this/checkea able to accept crazy things + * like: (bx+di)*(bx+di)-bx*bx-2*bx*di-di*di+di? Probably not: NASM never + * accepted such things, and it's doubtful such an expn is valid anyway + * (even though the above one is). But even macros would be hard-pressed + * to generate something like this. + * + * e must already have been simplified for this function to work properly + * (as it doesn't think things like SUB are valid). + * + * IMPLEMENTATION NOTE: About the only thing this function really needs to + * "distribute" is: (non-float-expn or intnum) * (sum expn of registers). + * + * TODO: Clean up this code, make it easier to understand. + */ +static int +x86_expr_checkea_distcheck_reg(yasm_expr **ep, unsigned int bits) +{ + yasm_expr *e = *ep; + int i; + int havereg = -1, havereg_expr = -1; + int retval = 1; /* default to legal, no changes */ + + for (i=0; inumterms; i++) { + switch (e->terms[i].type) { + case YASM_EXPR_REG: + /* Check op to make sure it's valid to use w/register. */ + switch (e->op) { + case YASM_EXPR_MUL: + /* Check for reg*reg */ + if (havereg != -1) + return 0; + break; + case YASM_EXPR_ADD: + case YASM_EXPR_IDENT: + break; + default: + return 0; + } + havereg = i; + break; + case YASM_EXPR_FLOAT: + /* Floats not allowed. */ + return 0; + case YASM_EXPR_EXPR: + if (yasm_expr__contains(e->terms[i].data.expn, + YASM_EXPR_REG)) { + int ret2; + + /* Check op to make sure it's valid to use w/register. */ + if (e->op != YASM_EXPR_ADD && e->op != YASM_EXPR_MUL) + return 0; + /* Check for reg*reg */ + if (e->op == YASM_EXPR_MUL && havereg != -1) + return 0; + havereg = i; + havereg_expr = i; + /* Recurse to check lower levels */ + ret2 = + x86_expr_checkea_distcheck_reg(&e->terms[i].data.expn, + bits); + if (ret2 == 0) + return 0; + if (ret2 == 2) + retval = 2; + } else if (yasm_expr__contains(e->terms[i].data.expn, + YASM_EXPR_FLOAT)) + return 0; /* Disallow floats */ + break; + default: + break; + } + } + + /* just exit if no registers were used */ + if (havereg == -1) + return retval; + + /* Distribute */ + if (e->op == YASM_EXPR_MUL && havereg_expr != -1) { + yasm_expr *ne; + + retval = 2; /* we're going to change it */ + + /* The reg expn *must* be EXPR_ADD at this point. Sanity check. */ + if (e->terms[havereg_expr].type != YASM_EXPR_EXPR || + e->terms[havereg_expr].data.expn->op != YASM_EXPR_ADD) + yasm_internal_error(N_("Register expression not ADD or EXPN")); + + /* Iterate over each term in reg expn */ + for (i=0; iterms[havereg_expr].data.expn->numterms; i++) { + /* Copy everything EXCEPT havereg_expr term into new expression */ + ne = yasm_expr__copy_except(e, havereg_expr); + assert(ne != NULL); + /* Copy reg expr term into uncopied (empty) term in new expn */ + ne->terms[havereg_expr] = + e->terms[havereg_expr].data.expn->terms[i]; /* struct copy */ + /* Overwrite old reg expr term with new expn */ + e->terms[havereg_expr].data.expn->terms[i].type = YASM_EXPR_EXPR; + e->terms[havereg_expr].data.expn->terms[i].data.expn = ne; + } + + /* Replace e with expanded reg expn */ + ne = e->terms[havereg_expr].data.expn; + e->terms[havereg_expr].type = YASM_EXPR_NONE; /* don't delete it! */ + yasm_expr_destroy(e); /* but everything else */ + e = ne; + /*@-onlytrans@*/ + *ep = ne; + /*@=onlytrans@*/ + } + + return retval; +} + +/* Simplify and determine if expression is superficially valid: + * Valid expr should be [(int-equiv expn)]+[reg*(int-equiv expn)+...] + * where the [...] parts are optional. + * + * Don't simplify out constant identities if we're looking for an indexreg: we + * may need the multiplier for determining what the indexreg is! + * + * Returns 1 if invalid register usage, 2 if unable to determine all values, + * and 0 if all values successfully determined and saved in data. + */ +static int +x86_expr_checkea_getregusage(yasm_expr **ep, /*@null@*/ int *indexreg, + int *pcrel, unsigned int bits, void *data, + int *(*get_reg)(yasm_expr__item *ei, int *regnum, void *d)) +{ + int i; + int *reg; + int regnum; + int indexval = 0; + int indexmult = 0; + yasm_expr *e, *wrt; + + /*@-unqualifiedtrans@*/ + *ep = yasm_expr__level_tree(*ep, 1, 1, indexreg == 0, 0, NULL, NULL); + + /* Check for WRT rip first */ + wrt = yasm_expr_extract_wrt(ep); + if (wrt && wrt->op == YASM_EXPR_IDENT && + wrt->terms[0].type == YASM_EXPR_REG) { + if (bits != 64) { /* only valid in 64-bit mode */ + yasm_expr_destroy(wrt); + return 1; + } + reg = get_reg(&wrt->terms[0], ®num, data); + if (!reg || regnum != 16) { /* only accept rip */ + yasm_expr_destroy(wrt); + return 1; + } + (*reg)++; + + /* Delete WRT. Set pcrel to 1 to indicate to x86 + * bytecode code to do PC-relative displacement transform. + */ + *pcrel = 1; + yasm_expr_destroy(wrt); + } else if (wrt) { + yasm_expr_destroy(wrt); + return 1; + } + + /*@=unqualifiedtrans@*/ + assert(*ep != NULL); + e = *ep; + switch (x86_expr_checkea_distcheck_reg(ep, bits)) { + case 0: + return 1; + case 2: + /* Need to simplify again */ + *ep = yasm_expr__level_tree(*ep, 1, 1, indexreg == 0, 0, NULL, + NULL); + e = *ep; + break; + default: + break; + } + + switch (e->op) { + case YASM_EXPR_ADD: + /* Prescan for non-int multipliers against a reg. + * This is invalid due to the optimizer structure. + */ + for (i=0; inumterms; i++) + if (e->terms[i].type == YASM_EXPR_EXPR) { + yasm_expr__order_terms(e->terms[i].data.expn); + if (e->terms[i].data.expn->terms[0].type == + YASM_EXPR_REG) { + if (e->terms[i].data.expn->numterms > 2) + return 1; + if (e->terms[i].data.expn->terms[1].type != + YASM_EXPR_INT) + return 1; + } + } + + /*@fallthrough@*/ + case YASM_EXPR_IDENT: + /* Check each term for register (and possible multiplier). */ + for (i=0; inumterms; i++) { + if (e->terms[i].type == YASM_EXPR_REG) { + reg = get_reg(&e->terms[i], ®num, data); + if (!reg) + return 1; + (*reg)++; + /* Let last, largest multipler win indexreg */ + if (indexreg && *reg > 0 && indexval <= *reg && + !indexmult) { + *indexreg = regnum; + indexval = *reg; + } + } else if (e->terms[i].type == YASM_EXPR_EXPR) { + /* Already ordered from ADD above, just grab the value. + * Sanity check for EXPR_INT. + */ + if (e->terms[i].data.expn->terms[0].type == + YASM_EXPR_REG) { + long delta; + if (e->terms[i].data.expn->terms[1].type != + YASM_EXPR_INT) + yasm_internal_error( + N_("Non-integer value in reg expn")); + reg = get_reg(&e->terms[i].data.expn->terms[0], + ®num, data); + if (!reg) + return 1; + delta = yasm_intnum_get_int( + e->terms[i].data.expn->terms[1].data.intn); + (*reg) += delta; + /* Let last, largest multipler win indexreg */ + if (indexreg && delta > 0 && indexval <= *reg) { + *indexreg = regnum; + indexval = *reg; + indexmult = 1; + } else if (indexreg && *indexreg == regnum && + delta < 0 && *reg <= 1) { + *indexreg = -1; + indexval = 0; + indexmult = 0; + } + } + } + } + break; + case YASM_EXPR_MUL: + /* Here, too, check for non-int multipliers against a reg. */ + yasm_expr__order_terms(e); + if (e->terms[0].type == YASM_EXPR_REG) { + long delta; + if (e->numterms > 2) + return 1; + if (e->terms[1].type != YASM_EXPR_INT) + return 1; + reg = get_reg(&e->terms[0], ®num, data); + if (!reg) + return 1; + delta = yasm_intnum_get_int(e->terms[1].data.intn); + (*reg) += delta; + if (indexreg) + { + if (delta < 0 && *reg <= 1) + { + *indexreg = -1; + indexval = 0; + indexmult = 0; + } + else + *indexreg = regnum; + } + } + break; + case YASM_EXPR_SEGOFF: + /* No registers are allowed on either side. */ + if (yasm_expr__contains(e, YASM_EXPR_REG)) + return 1; + break; + default: + /* Should never get here! */ + yasm_internal_error(N_("unexpected expr op")); + } + + /* Simplify expr, which is now really just the displacement. This + * should get rid of the 0's we put in for registers in the callback. + */ + *ep = yasm_expr_simplify(*ep, 0); + /* e = *ep; */ + + return 0; +} + +/* Calculate the displacement length, if possible. + * Takes several extra inputs so it can be used by both 32-bit and 16-bit + * expressions: + * wordsize=16 for 16-bit, =32 for 32-bit. + * noreg=1 if the *ModRM byte* has no registers used. + * dispreq=1 if a displacement value is *required* (even if =0). + * Returns 0 if successfully calculated, 1 if not. + */ +/*@-nullstate@*/ +static int +x86_checkea_calc_displen(x86_effaddr *x86_ea, unsigned int wordsize, int noreg, + int dispreq) +{ + /*@null@*/ /*@only@*/ yasm_intnum *num; + + x86_ea->valid_modrm = 0; /* default to not yet valid */ + + switch (x86_ea->ea.disp.size) { + case 0: + break; + /* If not 0, the displacement length was forced; set the Mod bits + * appropriately and we're done with the ModRM byte. + */ + case 8: + /* Byte is only a valid override if there are registers in the + * EA. With no registers, we must have a 16/32 value. + */ + if (noreg) { + yasm_warn_set(YASM_WARN_IMPLICIT_SIZE_OVERRIDE, + N_("invalid displacement size; fixed")); + x86_ea->ea.disp.size = wordsize; + } else + x86_ea->modrm |= 0100; + x86_ea->valid_modrm = 1; + return 0; + case 16: + case 32: + /* Don't allow changing displacement different from BITS setting + * directly; require an address-size override to change it. + */ + if (wordsize != x86_ea->ea.disp.size) { + yasm_error_set(YASM_ERROR_VALUE, + N_("invalid effective address (displacement size)")); + return 1; + } + if (!noreg) + x86_ea->modrm |= 0200; + x86_ea->valid_modrm = 1; + return 0; + default: + /* we shouldn't ever get any other size! */ + yasm_internal_error(N_("strange EA displacement size")); + } + + /* The displacement length hasn't been forced (or the forcing wasn't + * valid), try to determine what it is. + */ + if (noreg) { + /* No register in ModRM expression, so it must be disp16/32, + * and as the Mod bits are set to 0 by the caller, we're done + * with the ModRM byte. + */ + x86_ea->ea.disp.size = wordsize; + x86_ea->valid_modrm = 1; + return 0; + } + + if (dispreq) { + /* for BP/EBP, there *must* be a displacement value, but we + * may not know the size (8 or 16/32) for sure right now. + */ + x86_ea->ea.need_nonzero_len = 1; + } + + if (x86_ea->ea.disp.rel) { + /* Relative displacement; basically all object formats need non-byte + * for relocation here, so just do that. (TODO: handle this + * differently?) + */ + x86_ea->ea.disp.size = wordsize; + x86_ea->modrm |= 0200; + x86_ea->valid_modrm = 1; + return 0; + } + + /* At this point there's 3 possibilities for the displacement: + * - None (if =0) + * - signed 8 bit (if in -128 to 127 range) + * - 16/32 bit (word size) + * For now, check intnum value right now; if it's not 0, + * assume 8 bit and set up for allowing 16 bit later. + * FIXME: The complex expression equaling zero is probably a rare case, + * so we ignore it for now. + */ + num = yasm_value_get_intnum(&x86_ea->ea.disp, NULL, 0); + if (!num) { + /* Still has unknown values. */ + x86_ea->ea.need_nonzero_len = 1; + x86_ea->modrm |= 0100; + x86_ea->valid_modrm = 1; + return 0; + } + + /* Figure out what size displacement we will have. */ + if (yasm_intnum_is_zero(num) && !x86_ea->ea.need_nonzero_len) { + /* If we know that the displacement is 0 right now, + * go ahead and delete the expr and make it so no + * displacement value is included in the output. + * The Mod bits of ModRM are set to 0 above, and + * we're done with the ModRM byte! + */ + yasm_value_delete(&x86_ea->ea.disp); + x86_ea->ea.need_disp = 0; + } else if (yasm_intnum_in_range(num, -128, 127)) { + /* It fits into a signed byte */ + x86_ea->ea.disp.size = 8; + x86_ea->modrm |= 0100; + } else { + /* It's a 16/32-bit displacement */ + x86_ea->ea.disp.size = wordsize; + x86_ea->modrm |= 0200; + } + x86_ea->valid_modrm = 1; /* We're done with ModRM */ + + yasm_intnum_destroy(num); + return 0; +} +/*@=nullstate@*/ + +static int +x86_expr_checkea_getregsize_callback(yasm_expr__item *ei, void *d) +{ + unsigned char *addrsize = (unsigned char *)d; + + if (ei->type == YASM_EXPR_REG) { + switch ((x86_expritem_reg_size)(ei->data.reg & ~0xFUL)) { + case X86_REG16: + *addrsize = 16; + break; + case X86_REG32: + *addrsize = 32; + break; + case X86_REG64: + case X86_RIP: + *addrsize = 64; + break; + default: + return 0; + } + return 1; + } else + return 0; +} + +int +yasm_x86__expr_checkea(x86_effaddr *x86_ea, unsigned char *addrsize, + unsigned int bits, int address16_op, unsigned char *rex, + yasm_bytecode *bc) +{ + int retval; + + if (*addrsize == 0) { + /* we need to figure out the address size from what we know about: + * - the displacement length + * - what registers are used in the expression + * - the bits setting + */ + switch (x86_ea->ea.disp.size) { + case 16: + /* must be 16-bit */ + *addrsize = 16; + break; + case 64: + /* We have to support this for the MemOffs case, but it's + * otherwise illegal. It's also illegal in non-64-bit mode. + */ + if (x86_ea->need_modrm || x86_ea->need_sib) { + yasm_error_set(YASM_ERROR_VALUE, + N_("invalid effective address (displacement size)")); + return 1; + } + *addrsize = 64; + break; + case 32: + /* Must be 32-bit in 16-bit or 32-bit modes. In 64-bit mode, + * we don't know unless we look at the registers, except in the + * MemOffs case (see the end of this function). + */ + if (bits != 64 || (!x86_ea->need_modrm && !x86_ea->need_sib)) { + *addrsize = 32; + break; + } + /*@fallthrough@*/ + default: + /* If SIB is required, but we're in 16-bit mode, set to 32. */ + if (bits == 16 && x86_ea->need_sib == 1) { + *addrsize = 32; + break; + } + /* check for use of 16 or 32-bit registers; if none are used + * default to bits setting. + */ + if (!x86_ea->ea.disp.abs || + !yasm_expr__traverse_leaves_in(x86_ea->ea.disp.abs, + addrsize, x86_expr_checkea_getregsize_callback)) + *addrsize = bits; + /* TODO: Add optional warning here if switched address size + * from bits setting just by register use.. eg [ax] in + * 32-bit mode would generate a warning. + */ + } + } + + if ((*addrsize == 32 || *addrsize == 64) && + ((x86_ea->need_modrm && !x86_ea->valid_modrm) || + (x86_ea->need_sib && !x86_ea->valid_sib))) { + int i; + unsigned char low3; + enum { + REG3264_NONE = -1, + REG3264_EAX = 0, + REG3264_ECX, + REG3264_EDX, + REG3264_EBX, + REG3264_ESP, + REG3264_EBP, + REG3264_ESI, + REG3264_EDI, + REG64_R8, + REG64_R9, + REG64_R10, + REG64_R11, + REG64_R12, + REG64_R13, + REG64_R14, + REG64_R15, + REG64_RIP, + SIMDREGS + }; + int reg3264mult[33] = + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + x86_checkea_reg3264_data reg3264_data; + int basereg = REG3264_NONE; /* "base" register (for SIB) */ + int indexreg = REG3264_NONE; /* "index" register (for SIB) */ + int regcount = 17; /* normally don't check SIMD regs */ + + if (x86_ea->vsib_mode != 0) + regcount = 33; + + /* We can only do 64-bit addresses in 64-bit mode. */ + if (*addrsize == 64 && bits != 64) { + yasm_error_set(YASM_ERROR_TYPE, + N_("invalid effective address (64-bit in non-64-bit mode)")); + return 1; + } + + if (x86_ea->ea.pc_rel && bits != 64) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("RIP-relative directive ignored in non-64-bit mode")); + x86_ea->ea.pc_rel = 0; + } + + reg3264_data.regs = reg3264mult; + reg3264_data.vsib_mode = x86_ea->vsib_mode; + reg3264_data.bits = bits; + reg3264_data.addrsize = *addrsize; + if (x86_ea->ea.disp.abs) { + int pcrel = 0; + switch (x86_expr_checkea_getregusage + (&x86_ea->ea.disp.abs, &indexreg, &pcrel, bits, + ®3264_data, x86_expr_checkea_get_reg3264)) { + case 1: + yasm_error_set(YASM_ERROR_VALUE, + N_("invalid effective address")); + return 1; + case 2: + if (pcrel) + yasm_value_set_curpos_rel(&x86_ea->ea.disp, bc, 1); + return 2; + default: + if (pcrel) + yasm_value_set_curpos_rel(&x86_ea->ea.disp, bc, 1); + break; + } + } + + /* If indexreg mult is 0, discard it. + * This is possible because of the way indexreg is found in + * expr_checkea_getregusage(). + */ + if (indexreg != REG3264_NONE && reg3264mult[indexreg] == 0) + indexreg = REG3264_NONE; + + /* Find a basereg (*1, but not indexreg), if there is one. + * Also, if an indexreg hasn't been assigned, try to find one. + * Meanwhile, check to make sure there's no negative register mults. + */ + for (i=0; i 0) + indexreg = i; + } + + if (x86_ea->vsib_mode != 0) { + /* For VSIB, the SIMD register needs to go into the indexreg. + * Also check basereg (must be a GPR if present) and indexreg + * (must be a SIMD register). + */ + if (basereg >= SIMDREGS && + (indexreg == REG3264_NONE || reg3264mult[indexreg] == 1)) { + int temp = basereg; + basereg = indexreg; + indexreg = temp; + } + if (basereg >= REG64_RIP || indexreg < SIMDREGS) { + yasm_error_set(YASM_ERROR_VALUE, + N_("invalid effective address")); + return 1; + } + } else if (indexreg != REG3264_NONE && basereg == REG3264_NONE) + /* Handle certain special cases of indexreg mults when basereg is + * empty. + */ + switch (reg3264mult[indexreg]) { + case 1: + /* Only optimize this way if nosplit wasn't specified */ + if (!x86_ea->ea.nosplit) { + basereg = indexreg; + indexreg = -1; + } + break; + case 2: + /* Only split if nosplit wasn't specified */ + if (!x86_ea->ea.nosplit) { + basereg = indexreg; + reg3264mult[indexreg] = 1; + } + break; + case 3: + case 5: + case 9: + basereg = indexreg; + reg3264mult[indexreg]--; + break; + } + + /* Make sure there's no other registers than the basereg and indexreg + * we just found. + */ + for (i=0; i1 or basereg is ESP also, there's no way to make it + * legal. + */ + if (reg3264mult[REG3264_ESP] > 1 || basereg == REG3264_ESP) { + yasm_error_set(YASM_ERROR_VALUE, + N_("invalid effective address")); + return 1; + } + /* If mult==1 and basereg is not ESP, swap indexreg w/basereg. */ + indexreg = basereg; + basereg = REG3264_ESP; + } + + /* RIP is only legal if it's the ONLY register used. */ + if (indexreg == REG64_RIP || + (basereg == REG64_RIP && indexreg != REG3264_NONE)) { + yasm_error_set(YASM_ERROR_VALUE, N_("invalid effective address")); + return 1; + } + + /* At this point, we know the base and index registers and that the + * memory expression is (essentially) valid. Now build the ModRM and + * (optional) SIB bytes. + */ + + /* If we're supposed to be RIP-relative and there's no register + * usage, change to RIP-relative. + */ + if (basereg == REG3264_NONE && indexreg == REG3264_NONE && + x86_ea->ea.pc_rel) { + basereg = REG64_RIP; + yasm_value_set_curpos_rel(&x86_ea->ea.disp, bc, 1); + } + + /* First determine R/M (Mod is later determined from disp size) */ + x86_ea->need_modrm = 1; /* we always need ModRM */ + if (basereg == REG3264_NONE && indexreg == REG3264_NONE) { + /* Just a disp32: in 64-bit mode the RM encoding is used for RIP + * offset addressing, so we need to use the SIB form instead. + */ + if (bits == 64) { + x86_ea->modrm |= 4; + x86_ea->need_sib = 1; + } else { + x86_ea->modrm |= 5; + x86_ea->sib = 0; + x86_ea->valid_sib = 0; + x86_ea->need_sib = 0; + } + } else if (basereg == REG64_RIP) { + x86_ea->modrm |= 5; + x86_ea->sib = 0; + x86_ea->valid_sib = 0; + x86_ea->need_sib = 0; + /* RIP always requires a 32-bit displacement */ + x86_ea->valid_modrm = 1; + x86_ea->ea.disp.size = 32; + return 0; + } else if (indexreg == REG3264_NONE) { + /* basereg only */ + /* Don't need to go to the full effort of determining what type + * of register basereg is, as x86_set_rex_from_reg doesn't pay + * much attention. + */ + if (yasm_x86__set_rex_from_reg(rex, &low3, + (unsigned int)(X86_REG64 | basereg), + bits, X86_REX_B)) + return 1; + x86_ea->modrm |= low3; + /* we don't need an SIB *unless* basereg is ESP or R12 */ + if (basereg == REG3264_ESP || basereg == REG64_R12) + x86_ea->need_sib = 1; + else { + x86_ea->sib = 0; + x86_ea->valid_sib = 0; + x86_ea->need_sib = 0; + } + } else { + /* index or both base and index */ + x86_ea->modrm |= 4; + x86_ea->need_sib = 1; + } + + /* Determine SIB if needed */ + if (x86_ea->need_sib == 1) { + x86_ea->sib = 0; /* start with 0 */ + + /* Special case: no basereg */ + if (basereg == REG3264_NONE) + x86_ea->sib |= 5; + else { + if (yasm_x86__set_rex_from_reg(rex, &low3, (unsigned int) + (X86_REG64 | basereg), bits, + X86_REX_B)) + return 1; + x86_ea->sib |= low3; + } + + /* Put in indexreg, checking for none case */ + if (indexreg == REG3264_NONE) + x86_ea->sib |= 040; + /* Any scale field is valid, just leave at 0. */ + else { + if (indexreg >= SIMDREGS) { + if (yasm_x86__set_rex_from_reg(rex, &low3, + (unsigned int)(X86_XMMREG | (indexreg-SIMDREGS)), + bits, X86_REX_X)) + return 1; + } else { + if (yasm_x86__set_rex_from_reg(rex, &low3, + (unsigned int)(X86_REG64 | indexreg), + bits, X86_REX_X)) + return 1; + } + x86_ea->sib |= low3 << 3; + /* Set scale field, 1 case -> 0, so don't bother. */ + switch (reg3264mult[indexreg]) { + case 2: + x86_ea->sib |= 0100; + break; + case 4: + x86_ea->sib |= 0200; + break; + case 8: + x86_ea->sib |= 0300; + break; + } + } + + x86_ea->valid_sib = 1; /* Done with SIB */ + } + + /* Calculate displacement length (if possible) */ + retval = x86_checkea_calc_displen + (x86_ea, 32, basereg == REG3264_NONE, + basereg == REG3264_EBP || basereg == REG64_R13); + return retval; + } else if (*addrsize == 16 && x86_ea->need_modrm && !x86_ea->valid_modrm) { + static const unsigned char modrm16[16] = { + 0006 /* disp16 */, 0007 /* [BX] */, 0004 /* [SI] */, + 0000 /* [BX+SI] */, 0005 /* [DI] */, 0001 /* [BX+DI] */, + 0377 /* invalid */, 0377 /* invalid */, 0006 /* [BP]+d */, + 0377 /* invalid */, 0002 /* [BP+SI] */, 0377 /* invalid */, + 0003 /* [BP+DI] */, 0377 /* invalid */, 0377 /* invalid */, + 0377 /* invalid */ + }; + x86_checkea_reg16_data reg16mult = {0, 0, 0, 0}; + enum { + HAVE_NONE = 0, + HAVE_BX = 1<<0, + HAVE_SI = 1<<1, + HAVE_DI = 1<<2, + HAVE_BP = 1<<3 + } havereg = HAVE_NONE; + + /* 64-bit mode does not allow 16-bit addresses */ + if (bits == 64 && !address16_op) { + yasm_error_set(YASM_ERROR_TYPE, + N_("16-bit addresses not supported in 64-bit mode")); + return 1; + } + + /* 16-bit cannot have SIB */ + x86_ea->sib = 0; + x86_ea->valid_sib = 0; + x86_ea->need_sib = 0; + + if (x86_ea->ea.disp.abs) { + int pcrel = 0; + switch (x86_expr_checkea_getregusage + (&x86_ea->ea.disp.abs, (int *)NULL, &pcrel, bits, + ®16mult, x86_expr_checkea_get_reg16)) { + case 1: + yasm_error_set(YASM_ERROR_VALUE, + N_("invalid effective address")); + return 1; + case 2: + if (pcrel) + yasm_value_set_curpos_rel(&x86_ea->ea.disp, bc, 1); + return 2; + default: + if (pcrel) + yasm_value_set_curpos_rel(&x86_ea->ea.disp, bc, 1); + break; + } + } + + /* reg multipliers not 0 or 1 are illegal. */ + if (reg16mult.bx & ~1 || reg16mult.si & ~1 || reg16mult.di & ~1 || + reg16mult.bp & ~1) { + yasm_error_set(YASM_ERROR_VALUE, N_("invalid effective address")); + return 1; + } + + /* Set havereg appropriately */ + if (reg16mult.bx > 0) + havereg |= HAVE_BX; + if (reg16mult.si > 0) + havereg |= HAVE_SI; + if (reg16mult.di > 0) + havereg |= HAVE_DI; + if (reg16mult.bp > 0) + havereg |= HAVE_BP; + + /* Check the modrm value for invalid combinations. */ + if (modrm16[havereg] & 0070) { + yasm_error_set(YASM_ERROR_VALUE, N_("invalid effective address")); + return 1; + } + + /* Set ModRM byte for registers */ + x86_ea->modrm |= modrm16[havereg]; + + /* Calculate displacement length (if possible) */ + retval = x86_checkea_calc_displen + (x86_ea, 16, havereg == HAVE_NONE, havereg == HAVE_BP); + return retval; + } else if (!x86_ea->need_modrm && !x86_ea->need_sib) { + /* Special case for MOV MemOffs opcode: displacement but no modrm. */ + switch (*addrsize) { + case 64: + if (bits != 64) { + yasm_error_set(YASM_ERROR_TYPE, + N_("invalid effective address (64-bit in non-64-bit mode)")); + return 1; + } + x86_ea->ea.disp.size = 64; + break; + case 32: + x86_ea->ea.disp.size = 32; + break; + case 16: + /* 64-bit mode does not allow 16-bit addresses */ + if (bits == 64 && !address16_op) { + yasm_error_set(YASM_ERROR_TYPE, + N_("16-bit addresses not supported in 64-bit mode")); + return 1; + } + x86_ea->ea.disp.size = 16; + break; + } + } + return 0; +} + +int +yasm_x86__floatnum_tobytes(yasm_arch *arch, const yasm_floatnum *flt, + unsigned char *buf, size_t destsize, size_t valsize, + size_t shift, int warn) +{ + if (!yasm_floatnum_check_size(flt, valsize)) { + yasm_error_set(YASM_ERROR_FLOATING_POINT, + N_("invalid floating point constant size")); + return 1; + } + + yasm_floatnum_get_sized(flt, buf, destsize, valsize, shift, 0, warn); + return 0; +} diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86id.c b/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86id.c new file mode 100644 index 0000000000..6207c2062c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86id.c @@ -0,0 +1,1951 @@ +/* + * x86 identifier recognition and instruction handling + * + * Copyright (C) 2002-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 +#include + +#include +#include + +#include "modules/arch/x86/x86arch.h" + + +static const char *cpu_find_reverse(unsigned int cpu0, unsigned int cpu1, + unsigned int cpu2); + +/* Opcode modifiers. */ +#define MOD_Gap 0 /* Eats a parameter / does nothing */ +#define MOD_PreAdd 1 /* Parameter adds to "special" prefix */ +#define MOD_Op0Add 2 /* Parameter adds to opcode byte 0 */ +#define MOD_Op1Add 3 /* Parameter adds to opcode byte 1 */ +#define MOD_Op2Add 4 /* Parameter adds to opcode byte 2 */ +#define MOD_SpAdd 5 /* Parameter adds to "spare" value */ +#define MOD_OpSizeR 6 /* Parameter replaces opersize */ +#define MOD_Imm8 7 /* Parameter is included as immediate byte */ +#define MOD_AdSizeR 8 /* Parameter replaces addrsize (jmp only) */ +#define MOD_DOpS64R 9 /* Parameter replaces default 64-bit opersize */ +#define MOD_Op1AddSp 10 /* Parameter is added as "spare" to opcode byte 2 */ +#define MOD_SetVEX 11 /* Parameter replaces internal VEX prefix value */ + +/* GAS suffix flags for instructions */ +enum x86_gas_suffix_flags { + SUF_Z = 1<<0, /* no suffix */ + SUF_B = 1<<1, + SUF_W = 1<<2, + SUF_L = 1<<3, + SUF_Q = 1<<4, + SUF_S = 1<<5, + SUF_MASK = SUF_Z|SUF_B|SUF_W|SUF_L|SUF_Q|SUF_S, + + /* Flags only used in x86_insn_info */ + GAS_ONLY = 1<<6, /* Only available in GAS mode */ + GAS_ILLEGAL = 1<<7, /* Illegal in GAS mode */ + GAS_NO_REV = 1<<8 /* Don't reverse operands in GAS mode */ +}; + +/* Miscellaneous flag tests for instructions */ +enum x86_misc_flags { + /* These are tested against BITS==64. */ + ONLY_64 = 1<<0, /* Only available in 64-bit mode */ + NOT_64 = 1<<1, /* Not available (invalid) in 64-bit mode */ + /* These are tested against whether the base instruction is an AVX one. */ + ONLY_AVX = 1<<2, /* Only available in AVX instruction */ + NOT_AVX = 1<<3 /* Not available (invalid) in AVX instruction */ +}; + +enum x86_operand_type { + OPT_Imm = 0, /* immediate */ + OPT_Reg = 1, /* any general purpose or FPU register */ + OPT_Mem = 2, /* memory */ + OPT_RM = 3, /* any general purpose or FPU register OR memory */ + OPT_SIMDReg = 4, /* any MMX or XMM register */ + OPT_SIMDRM = 5, /* any MMX or XMM register OR memory */ + OPT_SegReg = 6, /* any segment register */ + OPT_CRReg = 7, /* any CR register */ + OPT_DRReg = 8, /* any DR register */ + OPT_TRReg = 9, /* any TR register */ + OPT_ST0 = 10, /* ST0 */ + OPT_Areg = 11, /* AL/AX/EAX/RAX (depending on size) */ + OPT_Creg = 12, /* CL/CX/ECX/RCX (depending on size) */ + OPT_Dreg = 13, /* DL/DX/EDX/RDX (depending on size) */ + OPT_CS = 14, /* CS */ + OPT_DS = 15, /* DS */ + OPT_ES = 16, /* ES */ + OPT_FS = 17, /* FS */ + OPT_GS = 18, /* GS */ + OPT_SS = 19, /* SS */ + OPT_CR4 = 20, /* CR4 */ + /* memory offset (an EA, but with no registers allowed) + * [special case for MOV opcode] + */ + OPT_MemOffs = 21, + OPT_Imm1 = 22, /* immediate, value=1 (for special-case shift) */ + /* immediate, does not contain SEG:OFF (for jmp/call) */ + OPT_ImmNotSegOff = 23, + OPT_XMM0 = 24, /* XMM0 */ + /* AX/EAX/RAX memory operand only (EA) [special case for SVM opcodes] + */ + OPT_MemrAX = 25, + /* EAX memory operand only (EA) [special case for SVM skinit opcode] */ + OPT_MemEAX = 26, + /* XMM VSIB memory operand */ + OPT_MemXMMIndex = 27, + /* YMM VSIB memory operand */ + OPT_MemYMMIndex = 28 +}; + +enum x86_operand_size { + /* any size acceptable/no size spec acceptable (dep. on strict) */ + OPS_Any = 0, + /* 8/16/32/64/80/128/256 bits (from user or reg size) */ + OPS_8 = 1, + OPS_16 = 2, + OPS_32 = 3, + OPS_64 = 4, + OPS_80 = 5, + OPS_128 = 6, + OPS_256 = 7, + /* current BITS setting; when this is used the size matched + * gets stored into the opersize as well. + */ + OPS_BITS = 8 +}; + +enum x86_operand_targetmod { + OPTM_None = 0, /* no target mod acceptable */ + OPTM_Near = 1, /* NEAR */ + OPTM_Short = 2, /* SHORT */ + OPTM_Far = 3, /* FAR (or SEG:OFF immediate) */ + OPTM_To = 4 /* TO */ +}; + +enum x86_operand_action { + OPA_None = 0, /* does nothing (operand data is discarded) */ + OPA_EA = 1, /* operand data goes into ea field */ + OPA_Imm = 2, /* operand data goes into imm field */ + OPA_SImm = 3, /* operand data goes into sign-extended imm field */ + OPA_Spare = 4, /* operand data goes into "spare" field */ + OPA_Op0Add = 5, /* operand data is added to opcode byte 0 */ + OPA_Op1Add = 6, /* operand data is added to opcode byte 1 */ + /* operand data goes into BOTH ea and spare + * (special case for imul opcode) + */ + OPA_SpareEA = 7, + /* relative jump (outputs a jmp instead of normal insn) */ + OPA_JmpRel = 8, + /* operand size goes into address size (jmp only) */ + OPA_AdSizeR = 9, + /* far jump (outputs a farjmp instead of normal insn) */ + OPA_JmpFar = 10, + /* ea operand only sets address size (no actual ea field) */ + OPA_AdSizeEA = 11, + OPA_VEX = 12, /* operand data goes into VEX/XOP "vvvv" field */ + /* operand data goes into BOTH VEX/XOP "vvvv" field and ea field */ + OPA_EAVEX = 13, + /* operand data goes into BOTH VEX/XOP "vvvv" field and spare field */ + OPA_SpareVEX = 14, + /* operand data goes into upper 4 bits of immediate byte (VEX is4 field) */ + OPA_VEXImmSrc = 15, + /* operand data goes into bottom 4 bits of immediate byte + * (currently only VEX imz2 field) + */ + OPA_VEXImm = 16 +}; + +enum x86_operand_post_action { + OPAP_None = 0, + /* sign-extended imm8 that could expand to a large imm16/32 */ + OPAP_SImm8 = 1, + /* could become a short opcode mov with bits=64 and a32 prefix */ + OPAP_ShortMov = 2, + /* forced 16-bit address size (override ignored, no prefix) */ + OPAP_A16 = 3, + /* large imm64 that can become a sign-extended imm32 */ + OPAP_SImm32Avail = 4 +}; + +typedef struct x86_info_operand { + /* Operand types. These are more detailed than the "general" types for all + * architectures, as they include the size, for instance. + */ + + /* general type (must be exact match, except for RM types): */ + unsigned int type:5; + + /* size (user-specified, or from register size) */ + unsigned int size:4; + + /* size implicit or explicit ("strictness" of size matching on + * non-registers -- registers are always strictly matched): + * 0 = user size must exactly match size above. + * 1 = user size either unspecified or exactly match size above. + */ + unsigned int relaxed:1; + + /* effective address size + * 0 = any address size allowed except for 64-bit + * 1 = only 64-bit address size allowed + */ + unsigned int eas64:1; + + /* target modification */ + unsigned int targetmod:3; + + /* Actions: what to do with the operand if the instruction matches. + * Essentially describes what part of the output bytecode gets the + * operand. This may require conversion (e.g. a register going into + * an ea field). Naturally, only one of each of these may be contained + * in the operands of a single insn_info structure. + */ + unsigned int action:5; + + /* Postponed actions: actions which can't be completed at + * parse-time due to possibly dependent expressions. For these, some + * additional data (stored in the second byte of the opcode with a + * one-byte opcode) is passed to later stages of the assembler with + * flags set to indicate postponed actions. + */ + unsigned int post_action:3; +} x86_info_operand; + +typedef struct x86_insn_info { + /* GAS suffix flags */ + unsigned int gas_flags:9; /* Enabled for these GAS suffixes */ + + /* Tests against BITS==64, AVX, and XOP */ + unsigned int misc_flags:5; + + /* The CPU feature flags needed to execute this instruction. This is OR'ed + * with arch-specific data[2]. This combined value is compared with + * cpu_enabled to see if all bits set here are set in cpu_enabled--if so, + * the instruction is available on this CPU. + */ + unsigned int cpu0:6; + unsigned int cpu1:6; + unsigned int cpu2:6; + + /* Opcode modifiers for variations of instruction. As each modifier reads + * its parameter in LSB->MSB order from the arch-specific data[1] from the + * lexer data, and the LSB of the arch-specific data[1] is reserved for the + * count of insn_info structures in the instruction grouping, there can + * only be a maximum of 3 modifiers. + */ + unsigned char modifiers[3]; + + /* Operand Size */ + unsigned char opersize; + + /* Default operand size in 64-bit mode (0 = 32-bit for readability). */ + unsigned char def_opersize_64; + + /* A special instruction prefix, used for some of the Intel SSE and SSE2 + * instructions. Intel calls these 3-byte opcodes, but in AMD64's 64-bit + * mode, they're treated like normal prefixes (e.g. the REX prefix needs + * to be *after* the F2/F3/66 "prefix"). + * (0=no special prefix) + * 0xC0 - 0xCF indicate a VEX prefix, with the four LSBs holding "WLpp": + * W: VEX.W field (meaning depends on opcode) + * L: 0=128-bit, 1=256-bit + * pp: SIMD prefix designation: + * 00: None + * 01: 66 + * 10: F3 + * 11: F2 + * 0x80 - 0x8F indicate a XOP prefix, with the four LSBs holding "WLpp": + * same meanings as VEX prefix. + */ + unsigned char special_prefix; + + /* The length of the basic opcode */ + unsigned char opcode_len; + + /* The basic 1-3 byte opcode (not including the special instruction + * prefix). + */ + unsigned char opcode[3]; + + /* The 3-bit "spare" value (extended opcode) for the R/M byte field */ + unsigned char spare; + + /* The number of operands this form of the instruction takes */ + unsigned int num_operands:4; + + /* The index into the insn_operands array which contains the type of each + * operand, see above + */ + unsigned int operands_index:12; +} x86_insn_info; + +typedef struct x86_id_insn { + yasm_insn insn; /* base structure */ + + /* instruction parse group - NULL if empty instruction (just prefixes) */ + /*@null@*/ const x86_insn_info *group; + + /* CPU feature flags enabled at the time of parsing the instruction */ + wordptr cpu_enabled; + + /* Modifier data */ + unsigned char mod_data[3]; + + /* Number of elements in the instruction parse group */ + unsigned int num_info:8; + + /* BITS setting active at the time of parsing the instruction */ + unsigned int mode_bits:8; + + /* Suffix flags */ + unsigned int suffix:9; + + /* Tests against BITS==64 and AVX */ + unsigned int misc_flags:5; + + /* Parser enabled at the time of parsing the instruction */ + unsigned int parser:2; + + /* Strict forced setting at the time of parsing the instruction */ + unsigned int force_strict:1; + + /* Default rel setting at the time of parsing the instruction */ + unsigned int default_rel:1; +} x86_id_insn; + +static void x86_id_insn_destroy(void *contents); +static void x86_id_insn_print(const void *contents, FILE *f, int indent_level); +static void x86_id_insn_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc); + +static const yasm_bytecode_callback x86_id_insn_callback = { + x86_id_insn_destroy, + x86_id_insn_print, + x86_id_insn_finalize, + NULL, + yasm_bc_calc_len_common, + yasm_bc_expand_common, + yasm_bc_tobytes_common, + YASM_BC_SPECIAL_INSN +}; + +#include "x86insns.c" + +/* Looks for the first SIMD register match for the purposes of VSIB matching. + * Full legality checking is performed in EA code. + */ +static int +x86_expr_contains_simd_cb(const yasm_expr__item *ei, void *d) +{ + int ymm = *((int *)d); + if (ei->type != YASM_EXPR_REG) + return 0; + switch ((x86_expritem_reg_size)(ei->data.reg & ~0xFUL)) { + case X86_XMMREG: + if (!ymm) + return 1; + break; + case X86_YMMREG: + if (ymm) + return 1; + break; + default: + break; + } + return 0; +} + +static int +x86_expr_contains_simd(const yasm_expr *e, int ymm) +{ + return yasm_expr__traverse_leaves_in_const(e, &ymm, + x86_expr_contains_simd_cb); +} + +static void +x86_finalize_common(x86_common *common, const x86_insn_info *info, + unsigned int mode_bits) +{ + common->addrsize = 0; + common->opersize = info->opersize; + common->lockrep_pre = 0; + common->acqrel_pre = 0; + common->mode_bits = (unsigned char)mode_bits; +} + +static void +x86_finalize_opcode(x86_opcode *opcode, const x86_insn_info *info) +{ + opcode->len = info->opcode_len; + opcode->opcode[0] = info->opcode[0]; + opcode->opcode[1] = info->opcode[1]; + opcode->opcode[2] = info->opcode[2]; +} + +/* Clear operands so they don't get destroyed after we've copied references. */ +static void +x86_id_insn_clear_operands(x86_id_insn *id_insn) +{ + yasm_insn_operand *op = yasm_insn_ops_first(&id_insn->insn); + while (op) { + op->type = YASM_INSN__OPERAND_REG; + op = yasm_insn_op_next(op); + } +} + +static void +x86_finalize_jmpfar(yasm_bytecode *bc, yasm_bytecode *prev_bc, + const x86_insn_info *info) +{ + x86_id_insn *id_insn = (x86_id_insn *)bc->contents; + unsigned char *mod_data = id_insn->mod_data; + unsigned int mode_bits = id_insn->mode_bits; + x86_jmpfar *jmpfar; + yasm_insn_operand *op; + unsigned int i; + + jmpfar = yasm_xmalloc(sizeof(x86_jmpfar)); + x86_finalize_common(&jmpfar->common, info, mode_bits); + x86_finalize_opcode(&jmpfar->opcode, info); + + op = yasm_insn_ops_first(&id_insn->insn); + + if (op->type == YASM_INSN__OPERAND_IMM && op->seg) { + /* SEG:OFF */ + if (yasm_value_finalize_expr(&jmpfar->segment, op->seg, prev_bc, 16)) + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("jump target segment too complex")); + if (yasm_value_finalize_expr(&jmpfar->offset, op->data.val, prev_bc, + 0)) + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("jump target offset too complex")); + } else if (op->targetmod == X86_FAR) { + /* "FAR imm" target needs to become "seg imm:imm". */ + yasm_expr *e = yasm_expr_create_branch(YASM_EXPR_SEG, + yasm_expr_copy(op->data.val), + op->data.val->line); + if (yasm_value_finalize_expr(&jmpfar->offset, op->data.val, prev_bc, 0) + || yasm_value_finalize_expr(&jmpfar->segment, e, prev_bc, 16)) + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("jump target expression too complex")); + } else if (yasm_insn_op_next(op)) { + /* Two operand form (gas) */ + yasm_insn_operand *op2 = yasm_insn_op_next(op); + if (yasm_value_finalize_expr(&jmpfar->segment, op->data.val, prev_bc, + 16)) + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("jump target segment too complex")); + if (yasm_value_finalize_expr(&jmpfar->offset, op2->data.val, prev_bc, + 0)) + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("jump target offset too complex")); + if (op2->size == OPS_BITS) + jmpfar->common.opersize = (unsigned char)mode_bits; + } else + yasm_internal_error(N_("didn't get FAR expression in jmpfar")); + + /* Apply modifiers */ + for (i=0; imodifiers); i++) { + switch (info->modifiers[i]) { + case MOD_Gap: + break; + case MOD_Op0Add: + jmpfar->opcode.opcode[0] += mod_data[i]; + break; + case MOD_Op1Add: + jmpfar->opcode.opcode[1] += mod_data[i]; + break; + case MOD_Op2Add: + jmpfar->opcode.opcode[2] += mod_data[i]; + break; + case MOD_Op1AddSp: + jmpfar->opcode.opcode[1] += mod_data[i]<<3; + break; + default: + break; + } + } + + yasm_x86__bc_apply_prefixes((x86_common *)jmpfar, NULL, + info->def_opersize_64, + id_insn->insn.num_prefixes, + id_insn->insn.prefixes); + + x86_id_insn_clear_operands(id_insn); + + /* Transform the bytecode */ + yasm_x86__bc_transform_jmpfar(bc, jmpfar); +} + +static void +x86_finalize_jmp(yasm_bytecode *bc, yasm_bytecode *prev_bc, + const x86_insn_info *jinfo) +{ + x86_id_insn *id_insn = (x86_id_insn *)bc->contents; + x86_jmp *jmp; + int num_info = id_insn->num_info; + const x86_insn_info *info = id_insn->group; + unsigned char *mod_data = id_insn->mod_data; + unsigned int mode_bits = id_insn->mode_bits; + /*unsigned char suffix = id_insn->suffix;*/ + yasm_insn_operand *op; + static const unsigned char size_lookup[] = + {0, 8, 16, 32, 64, 80, 128, 0, 0}; /* 256 not needed */ + unsigned int i; + + /* We know the target is in operand 0, but sanity check for Imm. */ + op = yasm_insn_ops_first(&id_insn->insn); + if (op->type != YASM_INSN__OPERAND_IMM) + yasm_internal_error(N_("invalid operand conversion")); + + jmp = yasm_xmalloc(sizeof(x86_jmp)); + x86_finalize_common(&jmp->common, jinfo, mode_bits); + if (yasm_value_finalize_expr(&jmp->target, op->data.val, prev_bc, 0)) + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("jump target expression too complex")); + if (jmp->target.seg_of || jmp->target.rshift || jmp->target.curpos_rel) + yasm_error_set(YASM_ERROR_VALUE, N_("invalid jump target")); + yasm_value_set_curpos_rel(&jmp->target, bc, 0); + jmp->target.jump_target = 1; + + /* See if the user explicitly specified short/near/far. */ + switch (insn_operands[jinfo->operands_index+0].targetmod) { + case OPTM_Short: + jmp->op_sel = JMP_SHORT_FORCED; + break; + case OPTM_Near: + jmp->op_sel = JMP_NEAR_FORCED; + break; + default: + jmp->op_sel = JMP_NONE; + } + + /* Check for address size setting in second operand, if present */ + if (jinfo->num_operands > 1 && + insn_operands[jinfo->operands_index+1].action == OPA_AdSizeR) + jmp->common.addrsize = (unsigned char) + size_lookup[insn_operands[jinfo->operands_index+1].size]; + + /* Check for address size override */ + for (i=0; imodifiers); i++) { + if (jinfo->modifiers[i] == MOD_AdSizeR) + jmp->common.addrsize = mod_data[i]; + } + + /* Scan through other infos for this insn looking for short/near versions. + * Needs to match opersize and number of operands, also be within CPU. + */ + jmp->shortop.len = 0; + jmp->nearop.len = 0; + for (; num_info>0 && (jmp->shortop.len == 0 || jmp->nearop.len == 0); + num_info--, info++) { + /* Match CPU */ + if (mode_bits != 64 && (info->misc_flags & ONLY_64)) + continue; + if (mode_bits == 64 && (info->misc_flags & NOT_64)) + continue; + + if (!BitVector_bit_test(id_insn->cpu_enabled, info->cpu0) || + !BitVector_bit_test(id_insn->cpu_enabled, info->cpu1) || + !BitVector_bit_test(id_insn->cpu_enabled, info->cpu2)) + continue; + + if (info->num_operands == 0) + continue; + + if (insn_operands[info->operands_index+0].action != OPA_JmpRel) + continue; + + if (info->opersize != jmp->common.opersize) + continue; + + switch (insn_operands[info->operands_index+0].targetmod) { + case OPTM_Short: + x86_finalize_opcode(&jmp->shortop, info); + for (i=0; imodifiers); i++) { + if (info->modifiers[i] == MOD_Op0Add) + jmp->shortop.opcode[0] += mod_data[i]; + } + break; + case OPTM_Near: + x86_finalize_opcode(&jmp->nearop, info); + for (i=0; imodifiers); i++) { + if (info->modifiers[i] == MOD_Op1Add) + jmp->nearop.opcode[1] += mod_data[i]; + } + break; + } + } + + if ((jmp->op_sel == JMP_SHORT_FORCED) && (jmp->shortop.len == 0)) + yasm_error_set(YASM_ERROR_TYPE, + N_("no SHORT form of that jump instruction exists")); + if ((jmp->op_sel == JMP_NEAR_FORCED) && (jmp->nearop.len == 0)) + yasm_error_set(YASM_ERROR_TYPE, + N_("no NEAR form of that jump instruction exists")); + + if (jmp->op_sel == JMP_NONE) { + if (jmp->nearop.len == 0) + jmp->op_sel = JMP_SHORT_FORCED; + if (jmp->shortop.len == 0) + jmp->op_sel = JMP_NEAR_FORCED; + } + + yasm_x86__bc_apply_prefixes((x86_common *)jmp, NULL, + jinfo->def_opersize_64, + id_insn->insn.num_prefixes, + id_insn->insn.prefixes); + + x86_id_insn_clear_operands(id_insn); + + /* Transform the bytecode */ + yasm_x86__bc_transform_jmp(bc, jmp); +} + +static const x86_insn_info * +x86_find_match(x86_id_insn *id_insn, yasm_insn_operand **ops, + yasm_insn_operand **rev_ops, const unsigned int *size_lookup, + int bypass) +{ + const x86_insn_info *info = id_insn->group; + unsigned int num_info = id_insn->num_info; + unsigned int suffix = id_insn->suffix; + unsigned int mode_bits = id_insn->mode_bits; + int found = 0; + + /* Just do a simple linear search through the info array for a match. + * First match wins. + */ + for (; num_info>0 && !found; num_info--, info++) { + yasm_insn_operand *op, **use_ops; + const x86_info_operand *info_ops = + &insn_operands[info->operands_index]; + unsigned int gas_flags = info->gas_flags; + unsigned int misc_flags = info->misc_flags; + unsigned int size; + int mismatch = 0; + unsigned int i; + + /* Match CPU */ + if (mode_bits != 64 && (misc_flags & ONLY_64)) + continue; + if (mode_bits == 64 && (misc_flags & NOT_64)) + continue; + + if (bypass != 8 && + (!BitVector_bit_test(id_insn->cpu_enabled, info->cpu0) || + !BitVector_bit_test(id_insn->cpu_enabled, info->cpu1) || + !BitVector_bit_test(id_insn->cpu_enabled, info->cpu2))) + continue; + + /* Match # of operands */ + if (id_insn->insn.num_operands != info->num_operands) + continue; + + /* Match AVX */ + if (!(id_insn->misc_flags & ONLY_AVX) && (misc_flags & ONLY_AVX)) + continue; + if ((id_insn->misc_flags & ONLY_AVX) && (misc_flags & NOT_AVX)) + continue; + + /* Match parser mode */ + if ((gas_flags & GAS_ONLY) && id_insn->parser != X86_PARSER_GAS) + continue; + if ((gas_flags & GAS_ILLEGAL) && id_insn->parser == X86_PARSER_GAS) + continue; + + /* Match suffix (if required) */ + if (id_insn->parser == X86_PARSER_GAS + && ((suffix & SUF_MASK) & (gas_flags & SUF_MASK)) == 0) + continue; + + /* Use reversed operands in GAS mode if not otherwise specified */ + use_ops = ops; + if (id_insn->parser == X86_PARSER_GAS && !(gas_flags & GAS_NO_REV)) + use_ops = rev_ops; + + if (id_insn->insn.num_operands == 0) { + found = 1; /* no operands -> must have a match here. */ + break; + } + + /* Match each operand type and size */ + for (i = 0, op = use_ops[0]; op && inum_operands && !mismatch; + op = use_ops[++i]) { + /* Check operand type */ + switch (info_ops[i].type) { + case OPT_Imm: + if (op->type != YASM_INSN__OPERAND_IMM) + mismatch = 1; + break; + case OPT_RM: + if (op->type == YASM_INSN__OPERAND_MEMORY) + break; + /*@fallthrough@*/ + case OPT_Reg: + if (op->type != YASM_INSN__OPERAND_REG) + mismatch = 1; + else { + switch ((x86_expritem_reg_size)(op->data.reg&~0xFUL)) { + case X86_REG8: + case X86_REG8X: + case X86_REG16: + case X86_REG32: + case X86_REG64: + case X86_FPUREG: + break; + default: + mismatch = 1; + break; + } + } + break; + case OPT_Mem: + if (op->type != YASM_INSN__OPERAND_MEMORY) + mismatch = 1; + break; + case OPT_SIMDRM: + if (op->type == YASM_INSN__OPERAND_MEMORY) + break; + /*@fallthrough@*/ + case OPT_SIMDReg: + if (op->type != YASM_INSN__OPERAND_REG) + mismatch = 1; + else { + switch ((x86_expritem_reg_size)(op->data.reg&~0xFUL)) { + case X86_MMXREG: + case X86_XMMREG: + case X86_YMMREG: + break; + default: + mismatch = 1; + break; + } + } + break; + case OPT_SegReg: + if (op->type != YASM_INSN__OPERAND_SEGREG) + mismatch = 1; + break; + case OPT_CRReg: + if (op->type != YASM_INSN__OPERAND_REG || + (op->data.reg & ~0xFUL) != X86_CRREG) + mismatch = 1; + break; + case OPT_DRReg: + if (op->type != YASM_INSN__OPERAND_REG || + (op->data.reg & ~0xFUL) != X86_DRREG) + mismatch = 1; + break; + case OPT_TRReg: + if (op->type != YASM_INSN__OPERAND_REG || + (op->data.reg & ~0xFUL) != X86_TRREG) + mismatch = 1; + break; + case OPT_ST0: + if (op->type != YASM_INSN__OPERAND_REG || + op->data.reg != X86_FPUREG) + mismatch = 1; + break; + case OPT_Areg: + if (op->type != YASM_INSN__OPERAND_REG || + (info_ops[i].size == OPS_8 && + op->data.reg != (X86_REG8 | 0) && + op->data.reg != (X86_REG8X | 0)) || + (info_ops[i].size == OPS_16 && + op->data.reg != (X86_REG16 | 0)) || + (info_ops[i].size == OPS_32 && + op->data.reg != (X86_REG32 | 0)) || + (info_ops[i].size == OPS_64 && + op->data.reg != (X86_REG64 | 0))) + mismatch = 1; + break; + case OPT_Creg: + if (op->type != YASM_INSN__OPERAND_REG || + (info_ops[i].size == OPS_8 && + op->data.reg != (X86_REG8 | 1) && + op->data.reg != (X86_REG8X | 1)) || + (info_ops[i].size == OPS_16 && + op->data.reg != (X86_REG16 | 1)) || + (info_ops[i].size == OPS_32 && + op->data.reg != (X86_REG32 | 1)) || + (info_ops[i].size == OPS_64 && + op->data.reg != (X86_REG64 | 1))) + mismatch = 1; + break; + case OPT_Dreg: + if (op->type != YASM_INSN__OPERAND_REG || + (info_ops[i].size == OPS_8 && + op->data.reg != (X86_REG8 | 2) && + op->data.reg != (X86_REG8X | 2)) || + (info_ops[i].size == OPS_16 && + op->data.reg != (X86_REG16 | 2)) || + (info_ops[i].size == OPS_32 && + op->data.reg != (X86_REG32 | 2)) || + (info_ops[i].size == OPS_64 && + op->data.reg != (X86_REG64 | 2))) + mismatch = 1; + break; + case OPT_CS: + if (op->type != YASM_INSN__OPERAND_SEGREG || + (op->data.reg & 0xF) != 1) + mismatch = 1; + break; + case OPT_DS: + if (op->type != YASM_INSN__OPERAND_SEGREG || + (op->data.reg & 0xF) != 3) + mismatch = 1; + break; + case OPT_ES: + if (op->type != YASM_INSN__OPERAND_SEGREG || + (op->data.reg & 0xF) != 0) + mismatch = 1; + break; + case OPT_FS: + if (op->type != YASM_INSN__OPERAND_SEGREG || + (op->data.reg & 0xF) != 4) + mismatch = 1; + break; + case OPT_GS: + if (op->type != YASM_INSN__OPERAND_SEGREG || + (op->data.reg & 0xF) != 5) + mismatch = 1; + break; + case OPT_SS: + if (op->type != YASM_INSN__OPERAND_SEGREG || + (op->data.reg & 0xF) != 2) + mismatch = 1; + break; + case OPT_CR4: + if (op->type != YASM_INSN__OPERAND_REG || + op->data.reg != (X86_CRREG | 4)) + mismatch = 1; + break; + case OPT_MemOffs: + if (op->type != YASM_INSN__OPERAND_MEMORY || + yasm_expr__contains(op->data.ea->disp.abs, + YASM_EXPR_REG) || + op->data.ea->pc_rel || + (!op->data.ea->not_pc_rel && id_insn->default_rel && + op->data.ea->disp.size != 64)) + mismatch = 1; + break; + case OPT_Imm1: + if (op->type == YASM_INSN__OPERAND_IMM) { + const yasm_intnum *num; + num = yasm_expr_get_intnum(&op->data.val, 0); + if (!num || !yasm_intnum_is_pos1(num)) + mismatch = 1; + } else + mismatch = 1; + break; + case OPT_ImmNotSegOff: + if (op->type != YASM_INSN__OPERAND_IMM || + op->targetmod != 0 || op->seg) + mismatch = 1; + break; + case OPT_XMM0: + if (op->type != YASM_INSN__OPERAND_REG || + op->data.reg != X86_XMMREG) + mismatch = 1; + break; + case OPT_MemrAX: { + const uintptr_t *regp; + if (op->type != YASM_INSN__OPERAND_MEMORY || + !(regp = yasm_expr_get_reg(&op->data.ea->disp.abs, 0)) || + (*regp != (X86_REG16 | 0) && + *regp != (X86_REG32 | 0) && + *regp != (X86_REG64 | 0))) + mismatch = 1; + break; + } + case OPT_MemEAX: { + const uintptr_t *regp; + if (op->type != YASM_INSN__OPERAND_MEMORY || + !(regp = yasm_expr_get_reg(&op->data.ea->disp.abs, 0)) || + *regp != (X86_REG32 | 0)) + mismatch = 1; + break; + } + case OPT_MemXMMIndex: + if (op->type != YASM_INSN__OPERAND_MEMORY || + !x86_expr_contains_simd(op->data.ea->disp.abs, 0)) + mismatch = 1; + break; + case OPT_MemYMMIndex: + if (op->type != YASM_INSN__OPERAND_MEMORY || + !x86_expr_contains_simd(op->data.ea->disp.abs, 1)) + mismatch = 1; + break; + default: + yasm_internal_error(N_("invalid operand type")); + } + + if (mismatch) + break; + + /* Check operand size */ + size = size_lookup[info_ops[i].size]; + if (id_insn->parser == X86_PARSER_GAS) { + /* Require relaxed operands for GAS mode (don't allow + * per-operand sizing). + */ + if (op->type == YASM_INSN__OPERAND_REG && op->size == 0) { + /* Register size must exactly match */ + if (yasm_x86__get_reg_size(op->data.reg) != size) + mismatch = 1; + } else if ((info_ops[i].type == OPT_Imm + || info_ops[i].type == OPT_ImmNotSegOff + || info_ops[i].type == OPT_Imm1) + && !info_ops[i].relaxed + && info_ops[i].action != OPA_JmpRel) + mismatch = 1; + } else { + if (op->type == YASM_INSN__OPERAND_REG && op->size == 0) { + /* Register size must exactly match */ + if ((bypass == 4 && i == 0) || (bypass == 5 && i == 1) + || (bypass == 6 && i == 2)) + ; + else if (yasm_x86__get_reg_size(op->data.reg) != size) + mismatch = 1; + } else { + if ((bypass == 1 && i == 0) || (bypass == 2 && i == 1) + || (bypass == 3 && i == 2)) + ; + else if (info_ops[i].relaxed) { + /* Relaxed checking */ + if (size != 0 && op->size != size && op->size != 0) + mismatch = 1; + } else { + /* Strict checking */ + if (op->size != size) + mismatch = 1; + } + } + } + + if (mismatch) + break; + + /* Check for 64-bit effective address size in NASM mode */ + if (id_insn->parser != X86_PARSER_GAS && + op->type == YASM_INSN__OPERAND_MEMORY) { + if (info_ops[i].eas64) { + if (op->data.ea->disp.size != 64) + mismatch = 1; + } else if (op->data.ea->disp.size == 64) + mismatch = 1; + } + + if (mismatch) + break; + + /* Check target modifier */ + switch (info_ops[i].targetmod) { + case OPTM_None: + if (op->targetmod != 0) + mismatch = 1; + break; + case OPTM_Near: + if (op->targetmod != X86_NEAR) + mismatch = 1; + break; + case OPTM_Short: + if (op->targetmod != X86_SHORT) + mismatch = 1; + break; + case OPTM_Far: + if (op->targetmod != X86_FAR) + mismatch = 1; + break; + case OPTM_To: + if (op->targetmod != X86_TO) + mismatch = 1; + break; + default: + yasm_internal_error(N_("invalid target modifier type")); + } + } + + if (!mismatch) { + found = 1; + break; + } + } + + if (!found) + return NULL; + return info; +} + +static void +x86_match_error(x86_id_insn *id_insn, yasm_insn_operand **ops, + yasm_insn_operand **rev_ops, const unsigned int *size_lookup) +{ + const x86_insn_info *i; + int ni; + int found; + int bypass; + + /* Check for matching # of operands */ + found = 0; + for (ni=id_insn->num_info, i=id_insn->group; ni>0; ni--, i++) { + if (id_insn->insn.num_operands == i->num_operands) { + found = 1; + break; + } + } + if (!found) { + yasm_error_set(YASM_ERROR_TYPE, N_("invalid number of operands")); + return; + } + + for (bypass=1; bypass<9; bypass++) { + i = x86_find_match(id_insn, ops, rev_ops, size_lookup, bypass); + if (i) + break; + } + + switch (bypass) { + case 1: + case 4: + yasm_error_set(YASM_ERROR_TYPE, + N_("invalid size for operand %d"), 1); + break; + case 2: + case 5: + yasm_error_set(YASM_ERROR_TYPE, + N_("invalid size for operand %d"), 2); + break; + case 3: + case 6: + yasm_error_set(YASM_ERROR_TYPE, + N_("invalid size for operand %d"), 3); + break; + case 7: + yasm_error_set(YASM_ERROR_TYPE, + N_("one of source operand 1 or 3 must match dest operand")); + break; + case 8: + { + unsigned int cpu0 = i->cpu0, cpu1 = i->cpu1, cpu2 = i->cpu2; + yasm_error_set(YASM_ERROR_TYPE, + N_("requires CPU%s"), + cpu_find_reverse(cpu0, cpu1, cpu2)); + break; + } + default: + yasm_error_set(YASM_ERROR_TYPE, + N_("invalid combination of opcode and operands")); + } +} + +static void +x86_id_insn_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc) +{ + x86_id_insn *id_insn = (x86_id_insn *)bc->contents; + x86_insn *insn; + const x86_insn_info *info = id_insn->group; + unsigned int mode_bits = id_insn->mode_bits; + unsigned char *mod_data = id_insn->mod_data; + yasm_insn_operand *op, *ops[5], *rev_ops[5]; + /*@null@*/ yasm_expr *imm; + unsigned char im_len; + unsigned char im_sign; + unsigned char spare; + unsigned char vexdata, vexreg; + unsigned int i; + unsigned int size_lookup[] = {0, 8, 16, 32, 64, 80, 128, 256, 0}; + unsigned long do_postop = 0; + + size_lookup[OPS_BITS] = mode_bits; + + yasm_insn_finalize(&id_insn->insn); + + /* Build local array of operands from list, since we know we have a max + * of 5 operands. + */ + if (id_insn->insn.num_operands > 5) { + yasm_error_set(YASM_ERROR_TYPE, N_("too many operands")); + return; + } + ops[0] = ops[1] = ops[2] = ops[3] = ops[4] = NULL; + for (i = 0, op = yasm_insn_ops_first(&id_insn->insn); + op && i < id_insn->insn.num_operands; + op = yasm_insn_op_next(op), i++) + ops[i] = op; + + /* If we're running in GAS mode, build a reverse array of the operands + * as most GAS instructions have reversed operands from Intel style. + */ + if (id_insn->parser == X86_PARSER_GAS) { + rev_ops[0] = rev_ops[1] = rev_ops[2] = rev_ops[3] = rev_ops[4] = NULL; + for (i = id_insn->insn.num_operands-1, + op = yasm_insn_ops_first(&id_insn->insn); + op; op = yasm_insn_op_next(op), i--) + rev_ops[i] = op; + } + + /* If we're running in GAS mode, look at the first insn_info to see + * if this is a relative jump (OPA_JmpRel). If so, run through the + * operands and adjust for dereferences / lack thereof. + */ + if (id_insn->parser == X86_PARSER_GAS + && insn_operands[info->operands_index+0].action == OPA_JmpRel) { + for (i = 0, op = ops[0]; op; op = ops[++i]) { + if (!op->deref && (op->type == YASM_INSN__OPERAND_REG + || (op->type == YASM_INSN__OPERAND_MEMORY + && op->data.ea->strong))) + yasm_warn_set(YASM_WARN_GENERAL, + N_("indirect call without `*'")); + if (!op->deref && op->type == YASM_INSN__OPERAND_MEMORY + && !op->data.ea->strong) { + /* Memory that is not dereferenced, and not strong, is + * actually an immediate for the purposes of relative jumps. + */ + if (op->data.ea->segreg != 0) + yasm_warn_set(YASM_WARN_GENERAL, + N_("skipping prefixes on this instruction")); + imm = op->data.ea->disp.abs; + op->data.ea->disp.abs = NULL; + yasm_x86__ea_destroy(op->data.ea); + op->type = YASM_INSN__OPERAND_IMM; + op->data.val = imm; + } + } + } + + info = x86_find_match(id_insn, ops, rev_ops, size_lookup, 0); + + if (!info) { + /* Didn't find a match */ + x86_match_error(id_insn, ops, rev_ops, size_lookup); + return; + } + + if (id_insn->insn.num_operands > 0) { + switch (insn_operands[info->operands_index+0].action) { + case OPA_JmpRel: + /* Shortcut to JmpRel */ + x86_finalize_jmp(bc, prev_bc, info); + return; + case OPA_JmpFar: + /* Shortcut to JmpFar */ + x86_finalize_jmpfar(bc, prev_bc, info); + return; + } + } + + /* Copy what we can from info */ + insn = yasm_xmalloc(sizeof(x86_insn)); + x86_finalize_common(&insn->common, info, mode_bits); + x86_finalize_opcode(&insn->opcode, info); + insn->x86_ea = NULL; + imm = NULL; + insn->def_opersize_64 = info->def_opersize_64; + insn->special_prefix = info->special_prefix; + spare = info->spare; + vexdata = 0; + vexreg = 0; + im_len = 0; + im_sign = 0; + insn->postop = X86_POSTOP_NONE; + insn->rex = 0; + + /* Move VEX/XOP data (stored in special prefix) to separate location to + * allow overriding of special prefix by modifiers. + */ + if ((insn->special_prefix & 0xF0) == 0xC0 || + (insn->special_prefix & 0xF0) == 0x80) { + vexdata = insn->special_prefix; + insn->special_prefix = 0; + } + + /* Apply modifiers */ + for (i=0; imodifiers); i++) { + switch (info->modifiers[i]) { + case MOD_Gap: + break; + case MOD_PreAdd: + insn->special_prefix += mod_data[i]; + break; + case MOD_Op0Add: + insn->opcode.opcode[0] += mod_data[i]; + break; + case MOD_Op1Add: + insn->opcode.opcode[1] += mod_data[i]; + break; + case MOD_Op2Add: + insn->opcode.opcode[2] += mod_data[i]; + break; + case MOD_SpAdd: + spare += mod_data[i]; + break; + case MOD_OpSizeR: + insn->common.opersize = mod_data[i]; + break; + case MOD_Imm8: + imm = yasm_expr_create_ident(yasm_expr_int( + yasm_intnum_create_uint(mod_data[i])), bc->line); + im_len = 8; + break; + case MOD_DOpS64R: + insn->def_opersize_64 = mod_data[i]; + break; + case MOD_Op1AddSp: + insn->opcode.opcode[1] += mod_data[i]<<3; + break; + case MOD_SetVEX: + vexdata = mod_data[i]; + break; + default: + break; + } + } + + /* In 64-bit mode, if opersize is 64 and default is not 64, + * force REX byte. + */ + if (mode_bits == 64 && insn->common.opersize == 64 && + insn->def_opersize_64 != 64) + insn->rex = 0x48; + + /* Go through operands and assign */ + if (id_insn->insn.num_operands > 0) { + yasm_insn_operand **use_ops = ops; + const x86_info_operand *info_ops = + &insn_operands[info->operands_index]; + + /* Use reversed operands in GAS mode if not otherwise specified */ + if (id_insn->parser == X86_PARSER_GAS + && !(info->gas_flags & GAS_NO_REV)) + use_ops = rev_ops; + + for (i = 0, op = use_ops[0]; op && inum_operands; + op = use_ops[++i]) { + switch (info_ops[i].action) { + case OPA_None: + /* Throw away the operand contents */ + switch (op->type) { + case YASM_INSN__OPERAND_REG: + case YASM_INSN__OPERAND_SEGREG: + break; + case YASM_INSN__OPERAND_MEMORY: + yasm_x86__ea_destroy(op->data.ea); + break; + case YASM_INSN__OPERAND_IMM: + yasm_expr_destroy(op->data.val); + break; + } + break; + case OPA_EA: + switch (op->type) { + case YASM_INSN__OPERAND_REG: + insn->x86_ea = + yasm_x86__ea_create_reg(insn->x86_ea, + (unsigned long)op->data.reg, &insn->rex, + mode_bits); + break; + case YASM_INSN__OPERAND_SEGREG: + yasm_internal_error( + N_("invalid operand conversion")); + case YASM_INSN__OPERAND_MEMORY: + if (op->seg) + yasm_error_set(YASM_ERROR_VALUE, + N_("invalid segment in effective address")); + insn->x86_ea = (x86_effaddr *)op->data.ea; + if (info_ops[i].type == OPT_MemOffs) + /* Special-case for MOV MemOffs instruction */ + yasm_x86__ea_set_disponly(insn->x86_ea); + else if (info_ops[i].type == OPT_MemXMMIndex) { + /* Remember VSIB mode */ + insn->x86_ea->vsib_mode = 1; + insn->x86_ea->need_sib = 1; + } else if (info_ops[i].type == OPT_MemYMMIndex) { + /* Remember VSIB mode */ + insn->x86_ea->vsib_mode = 2; + insn->x86_ea->need_sib = 1; + } else if (id_insn->default_rel && + !op->data.ea->not_pc_rel && + op->data.ea->segreg != 0x6404 && + op->data.ea->segreg != 0x6505 && + !yasm_expr__contains( + op->data.ea->disp.abs, YASM_EXPR_REG)) + /* Enable default PC-rel if no regs and segreg + * is not FS or GS. + */ + insn->x86_ea->ea.pc_rel = 1; + break; + case YASM_INSN__OPERAND_IMM: + insn->x86_ea = + yasm_x86__ea_create_imm(insn->x86_ea, + op->data.val, + size_lookup[info_ops[i].size]); + break; + } + break; + case OPA_EAVEX: + if (op->type != YASM_INSN__OPERAND_REG) + yasm_internal_error(N_("invalid operand conversion")); + insn->x86_ea = + yasm_x86__ea_create_reg(insn->x86_ea, + (unsigned long)op->data.reg, &insn->rex, mode_bits); + vexreg = op->data.reg & 0xF; + break; + case OPA_Imm: + if (op->seg) + yasm_error_set(YASM_ERROR_VALUE, + N_("immediate does not support segment")); + if (op->type == YASM_INSN__OPERAND_IMM) { + imm = op->data.val; + im_len = size_lookup[info_ops[i].size]; + } else + yasm_internal_error(N_("invalid operand conversion")); + break; + case OPA_SImm: + if (op->seg) + yasm_error_set(YASM_ERROR_VALUE, + N_("immediate does not support segment")); + if (op->type == YASM_INSN__OPERAND_IMM) { + imm = op->data.val; + im_len = size_lookup[info_ops[i].size]; + im_sign = 1; + } else + yasm_internal_error(N_("invalid operand conversion")); + break; + case OPA_Spare: + if (op->type == YASM_INSN__OPERAND_SEGREG) + spare = (unsigned char)(op->data.reg&7); + else if (op->type == YASM_INSN__OPERAND_REG) { + if (yasm_x86__set_rex_from_reg(&insn->rex, &spare, + op->data.reg, mode_bits, X86_REX_R)) + return; + } else + yasm_internal_error(N_("invalid operand conversion")); + break; + case OPA_SpareVEX: + if (op->type != YASM_INSN__OPERAND_REG) + yasm_internal_error(N_("invalid operand conversion")); + if (yasm_x86__set_rex_from_reg(&insn->rex, &spare, + op->data.reg, mode_bits, X86_REX_R)) + return; + vexreg = op->data.reg & 0xF; + break; + case OPA_Op0Add: + if (op->type == YASM_INSN__OPERAND_REG) { + unsigned char opadd; + if (yasm_x86__set_rex_from_reg(&insn->rex, &opadd, + op->data.reg, mode_bits, X86_REX_B)) + return; + insn->opcode.opcode[0] += opadd; + } else + yasm_internal_error(N_("invalid operand conversion")); + break; + case OPA_Op1Add: + if (op->type == YASM_INSN__OPERAND_REG) { + unsigned char opadd; + if (yasm_x86__set_rex_from_reg(&insn->rex, &opadd, + op->data.reg, mode_bits, X86_REX_B)) + return; + insn->opcode.opcode[1] += opadd; + } else + yasm_internal_error(N_("invalid operand conversion")); + break; + case OPA_SpareEA: + if (op->type == YASM_INSN__OPERAND_REG) { + insn->x86_ea = + yasm_x86__ea_create_reg(insn->x86_ea, + (unsigned long)op->data.reg, &insn->rex, + mode_bits); + if (!insn->x86_ea || + yasm_x86__set_rex_from_reg(&insn->rex, &spare, + op->data.reg, mode_bits, X86_REX_R)) { + if (insn->x86_ea) + yasm_xfree(insn->x86_ea); + yasm_xfree(insn); + return; + } + } else + yasm_internal_error(N_("invalid operand conversion")); + break; + case OPA_AdSizeEA: { + const uintptr_t *regp = NULL; + /* Only implement this for OPT_MemrAX and OPT_MemEAX + * for now. + */ + if (op->type != YASM_INSN__OPERAND_MEMORY || + !(regp = yasm_expr_get_reg(&op->data.ea->disp.abs, 0))) + yasm_internal_error(N_("invalid operand conversion")); + /* 64-bit mode does not allow 16-bit addresses */ + if (mode_bits == 64 && *regp == (X86_REG16 | 0)) + yasm_error_set(YASM_ERROR_TYPE, + N_("16-bit addresses not supported in 64-bit mode")); + else if (*regp == (X86_REG16 | 0)) + insn->common.addrsize = 16; + else if (*regp == (X86_REG32 | 0)) + insn->common.addrsize = 32; + else if (mode_bits == 64 && *regp == (X86_REG64 | 0)) + insn->common.addrsize = 64; + else + yasm_error_set(YASM_ERROR_TYPE, + N_("unsupported address size")); + yasm_x86__ea_destroy(op->data.ea); + break; + } + case OPA_VEX: + if (op->type != YASM_INSN__OPERAND_REG) + yasm_internal_error(N_("invalid operand conversion")); + vexreg = op->data.reg & 0xF; + break; + case OPA_VEXImmSrc: + if (op->type != YASM_INSN__OPERAND_REG) + yasm_internal_error(N_("invalid operand conversion")); + + if (!imm) { + imm = yasm_expr_create_ident( + yasm_expr_int( + yasm_intnum_create_uint((op->data.reg << 4) + & 0xF0)), + bc->line); + } else { + imm = yasm_expr_create( + YASM_EXPR_OR, + yasm_expr_expr(yasm_expr_create( + YASM_EXPR_AND, + yasm_expr_expr(imm), + yasm_expr_int(yasm_intnum_create_uint(0x0F)), + bc->line)), + yasm_expr_int( + yasm_intnum_create_uint((op->data.reg << 4) + & 0xF0)), + bc->line); + } + im_len = 8; + break; + case OPA_VEXImm: + if (op->type != YASM_INSN__OPERAND_IMM) + yasm_internal_error(N_("invalid operand conversion")); + + if (!imm) + imm = op->data.val; + else { + imm = yasm_expr_create( + YASM_EXPR_OR, + yasm_expr_expr(yasm_expr_create( + YASM_EXPR_AND, + yasm_expr_expr(op->data.val), + yasm_expr_int(yasm_intnum_create_uint(0x0F)), + bc->line)), + yasm_expr_expr(yasm_expr_create( + YASM_EXPR_AND, + yasm_expr_expr(imm), + yasm_expr_int(yasm_intnum_create_uint(0xF0)), + bc->line)), + bc->line); + } + im_len = 8; + break; + default: + yasm_internal_error(N_("unknown operand action")); + } + + if (info_ops[i].size == OPS_BITS) + insn->common.opersize = (unsigned char)mode_bits; + + switch (info_ops[i].post_action) { + case OPAP_None: + break; + case OPAP_SImm8: + /* Check operand strictness; if strict and non-8-bit, + * pre-emptively expand to full size. + * For unspecified size case, still optimize. + */ + if (!(id_insn->force_strict || op->strict) + || op->size == 0) + insn->postop = X86_POSTOP_SIGNEXT_IMM8; + else if (op->size != 8) { + insn->opcode.opcode[0] = + insn->opcode.opcode[insn->opcode.len]; + insn->opcode.len = 1; + } + break; + case OPAP_ShortMov: + do_postop = OPAP_ShortMov; + break; + case OPAP_A16: + insn->postop = X86_POSTOP_ADDRESS16; + break; + case OPAP_SImm32Avail: + do_postop = OPAP_SImm32Avail; + break; + default: + yasm_internal_error( + N_("unknown operand postponed action")); + } + } + } + + if (insn->x86_ea) { + yasm_x86__ea_init(insn->x86_ea, spare, prev_bc); + for (i=0; iinsn.num_segregs; i++) + yasm_ea_set_segreg(&insn->x86_ea->ea, id_insn->insn.segregs[i]); + } else if (id_insn->insn.num_segregs > 0 && insn->special_prefix == 0) { + if (id_insn->insn.num_segregs > 1) + yasm_warn_set(YASM_WARN_GENERAL, + N_("multiple segment overrides, using leftmost")); + insn->special_prefix = (unsigned char) + (id_insn->insn.segregs[id_insn->insn.num_segregs-1]>>8); + } else if (id_insn->insn.num_segregs > 0) + yasm_internal_error(N_("unhandled segment prefix")); + + if (imm) { + insn->imm = yasm_xmalloc(sizeof(yasm_value)); + if (yasm_value_finalize_expr(insn->imm, imm, prev_bc, im_len)) + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("immediate expression too complex")); + insn->imm->sign = im_sign; + } else + insn->imm = NULL; + + yasm_x86__bc_apply_prefixes((x86_common *)insn, &insn->rex, + insn->def_opersize_64, + id_insn->insn.num_prefixes, + id_insn->insn.prefixes); + + if (insn->postop == X86_POSTOP_ADDRESS16 && insn->common.addrsize) { + yasm_warn_set(YASM_WARN_GENERAL, N_("address size override ignored")); + insn->common.addrsize = 0; + } + + /* Handle non-span-dependent post-ops here */ + switch (do_postop) { + case OPAP_ShortMov: + /* Long (modrm+sib) mov instructions in amd64 can be optimized into + * short mov instructions if a 32-bit address override is applied in + * 64-bit mode to an EA of just an offset (no registers) and the + * target register is al/ax/eax/rax. + * + * We don't want to do this if we're in default rel mode. + */ + if (!id_insn->default_rel && + insn->common.mode_bits == 64 && + insn->common.addrsize == 32 && + (!insn->x86_ea->ea.disp.abs || + !yasm_expr__contains(insn->x86_ea->ea.disp.abs, + YASM_EXPR_REG))) { + yasm_x86__ea_set_disponly(insn->x86_ea); + /* Make the short form permanent. */ + insn->opcode.opcode[0] = insn->opcode.opcode[1]; + } + insn->opcode.opcode[1] = 0; /* avoid possible confusion */ + break; + case OPAP_SImm32Avail: + /* Used for 64-bit mov immediate, which can take a sign-extended + * imm32 as well as imm64 values. The imm32 form is put in the + * second byte of the opcode and its ModRM byte is put in the third + * byte of the opcode. + */ + if (!insn->imm->abs || + (yasm_expr_get_intnum(&insn->imm->abs, 0) && + yasm_intnum_check_size( + yasm_expr_get_intnum(&insn->imm->abs, 0), 32, 0, 1))) { + /* Throwaway REX byte */ + unsigned char rex_temp = 0; + + /* Build ModRM EA - CAUTION: this depends on + * opcode 0 being a mov instruction! + */ + insn->x86_ea = yasm_x86__ea_create_reg(insn->x86_ea, + (unsigned long)insn->opcode.opcode[0]-0xB8, &rex_temp, 64); + + /* Make the imm32s form permanent. */ + insn->opcode.opcode[0] = insn->opcode.opcode[1]; + insn->imm->size = 32; + } + insn->opcode.opcode[1] = 0; /* avoid possible confusion */ + break; + default: + break; + } + + /* Convert to VEX/XOP prefixes if requested. + * To save space in the insn structure, the VEX/XOP prefix is written into + * special_prefix and the first 2 bytes of the instruction are set to + * the second two VEX/XOP bytes. During calc_len() it may be shortened to + * one VEX byte (this can only be done after knowledge of REX value); this + * further optimization is not possible for XOP. + */ + if (vexdata) { + int xop = ((vexdata & 0xF0) == 0x80); + unsigned char vex1 = 0xE0; /* R=X=B=1, mmmmm=0 */ + unsigned char vex2; + + if (xop) { + /* Look at the first bytes of the opcode for the XOP mmmmm field. + * Leave R=X=B=1 for now. + */ + if (insn->opcode.opcode[0] != 0x08 && + insn->opcode.opcode[0] != 0x09 && + insn->opcode.opcode[0] != 0x0A) + yasm_internal_error(N_("first opcode byte of XOP must be 0x08, 0x09, or 0x0A")); + vex1 |= insn->opcode.opcode[0]; + /* Move opcode byte back one byte to make room for XOP prefix. */ + insn->opcode.opcode[2] = insn->opcode.opcode[1]; + } else { + /* Look at the first bytes of the opcode to see what leading bytes + * to encode in the VEX mmmmm field. Leave R=X=B=1 for now. + */ + if (insn->opcode.opcode[0] != 0x0F) + yasm_internal_error(N_("first opcode byte of VEX must be 0x0F")); + + if (insn->opcode.opcode[1] == 0x38) + vex1 |= 0x02; /* implied 0x0F 0x38 */ + else if (insn->opcode.opcode[1] == 0x3A) + vex1 |= 0x03; /* implied 0x0F 0x3A */ + else { + /* Originally a 0F-only opcode; move opcode byte back one + * position to make room for VEX prefix. + */ + insn->opcode.opcode[2] = insn->opcode.opcode[1]; + vex1 |= 0x01; /* implied 0x0F */ + } + } + + /* Check for update of special prefix by modifiers */ + if (insn->special_prefix != 0) { + vexdata &= ~0x03; + switch (insn->special_prefix) { + case 0x66: + vexdata |= 0x01; + break; + case 0xF3: + vexdata |= 0x02; + break; + case 0xF2: + vexdata |= 0x03; + break; + default: + yasm_internal_error(N_("unrecognized special prefix")); + } + } + + /* 2nd VEX byte is WvvvvLpp. + * W, L, pp come from vexdata + * vvvv comes from 1s complement of vexreg + */ + vex2 = (((vexdata & 0x8) << 4) | /* W */ + ((15 - (vexreg & 0xF)) << 3) | /* vvvv */ + (vexdata & 0x7)); /* Lpp */ + + /* Save to special_prefix and opcode */ + insn->special_prefix = xop ? 0x8F : 0xC4; /* VEX/XOP prefix */ + insn->opcode.opcode[0] = vex1; + insn->opcode.opcode[1] = vex2; + insn->opcode.len = 3; /* two prefix bytes and 1 opcode byte */ + } + + x86_id_insn_clear_operands(id_insn); + + /* Transform the bytecode */ + yasm_x86__bc_transform_insn(bc, insn); +} + +/* Static parse data structure for instructions */ +typedef struct insnprefix_parse_data { + const char *name; + + /* instruction parse group - NULL if prefix */ + /*@null@*/ const x86_insn_info *group; + + /* For instruction, number of elements in group. + * For prefix, prefix type shifted right by 8. + */ + unsigned int num_info:8; + + /* For instruction, GAS suffix flags. + * For prefix, prefix value. + */ + unsigned int flags:8; + + /* Instruction modifier data. */ + unsigned int mod_data0:8; + unsigned int mod_data1:8; + unsigned int mod_data2:8; + + /* Tests against BITS==64 and AVX */ + unsigned int misc_flags:6; + + /* CPU flags */ + unsigned int cpu0:6; + unsigned int cpu1:6; + unsigned int cpu2:6; +} insnprefix_parse_data; + +/* Pull in all parse data */ +#include "x86insn_nasm.c" +#include "x86insn_gas.c" + +static const char * +cpu_find_reverse(unsigned int cpu0, unsigned int cpu1, unsigned int cpu2) +{ + static char cpuname[200]; + wordptr cpu = BitVector_Create(128, TRUE); + + if (cpu0 != CPU_Any) + BitVector_Bit_On(cpu, cpu0); + if (cpu1 != CPU_Any) + BitVector_Bit_On(cpu, cpu1); + if (cpu2 != CPU_Any) + BitVector_Bit_On(cpu, cpu2); + + cpuname[0] = '\0'; + + if (BitVector_bit_test(cpu, CPU_Prot)) + strcat(cpuname, " Protected"); + if (BitVector_bit_test(cpu, CPU_Undoc)) + strcat(cpuname, " Undocumented"); + if (BitVector_bit_test(cpu, CPU_Obs)) + strcat(cpuname, " Obsolete"); + if (BitVector_bit_test(cpu, CPU_Priv)) + strcat(cpuname, " Privileged"); + + if (BitVector_bit_test(cpu, CPU_FPU)) + strcat(cpuname, " FPU"); + if (BitVector_bit_test(cpu, CPU_MMX)) + strcat(cpuname, " MMX"); + if (BitVector_bit_test(cpu, CPU_SSE)) + strcat(cpuname, " SSE"); + if (BitVector_bit_test(cpu, CPU_SSE2)) + strcat(cpuname, " SSE2"); + if (BitVector_bit_test(cpu, CPU_SSE3)) + strcat(cpuname, " SSE3"); + if (BitVector_bit_test(cpu, CPU_3DNow)) + strcat(cpuname, " 3DNow"); + if (BitVector_bit_test(cpu, CPU_Cyrix)) + strcat(cpuname, " Cyrix"); + if (BitVector_bit_test(cpu, CPU_AMD)) + strcat(cpuname, " AMD"); + if (BitVector_bit_test(cpu, CPU_SMM)) + strcat(cpuname, " SMM"); + if (BitVector_bit_test(cpu, CPU_SVM)) + strcat(cpuname, " SVM"); + if (BitVector_bit_test(cpu, CPU_PadLock)) + strcat(cpuname, " PadLock"); + if (BitVector_bit_test(cpu, CPU_EM64T)) + strcat(cpuname, " EM64T"); + if (BitVector_bit_test(cpu, CPU_SSSE3)) + strcat(cpuname, " SSSE3"); + if (BitVector_bit_test(cpu, CPU_SSE41)) + strcat(cpuname, " SSE4.1"); + if (BitVector_bit_test(cpu, CPU_SSE42)) + strcat(cpuname, " SSE4.2"); + + if (BitVector_bit_test(cpu, CPU_186)) + strcat(cpuname, " 186"); + if (BitVector_bit_test(cpu, CPU_286)) + strcat(cpuname, " 286"); + if (BitVector_bit_test(cpu, CPU_386)) + strcat(cpuname, " 386"); + if (BitVector_bit_test(cpu, CPU_486)) + strcat(cpuname, " 486"); + if (BitVector_bit_test(cpu, CPU_586)) + strcat(cpuname, " 586"); + if (BitVector_bit_test(cpu, CPU_686)) + strcat(cpuname, " 686"); + if (BitVector_bit_test(cpu, CPU_P3)) + strcat(cpuname, " P3"); + if (BitVector_bit_test(cpu, CPU_P4)) + strcat(cpuname, " P4"); + if (BitVector_bit_test(cpu, CPU_IA64)) + strcat(cpuname, " IA64"); + if (BitVector_bit_test(cpu, CPU_K6)) + strcat(cpuname, " K6"); + if (BitVector_bit_test(cpu, CPU_Athlon)) + strcat(cpuname, " Athlon"); + if (BitVector_bit_test(cpu, CPU_Hammer)) + strcat(cpuname, " Hammer"); + + BitVector_Destroy(cpu); + return cpuname; +} + +yasm_arch_insnprefix +yasm_x86__parse_check_insnprefix(yasm_arch *arch, const char *id, + size_t id_len, unsigned long line, + yasm_bytecode **bc, uintptr_t *prefix) +{ + yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)arch; + /*@null@*/ const insnprefix_parse_data *pdata; + size_t i; + static char lcaseid[17]; + + *bc = (yasm_bytecode *)NULL; + *prefix = 0; + + if (id_len > 16) + return YASM_ARCH_NOTINSNPREFIX; + for (i=0; igroup) { + x86_id_insn *id_insn; + wordptr cpu_enabled = arch_x86->cpu_enables[arch_x86->active_cpu]; + unsigned int cpu0, cpu1, cpu2; + + if (arch_x86->mode_bits != 64 && (pdata->misc_flags & ONLY_64)) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("`%s' is an instruction in 64-bit mode"), id); + return YASM_ARCH_NOTINSNPREFIX; + } + if (arch_x86->mode_bits == 64 && (pdata->misc_flags & NOT_64)) { + yasm_error_set(YASM_ERROR_GENERAL, + N_("`%s' invalid in 64-bit mode"), id); + id_insn = yasm_xmalloc(sizeof(x86_id_insn)); + yasm_insn_initialize(&id_insn->insn); + id_insn->group = not64_insn; + id_insn->cpu_enabled = cpu_enabled; + id_insn->mod_data[0] = 0; + id_insn->mod_data[1] = 0; + id_insn->mod_data[2] = 0; + id_insn->num_info = NELEMS(not64_insn); + id_insn->mode_bits = arch_x86->mode_bits; + id_insn->suffix = 0; + id_insn->misc_flags = 0; + id_insn->parser = PARSER(arch_x86); + + id_insn->force_strict = arch_x86->force_strict != 0; + id_insn->default_rel = arch_x86->default_rel != 0; + *bc = yasm_bc_create_common(&x86_id_insn_callback, id_insn, line); + return YASM_ARCH_INSN; + } + + cpu0 = pdata->cpu0; + cpu1 = pdata->cpu1; + cpu2 = pdata->cpu2; + + if (!BitVector_bit_test(cpu_enabled, cpu0) || + !BitVector_bit_test(cpu_enabled, cpu1) || + !BitVector_bit_test(cpu_enabled, cpu2)) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("`%s' is an instruction in CPU%s"), id, + cpu_find_reverse(cpu0, cpu1, cpu2)); + return YASM_ARCH_NOTINSNPREFIX; + } + + id_insn = yasm_xmalloc(sizeof(x86_id_insn)); + yasm_insn_initialize(&id_insn->insn); + id_insn->group = pdata->group; + id_insn->cpu_enabled = cpu_enabled; + id_insn->mod_data[0] = pdata->mod_data0; + id_insn->mod_data[1] = pdata->mod_data1; + id_insn->mod_data[2] = pdata->mod_data2; + id_insn->num_info = pdata->num_info; + id_insn->mode_bits = arch_x86->mode_bits; + id_insn->suffix = pdata->flags; + id_insn->misc_flags = pdata->misc_flags; + id_insn->parser = PARSER(arch_x86); + id_insn->force_strict = arch_x86->force_strict != 0; + id_insn->default_rel = arch_x86->default_rel != 0; + *bc = yasm_bc_create_common(&x86_id_insn_callback, id_insn, line); + return YASM_ARCH_INSN; + } else { + unsigned long type = pdata->num_info<<8; + unsigned long value = pdata->flags; + + if (arch_x86->mode_bits == 64 && type == X86_OPERSIZE && value == 32) { + yasm_error_set(YASM_ERROR_GENERAL, + N_("Cannot override data size to 32 bits in 64-bit mode")); + return YASM_ARCH_NOTINSNPREFIX; + } + + if (arch_x86->mode_bits == 64 && type == X86_ADDRSIZE && value == 16) { + yasm_error_set(YASM_ERROR_GENERAL, + N_("Cannot override address size to 16 bits in 64-bit mode")); + return YASM_ARCH_NOTINSNPREFIX; + } + + if (arch_x86->mode_bits != 64 && (pdata->misc_flags & ONLY_64)) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("`%s' is a prefix in 64-bit mode"), id); + return YASM_ARCH_NOTINSNPREFIX; + } + *prefix = type|value; + return YASM_ARCH_PREFIX; + } +} + +static void +x86_id_insn_destroy(void *contents) +{ + x86_id_insn *id_insn = (x86_id_insn *)contents; + yasm_insn_delete(&id_insn->insn, yasm_x86__ea_destroy); + yasm_xfree(contents); +} + +static void +x86_id_insn_print(const void *contents, FILE *f, int indent_level) +{ + const x86_id_insn *id_insn = (const x86_id_insn *)contents; + yasm_insn_print(&id_insn->insn, f, indent_level); + /*TODO*/ +} + +/*@only@*/ yasm_bytecode * +yasm_x86__create_empty_insn(yasm_arch *arch, unsigned long line) +{ + yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)arch; + x86_id_insn *id_insn = yasm_xmalloc(sizeof(x86_id_insn)); + + yasm_insn_initialize(&id_insn->insn); + id_insn->group = empty_insn; + id_insn->cpu_enabled = arch_x86->cpu_enables[arch_x86->active_cpu]; + id_insn->mod_data[0] = 0; + id_insn->mod_data[1] = 0; + id_insn->mod_data[2] = 0; + id_insn->num_info = NELEMS(empty_insn); + id_insn->mode_bits = arch_x86->mode_bits; + id_insn->suffix = (PARSER(arch_x86) == X86_PARSER_GAS) ? SUF_Z : 0; + id_insn->misc_flags = 0; + id_insn->parser = PARSER(arch_x86); + id_insn->force_strict = arch_x86->force_strict != 0; + id_insn->default_rel = arch_x86->default_rel != 0; + + return yasm_bc_create_common(&x86_id_insn_callback, id_insn, line); +} + diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86regtmod.gperf b/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86regtmod.gperf new file mode 100644 index 0000000000..64ee7d9d55 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/x86/x86regtmod.gperf @@ -0,0 +1,297 @@ +# +# x86 register and target modifier recognition +# +# Copyright (C) 2002-2007 Peter Johnson +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include +#include +#include + +#include "modules/arch/x86/x86arch.h" + +enum regtmod_type { + REG = 1, + REGGROUP, + SEGREG, + TARGETMOD +}; +%} +%ignore-case +%language=ANSI-C +%compare-strncmp +%readonly-tables +%enum +%struct-type +%define hash-function-name regtmod_hash +%define lookup-function-name regtmod_find +struct regtmod_parse_data { + const char *name; + unsigned int type:8; /* regtmod_type */ + + /* REG: register size + * SEGREG: prefix encoding + * Others: 0 + */ + unsigned int size_prefix:8; + + /* REG: register index + * REGGROUP: register group type + * SEGREG: register encoding + * TARGETMOD: target modifier + */ + unsigned int data:8; + + /* REG: required bits setting + * SEGREG: BITS in which the segment is ignored + * Others: 0 + */ + unsigned int bits:8; +}; +%% +# +# control, debug, and test registers +# +cr0, REG, X86_CRREG, 0, 0 +cr2, REG, X86_CRREG, 2, 0 +cr3, REG, X86_CRREG, 3, 0 +cr4, REG, X86_CRREG, 4, 0 +cr8, REG, X86_CRREG, 8, 64 +# +dr0, REG, X86_DRREG, 0, 0 +dr1, REG, X86_DRREG, 1, 0 +dr2, REG, X86_DRREG, 2, 0 +dr3, REG, X86_DRREG, 3, 0 +dr4, REG, X86_DRREG, 4, 0 +dr5, REG, X86_DRREG, 5, 0 +dr6, REG, X86_DRREG, 6, 0 +dr7, REG, X86_DRREG, 7, 0 +# +tr0, REG, X86_TRREG, 0, 0 +tr1, REG, X86_TRREG, 1, 0 +tr2, REG, X86_TRREG, 2, 0 +tr3, REG, X86_TRREG, 3, 0 +tr4, REG, X86_TRREG, 4, 0 +tr5, REG, X86_TRREG, 5, 0 +tr6, REG, X86_TRREG, 6, 0 +tr7, REG, X86_TRREG, 7, 0 +# +# floating point, MMX, and SSE/SSE2 registers +# +st0, REG, X86_FPUREG, 0, 0 +st1, REG, X86_FPUREG, 1, 0 +st2, REG, X86_FPUREG, 2, 0 +st3, REG, X86_FPUREG, 3, 0 +st4, REG, X86_FPUREG, 4, 0 +st5, REG, X86_FPUREG, 5, 0 +st6, REG, X86_FPUREG, 6, 0 +st7, REG, X86_FPUREG, 7, 0 +# +mm0, REG, X86_MMXREG, 0, 0 +mm1, REG, X86_MMXREG, 1, 0 +mm2, REG, X86_MMXREG, 2, 0 +mm3, REG, X86_MMXREG, 3, 0 +mm4, REG, X86_MMXREG, 4, 0 +mm5, REG, X86_MMXREG, 5, 0 +mm6, REG, X86_MMXREG, 6, 0 +mm7, REG, X86_MMXREG, 7, 0 +# +xmm0, REG, X86_XMMREG, 0, 0 +xmm1, REG, X86_XMMREG, 1, 0 +xmm2, REG, X86_XMMREG, 2, 0 +xmm3, REG, X86_XMMREG, 3, 0 +xmm4, REG, X86_XMMREG, 4, 0 +xmm5, REG, X86_XMMREG, 5, 0 +xmm6, REG, X86_XMMREG, 6, 0 +xmm7, REG, X86_XMMREG, 7, 0 +xmm8, REG, X86_XMMREG, 8, 64 +xmm9, REG, X86_XMMREG, 9, 64 +xmm10, REG, X86_XMMREG, 10, 64 +xmm11, REG, X86_XMMREG, 11, 64 +xmm12, REG, X86_XMMREG, 12, 64 +xmm13, REG, X86_XMMREG, 13, 64 +xmm14, REG, X86_XMMREG, 14, 64 +xmm15, REG, X86_XMMREG, 15, 64 +# AVX registers +ymm0, REG, X86_YMMREG, 0, 0 +ymm1, REG, X86_YMMREG, 1, 0 +ymm2, REG, X86_YMMREG, 2, 0 +ymm3, REG, X86_YMMREG, 3, 0 +ymm4, REG, X86_YMMREG, 4, 0 +ymm5, REG, X86_YMMREG, 5, 0 +ymm6, REG, X86_YMMREG, 6, 0 +ymm7, REG, X86_YMMREG, 7, 0 +ymm8, REG, X86_YMMREG, 8, 64 +ymm9, REG, X86_YMMREG, 9, 64 +ymm10, REG, X86_YMMREG, 10, 64 +ymm11, REG, X86_YMMREG, 11, 64 +ymm12, REG, X86_YMMREG, 12, 64 +ymm13, REG, X86_YMMREG, 13, 64 +ymm14, REG, X86_YMMREG, 14, 64 +ymm15, REG, X86_YMMREG, 15, 64 +# +# integer registers +# +rax, REG, X86_REG64, 0, 64 +rcx, REG, X86_REG64, 1, 64 +rdx, REG, X86_REG64, 2, 64 +rbx, REG, X86_REG64, 3, 64 +rsp, REG, X86_REG64, 4, 64 +rbp, REG, X86_REG64, 5, 64 +rsi, REG, X86_REG64, 6, 64 +rdi, REG, X86_REG64, 7, 64 +r8, REG, X86_REG64, 8, 64 +r9, REG, X86_REG64, 9, 64 +r10, REG, X86_REG64, 10, 64 +r11, REG, X86_REG64, 11, 64 +r12, REG, X86_REG64, 12, 64 +r13, REG, X86_REG64, 13, 64 +r14, REG, X86_REG64, 14, 64 +r15, REG, X86_REG64, 15, 64 +# +eax, REG, X86_REG32, 0, 0 +ecx, REG, X86_REG32, 1, 0 +edx, REG, X86_REG32, 2, 0 +ebx, REG, X86_REG32, 3, 0 +esp, REG, X86_REG32, 4, 0 +ebp, REG, X86_REG32, 5, 0 +esi, REG, X86_REG32, 6, 0 +edi, REG, X86_REG32, 7, 0 +r8d, REG, X86_REG32, 8, 64 +r9d, REG, X86_REG32, 9, 64 +r10d, REG, X86_REG32, 10, 64 +r11d, REG, X86_REG32, 11, 64 +r12d, REG, X86_REG32, 12, 64 +r13d, REG, X86_REG32, 13, 64 +r14d, REG, X86_REG32, 14, 64 +r15d, REG, X86_REG32, 15, 64 +# +ax, REG, X86_REG16, 0, 0 +cx, REG, X86_REG16, 1, 0 +dx, REG, X86_REG16, 2, 0 +bx, REG, X86_REG16, 3, 0 +sp, REG, X86_REG16, 4, 0 +bp, REG, X86_REG16, 5, 0 +si, REG, X86_REG16, 6, 0 +di, REG, X86_REG16, 7, 0 +r8w, REG, X86_REG16, 8, 64 +r9w, REG, X86_REG16, 9, 64 +r10w, REG, X86_REG16, 10, 64 +r11w, REG, X86_REG16, 11, 64 +r12w, REG, X86_REG16, 12, 64 +r13w, REG, X86_REG16, 13, 64 +r14w, REG, X86_REG16, 14, 64 +r15w, REG, X86_REG16, 15, 64 +# +al, REG, X86_REG8, 0, 0 +cl, REG, X86_REG8, 1, 0 +dl, REG, X86_REG8, 2, 0 +bl, REG, X86_REG8, 3, 0 +ah, REG, X86_REG8, 4, 0 +ch, REG, X86_REG8, 5, 0 +dh, REG, X86_REG8, 6, 0 +bh, REG, X86_REG8, 7, 0 +r8b, REG, X86_REG8, 8, 64 +r9b, REG, X86_REG8, 9, 64 +r10b, REG, X86_REG8, 10, 64 +r11b, REG, X86_REG8, 11, 64 +r12b, REG, X86_REG8, 12, 64 +r13b, REG, X86_REG8, 13, 64 +r14b, REG, X86_REG8, 14, 64 +r15b, REG, X86_REG8, 15, 64 +# +spl, REG, X86_REG8X, 4, 64 +bpl, REG, X86_REG8X, 5, 64 +sil, REG, X86_REG8X, 6, 64 +dil, REG, X86_REG8X, 7, 64 +# +rip, REG, X86_RIP, 0, 64 +# +# floating point, MMX, and SSE/SSE2 registers +# +st, REGGROUP, 0, X86_FPUREG, 0 +mm, REGGROUP, 0, X86_MMXREG, 0 +xmm, REGGROUP, 0, X86_XMMREG, 0 +ymm, REGGROUP, 0, X86_YMMREG, 0 +# +# segment registers +# +es, SEGREG, 0x26, 0x00, 64 +cs, SEGREG, 0x2e, 0x01, 0 +ss, SEGREG, 0x36, 0x02, 64 +ds, SEGREG, 0x3e, 0x03, 64 +fs, SEGREG, 0x64, 0x04, 0 +gs, SEGREG, 0x65, 0x05, 0 +# +# target modifiers +# +near, TARGETMOD, 0, X86_NEAR, 0 +short, TARGETMOD, 0, X86_SHORT, 0 +far, TARGETMOD, 0, X86_FAR, 0 +to, TARGETMOD, 0, X86_TO, 0 +%% + +yasm_arch_regtmod +yasm_x86__parse_check_regtmod(yasm_arch *arch, const char *id, size_t id_len, + uintptr_t *data) +{ + yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)arch; + /*@null@*/ const struct regtmod_parse_data *pdata; + size_t i; + static char lcaseid[8]; + unsigned int bits; + yasm_arch_regtmod type; + + if (id_len > 7) + return YASM_ARCH_NOTREGTMOD; + for (i=0; itype; + bits = pdata->bits; + + if (type == YASM_ARCH_REG && bits != 0 && arch_x86->mode_bits != bits) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("`%s' is a register in %u-bit mode"), id, bits); + return YASM_ARCH_NOTREGTMOD; + } + + if (type == YASM_ARCH_SEGREG && bits != 0 && arch_x86->mode_bits == bits) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("`%s' segment register ignored in %u-bit mode"), id, + bits); + } + + if (type == YASM_ARCH_SEGREG) + *data = (pdata->size_prefix<<8) | pdata->data; + else + *data = pdata->size_prefix | pdata->data; + return type; +} diff --git a/third-party/yasm/yasm-1.3.0/modules/arch/yasm_arch.xml b/third-party/yasm/yasm-1.3.0/modules/arch/yasm_arch.xml new file mode 100644 index 0000000000..a35510c096 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/arch/yasm_arch.xml @@ -0,0 +1,398 @@ + + + + + + + Yasm Supported Architectures + October 2006 + Yasm + + Peter + Johnson + +
peter@tortall.net
+
+
+ + + 2004 + 2005 + 2006 + 2007 + Peter Johnson + +
+ + + yasm_arch + 7 + + + + yasm_arch + Yasm Supported Target Architectures + + + + + yasm + + + + + + + + + + + + + + Description + + The standard Yasm distribution includes a number of modules + for different target architectures. Each target architecture can + support one or more machine architectures. + + The architecture and machine are selected on the + + + yasm + 1 + + + command line by use of the and command line options, + respectively. + + The machine architecture may also automatically be selected by + certain object formats. For example, the elf32 + object format selects the x86 machine architecture + by default, while the elf64 object format selects + the amd64 machine architecture by default. + + + + x86 Architecture + + The x86 architecture supports the IA-32 + instruction set and derivatives and the AMD64 instruction set. It + consists of two machines: x86 (for the IA-32 and + derivatives) and amd64 (for the AMD64 and + derivatives). The default machine for the x86 + architecture is the x86 machine. + + + BITS Setting + + The x86 architecture BITS setting specifies to Yasm the + processor mode in which the generated code is intended to execute. + x86 processors can run in three different major execution modes: + 16-bit, 32-bit, and on AMD64-supporting processors, 64-bit. As + the x86 instruction set contains portions whose function is + execution-mode dependent (such as operand-size and address-size + override prefixes), Yasm cannot assemble x86 instructions + correctly unless it is told by the user in what processor mode the + code will execute. + + The BITS setting can be changed in a variety of ways. When + using the NASM-compatible parser, the BITS setting can be changed + directly via the use of the BITS xx + assembler directive. The default BITS setting is determined by + the object format in use. + + + + BITS 64 Extensions + + The AMD64 architecture is a new 64-bit architecture developed + by AMD, based on the 32-bit x86 architecture. It extends the + original x86 architecture by doubling the number of general + purpose and SIMD registers, extending the arithmetic operations + and address space to 64 bits, as well as other features. + + Recently, Intel has introduced an essentially identical + version of AMD64 called EM64T. + + When an AMD64-supporting processor is executing in 64-bit + mode, a number of additional extensions are available, including + extra general purpose registers, extra SSE2 registers, and + RIP-relative addressing. + + Yasm extends the base NASM syntax to support AMD64 as + follows. To enable assembly of instructions for the 64-bit mode + of AMD64 processors, use the directive BITS + 64. As with NASM's BITS directive, this does not + change the format of the output object file to 64 bits; it only + changes the assembler mode to assume that the instructions being + assembled will be run in 64-bit mode. To specify an AMD64 object + file, use on the Yasm command line, or + explicitly target a 64-bit object format such as or . can be used to select 32-bit ELF object format + for AMD64 processors. + + + Register Changes + + The additional 64-bit general purpose registers are named + r8-r15. There are also 8-bit (rXb), 16-bit (rXw), and 32-bit + (rXd) subregisters that map to the least significant 8, 16, or 32 + bits of the 64-bit register. The original 8 general purpose + registers have also been extended to 64-bits: eax, edx, ecx, ebx, + esi, edi, esp, and ebp have new 64-bit versions called rax, rdx, + rcx, rbx, rsi, rdi, rsp, and rbp respectively. The old 32-bit + registers map to the least significant bits of the new 64-bit + registers. + + New 8-bit registers are also available that map to the 8 + least significant bits of rsi, rdi, rsp, and rbp. These are + called sil, dil, spl, and bpl respectively. Unfortunately, due + to the way instructions are encoded, these new 8-bit registers + are encoded the same as the old 8-bit registers ah, dh, ch, and + bh. The processor tells which is being used by the presence of + the new REX prefix that is used to specify the other extended + registers. This means it is illegal to mix the use of ah, dh, + ch, and bh with an instruction that requires the REX prefix for + other reasons. For instance: + + add ah, [r10] + + (NASM syntax) is not a legal instruction because the use of + r10 requires a REX prefix, making it impossible to use ah. + + In 64-bit mode, an additional 8 SSE2 registers are also + available. These are named xmm8-xmm15. + + + + 64 Bit Instructions + + By default, most operations in 64-bit mode remain 32-bit; + operations that are 64-bit usually require a REX prefix (one bit + in the REX prefix determines whether an operation is 64-bit or + 32-bit). Thus, essentially all 32-bit instructions have a 64-bit + version, and the 64-bit versions of instructions can use extended + registers for free (as the REX prefix is already + present). Examples in NASM syntax: + + mov eax, 1 ; 32-bit instruction + mov rcx, 1 ; 64-bit instruction + + Instructions that modify the stack (push, pop, call, ret, + enter, and leave) are implicitly 64-bit. Their 32-bit + counterparts are not available, but their 16-bit counterparts + are. Examples in NASM syntax: + + push eax ; illegal instruction + push rbx ; 1-byte instruction + push r11 ; 2-byte instruction with REX prefix + + + + Implicit Zero Extension + + Results of 32-bit operations are implicitly zero-extended to + the upper 32 bits of the corresponding 64-bit register. 16 and 8 + bit operations, on the other hand, do not affect upper bits of + the register (just as in 32-bit and 16-bit modes). This can be + used to generate smaller code in some instances. Examples in + NASM syntax: + + mov ecx, 1 ; 1 byte shorter than mov rcx, 1 + and edx, 3 ; equivalent to and rdx, 3 + + + + Immediates + + For most instructions in 64-bit mode, immediate values + remain 32 bits; their value is sign-extended into the upper 32 + bits of the target register prior to being used. The exception + is the mov instruction, which can take a 64-bit immediate when + the destination is a 64-bit register. Examples in NASM + syntax: + + add rax, 1 ; optimized down to signed 8-bit + add rax, dword 1 ; force size to 32-bit + add rax, 0xffffffff ; sign-extended 32-bit + add rax, -1 ; same as above + add rax, 0xffffffffffffffff ; truncated to 32-bit (warning) + mov eax, 1 ; 5 byte + mov rax, 1 ; 5 byte (optimized to signed 32-bit) + mov rax, qword 1 ; 10 byte (forced 64-bit) + mov rbx, 0x1234567890abcdef ; 10 byte + mov rcx, 0xffffffff ; 10 byte (does not fit in signed 32-bit) + mov ecx, -1 ; 5 byte, equivalent to above + mov rcx, sym ; 5 byte, 32-bit size default for symbols + mov rcx, qword sym ; 10 byte, override default size + + The handling of mov reg64, unsized immediate is different + between YASM and NASM 2.x; YASM follows the above behavior, while + NASM 2.x does the following: + + add rax, 0xffffffff ; sign-extended 32-bit immediate + add rax, -1 ; same as above + add rax, 0xffffffffffffffff ; truncated 32-bit (warning) + add rax, sym ; sign-extended 32-bit immediate + mov eax, 1 ; 5 byte (32-bit immediate) + mov rax, 1 ; 10 byte (64-bit immediate) + mov rbx, 0x1234567890abcdef ; 10 byte instruction + mov rcx, 0xffffffff ; 10 byte instruction + mov ecx, -1 ; 5 byte, equivalent to above + mov ecx, sym ; 5 byte (32-bit immediate) + mov rcx, sym ; 10 byte instruction + mov rcx, qword sym ; 10 byte (64-bit immediate) + + + + Displacements + + Just like immediates, displacements, for the most part, + remain 32 bits and are sign extended prior to use. Again, the + exception is one restricted form of the mov instruction: between + the al/ax/eax/rax register and a 64-bit absolute address (no + registers allowed in the effective address). In NASM syntax, use + of the 64-bit absolute form requires + [qword]. Examples in NASM syntax: + + mov eax, [1] ; 32 bit, with sign extension + mov al, [rax-1] ; 32 bit, with sign extension + mov al, [qword 0x1122334455667788] ; 64-bit absolute + mov al, [0x1122334455667788] ; truncated to 32-bit (warning) + + + + RIP Relative Addressing + + In 64-bit mode, a new form of effective addressing is + available to make it easier to write position-independent code. + Any memory reference may be made RIP relative (RIP is the + instruction pointer register, which contains the address of the + location immediately following the current instruction). + + In NASM syntax, there are two ways to specify RIP-relative + addressing: + + mov dword [rip+10], 1 + + stores the value 1 ten bytes after the end of the + instruction. 10 can also be a symbolic + constant, and will be treated the same way. On the other + hand, + + mov dword [symb wrt rip], 1 + + stores the value 1 into the address of symbol + symb. This is distinctly different than + the behavior of: + + mov dword [symb+rip], 1 + + which takes the address of the end of the instruction, adds + the address of symb to it, then stores the + value 1 there. If symb is a variable, + this will not store the value 1 into the + symb variable! + + Yasm also supports the following syntax for RIP-relative + addressing: + + mov [rel sym], rax ; RIP-relative + mov [abs sym], rax ; not RIP-relative + + The behavior of: + + mov [sym], rax + + Depends on a mode set by the DEFAULT directive, as follows. + The default mode is always "abs", and in "rel" mode, use of + registers, an fs or gs segment override, or an explicit "abs" + override will result in a non-RIP-relative effective + address. + + default rel + mov [sym], rbx ; RIP-relative + mov [abs sym], rbx ; not RIP-relative (explicit override) + mov [rbx+1], rbx ; not RIP-relative (register use) + mov [fs:sym], rbx ; not RIP-relative (fs or gs use) + mov [ds:sym], rbx ; RIP-relative (segment, but not fs or gs) + mov [rel sym], rbx ; RIP-relative (redundant override) + + default abs + mov [sym], rbx ; not RIP-relative + mov [abs sym], rbx ; not RIP-relative + mov [rbx+1], rbx ; not RIP-relative + mov [fs:sym], rbx ; not RIP-relative + mov [ds:sym], rbx ; not RIP-relative + mov [rel sym], rbx ; RIP-relative (explicit override) + + + + Memory references + + Usually the size of a memory reference can be deduced by + which registers you're moving--for example, "mov [rax],ecx" is a + 32-bit move, because ecx is 32 bits. YASM currently gives the + non-obvious "invalid combination of opcode and operands" error if + it can't figure out how much memory you're moving. The fix in + this case is to add a memory size specifier: qword, dword, word, + or byte. + + Here's a 64-bit memory move, which sets 8 bytes starting at + rax: + + mov qword [rax], 1 + + Here's a 32-bit memory move, which sets 4 bytes: + + mov dword [rax], 1 + + Here's a 16-bit memory move, which sets 2 bytes: + + mov word [rax], 1 + + Here's an 8-bit memory move, which sets 1 byte: + + mov byte [rax], 1 + + + + + + lc3b Architecture + + The lc3b architecture supports the LC-3b ISA as + used in the ECE 312 (now ECE 411) course at the University of + Illinois, Urbana-Champaign, as well as other university courses. + See for more + details and example code. The lc3b architecture + consists of only one machine: lc3b. + + + + See Also + + + yasm + 1 + + + + + Bugs + + When using the x86 architecture, it is overly + easy to generate AMD64 code (using the BITS + 64 directive) and generate a 32-bit object file (by + failing to specify on the command line or + selecting a 64-bit object format). Similarly, specifying + does not default the BITS setting to + 64. An easy way to avoid this is by directly specifying + a 64-bit object format such as . + +
diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/CMakeLists.txt new file mode 100644 index 0000000000..93c29fe86c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/CMakeLists.txt @@ -0,0 +1,4 @@ +INCLUDE(dbgfmts/codeview/CMakeLists.txt) +INCLUDE(dbgfmts/dwarf2/CMakeLists.txt) +INCLUDE(dbgfmts/null/CMakeLists.txt) +INCLUDE(dbgfmts/stabs/CMakeLists.txt) diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/Makefile.inc new file mode 100644 index 0000000000..8da62104ac --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/Makefile.inc @@ -0,0 +1,18 @@ +EXTRA_DIST += modules/dbgfmts/codeview/Makefile.inc +EXTRA_DIST += modules/dbgfmts/dwarf2/Makefile.inc +EXTRA_DIST += modules/dbgfmts/null/Makefile.inc +EXTRA_DIST += modules/dbgfmts/stabs/Makefile.inc + +include modules/dbgfmts/codeview/Makefile.inc +include modules/dbgfmts/dwarf2/Makefile.inc +include modules/dbgfmts/null/Makefile.inc +include modules/dbgfmts/stabs/Makefile.inc + +notrans_dist_man_MANS += yasm_dbgfmts.7 + +if BUILD_MAN +yasm_dbgfmts.7: modules/dbgfmts/yasm_dbgfmts.xml + $(XMLTO) -o $(top_builddir) man $(srcdir)/modules/dbgfmts/yasm_dbgfmts.xml +endif + +EXTRA_DIST += modules/dbgfmts/yasm_dbgfmts.xml diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/CMakeLists.txt new file mode 100644 index 0000000000..3ecd9fa5af --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/CMakeLists.txt @@ -0,0 +1,5 @@ +YASM_ADD_MODULE(dbgfmt_cv8 + dbgfmts/codeview/cv-dbgfmt.c + dbgfmts/codeview/cv-symline.c + dbgfmts/codeview/cv-type.c + ) diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/Makefile.inc new file mode 100644 index 0000000000..19f2db65bb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/Makefile.inc @@ -0,0 +1,11 @@ +libyasm_a_SOURCES += modules/dbgfmts/codeview/cv-dbgfmt.h +libyasm_a_SOURCES += modules/dbgfmts/codeview/cv-dbgfmt.c +libyasm_a_SOURCES += modules/dbgfmts/codeview/cv-symline.c +libyasm_a_SOURCES += modules/dbgfmts/codeview/cv-type.c + +YASM_MODULES += dbgfmt_cv8 + +EXTRA_DIST += modules/dbgfmts/codeview/cv8.txt + +#EXTRA_DIST += modules/dbgfmts/codeview/tests/Makefile.inc +#include modules/dbgfmts/codeview/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv-dbgfmt.c b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv-dbgfmt.c new file mode 100644 index 0000000000..9b06fe3495 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv-dbgfmt.c @@ -0,0 +1,107 @@ +/* + * CodeView debugging formats implementation for Yasm + * + * Copyright (C) 2006-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "cv-dbgfmt.h" + +yasm_dbgfmt_module yasm_cv8_LTX_dbgfmt; + + +static /*@null@*/ /*@only@*/ yasm_dbgfmt * +cv_dbgfmt_create(yasm_object *object, yasm_dbgfmt_module *module, int version) +{ + yasm_dbgfmt_cv *dbgfmt_cv = yasm_xmalloc(sizeof(yasm_dbgfmt_cv)); + size_t i; + + dbgfmt_cv->dbgfmt.module = module; + + dbgfmt_cv->filenames_allocated = 32; + dbgfmt_cv->filenames_size = 0; + dbgfmt_cv->filenames = + yasm_xmalloc(sizeof(cv_filename)*dbgfmt_cv->filenames_allocated); + for (i=0; ifilenames_allocated; i++) { + dbgfmt_cv->filenames[i].pathname = NULL; + dbgfmt_cv->filenames[i].filename = NULL; + dbgfmt_cv->filenames[i].str_off = 0; + dbgfmt_cv->filenames[i].info_off = 0; + } + + dbgfmt_cv->version = version; + + return (yasm_dbgfmt *)dbgfmt_cv; +} + +static /*@null@*/ /*@only@*/ yasm_dbgfmt * +cv8_dbgfmt_create(yasm_object *object) +{ + return cv_dbgfmt_create(object, &yasm_cv8_LTX_dbgfmt, 8); +} + +static void +cv_dbgfmt_destroy(/*@only@*/ yasm_dbgfmt *dbgfmt) +{ + yasm_dbgfmt_cv *dbgfmt_cv = (yasm_dbgfmt_cv *)dbgfmt; + size_t i; + for (i=0; ifilenames_size; i++) { + if (dbgfmt_cv->filenames[i].pathname) + yasm_xfree(dbgfmt_cv->filenames[i].pathname); + } + yasm_xfree(dbgfmt_cv->filenames); + yasm_xfree(dbgfmt); +} + +/* Add a bytecode to a section, updating offset on insertion; + * no optimization necessary. + */ +yasm_bytecode * +yasm_cv__append_bc(yasm_section *sect, yasm_bytecode *bc) +{ + yasm_bytecode *precbc = yasm_section_bcs_last(sect); + bc->offset = yasm_bc_next_offset(precbc); + yasm_section_bcs_append(sect, bc); + return precbc; +} + +static void +cv_dbgfmt_generate(yasm_object *object, yasm_linemap *linemap, + yasm_errwarns *errwarns) +{ + yasm_cv__generate_symline(object, linemap, errwarns); + yasm_cv__generate_type(object); +} + +/* Define dbgfmt structure -- see dbgfmt.h for details */ +yasm_dbgfmt_module yasm_cv8_LTX_dbgfmt = { + "CodeView debugging format for VC8", + "cv8", + NULL, /* no directives */ + cv8_dbgfmt_create, + cv_dbgfmt_destroy, + cv_dbgfmt_generate +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv-dbgfmt.h b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv-dbgfmt.h new file mode 100644 index 0000000000..134b0b885b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv-dbgfmt.h @@ -0,0 +1,58 @@ +/* + * CodeView debugging formats implementation for Yasm + * + * Copyright (C) 2006-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + */ +#ifndef YASM_CV_DBGFMT_H +#define YASM_CV_DBGFMT_H + +typedef struct { + char *pathname; /* full pathname (drive+basepath+filename) */ + char *filename; /* filename as yasm knows it internally */ + unsigned long str_off; /* offset into pathname string table */ + unsigned long info_off; /* offset into source info table */ + unsigned char digest[16]; /* MD5 digest of source file */ +} cv_filename; + +/* Global data */ +typedef struct yasm_dbgfmt_cv { + yasm_dbgfmt_base dbgfmt; /* base structure */ + + cv_filename *filenames; + size_t filenames_size; + size_t filenames_allocated; + + int version; +} yasm_dbgfmt_cv; + +yasm_bytecode *yasm_cv__append_bc(yasm_section *sect, yasm_bytecode *bc); + +/* Symbol/Line number functions */ +yasm_section *yasm_cv__generate_symline + (yasm_object *object, yasm_linemap *linemap, yasm_errwarns *errwarns); + +/* Type functions */ +yasm_section *yasm_cv__generate_type(yasm_object *object); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv-symline.c b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv-symline.c new file mode 100644 index 0000000000..8d7030221f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv-symline.c @@ -0,0 +1,1102 @@ +/* + * CodeView debugging format - symbol and line information + * + * Copyright (C) 2006-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of other contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "cv-dbgfmt.h" + +enum cv8_symheadtype { + CV8_DEBUG_SYMS = 0xF1, /* CV5 symbol information */ + CV8_LINE_NUMS = 0xF2, /* line numbers for a section */ + CV8_FILE_STRTAB = 0xF3, /* filename string table */ + CV8_FILE_INFO = 0xF4 /* source file info */ +}; + +enum cv_symtype { + /* Non-modal Symbols */ + CV_S_COMPILE = 0x0001, /* Compile Flag */ + CV_S_REGISTER = 0x0002, /* Register */ + CV_S_CONSTANT = 0x0003, /* Constant */ + CV_S_UDT = 0x0004, /* User-defined Type */ + CV_S_SSEARCH = 0x0005, /* Start Search */ + CV_S_END = 0x0006, /* End of Block */ + CV_S_SKIP = 0x0007, /* Skip Record */ + CV_S_OBJNAME = 0x0009, /* Object File Name */ + CV_S_ENDARG = 0x000a, /* End of Arguments */ + CV_S_COBOLUDT = 0x000b, /* COBOL User-defined Type */ + CV_S_MANYREG = 0x000c, /* Many Registers */ + CV_S_RETURN = 0x000d, /* Function Return */ + CV_S_ENTRYTHIS = 0x000e, /* "this" at Method Entry */ + + /* Symbols for 16:16 Segmented Architectures */ + CV_S_BPREL16 = 0x0100, /* BP Relative 16:16 */ + CV_S_LDATA16 = 0x0101, /* Local Data 16:16 */ + CV_S_GDATA16 = 0x0102, /* Global Data Symbol 16:16 */ + CV_S_PUB16 = 0x0103, /* Public Symbol 16:16 */ + CV_S_LPROC16 = 0x0104, /* Local Start 16:16 */ + CV_S_GPROC16 = 0x0105, /* Global Start 16:16 */ + CV_S_THUNK16 = 0x0106, /* Thunk Start 16:16 */ + CV_S_BLOCK16 = 0x0107, /* Block Start 16:16 */ + CV_S_WITH16 = 0x0108, /* With Start 16:16 */ + CV_S_LABEL16 = 0x0109, /* Code Label 16:16 */ + CV_S_CEXMODEL16 = 0x0110, /* Change Execution Model 16:16 */ + CV_S_VFTPATH16 = 0x010b, /* Virtual Function Table Path 16:16 */ + CV_S_REGREL16 = 0x010c, /* Register Relative 16:16 */ + + /* Symbols for 16:32 Segmented Architectures */ + CV_S_BPREL32 = 0x0200, /* BP Relative 16:32 */ + CV_S_LDATA32 = 0x0201, /* Local Data 16:32 */ + CV_S_GDATA32 = 0x0202, /* Global Data Symbol 16:32 */ + CV_S_PUB32 = 0x0203, /* Public Symbol 16:32 */ + CV_S_LPROC32 = 0x0204, /* Local Start 16:32 */ + CV_S_GPROC32 = 0x0205, /* Global Start 16:32 */ + CV_S_THUNK32 = 0x0206, /* Thunk Start 16:32 */ + CV_S_BLOCK32 = 0x0207, /* Block Start 16:32 */ + CV_S_WITH32 = 0x0208, /* With Start 16:32 */ + CV_S_LABEL32 = 0x0209, /* Code Label 16:32 */ + CV_S_CEXMODEL32 = 0x0210, /* Change Execution Model 16:32 */ + CV_S_VFTPATH32 = 0x020b, /* Virtual Function Table Path 16:32 */ + CV_S_REGREL32 = 0x020c, /* Register Relative 16:32 */ + CV_S_LTHREAD32 = 0x020d, /* Local Thread Storage 16:32 */ + CV_S_GTHREAD32 = 0x020e, /* Global Thread Storage 16:32 */ + + /* Symbols for MIPS */ + CV_S_LPROCMIPS = 0x0300, /* Local procedure start MIPS */ + CV_S_GPROCMIPS = 0x0301, /* Global procedure start MIPS */ + + /* Symbols for CV8 - strings are 0 terminated rather than length-prefix. + * Incomplete and unofficial. + */ + CV8_S_OBJNAME = 0x1101, /* Object File Name */ + CV8_S_LABEL32 = 0x1105, /* Code Label 16:32 */ + CV8_S_LDATA32 = 0x110c, /* Local Data 16:32 */ + CV8_S_GDATA32 = 0x110d, /* Global Data 16:32 */ + CV8_S_LPROC32 = 0x1110, /* Local Start 16:32 */ + CV8_S_COMPILE = 0x1116 /* Compile Flag */ +}; + +typedef struct cv8_symhead { + enum cv8_symheadtype type; + yasm_bytecode *start_prevbc; + yasm_bytecode *end_prevbc; + int first; /* nonzero if first symhead in section */ +} cv8_symhead; + +typedef struct cv8_fileinfo { + const cv_filename *fn; +} cv8_fileinfo; + +/* Note: each line number group is associated with a file AND a section */ +typedef struct cv8_linepair { + unsigned long offset; + unsigned long line; +} cv8_linepair; + +/* Decrease linked list overhead a bit doing it this way */ +typedef struct cv8_lineset { + STAILQ_ENTRY(cv8_lineset) link; + cv8_linepair pairs[126]; + size_t num_pairs; +} cv8_lineset; + +/* Note: Due to line number sorting requirements (by section offset it seems) + * one file may need more than one record per section. */ +typedef struct cv8_lineinfo { + STAILQ_ENTRY(cv8_lineinfo) link; + const cv_filename *fn; /* filename associated with line numbers */ + yasm_section *sect; /* section line numbers are for */ + yasm_symrec *sectsym; /* symbol for beginning of sect */ + unsigned long num_linenums; + int first_in_sect; /* First lineinfo for this section. */ + STAILQ_HEAD(cv8_lineset_head, cv8_lineset) linesets; +} cv8_lineinfo; + +/* Symbols use a bit of meta-programming to encode formats: each character + * of format represents the output generated, as follows: + * 'b' : 1 byte value (integer) + * 'h' : 2 byte value (integer) + * 'w' : 4 byte value (integer) + * 'Y' : symrec SECREL+SECTION (pointer) + * 'T' : type index (integer) + * 'S' : length-prefixed string (pointer) + * 'Z' : 0-terminated string (pointer) + */ +typedef struct cv_sym { + enum cv_symtype type; + const char *format; + union { + unsigned long i; + void *p; + } args[10]; +} cv_sym; + +/* Bytecode callback function prototypes */ +static void cv8_symhead_bc_destroy(void *contents); +static void cv8_symhead_bc_print(const void *contents, FILE *f, + int indent_level); +static int cv8_symhead_bc_calc_len + (yasm_bytecode *bc, yasm_bc_add_span_func add_span, void *add_span_data); +static int cv8_symhead_bc_tobytes + (yasm_bytecode *bc, unsigned char **bufp, unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +static void cv8_fileinfo_bc_destroy(void *contents); +static void cv8_fileinfo_bc_print(const void *contents, FILE *f, + int indent_level); +static int cv8_fileinfo_bc_calc_len + (yasm_bytecode *bc, yasm_bc_add_span_func add_span, void *add_span_data); +static int cv8_fileinfo_bc_tobytes + (yasm_bytecode *bc, unsigned char **bufp, unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +static void cv8_lineinfo_bc_destroy(void *contents); +static void cv8_lineinfo_bc_print(const void *contents, FILE *f, + int indent_level); +static int cv8_lineinfo_bc_calc_len + (yasm_bytecode *bc, yasm_bc_add_span_func add_span, void *add_span_data); +static int cv8_lineinfo_bc_tobytes + (yasm_bytecode *bc, unsigned char **bufp, unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +static void cv_sym_bc_destroy(void *contents); +static void cv_sym_bc_print(const void *contents, FILE *f, int indent_level); +static int cv_sym_bc_calc_len + (yasm_bytecode *bc, yasm_bc_add_span_func add_span, void *add_span_data); +static int cv_sym_bc_tobytes + (yasm_bytecode *bc, unsigned char **bufp, unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +/* Bytecode callback structures */ +static const yasm_bytecode_callback cv8_symhead_bc_callback = { + cv8_symhead_bc_destroy, + cv8_symhead_bc_print, + yasm_bc_finalize_common, + NULL, + cv8_symhead_bc_calc_len, + yasm_bc_expand_common, + cv8_symhead_bc_tobytes, + 0 +}; + +static const yasm_bytecode_callback cv8_fileinfo_bc_callback = { + cv8_fileinfo_bc_destroy, + cv8_fileinfo_bc_print, + yasm_bc_finalize_common, + NULL, + cv8_fileinfo_bc_calc_len, + yasm_bc_expand_common, + cv8_fileinfo_bc_tobytes, + 0 +}; + +static const yasm_bytecode_callback cv8_lineinfo_bc_callback = { + cv8_lineinfo_bc_destroy, + cv8_lineinfo_bc_print, + yasm_bc_finalize_common, + NULL, + cv8_lineinfo_bc_calc_len, + yasm_bc_expand_common, + cv8_lineinfo_bc_tobytes, + 0 +}; + +static const yasm_bytecode_callback cv_sym_bc_callback = { + cv_sym_bc_destroy, + cv_sym_bc_print, + yasm_bc_finalize_common, + NULL, + cv_sym_bc_calc_len, + yasm_bc_expand_common, + cv_sym_bc_tobytes, + 0 +}; + +static cv8_symhead *cv8_add_symhead(yasm_section *sect, unsigned long type, + int first); +static void cv8_set_symhead_end(cv8_symhead *head, yasm_bytecode *end_prevbc); + +static yasm_bytecode *cv8_add_fileinfo + (yasm_section *sect, const cv_filename *fn); + +static unsigned long cv_sym_size(const cv_sym *cvs); + + +static cv_sym * +cv8_add_sym_objname(yasm_section *sect, /*@keep@*/ char *objname) +{ + yasm_bytecode *bc; + cv_sym *cvs = yasm_xmalloc(sizeof(cv_sym)); + cvs->type = CV8_S_OBJNAME; + cvs->format = "wZ"; + cvs->args[0].i = 0; /* signature (0=asm) */ + cvs->args[1].p = objname; /* object filename */ + + bc = yasm_bc_create_common(&cv_sym_bc_callback, cvs, 0); + bc->len = cv_sym_size(cvs); + yasm_cv__append_bc(sect, bc); + return cvs; +} + +static cv_sym * +cv8_add_sym_compile(yasm_object *object, yasm_section *sect, + /*@keep@*/ char *creator) +{ + yasm_bytecode *bc; + cv_sym *cvs = yasm_xmalloc(sizeof(cv_sym)); + cvs->type = CV8_S_COMPILE; + cvs->format = "wwwwZh"; + cvs->args[0].i = 3; /* language (3=Masm) */ + + /* target processor; 0xD0 = AMD64 */ + if (strcmp(yasm_arch_keyword(object->arch), "x86") == 0) { + if (strcmp(yasm_arch_get_machine(object->arch), "amd64") == 0) + cvs->args[1].i = 0xD0; + else + cvs->args[1].i = 0x6; /* 686, FIXME */ + } else + cvs->args[1].i = 0; /* XXX: unknown */ + + cvs->args[2].i = 0; /* flags (assume 0 for now) */ + cvs->args[3].i = 0; /* creator version number (assume 0 for now) */ + cvs->args[4].p = creator; /* creator string */ + cvs->args[5].i = 0; /* no pairs of key/value */ + + bc = yasm_bc_create_common(&cv_sym_bc_callback, cvs, 0); + bc->len = cv_sym_size(cvs); + yasm_cv__append_bc(sect, bc); + return cvs; +} + +static cv_sym * +cv8_add_sym_label(yasm_section *sect, yasm_symrec *sym) +{ + yasm_bytecode *bc; + cv_sym *cvs = yasm_xmalloc(sizeof(cv_sym)); + cvs->type = CV8_S_LABEL32; + cvs->format = "YbZ"; + cvs->args[0].p = sym; /* symrec for label */ + cvs->args[1].i = 0; /* flags (assume 0 for now) */ + cvs->args[2].p = yasm__xstrdup(yasm_symrec_get_name(sym)); + + bc = yasm_bc_create_common(&cv_sym_bc_callback, cvs, 0); + bc->len = cv_sym_size(cvs); + yasm_cv__append_bc(sect, bc); + return cvs; +} + +static cv_sym * +cv8_add_sym_data(yasm_section *sect, unsigned long type, yasm_symrec *sym, + int is_global) +{ + yasm_bytecode *bc; + cv_sym *cvs = yasm_xmalloc(sizeof(cv_sym)); + cvs->type = is_global ? CV8_S_GDATA32 : CV8_S_LDATA32; + cvs->format = "wYZ"; + cvs->args[0].i = type; /* type index */ + cvs->args[1].p = sym; /* symrec for label */ + cvs->args[2].p = yasm__xstrdup(yasm_symrec_get_name(sym)); + + bc = yasm_bc_create_common(&cv_sym_bc_callback, cvs, 0); + bc->len = cv_sym_size(cvs); + yasm_cv__append_bc(sect, bc); + return cvs; +} + +static size_t +cv_dbgfmt_add_file(yasm_dbgfmt_cv *dbgfmt_cv, size_t filenum, + const char *filename) +{ + char *pathname; + size_t i; + yasm_md5_context context; + FILE *f; + unsigned char *buf; + size_t len; + + /* Put the filename into the filename table */ + if (filenum == 0) { + /* Look to see if we already have that filename in the table */ + for (; filenumfilenames_size; filenum++) { + if (!dbgfmt_cv->filenames[filenum].filename || + strcmp(dbgfmt_cv->filenames[filenum].filename, filename) == 0) + break; + } + } else + filenum--; /* array index is 0-based */ + + /* Realloc table if necessary */ + if (filenum >= dbgfmt_cv->filenames_allocated) { + size_t old_allocated = dbgfmt_cv->filenames_allocated; + dbgfmt_cv->filenames_allocated = filenum+32; + dbgfmt_cv->filenames = yasm_xrealloc(dbgfmt_cv->filenames, + sizeof(cv_filename)*dbgfmt_cv->filenames_allocated); + for (i=old_allocated; ifilenames_allocated; i++) { + dbgfmt_cv->filenames[i].pathname = NULL; + dbgfmt_cv->filenames[i].filename = NULL; + dbgfmt_cv->filenames[i].str_off = 0; + dbgfmt_cv->filenames[i].info_off = 0; + } + } + + /* Calculate MD5 checksum of file */ + buf = yasm_xmalloc(1024); + yasm_md5_init(&context); + f = fopen(filename, "rb"); + if (!f) + yasm__fatal(N_("codeview: could not open source file")); + while ((len = fread(buf, 1, 1024, f)) > 0) + yasm_md5_update(&context, buf, (unsigned long)len); + yasm_md5_final(dbgfmt_cv->filenames[filenum].digest, &context); + fclose(f); + yasm_xfree(buf); + + /* Actually save in table */ + if (dbgfmt_cv->filenames[filenum].pathname) + yasm_xfree(dbgfmt_cv->filenames[filenum].pathname); + if (dbgfmt_cv->filenames[filenum].filename) + yasm_xfree(dbgfmt_cv->filenames[filenum].filename); + + pathname = yasm__abspath(filename); + dbgfmt_cv->filenames[filenum].pathname = pathname; + dbgfmt_cv->filenames[filenum].filename = yasm__xstrdup(filename); + + /* Update table size */ + if (filenum >= dbgfmt_cv->filenames_size) + dbgfmt_cv->filenames_size = filenum + 1; + + return filenum; +} + +static yasm_bytecode * +cv_append_str(yasm_section *sect, const char *str) +{ + yasm_datavalhead dvs; + yasm_bytecode *bc; + + yasm_dvs_initialize(&dvs); + yasm_dvs_append(&dvs, yasm_dv_create_string(yasm__xstrdup(str), + strlen(str))); + bc = yasm_bc_create_data(&dvs, 1, 1, NULL, 0); + yasm_bc_finalize(bc, yasm_cv__append_bc(sect, bc)); + yasm_bc_calc_len(bc, NULL, NULL); + return bc; +} + +typedef struct cv_line_info { + yasm_section *debug_symline; + yasm_object *object; + yasm_dbgfmt_cv *dbgfmt_cv; + yasm_linemap *linemap; + yasm_errwarns *errwarns; + unsigned int num_lineinfos; + STAILQ_HEAD(cv8_lineinfo_head, cv8_lineinfo) cv8_lineinfos; + /*@null@*/ cv8_lineinfo *cv8_cur_li; + /*@null@*/ cv8_lineset *cv8_cur_ls; +} cv_line_info; + +static int +cv_generate_line_bc(yasm_bytecode *bc, /*@null@*/ void *d) +{ + cv_line_info *info = (cv_line_info *)d; + yasm_dbgfmt_cv *dbgfmt_cv = info->dbgfmt_cv; + size_t i; + const char *filename; + unsigned long line; + /*@null@*/ yasm_bytecode *nextbc = yasm_bc__next(bc); + yasm_section *sect = yasm_bc_get_section(bc); + + if (nextbc && bc->offset == nextbc->offset) + return 0; + + yasm_linemap_lookup(info->linemap, bc->line, &filename, &line); + + if (!info->cv8_cur_li + || strcmp(filename, info->cv8_cur_li->fn->filename) != 0) { + yasm_bytecode *sectbc; + char symname[8]; + int first_in_sect = !info->cv8_cur_li; + + /* Find file */ + for (i=0; ifilenames_size; i++) { + if (strcmp(filename, dbgfmt_cv->filenames[i].filename) == 0) + break; + } + if (i >= dbgfmt_cv->filenames_size) + yasm_internal_error(N_("could not find filename in table")); + + /* and create new lineinfo structure */ + info->cv8_cur_li = yasm_xmalloc(sizeof(cv8_lineinfo)); + info->cv8_cur_li->fn = &dbgfmt_cv->filenames[i]; + info->cv8_cur_li->sect = sect; + info->cv8_cur_li->first_in_sect = first_in_sect; + sectbc = yasm_section_bcs_first(sect); + if (sectbc->symrecs && sectbc->symrecs[0]) + info->cv8_cur_li->sectsym = sectbc->symrecs[0]; + else { + sprintf(symname, ".%06u", info->num_lineinfos++); + info->cv8_cur_li->sectsym = + yasm_symtab_define_label(info->object->symtab, symname, sectbc, + 1, 0); + } + info->cv8_cur_li->num_linenums = 0; + STAILQ_INIT(&info->cv8_cur_li->linesets); + STAILQ_INSERT_TAIL(&info->cv8_lineinfos, info->cv8_cur_li, link); + info->cv8_cur_ls = NULL; + } + + /* build new lineset if necessary */ + if (!info->cv8_cur_ls || info->cv8_cur_ls->num_pairs >= 126) { + info->cv8_cur_ls = yasm_xmalloc(sizeof(cv8_lineset)); + info->cv8_cur_ls->num_pairs = 0; + STAILQ_INSERT_TAIL(&info->cv8_cur_li->linesets, info->cv8_cur_ls, link); + } + + /* add linepair for this bytecode */ + info->cv8_cur_ls->pairs[info->cv8_cur_ls->num_pairs].offset = bc->offset; + info->cv8_cur_ls->pairs[info->cv8_cur_ls->num_pairs].line = + 0x80000000 | line; + info->cv8_cur_ls->num_pairs++; + info->cv8_cur_li->num_linenums++; + + return 0; +} + +static int +cv_generate_line_section(yasm_section *sect, /*@null@*/ void *d) +{ + cv_line_info *info = (cv_line_info *)d; + + if (!yasm_section_is_code(sect)) + return 0; /* not code, so no line data for this section */ + + info->cv8_cur_li = NULL; + info->cv8_cur_ls = NULL; + + yasm_section_bcs_traverse(sect, info->errwarns, info, cv_generate_line_bc); + + return 0; +} + +static int +cv_generate_filename(const char *filename, void *d) +{ + cv_dbgfmt_add_file((yasm_dbgfmt_cv *)d, 0, filename); + return 0; +} + +static int +cv_generate_sym(yasm_symrec *sym, void *d) +{ + cv_line_info *info = (cv_line_info *)d; + yasm_bytecode *precbc; + const char *name = yasm_symrec_get_name(sym); + + /* only care about labels (for now). Don't put in symbols starting with + * ".", as these are typically internally generated ones (like section + * symbols). + */ + if (name[0] == '.' || !yasm_symrec_get_label(sym, &precbc)) + return 0; + + /* TODO: add data types; until then, just mark everything as UBYTE */ + if (yasm_section_is_code(yasm_bc_get_section(precbc))) + cv8_add_sym_label(info->debug_symline, sym); + else + cv8_add_sym_data(info->debug_symline, 0x20, sym, + yasm_symrec_get_visibility(sym) & YASM_SYM_GLOBAL?1:0); + return 0; +} + +yasm_section * +yasm_cv__generate_symline(yasm_object *object, yasm_linemap *linemap, + yasm_errwarns *errwarns) +{ + yasm_dbgfmt_cv *dbgfmt_cv = (yasm_dbgfmt_cv *)object->dbgfmt; + cv_line_info info; + int new; + size_t i; + cv8_symhead *head; + cv8_lineinfo *li; + yasm_bytecode *bc; + unsigned long off; + + /* Generate filenames based on linemap */ + yasm_linemap_traverse_filenames(linemap, dbgfmt_cv, + cv_generate_filename); + + info.object = object; + info.dbgfmt_cv = dbgfmt_cv; + info.linemap = linemap; + info.errwarns = errwarns; + info.debug_symline = + yasm_object_get_general(object, ".debug$S", 1, 0, 0, &new, 0); + info.num_lineinfos = 0; + STAILQ_INIT(&info.cv8_lineinfos); + info.cv8_cur_li = NULL; + info.cv8_cur_ls = NULL; + + /* source filenames string table */ + head = cv8_add_symhead(info.debug_symline, CV8_FILE_STRTAB, 1); + cv_append_str(info.debug_symline, ""); + off = 1; + for (i=0; ifilenames_size; i++) { + if (!dbgfmt_cv->filenames[i].pathname) { + yasm_error_set(YASM_ERROR_GENERAL, + N_("codeview file number %d unassigned"), i+1); + yasm_errwarn_propagate(errwarns, 0); + continue; + } + bc = cv_append_str(info.debug_symline, + dbgfmt_cv->filenames[i].pathname); + dbgfmt_cv->filenames[i].str_off = off; + off += bc->len; + } + cv8_set_symhead_end(head, yasm_section_bcs_last(info.debug_symline)); + + /* Align 4 */ + bc = yasm_bc_create_align + (yasm_expr_create_ident(yasm_expr_int(yasm_intnum_create_uint(4)), 0), + NULL, NULL, NULL, 0); + yasm_bc_finalize(bc, yasm_cv__append_bc(info.debug_symline, bc)); + yasm_bc_calc_len(bc, NULL, NULL); + + /* source file info table */ + head = cv8_add_symhead(info.debug_symline, CV8_FILE_INFO, 0); + off = 0; + for (i=0; ifilenames_size; i++) { + if (!dbgfmt_cv->filenames[i].pathname) + continue; + bc = cv8_add_fileinfo(info.debug_symline, &dbgfmt_cv->filenames[i]); + dbgfmt_cv->filenames[i].info_off = off; + off += bc->len; + } + cv8_set_symhead_end(head, yasm_section_bcs_last(info.debug_symline)); + + /* Already aligned 4 */ + + /* Generate line numbers for sections */ + yasm_object_sections_traverse(object, (void *)&info, + cv_generate_line_section); + + /* Output line numbers for sections */ + head = NULL; + STAILQ_FOREACH(li, &info.cv8_lineinfos, link) { + if (li->first_in_sect) { + if (head) + cv8_set_symhead_end(head, yasm_section_bcs_last(info.debug_symline)); + head = cv8_add_symhead(info.debug_symline, CV8_LINE_NUMS, 0); + } + bc = yasm_bc_create_common(&cv8_lineinfo_bc_callback, li, 0); + bc->len = (li->first_in_sect ? 24 : 12) + li->num_linenums*8; + yasm_cv__append_bc(info.debug_symline, bc); + } + if (head) + cv8_set_symhead_end(head, yasm_section_bcs_last(info.debug_symline)); + + /* Already aligned 4 */ + + /* Output debugging symbols */ + head = cv8_add_symhead(info.debug_symline, CV8_DEBUG_SYMS, 0); + /* add object and compile flag first */ + cv8_add_sym_objname(info.debug_symline, + yasm__abspath(object->obj_filename)); + if (getenv("YASM_TEST_SUITE")) + cv8_add_sym_compile(object, info.debug_symline, + yasm__xstrdup("yasm HEAD")); + else + cv8_add_sym_compile(object, info.debug_symline, + yasm__xstrdup(PACKAGE_STRING)); + /* then iterate through symbol table */ + yasm_symtab_traverse(object->symtab, &info, cv_generate_sym); + cv8_set_symhead_end(head, yasm_section_bcs_last(info.debug_symline)); + + /* Align 4 at end */ + bc = yasm_bc_create_align + (yasm_expr_create_ident(yasm_expr_int(yasm_intnum_create_uint(4)), 0), + NULL, NULL, NULL, 0); + yasm_bc_finalize(bc, yasm_cv__append_bc(info.debug_symline, bc)); + yasm_bc_calc_len(bc, NULL, NULL); + + return info.debug_symline; +} + +static void +cv_out_sym(yasm_symrec *sym, unsigned long off, yasm_bytecode *bc, + unsigned char **bufp, void *d, yasm_output_value_func output_value) +{ + yasm_value val; + + /* sym in its section */ + yasm_value_init_sym(&val, sym, 32); + val.section_rel = 1; + output_value(&val, *bufp, 4, off, bc, 0, d); + *bufp += 4; + + /* section index */ + yasm_value_init_sym(&val, sym, 16); + val.seg_of = 1; + output_value(&val, *bufp, 2, off+4, bc, 0, d); + *bufp += 2; +} + +static cv8_symhead * +cv8_add_symhead(yasm_section *sect, unsigned long type, int first) +{ + cv8_symhead *head; + yasm_bytecode *bc; + + head = yasm_xmalloc(sizeof(cv8_symhead)); + head->type = type; + head->first = first; + head->start_prevbc = yasm_section_bcs_last(sect); + + bc = yasm_bc_create_common(&cv8_symhead_bc_callback, head, 0); + if (first) + bc->len = 12; + else + bc->len = 8; + + head->end_prevbc = bc; + yasm_cv__append_bc(sect, bc); + return head; +} + +static void +cv8_set_symhead_end(cv8_symhead *head, yasm_bytecode *end_prevbc) +{ + head->end_prevbc = end_prevbc; +} + +static void +cv8_symhead_bc_destroy(void *contents) +{ + yasm_xfree(contents); +} + +static void +cv8_symhead_bc_print(const void *contents, FILE *f, int indent_level) +{ + /* TODO */ +} + +static int +cv8_symhead_bc_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + yasm_internal_error(N_("tried to calc_len a codeview symhead bytecode")); + /*@notreached@*/ + return 0; +} + +static int +cv8_symhead_bc_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + yasm_output_reloc_func output_reloc) +{ + yasm_object *object = yasm_section_get_object(bc->section); + cv8_symhead *head = (cv8_symhead *)bc->contents; + unsigned char *buf = *bufp; + yasm_intnum *intn, *cval; + + cval = yasm_intnum_create_uint(4); + /* Output "version" if first */ + if (head->first) { + yasm_arch_intnum_tobytes(object->arch, cval, buf, 4, 32, 0, bc, 0); + buf += 4; + } + + /* Type contained - 4 bytes */ + yasm_intnum_set_uint(cval, head->type); + yasm_arch_intnum_tobytes(object->arch, cval, buf, 4, 32, 0, bc, 0); + buf += 4; + + /* Total length of info (following this field) - 4 bytes */ + yasm_intnum_set_uint(cval, bc->len); + intn = yasm_calc_bc_dist(head->start_prevbc, head->end_prevbc); + yasm_intnum_calc(intn, YASM_EXPR_SUB, cval); + yasm_arch_intnum_tobytes(object->arch, intn, buf, 4, 32, 0, bc, 0); + buf += 4; + yasm_intnum_destroy(intn); + + *bufp = buf; + + yasm_intnum_destroy(cval); + return 0; +} + +static yasm_bytecode * +cv8_add_fileinfo(yasm_section *sect, const cv_filename *fn) +{ + cv8_fileinfo *fi; + yasm_bytecode *bc; + + fi = yasm_xmalloc(sizeof(cv8_fileinfo)); + fi->fn = fn; + + bc = yasm_bc_create_common(&cv8_fileinfo_bc_callback, fi, 0); + bc->len = 24; + + yasm_cv__append_bc(sect, bc); + return bc; +} + +static void +cv8_fileinfo_bc_destroy(void *contents) +{ + yasm_xfree(contents); +} + +static void +cv8_fileinfo_bc_print(const void *contents, FILE *f, int indent_level) +{ + /* TODO */ +} + +static int +cv8_fileinfo_bc_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + yasm_internal_error(N_("tried to calc_len a codeview fileinfo bytecode")); + /*@notreached@*/ + return 0; +} + +static int +cv8_fileinfo_bc_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + yasm_output_reloc_func output_reloc) +{ + yasm_object *object = yasm_section_get_object(bc->section); + cv8_fileinfo *fi = (cv8_fileinfo *)bc->contents; + unsigned char *buf = *bufp; + yasm_intnum *cval; + int i; + + /* Offset in filename string table */ + cval = yasm_intnum_create_uint(fi->fn->str_off); + yasm_arch_intnum_tobytes(object->arch, cval, buf, 4, 32, 0, bc, 0); + buf += 4; + + /* Checksum type/length */ + yasm_intnum_set_uint(cval, 0x0110); + yasm_arch_intnum_tobytes(object->arch, cval, buf, 2, 16, 0, bc, 0); + buf += 2; + + /* Checksum */ + for (i=0; i<16; i++) + YASM_WRITE_8(buf, fi->fn->digest[i]); + + /* Pad */ + YASM_WRITE_8(buf, 0); + YASM_WRITE_8(buf, 0); + + *bufp = buf; + + yasm_intnum_destroy(cval); + return 0; +} + +static void +cv8_lineinfo_bc_destroy(void *contents) +{ + cv8_lineinfo *li = (cv8_lineinfo *)contents; + cv8_lineset *ls1, *ls2; + + /* delete line sets */ + ls1 = STAILQ_FIRST(&li->linesets); + while (ls1) { + ls2 = STAILQ_NEXT(ls1, link); + yasm_xfree(ls1); + ls1 = ls2; + } + + yasm_xfree(contents); +} + +static void +cv8_lineinfo_bc_print(const void *contents, FILE *f, int indent_level) +{ + /* TODO */ +} + +static int +cv8_lineinfo_bc_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + yasm_internal_error(N_("tried to calc_len a codeview linehead bytecode")); + /*@notreached@*/ + return 0; +} + +static int +cv8_lineinfo_bc_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + yasm_output_reloc_func output_reloc) +{ + yasm_object *object = yasm_section_get_object(bc->section); + cv8_lineinfo *li = (cv8_lineinfo *)bc->contents; + unsigned char *buf = *bufp; + yasm_intnum *cval; + unsigned long i; + cv8_lineset *ls; + + if (li->first_in_sect) { + /* start offset and section */ + cv_out_sym(li->sectsym, (unsigned long)(buf - bufstart), bc, &buf, + d, output_value); + + /* Two bytes of pad/alignment */ + YASM_WRITE_8(buf, 0); + YASM_WRITE_8(buf, 0); + + /* Section length covered by line number info */ + cval = yasm_calc_bc_dist(yasm_section_bcs_first(li->sect), + yasm_section_bcs_last(li->sect)); + yasm_arch_intnum_tobytes(object->arch, cval, buf, 4, 32, 0, bc, 0); + yasm_intnum_destroy(cval); + buf += 4; + } + + /* Offset of source file in info table */ + cval = yasm_intnum_create_uint(li->fn->info_off); + yasm_arch_intnum_tobytes(object->arch, cval, buf, 4, 32, 0, bc, 0); + buf += 4; + + /* Number of line number pairs */ + yasm_intnum_set_uint(cval, li->num_linenums); + yasm_arch_intnum_tobytes(object->arch, cval, buf, 4, 32, 0, bc, 0); + buf += 4; + + /* Number of bytes of line number pairs + 12 (no, I don't know why) */ + yasm_intnum_set_uint(cval, li->num_linenums*8+12); + yasm_arch_intnum_tobytes(object->arch, cval, buf, 4, 32, 0, bc, 0); + buf += 4; + + /* Offset / line number pairs */ + i = 0; + STAILQ_FOREACH(ls, &li->linesets, link) { + unsigned long j; + for (j=0; inum_linenums && j<126; i++, j++) { + /* offset in section */ + yasm_intnum_set_uint(cval, ls->pairs[j].offset); + yasm_arch_intnum_tobytes(object->arch, cval, buf, 4, 32, 0, bc, 0); + buf += 4; + + /* line number in file */ + yasm_intnum_set_uint(cval, ls->pairs[j].line); + yasm_arch_intnum_tobytes(object->arch, cval, buf, 4, 32, 0, bc, 0); + buf += 4; + } + } + + *bufp = buf; + + yasm_intnum_destroy(cval); + return 0; +} + +static unsigned long +cv_sym_size(const cv_sym *cvs) +{ + const char *ch = cvs->format; + unsigned long len = 4; /* sym length and type */ + unsigned long slen; + int arg = 0; + + while (*ch) { + switch (*ch) { + case 'b': + len++; + arg++; + break; + case 'h': + len += 2; + arg++; + break; + case 'w': + len += 4; + arg++; + break; + case 'Y': + len += 6; /* XXX: will be 4 in 16-bit version */ + arg++; + break; + case 'T': + len += 4; /* XXX: will be 2 in CV4 */ + arg++; + break; + case 'S': + len += 1; /* XXX: is this 1 or 2? */ + slen = (unsigned long)strlen((const char *)cvs->args[arg++].p); + len += slen <= 0xff ? slen : 0xff; + break; + case 'Z': + len += + (unsigned long)strlen((const char *)cvs->args[arg++].p) + 1; + break; + default: + yasm_internal_error(N_("unknown sym format character")); + } + ch++; + } + + return len; +} + +static void +cv_sym_bc_destroy(void *contents) +{ + cv_sym *cvs = (cv_sym *)contents; + const char *ch = cvs->format; + int arg = 0; + + while (*ch) { + switch (*ch) { + case 'b': + case 'h': + case 'w': + case 'Y': + case 'T': + arg++; + break; /* nothing to destroy */ + case 'S': + case 'Z': + yasm_xfree(cvs->args[arg++].p); + break; + default: + yasm_internal_error(N_("unknown sym format character")); + } + ch++; + } + + yasm_xfree(contents); +} + +static void +cv_sym_bc_print(const void *contents, FILE *f, int indent_level) +{ + /* TODO */ +} + +static int +cv_sym_bc_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + yasm_internal_error(N_("tried to calc_len a codeview sym bytecode")); + /*@notreached@*/ + return 0; +} + +static int +cv_sym_bc_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + yasm_output_reloc_func output_reloc) +{ + yasm_object *object = yasm_section_get_object(bc->section); + cv_sym *cvs = (cv_sym *)bc->contents; + unsigned char *buf = *bufp; + yasm_intnum *cval; + const char *ch = cvs->format; + size_t len; + int arg = 0; + + /* Total length of record (following this field) - 2 bytes */ + cval = yasm_intnum_create_uint(bc->len-2); + yasm_arch_intnum_tobytes(object->arch, cval, buf, 2, 16, 0, bc, 1); + buf += 2; + + /* Type contained - 2 bytes */ + yasm_intnum_set_uint(cval, cvs->type); + yasm_arch_intnum_tobytes(object->arch, cval, buf, 2, 16, 0, bc, 0); + buf += 2; + + while (*ch) { + switch (*ch) { + case 'b': + YASM_WRITE_8(buf, cvs->args[arg].i); + arg++; + break; + case 'h': + yasm_intnum_set_uint(cval, cvs->args[arg++].i); + yasm_arch_intnum_tobytes(object->arch, cval, buf, 2, 16, 0, + bc, 0); + buf += 2; + break; + case 'w': + yasm_intnum_set_uint(cval, cvs->args[arg++].i); + yasm_arch_intnum_tobytes(object->arch, cval, buf, 4, 32, 0, + bc, 0); + buf += 4; + break; + case 'Y': + cv_out_sym((yasm_symrec *)cvs->args[arg++].p, + (unsigned long)(buf-bufstart), bc, &buf, d, + output_value); + break; + case 'T': + yasm_intnum_set_uint(cval, cvs->args[arg++].i); + yasm_arch_intnum_tobytes(object->arch, cval, buf, 4, 32, 0, + bc, 0); + buf += 4; /* XXX: will be 2 in CV4 */ + break; + case 'S': + len = strlen((char *)cvs->args[arg].p); + len = len <= 0xff ? len : 0xff; + YASM_WRITE_8(buf, len); + memcpy(buf, (char *)cvs->args[arg].p, len); + buf += len; + arg++; + break; + case 'Z': + len = strlen((char *)cvs->args[arg].p)+1; + memcpy(buf, (char *)cvs->args[arg].p, len); + buf += len; + arg++; + break; + default: + yasm_internal_error(N_("unknown leaf format character")); + } + ch++; + } + + *bufp = buf; + + yasm_intnum_destroy(cval); + return 0; +} diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv-type.c b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv-type.c new file mode 100644 index 0000000000..2a52f18436 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv-type.c @@ -0,0 +1,778 @@ +/* + * CodeView debugging format - type information + * + * Copyright (C) 2006-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of other contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "cv-dbgfmt.h" + +enum cv_reservedtype { + /* Bitfields representation - type */ + CV_TYPE_SPECIAL = 0x00<<4, /* Special */ + CV_TYPE_SIGNED = 0x01<<4, /* Signed integral value */ + CV_TYPE_UNSIGNED = 0x02<<4, /* Unsigned integral value */ + CV_TYPE_BOOLEAN = 0x03<<4, /* Boolean */ + CV_TYPE_REAL = 0x04<<4, /* Real */ + CV_TYPE_COMPLEX = 0x05<<4, /* Complex */ + CV_TYPE_SPECIAL2 = 0x06<<4, /* Special2 */ + CV_TYPE_REALINT = 0x07<<4, /* Really int value */ + + /* "size" of CV_TYPE_SPECIAL */ + CV_SPECIAL_NOTYPE = 0x00<<0, /* No type */ + CV_SPECIAL_ABS = 0x01<<0, /* Absolute symbol */ + CV_SPECIAL_SEG = 0x02<<0, /* Segment */ + CV_SPECIAL_VOID = 0x03<<0, /* Void */ + CV_SPECIAL_CURRENCY = 0x04<<0, /* Basic 8-byte currency value */ + CV_SPECIAL_NEARBSTR = 0x05<<0, /* Near Basic string */ + CV_SPECIAL_FARBSTR = 0x06<<0, /* Far Basic string */ + + /* Size of CV_TYPE_SIGNED, CV_TYPE_UNSIGNED, and CV_TYPE_BOOLEAN */ + CV_INTEGER_1BYTE = 0x00<<0, /* 1 byte */ + CV_INTEGER_2BYTE = 0x01<<0, /* 2 byte */ + CV_INTEGER_4BYTE = 0x02<<0, /* 4 byte */ + CV_INTEGER_8BYTE = 0x03<<0, /* 8 byte */ + + /* Size of CV_TYPE_REAL and CV_TYPE_COMPLEX */ + CV_REAL_32BIT = 0x00<<0, /* 32 bit */ + CV_REAL_64BIT = 0x01<<0, /* 64 bit */ + CV_REAL_80BIT = 0x02<<0, /* 80 bit */ + CV_REAL_128BIT = 0x03<<0, /* 128 bit */ + CV_REAL_48BIT = 0x04<<0, /* 48 bit */ + + /* "size" of CV_TYPE_SPECIAL2 */ + CV_SPECIAL2_BIT = 0x00<<0, /* Bit */ + CV_SPECIAL2_PASCHAR = 0x01<<0, /* Pascal CHAR */ + + /* Size of CV_TYPE_REALINT */ + CV_REALINT_CHAR = 0x00<<0, /* Char */ + CV_REALINT_WCHAR = 0x01<<0, /* Wide character */ + CV_REALINT_S2BYTE = 0x02<<0, /* 2-byte signed integer */ + CV_REALINT_U2BYTE = 0x03<<0, /* 2-byte unsigned integer */ + CV_REALINT_S4BYTE = 0x04<<0, /* 4-byte signed integer */ + CV_REALINT_U4BYTE = 0x05<<0, /* 4-byte unsigned integer */ + CV_REALINT_S8BYTE = 0x06<<0, /* 8-byte signed integer */ + CV_REALINT_U8BYTE = 0x07<<0, /* 8-byte unsigned integer */ + + /* Mode */ + CV_MODE_DIRECT = 0x00<<8, /* Direct; not a pointer */ + CV_MODE_NEAR = 0x01<<8, /* Near pointer */ + CV_MODE_FAR = 0x02<<8, /* Far pointer */ + CV_MODE_HUGE = 0x03<<8, /* Huge pointer */ + CV_MODE_NEAR32 = 0x04<<8, /* 32-bit near pointer */ + CV_MODE_FAR32 = 0x05<<8, /* 32-bit far pointer */ + CV_MODE_NEAR64 = 0x06<<8, /* 64-bit near pointer */ + + /* Pure primitive type listing - based on above bitfields */ + + /* Special Types */ + CV_T_NOTYPE = 0x0000, /* Uncharacterized type (no type) */ + CV_T_ABS = 0x0001, /* Absolute symbol */ + CV_T_SEGMENT = 0x0002, /* Segment type */ + CV_T_VOID = 0x0003, /* Void */ + CV_T_PVOID = 0x0103, /* Near pointer to void */ + CV_T_PFVOID = 0x0203, /* Far pointer to void */ + CV_T_PHVOID = 0x0303, /* Huge pointer to void */ + CV_T_32PVOID = 0x0403, /* 32-bit near pointer to void */ + CV_T_32PFVOID = 0x0503, /* 32-bit far pointer to void */ + CV_T_CURRENCY = 0x0004, /* Basic 8-byte currency value */ + CV_T_NBASICSTR = 0x0005, /* Near Basic string */ + CV_T_FBASICSTR = 0x0006, /* Far Basic string */ + CV_T_BIT = 0x0060, /* Bit */ + CV_T_PASCHAR = 0x0061, /* Pascal CHAR */ + /* Character Types */ + CV_T_CHAR = 0x0010, /* 8-bit signed */ + CV_T_UCHAR = 0x0020, /* 8-bit unsigned */ + CV_T_PCHAR = 0x0110, /* Near pointer to 8-bit signed */ + CV_T_PUCHAR = 0x0120, /* Near pointer to 8-bit unsigned */ + CV_T_PFCHAR = 0x0210, /* Far pointer to 8-bit signed */ + CV_T_PFUCHAR = 0x0220, /* Far pointer to 8-bit unsigned */ + CV_T_PHCHAR = 0x0310, /* Huge pointer to 8-bit signed */ + CV_T_PHUCHAR = 0x0320, /* Huge pointer to 8-bit unsigned */ + CV_T_32PCHAR = 0x0410, /* 16:32 near pointer to 8-bit signed */ + CV_T_32PUCHAR = 0x0420, /* 16:32 near pointer to 8-bit unsigned */ + CV_T_32PFCHAR = 0x0510, /* 16:32 far pointer to 8-bit signed */ + CV_T_32PFUCHAR = 0x0520, /* 16:32 far pointer to 8-bit unsigned */ + /* Real Character Types */ + CV_T_RCHAR = 0x0070, /* Real char */ + CV_T_PRCHAR = 0x0170, /* Near pointer to a real char */ + CV_T_PFRCHAR = 0x0270, /* Far pointer to a real char */ + CV_T_PHRCHAR = 0x0370, /* Huge pointer to a real char */ + CV_T_32PRCHAR = 0x0470, /* 16:32 near pointer to a real char */ + CV_T_32PFRCHAR = 0x0570, /* 16:32 far pointer to a real char */ + /* Wide Character Types */ + CV_T_WCHAR = 0x0071, /* Wide char */ + CV_T_PWCHAR = 0x0171, /* Near pointer to a wide char */ + CV_T_PFWCHAR = 0x0271, /* Far pointer to a wide char */ + CV_T_PHWCHAR = 0x0371, /* Huge pointer to a wide char */ + CV_T_32PWCHAR = 0x0471, /* 16:32 near pointer to a wide char */ + CV_T_32PFWCHAR = 0x0571, /* 16:32 far pointer to a wide char */ + /* Real 16-bit Integer Types */ + CV_T_INT2 = 0x0072, /* Real 16-bit signed int */ + CV_T_UINT2 = 0x0073, /* Real 16-bit unsigned int */ + CV_T_PINT2 = 0x0172, /* Near pointer to 16-bit signed int */ + CV_T_PUINT2 = 0x0173, /* Near pointer to 16-bit unsigned int */ + CV_T_PFINT2 = 0x0272, /* Far pointer to 16-bit signed int */ + CV_T_PFUINT2 = 0x0273, /* Far pointer to 16-bit unsigned int */ + CV_T_PHINT2 = 0x0372, /* Huge pointer to 16-bit signed int */ + CV_T_PHUINT2 = 0x0373, /* Huge pointer to 16-bit unsigned int */ + CV_T_32PINT2 = 0x0472, /* 16:32 near pointer to 16-bit signed int */ + CV_T_32PUINT2 = 0x0473, /* 16:32 near pointer to 16-bit unsigned int */ + CV_T_32PFINT2 = 0x0572, /* 16:32 far pointer to 16-bit signed int */ + CV_T_32PFUINT2 = 0x0573, /* 16:32 far pointer to 16-bit unsigned int */ + /* 16-bit Short Types */ + CV_T_SHORT = 0x0011, /* 16-bit signed */ + CV_T_USHORT = 0x0021, /* 16-bit unsigned */ + CV_T_PSHORT = 0x0111, /* Near pointer to 16-bit signed */ + CV_T_PUSHORT = 0x0121, /* Near pointer to 16-bit unsigned */ + CV_T_PFSHORT = 0x0211, /* Far pointer to 16-bit signed */ + CV_T_PFUSHORT = 0x0221, /* Far pointer to 16-bit unsigned */ + CV_T_PHSHORT = 0x0311, /* Huge pointer to 16-bit signed */ + CV_T_PHUSHORT = 0x0321, /* Huge pointer to 16-bit unsigned */ + CV_T_32PSHORT = 0x0411, /* 16:32 near pointer to 16-bit signed */ + CV_T_32PUSHORT = 0x0421, /* 16:32 near pointer to 16-bit unsigned */ + CV_T_32PFSHORT = 0x0511, /* 16:32 far pointer to 16-bit signed */ + CV_T_32PFUSHORT = 0x0521, /* 16:32 far pointer to 16-bit unsigned */ + /* Real 32-bit Integer Types */ + CV_T_INT4 = 0x0074, /* Real 32-bit signed int */ + CV_T_UINT4 = 0x0075, /* Real 32-bit unsigned int */ + CV_T_PINT4 = 0x0174, /* Near pointer to 32-bit signed int */ + CV_T_PUINT4 = 0x0175, /* Near pointer to 32-bit unsigned int */ + CV_T_PFINT4 = 0x0274, /* Far pointer to 32-bit signed int */ + CV_T_PFUINT4 = 0x0275, /* Far pointer to 32-bit unsigned int */ + CV_T_PHINT4 = 0x0374, /* Huge pointer to 32-bit signed int */ + CV_T_PHUINT4 = 0x0375, /* Huge pointer to 32-bit unsigned int */ + CV_T_32PINT4 = 0x0474, /* 16:32 near pointer to 32-bit signed int */ + CV_T_32PUINT4 = 0x0475, /* 16:32 near pointer to 32-bit unsigned int */ + CV_T_32PFINT4 = 0x0574, /* 16:32 far pointer to 32-bit signed int */ + CV_T_32PFUINT4 = 0x0575, /* 16:32 far pointer to 32-bit unsigned int */ + /* 32-bit Long Types */ + CV_T_LONG = 0x0012, /* 32-bit signed */ + CV_T_ULONG = 0x0022, /* 32-bit unsigned */ + CV_T_PLONG = 0x0112, /* Near pointer to 32-bit signed */ + CV_T_PULONG = 0x0122, /* Near pointer to 32-bit unsigned */ + CV_T_PFLONG = 0x0212, /* Far pointer to 32-bit signed */ + CV_T_PFULONG = 0x0222, /* Far pointer to 32-bit unsigned */ + CV_T_PHLONG = 0x0312, /* Huge pointer to 32-bit signed */ + CV_T_PHULONG = 0x0322, /* Huge pointer to 32-bit unsigned */ + CV_T_32PLONG = 0x0412, /* 16:32 near pointer to 32-bit signed */ + CV_T_32PULONG = 0x0422, /* 16:32 near pointer to 32-bit unsigned */ + CV_T_32PFLONG = 0x0512, /* 16:32 far pointer to 32-bit signed */ + CV_T_32PFULONG = 0x0522, /* 16:32 far pointer to 32-bit unsigned */ + /* Real 64-bit int Types */ + CV_T_INT8 = 0x0076, /* 64-bit signed int */ + CV_T_UINT8 = 0x0077, /* 64-bit unsigned int */ + CV_T_PINT8 = 0x0176, /* Near pointer to 64-bit signed int */ + CV_T_PUINT8 = 0x0177, /* Near pointer to 64-bit unsigned int */ + CV_T_PFINT8 = 0x0276, /* Far pointer to 64-bit signed int */ + CV_T_PFUINT8 = 0x0277, /* Far pointer to 64-bit unsigned int */ + CV_T_PHINT8 = 0x0376, /* Huge pointer to 64-bit signed int */ + CV_T_PHUINT8 = 0x0377, /* Huge pointer to 64-bit unsigned int */ + CV_T_32PINT8 = 0x0476, /* 16:32 near pointer to 64-bit signed int */ + CV_T_32PUINT8 = 0x0477, /* 16:32 near pointer to 64-bit unsigned int */ + CV_T_32PFINT8 = 0x0576, /* 16:32 far pointer to 64-bit signed int */ + CV_T_32PFUINT8 = 0x0577, /* 16:32 far pointer to 64-bit unsigned int */ + /* 64-bit Integral Types */ + CV_T_QUAD = 0x0013, /* 64-bit signed */ + CV_T_UQUAD = 0x0023, /* 64-bit unsigned */ + CV_T_PQUAD = 0x0113, /* Near pointer to 64-bit signed */ + CV_T_PUQUAD = 0x0123, /* Near pointer to 64-bit unsigned */ + CV_T_PFQUAD = 0x0213, /* Far pointer to 64-bit signed */ + CV_T_PFUQUAD = 0x0223, /* Far pointer to 64-bit unsigned */ + CV_T_PHQUAD = 0x0313, /* Huge pointer to 64-bit signed */ + CV_T_PHUQUAD = 0x0323, /* Huge pointer to 64-bit unsigned */ + CV_T_32PQUAD = 0x0413, /* 16:32 near pointer to 64-bit signed */ + CV_T_32PUQUAD = 0x0423, /* 16:32 near pointer to 64-bit unsigned */ + CV_T_32PFQUAD = 0x0513, /* 16:32 far pointer to 64-bit signed */ + CV_T_32PFUQUAD = 0x0523, /* 16:32 far pointer to 64-bit unsigned */ + /* 32-bit Real Types */ + CV_T_REAL32 = 0x0040, /* 32-bit real */ + CV_T_PREAL32 = 0x0140, /* Near pointer to 32-bit real */ + CV_T_PFREAL32 = 0x0240, /* Far pointer to 32-bit real */ + CV_T_PHREAL32 = 0x0340, /* Huge pointer to 32-bit real */ + CV_T_32PREAL32 = 0x0440, /* 16:32 near pointer to 32-bit real */ + CV_T_32PFREAL32 = 0x0540, /* 16:32 far pointer to 32-bit real */ + /* 48-bit Real Types */ + CV_T_REAL48 = 0x0044, /* 48-bit real */ + CV_T_PREAL48 = 0x0144, /* Near pointer to 48-bit real */ + CV_T_PFREAL48 = 0x0244, /* Far pointer to 48-bit real */ + CV_T_PHREAL48 = 0x0344, /* Huge pointer to 48-bit real */ + CV_T_32PREAL48 = 0x0444, /* 16:32 near pointer to 48-bit real */ + CV_T_32PFREAL48 = 0x0544, /* 16:32 far pointer to 48-bit real */ + /* 64-bit Real Types */ + CV_T_REAL64 = 0x0041, /* 64-bit real */ + CV_T_PREAL64 = 0x0141, /* Near pointer to 64-bit real */ + CV_T_PFREAL64 = 0x0241, /* Far pointer to 64-bit real */ + CV_T_PHREAL64 = 0x0341, /* Huge pointer to 64-bit real */ + CV_T_32PREAL64 = 0x0441, /* 16:32 near pointer to 64-bit real */ + CV_T_32PFREAL64 = 0x0541, /* 16:32 far pointer to 64-bit real */ + /* 80-bit Real Types */ + CV_T_REAL80 = 0x0042, /* 80-bit real */ + CV_T_PREAL80 = 0x0142, /* Near pointer to 80-bit real */ + CV_T_PFREAL80 = 0x0242, /* Far pointer to 80-bit real */ + CV_T_PHREAL80 = 0x0342, /* Huge pointer to 80-bit real */ + CV_T_32PREAL80 = 0x0442, /* 16:32 near pointer to 80-bit real */ + CV_T_32PFREAL80 = 0x0542, /* 16:32 far pointer to 80-bit real */ + /* 128-bit Real Types */ + CV_T_REAL128 = 0x0043, /* 128-bit real */ + CV_T_PREAL128 = 0x0143, /* Near pointer to 128-bit real */ + CV_T_PFREAL128 = 0x0243, /* Far pointer to 128-bit real */ + CV_T_PHREAL128 = 0x0343, /* Huge pointer to 128-bit real */ + CV_T_32PREAL128 = 0x0443, /* 16:32 near pointer to 128-bit real */ + CV_T_32PFREAL128 = 0x0543, /* 16:32 far pointer to 128-bit real */ + /* 32-bit Complex Types */ + CV_T_CPLX32 = 0x0050, /* 32-bit complex */ + CV_T_PCPLX32 = 0x0150, /* Near pointer to 32-bit complex */ + CV_T_PFCPLX32 = 0x0250, /* Far pointer to 32-bit complex */ + CV_T_PHCPLX32 = 0x0350, /* Huge pointer to 32-bit complex */ + CV_T_32PCPLX32 = 0x0450, /* 16:32 near pointer to 32-bit complex */ + CV_T_32PFCPLX32 = 0x0550, /* 16:32 far pointer to 32-bit complex */ + /* 64-bit Complex Types */ + CV_T_CPLX64 = 0x0051, /* 64-bit complex */ + CV_T_PCPLX64 = 0x0151, /* Near pointer to 64-bit complex */ + CV_T_PFCPLX64 = 0x0251, /* Far pointer to 64-bit complex */ + CV_T_PHCPLX64 = 0x0351, /* Huge pointer to 64-bit complex */ + CV_T_32PCPLX64 = 0x0451, /* 16:32 near pointer to 64-bit complex */ + CV_T_32PFCPLX64 = 0x0551, /* 16:32 far pointer to 64-bit complex */ + /* 80-bit Complex Types */ + CV_T_CPLX80 = 0x0052, /* 80-bit complex */ + CV_T_PCPLX80 = 0x0152, /* Near pointer to 80-bit complex */ + CV_T_PFCPLX80 = 0x0252, /* Far pointer to 80-bit complex */ + CV_T_PHCPLX80 = 0x0352, /* Huge pointer to 80-bit complex */ + CV_T_32PCPLX80 = 0x0452, /* 16:32 near pointer to 80-bit complex */ + CV_T_32PFCPLX80 = 0x0552, /* 16:32 far pointer to 80-bit complex */ + /* 128-bit Complex Types */ + CV_T_CPLX128 = 0x0053, /* 128-bit complex */ + CV_T_PCPLX128 = 0x0153, /* Near pointer to 128-bit complex */ + CV_T_PFCPLX128 = 0x0253, /* Far pointer to 128-bit complex */ + CV_T_PHCPLX128 = 0x0353, /* Huge pointer to 128-bit real */ + CV_T_32PCPLX128 = 0x0453, /* 16:32 near pointer to 128-bit complex */ + CV_T_32PFCPLX128 = 0x0553, /* 16:32 far pointer to 128-bit complex */ + /* Boolean Types */ + CV_T_BOOL08 = 0x0030, /* 8-bit Boolean */ + CV_T_BOOL16 = 0x0031, /* 16-bit Boolean */ + CV_T_BOOL32 = 0x0032, /* 32-bit Boolean */ + CV_T_BOOL64 = 0x0033, /* 64-bit Boolean */ + CV_T_PBOOL08 = 0x0130, /* Near pointer to 8-bit Boolean */ + CV_T_PBOOL16 = 0x0131, /* Near pointer to 16-bit Boolean */ + CV_T_PBOOL32 = 0x0132, /* Near pointer to 32-bit Boolean */ + CV_T_PBOOL64 = 0x0133, /* Near pointer to 64-bit Boolean */ + CV_T_PFBOOL08 = 0x0230, /* Far pointer to 8-bit Boolean */ + CV_T_PFBOOL16 = 0x0231, /* Far pointer to 16-bit Boolean */ + CV_T_PFBOOL32 = 0x0232, /* Far pointer to 32-bit Boolean */ + CV_T_PFBOOL64 = 0x0233, /* Far pointer to 64-bit Boolean */ + CV_T_PHBOOL08 = 0x0330, /* Huge pointer to 8-bit Boolean */ + CV_T_PHBOOL16 = 0x0331, /* Huge pointer to 16-bit Boolean */ + CV_T_PHBOOL32 = 0x0332, /* Huge pointer to 32-bit Boolean */ + CV_T_PHBOOL64 = 0x0333, /* Huge pointer to 64-bit Boolean */ + CV_T_32PBOOL08 = 0x0430, /* 16:32 near pointer to 8-bit Boolean */ + CV_T_32PBOOL16 = 0x0431, /* 16:32 near pointer to 16-bit Boolean */ + CV_T_32PBOOL32 = 0x0432, /* 16:32 near pointer to 32-bit Boolean */ + CV_T_32PBOOL64 = 0x0433, /* 16:32 near pointer to 64-bit Boolean */ + CV_T_32PFBOOL08 = 0x0530, /* 16:32 far pointer to 8-bit Boolean */ + CV_T_32PFBOOL16 = 0x0531, /* 16:32 far pointer to 16-bit Boolean */ + CV_T_32PFBOOL32 = 0x0532, /* 16:32 far pointer to 32-bit Boolean */ + CV_T_32PFBOOL64 = 0x0533, /* 16:32 far pointer to 64-bit Boolean */ + + /* Non-primitive types are stored in the TYPES section (generated in + * cv-type.c) and start at this index (e.g. 0x1000 is the first type + * in TYPES, 0x1001 the second, etc. + */ + CV_FIRST_NONPRIM = 0x1000 +}; + +enum cv_leaftype { + /* Leaf indices for type records that can be referenced from symbols */ + CV4_LF_MODIFIER = 0x0001, /* Type Modifier */ + CV4_LF_POINTER = 0x0002, /* Pointer */ + CV4_LF_ARRAY = 0x0003, /* Simple Array */ + CV4_LF_CLASS = 0x0004, /* Classes */ + CV4_LF_STRUCTURE = 0x0005, /* Structures */ + CV4_LF_UNION = 0x0006, /* Unions */ + CV4_LF_ENUM = 0x0007, /* Enumeration */ + CV4_LF_PROCEDURE = 0x0008, /* Procedure */ + CV4_LF_MFUNCTION = 0x0009, /* Member Function */ + CV4_LF_VTSHAPE = 0x000a, /* Virtual Function Table Shape */ + CV4_LF_BARRAY = 0x000d, /* Basic Array */ + CV4_LF_LABEL = 0x000e, /* Label */ + CV4_LF_NULL = 0x000f, /* Null */ + CV4_LF_DIMARRAY = 0x0011, /* Multiply Dimensioned Array */ + CV4_LF_VFTPATH = 0x0012, /* Path to Virtual Function Table */ + CV4_LF_PRECOMP = 0x0013, /* Reference Precompiled Types */ + CV4_LF_ENDPRECOMP = 0x0014, /* End of Precompiled Types */ + + /* CodeView 5.0 version */ + CV5_LF_MODIFIER = 0x1001, /* Type Modifier */ + CV5_LF_POINTER = 0x1002, /* Pointer */ + CV5_LF_ARRAY = 0x1003, /* Simple Array */ + CV5_LF_CLASS = 0x1004, /* Classes */ + CV5_LF_STRUCTURE = 0x1005, /* Structures */ + CV5_LF_UNION = 0x1006, /* Unions */ + CV5_LF_ENUM = 0x1007, /* Enumeration */ + CV5_LF_PROCEDURE = 0x1008, /* Procedure */ + CV5_LF_MFUNCTION = 0x1009, /* Member Function */ + CV5_LF_VTSHAPE = 0x000a, /* Virtual Function Table Shape */ + CV5_LF_BARRAY = 0x100d, /* Basic Array */ + CV5_LF_LABEL = 0x000e, /* Label */ + CV5_LF_NULL = 0x000f, /* Null */ + CV5_LF_DIMARRAY = 0x100c, /* Multiply Dimensioned Array */ + CV5_LF_VFTPATH = 0x100d, /* Path to Virtual Function Table */ + CV5_LF_PRECOMP = 0x100e, /* Reference Precompiled Types */ + CV5_LF_ENDPRECOMP = 0x0014, /* End of Precompiled Types */ + CV5_LF_TYPESERVER = 0x0016, /* Reference Typeserver */ + + /* Leaf indices for type records that can be referenced from other type + * records + */ + CV4_LF_SKIP = 0x0200, /* Skip */ + CV4_LF_ARGLIST = 0x0201, /* Argument List */ + CV4_LF_DEFARG = 0x0202, /* Default Argument */ + CV4_LF_LIST = 0x0203, /* Arbitrary List */ + CV4_LF_FIELDLIST = 0x0204, /* Field List */ + CV4_LF_DERIVED = 0x0205, /* Derived Classes */ + CV4_LF_BITFIELD = 0x0206, /* Bit Fields */ + CV4_LF_METHODLIST = 0x0207, /* Method List */ + CV4_LF_DIMCONU = 0x0208, /* Dimensioned Array with Constant Upper Bound */ + CV4_LF_DIMCONLU = 0x0209, /* Dimensioned Array with Constant Lower and Upper Bounds */ + CV4_LF_DIMVARU = 0x020a, /* Dimensioned Array with Variable Upper Bound */ + CV4_LF_DIMVARLU = 0x020b, /* Dimensioned Array with Variable Lower and Upper Bounds */ + CV4_LF_REFSYM = 0x020c, /* Referenced Symbol */ + + /* CodeView 5.0 version */ + CV5_LF_SKIP = 0x1200, /* Skip */ + CV5_LF_ARGLIST = 0x1201, /* Argument List */ + CV5_LF_DEFARG = 0x1202, /* Default Argument */ + CV5_LF_FIELDLIST = 0x1203, /* Field List */ + CV5_LF_DERIVED = 0x1204, /* Derived Classes */ + CV5_LF_BITFIELD = 0x1205, /* Bit Fields */ + CV5_LF_METHODLIST = 0x1206, /* Method List */ + CV5_LF_DIMCONU = 0x1207, /* Dimensioned Array with Constant Upper Bound */ + CV5_LF_DIMCONLU = 0x1208, /* Dimensioned Array with Constant Lower and Upper Bounds */ + CV5_LF_DIMVARU = 0x1209, /* Dimensioned Array with Variable Upper Bound */ + CV5_LF_DIMVARLU = 0x120a, /* Dimensioned Array with Variable Lower and Upper Bounds */ + CV5_LF_REFSYM = 0x020c, /* Referenced Symbol */ + + /* Leaf indices for fields of complex lists */ + CV4_LF_BCLASS = 0x0400, /* Real Base Class */ + CV4_LF_VBCLASS = 0x0401, /* Direct Virtual Base Class */ + CV4_LF_IVBCLASS = 0x0402, /* Indirect Virtual Base Class */ + CV4_LF_ENUMERATE = 0x0403, /* Enumeration Name and Value */ + CV4_LF_FRIENDFCN = 0x0404, /* Friend Function */ + CV4_LF_INDEX = 0x0405, /* Index To Another Type Record */ + CV4_LF_MEMBER = 0x0406, /* Data Member */ + CV4_LF_STMEMBER = 0x0407, /* Static Data Member */ + CV4_LF_METHOD = 0x0408, /* Method */ + CV4_LF_NESTTYPE = 0x0409, /* Nested Type Definition */ + CV4_LF_VFUNCTAB = 0x040a, /* Virtual Function Table Pointer */ + CV4_LF_FRIENDCLS = 0x040b, /* Friend Class */ + CV4_LF_ONEMETHOD = 0x040c, /* One Method */ + CV4_LF_VFUNCOFF = 0x040d, /* Virtual Function Offset */ + + /* CodeView 5.0 version */ + CV5_LF_BCLASS = 0x1400, /* Real Base Class */ + CV5_LF_VBCLASS = 0x1401, /* Direct Virtual Base Class */ + CV5_LF_IVBCLASS = 0x1402, /* Indirect Virtual Base Class */ + CV5_LF_ENUMERATE = 0x0403, /* Enumeration Name and Value */ + CV5_LF_FRIENDFCN = 0x1403, /* Friend Function */ + CV5_LF_INDEX = 0x1404, /* Index To Another Type Record */ + CV5_LF_MEMBER = 0x1405, /* Data Member */ + CV5_LF_STMEMBER = 0x1406, /* Static Data Member */ + CV5_LF_METHOD = 0x1407, /* Method */ + CV5_LF_NESTTYPE = 0x1408, /* Nested Type Definition */ + CV5_LF_VFUNCTAB = 0x1409, /* Virtual Function Table Pointer */ + CV5_LF_FRIENDCLS = 0x140a, /* Friend Class */ + CV5_LF_ONEMETHOD = 0x140b, /* One Method */ + CV5_LF_VFUNCOFF = 0x140c, /* Virtual Function Offset */ + CV5_LF_NESTTYPEEX = 0x140d, /* Nested Type Extended Definition */ + CV5_LF_MEMBERMODIFY = 0x140e, /* Member Modification */ + /* XXX: CodeView 5.0 spec also lists 0x040f as LF_MEMBERMODIFY? */ + + /* Leaf indices for numeric fields of symbols and type records */ + CV_LF_NUMERIC = 0x8000, + CV_LF_CHAR = 0x8000, /* Signed Char (8-bit) */ + CV_LF_SHORT = 0x8001, /* Signed Short (16-bit) */ + CV_LF_USHORT = 0x8002, /* Unsigned Short (16-bit) */ + CV_LF_LONG = 0x8003, /* Signed Long (32-bit) */ + CV_LF_ULONG = 0x8004, /* Unsigned Long (32-bit) */ + CV_LF_REAL32 = 0x8005, /* 32-bit Float */ + CV_LF_REAL64 = 0x8006, /* 64-bit Float */ + CV_LF_REAL80 = 0x8007, /* 80-bit Float */ + CV_LF_REAL128 = 0x8008, /* 128-bit Float */ + CV_LF_QUADWORD = 0x8009, /* Signed Quad Word (64-bit) */ + CV_LF_UQUADWORD = 0x800a, /* Unsigned Quad Word (64-bit) */ + CV_LF_REAL48 = 0x800b, /* 48-bit Float */ + CV_LF_COMPLEX32 = 0x800c, /* 32-bit Complex */ + CV_LF_COMPLEX64 = 0x800d, /* 64-bit Complex */ + CV_LF_COMPLEX80 = 0x800e, /* 80-bit Complex */ + CV_LF_COMPLEX128 = 0x800f, /* 128-bit Complex */ + CV_LF_VARSTRING = 0x8010, /* Variable-length String */ + + /* Leaf padding bytes */ + CV_LF_PAD0 = 0xf0, + CV_LF_PAD1 = 0xf1, + CV_LF_PAD2 = 0xf2, + CV_LF_PAD3 = 0xf3, + CV_LF_PAD4 = 0xf4, + CV_LF_PAD5 = 0xf5, + CV_LF_PAD6 = 0xf6, + CV_LF_PAD7 = 0xf7, + CV_LF_PAD8 = 0xf8, + CV_LF_PAD9 = 0xf9, + CV_LF_PAD10 = 0xfa, + CV_LF_PAD11 = 0xfb, + CV_LF_PAD12 = 0xfc, + CV_LF_PAD13 = 0xfc, + CV_LF_PAD14 = 0xfe, + CV_LF_PAD15 = 0xff +}; + +/* Leaves use a bit of meta-programming to encode formats: each character + * of format represents the output generated, as follows: + * 'b' : 1 byte value (integer) + * 'h' : 2 byte value (integer) + * 'w' : 4 byte value (integer) + * 'L' : subleaf, recurses into cv_leaf (pointer) + * 'T' : 4 byte type index, pulls cv_type.index from cv_type (pointer) + * 'S' : length-prefixed string (pointer) + */ +typedef struct cv_leaf { + enum cv_leaftype type; + const char *format; /* format of args */ + union { + unsigned long i; + void *p; + } args[6]; +} cv_leaf; + +typedef struct cv_type { + unsigned long indx; /* type # (must be same as output order) */ + size_t num_leaves; + /*@null@*/ /*@only@*/ cv_leaf **leaves; +} cv_type; + +/* Bytecode callback function prototypes */ +static void cv_type_bc_destroy(void *contents); +static void cv_type_bc_print(const void *contents, FILE *f, int indent_level); +static int cv_type_bc_calc_len + (yasm_bytecode *bc, yasm_bc_add_span_func add_span, void *add_span_data); +static int cv_type_bc_tobytes + (yasm_bytecode *bc, unsigned char **bufp, unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +/* Bytecode callback structures */ +static const yasm_bytecode_callback cv_type_bc_callback = { + cv_type_bc_destroy, + cv_type_bc_print, + yasm_bc_finalize_common, + NULL, + cv_type_bc_calc_len, + yasm_bc_expand_common, + cv_type_bc_tobytes, + 0 +}; + +static cv_type *cv_type_create(unsigned long indx); +static void cv_type_append_leaf(cv_type *type, /*@keep@*/ cv_leaf *leaf); + + +static cv_leaf * +cv_leaf_create_label(int is_far) +{ + cv_leaf *leaf = yasm_xmalloc(sizeof(cv_leaf)); + leaf->type = CV5_LF_LABEL; + leaf->format = "h"; + leaf->args[0].i = is_far ? 4 : 0; + return leaf; +} + +yasm_section * +yasm_cv__generate_type(yasm_object *object) +{ + int new; + unsigned long indx = CV_FIRST_NONPRIM; + yasm_section *debug_type; + yasm_bytecode *bc; + cv_type *type; + + debug_type = + yasm_object_get_general(object, ".debug$T", 1, 0, 0, &new, 0); + + /* Add label type */ + type = cv_type_create(indx++); + cv_type_append_leaf(type, cv_leaf_create_label(0)); + bc = yasm_bc_create_common(&cv_type_bc_callback, type, 0); + yasm_bc_finalize(bc, yasm_cv__append_bc(debug_type, bc)); + yasm_bc_calc_len(bc, NULL, NULL); + + return debug_type; +} + +static void +cv_leaf_destroy(cv_leaf *leaf) +{ + const char *ch = leaf->format; + int arg = 0; + + while (*ch) { + switch (*ch) { + case 'b': + case 'h': + case 'w': + arg++; + break; /* nothing to destroy */ + case 'L': + cv_leaf_destroy((cv_leaf *)leaf->args[arg++].p); + break; + case 'T': + arg++; /* nothing to destroy */ + break; + case 'S': + yasm_xfree(leaf->args[arg++].p); + break; + default: + yasm_internal_error(N_("unknown leaf format character")); + } + ch++; + } +} + +static unsigned long +cv_leaf_size(const cv_leaf *leaf) +{ + const char *ch = leaf->format; + unsigned long len = 2; /* leaf type */ + unsigned long slen; + int arg = 0; + + while (*ch) { + switch (*ch) { + case 'b': + len++; + arg++; + break; + case 'h': + len += 2; + arg++; + break; + case 'w': + len += 4; + arg++; + break; + case 'L': + len += cv_leaf_size((const cv_leaf *)leaf->args[arg++].p); + break; + case 'T': + len += 4; /* XXX: will be 2 in CV4 */ + arg++; + break; + case 'S': + len += 1; /* XXX: is this 1 or 2? */ + slen = (unsigned long)strlen((const char *)leaf->args[arg++].p); + len += slen <= 0xff ? slen : 0xff; + break; + default: + yasm_internal_error(N_("unknown leaf format character")); + } + ch++; + } + + return len; +} + +static void +cv_leaf_tobytes(const cv_leaf *leaf, yasm_bytecode *bc, yasm_arch *arch, + unsigned char **bufp, yasm_intnum *cval) +{ + unsigned char *buf = *bufp; + const char *ch = leaf->format; + size_t len; + int arg = 0; + + /* leaf type */ + yasm_intnum_set_uint(cval, leaf->type); + yasm_arch_intnum_tobytes(arch, cval, buf, 2, 16, 0, bc, 0); + buf += 2; + + while (*ch) { + switch (*ch) { + case 'b': + YASM_WRITE_8(buf, leaf->args[arg].i); + arg++; + break; + case 'h': + yasm_intnum_set_uint(cval, leaf->args[arg++].i); + yasm_arch_intnum_tobytes(arch, cval, buf, 2, 16, 0, bc, 0); + buf += 2; + break; + case 'w': + yasm_intnum_set_uint(cval, leaf->args[arg++].i); + yasm_arch_intnum_tobytes(arch, cval, buf, 4, 32, 0, bc, 0); + buf += 4; + break; + case 'L': + cv_leaf_tobytes((const cv_leaf *)leaf->args[arg++].p, bc, arch, + &buf, cval); + break; + case 'T': + yasm_intnum_set_uint(cval, + ((const cv_type *)leaf->args[arg++].p)->indx); + yasm_arch_intnum_tobytes(arch, cval, buf, 4, 32, 0, bc, 0); + buf += 4; /* XXX: will be 2 in CV4 */ + break; + case 'S': + len = strlen((const char *)leaf->args[arg].p); + len = len <= 0xff ? len : 0xff; + YASM_WRITE_8(buf, len); + memcpy(buf, (const char *)leaf->args[arg].p, len); + buf += len; + arg++; + break; + default: + yasm_internal_error(N_("unknown leaf format character")); + } + ch++; + } + + *bufp = buf; +} + +static cv_type * +cv_type_create(unsigned long indx) +{ + cv_type *type = yasm_xmalloc(sizeof(cv_type)); + + type->indx = indx; + type->num_leaves = 0; + type->leaves = NULL; + + return type; +} + +static void +cv_type_append_leaf(cv_type *type, /*@keep@*/ cv_leaf *leaf) +{ + type->num_leaves++; + + /* This is inefficient for large numbers of leaves, but that won't happen + * until we add structure support. + */ + type->leaves = yasm_xrealloc(type->leaves, + type->num_leaves*sizeof(cv_leaf *)); + + type->leaves[type->num_leaves-1] = leaf; +} + +static void +cv_type_bc_destroy(void *contents) +{ + cv_type *type = (cv_type *)contents; + size_t i; + + for (i=0; inum_leaves; i++) + cv_leaf_destroy(type->leaves[i]); + if (type->leaves) + yasm_xfree(type->leaves); + yasm_xfree(contents); +} + +static void +cv_type_bc_print(const void *contents, FILE *f, int indent_level) +{ + /* TODO */ +} + +static int +cv_type_bc_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + cv_type *type = (cv_type *)bc->contents; + size_t i; + + if (type->indx == CV_FIRST_NONPRIM) + bc->len = 4+2; + else + bc->len = 2; + + for (i=0; inum_leaves; i++) + bc->len += cv_leaf_size(type->leaves[i]); + + /* Pad to multiple of 4 */ + if (bc->len & 0x3) + bc->len += 4-(bc->len & 0x3); + + return 0; +} + +static int +cv_type_bc_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + yasm_output_reloc_func output_reloc) +{ + yasm_object *object = yasm_section_get_object(bc->section); + cv_type *type = (cv_type *)bc->contents; + unsigned char *buf = *bufp; + yasm_intnum *cval; + size_t i; + unsigned long reclen = bc->len - 2; + + cval = yasm_intnum_create_uint(4); /* version */ + if (type->indx == CV_FIRST_NONPRIM) { + yasm_arch_intnum_tobytes(object->arch, cval, buf, 4, 32, 0, bc, 1); + buf += 4; + reclen -= 4; + } + + /* Total length of record (following this field) - 2 bytes */ + yasm_intnum_set_uint(cval, reclen); + yasm_arch_intnum_tobytes(object->arch, cval, buf, 2, 16, 0, bc, 1); + buf += 2; + + /* Leaves */ + for (i=0; inum_leaves; i++) + cv_leaf_tobytes(type->leaves[i], bc, object->arch, &buf, cval); + + /* Pad to multiple of 4 */ + switch ((buf-(*bufp)) & 0x3) { + case 3: + YASM_WRITE_8(buf, CV_LF_PAD3); + case 2: + YASM_WRITE_8(buf, CV_LF_PAD2); + case 1: + YASM_WRITE_8(buf, CV_LF_PAD1); + case 0: + break; + } + + *bufp = buf; + + yasm_intnum_destroy(cval); + return 0; +} diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv8.txt b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv8.txt new file mode 100644 index 0000000000..a4bbdd8ea3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/codeview/cv8.txt @@ -0,0 +1,96 @@ + CV8 structures (for x86 and AMD64) - used by MSVC 8 (2005) + Everything listed in the order MASM seems to output it in. + +.debug$S: symbol and line number information + 4 bytes - version (4) + +Each major portion of DEBUG$S starts with 4 byte type, 4 byte length +(in bytes following the length field). Each set is 4-byte aligned with 0s at +the end (not included in length). + +0x000000F3: source filename string table + 1 byte - 0 (0th filename) + 0-terminated filename strings, 1 for each source file + +0x000000F4: source file info + for each source file: + 4 bytes - offset of filename in source filename string table + {2 bytes - checksum type/length? (0x0110) + 16 bytes - MD5 checksum of source file} OR + {2 bytes - no checksum (0)} + 2 bytes - 0 (padding?) + +0x000000F2: line numbers for section + 4 bytes - start offset in section (SECREL to section start) + 2 bytes - section index (SECTION to section start) + 2 bytes - pad/align (0) + 4 bytes - section length covered by line number info + + followed by one or more source mappings: + 4 bytes - offset of source file in source file info table + 4 bytes - number of line number pairs + 4 bytes - number of bytes this mapping takes, i.e. 12 + pair-count * 8. + + followed by pairs of: + 4 bytes - offset in section + 4 bytes - line number; if high bit is set, + end of statement/breakpointable (?) - e.g. lines containing + just labels should have line numbers + +0x000000F1: symbol information + enclosed data per below + (each element starts with 2 byte length, 2 byte type) + basically slightly updated versions of CV5 symbol info with 0-terminated + rather than length-prefixed strings + +0x1101 : Name of object file + 4 byte signature (0 for asm) + 0-terminated object filename +0x1116 : creator signature (compile flag) + 4 bytes - language (3=Masm) + 4 bytes - target processor (0xD0 = AMD64) + 4 bytes - flags + 4 bytes - version + 2 bytes - ? + 0-terminated string containing creator name + pairs of 0-terminated strings - keys/values + from CL: + cwd - current working directory + cl - full path of compiler executable + cmd - full args (one long string, double-quoted args if needed) + src - relative path to source (from cwd) + pdb - full path to pdb file + ML doesn't output any pairs + pairs list terminated with two empty strings +0x1105 : Code Label 16:32/64 + 4 bytes SECREL of symbol + 2 bytes SECTION of symbol + 1 byte - flags + 0-terminated string containing symbol name +0x110C : local data 16:32/64 + 4 bytes type index of symbol + 4 bytes SECREL of symbol + 2 bytes SECTION of symbol + 0-terminated string containing symbol name +0x110D : global data 16:32/64 + 4 bytes type index of symbol + 4 bytes SECREL of symbol + 2 bytes SECTION of symbol + 0-terminated string containing symbol name +0x1110 : local/global (?) procedure start 16:32/64 + 4 bytes - parent + 4 bytes - pend + 4 bytes - pnext + 4 bytes - procedure length (bytes) + 4 bytes - debug start (offset from procedure start to frame setup) + 4 bytes - debug end (offset from procedure start to frame cleanup) + 4 bytes - type index of procedure type + 4 bytes - offset of procedure (SECREL of symbol) + 2 bytes - segment of procedure (SECTION of symbol) + 1 byte - flags + 0-terminated string containing procedure name + +.debug$T: type information + 4 bytes - version (4) + followed by type information per CV5 spec, padded to 4-byte boundaries + diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/CMakeLists.txt new file mode 100644 index 0000000000..671910ee30 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/CMakeLists.txt @@ -0,0 +1,6 @@ +YASM_ADD_MODULE(dbgfmt_dwarf2 + dbgfmts/dwarf2/dwarf2-dbgfmt.c + dbgfmts/dwarf2/dwarf2-line.c + dbgfmts/dwarf2/dwarf2-aranges.c + dbgfmts/dwarf2/dwarf2-info.c + ) diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/Makefile.inc new file mode 100644 index 0000000000..606b699eec --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/Makefile.inc @@ -0,0 +1,10 @@ +libyasm_a_SOURCES += modules/dbgfmts/dwarf2/dwarf2-dbgfmt.h +libyasm_a_SOURCES += modules/dbgfmts/dwarf2/dwarf2-dbgfmt.c +libyasm_a_SOURCES += modules/dbgfmts/dwarf2/dwarf2-line.c +libyasm_a_SOURCES += modules/dbgfmts/dwarf2/dwarf2-aranges.c +libyasm_a_SOURCES += modules/dbgfmts/dwarf2/dwarf2-info.c + +YASM_MODULES += dbgfmt_dwarf2 + +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/Makefile.inc +include modules/dbgfmts/dwarf2/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-aranges.c b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-aranges.c new file mode 100644 index 0000000000..f398b7fa72 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-aranges.c @@ -0,0 +1,125 @@ +/* + * DWARF2 debugging format - address range table + * + * Copyright (C) 2006-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "dwarf2-dbgfmt.h" + + +static void +dwarf2_append_arange(yasm_section *debug_aranges, /*@only@*/ yasm_expr *start, + /*@only@*/ yasm_expr *length, unsigned int sizeof_address) +{ + yasm_datavalhead dvs; + yasm_bytecode *bc; + + yasm_dvs_initialize(&dvs); + yasm_dvs_append(&dvs, yasm_dv_create_expr(start)); + yasm_dvs_append(&dvs, yasm_dv_create_expr(length)); + bc = yasm_bc_create_data(&dvs, sizeof_address, 0, NULL, 0); + yasm_bc_finalize(bc, yasm_dwarf2__append_bc(debug_aranges, bc)); + yasm_bc_calc_len(bc, NULL, NULL); +} + +typedef struct dwarf2_aranges_info { + yasm_section *debug_aranges; /* section to which address ranges go */ + yasm_object *object; + yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2; +} dwarf2_aranges_info; + +static int +dwarf2_generate_aranges_section(yasm_section *sect, /*@null@*/ void *d) +{ + dwarf2_aranges_info *info = (dwarf2_aranges_info *)d; + yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2 = info->dbgfmt_dwarf2; + /*@null@*/ dwarf2_section_data *dsd; + /*@only@*/ yasm_expr *start, *length; + + dsd = yasm_section_get_data(sect, &yasm_dwarf2__section_data_cb); + if (!dsd) + return 0; /* no line data for this section */ + + /* Create address range descriptor */ + start = yasm_expr_create_ident( + yasm_expr_sym(yasm_dwarf2__bc_sym(info->object->symtab, + yasm_section_bcs_first(sect))), 0); + length = yasm_expr_create_ident( + yasm_expr_int(yasm_calc_bc_dist(yasm_section_bcs_first(sect), + yasm_section_bcs_last(sect))), 0); + dwarf2_append_arange(info->debug_aranges, start, length, + dbgfmt_dwarf2->sizeof_address); + + return 0; +} + +yasm_section * +yasm_dwarf2__generate_aranges(yasm_object *object, yasm_section *debug_info) +{ + yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2 = (yasm_dbgfmt_dwarf2 *)object->dbgfmt; + int new; + yasm_section *debug_aranges; + yasm_bytecode *bc; + dwarf2_head *head; + dwarf2_aranges_info info; + + debug_aranges = + yasm_object_get_general(object, ".debug_aranges", + 2*dbgfmt_dwarf2->sizeof_address, 0, 0, &new, + 0); + + /* header */ + head = yasm_dwarf2__add_head(dbgfmt_dwarf2, debug_aranges, debug_info, 1, + 1); + + /* align ranges to 2x address size (range size) */ + bc = yasm_bc_create_align( + yasm_expr_create_ident(yasm_expr_int( + yasm_intnum_create_uint(dbgfmt_dwarf2->sizeof_address*2)), 0), + NULL, NULL, NULL, 0); + yasm_bc_finalize(bc, yasm_dwarf2__append_bc(debug_aranges, bc)); + yasm_bc_calc_len(bc, NULL, NULL); + + info.debug_aranges = debug_aranges; + info.object = object; + info.dbgfmt_dwarf2 = dbgfmt_dwarf2; + + yasm_object_sections_traverse(object, (void *)&info, + dwarf2_generate_aranges_section); + + /* Terminate with empty address range descriptor */ + dwarf2_append_arange(debug_aranges, + yasm_expr_create_ident(yasm_expr_int(yasm_intnum_create_uint(0)), 0), + yasm_expr_create_ident(yasm_expr_int(yasm_intnum_create_uint(0)), 0), + dbgfmt_dwarf2->sizeof_address); + + /* mark end of aranges information */ + yasm_dwarf2__set_head_end(head, yasm_section_bcs_last(debug_aranges)); + + return debug_aranges; +} + diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-dbgfmt.c b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-dbgfmt.c new file mode 100644 index 0000000000..5b66f8a70f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-dbgfmt.c @@ -0,0 +1,348 @@ +/* + * DWARF2 debugging format + * + * Copyright (C) 2006-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "dwarf2-dbgfmt.h" + +struct dwarf2_head { + yasm_bytecode *start_prevbc; + yasm_bytecode *end_prevbc; + /*@null@*/ yasm_section *debug_ptr; + int with_address; + int with_segment; +}; + +/* Bytecode callback function prototypes */ +static void dwarf2_head_bc_destroy(void *contents); +static void dwarf2_head_bc_print(const void *contents, FILE *f, + int indent_level); +static int dwarf2_head_bc_calc_len + (yasm_bytecode *bc, yasm_bc_add_span_func add_span, void *add_span_data); +static int dwarf2_head_bc_tobytes + (yasm_bytecode *bc, unsigned char **bufp, unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +/* Bytecode callback structures */ +static const yasm_bytecode_callback dwarf2_head_bc_callback = { + dwarf2_head_bc_destroy, + dwarf2_head_bc_print, + yasm_bc_finalize_common, + NULL, + dwarf2_head_bc_calc_len, + yasm_bc_expand_common, + dwarf2_head_bc_tobytes, + 0 +}; + +/* Section data callback function prototypes */ +static void dwarf2_section_data_destroy(void *data); +static void dwarf2_section_data_print(void *data, FILE *f, int indent_level); + +/* Section data callback */ +const yasm_assoc_data_callback yasm_dwarf2__section_data_cb = { + dwarf2_section_data_destroy, + dwarf2_section_data_print +}; + +yasm_dbgfmt_module yasm_dwarf2_LTX_dbgfmt; + + +static /*@null@*/ /*@only@*/ yasm_dbgfmt * +dwarf2_dbgfmt_create(yasm_object *object) +{ + yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2 = + yasm_xmalloc(sizeof(yasm_dbgfmt_dwarf2)); + size_t i; + + dbgfmt_dwarf2->dbgfmt.module = &yasm_dwarf2_LTX_dbgfmt; + + dbgfmt_dwarf2->dirs_allocated = 32; + dbgfmt_dwarf2->dirs_size = 0; + dbgfmt_dwarf2->dirs = + yasm_xmalloc(sizeof(char *)*dbgfmt_dwarf2->dirs_allocated); + + dbgfmt_dwarf2->filenames_allocated = 32; + dbgfmt_dwarf2->filenames_size = 0; + dbgfmt_dwarf2->filenames = + yasm_xmalloc(sizeof(dwarf2_filename)*dbgfmt_dwarf2->filenames_allocated); + for (i=0; ifilenames_allocated; i++) { + dbgfmt_dwarf2->filenames[i].pathname = NULL; + dbgfmt_dwarf2->filenames[i].filename = NULL; + dbgfmt_dwarf2->filenames[i].dir = 0; + } + + dbgfmt_dwarf2->format = DWARF2_FORMAT_32BIT; /* TODO: flexible? */ + + dbgfmt_dwarf2->sizeof_address = yasm_arch_get_address_size(object->arch)/8; + switch (dbgfmt_dwarf2->format) { + case DWARF2_FORMAT_32BIT: + dbgfmt_dwarf2->sizeof_offset = 4; + break; + case DWARF2_FORMAT_64BIT: + dbgfmt_dwarf2->sizeof_offset = 8; + break; + } + dbgfmt_dwarf2->min_insn_len = yasm_arch_min_insn_len(object->arch); + + return (yasm_dbgfmt *)dbgfmt_dwarf2; +} + +static void +dwarf2_dbgfmt_destroy(/*@only@*/ yasm_dbgfmt *dbgfmt) +{ + yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2 = (yasm_dbgfmt_dwarf2 *)dbgfmt; + size_t i; + for (i=0; idirs_size; i++) + if (dbgfmt_dwarf2->dirs[i]) + yasm_xfree(dbgfmt_dwarf2->dirs[i]); + yasm_xfree(dbgfmt_dwarf2->dirs); + for (i=0; ifilenames_size; i++) { + if (dbgfmt_dwarf2->filenames[i].pathname) + yasm_xfree(dbgfmt_dwarf2->filenames[i].pathname); + if (dbgfmt_dwarf2->filenames[i].filename) + yasm_xfree(dbgfmt_dwarf2->filenames[i].filename); + } + yasm_xfree(dbgfmt_dwarf2->filenames); + yasm_xfree(dbgfmt); +} + +/* Add a bytecode to a section, updating offset on insertion; + * no optimization necessary. + */ +yasm_bytecode * +yasm_dwarf2__append_bc(yasm_section *sect, yasm_bytecode *bc) +{ + yasm_bytecode *precbc = yasm_section_bcs_last(sect); + bc->offset = yasm_bc_next_offset(precbc); + yasm_section_bcs_append(sect, bc); + return precbc; +} + +static void +dwarf2_dbgfmt_generate(yasm_object *object, yasm_linemap *linemap, + yasm_errwarns *errwarns) +{ + yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2 = (yasm_dbgfmt_dwarf2 *)object->dbgfmt; + size_t num_line_sections; + /*@null@*/ yasm_section *debug_info, *debug_line, *main_code; + + /* If we don't have any .file directives, generate line information + * based on the asm source. + */ + debug_line = yasm_dwarf2__generate_line(object, linemap, errwarns, + dbgfmt_dwarf2->filenames_size == 0, + &main_code, &num_line_sections); + + /* If we don't have a .debug_info (or it's empty), generate the minimal + * set of .debug_info, .debug_aranges, and .debug_abbrev so that the + * .debug_line we're generating is actually useful. + */ + debug_info = yasm_object_find_general(object, ".debug_info"); + if (num_line_sections > 0 && + (!debug_info || yasm_section_bcs_first(debug_info) + == yasm_section_bcs_last(debug_info))) { + debug_info = yasm_dwarf2__generate_info(object, debug_line, main_code); + yasm_dwarf2__generate_aranges(object, debug_info); + /*yasm_dwarf2__generate_pubnames(object, debug_info);*/ + } +} + +yasm_symrec * +yasm_dwarf2__bc_sym(yasm_symtab *symtab, yasm_bytecode *bc) +{ + /*@dependent@*/ yasm_symrec *sym; + if (bc->symrecs && bc->symrecs[0]) + sym = bc->symrecs[0]; + else + sym = yasm_symtab_define_label(symtab, ".bcsym", bc, 0, 0); + return sym; +} + +dwarf2_head * +yasm_dwarf2__add_head + (yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2, yasm_section *sect, + /*@null@*/ yasm_section *debug_ptr, int with_address, int with_segment) +{ + dwarf2_head *head; + yasm_bytecode *bc; + + head = yasm_xmalloc(sizeof(dwarf2_head)); + head->start_prevbc = yasm_section_bcs_last(sect); + + bc = yasm_bc_create_common(&dwarf2_head_bc_callback, head, 0); + bc->len = dbgfmt_dwarf2->sizeof_offset + 2; + if (dbgfmt_dwarf2->format == DWARF2_FORMAT_64BIT) + bc->len += 4; + + if (debug_ptr) { + head->debug_ptr = debug_ptr; + bc->len += dbgfmt_dwarf2->sizeof_offset; + } else + head->debug_ptr = NULL; + + head->with_address = with_address; + head->with_segment = with_segment; + if (with_address) + bc->len++; + if (with_segment) + bc->len++; + + head->end_prevbc = bc; + yasm_dwarf2__append_bc(sect, bc); + return head; +} + +void +yasm_dwarf2__set_head_end(dwarf2_head *head, yasm_bytecode *end_prevbc) +{ + head->end_prevbc = end_prevbc; +} + +static void +dwarf2_head_bc_destroy(void *contents) +{ + yasm_xfree(contents); +} + +static void +dwarf2_head_bc_print(const void *contents, FILE *f, int indent_level) +{ + /* TODO */ +} + +static int +dwarf2_head_bc_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + yasm_internal_error(N_("tried to calc_len a dwarf2 head bytecode")); + /*@notreached@*/ + return 0; +} + +static int +dwarf2_head_bc_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + yasm_output_reloc_func output_reloc) +{ + yasm_object *object = yasm_section_get_object(bc->section); + yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2 = (yasm_dbgfmt_dwarf2 *)object->dbgfmt; + dwarf2_head *head = (dwarf2_head *)bc->contents; + unsigned char *buf = *bufp; + yasm_intnum *intn, *cval; + + if (dbgfmt_dwarf2->format == DWARF2_FORMAT_64BIT) { + YASM_WRITE_8(buf, 0xff); + YASM_WRITE_8(buf, 0xff); + YASM_WRITE_8(buf, 0xff); + YASM_WRITE_8(buf, 0xff); + } + + /* Total length of aranges info (following this field) */ + cval = yasm_intnum_create_uint(dbgfmt_dwarf2->sizeof_offset); + intn = yasm_calc_bc_dist(head->start_prevbc, head->end_prevbc); + yasm_intnum_calc(intn, YASM_EXPR_SUB, cval); + yasm_arch_intnum_tobytes(object->arch, intn, buf, + dbgfmt_dwarf2->sizeof_offset, + dbgfmt_dwarf2->sizeof_offset*8, 0, bc, 0); + buf += dbgfmt_dwarf2->sizeof_offset; + yasm_intnum_destroy(intn); + + /* DWARF version */ + yasm_intnum_set_uint(cval, 2); + yasm_arch_intnum_tobytes(object->arch, cval, buf, 2, 16, 0, bc, 0); + buf += 2; + + /* Pointer to another debug section */ + if (head->debug_ptr) { + yasm_value value; + yasm_value_init_sym(&value, + yasm_dwarf2__bc_sym(object->symtab, + yasm_section_bcs_first(head->debug_ptr)), + dbgfmt_dwarf2->sizeof_offset*8); + output_value(&value, buf, dbgfmt_dwarf2->sizeof_offset, + (unsigned long)(buf-bufstart), bc, 0, d); + buf += dbgfmt_dwarf2->sizeof_offset; + } + + /* Size of the offset portion of the address */ + if (head->with_address) + YASM_WRITE_8(buf, dbgfmt_dwarf2->sizeof_address); + + /* Size of a segment descriptor. 0 = flat address space */ + if (head->with_segment) + YASM_WRITE_8(buf, 0); + + *bufp = buf; + + yasm_intnum_destroy(cval); + return 0; +} + +static void +dwarf2_section_data_destroy(void *data) +{ + dwarf2_section_data *dsd = data; + dwarf2_loc *n1, *n2; + + /* Delete locations */ + n1 = STAILQ_FIRST(&dsd->locs); + while (n1) { + n2 = STAILQ_NEXT(n1, link); + yasm_xfree(n1); + n1 = n2; + } + + yasm_xfree(data); +} + +static void +dwarf2_section_data_print(void *data, FILE *f, int indent_level) +{ + /* TODO */ +} + +static const yasm_directive dwarf2_directives[] = { + { ".loc", "gas", yasm_dwarf2__dir_loc, YASM_DIR_ARG_REQUIRED }, + { ".file", "gas", yasm_dwarf2__dir_file, YASM_DIR_ARG_REQUIRED }, + { "loc", "nasm", yasm_dwarf2__dir_loc, YASM_DIR_ARG_REQUIRED }, + { "file", "nasm", yasm_dwarf2__dir_file, YASM_DIR_ARG_REQUIRED }, + { NULL, NULL, NULL, 0 } +}; + +/* Define dbgfmt structure -- see dbgfmt.h for details */ +yasm_dbgfmt_module yasm_dwarf2_LTX_dbgfmt = { + "DWARF2 debugging format", + "dwarf2", + dwarf2_directives, + dwarf2_dbgfmt_create, + dwarf2_dbgfmt_destroy, + dwarf2_dbgfmt_generate +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-dbgfmt.h b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-dbgfmt.h new file mode 100644 index 0000000000..03752345cd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-dbgfmt.h @@ -0,0 +1,131 @@ +/* + * DWARF2 debugging format + * + * Copyright (C) 2006-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + */ +#ifndef YASM_DWARF2_DBGFMT_H +#define YASM_DWARF2_DBGFMT_H + +#define WITH_DWARF3 1 + +typedef struct { + char *pathname; /* full filename */ + char *filename; /* basename of full filename */ + unsigned long dir; /* index into directories array for relative path; + * 0 for current directory. */ +} dwarf2_filename; + +/* Global data */ +typedef struct yasm_dbgfmt_dwarf2 { + yasm_dbgfmt_base dbgfmt; /* base structure */ + + char **dirs; + unsigned long dirs_size; + unsigned long dirs_allocated; + + dwarf2_filename *filenames; + unsigned long filenames_size; + unsigned long filenames_allocated; + + enum { + DWARF2_FORMAT_32BIT, + DWARF2_FORMAT_64BIT + } format; + + unsigned int sizeof_address, sizeof_offset, min_insn_len; +} yasm_dbgfmt_dwarf2; + +/* .loc directive data */ +typedef struct dwarf2_loc { + /*@reldef@*/ STAILQ_ENTRY(dwarf2_loc) link; + + unsigned long vline; /* virtual line number of .loc directive */ + + /* source information */ + unsigned long file; /* index into table of filenames */ + unsigned long line; /* source line number */ + unsigned long column; /* source column */ + unsigned long discriminator; + int isa_change; + unsigned long isa; + enum { + IS_STMT_NOCHANGE = 0, + IS_STMT_SET, + IS_STMT_CLEAR + } is_stmt; + int basic_block; + int prologue_end; + int epilogue_begin; + + yasm_bytecode *bc; /* first bytecode following */ + yasm_symrec *sym; /* last symbol preceding */ +} dwarf2_loc; + +/* Per-section data */ +typedef struct dwarf2_section_data { + /* The locations set by the .loc directives in this section, in assembly + * source order. + */ + /*@reldef@*/ STAILQ_HEAD(dwarf2_lochead, dwarf2_loc) locs; +} dwarf2_section_data; + +extern const yasm_assoc_data_callback yasm_dwarf2__section_data_cb; + +yasm_bytecode *yasm_dwarf2__append_bc(yasm_section *sect, yasm_bytecode *bc); + +/*@dependent@*/ yasm_symrec *yasm_dwarf2__bc_sym(yasm_symtab *symtab, + yasm_bytecode *bc); + +typedef struct dwarf2_head dwarf2_head; +dwarf2_head *yasm_dwarf2__add_head + (yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2, yasm_section *sect, + /*@null@*/ yasm_section *debug_ptr, int with_address, int with_segment); +void yasm_dwarf2__set_head_end(dwarf2_head *head, yasm_bytecode *end_prevbc); + +/* Line number functions */ +yasm_section *yasm_dwarf2__generate_line + (yasm_object *object, yasm_linemap *linemap, yasm_errwarns *errwarns, + int asm_source, /*@out@*/ yasm_section **main_code, + /*@out@*/ size_t *num_line_sections); +void yasm_dwarf2__dir_loc(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, + unsigned long line); +void yasm_dwarf2__dir_file(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, + unsigned long line); + +/* Address range table functions */ +yasm_section *yasm_dwarf2__generate_aranges(yasm_object *object, + yasm_section *debug_info); + +/* Name lookup table functions */ +yasm_section *yasm_dwarf2__generate_pubnames(yasm_object *object, + yasm_section *debug_info); + +/* Information functions */ +yasm_section *yasm_dwarf2__generate_info + (yasm_object *object, yasm_section *debug_line, + /*@null@*/ yasm_section *main_code); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-info.c b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-info.c new file mode 100644 index 0000000000..7dbe43a97c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-info.c @@ -0,0 +1,429 @@ +/* + * DWARF2 debugging format - info and abbreviation tables + * + * Copyright (C) 2006-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "dwarf2-dbgfmt.h" + +#define DW_LANG_Mips_Assembler 0x8001 + +/* Tag encodings */ +typedef enum { + DW_TAG_padding = 0x00, + DW_TAG_array_type = 0x01, + DW_TAG_class_type = 0x02, + DW_TAG_entry_point = 0x03, + DW_TAG_enumeration_type = 0x04, + DW_TAG_formal_parameter = 0x05, + DW_TAG_imported_declaration = 0x08, + DW_TAG_label = 0x0a, + DW_TAG_lexical_block = 0x0b, + DW_TAG_member = 0x0d, + DW_TAG_pointer_type = 0x0f, + DW_TAG_reference_type = 0x10, + DW_TAG_compile_unit = 0x11, + DW_TAG_string_type = 0x12, + DW_TAG_structure_type = 0x13, + DW_TAG_subroutine_type = 0x15, + DW_TAG_typedef = 0x16, + DW_TAG_union_type = 0x17, + DW_TAG_unspecified_parameters = 0x18, + DW_TAG_variant = 0x19, + DW_TAG_common_block = 0x1a, + DW_TAG_common_inclusion = 0x1b, + DW_TAG_inheritance = 0x1c, + DW_TAG_inlined_subroutine = 0x1d, + DW_TAG_module = 0x1e, + DW_TAG_ptr_to_member_type = 0x1f, + DW_TAG_set_type = 0x20, + DW_TAG_subrange_type = 0x21, + DW_TAG_with_stmt = 0x22, + DW_TAG_access_declaration = 0x23, + DW_TAG_base_type = 0x24, + DW_TAG_catch_block = 0x25, + DW_TAG_const_type = 0x26, + DW_TAG_constant = 0x27, + DW_TAG_enumerator = 0x28, + DW_TAG_file_type = 0x29, + DW_TAG_friend = 0x2a, + DW_TAG_namelist = 0x2b, + DW_TAG_namelist_item = 0x2c, + DW_TAG_packed_type = 0x2d, + DW_TAG_subprogram = 0x2e, + DW_TAG_template_type_param = 0x2f, + DW_TAG_template_value_param = 0x30, + DW_TAG_thrown_type = 0x31, + DW_TAG_try_block = 0x32, + DW_TAG_variant_part = 0x33, + DW_TAG_variable = 0x34, + DW_TAG_volatile_type = 0x35 +} dwarf_tag; + +/* Attribute form encodings */ +typedef enum { + DW_FORM_addr = 0x01, + DW_FORM_block2 = 0x03, + DW_FORM_block4 = 0x04, + DW_FORM_data2 = 0x05, + DW_FORM_data4 = 0x06, + DW_FORM_data8 = 0x07, + DW_FORM_string = 0x08, + DW_FORM_block = 0x09, + DW_FORM_block1 = 0x0a, + DW_FORM_data1 = 0x0b, + DW_FORM_flag = 0x0c, + DW_FORM_sdata = 0x0d, + DW_FORM_strp = 0x0e, + DW_FORM_udata = 0x0f, + DW_FORM_ref_addr = 0x10, + DW_FORM_ref1 = 0x11, + DW_FORM_ref2 = 0x12, + DW_FORM_ref4 = 0x13, + DW_FORM_ref8 = 0x14, + DW_FORM_ref_udata = 0x15, + DW_FORM_indirect = 0x16 +} dwarf_form; + +/* Attribute encodings */ +typedef enum { + DW_AT_sibling = 0x01, + DW_AT_location = 0x02, + DW_AT_name = 0x03, + DW_AT_ordering = 0x09, + DW_AT_subscr_data = 0x0a, + DW_AT_byte_size = 0x0b, + DW_AT_bit_offset = 0x0c, + DW_AT_bit_size = 0x0d, + DW_AT_element_list = 0x0f, + DW_AT_stmt_list = 0x10, + DW_AT_low_pc = 0x11, + DW_AT_high_pc = 0x12, + DW_AT_language = 0x13, + DW_AT_member = 0x14, + DW_AT_discr = 0x15, + DW_AT_discr_value = 0x16, + DW_AT_visibility = 0x17, + DW_AT_import = 0x18, + DW_AT_string_length = 0x19, + DW_AT_common_reference = 0x1a, + DW_AT_comp_dir = 0x1b, + DW_AT_const_value = 0x1c, + DW_AT_containing_type = 0x1d, + DW_AT_default_value = 0x1e, + DW_AT_inline = 0x20, + DW_AT_is_optional = 0x21, + DW_AT_lower_bound = 0x22, + DW_AT_producer = 0x25, + DW_AT_prototyped = 0x27, + DW_AT_return_addr = 0x2a, + DW_AT_start_scope = 0x2c, + DW_AT_stride_size = 0x2e, + DW_AT_upper_bound = 0x2f, + DW_AT_abstract_origin = 0x31, + DW_AT_accessibility = 0x32, + DW_AT_address_class = 0x33, + DW_AT_artificial = 0x34, + DW_AT_base_types = 0x35, + DW_AT_calling_convention = 0x36, + DW_AT_count = 0x37, + DW_AT_data_member_location = 0x38, + DW_AT_decl_column = 0x39, + DW_AT_decl_file = 0x3a, + DW_AT_decl_line = 0x3b, + DW_AT_declaration = 0x3c, + DW_AT_discr_list = 0x3d, + DW_AT_encoding = 0x3e, + DW_AT_external = 0x3f, + DW_AT_frame_base = 0x40, + DW_AT_friend = 0x41, + DW_AT_identifier_case = 0x42, + DW_AT_macro_info = 0x43, + DW_AT_namelist_items = 0x44, + DW_AT_priority = 0x45, + DW_AT_segment = 0x46, + DW_AT_specification = 0x47, + DW_AT_static_link = 0x48, + DW_AT_type = 0x49, + DW_AT_use_location = 0x4a, + DW_AT_variable_parameter = 0x4b, + DW_AT_virtuality = 0x4c, + DW_AT_vtable_elem_location = 0x4d +} dwarf_attribute; + +typedef struct dwarf2_abbrev_attr { + STAILQ_ENTRY(dwarf2_abbrev_attr) link; + dwarf_attribute name; + dwarf_form form; +} dwarf2_abbrev_attr; + +typedef struct dwarf2_abbrev { + unsigned long id; + dwarf_tag tag; + int has_children; + STAILQ_HEAD(dwarf2_abbrev_attrhead, dwarf2_abbrev_attr) attrs; +} dwarf2_abbrev; + +/* Bytecode callback function prototypes */ + +static void dwarf2_abbrev_bc_destroy(void *contents); +static void dwarf2_abbrev_bc_print(const void *contents, FILE *f, + int indent_level); +static int dwarf2_abbrev_bc_calc_len + (yasm_bytecode *bc, yasm_bc_add_span_func add_span, void *add_span_data); +static int dwarf2_abbrev_bc_tobytes + (yasm_bytecode *bc, unsigned char **bufp, unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +/* Bytecode callback structures */ + +static const yasm_bytecode_callback dwarf2_abbrev_bc_callback = { + dwarf2_abbrev_bc_destroy, + dwarf2_abbrev_bc_print, + yasm_bc_finalize_common, + NULL, + dwarf2_abbrev_bc_calc_len, + yasm_bc_expand_common, + dwarf2_abbrev_bc_tobytes, + 0 +}; + + +static unsigned long +dwarf2_add_abbrev_attr(dwarf2_abbrev *abbrev, dwarf_attribute name, + dwarf_form form) +{ + dwarf2_abbrev_attr *attr = yasm_xmalloc(sizeof(dwarf2_abbrev_attr)); + attr->name = name; + attr->form = form; + STAILQ_INSERT_TAIL(&abbrev->attrs, attr, link); + return yasm_size_uleb128(name) + yasm_size_uleb128(form); +} + +static void +dwarf2_append_expr(yasm_section *sect, /*@only@*/ yasm_expr *expr, + unsigned int size, int leb) +{ + yasm_datavalhead dvs; + yasm_bytecode *bc; + + yasm_dvs_initialize(&dvs); + yasm_dvs_append(&dvs, yasm_dv_create_expr(expr)); + if (leb == 0) + bc = yasm_bc_create_data(&dvs, size, 0, NULL, 0); + else + bc = yasm_bc_create_leb128(&dvs, leb<0, 0); + yasm_bc_finalize(bc, yasm_dwarf2__append_bc(sect, bc)); + yasm_bc_calc_len(bc, NULL, NULL); +} + +static void +dwarf2_append_str(yasm_section *sect, const char *str) +{ + yasm_datavalhead dvs; + yasm_bytecode *bc; + + yasm_dvs_initialize(&dvs); + yasm_dvs_append(&dvs, yasm_dv_create_string(yasm__xstrdup(str), + strlen(str))); + bc = yasm_bc_create_data(&dvs, 1, 1, NULL, 0); + yasm_bc_finalize(bc, yasm_dwarf2__append_bc(sect, bc)); + yasm_bc_calc_len(bc, NULL, NULL); +} + +yasm_section * +yasm_dwarf2__generate_info(yasm_object *object, yasm_section *debug_line, + yasm_section *main_code) +{ + yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2 = (yasm_dbgfmt_dwarf2 *)object->dbgfmt; + int new; + yasm_bytecode *abc; + dwarf2_abbrev *abbrev; + dwarf2_head *head; + char *buf; + yasm_section *debug_abbrev = + yasm_object_get_general(object, ".debug_abbrev", 4, 0, 0, &new, 0); + yasm_section *debug_info = + yasm_object_get_general(object, ".debug_info", 4, 0, 0, &new, 0); + + yasm_section_set_align(debug_abbrev, 0, 0); + yasm_section_set_align(debug_info, 0, 0); + + /* Create abbreviation table entry for compilation unit */ + abbrev = yasm_xmalloc(sizeof(dwarf2_abbrev)); + abc = yasm_bc_create_common(&dwarf2_abbrev_bc_callback, abbrev, 0); + abbrev->id = 1; + abbrev->tag = DW_TAG_compile_unit; + abbrev->has_children = 0; + abc->len = yasm_size_uleb128(abbrev->id) + yasm_size_uleb128(abbrev->tag) + + 3; + STAILQ_INIT(&abbrev->attrs); + yasm_dwarf2__append_bc(debug_abbrev, abc); + + /* info header */ + head = yasm_dwarf2__add_head(dbgfmt_dwarf2, debug_info, debug_abbrev, 1, 0); + + /* Generate abbreviations at the same time as info (since they're linked + * and we're only generating one piece of info). + */ + + /* generating info using abbrev 1 */ + dwarf2_append_expr(debug_info, + yasm_expr_create_ident(yasm_expr_int(yasm_intnum_create_uint(1)), 0), + 0, 1); + + /* statement list (line numbers) */ + abc->len += dwarf2_add_abbrev_attr(abbrev, DW_AT_stmt_list, DW_FORM_data4); + dwarf2_append_expr(debug_info, + yasm_expr_create_ident(yasm_expr_sym( + yasm_dwarf2__bc_sym(object->symtab, + yasm_section_bcs_first(debug_line))), 0), + dbgfmt_dwarf2->sizeof_offset, 0); + + if (main_code) { + yasm_symrec *first; + first = yasm_dwarf2__bc_sym(object->symtab, + yasm_section_bcs_first(main_code)); + /* All code is contiguous in one section */ + abc->len += dwarf2_add_abbrev_attr(abbrev, DW_AT_low_pc, DW_FORM_addr); + dwarf2_append_expr(debug_info, + yasm_expr_create_ident(yasm_expr_sym(first), 0), + dbgfmt_dwarf2->sizeof_address, 0); + + abc->len += dwarf2_add_abbrev_attr(abbrev, DW_AT_high_pc, DW_FORM_addr); + dwarf2_append_expr(debug_info, + yasm_expr_create(YASM_EXPR_ADD, yasm_expr_sym(first), + yasm_expr_int(yasm_calc_bc_dist( + yasm_section_bcs_first(main_code), + yasm_section_bcs_last(main_code))), 0), + dbgfmt_dwarf2->sizeof_address, 0); + } + + /* input filename */ + abc->len += dwarf2_add_abbrev_attr(abbrev, DW_AT_name, DW_FORM_string); + dwarf2_append_str(debug_info, object->src_filename); + + /* compile directory (current working directory) */ + abc->len += dwarf2_add_abbrev_attr(abbrev, DW_AT_comp_dir, DW_FORM_string); + buf = yasm__getcwd(); + dwarf2_append_str(debug_info, buf); + yasm_xfree(buf); + + /* producer - assembler name */ + abc->len += dwarf2_add_abbrev_attr(abbrev, DW_AT_producer, DW_FORM_string); + if (getenv("YASM_TEST_SUITE")) + dwarf2_append_str(debug_info, "yasm HEAD"); + else + dwarf2_append_str(debug_info, PACKAGE_STRING); + + /* language - no standard code for assembler, use MIPS as a substitute */ + abc->len += dwarf2_add_abbrev_attr(abbrev, DW_AT_language, DW_FORM_data2); + dwarf2_append_expr(debug_info, + yasm_expr_create_ident(yasm_expr_int( + yasm_intnum_create_uint(DW_LANG_Mips_Assembler)), 0), 2, 0); + + /* Terminate list of abbreviations */ + abbrev = yasm_xmalloc(sizeof(dwarf2_abbrev)); + abc = yasm_bc_create_common(&dwarf2_abbrev_bc_callback, abbrev, 0); + abbrev->id = 0; + abbrev->tag = 0; + abbrev->has_children = 0; + STAILQ_INIT(&abbrev->attrs); + abc->len = 1; + yasm_dwarf2__append_bc(debug_abbrev, abc); + + /* mark end of info */ + yasm_dwarf2__set_head_end(head, yasm_section_bcs_last(debug_info)); + + return debug_info; +} + +static void +dwarf2_abbrev_bc_destroy(void *contents) +{ + dwarf2_abbrev *abbrev = (dwarf2_abbrev *)contents; + dwarf2_abbrev_attr *n1, *n2; + + /* Delete attributes */ + n1 = STAILQ_FIRST(&abbrev->attrs); + while (n1) { + n2 = STAILQ_NEXT(n1, link); + yasm_xfree(n1); + n1 = n2; + } + + yasm_xfree(contents); +} + +static void +dwarf2_abbrev_bc_print(const void *contents, FILE *f, int indent_level) +{ + /* TODO */ +} + +static int +dwarf2_abbrev_bc_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + yasm_internal_error(N_("tried to calc_len a dwarf2 aranges head bytecode")); + /*@notreached@*/ + return 0; +} + +static int +dwarf2_abbrev_bc_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + yasm_output_reloc_func output_reloc) +{ + dwarf2_abbrev *abbrev = (dwarf2_abbrev *)bc->contents; + unsigned char *buf = *bufp; + dwarf2_abbrev_attr *attr; + + if (abbrev->id == 0) { + YASM_WRITE_8(buf, 0); + *bufp = buf; + return 0; + } + + buf += yasm_get_uleb128(abbrev->id, buf); + buf += yasm_get_uleb128(abbrev->tag, buf); + YASM_WRITE_8(buf, abbrev->has_children); + + STAILQ_FOREACH(attr, &abbrev->attrs, link) { + buf += yasm_get_uleb128(attr->name, buf); + buf += yasm_get_uleb128(attr->form, buf); + } + + YASM_WRITE_8(buf, 0); + YASM_WRITE_8(buf, 0); + + *bufp = buf; + return 0; +} + diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-line.c b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-line.c new file mode 100644 index 0000000000..10bb2f290e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/dwarf2-line.c @@ -0,0 +1,1144 @@ +/* + * DWARF2 debugging format - line information + * + * Copyright (C) 2006-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of other contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "dwarf2-dbgfmt.h" + +/* DWARF line number opcodes */ +typedef enum { + DW_LNS_extended_op = 0, + DW_LNS_copy, + DW_LNS_advance_pc, + DW_LNS_advance_line, + DW_LNS_set_file, + DW_LNS_set_column, + DW_LNS_negate_stmt, + DW_LNS_set_basic_block, + DW_LNS_const_add_pc, + DW_LNS_fixed_advance_pc, +#ifdef WITH_DWARF3 + /* DWARF 3 extensions */ + DW_LNS_set_prologue_end, + DW_LNS_set_epilogue_begin, + DW_LNS_set_isa, +#endif + DWARF2_LINE_OPCODE_BASE +} dwarf_line_number_op; + +/* # of LEB128 operands needed for each of the above opcodes */ +static unsigned char line_opcode_num_operands[DWARF2_LINE_OPCODE_BASE-1] = { + 0, /* DW_LNS_copy */ + 1, /* DW_LNS_advance_pc */ + 1, /* DW_LNS_advance_line */ + 1, /* DW_LNS_set_file */ + 1, /* DW_LNS_set_column */ + 0, /* DW_LNS_negate_stmt */ + 0, /* DW_LNS_set_basic_block */ + 0, /* DW_LNS_const_add_pc */ + 1, /* DW_LNS_fixed_advance_pc */ +#ifdef WITH_DWARF3 + 0, /* DW_LNS_set_prologue_end */ + 0, /* DW_LNS_set_epilogue_begin */ + 1 /* DW_LNS_set_isa */ +#endif +}; + +/* Line number extended opcodes */ +typedef enum { + DW_LNE_end_sequence = 1, + DW_LNE_set_address, + DW_LNE_define_file, + DW_LNE_set_discriminator +} dwarf_line_number_ext_op; + +/* Base and range for line offsets in special opcodes */ +#define DWARF2_LINE_BASE -5 +#define DWARF2_LINE_RANGE 14 + +#define DWARF2_MAX_SPECIAL_ADDR_DELTA \ + (((255-DWARF2_LINE_OPCODE_BASE)/DWARF2_LINE_RANGE)*\ + dbgfmt_dwarf2->min_insn_len) + +/* Initial value of is_stmt register */ +#define DWARF2_LINE_DEFAULT_IS_STMT 1 + +/* Line number state machine register state */ +typedef struct dwarf2_line_state { + /* static configuration */ + yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2; + + /* DWARF2 state machine registers */ + unsigned long address; + unsigned long file; + unsigned long line; + unsigned long column; + unsigned long isa; + int is_stmt; + + /* other state information */ + /*@null@*/ yasm_bytecode *precbc; +} dwarf2_line_state; + +typedef struct dwarf2_spp { + yasm_bytecode *line_start_prevbc; + yasm_bytecode *line_end_prevbc; +} dwarf2_spp; + +typedef struct dwarf2_line_op { + dwarf_line_number_op opcode; + /*@owned@*/ /*@null@*/ yasm_intnum *operand; + + /* extended opcode */ + dwarf_line_number_ext_op ext_opcode; + /*@null@*/ /*@dependent@*/ yasm_symrec *ext_operand; /* unsigned */ + /*@null@*/ /*@dependent@*/ yasm_intnum *ext_operand_int; /* unsigned */ + unsigned long ext_operandsize; +} dwarf2_line_op; + +/* Bytecode callback function prototypes */ +static void dwarf2_spp_bc_destroy(void *contents); +static void dwarf2_spp_bc_print(const void *contents, FILE *f, + int indent_level); +static int dwarf2_spp_bc_calc_len + (yasm_bytecode *bc, yasm_bc_add_span_func add_span, void *add_span_data); +static int dwarf2_spp_bc_tobytes + (yasm_bytecode *bc, unsigned char **bufp, unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +static void dwarf2_line_op_bc_destroy(void *contents); +static void dwarf2_line_op_bc_print(const void *contents, FILE *f, + int indent_level); +static int dwarf2_line_op_bc_calc_len + (yasm_bytecode *bc, yasm_bc_add_span_func add_span, void *add_span_data); +static int dwarf2_line_op_bc_tobytes + (yasm_bytecode *bc, unsigned char **bufp, unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +/* Bytecode callback structures */ +static const yasm_bytecode_callback dwarf2_spp_bc_callback = { + dwarf2_spp_bc_destroy, + dwarf2_spp_bc_print, + yasm_bc_finalize_common, + NULL, + dwarf2_spp_bc_calc_len, + yasm_bc_expand_common, + dwarf2_spp_bc_tobytes, + 0 +}; + +static const yasm_bytecode_callback dwarf2_line_op_bc_callback = { + dwarf2_line_op_bc_destroy, + dwarf2_line_op_bc_print, + yasm_bc_finalize_common, + NULL, + dwarf2_line_op_bc_calc_len, + yasm_bc_expand_common, + dwarf2_line_op_bc_tobytes, + 0 +}; + + +static size_t +dwarf2_dbgfmt_add_file(yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2, unsigned long filenum, + const char *pathname) +{ + size_t dirlen; + const char *filename; + unsigned long i, dir; + + /* Put the directory into the directory table */ + dir = 0; + dirlen = yasm__splitpath(pathname, &filename); + if (dirlen > 0) { + /* Look to see if we already have that dir in the table */ + for (dir=1; dirdirs_size+1; dir++) { + if (strncmp(dbgfmt_dwarf2->dirs[dir-1], pathname, dirlen) == 0 + && dbgfmt_dwarf2->dirs[dir-1][dirlen] == '\0') + break; + } + if (dir >= dbgfmt_dwarf2->dirs_size+1) { + /* Not found in table, add to end, reallocing if necessary */ + if (dir >= dbgfmt_dwarf2->dirs_allocated+1) { + dbgfmt_dwarf2->dirs_allocated = dir+32; + dbgfmt_dwarf2->dirs = yasm_xrealloc(dbgfmt_dwarf2->dirs, + sizeof(char *)*dbgfmt_dwarf2->dirs_allocated); + } + dbgfmt_dwarf2->dirs[dir-1] = yasm__xstrndup(pathname, dirlen); + dbgfmt_dwarf2->dirs_size = dir; + } + } + + /* Put the filename into the filename table */ + if (filenum == 0) { + /* Look to see if we already have that filename in the table */ + for (; filenumfilenames_size; filenum++) { + if (!dbgfmt_dwarf2->filenames[filenum].filename || + (dbgfmt_dwarf2->filenames[filenum].dir == dir + && strcmp(dbgfmt_dwarf2->filenames[filenum].filename, + filename) == 0)) + break; + } + } else + filenum--; /* array index is 0-based */ + + /* Realloc table if necessary */ + if (filenum >= dbgfmt_dwarf2->filenames_allocated) { + unsigned long old_allocated = dbgfmt_dwarf2->filenames_allocated; + dbgfmt_dwarf2->filenames_allocated = filenum+32; + dbgfmt_dwarf2->filenames = yasm_xrealloc(dbgfmt_dwarf2->filenames, + sizeof(dwarf2_filename)*dbgfmt_dwarf2->filenames_allocated); + for (i=old_allocated; ifilenames_allocated; i++) { + dbgfmt_dwarf2->filenames[i].pathname = NULL; + dbgfmt_dwarf2->filenames[i].filename = NULL; + dbgfmt_dwarf2->filenames[i].dir = 0; + } + } + + /* Actually save in table */ + if (dbgfmt_dwarf2->filenames[filenum].pathname) + yasm_xfree(dbgfmt_dwarf2->filenames[filenum].pathname); + if (dbgfmt_dwarf2->filenames[filenum].filename) + yasm_xfree(dbgfmt_dwarf2->filenames[filenum].filename); + dbgfmt_dwarf2->filenames[filenum].pathname = yasm__xstrdup(pathname); + dbgfmt_dwarf2->filenames[filenum].filename = yasm__xstrdup(filename); + dbgfmt_dwarf2->filenames[filenum].dir = dir; + + /* Update table size */ + if (filenum >= dbgfmt_dwarf2->filenames_size) + dbgfmt_dwarf2->filenames_size = filenum + 1; + + return filenum; +} + +/* Create and add a new line opcode to a section, updating offset on insertion; + * no optimization necessary. + */ +static yasm_bytecode * +dwarf2_dbgfmt_append_line_op(yasm_section *sect, dwarf_line_number_op opcode, + /*@only@*/ /*@null@*/ yasm_intnum *operand) +{ + dwarf2_line_op *line_op = yasm_xmalloc(sizeof(dwarf2_line_op)); + yasm_bytecode *bc; + + line_op->opcode = opcode; + line_op->operand = operand; + line_op->ext_opcode = 0; + line_op->ext_operand = NULL; + line_op->ext_operand_int = NULL; + line_op->ext_operandsize = 0; + + bc = yasm_bc_create_common(&dwarf2_line_op_bc_callback, line_op, 0); + bc->len = 1; + if (operand) + bc->len += yasm_intnum_size_leb128(operand, + opcode == DW_LNS_advance_line); + + yasm_dwarf2__append_bc(sect, bc); + return bc; +} + +/* Create and add a new extended line opcode to a section, updating offset on + * insertion; no optimization necessary. + */ +static yasm_bytecode * +dwarf2_dbgfmt_append_line_ext_op(yasm_section *sect, + dwarf_line_number_ext_op ext_opcode, + unsigned long ext_operandsize, + /*@null@*/ yasm_symrec *ext_operand) +{ + dwarf2_line_op *line_op = yasm_xmalloc(sizeof(dwarf2_line_op)); + yasm_bytecode *bc; + + line_op->opcode = DW_LNS_extended_op; + line_op->operand = yasm_intnum_create_uint(ext_operandsize+1); + line_op->ext_opcode = ext_opcode; + line_op->ext_operand = ext_operand; + line_op->ext_operand_int = NULL; + line_op->ext_operandsize = ext_operandsize; + + bc = yasm_bc_create_common(&dwarf2_line_op_bc_callback, line_op, 0); + bc->len = 2 + yasm_intnum_size_leb128(line_op->operand, 0) + + ext_operandsize; + + yasm_dwarf2__append_bc(sect, bc); + return bc; +} + +static yasm_bytecode * +dwarf2_dbgfmt_append_line_ext_op_int(yasm_section *sect, + dwarf_line_number_ext_op ext_opcode, + /*@only@*/ yasm_intnum *ext_operand) +{ + dwarf2_line_op *line_op = yasm_xmalloc(sizeof(dwarf2_line_op)); + unsigned long ext_operandsize = yasm_intnum_size_leb128(ext_operand, 0); + yasm_bytecode *bc; + + line_op->opcode = DW_LNS_extended_op; + line_op->operand = yasm_intnum_create_uint(ext_operandsize+1); + line_op->ext_opcode = ext_opcode; + line_op->ext_operand = NULL; + line_op->ext_operand_int = ext_operand; + line_op->ext_operandsize = ext_operandsize; + + bc = yasm_bc_create_common(&dwarf2_line_op_bc_callback, line_op, 0); + bc->len = 2 + yasm_intnum_size_leb128(line_op->operand, 0) + + ext_operandsize; + + yasm_dwarf2__append_bc(sect, bc); + return bc; +} + +static void +dwarf2_dbgfmt_finalize_locs(yasm_section *sect, dwarf2_section_data *dsd) +{ + /*@dependent@*/ yasm_symrec *lastsym = NULL; + /*@null@*/ yasm_bytecode *bc; + /*@null@*/ dwarf2_loc *loc; + + bc = yasm_section_bcs_first(sect); + STAILQ_FOREACH(loc, &dsd->locs, link) { + /* Find the first bytecode following this loc by looking at + * the virtual line numbers. XXX: this assumes the source file + * order will be the same as the actual section order. If we ever + * implement subsegs this will NOT necessarily be true and this logic + * will need to be fixed to handle it! + * + * Keep track of last symbol seen prior to the loc. + */ + while (bc && bc->line <= loc->vline) { + if (bc->symrecs) { + int i = 0; + while (bc->symrecs[i]) { + lastsym = bc->symrecs[i]; + i++; + } + } + bc = yasm_bc__next(bc); + } + loc->sym = lastsym; + loc->bc = bc; + } +} + +static int +dwarf2_dbgfmt_gen_line_op(yasm_section *debug_line, dwarf2_line_state *state, + const dwarf2_loc *loc, + /*@null@*/ const dwarf2_loc *nextloc) +{ + unsigned long addr_delta; + long line_delta; + int opcode1, opcode2; + yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2 = state->dbgfmt_dwarf2; + + if (state->file != loc->file) { + state->file = loc->file; + dwarf2_dbgfmt_append_line_op(debug_line, DW_LNS_set_file, + yasm_intnum_create_uint(state->file)); + } + if (state->column != loc->column) { + state->column = loc->column; + dwarf2_dbgfmt_append_line_op(debug_line, DW_LNS_set_column, + yasm_intnum_create_uint(state->column)); + } + if (loc->discriminator != 0) { + dwarf2_dbgfmt_append_line_ext_op_int(debug_line, + DW_LNE_set_discriminator, + yasm_intnum_create_uint(loc->discriminator)); + } +#ifdef WITH_DWARF3 + if (loc->isa_change) { + state->isa = loc->isa; + dwarf2_dbgfmt_append_line_op(debug_line, DW_LNS_set_isa, + yasm_intnum_create_uint(state->isa)); + } +#endif + if (state->is_stmt == 0 && loc->is_stmt == IS_STMT_SET) { + state->is_stmt = 1; + dwarf2_dbgfmt_append_line_op(debug_line, DW_LNS_negate_stmt, NULL); + } else if (state->is_stmt == 1 && loc->is_stmt == IS_STMT_CLEAR) { + state->is_stmt = 0; + dwarf2_dbgfmt_append_line_op(debug_line, DW_LNS_negate_stmt, NULL); + } + if (loc->basic_block) { + dwarf2_dbgfmt_append_line_op(debug_line, DW_LNS_set_basic_block, NULL); + } +#ifdef WITH_DWARF3 + if (loc->prologue_end) { + dwarf2_dbgfmt_append_line_op(debug_line, DW_LNS_set_prologue_end, NULL); + } + if (loc->epilogue_begin) { + dwarf2_dbgfmt_append_line_op(debug_line, DW_LNS_set_epilogue_begin, + NULL); + } +#endif + + /* If multiple loc for the same location, use last */ + if (nextloc && nextloc->bc->offset == loc->bc->offset) + return 0; + + if (!state->precbc) { + /* Set the starting address for the section */ + if (!loc->sym) { + /* shouldn't happen! */ + yasm_error_set(YASM_ERROR_GENERAL, + N_("could not find label prior to loc")); + return 1; + } + dwarf2_dbgfmt_append_line_ext_op(debug_line, DW_LNE_set_address, + dbgfmt_dwarf2->sizeof_address, loc->sym); + addr_delta = 0; + } else if (loc->bc) { + if (state->precbc->offset > loc->bc->offset) + yasm_internal_error(N_("dwarf2 address went backwards?")); + addr_delta = loc->bc->offset - state->precbc->offset; + } else + return 0; /* ran out of bytecodes! XXX: do something? */ + + /* Generate appropriate opcode(s). Address can only increment, + * whereas line number can go backwards. + */ + line_delta = loc->line - state->line; + state->line = loc->line; + + /* First handle the line delta */ + if (line_delta < DWARF2_LINE_BASE + || line_delta >= DWARF2_LINE_BASE+DWARF2_LINE_RANGE) { + /* Won't fit in special opcode, use (signed) line advance */ + dwarf2_dbgfmt_append_line_op(debug_line, DW_LNS_advance_line, + yasm_intnum_create_int(line_delta)); + line_delta = 0; + } + + /* Next handle the address delta */ + opcode1 = DWARF2_LINE_OPCODE_BASE + line_delta - DWARF2_LINE_BASE + + DWARF2_LINE_RANGE * (addr_delta / dbgfmt_dwarf2->min_insn_len); + opcode2 = DWARF2_LINE_OPCODE_BASE + line_delta - DWARF2_LINE_BASE + + DWARF2_LINE_RANGE * ((addr_delta - DWARF2_MAX_SPECIAL_ADDR_DELTA) / + dbgfmt_dwarf2->min_insn_len); + if (line_delta == 0 && addr_delta == 0) { + /* Both line and addr deltas are 0: do DW_LNS_copy */ + dwarf2_dbgfmt_append_line_op(debug_line, DW_LNS_copy, NULL); + } else if (addr_delta <= DWARF2_MAX_SPECIAL_ADDR_DELTA && opcode1 <= 255) { + /* Addr delta in range of special opcode */ + dwarf2_dbgfmt_append_line_op(debug_line, opcode1, NULL); + } else if (addr_delta <= 2*DWARF2_MAX_SPECIAL_ADDR_DELTA + && opcode2 <= 255) { + /* Addr delta in range of const_add_pc + special */ + dwarf2_dbgfmt_append_line_op(debug_line, DW_LNS_const_add_pc, NULL); + dwarf2_dbgfmt_append_line_op(debug_line, opcode2, NULL); + } else { + /* Need advance_pc */ + dwarf2_dbgfmt_append_line_op(debug_line, DW_LNS_advance_pc, + yasm_intnum_create_uint(addr_delta)); + /* Take care of any remaining line_delta and add entry to matrix */ + if (line_delta == 0) + dwarf2_dbgfmt_append_line_op(debug_line, DW_LNS_copy, NULL); + else { + unsigned int opcode; + opcode = DWARF2_LINE_OPCODE_BASE + line_delta - DWARF2_LINE_BASE; + dwarf2_dbgfmt_append_line_op(debug_line, opcode, NULL); + } + } + state->precbc = loc->bc; + return 0; +} + +typedef struct dwarf2_line_bc_info { + yasm_section *debug_line; + yasm_object *object; + yasm_linemap *linemap; + yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2; + dwarf2_line_state *state; + dwarf2_loc loc; + unsigned long lastfile; +} dwarf2_line_bc_info; + +static int +dwarf2_filename_equals(const dwarf2_filename *fn, + char **dirs, + const char *pathname, + unsigned long dirlen, + const char *filename) +{ + /* check directory */ + if (fn->dir == 0) { + if (dirlen != 0) + return 0; + } else { + if (strncmp(dirs[fn->dir-1], pathname, dirlen) != 0 || + dirs[fn->dir-1][dirlen] != '\0') + return 0; + } + + /* check filename */ + return strcmp(fn->filename, filename) == 0; +} + +static int +dwarf2_generate_line_bc(yasm_bytecode *bc, /*@null@*/ void *d) +{ + dwarf2_line_bc_info *info = (dwarf2_line_bc_info *)d; + yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2 = info->dbgfmt_dwarf2; + unsigned long i; + size_t dirlen; + const char *pathname, *filename; + /*@null@*/ yasm_bytecode *nextbc = yasm_bc__next(bc); + + if (nextbc && bc->offset == nextbc->offset) + return 0; + + info->loc.vline = bc->line; + info->loc.bc = bc; + + /* Keep track of last symbol seen */ + if (bc->symrecs) { + i = 0; + while (bc->symrecs[i]) { + info->loc.sym = bc->symrecs[i]; + i++; + } + } + + yasm_linemap_lookup(info->linemap, bc->line, &pathname, &info->loc.line); + dirlen = yasm__splitpath(pathname, &filename); + + /* Find file index; just linear search it unless it was the last used */ + if (info->lastfile > 0 + && dwarf2_filename_equals(&dbgfmt_dwarf2->filenames[info->lastfile-1], + dbgfmt_dwarf2->dirs, pathname, dirlen, + filename)) + info->loc.file = info->lastfile; + else { + for (i=0; ifilenames_size; i++) { + if (dwarf2_filename_equals(&dbgfmt_dwarf2->filenames[i], + dbgfmt_dwarf2->dirs, pathname, dirlen, + filename)) + break; + } + if (i >= dbgfmt_dwarf2->filenames_size) + yasm_internal_error(N_("could not find filename in table")); + info->loc.file = i+1; + info->lastfile = i+1; + } + if (dwarf2_dbgfmt_gen_line_op(info->debug_line, info->state, &info->loc, + NULL)) + return 1; + return 0; +} + +typedef struct dwarf2_line_info { + yasm_section *debug_line; /* section to which line number info goes */ + yasm_object *object; + yasm_linemap *linemap; + yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2; + yasm_errwarns *errwarns; + + /* Generate based on bytecodes (1) or locs (0)? Use bytecodes if we're + * generating line numbers for the actual assembly source file. + */ + int asm_source; + + /* number of sections line number info generated for */ + size_t num_sections; + /* last section line number info generated for */ + /*@null@*/ yasm_section *last_code; +} dwarf2_line_info; + +static int +dwarf2_generate_line_section(yasm_section *sect, /*@null@*/ void *d) +{ + dwarf2_line_info *info = (dwarf2_line_info *)d; + yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2 = info->dbgfmt_dwarf2; + /*@null@*/ dwarf2_section_data *dsd; + /*@null@*/ yasm_bytecode *bc; + dwarf2_line_state state; + unsigned long addr_delta; + + dsd = yasm_section_get_data(sect, &yasm_dwarf2__section_data_cb); + if (!dsd) { + if (info->asm_source && yasm_section_is_code(sect)) { + /* Create line data for asm code sections */ + dsd = yasm_xmalloc(sizeof(dwarf2_section_data)); + STAILQ_INIT(&dsd->locs); + yasm_section_add_data(sect, &yasm_dwarf2__section_data_cb, dsd); + } else + return 0; /* no line data for this section */ + } + + info->num_sections++; + info->last_code = sect; + + /* initialize state machine registers for each sequence */ + state.dbgfmt_dwarf2 = dbgfmt_dwarf2; + state.address = 0; + state.file = 1; + state.line = 1; + state.column = 0; + state.isa = 0; + state.is_stmt = DWARF2_LINE_DEFAULT_IS_STMT; + state.precbc = NULL; + + if (info->asm_source) { + dwarf2_line_bc_info bcinfo; + + bcinfo.debug_line = info->debug_line; + bcinfo.object = info->object; + bcinfo.linemap = info->linemap; + bcinfo.dbgfmt_dwarf2 = dbgfmt_dwarf2; + bcinfo.state = &state; + bcinfo.lastfile = 0; + bcinfo.loc.isa_change = 0; + bcinfo.loc.column = 0; + bcinfo.loc.discriminator = 0; + bcinfo.loc.is_stmt = IS_STMT_NOCHANGE; + bcinfo.loc.basic_block = 0; + bcinfo.loc.prologue_end = 0; + bcinfo.loc.epilogue_begin = 0; + bcinfo.loc.sym = NULL; + + /* bcs_traverse() skips first "dummy" bytecode, so look at it + * separately to determine the initial symrec. + */ + bc = yasm_section_bcs_first(sect); + if (bc->symrecs) { + size_t i = 0; + while (bc->symrecs[i]) { + bcinfo.loc.sym = bc->symrecs[i]; + i++; + } + } + + yasm_section_bcs_traverse(sect, info->errwarns, &bcinfo, + dwarf2_generate_line_bc); + } else { + /*@null@*/ dwarf2_loc *loc; + + dwarf2_dbgfmt_finalize_locs(sect, dsd); + + STAILQ_FOREACH(loc, &dsd->locs, link) { + if (dwarf2_dbgfmt_gen_line_op(info->debug_line, &state, loc, + STAILQ_NEXT(loc, link))) + return 1; + } + } + + /* End sequence: bring address to end of section, then output end + * sequence opcode. Don't use a special opcode to do this as we don't + * want an extra entry in the line matrix. + */ + if (!state.precbc) + state.precbc = yasm_section_bcs_first(sect); + bc = yasm_section_bcs_last(sect); + addr_delta = yasm_bc_next_offset(bc) - state.precbc->offset; + if (addr_delta == DWARF2_MAX_SPECIAL_ADDR_DELTA) + dwarf2_dbgfmt_append_line_op(info->debug_line, DW_LNS_const_add_pc, + NULL); + else if (addr_delta > 0) + dwarf2_dbgfmt_append_line_op(info->debug_line, DW_LNS_advance_pc, + yasm_intnum_create_uint(addr_delta)); + dwarf2_dbgfmt_append_line_ext_op(info->debug_line, DW_LNE_end_sequence, 0, + NULL); + + return 0; +} + +static int +dwarf2_generate_filename(const char *filename, void *d) +{ + yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2 = (yasm_dbgfmt_dwarf2 *)d; + dwarf2_dbgfmt_add_file(dbgfmt_dwarf2, 0, filename); + return 0; +} + +yasm_section * +yasm_dwarf2__generate_line(yasm_object *object, yasm_linemap *linemap, + yasm_errwarns *errwarns, int asm_source, + /*@out@*/ yasm_section **main_code, + /*@out@*/ size_t *num_line_sections) +{ + yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2 = (yasm_dbgfmt_dwarf2 *)object->dbgfmt; + dwarf2_line_info info; + int new; + size_t i; + yasm_bytecode *sppbc; + dwarf2_spp *spp; + dwarf2_head *head; + + if (asm_source) { + /* Generate dirs and filenames based on linemap */ + yasm_linemap_traverse_filenames(linemap, dbgfmt_dwarf2, + dwarf2_generate_filename); + } + + info.num_sections = 0; + info.last_code = NULL; + info.asm_source = asm_source; + info.object = object; + info.linemap = linemap; + info.dbgfmt_dwarf2 = dbgfmt_dwarf2; + info.debug_line = yasm_object_get_general(object, ".debug_line", 1, 0, 0, + &new, 0); + + /* header */ + head = yasm_dwarf2__add_head(dbgfmt_dwarf2, info.debug_line, NULL, 0, 0); + + /* statement program prologue */ + spp = yasm_xmalloc(sizeof(dwarf2_spp)); + sppbc = yasm_bc_create_common(&dwarf2_spp_bc_callback, spp, 0); + sppbc->len = dbgfmt_dwarf2->sizeof_offset + 5 + + NELEMS(line_opcode_num_operands); + + /* directory list */ + for (i=0; idirs_size; i++) + sppbc->len += (unsigned long)strlen(dbgfmt_dwarf2->dirs[i])+1; + sppbc->len++; + + /* filename list */ + for (i=0; ifilenames_size; i++) { + if (!dbgfmt_dwarf2->filenames[i].filename) { + yasm_error_set(YASM_ERROR_GENERAL, + N_("dwarf2 file number %d unassigned"), i+1); + yasm_errwarn_propagate(errwarns, 0); + continue; + } + sppbc->len += + (unsigned long)strlen(dbgfmt_dwarf2->filenames[i].filename) + 1 + + yasm_size_uleb128(dbgfmt_dwarf2->filenames[i].dir) + 2; + } + sppbc->len++; + yasm_dwarf2__append_bc(info.debug_line, sppbc); + + /* statement program */ + yasm_object_sections_traverse(object, (void *)&info, + dwarf2_generate_line_section); + + /* mark end of line information */ + yasm_dwarf2__set_head_end(head, yasm_section_bcs_last(info.debug_line)); + + *num_line_sections = info.num_sections; + if (info.num_sections == 1) + *main_code = info.last_code; + else + *main_code = NULL; + return info.debug_line; +} + +static void +dwarf2_spp_bc_destroy(void *contents) +{ + yasm_xfree(contents); +} + +static void +dwarf2_spp_bc_print(const void *contents, FILE *f, int indent_level) +{ + /* TODO */ +} + +static int +dwarf2_spp_bc_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + yasm_internal_error(N_("tried to calc_len a dwarf2 spp bytecode")); + /*@notreached@*/ + return 0; +} + +static int +dwarf2_spp_bc_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + yasm_output_reloc_func output_reloc) +{ + yasm_object *object = yasm_section_get_object(bc->section); + yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2 = (yasm_dbgfmt_dwarf2 *)object->dbgfmt; + unsigned char *buf = *bufp; + yasm_intnum *cval; + size_t i, len; + + /* Prologue length (following this field) */ + cval = yasm_intnum_create_uint(bc->len - (unsigned long)(buf-*bufp) - + dbgfmt_dwarf2->sizeof_offset); + yasm_arch_intnum_tobytes(object->arch, cval, buf, + dbgfmt_dwarf2->sizeof_offset, + dbgfmt_dwarf2->sizeof_offset*8, 0, bc, 0); + buf += dbgfmt_dwarf2->sizeof_offset; + + YASM_WRITE_8(buf, dbgfmt_dwarf2->min_insn_len); /* minimum_instr_len */ + YASM_WRITE_8(buf, DWARF2_LINE_DEFAULT_IS_STMT); /* default_is_stmt */ + YASM_WRITE_8(buf, DWARF2_LINE_BASE); /* line_base */ + YASM_WRITE_8(buf, DWARF2_LINE_RANGE); /* line_range */ + YASM_WRITE_8(buf, DWARF2_LINE_OPCODE_BASE); /* opcode_base */ + + /* Standard opcode # operands array */ + for (i=0; idirs_size; i++) { + len = strlen(dbgfmt_dwarf2->dirs[i])+1; + memcpy(buf, dbgfmt_dwarf2->dirs[i], len); + buf += len; + } + /* finish with single 0 byte */ + YASM_WRITE_8(buf, 0); + + /* filename list */ + for (i=0; ifilenames_size; i++) { + len = strlen(dbgfmt_dwarf2->filenames[i].filename)+1; + memcpy(buf, dbgfmt_dwarf2->filenames[i].filename, len); + buf += len; + + /* dir */ + buf += yasm_get_uleb128(dbgfmt_dwarf2->filenames[i].dir, buf); + YASM_WRITE_8(buf, 0); /* time */ + YASM_WRITE_8(buf, 0); /* length */ + } + /* finish with single 0 byte */ + YASM_WRITE_8(buf, 0); + + *bufp = buf; + + yasm_intnum_destroy(cval); + return 0; +} + +static void +dwarf2_line_op_bc_destroy(void *contents) +{ + dwarf2_line_op *line_op = (dwarf2_line_op *)contents; + if (line_op->operand) + yasm_intnum_destroy(line_op->operand); + if (line_op->ext_operand_int) + yasm_intnum_destroy(line_op->ext_operand_int); + yasm_xfree(contents); +} + +static void +dwarf2_line_op_bc_print(const void *contents, FILE *f, int indent_level) +{ + /* TODO */ +} + +static int +dwarf2_line_op_bc_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + yasm_internal_error(N_("tried to calc_len a dwarf2 line_op bytecode")); + /*@notreached@*/ + return 0; +} + +static int +dwarf2_line_op_bc_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + yasm_output_reloc_func output_reloc) +{ + dwarf2_line_op *line_op = (dwarf2_line_op *)bc->contents; + unsigned char *buf = *bufp; + + YASM_WRITE_8(buf, line_op->opcode); + if (line_op->operand) + buf += yasm_intnum_get_leb128(line_op->operand, buf, + line_op->opcode == DW_LNS_advance_line); + if (line_op->ext_opcode > 0) { + YASM_WRITE_8(buf, line_op->ext_opcode); + if (line_op->ext_operand) { + yasm_value value; + yasm_value_init_sym(&value, line_op->ext_operand, + line_op->ext_operandsize*8); + output_value(&value, buf, line_op->ext_operandsize, + (unsigned long)(buf-bufstart), bc, 0, d); + buf += line_op->ext_operandsize; + } + if (line_op->ext_operand_int) { + buf += yasm_intnum_get_leb128(line_op->ext_operand_int, buf, 0); + } + } + + *bufp = buf; + return 0; +} + +void +yasm_dwarf2__dir_loc(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_valparam *vp; + int in_is_stmt = 0, in_isa = 0, in_discriminator = 0; + + /*@dependent@*/ /*@null@*/ const yasm_intnum *intn; + dwarf2_section_data *dsd; + dwarf2_loc *loc = yasm_xmalloc(sizeof(dwarf2_loc)); + + /* File number (required) */ + if (!valparams || !(vp = yasm_vps_first(valparams)) || + vp->val || vp->type != YASM_PARAM_EXPR) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("file number required")); + yasm_xfree(loc); + return; + } + intn = yasm_expr_get_intnum(&vp->param.e, 0); + if (!intn) { + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("file number is not a constant")); + yasm_xfree(loc); + return; + } + if (yasm_intnum_sign(intn) != 1) { + yasm_error_set(YASM_ERROR_VALUE, N_("file number less than one")); + yasm_xfree(loc); + return; + } + loc->file = yasm_intnum_get_uint(intn); + + /* Line number (required) */ + vp = yasm_vps_next(vp); + if (!vp || vp->val || vp->type != YASM_PARAM_EXPR) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("line number required")); + yasm_xfree(loc); + return; + } + intn = yasm_expr_get_intnum(&vp->param.e, 0); + if (!intn) { + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("line number is not a constant")); + yasm_xfree(loc); + return; + } + loc->line = yasm_intnum_get_uint(intn); + + /* Generate new section data if it doesn't already exist */ + if (!object->cur_section) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("[%s] can only be used inside of a section"), "loc"); + yasm_xfree(loc); + return; + } + dsd = yasm_section_get_data(object->cur_section, + &yasm_dwarf2__section_data_cb); + if (!dsd) { + dsd = yasm_xmalloc(sizeof(dwarf2_section_data)); + STAILQ_INIT(&dsd->locs); + yasm_section_add_data(object->cur_section, + &yasm_dwarf2__section_data_cb, dsd); + } + + /* Defaults for optional settings */ + loc->column = 0; + loc->discriminator = 0; + loc->isa_change = 0; + loc->isa = 0; + loc->is_stmt = IS_STMT_NOCHANGE; + loc->basic_block = 0; + loc->prologue_end = 0; + loc->epilogue_begin = 0; + + /* Optional column number */ + vp = yasm_vps_next(vp); + if (vp && !vp->val && vp->type == YASM_PARAM_EXPR) { + intn = yasm_expr_get_intnum(&vp->param.e, 0); + if (!intn) { + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("column number is not a constant")); + yasm_xfree(loc); + return; + } + loc->column = yasm_intnum_get_uint(intn); + vp = yasm_vps_next(vp); + } + + /* Other options; note for GAS compatibility we need to support both: + * is_stmt=1 (NASM) and + * is_stmt 1 (GAS) + */ + while (vp) { + /*@null@*/ /*@dependent@*/ const char *s; + /*@null@*/ /*@only@*/ yasm_expr *e; + +restart: + if (in_is_stmt) { + in_is_stmt = 0; + if (!(e = yasm_vp_expr(vp, object->symtab, line)) || + !(intn = yasm_expr_get_intnum(&e, 0))) { + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("is_stmt value is not a constant")); + yasm_xfree(loc); + if (e) + yasm_expr_destroy(e); + return; + } + if (yasm_intnum_is_zero(intn)) + loc->is_stmt = IS_STMT_SET; + else if (yasm_intnum_is_pos1(intn)) + loc->is_stmt = IS_STMT_CLEAR; + else { + yasm_error_set(YASM_ERROR_VALUE, + N_("is_stmt value not 0 or 1")); + yasm_xfree(loc); + yasm_expr_destroy(e); + return; + } + yasm_expr_destroy(e); + } else if (in_isa) { + in_isa = 0; + if (!(e = yasm_vp_expr(vp, object->symtab, line)) || + !(intn = yasm_expr_get_intnum(&e, 0))) { + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("isa value is not a constant")); + yasm_xfree(loc); + if (e) + yasm_expr_destroy(e); + return; + } + if (yasm_intnum_sign(intn) < 0) { + yasm_error_set(YASM_ERROR_VALUE, + N_("isa value less than zero")); + yasm_xfree(loc); + yasm_expr_destroy(e); + return; + } + loc->isa_change = 1; + loc->isa = yasm_intnum_get_uint(intn); + yasm_expr_destroy(e); + } else if (in_discriminator) { + in_discriminator = 0; + if (!(e = yasm_vp_expr(vp, object->symtab, line)) || + !(intn = yasm_expr_get_intnum(&e, 0))) { + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("discriminator value is not a constant")); + yasm_xfree(loc); + if (e) + yasm_expr_destroy(e); + return; + } + if (yasm_intnum_sign(intn) < 0) { + yasm_error_set(YASM_ERROR_VALUE, + N_("discriminator value less than zero")); + yasm_xfree(loc); + yasm_expr_destroy(e); + return; + } + loc->discriminator = yasm_intnum_get_uint(intn); + yasm_expr_destroy(e); + } else if (!vp->val && (s = yasm_vp_id(vp))) { + if (yasm__strcasecmp(s, "is_stmt") == 0) + in_is_stmt = 1; + else if (yasm__strcasecmp(s, "isa") == 0) + in_isa = 1; + else if (yasm__strcasecmp(s, "discriminator") == 0) + in_discriminator = 1; + else if (yasm__strcasecmp(s, "basic_block") == 0) + loc->basic_block = 1; + else if (yasm__strcasecmp(s, "prologue_end") == 0) + loc->prologue_end = 1; + else if (yasm__strcasecmp(s, "epilogue_begin") == 0) + loc->epilogue_begin = 1; + else + yasm_warn_set(YASM_WARN_GENERAL, + N_("unrecognized loc option `%s'"), s); + } else if (!vp->val) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("unrecognized numeric qualifier")); + } else if (yasm__strcasecmp(vp->val, "is_stmt") == 0) { + in_is_stmt = 1; + goto restart; /* don't go to the next valparam */ + } else if (yasm__strcasecmp(vp->val, "isa") == 0) { + in_isa = 1; + goto restart; /* don't go to the next valparam */ + } else if (yasm__strcasecmp(vp->val, "discriminator") == 0) { + in_discriminator = 1; + goto restart; /* don't go to the next valparam */ + } else + yasm_warn_set(YASM_WARN_GENERAL, + N_("unrecognized loc option `%s'"), vp->val); + vp = yasm_vps_next(vp); + } + + if (in_is_stmt || in_isa || in_discriminator) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("%s requires value"), + in_is_stmt ? "is_stmt" : + (in_isa ? "isa" : "discriminator")); + yasm_xfree(loc); + return; + } + + /* Append new location */ + loc->vline = line; + loc->bc = NULL; + loc->sym = NULL; + STAILQ_INSERT_TAIL(&dsd->locs, loc, link); +} + +void +yasm_dwarf2__dir_file(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_dbgfmt_dwarf2 *dbgfmt_dwarf2 = (yasm_dbgfmt_dwarf2 *)object->dbgfmt; + yasm_valparam *vp; + /*@dependent@*/ /*@null@*/ const yasm_intnum *file_intn; + unsigned long filenum; + + if (!valparams) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("[%s] requires an argument"), + "FILE"); + return; + } + + vp = yasm_vps_first(valparams); + if (yasm_vp_string(vp)) { + /* Just a bare filename */ + yasm_object_set_source_fn(object, yasm_vp_string(vp)); + return; + } + + /* Otherwise.. first vp is the file number */ + if (vp->type != YASM_PARAM_EXPR || + !(file_intn = yasm_expr_get_intnum(&vp->param.e, 0))) { + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("file number is not a constant")); + return; + } + filenum = yasm_intnum_get_uint(file_intn); + + vp = yasm_vps_next(vp); + if (!yasm_vp_string(vp)) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("file number given but no filename")); + return; + } + + dwarf2_dbgfmt_add_file(dbgfmt_dwarf2, filenum, yasm_vp_string(vp)); +} diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/Makefile.inc new file mode 100644 index 0000000000..e1dc1d4eb4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/Makefile.inc @@ -0,0 +1,9 @@ +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/gen64/Makefile.inc +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/pass32/Makefile.inc +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/pass64/Makefile.inc +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/passwin64/Makefile.inc +include modules/dbgfmts/dwarf2/tests/gen64/Makefile.inc +include modules/dbgfmts/dwarf2/tests/pass32/Makefile.inc +include modules/dbgfmts/dwarf2/tests/pass64/Makefile.inc +include modules/dbgfmts/dwarf2/tests/passwin64/Makefile.inc + diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/Makefile.inc new file mode 100644 index 0000000000..88ca78c6df --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/Makefile.inc @@ -0,0 +1,6 @@ +TESTS += modules/dbgfmts/dwarf2/tests/gen64/dwarf2_gen64_test.sh + +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/gen64/dwarf2_gen64_test.sh +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/gen64/dwarf64_pathname.asm +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/gen64/dwarf64_pathname.hex + diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/dwarf2_gen64_test.sh b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/dwarf2_gen64_test.sh new file mode 100755 index 0000000000..dae5f42927 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/dwarf2_gen64_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh dwarf2_gen64_test modules/dbgfmts/dwarf2/tests/gen64 "dwarf2 dbgfmt gen64" "-f elf64 -g dwarf2" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/dwarf64_pathname.asm b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/dwarf64_pathname.asm new file mode 100644 index 0000000000..a216f9bd87 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/dwarf64_pathname.asm @@ -0,0 +1,22 @@ +[bits 64] +[section .text] +[default rel] + +%line 1+0 ./some_filename +; program tst_wyjatki +global _start +_start: + XOR EBP, EBP + CALL main + XOR RAX, RAX + MOV RDI, RAX + MOV RAX, 60 + SYSCALL + HLT + +main: + PUSH rbp + MOV rbp, rsp + SUB RSP, 0x20 + %line 2+0 some_filename + SUB RSP, 64 diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/dwarf64_pathname.hex b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/dwarf64_pathname.hex new file mode 100644 index 0000000000..c67b19dee1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/gen64/dwarf64_pathname.hex @@ -0,0 +1,1632 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +0c +00 +01 +00 +31 +ed +e8 +10 +00 +00 +00 +48 +31 +c0 +48 +89 +c7 +48 +c7 +c0 +3c +00 +00 +00 +0f +05 +f4 +55 +48 +89 +e5 +48 +83 +ec +20 +48 +83 +ec +40 +4c +00 +00 +00 +02 +00 +29 +00 +00 +00 +01 +01 +fb +0e +0d +00 +01 +01 +01 +01 +00 +00 +00 +01 +00 +00 +01 +00 +2d +00 +00 +00 +00 +73 +6f +6d +65 +5f +66 +69 +6c +65 +6e +61 +6d +65 +00 +00 +00 +00 +00 +04 +02 +00 +09 +02 +00 +00 +00 +00 +00 +00 +00 +00 +01 +2e +58 +3c +3c +74 +2e +20 +20 +3c +4b +02 +04 +00 +01 +01 +00 +38 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +11 +00 +10 +06 +11 +01 +12 +01 +03 +08 +1b +08 +25 +08 +13 +05 +00 +00 +00 +2d +00 +00 +00 +02 +00 +00 +00 +00 +00 +08 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2d +00 +2e +2f +00 +79 +61 +73 +6d +20 +48 +45 +41 +44 +00 +01 +80 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +07 +00 +00 +00 +23 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +02 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +23 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +65 +62 +75 +67 +5f +6c +69 +6e +65 +00 +2e +64 +65 +62 +75 +67 +5f +61 +62 +62 +72 +65 +76 +00 +2e +64 +65 +62 +75 +67 +5f +69 +6e +66 +6f +00 +2e +64 +65 +62 +75 +67 +5f +61 +72 +61 +6e +67 +65 +73 +00 +2e +72 +65 +6c +61 +2e +64 +65 +62 +75 +67 +5f +6c +69 +6e +65 +00 +2e +72 +65 +6c +61 +2e +64 +65 +62 +75 +67 +5f +69 +6e +66 +6f +00 +2e +72 +65 +6c +61 +2e +64 +65 +62 +75 +67 +5f +61 +72 +61 +6e +67 +65 +73 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +5f +73 +74 +61 +72 +74 +00 +6d +61 +69 +6e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +00 +00 +04 +00 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +10 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +82 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e0 +01 +00 +00 +00 +00 +00 +00 +8c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +72 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +02 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7a +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +02 +00 +00 +00 +00 +00 +00 +d8 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +08 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +23 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +63 +00 +00 +00 +00 +00 +00 +00 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3c +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b4 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +05 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +13 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cc +00 +00 +00 +00 +00 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e0 +00 +00 +00 +00 +00 +00 +00 +31 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4d +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +01 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +08 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +2d +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +01 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5e +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +01 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +0a +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/Makefile.inc new file mode 100644 index 0000000000..be69cbf822 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/Makefile.inc @@ -0,0 +1,8 @@ +TESTS += modules/dbgfmts/dwarf2/tests/pass32/dwarf2_pass32_test.sh + +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/pass32/dwarf2_pass32_test.sh +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/pass32/dwarf32-err.asm +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/pass32/dwarf32-err.errwarn +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/pass32/dwarf32_testhd.asm +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/pass32/dwarf32_testhd.hex + diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf2_pass32_test.sh b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf2_pass32_test.sh new file mode 100755 index 0000000000..8b159a37cf --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf2_pass32_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh dwarf2_pass32_test modules/dbgfmts/dwarf2/tests/pass32 "dwarf2 dbgfmt pass32" "-f elf -p gas -g dwarf2" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32-err.asm b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32-err.asm new file mode 100644 index 0000000000..97f7ae567d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32-err.asm @@ -0,0 +1,34 @@ +.loc +.loc "foo" +.loc bar +.loc -5 +#.loc foo=1 +.loc 1 +.loc 1 "foo" +.loc 1 bar +.loc 1 2 +#.loc 1 bar=2 +.loc 1 bar 2 +.loc 1 2 "foo" +.loc 1 2 bar+1 +.loc 1 2 is_stmt +.loc 1 2 is_stmt 1 +#.loc 1 2 is_stmt="foo" +.loc 1 2 is_stmt "foo" +#.loc 1 2 is_stmt=bar +.loc 1 2 is_stmt bar +.loc 1 2 is_stmt (bar) +#.loc 1 2 is_stmt=2 +.loc 1 2 is_stmt 2 +.loc 1 2 isa +.loc 1 2 isa 1 +#.loc 1 2 isa="foo" +.loc 1 2 isa "foo" +#.loc 1 2 isa=bar +.loc 1 2 isa bar +#.loc 1 2 isa=-2 +.loc 1 2 isa (-2) +.loc 1 2 isa -2 +#.loc 1 2 foo=1 +.loc 1 2 foo 1 +#.loc 1 2 bar diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32-err.errwarn new file mode 100644 index 0000000000..9c33356566 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32-err.errwarn @@ -0,0 +1,22 @@ +-:1: error: directive `.loc' requires an argument +-:2: error: file number required +-:3: error: file number required +-:4: error: file number less than one +-:6: error: line number required +-:7: error: line number required +-:8: error: line number required +-:11: error: line number required +-:12: warning: unrecognized numeric qualifier +-:13: error: column number is not a constant +-:14: error: is_stmt requires value +-:17: error: is_stmt value is not a constant +-:19: error: is_stmt value is not a constant +-:20: error: is_stmt value is not a constant +-:22: error: is_stmt value not 0 or 1 +-:23: error: isa requires value +-:26: error: isa value is not a constant +-:28: error: isa value is not a constant +-:30: error: isa value less than zero +-:31: error: column number is not a constant +-:33: warning: unrecognized loc option `foo' +-:33: warning: unrecognized numeric qualifier diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32_testhd.asm b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32_testhd.asm new file mode 100644 index 0000000000..d5a5b08d05 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32_testhd.asm @@ -0,0 +1,980 @@ + .file "test_hd.c" + .section .debug_abbrev,"",@progbits +.Ldebug_abbrev0: + .section .debug_info,"",@progbits +.Ldebug_info0: + .section .debug_line,"",@progbits +.Ldebug_line0: + .text +.Ltext0: + .section .rodata.str1.1,"aMS",@progbits,1 +.LC0: + .string "Usage: %s \n" +.LC1: + .string "rb" +.LC2: + .string "Could not open `%s'.\n" +.LC3: + .string "%02x \n" +.LC4: + .string "Error reading from `%s'.\n" + .text + .p2align 2,,3 +.globl main + .type main, @function +main: +.LFB3: + .file 1 "test_hd.c" + .loc 1 33 0 + pushl %ebp +.LCFI0: + movl %esp, %ebp +.LCFI1: + pushl %esi +.LCFI2: + pushl %ebx +.LCFI3: + movl 12(%ebp), %esi + andl $-16, %esp + subl $16, %esp + .loc 1 37 0 + cmpl $2, 8(%ebp) + je .L2 + .loc 1 38 0 + subl $4, %esp + pushl (%esi) + pushl $.LC0 + pushl __stderrp +.LCFI4: + call fprintf + .loc 1 39 0 + movl $1, %eax + jmp .L1 + .p2align 2,,3 +.L2: + .loc 1 42 0 + subl $8, %esp + pushl $.LC1 + pushl 4(%esi) + call fopen + movl %eax, %ebx + .loc 1 44 0 + addl $16, %esp + testl %eax, %eax + jne .L4 + .loc 1 45 0 + subl $4, %esp + pushl 4(%esi) + pushl $.LC2 + pushl __stderrp + call fprintf + .loc 1 46 0 + movl $1, %eax + jmp .L1 + .p2align 2,,3 +.L6: + .loc 1 50 0 + subl $8, %esp + pushl %eax + pushl $.LC3 + call printf + addl $16, %esp +.L4: + subl $12, %esp + pushl %ebx + call fgetc + addl $16, %esp + cmpl $-1, %eax + jne .L6 + .loc 1 52 0 + cmpl $0, __isthreaded + jne .L8 + testb $64, 12(%ebx) + jne .L9 + jmp .L7 +.L8: + subl $12, %esp + pushl %ebx + call ferror + addl $16, %esp + testl %eax, %eax + je .L7 +.L9: + .loc 1 53 0 + subl $4, %esp + pushl 4(%esi) + pushl $.LC4 + pushl __stderrp + call fprintf + .loc 1 54 0 + movl $1, %eax + jmp .L1 +.L7: + .loc 1 57 0 + subl $12, %esp + pushl %ebx + call fclose + .loc 1 58 0 + movl $0, %eax + .p2align 2,,3 +.L1: + .loc 1 59 0 + leal -8(%ebp), %esp + popl %ebx + popl %esi + leave + ret +.LFE3: + .size main, .-main + .section .debug_frame,"",@progbits +.Lframe0: + .long .LECIE0-.LSCIE0 +.LSCIE0: + .long 0xffffffff + .byte 0x1 + .string "" + .uleb128 0x1 + .sleb128 -4 + .byte 0x8 + .byte 0xc + .uleb128 0x4 + .uleb128 0x4 + .byte 0x88 + .uleb128 0x1 + .p2align 2 +.LECIE0: +.LSFDE0: + .long .LEFDE0-.LASFDE0 +.LASFDE0: + .long .Lframe0 + .long .LFB3 + .long .LFE3-.LFB3 + .byte 0x4 + .long .LCFI0-.LFB3 + .byte 0xe + .uleb128 0x8 + .byte 0x85 + .uleb128 0x2 + .byte 0x4 + .long .LCFI1-.LCFI0 + .byte 0xd + .uleb128 0x5 + .byte 0x4 + .long .LCFI3-.LCFI1 + .byte 0x83 + .uleb128 0x4 + .byte 0x86 + .uleb128 0x3 + .byte 0x4 + .long .LCFI4-.LCFI3 + .byte 0x2e + .uleb128 0x10 + .p2align 2 +.LEFDE0: + .file 2 "/usr/include/stdio.h" + .file 3 "/usr/include/sys/_types.h" + .file 4 "/usr/include/machine/_types.h" + .text +.Letext0: + .section .debug_info + .long 0x326 + .value 0x2 + .long .Ldebug_abbrev0 + .byte 0x4 + .uleb128 0x1 + .long .Ldebug_line0 + .long .Letext0 + .long .Ltext0 + .long .LASF37 + .byte 0x1 + .long .LASF38 + .long .LASF39 + .uleb128 0x2 + .long .LASF0 + .byte 0x1 + .byte 0x6 + .uleb128 0x2 + .long .LASF1 + .byte 0x1 + .byte 0x8 + .uleb128 0x2 + .long .LASF2 + .byte 0x2 + .byte 0x5 + .uleb128 0x2 + .long .LASF3 + .byte 0x2 + .byte 0x7 + .uleb128 0x3 + .string "int" + .byte 0x4 + .byte 0x5 + .uleb128 0x2 + .long .LASF4 + .byte 0x4 + .byte 0x7 + .uleb128 0x4 + .long .LASF11 + .byte 0x4 + .byte 0x3a + .long 0x5a + .uleb128 0x2 + .long .LASF5 + .byte 0x8 + .byte 0x5 + .uleb128 0x2 + .long .LASF6 + .byte 0x8 + .byte 0x7 + .uleb128 0x2 + .long .LASF7 + .byte 0x4 + .byte 0x7 + .uleb128 0x2 + .long .LASF8 + .byte 0x8 + .byte 0x4 + .uleb128 0x2 + .long .LASF9 + .byte 0x1 + .byte 0x6 + .uleb128 0x2 + .long .LASF10 + .byte 0x4 + .byte 0x5 + .uleb128 0x4 + .long .LASF12 + .byte 0x3 + .byte 0x32 + .long 0x4f + .uleb128 0x2 + .long .LASF4 + .byte 0x4 + .byte 0x7 + .uleb128 0x4 + .long .LASF13 + .byte 0x2 + .byte 0x2f + .long 0x84 + .uleb128 0x5 + .long 0xca + .long .LASF16 + .byte 0x8 + .byte 0x2 + .byte 0x46 + .uleb128 0x6 + .long .LASF14 + .byte 0x2 + .byte 0x47 + .long 0xca + .byte 0x2 + .byte 0x23 + .uleb128 0x0 + .uleb128 0x6 + .long .LASF15 + .byte 0x2 + .byte 0x48 + .long 0x41 + .byte 0x2 + .byte 0x23 + .uleb128 0x4 + .byte 0x0 + .uleb128 0x7 + .byte 0x4 + .long 0x2c + .uleb128 0x5 + .long 0x1f8 + .long .LASF17 + .byte 0x58 + .byte 0x2 + .byte 0x66 + .uleb128 0x8 + .string "_p" + .byte 0x2 + .byte 0x67 + .long 0xca + .byte 0x2 + .byte 0x23 + .uleb128 0x0 + .uleb128 0x8 + .string "_r" + .byte 0x2 + .byte 0x68 + .long 0x41 + .byte 0x2 + .byte 0x23 + .uleb128 0x4 + .uleb128 0x8 + .string "_w" + .byte 0x2 + .byte 0x69 + .long 0x41 + .byte 0x2 + .byte 0x23 + .uleb128 0x8 + .uleb128 0x6 + .long .LASF18 + .byte 0x2 + .byte 0x6a + .long 0x33 + .byte 0x2 + .byte 0x23 + .uleb128 0xc + .uleb128 0x6 + .long .LASF19 + .byte 0x2 + .byte 0x6b + .long 0x33 + .byte 0x2 + .byte 0x23 + .uleb128 0xe + .uleb128 0x8 + .string "_bf" + .byte 0x2 + .byte 0x6c + .long 0xa1 + .byte 0x2 + .byte 0x23 + .uleb128 0x10 + .uleb128 0x6 + .long .LASF20 + .byte 0x2 + .byte 0x6d + .long 0x41 + .byte 0x2 + .byte 0x23 + .uleb128 0x18 + .uleb128 0x6 + .long .LASF21 + .byte 0x2 + .byte 0x70 + .long 0x1f8 + .byte 0x2 + .byte 0x23 + .uleb128 0x1c + .uleb128 0x6 + .long .LASF22 + .byte 0x2 + .byte 0x71 + .long 0x20a + .byte 0x2 + .byte 0x23 + .uleb128 0x20 + .uleb128 0x6 + .long .LASF23 + .byte 0x2 + .byte 0x72 + .long 0x230 + .byte 0x2 + .byte 0x23 + .uleb128 0x24 + .uleb128 0x6 + .long .LASF24 + .byte 0x2 + .byte 0x73 + .long 0x250 + .byte 0x2 + .byte 0x23 + .uleb128 0x28 + .uleb128 0x6 + .long .LASF25 + .byte 0x2 + .byte 0x74 + .long 0x27b + .byte 0x2 + .byte 0x23 + .uleb128 0x2c + .uleb128 0x8 + .string "_ub" + .byte 0x2 + .byte 0x77 + .long 0xa1 + .byte 0x2 + .byte 0x23 + .uleb128 0x30 + .uleb128 0x9 + .long .LASF40 + .byte 0x1 + .uleb128 0x6 + .long .LASF26 + .byte 0x2 + .byte 0x78 + .long 0x281 + .byte 0x2 + .byte 0x23 + .uleb128 0x38 + .uleb128 0x8 + .string "_ur" + .byte 0x2 + .byte 0x79 + .long 0x41 + .byte 0x2 + .byte 0x23 + .uleb128 0x3c + .uleb128 0x6 + .long .LASF27 + .byte 0x2 + .byte 0x7c + .long 0x287 + .byte 0x2 + .byte 0x23 + .uleb128 0x40 + .uleb128 0x6 + .long .LASF28 + .byte 0x2 + .byte 0x7d + .long 0x297 + .byte 0x2 + .byte 0x23 + .uleb128 0x43 + .uleb128 0x8 + .string "_lb" + .byte 0x2 + .byte 0x80 + .long 0xa1 + .byte 0x2 + .byte 0x23 + .uleb128 0x44 + .uleb128 0x6 + .long .LASF29 + .byte 0x2 + .byte 0x83 + .long 0x41 + .byte 0x2 + .byte 0x23 + .uleb128 0x4c + .uleb128 0x6 + .long .LASF30 + .byte 0x2 + .byte 0x84 + .long 0x96 + .byte 0x2 + .byte 0x23 + .uleb128 0x50 + .byte 0x0 + .uleb128 0xa + .byte 0x4 + .uleb128 0xb + .long 0x20a + .byte 0x1 + .long 0x41 + .uleb128 0xc + .long 0x1f8 + .byte 0x0 + .uleb128 0x7 + .byte 0x4 + .long 0x1fa + .uleb128 0xb + .long 0x22a + .byte 0x1 + .long 0x41 + .uleb128 0xc + .long 0x1f8 + .uleb128 0xc + .long 0x22a + .uleb128 0xc + .long 0x41 + .byte 0x0 + .uleb128 0x7 + .byte 0x4 + .long 0x76 + .uleb128 0x7 + .byte 0x4 + .long 0x210 + .uleb128 0xb + .long 0x250 + .byte 0x1 + .long 0x96 + .uleb128 0xc + .long 0x1f8 + .uleb128 0xc + .long 0x96 + .uleb128 0xc + .long 0x41 + .byte 0x0 + .uleb128 0x7 + .byte 0x4 + .long 0x236 + .uleb128 0xb + .long 0x270 + .byte 0x1 + .long 0x41 + .uleb128 0xc + .long 0x1f8 + .uleb128 0xc + .long 0x270 + .uleb128 0xc + .long 0x41 + .byte 0x0 + .uleb128 0x7 + .byte 0x4 + .long 0x276 + .uleb128 0xd + .long 0x76 + .uleb128 0x7 + .byte 0x4 + .long 0x256 + .uleb128 0x7 + .byte 0x4 + .long 0x18f + .uleb128 0xe + .long 0x297 + .long 0x2c + .uleb128 0xf + .long 0x8f + .byte 0x2 + .byte 0x0 + .uleb128 0xe + .long 0x2a7 + .long 0x2c + .uleb128 0xf + .long 0x8f + .byte 0x0 + .byte 0x0 + .uleb128 0x4 + .long .LASF31 + .byte 0x2 + .byte 0x85 + .long 0xd0 + .uleb128 0x10 + .long 0x302 + .byte 0x1 + .long .LASF41 + .byte 0x1 + .byte 0x21 + .byte 0x1 + .long 0x41 + .long .LFB3 + .long .LFE3 + .byte 0x1 + .byte 0x55 + .uleb128 0x11 + .long .LASF32 + .byte 0x1 + .byte 0x20 + .long 0x41 + .byte 0x2 + .byte 0x91 + .sleb128 8 + .uleb128 0x11 + .long .LASF33 + .byte 0x1 + .byte 0x20 + .long 0x302 + .byte 0x1 + .byte 0x56 + .uleb128 0x12 + .long .LASF34 + .byte 0x1 + .byte 0x22 + .long 0x308 + .byte 0x1 + .byte 0x53 + .uleb128 0x13 + .string "ch" + .byte 0x1 + .byte 0x23 + .long 0x41 + .byte 0x1 + .byte 0x50 + .byte 0x0 + .uleb128 0x7 + .byte 0x4 + .long 0x22a + .uleb128 0x7 + .byte 0x4 + .long 0x2a7 + .uleb128 0x14 + .long .LASF35 + .byte 0x2 + .byte 0x8b + .long 0x308 + .byte 0x1 + .byte 0x1 + .uleb128 0x15 + .long .LASF36 + .byte 0x2 + .value 0x1a4 + .long 0x41 + .byte 0x1 + .byte 0x1 + .byte 0x0 + .section .debug_abbrev + .uleb128 0x1 + .uleb128 0x11 + .byte 0x1 + .uleb128 0x10 + .uleb128 0x6 + .uleb128 0x12 + .uleb128 0x1 + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x25 + .uleb128 0xe + .uleb128 0x13 + .uleb128 0xb + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x1b + .uleb128 0xe + .byte 0x0 + .byte 0x0 + .uleb128 0x2 + .uleb128 0x24 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3e + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x24 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3e + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0x4 + .uleb128 0x16 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0x5 + .uleb128 0x13 + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0x6 + .uleb128 0xd + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x38 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0x7 + .uleb128 0xf + .byte 0x0 + .uleb128 0xb + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0x8 + .uleb128 0xd + .byte 0x0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x38 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0x9 + .uleb128 0x13 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3c + .uleb128 0xc + .byte 0x0 + .byte 0x0 + .uleb128 0xa + .uleb128 0xf + .byte 0x0 + .uleb128 0xb + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0xb + .uleb128 0x15 + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0x27 + .uleb128 0xc + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0xc + .uleb128 0x5 + .byte 0x0 + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0xd + .uleb128 0x26 + .byte 0x0 + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0xe + .uleb128 0x1 + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0xf + .uleb128 0x21 + .byte 0x0 + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2f + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0x10 + .uleb128 0x2e + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0x3f + .uleb128 0xc + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x27 + .uleb128 0xc + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x1 + .uleb128 0x40 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0x11 + .uleb128 0x5 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0x12 + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0x13 + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0x14 + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x3f + .uleb128 0xc + .uleb128 0x3c + .uleb128 0xc + .byte 0x0 + .byte 0x0 + .uleb128 0x15 + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0x5 + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x3f + .uleb128 0xc + .uleb128 0x3c + .uleb128 0xc + .byte 0x0 + .byte 0x0 + .byte 0x0 + .section .debug_pubnames,"",@progbits + .long 0x17 + .value 0x2 + .long .Ldebug_info0 + .long 0x32a + .long 0x2b2 + .string "main" + .long 0x0 + .section .debug_aranges,"",@progbits + .long 0x1c + .value 0x2 + .long .Ldebug_info0 + .byte 0x4 + .byte 0x0 + .value 0x0 + .value 0x0 + .long .Ltext0 + .long .Letext0-.Ltext0 + .long 0x0 + .long 0x0 + .section .debug_str,"MS",@progbits,1 +.LASF34: + .string "bfile" +.LASF20: + .string "_lbfsize" +.LASF16: + .string "__sbuf" +.LASF2: + .string "short int" +.LASF10: + .string "long int" +.LASF26: + .string "_extra" +.LASF17: + .string "__sFILE" +.LASF37: + .string "GNU C 3.4.2 [FreeBSD] 20040728" +.LASF39: + .string "/home/pete/project/yasm3/yasm" +.LASF21: + .string "_cookie" +.LASF28: + .string "_nbuf" +.LASF25: + .string "_write" +.LASF31: + .string "FILE" +.LASF5: + .string "long long int" +.LASF11: + .string "__int64_t" +.LASF29: + .string "_blksize" +.LASF22: + .string "_close" +.LASF33: + .string "argv" +.LASF27: + .string "_ubuf" +.LASF1: + .string "unsigned char" +.LASF23: + .string "_read" +.LASF32: + .string "argc" +.LASF36: + .string "__isthreaded" +.LASF0: + .string "signed char" +.LASF40: + .string "__sFILEX" +.LASF6: + .string "long long unsigned int" +.LASF4: + .string "unsigned int" +.LASF3: + .string "short unsigned int" +.LASF41: + .string "main" +.LASF14: + .string "_base" +.LASF19: + .string "_file" +.LASF9: + .string "char" +.LASF13: + .string "fpos_t" +.LASF7: + .string "long unsigned int" +.LASF35: + .string "__stderrp" +.LASF12: + .string "__off_t" +.LASF24: + .string "_seek" +.LASF8: + .string "double" +.LASF30: + .string "_offset" +.LASF38: + .string "test_hd.c" +.LASF18: + .string "_flags" +.LASF15: + .string "_size" + .ident "GCC: (GNU) 3.4.2 [FreeBSD] 20040728" diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32_testhd.hex b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32_testhd.hex new file mode 100644 index 0000000000..7cfddd03c8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass32/dwarf32_testhd.hex @@ -0,0 +1,5936 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +14 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +14 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +55 +89 +e5 +56 +53 +8b +75 +0c +83 +e4 +f0 +83 +ec +10 +83 +7d +08 +02 +74 +20 +83 +ec +04 +ff +36 +68 +00 +00 +00 +00 +ff +35 +00 +00 +00 +00 +e8 +fc +ff +ff +ff +b8 +01 +00 +00 +00 +e9 +a9 +00 +00 +00 +90 +83 +ec +08 +68 +12 +00 +00 +00 +ff +76 +04 +e8 +fc +ff +ff +ff +89 +c3 +83 +c4 +10 +85 +c0 +75 +30 +83 +ec +04 +ff +76 +04 +68 +15 +00 +00 +00 +ff +35 +00 +00 +00 +00 +e8 +fc +ff +ff +ff +b8 +01 +00 +00 +00 +eb +72 +66 +90 +83 +ec +08 +50 +68 +2b +00 +00 +00 +e8 +fc +ff +ff +ff +83 +c4 +10 +83 +ec +0c +53 +e8 +fc +ff +ff +ff +83 +c4 +10 +83 +f8 +ff +75 +de +83 +3d +00 +00 +00 +00 +00 +75 +08 +f6 +43 +0c +40 +75 +12 +eb +2d +83 +ec +0c +53 +e8 +fc +ff +ff +ff +83 +c4 +10 +85 +c0 +74 +1d +83 +ec +04 +ff +76 +04 +68 +32 +00 +00 +00 +ff +35 +00 +00 +00 +00 +e8 +fc +ff +ff +ff +b8 +01 +00 +00 +00 +eb +10 +83 +ec +0c +53 +e8 +fc +ff +ff +ff +b8 +00 +00 +00 +00 +66 +90 +8d +65 +f8 +5b +5e +c9 +c3 +00 +1a +00 +00 +00 +01 +4b +00 +00 +20 +00 +00 +00 +01 +55 +00 +00 +25 +00 +00 +00 +02 +56 +00 +00 +38 +00 +00 +00 +01 +4b +00 +00 +40 +00 +00 +00 +02 +57 +00 +00 +54 +00 +00 +00 +01 +4b +00 +00 +5a +00 +00 +00 +01 +55 +00 +00 +5f +00 +00 +00 +02 +56 +00 +00 +71 +00 +00 +00 +01 +4b +00 +00 +76 +00 +00 +00 +02 +58 +00 +00 +82 +00 +00 +00 +02 +59 +00 +00 +90 +00 +00 +00 +01 +5a +00 +00 +a4 +00 +00 +00 +02 +5b +00 +00 +b6 +00 +00 +00 +01 +4b +00 +00 +bc +00 +00 +00 +01 +55 +00 +00 +c1 +00 +00 +00 +02 +56 +00 +00 +d1 +00 +00 +00 +02 +5c +00 +00 +01 +11 +01 +10 +06 +12 +01 +11 +01 +25 +0e +13 +0b +03 +0e +1b +0e +00 +00 +02 +24 +00 +03 +0e +0b +0b +3e +0b +00 +00 +03 +24 +00 +03 +08 +0b +0b +3e +0b +00 +00 +04 +16 +00 +03 +0e +3a +0b +3b +0b +49 +13 +00 +00 +05 +13 +01 +01 +13 +03 +0e +0b +0b +3a +0b +3b +0b +00 +00 +06 +0d +00 +03 +0e +3a +0b +3b +0b +49 +13 +38 +0a +00 +00 +07 +0f +00 +0b +0b +49 +13 +00 +00 +08 +0d +00 +03 +08 +3a +0b +3b +0b +49 +13 +38 +0a +00 +00 +09 +13 +00 +03 +0e +3c +0c +00 +00 +0a +0f +00 +0b +0b +00 +00 +0b +15 +01 +01 +13 +27 +0c +49 +13 +00 +00 +0c +05 +00 +49 +13 +00 +00 +0d +26 +00 +49 +13 +00 +00 +0e +01 +01 +01 +13 +49 +13 +00 +00 +0f +21 +00 +49 +13 +2f +0b +00 +00 +10 +2e +01 +01 +13 +3f +0c +03 +0e +3a +0b +3b +0b +27 +0c +49 +13 +11 +01 +12 +01 +40 +0a +00 +00 +11 +05 +00 +03 +0e +3a +0b +3b +0b +49 +13 +02 +0a +00 +00 +12 +34 +00 +03 +0e +3a +0b +3b +0b +49 +13 +02 +0a +00 +00 +13 +34 +00 +03 +08 +3a +0b +3b +0b +49 +13 +02 +0a +00 +00 +14 +34 +00 +03 +0e +3a +0b +3b +0b +49 +13 +3f +0c +3c +0c +00 +00 +15 +34 +00 +03 +0e +3a +0b +3b +05 +49 +13 +3f +0c +3c +0c +00 +00 +00 +26 +03 +00 +00 +02 +00 +00 +00 +00 +00 +04 +01 +00 +00 +00 +00 +e3 +00 +00 +00 +00 +00 +00 +00 +38 +00 +00 +00 +01 +8a +01 +00 +00 +57 +00 +00 +00 +02 +e8 +00 +00 +00 +01 +06 +02 +c2 +00 +00 +00 +01 +08 +02 +16 +00 +00 +00 +02 +05 +02 +21 +01 +00 +00 +02 +07 +03 +69 +6e +74 +00 +04 +05 +02 +14 +01 +00 +00 +04 +07 +04 +9d +00 +00 +00 +04 +3a +5a +00 +00 +00 +02 +8f +00 +00 +00 +08 +05 +02 +fd +00 +00 +00 +08 +07 +02 +51 +01 +00 +00 +04 +07 +02 +7b +01 +00 +00 +08 +04 +02 +45 +01 +00 +00 +01 +06 +02 +20 +00 +00 +00 +04 +05 +04 +6d +01 +00 +00 +03 +32 +4f +00 +00 +00 +02 +14 +01 +00 +00 +04 +07 +04 +4a +01 +00 +00 +02 +2f +84 +00 +00 +00 +05 +ca +00 +00 +00 +0f +00 +00 +00 +08 +02 +46 +06 +39 +01 +00 +00 +02 +47 +ca +00 +00 +00 +02 +23 +00 +06 +9b +01 +00 +00 +02 +48 +41 +00 +00 +00 +02 +23 +04 +00 +07 +04 +2c +00 +00 +00 +05 +f8 +01 +00 +00 +30 +00 +00 +00 +58 +02 +66 +08 +5f +70 +00 +02 +67 +ca +00 +00 +00 +02 +23 +00 +08 +5f +72 +00 +02 +68 +41 +00 +00 +00 +02 +23 +04 +08 +5f +77 +00 +02 +69 +41 +00 +00 +00 +02 +23 +08 +06 +94 +01 +00 +00 +02 +6a +33 +00 +00 +00 +02 +23 +0c +06 +3f +01 +00 +00 +02 +6b +33 +00 +00 +00 +02 +23 +0e +08 +5f +62 +66 +00 +02 +6c +a1 +00 +00 +00 +02 +23 +10 +06 +06 +00 +00 +00 +02 +6d +41 +00 +00 +00 +02 +23 +18 +06 +75 +00 +00 +00 +02 +70 +f8 +01 +00 +00 +02 +23 +1c +06 +b0 +00 +00 +00 +02 +71 +0a +02 +00 +00 +02 +23 +20 +06 +d0 +00 +00 +00 +02 +72 +30 +02 +00 +00 +02 +23 +24 +06 +75 +01 +00 +00 +02 +73 +50 +02 +00 +00 +02 +23 +28 +06 +83 +00 +00 +00 +02 +74 +7b +02 +00 +00 +02 +23 +2c +08 +5f +75 +62 +00 +02 +77 +a1 +00 +00 +00 +02 +23 +30 +09 +f4 +00 +00 +00 +01 +06 +29 +00 +00 +00 +02 +78 +81 +02 +00 +00 +02 +23 +38 +08 +5f +75 +72 +00 +02 +79 +41 +00 +00 +00 +02 +23 +3c +06 +bc +00 +00 +00 +02 +7c +87 +02 +00 +00 +02 +23 +40 +06 +7d +00 +00 +00 +02 +7d +97 +02 +00 +00 +02 +23 +43 +08 +5f +6c +62 +00 +02 +80 +a1 +00 +00 +00 +02 +23 +44 +06 +a7 +00 +00 +00 +02 +83 +41 +00 +00 +00 +02 +23 +4c +06 +82 +01 +00 +00 +02 +84 +96 +00 +00 +00 +02 +23 +50 +00 +0a +04 +0b +0a +02 +00 +00 +01 +41 +00 +00 +00 +0c +f8 +01 +00 +00 +00 +07 +04 +fa +01 +00 +00 +0b +2a +02 +00 +00 +01 +41 +00 +00 +00 +0c +f8 +01 +00 +00 +0c +2a +02 +00 +00 +0c +41 +00 +00 +00 +00 +07 +04 +76 +00 +00 +00 +07 +04 +10 +02 +00 +00 +0b +50 +02 +00 +00 +01 +96 +00 +00 +00 +0c +f8 +01 +00 +00 +0c +96 +00 +00 +00 +0c +41 +00 +00 +00 +00 +07 +04 +36 +02 +00 +00 +0b +70 +02 +00 +00 +01 +41 +00 +00 +00 +0c +f8 +01 +00 +00 +0c +70 +02 +00 +00 +0c +41 +00 +00 +00 +00 +07 +04 +76 +02 +00 +00 +0d +76 +00 +00 +00 +07 +04 +56 +02 +00 +00 +07 +04 +8f +01 +00 +00 +0e +97 +02 +00 +00 +2c +00 +00 +00 +0f +8f +00 +00 +00 +02 +00 +0e +a7 +02 +00 +00 +2c +00 +00 +00 +0f +8f +00 +00 +00 +00 +00 +04 +8a +00 +00 +00 +02 +85 +d0 +00 +00 +00 +10 +02 +03 +00 +00 +01 +34 +01 +00 +00 +01 +21 +01 +41 +00 +00 +00 +00 +00 +00 +00 +e3 +00 +00 +00 +01 +55 +11 +d6 +00 +00 +00 +01 +20 +41 +00 +00 +00 +02 +91 +08 +11 +b7 +00 +00 +00 +01 +20 +02 +03 +00 +00 +01 +56 +12 +00 +00 +00 +00 +01 +22 +08 +03 +00 +00 +01 +53 +13 +63 +68 +00 +01 +23 +41 +00 +00 +00 +01 +50 +00 +07 +04 +2a +02 +00 +00 +07 +04 +a7 +02 +00 +00 +14 +63 +01 +00 +00 +02 +8b +08 +03 +00 +00 +01 +01 +15 +db +00 +00 +00 +02 +a4 +01 +41 +00 +00 +00 +01 +01 +00 +00 +00 +06 +00 +00 +00 +01 +52 +00 +00 +0c +00 +00 +00 +01 +4e +00 +00 +10 +00 +00 +00 +01 +53 +00 +00 +14 +00 +00 +00 +01 +53 +00 +00 +18 +00 +00 +00 +01 +03 +00 +00 +1d +00 +00 +00 +01 +03 +00 +00 +21 +00 +00 +00 +01 +03 +00 +00 +26 +00 +00 +00 +01 +03 +00 +00 +2d +00 +00 +00 +01 +03 +00 +00 +34 +00 +00 +00 +01 +03 +00 +00 +3b +00 +00 +00 +01 +03 +00 +00 +49 +00 +00 +00 +01 +03 +00 +00 +50 +00 +00 +00 +01 +03 +00 +00 +5b +00 +00 +00 +01 +03 +00 +00 +62 +00 +00 +00 +01 +03 +00 +00 +69 +00 +00 +00 +01 +03 +00 +00 +70 +00 +00 +00 +01 +03 +00 +00 +77 +00 +00 +00 +01 +03 +00 +00 +7e +00 +00 +00 +01 +03 +00 +00 +85 +00 +00 +00 +01 +03 +00 +00 +90 +00 +00 +00 +01 +03 +00 +00 +97 +00 +00 +00 +01 +03 +00 +00 +a6 +00 +00 +00 +01 +03 +00 +00 +ae +00 +00 +00 +01 +03 +00 +00 +bc +00 +00 +00 +01 +03 +00 +00 +d5 +00 +00 +00 +01 +03 +00 +00 +04 +01 +00 +00 +01 +03 +00 +00 +12 +01 +00 +00 +01 +03 +00 +00 +2e +01 +00 +00 +01 +03 +00 +00 +3c +01 +00 +00 +01 +03 +00 +00 +4a +01 +00 +00 +01 +03 +00 +00 +58 +01 +00 +00 +01 +03 +00 +00 +66 +01 +00 +00 +01 +03 +00 +00 +74 +01 +00 +00 +01 +03 +00 +00 +90 +01 +00 +00 +01 +03 +00 +00 +96 +01 +00 +00 +01 +03 +00 +00 +b2 +01 +00 +00 +01 +03 +00 +00 +c0 +01 +00 +00 +01 +03 +00 +00 +dc +01 +00 +00 +01 +03 +00 +00 +ea +01 +00 +00 +01 +03 +00 +00 +a8 +02 +00 +00 +01 +03 +00 +00 +b8 +02 +00 +00 +01 +03 +00 +00 +c3 +02 +00 +00 +01 +53 +00 +00 +c7 +02 +00 +00 +01 +53 +00 +00 +ce +02 +00 +00 +01 +03 +00 +00 +dc +02 +00 +00 +01 +03 +00 +00 +e9 +02 +00 +00 +01 +03 +00 +00 +0f +03 +00 +00 +01 +03 +00 +00 +1c +03 +00 +00 +01 +03 +00 +00 +a0 +00 +00 +00 +02 +00 +76 +00 +00 +00 +01 +01 +fb +0e +0d +00 +01 +01 +01 +01 +00 +00 +00 +01 +00 +00 +01 +2f +75 +73 +72 +2f +69 +6e +63 +6c +75 +64 +65 +00 +2f +75 +73 +72 +2f +69 +6e +63 +6c +75 +64 +65 +2f +73 +79 +73 +00 +2f +75 +73 +72 +2f +69 +6e +63 +6c +75 +64 +65 +2f +6d +61 +63 +68 +69 +6e +65 +00 +00 +74 +65 +73 +74 +5f +68 +64 +2e +63 +00 +00 +00 +00 +73 +74 +64 +69 +6f +2e +68 +00 +01 +00 +00 +5f +74 +79 +70 +65 +73 +2e +68 +00 +02 +00 +00 +5f +74 +79 +70 +65 +73 +2e +68 +00 +03 +00 +00 +00 +00 +05 +02 +00 +00 +00 +00 +03 +20 +01 +da +67 +08 +4b +af +08 +22 +75 +08 +59 +94 +02 +22 +14 +08 +f3 +08 +59 +77 +91 +75 +02 +07 +00 +01 +01 +83 +00 +00 +00 +01 +53 +00 +00 +55 +73 +61 +67 +65 +3a +20 +25 +73 +20 +3c +66 +69 +6c +65 +3e +0a +00 +72 +62 +00 +43 +6f +75 +6c +64 +20 +6e +6f +74 +20 +6f +70 +65 +6e +20 +60 +25 +73 +27 +2e +0a +00 +25 +30 +32 +78 +20 +0a +00 +45 +72 +72 +6f +72 +20 +72 +65 +61 +64 +69 +6e +67 +20 +66 +72 +6f +6d +20 +60 +25 +73 +27 +2e +0a +00 +10 +00 +00 +00 +ff +ff +ff +ff +01 +00 +01 +7c +08 +0c +04 +04 +88 +01 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e3 +00 +00 +00 +04 +01 +00 +00 +00 +0e +08 +85 +02 +04 +02 +00 +00 +00 +0d +05 +04 +02 +00 +00 +00 +83 +04 +86 +03 +04 +1f +00 +00 +00 +2e +10 +18 +00 +00 +00 +01 +37 +00 +00 +1c +00 +00 +00 +01 +53 +00 +00 +17 +00 +00 +00 +02 +00 +00 +00 +00 +00 +2a +03 +00 +00 +b2 +02 +00 +00 +6d +61 +69 +6e +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +01 +50 +00 +00 +1c +00 +00 +00 +02 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e3 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +01 +50 +00 +00 +10 +00 +00 +00 +01 +53 +00 +00 +62 +66 +69 +6c +65 +00 +5f +6c +62 +66 +73 +69 +7a +65 +00 +5f +5f +73 +62 +75 +66 +00 +73 +68 +6f +72 +74 +20 +69 +6e +74 +00 +6c +6f +6e +67 +20 +69 +6e +74 +00 +5f +65 +78 +74 +72 +61 +00 +5f +5f +73 +46 +49 +4c +45 +00 +47 +4e +55 +20 +43 +20 +33 +2e +34 +2e +32 +20 +5b +46 +72 +65 +65 +42 +53 +44 +5d +20 +32 +30 +30 +34 +30 +37 +32 +38 +00 +2f +68 +6f +6d +65 +2f +70 +65 +74 +65 +2f +70 +72 +6f +6a +65 +63 +74 +2f +79 +61 +73 +6d +33 +2f +79 +61 +73 +6d +00 +5f +63 +6f +6f +6b +69 +65 +00 +5f +6e +62 +75 +66 +00 +5f +77 +72 +69 +74 +65 +00 +46 +49 +4c +45 +00 +6c +6f +6e +67 +20 +6c +6f +6e +67 +20 +69 +6e +74 +00 +5f +5f +69 +6e +74 +36 +34 +5f +74 +00 +5f +62 +6c +6b +73 +69 +7a +65 +00 +5f +63 +6c +6f +73 +65 +00 +61 +72 +67 +76 +00 +5f +75 +62 +75 +66 +00 +75 +6e +73 +69 +67 +6e +65 +64 +20 +63 +68 +61 +72 +00 +5f +72 +65 +61 +64 +00 +61 +72 +67 +63 +00 +5f +5f +69 +73 +74 +68 +72 +65 +61 +64 +65 +64 +00 +73 +69 +67 +6e +65 +64 +20 +63 +68 +61 +72 +00 +5f +5f +73 +46 +49 +4c +45 +58 +00 +6c +6f +6e +67 +20 +6c +6f +6e +67 +20 +75 +6e +73 +69 +67 +6e +65 +64 +20 +69 +6e +74 +00 +75 +6e +73 +69 +67 +6e +65 +64 +20 +69 +6e +74 +00 +73 +68 +6f +72 +74 +20 +75 +6e +73 +69 +67 +6e +65 +64 +20 +69 +6e +74 +00 +6d +61 +69 +6e +00 +5f +62 +61 +73 +65 +00 +5f +66 +69 +6c +65 +00 +63 +68 +61 +72 +00 +66 +70 +6f +73 +5f +74 +00 +6c +6f +6e +67 +20 +75 +6e +73 +69 +67 +6e +65 +64 +20 +69 +6e +74 +00 +5f +5f +73 +74 +64 +65 +72 +72 +70 +00 +5f +5f +6f +66 +66 +5f +74 +00 +5f +73 +65 +65 +6b +00 +64 +6f +75 +62 +6c +65 +00 +5f +6f +66 +66 +73 +65 +74 +00 +74 +65 +73 +74 +5f +68 +64 +2e +63 +00 +5f +66 +6c +61 +67 +73 +00 +5f +73 +69 +7a +65 +00 +00 +47 +43 +43 +3a +20 +28 +47 +4e +55 +29 +20 +33 +2e +34 +2e +32 +20 +5b +46 +72 +65 +65 +42 +53 +44 +5d +20 +32 +30 +30 +34 +30 +37 +32 +38 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +65 +62 +75 +67 +5f +61 +62 +62 +72 +65 +76 +00 +2e +64 +65 +62 +75 +67 +5f +69 +6e +66 +6f +00 +2e +64 +65 +62 +75 +67 +5f +6c +69 +6e +65 +00 +2e +72 +6f +64 +61 +74 +61 +2e +73 +74 +72 +31 +2e +31 +00 +2e +64 +65 +62 +75 +67 +5f +66 +72 +61 +6d +65 +00 +2e +64 +65 +62 +75 +67 +5f +70 +75 +62 +6e +61 +6d +65 +73 +00 +2e +64 +65 +62 +75 +67 +5f +61 +72 +61 +6e +67 +65 +73 +00 +2e +64 +65 +62 +75 +67 +5f +73 +74 +72 +00 +2e +63 +6f +6d +6d +65 +6e +74 +00 +2e +72 +65 +6c +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +2e +64 +65 +62 +75 +67 +5f +69 +6e +66 +6f +00 +2e +72 +65 +6c +2e +64 +65 +62 +75 +67 +5f +6c +69 +6e +65 +00 +2e +72 +65 +6c +2e +64 +65 +62 +75 +67 +5f +66 +72 +61 +6d +65 +00 +2e +72 +65 +6c +2e +64 +65 +62 +75 +67 +5f +70 +75 +62 +6e +61 +6d +65 +73 +00 +2e +72 +65 +6c +2e +64 +65 +62 +75 +67 +5f +61 +72 +61 +6e +67 +65 +73 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +74 +65 +73 +74 +5f +68 +64 +2e +63 +00 +6d +61 +69 +6e +00 +2e +4c +64 +65 +62 +75 +67 +5f +61 +62 +62 +72 +65 +76 +30 +00 +2e +4c +64 +65 +62 +75 +67 +5f +69 +6e +66 +6f +30 +00 +2e +4c +64 +65 +62 +75 +67 +5f +6c +69 +6e +65 +30 +00 +2e +4c +74 +65 +78 +74 +30 +00 +2e +4c +43 +30 +00 +2e +4c +43 +31 +00 +2e +4c +43 +32 +00 +2e +4c +43 +33 +00 +2e +4c +43 +34 +00 +2e +4c +46 +42 +33 +00 +2e +4c +43 +46 +49 +30 +00 +2e +4c +43 +46 +49 +31 +00 +2e +4c +43 +46 +49 +32 +00 +2e +4c +43 +46 +49 +33 +00 +2e +4c +32 +00 +5f +5f +73 +74 +64 +65 +72 +72 +70 +00 +2e +4c +43 +46 +49 +34 +00 +66 +70 +72 +69 +6e +74 +66 +00 +2e +4c +31 +00 +66 +6f +70 +65 +6e +00 +2e +4c +34 +00 +2e +4c +36 +00 +70 +72 +69 +6e +74 +66 +00 +66 +67 +65 +74 +63 +00 +5f +5f +69 +73 +74 +68 +72 +65 +61 +64 +65 +64 +00 +2e +4c +38 +00 +2e +4c +39 +00 +2e +4c +37 +00 +66 +65 +72 +72 +6f +72 +00 +66 +63 +6c +6f +73 +65 +00 +2e +4c +46 +45 +33 +00 +2e +4c +66 +72 +61 +6d +65 +30 +00 +2e +4c +45 +43 +49 +45 +30 +00 +2e +4c +53 +43 +49 +45 +30 +00 +2e +4c +53 +46 +44 +45 +30 +00 +2e +4c +45 +46 +44 +45 +30 +00 +2e +4c +41 +53 +46 +44 +45 +30 +00 +2e +4c +65 +74 +65 +78 +74 +30 +00 +2e +4c +41 +53 +46 +33 +37 +00 +2e +4c +41 +53 +46 +33 +38 +00 +2e +4c +41 +53 +46 +33 +39 +00 +2e +4c +41 +53 +46 +30 +00 +2e +4c +41 +53 +46 +31 +00 +2e +4c +41 +53 +46 +32 +00 +2e +4c +41 +53 +46 +33 +00 +2e +4c +41 +53 +46 +34 +00 +2e +4c +41 +53 +46 +31 +31 +00 +2e +4c +41 +53 +46 +35 +00 +2e +4c +41 +53 +46 +36 +00 +2e +4c +41 +53 +46 +37 +00 +2e +4c +41 +53 +46 +38 +00 +2e +4c +41 +53 +46 +39 +00 +2e +4c +41 +53 +46 +31 +30 +00 +2e +4c +41 +53 +46 +31 +32 +00 +2e +4c +41 +53 +46 +31 +33 +00 +2e +4c +41 +53 +46 +31 +36 +00 +2e +4c +41 +53 +46 +31 +34 +00 +2e +4c +41 +53 +46 +31 +35 +00 +2e +4c +41 +53 +46 +31 +37 +00 +2e +4c +41 +53 +46 +31 +38 +00 +2e +4c +41 +53 +46 +31 +39 +00 +2e +4c +41 +53 +46 +32 +30 +00 +2e +4c +41 +53 +46 +32 +31 +00 +2e +4c +41 +53 +46 +32 +32 +00 +2e +4c +41 +53 +46 +32 +33 +00 +2e +4c +41 +53 +46 +32 +34 +00 +2e +4c +41 +53 +46 +32 +35 +00 +2e +4c +41 +53 +46 +34 +30 +00 +2e +4c +41 +53 +46 +32 +36 +00 +2e +4c +41 +53 +46 +32 +37 +00 +2e +4c +41 +53 +46 +32 +38 +00 +2e +4c +41 +53 +46 +32 +39 +00 +2e +4c +41 +53 +46 +33 +30 +00 +2e +4c +41 +53 +46 +33 +31 +00 +2e +4c +41 +53 +46 +34 +31 +00 +2e +4c +41 +53 +46 +33 +32 +00 +2e +4c +41 +53 +46 +33 +33 +00 +2e +4c +41 +53 +46 +33 +34 +00 +2e +4c +41 +53 +46 +33 +35 +00 +2e +4c +41 +53 +46 +33 +36 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +0e +00 +61 +02 +00 +00 +db +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +59 +02 +00 +00 +63 +01 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +51 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +49 +02 +00 +00 +b7 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +41 +02 +00 +00 +d6 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +39 +02 +00 +00 +34 +01 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +31 +02 +00 +00 +8a +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +29 +02 +00 +00 +82 +01 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +21 +02 +00 +00 +a7 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +19 +02 +00 +00 +7d +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +11 +02 +00 +00 +bc +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +09 +02 +00 +00 +29 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +01 +02 +00 +00 +f4 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +f9 +01 +00 +00 +83 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +f1 +01 +00 +00 +75 +01 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +e9 +01 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +e1 +01 +00 +00 +b0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +d9 +01 +00 +00 +75 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +d1 +01 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +c9 +01 +00 +00 +3f +01 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +c1 +01 +00 +00 +94 +01 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +b9 +01 +00 +00 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +b1 +01 +00 +00 +9b +01 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +a9 +01 +00 +00 +39 +01 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +a1 +01 +00 +00 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +99 +01 +00 +00 +4a +01 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +91 +01 +00 +00 +6d +01 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +89 +01 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +82 +01 +00 +00 +45 +01 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +7b +01 +00 +00 +7b +01 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +74 +01 +00 +00 +51 +01 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +6d +01 +00 +00 +fd +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +66 +01 +00 +00 +8f +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +5e +01 +00 +00 +9d +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +57 +01 +00 +00 +14 +01 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +50 +01 +00 +00 +21 +01 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +49 +01 +00 +00 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +42 +01 +00 +00 +c2 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +3b +01 +00 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +33 +01 +00 +00 +57 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +2b +01 +00 +00 +8a +01 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +23 +01 +00 +00 +38 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +1a +01 +00 +00 +e3 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +11 +01 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +00 +09 +01 +00 +00 +44 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +00 +01 +01 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +00 +f9 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +00 +f1 +00 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +00 +e8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +0c +00 +e2 +00 +00 +00 +e3 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +d0 +00 +00 +00 +cc +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +cc +00 +00 +00 +af +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +c8 +00 +00 +00 +9f +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +aa +00 +00 +00 +6c +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +a6 +00 +00 +00 +7d +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +9c +00 +00 +00 +dc +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +8d +00 +00 +00 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +7f +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +78 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +71 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +6a +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +63 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +5d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +58 +00 +00 +00 +32 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0b +00 +53 +00 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +00 +00 +0b +00 +4e +00 +00 +00 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0b +00 +49 +00 +00 +00 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0b +00 +44 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +0b +00 +3c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +2e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +09 +00 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +07 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +0b +00 +00 +00 +00 +00 +00 +00 +e3 +00 +00 +00 +12 +00 +04 +00 +83 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +94 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +a0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +ae +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +b5 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +bb +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +d4 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +db +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ee +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d8 +0a +00 +00 +f8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +de +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +0b +00 +00 +69 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e6 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3c +0e +00 +00 +d0 +05 +00 +00 +02 +00 +00 +00 +54 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +e3 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +7c +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +24 +01 +00 +00 +88 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ac +01 +00 +00 +10 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +15 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bc +02 +00 +00 +2a +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +86 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e8 +05 +00 +00 +88 +01 +00 +00 +03 +00 +00 +00 +07 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +21 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +07 +00 +00 +a4 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +96 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +08 +00 +00 +08 +00 +00 +00 +03 +00 +00 +00 +09 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +2d +00 +00 +00 +01 +00 +00 +00 +32 +00 +00 +00 +00 +00 +00 +00 +1c +08 +00 +00 +4c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +3c +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +68 +08 +00 +00 +44 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +a6 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ac +08 +00 +00 +10 +00 +00 +00 +03 +00 +00 +00 +0c +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +49 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bc +08 +00 +00 +1b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +b7 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d8 +08 +00 +00 +08 +00 +00 +00 +03 +00 +00 +00 +0e +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +59 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e0 +08 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +cb +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +09 +00 +00 +10 +00 +00 +00 +03 +00 +00 +00 +10 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +68 +00 +00 +00 +01 +00 +00 +00 +30 +00 +00 +00 +00 +00 +00 +00 +10 +09 +00 +00 +a1 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +73 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b1 +0a +00 +00 +25 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/Makefile.inc new file mode 100644 index 0000000000..e976014518 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/Makefile.inc @@ -0,0 +1,8 @@ +TESTS += modules/dbgfmts/dwarf2/tests/pass64/dwarf2_pass64_test.sh + +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/pass64/dwarf2_pass64_test.sh +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/pass64/dwarf64_2loc.asm +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/pass64/dwarf64_2loc.hex +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/pass64/dwarf64_leb128.asm +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/pass64/dwarf64_leb128.hex + diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf2_pass64_test.sh b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf2_pass64_test.sh new file mode 100755 index 0000000000..a377327c17 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf2_pass64_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh dwarf2_pass64_test modules/dbgfmts/dwarf2/tests/pass64 "dwarf2 dbgfmt pass64" "-f elf64 -p gas -g dwarf2" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_2loc.asm b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_2loc.asm new file mode 100644 index 0000000000..5c7fcc88ab --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_2loc.asm @@ -0,0 +1,8 @@ +.file 1 "dwarf64_2loc.c" + +.text +.loc 1 1 0 +.loc 1 2 0 + xorq %rax, %rax +.section .debug_info +.byte 1 diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_2loc.hex b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_2loc.hex new file mode 100644 index 0000000000..d41612cdb6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_2loc.hex @@ -0,0 +1,880 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +08 +00 +01 +00 +48 +31 +c0 +01 +3c +00 +00 +00 +02 +00 +25 +00 +00 +00 +01 +01 +fb +0e +0d +00 +01 +01 +01 +01 +00 +00 +00 +01 +00 +00 +01 +00 +64 +77 +61 +72 +66 +36 +34 +5f +32 +6c +6f +63 +2e +63 +00 +00 +00 +00 +00 +00 +09 +02 +00 +00 +00 +00 +00 +00 +00 +00 +13 +02 +03 +00 +01 +01 +32 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +65 +62 +75 +67 +5f +69 +6e +66 +6f +00 +2e +64 +65 +62 +75 +67 +5f +6c +69 +6e +65 +00 +2e +72 +65 +6c +61 +2e +64 +65 +62 +75 +67 +5f +6c +69 +6e +65 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9c +00 +00 +00 +00 +00 +00 +00 +4a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +38 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ec +00 +00 +00 +00 +00 +00 +00 +78 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +05 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +43 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +13 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1f +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +06 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_leb128.asm b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_leb128.asm new file mode 100644 index 0000000000..9344003b2f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_leb128.asm @@ -0,0 +1,9063 @@ + .file "leb128_test.c" + .section .debug_abbrev,"",@progbits +.Ldebug_abbrev0: + .section .debug_info,"",@progbits +.Ldebug_info0: + .section .debug_line,"",@progbits +.Ldebug_line0: + .text +.Ltext0: +#APP + .ident "$Id: intnum.c 1295 2005-10-30 06:13:24Z peter $" +#NO_APP + .section .rodata.str1.1,"aMS",@progbits,1 +.LC0: + .string "0" + .section .rodata +.LC1: + .string "" + .string "" + .section .rodata.str1.1 +.LC2: + .string "2" +.LC3: + .string "\002" +.LC4: + .string "7F" +.LC5: + .string "\177" +.LC6: + .string "80" +.LC7: + .string "\200\001" +.LC8: + .string "81" +.LC9: + .string "\201\001" +.LC10: + .string "82" +.LC11: + .string "\202\001" +.LC12: + .string "3239" +.LC13: + .string "\271d" + .section .rodata +.LC14: + .string "\377" + .string "" + .section .rodata.str1.1 +.LC15: + .string "~" +.LC16: + .string "\201\177" +.LC17: + .string "\200\177" +.LC18: + .string "\377~" + .data + .align 32 + .type tests, @object + .size tests, 512 +tests: + .long 0 + .long 0 + .quad .LC0 + .quad 1 + .quad .LC1 + .long 0 + .long 0 + .quad .LC2 + .quad 1 + .quad .LC3 + .long 0 + .long 0 + .quad .LC4 + .quad 1 + .quad .LC5 + .long 0 + .long 0 + .quad .LC6 + .quad 2 + .quad .LC7 + .long 0 + .long 0 + .quad .LC8 + .quad 2 + .quad .LC9 + .long 0 + .long 0 + .quad .LC10 + .quad 2 + .quad .LC11 + .long 0 + .long 0 + .quad .LC12 + .quad 2 + .quad .LC13 + .long 1 + .long 0 + .quad .LC0 + .quad 1 + .quad .LC1 + .long 1 + .long 0 + .quad .LC2 + .quad 1 + .quad .LC3 + .long 1 + .long 0 + .quad .LC4 + .quad 2 + .quad .LC14 + .long 1 + .long 0 + .quad .LC6 + .quad 2 + .quad .LC7 + .long 1 + .long 0 + .quad .LC8 + .quad 2 + .quad .LC9 + .long 1 + .long 1 + .quad .LC2 + .quad 1 + .quad .LC15 + .long 1 + .long 1 + .quad .LC4 + .quad 2 + .quad .LC16 + .long 1 + .long 1 + .quad .LC6 + .quad 2 + .quad .LC17 + .long 1 + .long 1 + .quad .LC8 + .quad 2 + .quad .LC18 + .text + .p2align 4,,15 +.globl yasm_intnum_initialize + .type yasm_intnum_initialize, @function +yasm_intnum_initialize: +.LFB25: + .file 1 "./libyasm/intnum.c" + .loc 1 65 0 +.LVL0: + subq $8, %rsp +.LCFI0: +.LVL1: + .loc 1 66 0 + xorl %esi, %esi + movl $128, %edi + call BitVector_Create + .loc 1 67 0 + xorl %esi, %esi + movl $128, %edi + .loc 1 66 0 + movq %rax, conv_bv(%rip) + .loc 1 67 0 + call BitVector_Create + .loc 1 68 0 + xorl %esi, %esi + movl $128, %edi + .loc 1 67 0 + movq %rax, result(%rip) + .loc 1 68 0 + call BitVector_Create + .loc 1 69 0 + xorl %esi, %esi + movl $128, %edi + .loc 1 68 0 + movq %rax, spare(%rip) + .loc 1 69 0 + call BitVector_Create + .loc 1 70 0 + xorl %esi, %esi + movl $128, %edi + .loc 1 69 0 + movq %rax, op1static(%rip) + .loc 1 70 0 + call BitVector_Create + .loc 1 71 0 + movl $128, %edi + .loc 1 70 0 + movq %rax, op2static(%rip) + .loc 1 71 0 + call BitVector_from_Dec_static_Boot + movq %rax, from_dec_data(%rip) + .loc 1 72 0 + addq $8, %rsp +.LVL2: + ret +.LFE25: + .size yasm_intnum_initialize, .-yasm_intnum_initialize + .p2align 4,,15 +.globl yasm_intnum_cleanup + .type yasm_intnum_cleanup, @function +yasm_intnum_cleanup: +.LFB26: + .loc 1 76 0 +.LVL3: + subq $8, %rsp +.LCFI1: +.LVL4: + .loc 1 77 0 + movq from_dec_data(%rip), %rdi + call BitVector_from_Dec_static_Shutdown + .loc 1 78 0 + movq op2static(%rip), %rdi + call BitVector_Destroy + .loc 1 79 0 + movq op1static(%rip), %rdi + call BitVector_Destroy + .loc 1 80 0 + movq spare(%rip), %rdi + call BitVector_Destroy + .loc 1 81 0 + movq result(%rip), %rdi + call BitVector_Destroy + .loc 1 82 0 + movq conv_bv(%rip), %rdi + .loc 1 83 0 + addq $8, %rsp +.LVL5: + .loc 1 82 0 + jmp BitVector_Destroy +.LFE26: + .size yasm_intnum_cleanup, .-yasm_intnum_cleanup + .section .rodata.str1.8,"aMS",@progbits,1 + .align 8 +.LC19: + .string "Numeric constant too large for internal format" + .text + .p2align 4,,15 +.globl yasm_intnum_create_dec + .type yasm_intnum_create_dec, @function +yasm_intnum_create_dec: +.LFB27: + .loc 1 87 0 +.LVL6: + movq %rbx, -24(%rsp) +.LCFI2: + movq %rbp, -16(%rsp) +.LCFI3: + movq %rdi, %rbx + movq %r12, -8(%rsp) +.LCFI4: + .loc 1 88 0 + movl $16, %edi +.LVL7: + .loc 1 87 0 + subq $24, %rsp +.LCFI5: +.LVL8: + .loc 1 87 0 + movq %rsi, %r12 + .loc 1 88 0 + call *yasm_xmalloc(%rip) +.LVL9: +.LVL10: + .loc 1 90 0 + movb $0, 12(%rax) + .loc 1 92 0 + movq conv_bv(%rip), %rsi + movq %rbx, %rdx + movq from_dec_data(%rip), %rdi +.LVL11: + .loc 1 88 0 + movq %rax, %rbp +.LVL12: + .loc 1 92 0 + call BitVector_from_Dec_static + cmpl $12, %eax + je .L13 +.L6: + .loc 1 96 0 + movq conv_bv(%rip), %rdi + call Set_Max + cmpq $31, %rax + jg .L8 + .loc 1 98 0 + movq conv_bv(%rip), %rdi + .loc 1 97 0 + movl $0, 8(%rbp) + .loc 1 98 0 + xorl %edx, %edx + movl $32, %esi + call BitVector_Chunk_Read + movq %rax, (%rbp) + .loc 1 105 0 + movq %rbp, %rax + movq (%rsp), %rbx +.LVL13: + movq 8(%rsp), %rbp +.LVL14: + movq 16(%rsp), %r12 +.LVL15: + addq $24, %rsp +.LVL16: + ret +.LVL17: + .p2align 4,,7 +.L8: + .loc 1 101 0 + movq conv_bv(%rip), %rdi + .loc 1 100 0 + movl $1, 8(%rbp) + .loc 1 101 0 + call BitVector_Clone + movq %rax, (%rbp) + .loc 1 105 0 + movq %rbp, %rax + movq (%rsp), %rbx +.LVL18: + movq 8(%rsp), %rbp +.LVL19: + movq 16(%rsp), %r12 +.LVL20: + addq $24, %rsp +.LVL21: + ret +.LVL22: + .p2align 4,,7 +.L13: + .loc 1 94 0 + movl $.LC19, %edx + movq %r12, %rsi + xorl %edi, %edi + xorl %eax, %eax + call yasm__warning + jmp .L6 +.LFE27: + .size yasm_intnum_create_dec, .-yasm_intnum_create_dec + .p2align 4,,15 +.globl yasm_intnum_create_bin + .type yasm_intnum_create_bin, @function +yasm_intnum_create_bin: +.LFB28: + .loc 1 109 0 +.LVL23: + movq %rbp, -16(%rsp) +.LCFI6: + movq %rdi, %rbp + movq %rbx, -24(%rsp) +.LCFI7: + movq %r12, -8(%rsp) +.LCFI8: + .loc 1 110 0 + movl $16, %edi +.LVL24: + .loc 1 109 0 + subq $24, %rsp +.LCFI9: +.LVL25: + .loc 1 109 0 + movq %rsi, %r12 + .loc 1 110 0 + call *yasm_xmalloc(%rip) +.LVL26: + .loc 1 112 0 + movq %rbp, %rdi + .loc 1 110 0 + movq %rax, %rbx +.LVL27: + .loc 1 112 0 + call strlen + .loc 1 114 0 + cmpb $-128, %al + .loc 1 112 0 + movb %al, 12(%rbx) + .loc 1 114 0 + ja .L21 +.L15: + .loc 1 118 0 + movq conv_bv(%rip), %rdi + movq %rbp, %rsi + call BitVector_from_Bin + .loc 1 119 0 + movq conv_bv(%rip), %rdi + call Set_Max + cmpq $31, %rax + jg .L17 + .loc 1 121 0 + movq conv_bv(%rip), %rdi + .loc 1 120 0 + movl $0, 8(%rbx) + .loc 1 121 0 + xorl %edx, %edx + movl $32, %esi + call BitVector_Chunk_Read + movq %rax, (%rbx) + .loc 1 128 0 + movq %rbx, %rax + movq 8(%rsp), %rbp +.LVL28: + movq (%rsp), %rbx +.LVL29: + movq 16(%rsp), %r12 +.LVL30: + addq $24, %rsp +.LVL31: + ret +.LVL32: + .p2align 4,,7 +.L17: + .loc 1 124 0 + movq conv_bv(%rip), %rdi + .loc 1 123 0 + movl $1, 8(%rbx) + .loc 1 124 0 + call BitVector_Clone + movq %rax, (%rbx) + .loc 1 128 0 + movq %rbx, %rax + movq 8(%rsp), %rbp +.LVL33: + movq (%rsp), %rbx +.LVL34: + movq 16(%rsp), %r12 +.LVL35: + addq $24, %rsp +.LVL36: + ret +.LVL37: + .p2align 4,,7 +.L21: + .loc 1 115 0 + movl $.LC19, %edx + movq %r12, %rsi + xorl %edi, %edi + xorl %eax, %eax + call yasm__warning + jmp .L15 +.LFE28: + .size yasm_intnum_create_bin, .-yasm_intnum_create_bin + .p2align 4,,15 +.globl yasm_intnum_create_oct + .type yasm_intnum_create_oct, @function +yasm_intnum_create_oct: +.LFB29: + .loc 1 132 0 +.LVL38: + movq %rbp, -16(%rsp) +.LCFI10: + movq %rdi, %rbp + movq %rbx, -24(%rsp) +.LCFI11: + movq %r12, -8(%rsp) +.LCFI12: + .loc 1 133 0 + movl $16, %edi +.LVL39: + .loc 1 132 0 + subq $24, %rsp +.LCFI13: +.LVL40: + .loc 1 132 0 + movq %rsi, %r12 + .loc 1 133 0 + call *yasm_xmalloc(%rip) +.LVL41: + .loc 1 135 0 + movq %rbp, %rdi + .loc 1 133 0 + movq %rax, %rbx +.LVL42: + .loc 1 135 0 + call strlen + leaq (%rax,%rax,2), %rax + .loc 1 137 0 + cmpb $-128, %al + .loc 1 135 0 + movb %al, 12(%rbx) + .loc 1 137 0 + ja .L29 +.L23: + .loc 1 141 0 + movq conv_bv(%rip), %rdi + movq %rbp, %rsi + call BitVector_from_Oct + .loc 1 142 0 + movq conv_bv(%rip), %rdi + call Set_Max + cmpq $31, %rax + jg .L25 + .loc 1 144 0 + movq conv_bv(%rip), %rdi + .loc 1 143 0 + movl $0, 8(%rbx) + .loc 1 144 0 + xorl %edx, %edx + movl $32, %esi + call BitVector_Chunk_Read + movq %rax, (%rbx) + .loc 1 151 0 + movq %rbx, %rax + movq 8(%rsp), %rbp +.LVL43: + movq (%rsp), %rbx +.LVL44: + movq 16(%rsp), %r12 +.LVL45: + addq $24, %rsp +.LVL46: + ret +.LVL47: + .p2align 4,,7 +.L25: + .loc 1 147 0 + movq conv_bv(%rip), %rdi + .loc 1 146 0 + movl $1, 8(%rbx) + .loc 1 147 0 + call BitVector_Clone + movq %rax, (%rbx) + .loc 1 151 0 + movq %rbx, %rax + movq 8(%rsp), %rbp +.LVL48: + movq (%rsp), %rbx +.LVL49: + movq 16(%rsp), %r12 +.LVL50: + addq $24, %rsp +.LVL51: + ret +.LVL52: + .p2align 4,,7 +.L29: + .loc 1 138 0 + movl $.LC19, %edx + movq %r12, %rsi + xorl %edi, %edi + xorl %eax, %eax + call yasm__warning + jmp .L23 +.LFE29: + .size yasm_intnum_create_oct, .-yasm_intnum_create_oct + .p2align 4,,15 +.globl yasm_intnum_create_hex + .type yasm_intnum_create_hex, @function +yasm_intnum_create_hex: +.LFB30: + .loc 1 155 0 +.LVL53: + movq %rbp, -16(%rsp) +.LCFI14: + movq %rdi, %rbp + movq %rbx, -24(%rsp) +.LCFI15: + movq %r12, -8(%rsp) +.LCFI16: + .loc 1 156 0 + movl $16, %edi +.LVL54: + .loc 1 155 0 + subq $24, %rsp +.LCFI17: +.LVL55: + .loc 1 155 0 + movq %rsi, %r12 + .loc 1 156 0 + call *yasm_xmalloc(%rip) +.LVL56: + .loc 1 158 0 + movq %rbp, %rdi + .loc 1 156 0 + movq %rax, %rbx +.LVL57: + .loc 1 158 0 + call strlen + salq $2, %rax + .loc 1 160 0 + cmpb $-128, %al + .loc 1 158 0 + movb %al, 12(%rbx) + .loc 1 160 0 + ja .L37 +.L31: + .loc 1 164 0 + movq conv_bv(%rip), %rdi + movq %rbp, %rsi + call BitVector_from_Hex + .loc 1 165 0 + movq conv_bv(%rip), %rdi + call Set_Max + cmpq $31, %rax + jg .L33 + .loc 1 167 0 + movq conv_bv(%rip), %rdi + .loc 1 166 0 + movl $0, 8(%rbx) + .loc 1 167 0 + xorl %edx, %edx + movl $32, %esi + call BitVector_Chunk_Read + movq %rax, (%rbx) + .loc 1 174 0 + movq %rbx, %rax + movq 8(%rsp), %rbp +.LVL58: + movq (%rsp), %rbx +.LVL59: + movq 16(%rsp), %r12 +.LVL60: + addq $24, %rsp +.LVL61: + ret +.LVL62: + .p2align 4,,7 +.L33: + .loc 1 170 0 + movq conv_bv(%rip), %rdi + .loc 1 169 0 + movl $1, 8(%rbx) + .loc 1 170 0 + call BitVector_Clone + movq %rax, (%rbx) + .loc 1 174 0 + movq %rbx, %rax + movq 8(%rsp), %rbp +.LVL63: + movq (%rsp), %rbx +.LVL64: + movq 16(%rsp), %r12 +.LVL65: + addq $24, %rsp +.LVL66: + ret +.LVL67: + .p2align 4,,7 +.L37: + .loc 1 161 0 + movl $.LC19, %edx + movq %r12, %rsi + xorl %edi, %edi + xorl %eax, %eax + call yasm__warning + jmp .L31 +.LFE30: + .size yasm_intnum_create_hex, .-yasm_intnum_create_hex + .section .rodata.str1.8 + .align 8 +.LC20: + .string "Character constant too large for internal format" + .text + .p2align 4,,15 +.globl yasm_intnum_create_charconst_nasm + .type yasm_intnum_create_charconst_nasm, @function +yasm_intnum_create_charconst_nasm: +.LFB31: + .loc 1 179 0 +.LVL68: + movq %rbx, -32(%rsp) +.LCFI18: + movq %rdi, %rbx + movq %rbp, -24(%rsp) +.LCFI19: + movq %r12, -16(%rsp) +.LCFI20: + movq %r13, -8(%rsp) +.LCFI21: + movq %rsi, %rbp + subq $40, %rsp +.LCFI22: +.LVL69: + .loc 1 180 0 + movl $16, %edi +.LVL70: + call *yasm_xmalloc(%rip) +.LVL71: + .loc 1 181 0 + movq %rbx, %rdi + .loc 1 180 0 + movq %rax, %r13 +.LVL72: + .loc 1 181 0 + call strlen + movq %rax, %r12 + .loc 1 183 0 + leaq 0(,%rax,8), %rax + .loc 1 185 0 + cmpb $-128, %al + .loc 1 183 0 + movb %al, 12(%r13) + .loc 1 185 0 + ja .L59 +.L39: + .loc 1 189 0 + cmpq $4, %r12 + ja .L60 + .loc 1 193 0 + movq $0, (%r13) + .loc 1 194 0 + movl $0, 8(%r13) +.L43: + .loc 1 197 0 + cmpl $4, %r12d + ja .L44 + mov %r12d, %eax +.LVL73: + jmp *.L50(,%rax,8) + .section .rodata + .align 8 + .align 4 +.L50: + .quad .L45 + .quad .L55 + .quad .L56 + .quad .L57 + .quad .L49 + .text +.L49: + .loc 1 199 0 + movsbq 3(%rbx),%rdx + orq (%r13), %rdx + .loc 1 200 0 + salq $8, %rdx + movq %rdx, (%r13) +.L48: + .loc 1 203 0 + movsbq 2(%rbx),%rax +.LVL74: + orq %rax, %rdx + .loc 1 204 0 + salq $8, %rdx + movq %rdx, (%r13) +.LVL75: +.L47: + .loc 1 207 0 + movsbq 1(%rbx),%rax +.LVL76: + orq %rax, %rdx + .loc 1 208 0 + salq $8, %rdx + movq %rdx, (%r13) +.LVL77: +.L46: + .loc 1 211 0 + movsbq (%rbx),%rax +.LVL78: + orq %rax, %rdx + movq %rdx, (%r13) +.LVL79: +.L45: + .loc 1 225 0 + movq %r13, %rax +.LVL80: + movq 8(%rsp), %rbx +.LVL81: + movq 16(%rsp), %rbp +.LVL82: + movq 24(%rsp), %r12 + movq 32(%rsp), %r13 +.LVL83: + addq $40, %rsp +.LVL84: + ret +.LVL85: + .p2align 4,,7 +.L44: + .loc 1 216 0 + testq %r12, %r12 + jne .L61 + .loc 1 221 0 + movq conv_bv(%rip), %rdi + call BitVector_Clone + movq %rax, (%r13) + jmp .L45 + .p2align 4,,7 +.L60: + .loc 1 190 0 + movq conv_bv(%rip), %rdi + call BitVector_Empty + .loc 1 191 0 + movl $1, 8(%r13) + jmp .L43 + .p2align 4,,7 +.L59: + .loc 1 186 0 + movl $.LC20, %edx + movq %rbp, %rsi + xorl %edi, %edi + xorl %eax, %eax + call yasm__warning + jmp .L39 + .p2align 4,,7 +.L61: + .loc 1 179 0 + leaq (%rbx,%r12), %rbp +.LVL86: + xorl %ebx, %ebx +.LVL87: + .p2align 4,,7 +.L51: + .loc 1 217 0 + movq conv_bv(%rip), %rdi + movl $8, %esi + .loc 1 218 0 + incq %rbx + .loc 1 217 0 + call BitVector_Move_Left + .loc 1 218 0 + movsbq -1(%rbp),%rcx + movq conv_bv(%rip), %rdi + xorl %edx, %edx + movl $8, %esi + decq %rbp + call BitVector_Chunk_Store + .loc 1 216 0 + cmpq %rbx, %r12 + jne .L51 + .loc 1 221 0 + movq conv_bv(%rip), %rdi + call BitVector_Clone + movq %rax, (%r13) + jmp .L45 +.LVL88: +.L57: + movq (%r13), %rdx + jmp .L48 +.L56: + movq (%r13), %rdx + .p2align 4,,5 + jmp .L47 +.L55: + movq (%r13), %rdx + .p2align 4,,5 + jmp .L46 +.LFE31: + .size yasm_intnum_create_charconst_nasm, .-yasm_intnum_create_charconst_nasm + .p2align 4,,15 +.globl yasm_intnum_create_uint + .type yasm_intnum_create_uint, @function +yasm_intnum_create_uint: +.LFB32: + .loc 1 230 0 +.LVL89: + pushq %rbx +.LCFI23: +.LVL90: + .loc 1 230 0 + movq %rdi, %rbx + .loc 1 231 0 + movl $16, %edi +.LVL91: + call *yasm_xmalloc(%rip) + .loc 1 233 0 + movq %rbx, (%rax) + .loc 1 234 0 + movl $0, 8(%rax) + .loc 1 235 0 + movb $0, 12(%rax) + .loc 1 238 0 + popq %rbx +.LVL92: + ret +.LFE32: + .size yasm_intnum_create_uint, .-yasm_intnum_create_uint + .p2align 4,,15 +.globl yasm_intnum_create_int + .type yasm_intnum_create_int, @function +yasm_intnum_create_int: +.LFB33: + .loc 1 242 0 +.LVL93: + .loc 1 246 0 + testq %rdi, %rdi + .loc 1 242 0 + pushq %rbx +.LCFI24: +.LVL94: + .loc 1 242 0 + movq %rdi, %rbx + .loc 1 246 0 + js .L65 +.LVL95: + .loc 1 259 0 + popq %rbx +.LVL96: + .loc 1 247 0 + jmp yasm_intnum_create_uint +.LVL97: + .p2align 4,,7 +.L65: + .loc 1 249 0 + movq conv_bv(%rip), %rdi + .loc 1 250 0 + negq %rbx + .loc 1 249 0 + call BitVector_Empty + .loc 1 250 0 + movq conv_bv(%rip), %rdi + movq %rbx, %rcx + xorl %edx, %edx + movl $32, %esi + call BitVector_Chunk_Store + .loc 1 251 0 + movq conv_bv(%rip), %rdi + movq %rdi, %rsi + call BitVector_Negate + .loc 1 253 0 + movl $16, %edi + call *yasm_xmalloc(%rip) + .loc 1 254 0 + movq conv_bv(%rip), %rdi + .loc 1 253 0 + movq %rax, %rbx +.LVL98: + .loc 1 254 0 + call BitVector_Clone + .loc 1 255 0 + movl $1, 8(%rbx) + .loc 1 254 0 + movq %rax, (%rbx) + .loc 1 259 0 + movq %rbx, %rax + .loc 1 256 0 + movb $0, 12(%rbx) + .loc 1 259 0 + popq %rbx +.LVL99: + ret +.LFE33: + .size yasm_intnum_create_int, .-yasm_intnum_create_int + .p2align 4,,15 +.globl yasm_intnum_copy + .type yasm_intnum_copy, @function +yasm_intnum_copy: +.LFB34: + .loc 1 263 0 +.LVL100: + movq %rbp, -8(%rsp) +.LCFI25: + movq %rdi, %rbp + movq %rbx, -16(%rsp) +.LCFI26: + .loc 1 264 0 + movl $16, %edi +.LVL101: + .loc 1 263 0 + subq $24, %rsp +.LCFI27: +.LVL102: + .loc 1 264 0 + call *yasm_xmalloc(%rip) + .loc 1 266 0 + movl 8(%rbp), %edx + .loc 1 264 0 + movq %rax, %rbx +.LVL103: + .loc 1 266 0 + testl %edx, %edx + je .L71 + cmpl $1, %edx + je .L74 + .loc 1 275 0 + movzbl 12(%rbp), %eax + .loc 1 274 0 + movl %edx, 8(%rbx) + .loc 1 275 0 + movb %al, 12(%rbx) + .loc 1 278 0 + movq %rbx, %rax + movq 16(%rsp), %rbp +.LVL104: + movq 8(%rsp), %rbx +.LVL105: + addq $24, %rsp +.LVL106: + ret +.LVL107: + .p2align 4,,7 +.L71: + .loc 1 268 0 + movq (%rbp), %rax + .loc 1 274 0 + movl %edx, 8(%rbx) + .loc 1 268 0 + movq %rax, (%rbx) + .loc 1 275 0 + movzbl 12(%rbp), %eax + movb %al, 12(%rbx) + .loc 1 278 0 + movq %rbx, %rax + movq 16(%rsp), %rbp +.LVL108: + movq 8(%rsp), %rbx +.LVL109: + addq $24, %rsp +.LVL110: + ret +.LVL111: + .p2align 4,,7 +.L74: + .loc 1 271 0 + movq (%rbp), %rdi + call BitVector_Clone + movq %rax, (%rbx) + .loc 1 275 0 + movzbl 12(%rbp), %eax + movl 8(%rbp), %edx + movb %al, 12(%rbx) + .loc 1 274 0 + movl %edx, 8(%rbx) + .loc 1 278 0 + movq %rbx, %rax + movq 16(%rsp), %rbp +.LVL112: + movq 8(%rsp), %rbx +.LVL113: + addq $24, %rsp +.LVL114: + ret +.LFE34: + .size yasm_intnum_copy, .-yasm_intnum_copy + .p2align 4,,15 +.globl yasm_intnum_destroy + .type yasm_intnum_destroy, @function +yasm_intnum_destroy: +.LFB35: + .loc 1 282 0 +.LVL115: + pushq %rbx +.LCFI28: +.LVL116: + .loc 1 283 0 + cmpl $1, 8(%rdi) + .loc 1 282 0 + movq %rdi, %rbx + .loc 1 283 0 + je .L79 +.LVL117: + .loc 1 285 0 + movq %rbx, %rdi + movq yasm_xfree(%rip), %r11 + .loc 1 286 0 + popq %rbx +.LVL118: + .loc 1 285 0 + jmp *%r11 +.LVL119: +.LVL120: + .p2align 4,,7 +.L79: + .loc 1 284 0 + movq (%rdi), %rdi + call BitVector_Destroy + .loc 1 285 0 + movq %rbx, %rdi + movq yasm_xfree(%rip), %r11 + .loc 1 286 0 + popq %rbx +.LVL121: + .loc 1 285 0 + jmp *%r11 +.LVL122: +.LFE35: + .size yasm_intnum_destroy, .-yasm_intnum_destroy + .section .rodata.str1.1 +.LC21: + .string "Operation needs an operand" +.LC22: + .string "./libyasm/intnum.c" +.LC23: + .string "SEG" +.LC24: + .string "invalid use of '%s'" +.LC25: + .string "WRT" +.LC26: + .string ":" + .section .rodata.str1.8 + .align 8 +.LC27: + .string "invalid operation in intnum calculation" + .text + .p2align 4,,15 +.globl yasm_intnum_calc + .type yasm_intnum_calc, @function +yasm_intnum_calc: +.LFB36: + .loc 1 292 0 +.LVL123: + movq %rbx, -48(%rsp) +.LCFI29: + movq %rbp, -40(%rsp) +.LCFI30: + movq %rdx, %rbx + movq %r14, -16(%rsp) +.LCFI31: + movq %r15, -8(%rsp) +.LCFI32: + movq %rdi, %r14 + movq %r12, -32(%rsp) +.LCFI33: + movq %r13, -24(%rsp) +.LCFI34: + subq $72, %rsp +.LCFI35: +.LVL124: + .loc 1 299 0 + cmpl $1, 8(%rdi) + .loc 1 292 0 + movl %esi, %ebp + movq %rcx, %r15 + .loc 1 293 0 + movl $0, 20(%rsp) +.LVL125: + .loc 1 299 0 + je .L146 +.LVL126: + .loc 1 302 0 + movq op1static(%rip), %r12 +.LVL127: + .loc 1 303 0 + movq %r12, %rdi +.LVL128: + call BitVector_Empty + .loc 1 304 0 + movq (%r14), %rcx + xorl %edx, %edx + movl $32, %esi + movq %r12, %rdi + call BitVector_Chunk_Store +.LVL129: +.L83: + .loc 1 307 0 + xorl %r13d, %r13d +.LVL130: + testq %rbx, %rbx + je .L86 + .loc 1 308 0 + cmpl $1, 8(%rbx) + je .L147 + .loc 1 311 0 + movq op2static(%rip), %r13 + .loc 1 312 0 + movq %r13, %rdi + call BitVector_Empty + .loc 1 313 0 + movq (%rbx), %rcx + xorl %edx, %edx + movl $32, %esi + movq %r13, %rdi + call BitVector_Chunk_Store +.LVL131: +.L86: + .loc 1 317 0 + testq %rbx, %rbx + sete %dl + cmpl $8, %ebp + setne %al + testb %al, %dl + je .L89 + cmpl $9, %ebp + setne %dl + cmpl $18, %ebp + setne %al + testb %al, %dl + jne .L148 +.L89: + .loc 1 322 0 + cmpl $28, %ebp + ja .L92 + mov %ebp, %eax + jmp *.L121(,%rax,8) + .section .rodata + .align 8 + .align 4 +.L121: + .quad .L93 + .quad .L94 + .quad .L95 + .quad .L96 + .quad .L98 + .quad .L98 + .quad .L100 + .quad .L100 + .quad .L101 + .quad .L102 + .quad .L103 + .quad .L104 + .quad .L105 + .quad .L106 + .quad .L107 + .quad .L108 + .quad .L109 + .quad .L110 + .quad .L111 + .quad .L112 + .quad .L113 + .quad .L114 + .quad .L115 + .quad .L116 + .quad .L117 + .quad .L92 + .quad .L118 + .quad .L119 + .quad .L120 + .text + .p2align 4,,7 +.L92: + .loc 1 431 0 + movl $.LC27, %edx + movl $431, %esi + movl $.LC22, %edi + call *yasm_internal_error_(%rip) +.LVL132: +.L122: + .loc 1 435 0 + movq result(%rip), %rdi + call Set_Max + cmpq $31, %rax + jg .L136 + .loc 1 436 0 + cmpl $1, 8(%r14) + je .L149 +.L138: + .loc 1 440 0 + movq result(%rip), %rdi + xorl %edx, %edx + movl $32, %esi + call BitVector_Chunk_Read + movq %rax, (%r14) +.L143: + .loc 1 449 0 + movq 24(%rsp), %rbx +.LVL133: + movq 32(%rsp), %rbp +.LVL134: + movq 40(%rsp), %r12 +.LVL135: + movq 48(%rsp), %r13 +.LVL136: + movq 56(%rsp), %r14 +.LVL137: + movq 64(%rsp), %r15 +.LVL138: + addq $72, %rsp +.LVL139: + ret +.LVL140: + .p2align 4,,7 +.L136: + .loc 1 442 0 + cmpl $1, 8(%r14) + je .L150 + .loc 1 446 0 + movq result(%rip), %rdi + .loc 1 445 0 + movl $1, 8(%r14) + .loc 1 446 0 + call BitVector_Clone + movq %rax, (%r14) + jmp .L143 +.LVL141: + .p2align 4,,7 +.L147: + .loc 1 309 0 + movq (%rbx), %r13 + jmp .L86 +.LVL142: + .p2align 4,,7 +.L146: + .loc 1 300 0 + movq (%rdi), %r12 +.LVL143: + .p2align 4,,5 + jmp .L83 +.LVL144: + .p2align 4,,7 +.L148: + .loc 1 319 0 + movl $.LC21, %edx + movl $319, %esi + movl $.LC22, %edi + call *yasm_internal_error_(%rip) + jmp .L89 + .p2align 4,,7 +.L150: + .loc 1 443 0 + movq result(%rip), %rsi + movq (%r14), %rdi + call BitVector_Copy + jmp .L143 +.L149: + .loc 1 437 0 + movq (%r14), %rdi + call BitVector_Destroy + .loc 1 438 0 + movl $0, 8(%r14) + .p2align 4,,4 + jmp .L138 +.LVL145: +.L100: + .loc 1 344 0 + movq result(%rip), %rcx + movq spare(%rip), %rdi + movq %r13, %rdx + movq %r12, %rsi + call BitVector_Divide +.LVL146: + jmp .L122 +.LVL147: +.L98: + .loc 1 337 0 + movq spare(%rip), %rcx + movq result(%rip), %rdi + movq %r13, %rdx + movq %r12, %rsi + call BitVector_Divide +.LVL148: + jmp .L122 +.LVL149: +.L111: + .loc 1 390 0 + movq result(%rip), %rdi + call BitVector_Empty +.LVL150: + .loc 1 391 0 + movq %r12, %rdi + call BitVector_is_empty + movl %eax, %esi +.L145: + .loc 1 395 0 + movq result(%rip), %rdi + call BitVector_LSB + jmp .L122 +.LVL151: +.L112: + .loc 1 398 0 + movq result(%rip), %rdi + call BitVector_Empty +.LVL152: + .loc 1 399 0 + movq %r13, %rsi + movq %r12, %rdi + call BitVector_Lexicompare + movq result(%rip), %rdi + movl %eax, %esi + shrl $31, %esi + call BitVector_LSB + jmp .L122 +.LVL153: +.L113: + .loc 1 402 0 + movq result(%rip), %rdi + call BitVector_Empty +.LVL154: + .loc 1 403 0 + movq %r13, %rsi + movq %r12, %rdi + call BitVector_Lexicompare + movq result(%rip), %rdi + xorl %esi, %esi + testl %eax, %eax + setg %sil + call BitVector_LSB + jmp .L122 +.LVL155: +.L114: + .loc 1 394 0 + movq result(%rip), %rdi + call BitVector_Empty +.LVL156: + .loc 1 395 0 + movq %r13, %rsi + movq %r12, %rdi + call BitVector_equal + movl %eax, %esi + jmp .L145 +.LVL157: +.L119: + .loc 1 421 0 + movl $.LC25, %edx + movl $.LC24, %esi + movq %r15, %rdi + xorl %eax, %eax +.LVL158: + call yasm__error + jmp .L122 +.LVL159: +.L120: + .loc 1 424 0 + movl $.LC26, %edx + movl $.LC24, %esi + movq %r15, %rdi + xorl %eax, %eax +.LVL160: + call yasm__error + jmp .L122 +.LVL161: +.L101: + .loc 1 347 0 + movq result(%rip), %rdi + movq %r12, %rsi + call BitVector_Negate +.LVL162: + jmp .L122 +.LVL163: +.L93: + .loc 1 427 0 + movq result(%rip), %rdi + testq %rdi, %rdi + je .L122 + .loc 1 428 0 + movq %r12, %rsi + call BitVector_Copy +.LVL164: + jmp .L122 +.LVL165: +.L110: + .loc 1 385 0 + movq result(%rip), %rdi + call BitVector_Empty +.LVL166: + .loc 1 386 0 + movq %r12, %rdi + call BitVector_is_empty + testl %eax, %eax + je .L151 + xorl %esi, %esi + .p2align 4,,2 + jmp .L145 +.LVL167: +.L96: + .loc 1 330 0 + movq result(%rip), %rdi + movq %r13, %rdx + movq %r12, %rsi + call BitVector_Multiply +.LVL168: + jmp .L122 +.LVL169: +.L94: + .loc 1 324 0 + movq result(%rip), %rdi + leaq 20(%rsp), %rcx + movq %r13, %rdx + movq %r12, %rsi + call BitVector_add +.LVL170: + jmp .L122 +.LVL171: +.L95: + .loc 1 327 0 + movq result(%rip), %rdi + leaq 20(%rsp), %rcx + movq %r13, %rdx + movq %r12, %rsi + call BitVector_sub +.LVL172: + jmp .L122 +.LVL173: +.L103: + .loc 1 353 0 + movq result(%rip), %rdi + movq %r13, %rdx + movq %r12, %rsi + call Set_Union +.LVL174: + jmp .L122 +.LVL175: +.L104: + .loc 1 356 0 + movq result(%rip), %rdi + movq %r13, %rdx + movq %r12, %rsi + call Set_Intersection +.LVL176: + jmp .L122 +.LVL177: +.L105: + .loc 1 359 0 + movq result(%rip), %rdi + movq %r13, %rdx + movq %r12, %rsi + call Set_ExclusiveOr +.LVL178: + jmp .L122 +.LVL179: +.L106: + .loc 1 362 0 + movq result(%rip), %rdi + movq %r12, %rsi + movq %r13, %rdx + call Set_Union +.LVL180: + .loc 1 363 0 + movq result(%rip), %rdi + movq %rdi, %rsi + call Set_Complement + jmp .L122 +.LVL181: +.L107: + .loc 1 366 0 + movl 8(%rbx), %edx + testl %edx, %edx + jne .L125 + .loc 1 367 0 + movq result(%rip), %rdi + movq %r12, %rsi + call BitVector_Copy +.LVL182: + .loc 1 368 0 + movq (%rbx), %rax + movq result(%rip), %rdi + movl %eax, %esi + call BitVector_Move_Left + jmp .L122 +.LVL183: +.L108: + .loc 1 373 0 + movl 8(%rbx), %eax +.LVL184: + testl %eax, %eax + jne .L125 + .loc 1 374 0 + movq result(%rip), %rdi + movq %r12, %rsi + call BitVector_Copy + .loc 1 375 0 + movq (%rbx), %rax + movq result(%rip), %rdi + movl %eax, %esi + call BitVector_Move_Right + jmp .L122 +.LVL185: +.L109: + .loc 1 380 0 + movq result(%rip), %rdi + call BitVector_Empty +.LVL186: + .loc 1 381 0 + movq %r12, %rdi + call BitVector_is_empty + testl %eax, %eax + jne .L152 + movl $1, %esi + .p2align 4,,2 + jmp .L145 +.LVL187: +.L115: + .loc 1 406 0 + movq result(%rip), %rdi + call BitVector_Empty +.LVL188: + .loc 1 407 0 + movq %r13, %rsi + movq %r12, %rdi + call BitVector_Lexicompare + movq result(%rip), %rdi + xorl %esi, %esi + testl %eax, %eax + setle %sil + call BitVector_LSB + jmp .L122 +.LVL189: +.L116: + .loc 1 410 0 + movq result(%rip), %rdi + call BitVector_Empty +.LVL190: + .loc 1 411 0 + movq %r13, %rsi + movq %r12, %rdi + call BitVector_Lexicompare + movq result(%rip), %rdi + movl %eax, %esi + notl %esi + shrl $31, %esi + call BitVector_LSB + jmp .L122 +.LVL191: +.L117: + .loc 1 414 0 + movq result(%rip), %rdi + call BitVector_Empty +.LVL192: + .loc 1 415 0 + movq %r13, %rsi + movq %r12, %rdi + call BitVector_equal + movq result(%rip), %rdi + xorl %esi, %esi + testl %eax, %eax + sete %sil + call BitVector_LSB + jmp .L122 +.LVL193: +.L118: + .loc 1 418 0 + movl $.LC23, %edx + movl $.LC24, %esi + movq %r15, %rdi + xorl %eax, %eax +.LVL194: + call yasm__error + jmp .L122 +.LVL195: +.L102: + .loc 1 350 0 + movq result(%rip), %rdi + movq %r12, %rsi + call Set_Complement +.LVL196: + jmp .L122 +.L152: + .loc 1 381 0 + movq %r13, %rdi + call BitVector_is_empty + xorl %esi, %esi + testl %eax, %eax + .p2align 4,,2 + jne .L145 + movl $1, %esi + jmp .L145 +.L151: + .loc 1 386 0 + movq %r13, %rdi + call BitVector_is_empty + testl %eax, %eax + movl $1, %esi + je .L145 + xorl %esi, %esi + jmp .L145 +.LVL197: +.L125: + .loc 1 377 0 + movq result(%rip), %rdi + call BitVector_Empty + jmp .L122 +.LFE36: + .size yasm_intnum_calc, .-yasm_intnum_calc + .p2align 4,,15 +.globl yasm_intnum_zero + .type yasm_intnum_zero, @function +yasm_intnum_zero: +.LFB37: + .loc 1 454 0 +.LVL198: + pushq %rbx +.LCFI36: +.LVL199: + .loc 1 455 0 + cmpl $1, 8(%rdi) + .loc 1 454 0 + movq %rdi, %rbx + .loc 1 455 0 + je .L157 +.LVL200: + .loc 1 459 0 + movq $0, (%rbx) + .loc 1 460 0 + popq %rbx +.LVL201: + ret +.LVL202: + .p2align 4,,7 +.L157: + .loc 1 456 0 + movq (%rdi), %rdi + call BitVector_Destroy + .loc 1 457 0 + movl $0, 8(%rbx) + .loc 1 459 0 + movq $0, (%rbx) + .loc 1 460 0 + popq %rbx +.LVL203: + ret +.LFE37: + .size yasm_intnum_zero, .-yasm_intnum_zero + .p2align 4,,15 +.globl yasm_intnum_is_zero + .type yasm_intnum_is_zero, @function +yasm_intnum_is_zero: +.LFB38: + .loc 1 464 0 +.LVL204: + .loc 1 465 0 + movl 8(%rdi), %ecx + testl %ecx, %ecx + jne .L159 + cmpq $0, (%rdi) + movl $1, %eax + jne .L159 + .loc 1 466 0 + rep ; ret + .p2align 4,,7 +.L159: + .loc 1 465 0 + xorl %eax, %eax + .loc 1 466 0 + ret +.LFE38: + .size yasm_intnum_is_zero, .-yasm_intnum_is_zero + .p2align 4,,15 +.globl yasm_intnum_is_pos1 + .type yasm_intnum_is_pos1, @function +yasm_intnum_is_pos1: +.LFB39: + .loc 1 470 0 +.LVL205: + .loc 1 471 0 + movl 8(%rdi), %esi + testl %esi, %esi + jne .L165 + cmpq $1, (%rdi) + movl $1, %eax + je .L168 +.L165: + xorl %eax, %eax +.L168: + .loc 1 472 0 + rep ; ret +.LFE39: + .size yasm_intnum_is_pos1, .-yasm_intnum_is_pos1 + .p2align 4,,15 +.globl yasm_intnum_is_neg1 + .type yasm_intnum_is_neg1, @function +yasm_intnum_is_neg1: +.LFB40: + .loc 1 476 0 +.LVL206: + subq $8, %rsp +.LCFI37: +.LVL207: + .loc 1 477 0 + cmpl $1, 8(%rdi) + je .L177 +.L171: + xorl %edx, %edx + .loc 1 478 0 + addq $8, %rsp +.LVL208: + movl %edx, %eax + ret +.LVL209: + .p2align 4,,7 +.L177: + .loc 1 477 0 + movq (%rdi), %rdi +.LVL210: + call BitVector_is_full + testl %eax, %eax + movl $1, %edx + je .L171 + .loc 1 478 0 + movl %edx, %eax + addq $8, %rsp +.LVL211: + ret +.LFE40: + .size yasm_intnum_is_neg1, .-yasm_intnum_is_neg1 + .p2align 4,,15 +.globl yasm_intnum_sign + .type yasm_intnum_sign, @function +yasm_intnum_sign: +.LFB41: + .loc 1 482 0 +.LVL212: + .loc 1 483 0 + movl 8(%rdi), %r8d + testl %r8d, %r8d + jne .L186 + .loc 1 484 0 + xorl %eax, %eax + cmpq $0, (%rdi) + setne %al + .loc 1 490 0 + ret + .p2align 4,,7 +.L186: + .loc 1 489 0 + movq (%rdi), %rdi +.LVL213: + jmp BitVector_Sign +.LFE41: + .size yasm_intnum_sign, .-yasm_intnum_sign + .section .rodata.str1.1 +.LC28: + .string "unknown intnum type" + .text + .p2align 4,,15 +.globl yasm_intnum_get_uint + .type yasm_intnum_get_uint, @function +yasm_intnum_get_uint: +.LFB42: + .loc 1 494 0 +.LVL214: + subq $8, %rsp +.LCFI38: +.LVL215: + .loc 1 495 0 + movl 8(%rdi), %eax + testl %eax, %eax + je .L189 + decl %eax + je .L194 + .loc 1 501 0 + movl $.LC28, %edx + movl $501, %esi + movl $.LC22, %edi +.LVL216: + call *yasm_internal_error_(%rip) + xorl %eax, %eax + .loc 1 505 0 + addq $8, %rsp +.LVL217: + ret +.LVL218: + .p2align 4,,7 +.L189: + .loc 1 497 0 + movq (%rdi), %rax + .loc 1 505 0 + addq $8, %rsp +.LVL219: + ret +.LVL220: + .p2align 4,,7 +.L194: + .loc 1 499 0 + movq (%rdi), %rdi +.LVL221: + xorl %edx, %edx + movl $32, %esi + .loc 1 505 0 + addq $8, %rsp +.LVL222: + .loc 1 499 0 + jmp BitVector_Chunk_Read +.LFE42: + .size yasm_intnum_get_uint, .-yasm_intnum_get_uint + .p2align 4,,15 +.globl yasm_intnum_get_int + .type yasm_intnum_get_int, @function +yasm_intnum_get_int: +.LFB43: + .loc 1 509 0 +.LVL223: + pushq %rbx +.LCFI39: +.LVL224: + .loc 1 510 0 + movl 8(%rdi), %eax + .loc 1 509 0 + movq %rdi, %rbx + .loc 1 510 0 + testl %eax, %eax + je .L197 +.LVL225: + decl %eax + je .L208 + .loc 1 534 0 + movl $.LC28, %edx + movl $534, %esi + movl $.LC22, %edi + call *yasm_internal_error_(%rip) + xorl %eax, %eax +.LVL226: +.L201: + .loc 1 538 0 + popq %rbx +.LVL227: + ret +.LVL228: + .p2align 4,,7 +.L197: + .loc 1 513 0 + movq (%rdi), %rax + testl %eax, %eax + jns .L201 +.L199: + .loc 1 538 0 + popq %rbx +.LVL229: + .loc 1 536 0 + movabsq $9223372036854775807, %rax + .loc 1 538 0 + .p2align 4,,2 + ret +.LVL230: + .p2align 4,,7 +.L208: + .loc 1 515 0 + movq (%rdi), %rdi + call BitVector_msb_ + testl %eax, %eax + .p2align 4,,2 + je .L199 +.LBB2: + .loc 1 521 0 + movq (%rbx), %rsi + movq conv_bv(%rip), %rdi + call BitVector_Negate + .loc 1 522 0 + movq conv_bv(%rip), %rdi + call Set_Max + cmpq $31, %rax + jle .L209 +.LVL231: +.L203: +.LBE2: + .loc 1 538 0 + popq %rbx +.LVL232: + .loc 1 536 0 + movabsq $-9223372036854775808, %rax +.LVL233: + .loc 1 538 0 + ret +.LVL234: +.L209: +.LBB3: + .loc 1 526 0 + movq conv_bv(%rip), %rdi + xorl %edx, %edx + movl $32, %esi + call BitVector_Chunk_Read +.LVL235: + .loc 1 528 0 + testl %eax, %eax + js .L203 +.LBE3: + .loc 1 538 0 + popq %rbx +.LVL236: +.LBB4: + .loc 1 528 0 + negq %rax +.LVL237: +.LBE4: + .loc 1 538 0 + ret +.LFE43: + .size yasm_intnum_get_int, .-yasm_intnum_get_int + .p2align 4,,15 +.globl yasm_intnum_check_size + .type yasm_intnum_check_size, @function +yasm_intnum_check_size: +.LFB45: + .loc 1 610 0 +.LVL238: + movq %rbx, -48(%rsp) +.LCFI40: + movq %r13, -24(%rsp) +.LCFI41: + movq %rdi, %rbx + movq %r14, -16(%rsp) +.LCFI42: + movq %r15, -8(%rsp) +.LCFI43: + movq %rsi, %r14 + movq %rbp, -40(%rsp) +.LCFI44: + movq %r12, -32(%rsp) +.LCFI45: + subq $56, %rsp +.LCFI46: +.LVL239: + .loc 1 614 0 + cmpl $1, 8(%rdi) + .loc 1 610 0 + movq %rdx, %r13 + movl %ecx, %r15d + .loc 1 614 0 + je .L230 +.LVL240: + .loc 1 621 0 + movq conv_bv(%rip), %rbp +.LVL241: + .loc 1 622 0 + movq %rbp, %rdi +.LVL242: + call BitVector_Empty + .loc 1 623 0 + movq (%rbx), %rcx + xorl %edx, %edx + movl $32, %esi + movq %rbp, %rdi + call BitVector_Chunk_Store +.LVL243: +.L215: + .loc 1 626 0 + cmpq $127, %r14 + movl $1, %eax +.LVL244: + ja .L218 + .loc 1 629 0 + testq %r13, %r13 + jne .L231 +.L219: + .loc 1 635 0 + testl %r15d, %r15d + .p2align 4,,3 + jle .L223 + .loc 1 636 0 + movq %rbp, %rdi + .p2align 4,,5 + call BitVector_msb_ +.LVL245: + testl %eax, %eax + .p2align 4,,2 + jne .L232 + .loc 1 648 0 + xorl %eax, %eax + cmpl $1, %r15d + sete %al + subq %rax, %r14 +.LVL246: +.L223: + .loc 1 650 0 + movq %rbp, %rdi + call Set_Max +.LVL247: + cmpq %r14, %rax + setl %al + movzbl %al, %eax +.LVL248: +.L218: + .loc 1 651 0 + movq 8(%rsp), %rbx +.LVL249: + movq 16(%rsp), %rbp +.LVL250: + movq 24(%rsp), %r12 + movq 32(%rsp), %r13 +.LVL251: + movq 40(%rsp), %r14 +.LVL252: + movq 48(%rsp), %r15 +.LVL253: + addq $56, %rsp +.LVL254: + ret +.LVL255: + .p2align 4,,7 +.L231: +.LBB5: + .loc 1 630 0 + movq %rbp, %rdi + .loc 1 631 0 + xorl %ebx, %ebx +.LVL256: + .loc 1 630 0 + call BitVector_msb_ +.LVL257: + movl %eax, %r12d + .p2align 4,,7 +.L222: + .loc 1 632 0 + movl %r12d, %esi + movq %rbp, %rdi + incq %rbx + call BitVector_shift_right + .loc 1 631 0 + cmpq %rbx, %r13 + jne .L222 + jmp .L219 +.LVL258: + .p2align 4,,7 +.L230: +.LBE5: + .loc 1 615 0 + testq %rdx, %rdx + .p2align 4,,7 + jne .L233 +.LVL259: + .loc 1 619 0 + movq (%rdi), %rbp +.LVL260: + .p2align 4,,7 + jmp .L215 +.LVL261: +.L232: +.LBB6: + .loc 1 640 0 + movq conv_bv(%rip), %rdi + movq %rbp, %rsi + call BitVector_Negate + .loc 1 641 0 + movq conv_bv(%rip), %rdi + movq %rdi, %rsi + call BitVector_dec + .loc 1 642 0 + movq conv_bv(%rip), %rdi + call Set_Max + leaq -1(%r14), %rdx + cmpq %rdx, %rax + setl %al + movzbl %al, %eax +.LVL262: + jmp .L218 +.LVL263: +.L233: +.LBE6: + .loc 1 616 0 + movq conv_bv(%rip), %rbp +.LVL264: + .loc 1 617 0 + movq (%rdi), %rsi + movq %rbp, %rdi +.LVL265: + call BitVector_Copy +.LVL266: + jmp .L215 +.LFE45: + .size yasm_intnum_check_size, .-yasm_intnum_check_size + .section .rodata.str1.1 +.LC29: + .string "destination too large" + .section .rodata.str1.8 + .align 8 +.LC30: + .string "value does not fit in %d bit field" + .section .rodata.str1.1 +.LC31: + .string "big endian not implemented" + .section .rodata.str1.8 + .align 8 +.LC32: + .string "misaligned value, truncating to boundary" + .text + .p2align 4,,15 +.globl yasm_intnum_get_sized + .type yasm_intnum_get_sized, @function +yasm_intnum_get_sized: +.LFB44: + .loc 1 544 0 +.LVL267: + movq %rbx, -48(%rsp) +.LCFI47: + movq %r12, -32(%rsp) +.LCFI48: + movq %rdi, %rbx + movq %r13, -24(%rsp) +.LCFI49: + movq %r14, -16(%rsp) +.LCFI50: + movl %r8d, %r12d + movq %r15, -8(%rsp) +.LCFI51: + movq %rbp, -40(%rsp) +.LCFI52: + .loc 1 548 0 + xorl %r15d, %r15d +.LVL268: + .loc 1 544 0 + subq $88, %rsp +.LCFI53: +.LVL269: + .loc 1 548 0 + testl %r8d, %r8d + .loc 1 544 0 + movq %rdx, %r14 + movq %rsi, 16(%rsp) + movq %rcx, 8(%rsp) + movl %r9d, 4(%rsp) + .loc 1 545 0 + movq op1static(%rip), %r13 +.LVL270: + .loc 1 548 0 + js .L263 +.LVL271: +.L237: + .loc 1 552 0 + leaq 0(,%r14,8), %rax + cmpq $128, %rax + ja .L264 +.LVL272: +.L238: + .loc 1 556 0 + movl 96(%rsp), %ebp + testl %ebp, %ebp + jne .L265 +.L240: + .loc 1 561 0 + movl 4(%rsp), %r11d + testl %r11d, %r11d + je .L243 + .loc 1 563 0 + movl $.LC31, %edx + movl $563, %esi + movl $.LC22, %edi + call *yasm_internal_error_(%rip) + .loc 1 568 0 + cmpl $1, 8(%rbx) + je .L266 +.L246: + .loc 1 571 0 + movq op2static(%rip), %rbp +.LVL273: + .loc 1 572 0 + movq %rbp, %rdi + call BitVector_Empty + .loc 1 573 0 + movq (%rbx), %rcx + xorl %edx, %edx + movl $32, %esi + movq %rbp, %rdi + call BitVector_Chunk_Store + .loc 1 577 0 + movl 96(%rsp), %r10d + testq %r15, %r15 + setne %bl +.LVL274: + testl %r10d, %r10d + setne %al + testb %bl, %al + jne .L267 +.L249: + .loc 1 586 0 + testb %bl, %bl + movl %r12d, %edx + jne .L268 +.L254: + .loc 1 594 0 + movl 8(%rsp), %r8d + xorl %ecx, %ecx + movq %rbp, %rsi + movq %r13, %rdi + call BitVector_Interval_Copy + .loc 1 597 0 + leaq 36(%rsp), %rsi + movq %r13, %rdi + call BitVector_Block_Read + .loc 1 598 0 + movl 4(%rsp), %r9d + .loc 1 597 0 + movq %rax, %rbx +.LVL275: + .loc 1 598 0 + testl %r9d, %r9d + je .L258 +.LVL276: + .loc 1 600 0 + movl $.LC31, %edx + movl $600, %esi + movl $.LC22, %edi + call *yasm_internal_error_(%rip) +.L260: + .loc 1 603 0 + movq %rbx, %rdi + call *yasm_xfree(%rip) + .loc 1 604 0 + movq 40(%rsp), %rbx +.LVL277: + movq 48(%rsp), %rbp +.LVL278: + movq 56(%rsp), %r12 +.LVL279: + movq 64(%rsp), %r13 +.LVL280: + movq 72(%rsp), %r14 +.LVL281: + movq 80(%rsp), %r15 +.LVL282: + addq $88, %rsp +.LVL283: + ret +.LVL284: + .p2align 4,,7 +.L243: + .loc 1 565 0 + movq 16(%rsp), %rsi + movl %r14d, %edx + movq %r13, %rdi + call BitVector_Block_Store + .loc 1 568 0 + cmpl $1, 8(%rbx) + jne .L246 +.L266: + .loc 1 577 0 + movl 96(%rsp), %r10d + testq %r15, %r15 + .loc 1 569 0 + movq (%rbx), %rbp +.LVL285: + .loc 1 577 0 + setne %bl +.LVL286: + testl %r10d, %r10d + setne %al + testb %bl, %al + je .L249 +.L267: + .loc 1 578 0 + movq conv_bv(%rip), %rdi + movq %rbp, %rsi + call BitVector_Copy + .loc 1 579 0 + movq conv_bv(%rip), %rdi + movl $128, %esi + subl %r15d, %esi + call BitVector_Move_Left + .loc 1 580 0 + movq conv_bv(%rip), %rdi + call BitVector_is_empty + testl %eax, %eax + jne .L249 + .loc 1 581 0 + movq 104(%rsp), %rsi + movl $.LC32, %edx + xorl %edi, %edi + call yasm__warning + jmp .L249 +.LVL287: + .p2align 4,,7 +.L258: + .loc 1 602 0 + movq 16(%rsp), %rdi + movq %r14, %rdx + movq %rax, %rsi + call memcpy + jmp .L260 +.LVL288: + .p2align 4,,7 +.L265: + .loc 1 556 0 + movq 8(%rsp), %rsi + movl $2, %ecx + movq %r15, %rdx + movq %rbx, %rdi + call yasm_intnum_check_size + testl %eax, %eax + jne .L240 + .loc 1 557 0 + movq 8(%rsp), %rcx + movq 104(%rsp), %rsi + movl $.LC30, %edx + xorl %edi, %edi + call yasm__warning + jmp .L240 +.LVL289: + .p2align 4,,7 +.L264: + .loc 1 553 0 + movl $.LC29, %edx + movl $553, %esi + movl $.LC22, %edi + call *yasm_internal_error_(%rip) +.LVL290: + jmp .L238 +.LVL291: + .p2align 4,,7 +.L268: + .loc 1 587 0 + movq %rbp, %rdi + call BitVector_msb_ + .loc 1 588 0 + testq %r15, %r15 + .loc 1 587 0 + movl %eax, %r12d +.LVL292: + .loc 1 588 0 + .p2align 4,,2 + je .L255 + xorl %ebx, %ebx + .p2align 4,,7 +.L257: + .loc 1 589 0 + movl %r12d, %esi + movq %rbp, %rdi + incq %rbx + call BitVector_shift_right + .loc 1 588 0 + cmpq %rbx, %r15 + jne .L257 +.L255: + xorl %edx, %edx + jmp .L254 +.LVL293: + .p2align 4,,7 +.L263: + .loc 1 548 0 + movl %r8d, %eax + negl %eax + movslq %eax,%r15 + jmp .L237 +.LFE44: + .size yasm_intnum_get_sized, .-yasm_intnum_get_sized + .p2align 4,,15 +.globl yasm_intnum_get_leb128 + .type yasm_intnum_get_leb128, @function +yasm_intnum_get_leb128: +.LFB46: + .loc 1 655 0 +.LVL294: + movq %rbx, -40(%rsp) +.LCFI54: + movq %rbp, -32(%rsp) +.LCFI55: + movq %rdi, %rbx + movq %r13, -16(%rsp) +.LCFI56: + movq %r14, -8(%rsp) +.LCFI57: + movl %edx, %ebp + movq %r12, -24(%rsp) +.LCFI58: + subq $40, %rsp +.LCFI59: +.LVL295: + .loc 1 661 0 + movl 8(%rdi), %eax + .loc 1 655 0 + movq %rsi, %r14 + .loc 1 656 0 + movq op1static(%rip), %r13 +.LVL296: + .loc 1 661 0 + testl %eax, %eax + jne .L270 +.LVL297: + cmpq $0, (%rdi) + je .L290 +.L272: + .loc 1 670 0 + movq %r13, %rdi +.LVL298: + call BitVector_Empty + .loc 1 671 0 + movq (%rbx), %rcx + xorl %edx, %edx + movl $32, %esi + movq %r13, %rdi + call BitVector_Chunk_Store + .loc 1 674 0 + testl %ebp, %ebp + jne .L291 +.LVL299: +.L277: + .loc 1 686 0 + movq %r13, %rdi + call Set_Max + leaq 1(%rax), %r12 +.LVL300: +.L281: + .loc 1 690 0 + xorl %eax, %eax + testq %r12, %r12 + movq %r14, %rbx +.LVL301: + jne .L292 +.LVL302: +.L284: + .loc 1 695 0 + andb $127, -1(%rbx) +.LVL303: +.L274: + .loc 1 697 0 + movq (%rsp), %rbx +.LVL304: + movq 8(%rsp), %rbp +.LVL305: + movq 16(%rsp), %r12 +.LVL306: + movq 24(%rsp), %r13 +.LVL307: + movq 32(%rsp), %r14 +.LVL308: + addq $40, %rsp +.LVL309: + ret +.LVL310: + .p2align 4,,7 +.L270: + .loc 1 667 0 + decl %eax + jne .L272 + .loc 1 674 0 + testl %ebp, %ebp + .loc 1 668 0 + movq (%rdi), %r13 + .loc 1 674 0 + je .L277 +.LVL311: + .p2align 4,,7 +.L291: + .loc 1 676 0 + movq %r13, %rdi + call BitVector_msb_ + testl %eax, %eax + jne .L293 + .loc 1 682 0 + movq %r13, %rdi + .loc 1 690 0 + movq %r14, %rbx +.LVL312: + .loc 1 682 0 + call Set_Max + leaq 2(%rax), %r12 +.LVL313: + .loc 1 690 0 + xorl %eax, %eax + testq %r12, %r12 + je .L284 + .p2align 4,,7 +.L292: + xorl %ebp, %ebp +.LVL314: + .p2align 4,,7 +.L285: + .loc 1 691 0 + movl %ebp, %edx + movl $7, %esi + movq %r13, %rdi + call BitVector_Chunk_Read + .loc 1 690 0 + addq $7, %rbp + .loc 1 692 0 + orl $-128, %eax + movb %al, (%rbx) + .loc 1 693 0 + incq %rbx + .loc 1 690 0 + cmpq %rbp, %r12 + ja .L285 + movq %rbx, %rax + subq %r14, %rax + jmp .L284 +.LVL315: + .p2align 4,,7 +.L290: + .loc 1 662 0 + movl $1, %eax + movb $0, (%rsi) + jmp .L274 +.LVL316: +.L293: + .loc 1 678 0 + movq conv_bv(%rip), %rdi + movq %r13, %rsi + call BitVector_Negate + .loc 1 679 0 + movq conv_bv(%rip), %rdi + call Set_Max + leaq 2(%rax), %r12 +.LVL317: + jmp .L281 +.LFE46: + .size yasm_intnum_get_leb128, .-yasm_intnum_get_leb128 + .p2align 4,,15 +.globl yasm_intnum_size_leb128 + .type yasm_intnum_size_leb128, @function +yasm_intnum_size_leb128: +.LFB47: + .loc 1 701 0 +.LVL318: + movq %rbx, -24(%rsp) +.LCFI60: + movq %rbp, -16(%rsp) +.LCFI61: + movq %rdi, %rbx + movq %r12, -8(%rsp) +.LCFI62: + subq $24, %rsp +.LCFI63: +.LVL319: + .loc 1 705 0 + movl 8(%rdi), %eax + .loc 1 701 0 + movl %esi, %r12d + .loc 1 702 0 + movq op1static(%rip), %rbp +.LVL320: + .loc 1 705 0 + testl %eax, %eax + jne .L295 +.LVL321: + cmpq $0, (%rdi) + movl $1, %edx + je .L299 +.L297: + .loc 1 713 0 + movq %rbp, %rdi +.LVL322: + call BitVector_Empty + .loc 1 714 0 + movq (%rbx), %rcx + xorl %edx, %edx + movl $32, %esi + movq %rbp, %rdi + call BitVector_Chunk_Store + .loc 1 717 0 + testl %r12d, %r12d + je .L302 +.LVL323: +.L308: + .loc 1 719 0 + movq %rbp, %rdi + call BitVector_msb_ + testl %eax, %eax + .p2align 4,,2 + je .L304 + .loc 1 721 0 + movq conv_bv(%rip), %rdi + movq %rbp, %rsi + call BitVector_Negate + .loc 1 722 0 + movq conv_bv(%rip), %rdi + call Set_Max + leaq 8(%rax), %rcx + .p2align 4,,7 +.L307: + .loc 1 729 0 + movq %rcx, %rax + movabsq $5270498306774157605, %rdx + imulq %rdx + movq %rcx, %rax + sarq $63, %rax + sarq %rdx + subq %rax, %rdx +.LVL324: +.L299: + .loc 1 731 0 + movq (%rsp), %rbx +.LVL325: + movq 8(%rsp), %rbp +.LVL326: + movq %rdx, %rax + movq 16(%rsp), %r12 +.LVL327: + addq $24, %rsp +.LVL328: + ret +.LVL329: + .p2align 4,,7 +.L295: + .loc 1 710 0 + decl %eax + jne .L297 + .loc 1 717 0 + testl %r12d, %r12d + .loc 1 711 0 + movq (%rdi), %rbp + .loc 1 717 0 + jne .L308 +.LVL330: + .p2align 4,,7 +.L302: + .loc 1 729 0 + movq %rbp, %rdi + call Set_Max + leaq 7(%rax), %rcx + jmp .L307 + .p2align 4,,7 +.L304: + .loc 1 725 0 + movq %rbp, %rdi + call Set_Max + leaq 8(%rax), %rcx + .p2align 4,,2 + jmp .L307 +.LFE47: + .size yasm_intnum_size_leb128, .-yasm_intnum_size_leb128 + .section .rodata.str1.1 +.LC33: + .string "0x%lx/%u" +.LC34: + .string "0x%s/%u" + .text + .p2align 4,,15 +.globl yasm_intnum_print + .type yasm_intnum_print, @function +yasm_intnum_print: +.LFB48: + .loc 1 735 0 +.LVL331: + movq %rbp, -16(%rsp) +.LCFI64: + movq %r12, -8(%rsp) +.LCFI65: + movq %rdi, %rbp + movq %rbx, -24(%rsp) +.LCFI66: + subq $24, %rsp +.LCFI67: +.LVL332: + .loc 1 738 0 + movl 8(%rdi), %eax + .loc 1 735 0 + movq %rsi, %r12 + .loc 1 738 0 + testl %eax, %eax + je .L311 +.LVL333: + decl %eax + je .L315 + .loc 1 748 0 + movq (%rsp), %rbx + movq 8(%rsp), %rbp + movq 16(%rsp), %r12 +.LVL334: + addq $24, %rsp +.LVL335: + ret +.LVL336: + .p2align 4,,7 +.L311: + .loc 1 740 0 + movzbl 12(%rdi), %ecx + movq (%rdi), %rdx + movl $.LC33, %esi + movq %r12, %rdi +.LVL337: + .loc 1 748 0 + movq (%rsp), %rbx + movq 8(%rsp), %rbp +.LVL338: + movq 16(%rsp), %r12 +.LVL339: + .loc 1 740 0 + xorl %eax, %eax + .loc 1 748 0 + addq $24, %rsp +.LVL340: + .loc 1 740 0 + jmp fprintf +.LVL341: + .p2align 4,,7 +.L315: + .loc 1 743 0 + movq (%rdi), %rdi +.LVL342: + call BitVector_to_Hex + .loc 1 744 0 + movzbl 12(%rbp), %ecx + .loc 1 743 0 + movq %rax, %rbx +.LVL343: + .loc 1 744 0 + movq %r12, %rdi + movq %rax, %rdx + movl $.LC34, %esi + xorl %eax, %eax + call fprintf + .loc 1 745 0 + movq %rbx, %rdi + movq yasm_xfree(%rip), %r11 + .loc 1 748 0 + movq (%rsp), %rbx +.LVL344: + movq 8(%rsp), %rbp +.LVL345: + movq 16(%rsp), %r12 +.LVL346: + addq $24, %rsp +.LVL347: + .loc 1 745 0 + jmp *%r11 +.LVL348: +.LFE48: + .size yasm_intnum_print, .-yasm_intnum_print + .section .rodata.str1.1 +.LC35: + .string "Test leb128_test: " +.LC36: + .string "-" +.LC37: + .string "" +.LC38: + .string "un" + .section .rodata.str1.8 + .align 8 +.LC39: + .string "%ssigned %s%s size() bad size: expected %lu, got %lu!" + .align 8 +.LC40: + .string "%ssigned %s%s get() bad size: expected %lu, got %lu!" + .align 8 +.LC41: + .string "%ssigned %s%s get() bad output!" + .section .rodata.str1.1 +.LC42: + .string "%s ** F: %s\n" +.LC43: + .string " +%d-%d/%d %d%%\n%s" + .text + .p2align 4,,15 +.globl main + .type main, @function +main: +.LFB50: + .file 2 "libyasm/tests/leb128_test.c" + .loc 2 134 0 +.LVL349: + pushq %r15 +.LCFI68: +.LVL350: + pushq %r14 +.LCFI69: +.LVL351: + pushq %r13 +.LCFI70: +.LVL352: + pushq %r12 +.LCFI71: +.LVL353: + pushq %rbp +.LCFI72: +.LVL354: + pushq %rbx +.LCFI73: +.LVL355: + subq $168, %rsp +.LCFI74: +.LVL356: + .loc 2 139 0 + call BitVector_Boot + testl %eax, %eax + movl $1, %edx + je .L366 + .loc 2 159 0 + addq $168, %rsp +.LVL357: + movl %edx, %eax + popq %rbx +.LVL358: + popq %rbp +.LVL359: + popq %r12 +.LVL360: + popq %r13 +.LVL361: + popq %r14 +.LVL362: + popq %r15 +.LVL363: + ret +.LVL364: +.L366: + leaq 48(%rsp), %rbp + .loc 2 144 0 + xorl %r14d, %r14d +.LVL365: + movl $tests+16, %r13d + .loc 2 141 0 + call yasm_intnum_initialize + movl $tests, %r15d + .loc 2 144 0 + movl $.LC35, %edi + xorl %eax, %eax + .loc 2 143 0 + movb $0, failed(%rip) + .loc 2 144 0 + call printf + movl $0, 44(%rsp) +.LVL366: + movq $tests+4, 32(%rsp) + movq $tests+8, 24(%rsp) + jmp .L320 +.LVL367: +.L370: +.LBB7: +.LBB8: +.LBB9: + .loc 2 98 0 + movq %r12, %rdi + call yasm_intnum_destroy + .loc 2 99 0 + movl -12(%r13), %eax + movl $.LC37, %edx + movl $.LC36, %ecx + movq (%r13), %r9 + movq -8(%r13), %r8 + movl $.LC39, %esi + testl %eax, %eax + movl (%r15), %eax + movq %rbx, (%rsp) + cmove %rdx, %rcx + testl %eax, %eax + movl $.LC38, %eax + cmove %rax, %rdx +.LVL368: +.L365: + .loc 2 110 0 + movl $failmsg, %edi + xorl %eax, %eax + movl $1, %ebx +.LVL369: + call sprintf + movl $70, %edi +.L331: +.LBE9: +.LBE8: + .loc 2 147 0 + call putchar + .loc 2 148 0 + movq stdout(%rip), %rdi + call fflush + .loc 2 149 0 + testl %ebx, %ebx + jne .L367 +.LBE7: + .loc 2 145 0 + incl %r14d +.LBB10: + .loc 2 151 0 + addl %ebx, 44(%rsp) +.LBE10: + .loc 2 145 0 + addq $32, 24(%rsp) + addq $32, %r15 + addq $32, %r13 + addq $32, 32(%rsp) + cmpl $16, %r14d + je .L368 +.L320: +.LBB11: +.LBB12: +.LBB13: + .loc 2 85 0 + movq -8(%r13), %rdi + call yasm__xstrdup + .loc 2 86 0 + xorl %esi, %esi + .loc 2 85 0 + movq %rax, %rbx +.LVL370: + .loc 2 86 0 + movq %rax, %rdi + call yasm_intnum_create_hex + .loc 2 91 0 + movq %rbx, %rdi + .loc 2 86 0 + movq %rax, %r12 + .loc 2 91 0 + call *yasm_xfree(%rip) + .loc 2 93 0 + movl -12(%r13), %edx + testl %edx, %edx + jne .L369 +.L321: + .loc 2 96 0 + movl -16(%r13), %esi + movq %r12, %rdi + call yasm_intnum_size_leb128 +.LVL371: + .loc 2 97 0 + cmpq (%r13), %rax +.LVL372: + .loc 2 96 0 + movq %rax, %rbx +.LVL373: + .loc 2 97 0 + jne .L370 + .loc 2 99 0 + movl $1, %eax + .p2align 4,,7 +.L332: + .loc 2 106 0 + movb $-1, -1(%rax,%rbp) + incq %rax + .loc 2 105 0 + cmpq $101, %rax + jne .L332 + .loc 2 107 0 + movl (%r15), %edx + movq %rbp, %rsi + movq %r12, %rdi + call yasm_intnum_get_leb128 +.LVL374: + .loc 2 108 0 + cmpq (%r13), %rax +.LVL375: + .loc 2 107 0 + movq %rax, %rbx +.LVL376: + .loc 2 108 0 + je .L334 + .loc 2 109 0 + movq %r12, %rdi + call yasm_intnum_destroy + .loc 2 110 0 + movq 24(%rsp), %rax + movl $.LC37, %edx + movq (%r13), %r9 + movl $.LC36, %ecx + movl $.LC40, %esi + movq (%rax), %r8 + movq 32(%rsp), %rax + movl (%rax), %eax + testl %eax, %eax + movl (%r15), %eax + movq %rbx, (%rsp) + cmove %rdx, %rcx + testl %eax, %eax + movl $.LC38, %eax + cmove %rax, %rdx + jmp .L365 +.LVL377: +.L369: + .loc 2 94 0 + xorl %ecx, %ecx + xorl %edx, %edx + movl $8, %esi + movq %r12, %rdi + call yasm_intnum_calc + jmp .L321 +.LVL378: +.L367: +.LBE13: +.LBE12: + .loc 2 150 0 + xorl %eax, %eax + movl $failmsg, %ecx + movl $failed, %edx + movl $.LC42, %esi + movl $failed, %edi +.LBE11: + .loc 2 145 0 + incl %r14d +.LBB14: + .loc 2 150 0 + call sprintf +.LBE14: + .loc 2 145 0 + addq $32, %r15 +.LBB15: + .loc 2 151 0 + addl %ebx, 44(%rsp) +.LBE15: + .loc 2 145 0 + addq $32, 24(%rsp) + addq $32, %r13 + addq $32, 32(%rsp) + cmpl $16, %r14d + jne .L320 +.L368: + .loc 2 154 0 + call yasm_intnum_cleanup + .loc 2 156 0 + movl %r14d, %esi + subl 44(%rsp), %esi + movl $100, %r12d +.LVL379: + movl 44(%rsp), %edx + movl $failed, %r9d + movl $16, %ecx + movl $.LC43, %edi + movl %esi, %r8d + imull %r12d, %r8d + leal 15(%r8), %eax + testl %r8d, %r8d + cmovs %eax, %r8d + xorl %eax, %eax + sarl $4, %r8d + call printf + .loc 2 158 0 + xorl %edx, %edx + cmpl $0, 44(%rsp) + setne %dl + .loc 2 159 0 + addq $168, %rsp +.LVL380: + popq %rbx +.LVL381: + popq %rbp +.LVL382: + popq %r12 +.LVL383: + popq %r13 +.LVL384: + popq %r14 +.LVL385: + popq %r15 +.LVL386: + movl %edx, %eax + ret +.LVL387: +.L334: +.LBB16: +.LBB17: +.LBB18: + .loc 2 117 0 + testq %rax, %rax + je .L346 +.LVL388: + .loc 2 118 0 + movq 8(%r13), %rdi + xorl %esi, %esi +.LVL389: + movl $1, %ecx +.L342: + movzbl -1(%rdi,%rcx), %eax +.LVL390: + cmpb %al, -1(%rcx,%rbp) + movl $1, %eax + cmovne %eax, %esi + .loc 2 117 0 + testl %esi, %esi + sete %dl + cmpq %rcx, %rbx + seta %al + incq %rcx + testb %al, %dl + jne .L342 + .loc 2 121 0 + testl %esi, %esi + je .L346 + .loc 2 122 0 + movq %r12, %rdi + .loc 2 123 0 + movl $1, %ebx +.LVL391: + .loc 2 122 0 + call yasm_intnum_destroy +.LVL392: + .loc 2 123 0 + movq 32(%rsp), %rax + movl $.LC37, %edx + movl $.LC36, %ecx + movl $failmsg, %edi + movl $.LC41, %esi + movl (%rax), %eax + testl %eax, %eax + movl (%r15), %eax + cmove %rdx, %rcx + testl %eax, %eax + movl $.LC38, %eax + cmove %rax, %rdx + movq 24(%rsp), %rax + movq (%rax), %r8 + xorl %eax, %eax + call sprintf + movl $70, %edi + jmp .L331 +.LVL393: +.L346: + .loc 2 128 0 + movq %r12, %rdi + xorl %ebx, %ebx +.LVL394: + call yasm_intnum_destroy +.LVL395: + movl $46, %edi + jmp .L331 +.LBE18: +.LBE17: +.LBE16: +.LFE50: + .size main, .-main + .local failmsg + .comm failmsg,100,32 + .local failed + .comm failed,1000,32 + .local from_dec_data + .comm from_dec_data,8,8 + .local op2static + .comm op2static,8,8 + .local op1static + .comm op1static,8,8 + .local spare + .comm spare,8,8 + .local result + .comm result,8,8 + .local conv_bv + .comm conv_bv,8,8 + .section .debug_frame,"",@progbits +.Lframe0: + .long .LECIE0-.LSCIE0 +.LSCIE0: + .long 0xffffffff + .byte 0x1 + .string "" + .uleb128 0x1 + .sleb128 -8 + .byte 0x10 + .byte 0xc + .uleb128 0x7 + .uleb128 0x8 + .byte 0x90 + .uleb128 0x1 + .align 8 +.LECIE0: +.LSFDE0: + .long .LEFDE0-.LASFDE0 +.LASFDE0: + .long .Lframe0 + .quad .LFB25 + .quad .LFE25-.LFB25 + .byte 0x4 + .long .LCFI0-.LFB25 + .byte 0xe + .uleb128 0x10 + .align 8 +.LEFDE0: +.LSFDE2: + .long .LEFDE2-.LASFDE2 +.LASFDE2: + .long .Lframe0 + .quad .LFB26 + .quad .LFE26-.LFB26 + .byte 0x4 + .long .LCFI1-.LFB26 + .byte 0xe + .uleb128 0x10 + .align 8 +.LEFDE2: +.LSFDE4: + .long .LEFDE4-.LASFDE4 +.LASFDE4: + .long .Lframe0 + .quad .LFB27 + .quad .LFE27-.LFB27 + .byte 0x4 + .long .LCFI3-.LFB27 + .byte 0x86 + .uleb128 0x3 + .byte 0x83 + .uleb128 0x4 + .byte 0x4 + .long .LCFI5-.LCFI3 + .byte 0xe + .uleb128 0x20 + .byte 0x8c + .uleb128 0x2 + .align 8 +.LEFDE4: +.LSFDE6: + .long .LEFDE6-.LASFDE6 +.LASFDE6: + .long .Lframe0 + .quad .LFB28 + .quad .LFE28-.LFB28 + .byte 0x4 + .long .LCFI6-.LFB28 + .byte 0x86 + .uleb128 0x3 + .byte 0x4 + .long .LCFI9-.LCFI6 + .byte 0xe + .uleb128 0x20 + .byte 0x8c + .uleb128 0x2 + .byte 0x83 + .uleb128 0x4 + .align 8 +.LEFDE6: +.LSFDE8: + .long .LEFDE8-.LASFDE8 +.LASFDE8: + .long .Lframe0 + .quad .LFB29 + .quad .LFE29-.LFB29 + .byte 0x4 + .long .LCFI10-.LFB29 + .byte 0x86 + .uleb128 0x3 + .byte 0x4 + .long .LCFI13-.LCFI10 + .byte 0xe + .uleb128 0x20 + .byte 0x8c + .uleb128 0x2 + .byte 0x83 + .uleb128 0x4 + .align 8 +.LEFDE8: +.LSFDE10: + .long .LEFDE10-.LASFDE10 +.LASFDE10: + .long .Lframe0 + .quad .LFB30 + .quad .LFE30-.LFB30 + .byte 0x4 + .long .LCFI14-.LFB30 + .byte 0x86 + .uleb128 0x3 + .byte 0x4 + .long .LCFI17-.LCFI14 + .byte 0xe + .uleb128 0x20 + .byte 0x8c + .uleb128 0x2 + .byte 0x83 + .uleb128 0x4 + .align 8 +.LEFDE10: +.LSFDE12: + .long .LEFDE12-.LASFDE12 +.LASFDE12: + .long .Lframe0 + .quad .LFB31 + .quad .LFE31-.LFB31 + .byte 0x4 + .long .LCFI18-.LFB31 + .byte 0x83 + .uleb128 0x5 + .byte 0x4 + .long .LCFI21-.LCFI18 + .byte 0x8d + .uleb128 0x2 + .byte 0x8c + .uleb128 0x3 + .byte 0x86 + .uleb128 0x4 + .byte 0x4 + .long .LCFI22-.LCFI21 + .byte 0xe + .uleb128 0x30 + .align 8 +.LEFDE12: +.LSFDE14: + .long .LEFDE14-.LASFDE14 +.LASFDE14: + .long .Lframe0 + .quad .LFB32 + .quad .LFE32-.LFB32 + .byte 0x4 + .long .LCFI23-.LFB32 + .byte 0xe + .uleb128 0x10 + .byte 0x83 + .uleb128 0x2 + .align 8 +.LEFDE14: +.LSFDE16: + .long .LEFDE16-.LASFDE16 +.LASFDE16: + .long .Lframe0 + .quad .LFB33 + .quad .LFE33-.LFB33 + .byte 0x4 + .long .LCFI24-.LFB33 + .byte 0xe + .uleb128 0x10 + .byte 0x83 + .uleb128 0x2 + .align 8 +.LEFDE16: +.LSFDE18: + .long .LEFDE18-.LASFDE18 +.LASFDE18: + .long .Lframe0 + .quad .LFB34 + .quad .LFE34-.LFB34 + .byte 0x4 + .long .LCFI25-.LFB34 + .byte 0x86 + .uleb128 0x2 + .byte 0x4 + .long .LCFI27-.LCFI25 + .byte 0xe + .uleb128 0x20 + .byte 0x83 + .uleb128 0x3 + .align 8 +.LEFDE18: +.LSFDE20: + .long .LEFDE20-.LASFDE20 +.LASFDE20: + .long .Lframe0 + .quad .LFB35 + .quad .LFE35-.LFB35 + .byte 0x4 + .long .LCFI28-.LFB35 + .byte 0xe + .uleb128 0x10 + .byte 0x83 + .uleb128 0x2 + .align 8 +.LEFDE20: +.LSFDE22: + .long .LEFDE22-.LASFDE22 +.LASFDE22: + .long .Lframe0 + .quad .LFB36 + .quad .LFE36-.LFB36 + .byte 0x4 + .long .LCFI30-.LFB36 + .byte 0x86 + .uleb128 0x6 + .byte 0x83 + .uleb128 0x7 + .byte 0x4 + .long .LCFI32-.LCFI30 + .byte 0x8f + .uleb128 0x2 + .byte 0x8e + .uleb128 0x3 + .byte 0x4 + .long .LCFI35-.LCFI32 + .byte 0xe + .uleb128 0x50 + .byte 0x8d + .uleb128 0x4 + .byte 0x8c + .uleb128 0x5 + .align 8 +.LEFDE22: +.LSFDE24: + .long .LEFDE24-.LASFDE24 +.LASFDE24: + .long .Lframe0 + .quad .LFB37 + .quad .LFE37-.LFB37 + .byte 0x4 + .long .LCFI36-.LFB37 + .byte 0xe + .uleb128 0x10 + .byte 0x83 + .uleb128 0x2 + .align 8 +.LEFDE24: +.LSFDE26: + .long .LEFDE26-.LASFDE26 +.LASFDE26: + .long .Lframe0 + .quad .LFB38 + .quad .LFE38-.LFB38 + .align 8 +.LEFDE26: +.LSFDE28: + .long .LEFDE28-.LASFDE28 +.LASFDE28: + .long .Lframe0 + .quad .LFB39 + .quad .LFE39-.LFB39 + .align 8 +.LEFDE28: +.LSFDE30: + .long .LEFDE30-.LASFDE30 +.LASFDE30: + .long .Lframe0 + .quad .LFB40 + .quad .LFE40-.LFB40 + .byte 0x4 + .long .LCFI37-.LFB40 + .byte 0xe + .uleb128 0x10 + .align 8 +.LEFDE30: +.LSFDE32: + .long .LEFDE32-.LASFDE32 +.LASFDE32: + .long .Lframe0 + .quad .LFB41 + .quad .LFE41-.LFB41 + .align 8 +.LEFDE32: +.LSFDE34: + .long .LEFDE34-.LASFDE34 +.LASFDE34: + .long .Lframe0 + .quad .LFB42 + .quad .LFE42-.LFB42 + .byte 0x4 + .long .LCFI38-.LFB42 + .byte 0xe + .uleb128 0x10 + .align 8 +.LEFDE34: +.LSFDE36: + .long .LEFDE36-.LASFDE36 +.LASFDE36: + .long .Lframe0 + .quad .LFB43 + .quad .LFE43-.LFB43 + .byte 0x4 + .long .LCFI39-.LFB43 + .byte 0xe + .uleb128 0x10 + .byte 0x83 + .uleb128 0x2 + .align 8 +.LEFDE36: +.LSFDE38: + .long .LEFDE38-.LASFDE38 +.LASFDE38: + .long .Lframe0 + .quad .LFB45 + .quad .LFE45-.LFB45 + .byte 0x4 + .long .LCFI41-.LFB45 + .byte 0x8d + .uleb128 0x4 + .byte 0x83 + .uleb128 0x7 + .byte 0x4 + .long .LCFI43-.LCFI41 + .byte 0x8f + .uleb128 0x2 + .byte 0x8e + .uleb128 0x3 + .byte 0x4 + .long .LCFI46-.LCFI43 + .byte 0xe + .uleb128 0x40 + .byte 0x8c + .uleb128 0x5 + .byte 0x86 + .uleb128 0x6 + .align 8 +.LEFDE38: +.LSFDE40: + .long .LEFDE40-.LASFDE40 +.LASFDE40: + .long .Lframe0 + .quad .LFB44 + .quad .LFE44-.LFB44 + .byte 0x4 + .long .LCFI48-.LFB44 + .byte 0x8c + .uleb128 0x5 + .byte 0x83 + .uleb128 0x7 + .byte 0x4 + .long .LCFI52-.LCFI48 + .byte 0x86 + .uleb128 0x6 + .byte 0x8f + .uleb128 0x2 + .byte 0x8e + .uleb128 0x3 + .byte 0x8d + .uleb128 0x4 + .byte 0x4 + .long .LCFI53-.LCFI52 + .byte 0xe + .uleb128 0x60 + .align 8 +.LEFDE40: +.LSFDE42: + .long .LEFDE42-.LASFDE42 +.LASFDE42: + .long .Lframe0 + .quad .LFB46 + .quad .LFE46-.LFB46 + .byte 0x4 + .long .LCFI55-.LFB46 + .byte 0x86 + .uleb128 0x5 + .byte 0x83 + .uleb128 0x6 + .byte 0x4 + .long .LCFI59-.LCFI55 + .byte 0xe + .uleb128 0x30 + .byte 0x8c + .uleb128 0x4 + .byte 0x8e + .uleb128 0x2 + .byte 0x8d + .uleb128 0x3 + .align 8 +.LEFDE42: +.LSFDE44: + .long .LEFDE44-.LASFDE44 +.LASFDE44: + .long .Lframe0 + .quad .LFB47 + .quad .LFE47-.LFB47 + .byte 0x4 + .long .LCFI61-.LFB47 + .byte 0x86 + .uleb128 0x3 + .byte 0x83 + .uleb128 0x4 + .byte 0x4 + .long .LCFI63-.LCFI61 + .byte 0xe + .uleb128 0x20 + .byte 0x8c + .uleb128 0x2 + .align 8 +.LEFDE44: +.LSFDE46: + .long .LEFDE46-.LASFDE46 +.LASFDE46: + .long .Lframe0 + .quad .LFB48 + .quad .LFE48-.LFB48 + .byte 0x4 + .long .LCFI65-.LFB48 + .byte 0x8c + .uleb128 0x2 + .byte 0x86 + .uleb128 0x3 + .byte 0x4 + .long .LCFI67-.LCFI65 + .byte 0xe + .uleb128 0x20 + .byte 0x83 + .uleb128 0x4 + .align 8 +.LEFDE46: +.LSFDE48: + .long .LEFDE48-.LASFDE48 +.LASFDE48: + .long .Lframe0 + .quad .LFB50 + .quad .LFE50-.LFB50 + .byte 0x4 + .long .LCFI68-.LFB50 + .byte 0xe + .uleb128 0x10 + .byte 0x4 + .long .LCFI69-.LCFI68 + .byte 0xe + .uleb128 0x18 + .byte 0x4 + .long .LCFI70-.LCFI69 + .byte 0xe + .uleb128 0x20 + .byte 0x4 + .long .LCFI71-.LCFI70 + .byte 0xe + .uleb128 0x28 + .byte 0x4 + .long .LCFI72-.LCFI71 + .byte 0xe + .uleb128 0x30 + .byte 0x4 + .long .LCFI73-.LCFI72 + .byte 0xe + .uleb128 0x38 + .byte 0x4 + .long .LCFI74-.LCFI73 + .byte 0xe + .uleb128 0xe0 + .byte 0x83 + .uleb128 0x7 + .byte 0x86 + .uleb128 0x6 + .byte 0x8c + .uleb128 0x5 + .byte 0x8d + .uleb128 0x4 + .byte 0x8e + .uleb128 0x3 + .byte 0x8f + .uleb128 0x2 + .align 8 +.LEFDE48: + .section .eh_frame,"a",@progbits +.Lframe1: + .long .LECIE1-.LSCIE1 +.LSCIE1: + .long 0x0 + .byte 0x1 + .string "" + .uleb128 0x1 + .sleb128 -8 + .byte 0x10 + .byte 0xc + .uleb128 0x7 + .uleb128 0x8 + .byte 0x90 + .uleb128 0x1 + .align 8 +.LECIE1: +.LSFDE1: + .long .LEFDE1-.LASFDE1 +.LASFDE1: + .long .LASFDE1-.Lframe1 + .quad .LFB25 + .quad .LFE25-.LFB25 + .byte 0x4 + .long .LCFI0-.LFB25 + .byte 0xe + .uleb128 0x10 + .align 8 +.LEFDE1: +.LSFDE3: + .long .LEFDE3-.LASFDE3 +.LASFDE3: + .long .LASFDE3-.Lframe1 + .quad .LFB26 + .quad .LFE26-.LFB26 + .byte 0x4 + .long .LCFI1-.LFB26 + .byte 0xe + .uleb128 0x10 + .align 8 +.LEFDE3: +.LSFDE5: + .long .LEFDE5-.LASFDE5 +.LASFDE5: + .long .LASFDE5-.Lframe1 + .quad .LFB27 + .quad .LFE27-.LFB27 + .byte 0x4 + .long .LCFI3-.LFB27 + .byte 0x86 + .uleb128 0x3 + .byte 0x83 + .uleb128 0x4 + .byte 0x4 + .long .LCFI5-.LCFI3 + .byte 0xe + .uleb128 0x20 + .byte 0x8c + .uleb128 0x2 + .align 8 +.LEFDE5: +.LSFDE7: + .long .LEFDE7-.LASFDE7 +.LASFDE7: + .long .LASFDE7-.Lframe1 + .quad .LFB28 + .quad .LFE28-.LFB28 + .byte 0x4 + .long .LCFI6-.LFB28 + .byte 0x86 + .uleb128 0x3 + .byte 0x4 + .long .LCFI9-.LCFI6 + .byte 0xe + .uleb128 0x20 + .byte 0x8c + .uleb128 0x2 + .byte 0x83 + .uleb128 0x4 + .align 8 +.LEFDE7: +.LSFDE9: + .long .LEFDE9-.LASFDE9 +.LASFDE9: + .long .LASFDE9-.Lframe1 + .quad .LFB29 + .quad .LFE29-.LFB29 + .byte 0x4 + .long .LCFI10-.LFB29 + .byte 0x86 + .uleb128 0x3 + .byte 0x4 + .long .LCFI13-.LCFI10 + .byte 0xe + .uleb128 0x20 + .byte 0x8c + .uleb128 0x2 + .byte 0x83 + .uleb128 0x4 + .align 8 +.LEFDE9: +.LSFDE11: + .long .LEFDE11-.LASFDE11 +.LASFDE11: + .long .LASFDE11-.Lframe1 + .quad .LFB30 + .quad .LFE30-.LFB30 + .byte 0x4 + .long .LCFI14-.LFB30 + .byte 0x86 + .uleb128 0x3 + .byte 0x4 + .long .LCFI17-.LCFI14 + .byte 0xe + .uleb128 0x20 + .byte 0x8c + .uleb128 0x2 + .byte 0x83 + .uleb128 0x4 + .align 8 +.LEFDE11: +.LSFDE13: + .long .LEFDE13-.LASFDE13 +.LASFDE13: + .long .LASFDE13-.Lframe1 + .quad .LFB31 + .quad .LFE31-.LFB31 + .byte 0x4 + .long .LCFI18-.LFB31 + .byte 0x83 + .uleb128 0x5 + .byte 0x4 + .long .LCFI21-.LCFI18 + .byte 0x8d + .uleb128 0x2 + .byte 0x8c + .uleb128 0x3 + .byte 0x86 + .uleb128 0x4 + .byte 0x4 + .long .LCFI22-.LCFI21 + .byte 0xe + .uleb128 0x30 + .align 8 +.LEFDE13: +.LSFDE15: + .long .LEFDE15-.LASFDE15 +.LASFDE15: + .long .LASFDE15-.Lframe1 + .quad .LFB32 + .quad .LFE32-.LFB32 + .byte 0x4 + .long .LCFI23-.LFB32 + .byte 0xe + .uleb128 0x10 + .byte 0x83 + .uleb128 0x2 + .align 8 +.LEFDE15: +.LSFDE17: + .long .LEFDE17-.LASFDE17 +.LASFDE17: + .long .LASFDE17-.Lframe1 + .quad .LFB33 + .quad .LFE33-.LFB33 + .byte 0x4 + .long .LCFI24-.LFB33 + .byte 0xe + .uleb128 0x10 + .byte 0x83 + .uleb128 0x2 + .align 8 +.LEFDE17: +.LSFDE19: + .long .LEFDE19-.LASFDE19 +.LASFDE19: + .long .LASFDE19-.Lframe1 + .quad .LFB34 + .quad .LFE34-.LFB34 + .byte 0x4 + .long .LCFI25-.LFB34 + .byte 0x86 + .uleb128 0x2 + .byte 0x4 + .long .LCFI27-.LCFI25 + .byte 0xe + .uleb128 0x20 + .byte 0x83 + .uleb128 0x3 + .align 8 +.LEFDE19: +.LSFDE21: + .long .LEFDE21-.LASFDE21 +.LASFDE21: + .long .LASFDE21-.Lframe1 + .quad .LFB35 + .quad .LFE35-.LFB35 + .byte 0x4 + .long .LCFI28-.LFB35 + .byte 0xe + .uleb128 0x10 + .byte 0x83 + .uleb128 0x2 + .align 8 +.LEFDE21: +.LSFDE23: + .long .LEFDE23-.LASFDE23 +.LASFDE23: + .long .LASFDE23-.Lframe1 + .quad .LFB36 + .quad .LFE36-.LFB36 + .byte 0x4 + .long .LCFI30-.LFB36 + .byte 0x86 + .uleb128 0x6 + .byte 0x83 + .uleb128 0x7 + .byte 0x4 + .long .LCFI32-.LCFI30 + .byte 0x8f + .uleb128 0x2 + .byte 0x8e + .uleb128 0x3 + .byte 0x4 + .long .LCFI35-.LCFI32 + .byte 0xe + .uleb128 0x50 + .byte 0x8d + .uleb128 0x4 + .byte 0x8c + .uleb128 0x5 + .align 8 +.LEFDE23: +.LSFDE25: + .long .LEFDE25-.LASFDE25 +.LASFDE25: + .long .LASFDE25-.Lframe1 + .quad .LFB37 + .quad .LFE37-.LFB37 + .byte 0x4 + .long .LCFI36-.LFB37 + .byte 0xe + .uleb128 0x10 + .byte 0x83 + .uleb128 0x2 + .align 8 +.LEFDE25: +.LSFDE27: + .long .LEFDE27-.LASFDE27 +.LASFDE27: + .long .LASFDE27-.Lframe1 + .quad .LFB38 + .quad .LFE38-.LFB38 + .align 8 +.LEFDE27: +.LSFDE29: + .long .LEFDE29-.LASFDE29 +.LASFDE29: + .long .LASFDE29-.Lframe1 + .quad .LFB39 + .quad .LFE39-.LFB39 + .align 8 +.LEFDE29: +.LSFDE31: + .long .LEFDE31-.LASFDE31 +.LASFDE31: + .long .LASFDE31-.Lframe1 + .quad .LFB40 + .quad .LFE40-.LFB40 + .byte 0x4 + .long .LCFI37-.LFB40 + .byte 0xe + .uleb128 0x10 + .align 8 +.LEFDE31: +.LSFDE33: + .long .LEFDE33-.LASFDE33 +.LASFDE33: + .long .LASFDE33-.Lframe1 + .quad .LFB41 + .quad .LFE41-.LFB41 + .align 8 +.LEFDE33: +.LSFDE35: + .long .LEFDE35-.LASFDE35 +.LASFDE35: + .long .LASFDE35-.Lframe1 + .quad .LFB42 + .quad .LFE42-.LFB42 + .byte 0x4 + .long .LCFI38-.LFB42 + .byte 0xe + .uleb128 0x10 + .align 8 +.LEFDE35: +.LSFDE37: + .long .LEFDE37-.LASFDE37 +.LASFDE37: + .long .LASFDE37-.Lframe1 + .quad .LFB43 + .quad .LFE43-.LFB43 + .byte 0x4 + .long .LCFI39-.LFB43 + .byte 0xe + .uleb128 0x10 + .byte 0x83 + .uleb128 0x2 + .align 8 +.LEFDE37: +.LSFDE39: + .long .LEFDE39-.LASFDE39 +.LASFDE39: + .long .LASFDE39-.Lframe1 + .quad .LFB45 + .quad .LFE45-.LFB45 + .byte 0x4 + .long .LCFI41-.LFB45 + .byte 0x8d + .uleb128 0x4 + .byte 0x83 + .uleb128 0x7 + .byte 0x4 + .long .LCFI43-.LCFI41 + .byte 0x8f + .uleb128 0x2 + .byte 0x8e + .uleb128 0x3 + .byte 0x4 + .long .LCFI46-.LCFI43 + .byte 0xe + .uleb128 0x40 + .byte 0x8c + .uleb128 0x5 + .byte 0x86 + .uleb128 0x6 + .align 8 +.LEFDE39: +.LSFDE41: + .long .LEFDE41-.LASFDE41 +.LASFDE41: + .long .LASFDE41-.Lframe1 + .quad .LFB44 + .quad .LFE44-.LFB44 + .byte 0x4 + .long .LCFI48-.LFB44 + .byte 0x8c + .uleb128 0x5 + .byte 0x83 + .uleb128 0x7 + .byte 0x4 + .long .LCFI52-.LCFI48 + .byte 0x86 + .uleb128 0x6 + .byte 0x8f + .uleb128 0x2 + .byte 0x8e + .uleb128 0x3 + .byte 0x8d + .uleb128 0x4 + .byte 0x4 + .long .LCFI53-.LCFI52 + .byte 0xe + .uleb128 0x60 + .align 8 +.LEFDE41: +.LSFDE43: + .long .LEFDE43-.LASFDE43 +.LASFDE43: + .long .LASFDE43-.Lframe1 + .quad .LFB46 + .quad .LFE46-.LFB46 + .byte 0x4 + .long .LCFI55-.LFB46 + .byte 0x86 + .uleb128 0x5 + .byte 0x83 + .uleb128 0x6 + .byte 0x4 + .long .LCFI59-.LCFI55 + .byte 0xe + .uleb128 0x30 + .byte 0x8c + .uleb128 0x4 + .byte 0x8e + .uleb128 0x2 + .byte 0x8d + .uleb128 0x3 + .align 8 +.LEFDE43: +.LSFDE45: + .long .LEFDE45-.LASFDE45 +.LASFDE45: + .long .LASFDE45-.Lframe1 + .quad .LFB47 + .quad .LFE47-.LFB47 + .byte 0x4 + .long .LCFI61-.LFB47 + .byte 0x86 + .uleb128 0x3 + .byte 0x83 + .uleb128 0x4 + .byte 0x4 + .long .LCFI63-.LCFI61 + .byte 0xe + .uleb128 0x20 + .byte 0x8c + .uleb128 0x2 + .align 8 +.LEFDE45: +.LSFDE47: + .long .LEFDE47-.LASFDE47 +.LASFDE47: + .long .LASFDE47-.Lframe1 + .quad .LFB48 + .quad .LFE48-.LFB48 + .byte 0x4 + .long .LCFI65-.LFB48 + .byte 0x8c + .uleb128 0x2 + .byte 0x86 + .uleb128 0x3 + .byte 0x4 + .long .LCFI67-.LCFI65 + .byte 0xe + .uleb128 0x20 + .byte 0x83 + .uleb128 0x4 + .align 8 +.LEFDE47: +.LSFDE49: + .long .LEFDE49-.LASFDE49 +.LASFDE49: + .long .LASFDE49-.Lframe1 + .quad .LFB50 + .quad .LFE50-.LFB50 + .byte 0x4 + .long .LCFI68-.LFB50 + .byte 0xe + .uleb128 0x10 + .byte 0x4 + .long .LCFI69-.LCFI68 + .byte 0xe + .uleb128 0x18 + .byte 0x4 + .long .LCFI70-.LCFI69 + .byte 0xe + .uleb128 0x20 + .byte 0x4 + .long .LCFI71-.LCFI70 + .byte 0xe + .uleb128 0x28 + .byte 0x4 + .long .LCFI72-.LCFI71 + .byte 0xe + .uleb128 0x30 + .byte 0x4 + .long .LCFI73-.LCFI72 + .byte 0xe + .uleb128 0x38 + .byte 0x4 + .long .LCFI74-.LCFI73 + .byte 0xe + .uleb128 0xe0 + .byte 0x83 + .uleb128 0x7 + .byte 0x86 + .uleb128 0x6 + .byte 0x8c + .uleb128 0x5 + .byte 0x8d + .uleb128 0x4 + .byte 0x8e + .uleb128 0x3 + .byte 0x8f + .uleb128 0x2 + .align 8 +.LEFDE49: + .file 3 "./libyasm/coretype.h" + .file 4 "./libyasm/bitvect.h" + .file 5 "/usr/lib/gcc/x86_64-linux-gnu/4.0.2/include/stddef.h" + .file 6 "/usr/include/stdio.h" + .file 7 "/usr/include/libio.h" + .file 8 "/usr/include/bits/types.h" + .file 9 "./libyasm/errwarn.h" + .text +.Letext0: + .section .debug_loc,"",@progbits +.Ldebug_loc0: +.LLST0: + .quad .LVL0-.Ltext0 + .quad .LVL1-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad .LVL1-.Ltext0 + .quad .LVL2-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL2-.Ltext0 + .quad .LFE25-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad 0x0 + .quad 0x0 +.LLST1: + .quad .LVL3-.Ltext0 + .quad .LVL4-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad .LVL4-.Ltext0 + .quad .LVL5-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL5-.Ltext0 + .quad .LFE26-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad 0x0 + .quad 0x0 +.LLST2: + .quad .LVL6-.Ltext0 + .quad .LVL8-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL8-.Ltext0 + .quad .LVL16-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL16-.Ltext0 + .quad .LVL17-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL17-.Ltext0 + .quad .LVL21-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL21-.Ltext0 + .quad .LVL22-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL22-.Ltext0 + .quad .LFE27-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad 0x0 + .quad 0x0 +.LLST3: + .quad .LVL6-.Ltext0 + .quad .LVL7-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL7-.Ltext0 + .quad .LVL13-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL17-.Ltext0 + .quad .LVL18-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL22-.Ltext0 + .quad .LFE27-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST4: + .quad .LVL6-.Ltext0 + .quad .LVL9-.Ltext0 + .value 0x1 + .byte 0x54 + .quad .LVL9-.Ltext0 + .quad .LVL15-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL17-.Ltext0 + .quad .LVL20-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL22-.Ltext0 + .quad .LFE27-.Ltext0 + .value 0x1 + .byte 0x5c + .quad 0x0 + .quad 0x0 +.LLST5: + .quad .LVL10-.Ltext0 + .quad .LVL11-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL12-.Ltext0 + .quad .LVL14-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL17-.Ltext0 + .quad .LVL19-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL22-.Ltext0 + .quad .LFE27-.Ltext0 + .value 0x1 + .byte 0x56 + .quad 0x0 + .quad 0x0 +.LLST6: + .quad .LVL23-.Ltext0 + .quad .LVL25-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL25-.Ltext0 + .quad .LVL31-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL31-.Ltext0 + .quad .LVL32-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL32-.Ltext0 + .quad .LVL36-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL36-.Ltext0 + .quad .LVL37-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL37-.Ltext0 + .quad .LFE28-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad 0x0 + .quad 0x0 +.LLST7: + .quad .LVL23-.Ltext0 + .quad .LVL24-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL24-.Ltext0 + .quad .LVL28-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL32-.Ltext0 + .quad .LVL33-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL37-.Ltext0 + .quad .LFE28-.Ltext0 + .value 0x1 + .byte 0x56 + .quad 0x0 + .quad 0x0 +.LLST8: + .quad .LVL23-.Ltext0 + .quad .LVL26-.Ltext0 + .value 0x1 + .byte 0x54 + .quad .LVL26-.Ltext0 + .quad .LVL30-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL32-.Ltext0 + .quad .LVL35-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL37-.Ltext0 + .quad .LFE28-.Ltext0 + .value 0x1 + .byte 0x5c + .quad 0x0 + .quad 0x0 +.LLST9: + .quad .LVL27-.Ltext0 + .quad .LVL29-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL32-.Ltext0 + .quad .LVL34-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL37-.Ltext0 + .quad .LFE28-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST10: + .quad .LVL38-.Ltext0 + .quad .LVL40-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL40-.Ltext0 + .quad .LVL46-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL46-.Ltext0 + .quad .LVL47-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL47-.Ltext0 + .quad .LVL51-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL51-.Ltext0 + .quad .LVL52-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL52-.Ltext0 + .quad .LFE29-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad 0x0 + .quad 0x0 +.LLST11: + .quad .LVL38-.Ltext0 + .quad .LVL39-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL39-.Ltext0 + .quad .LVL43-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL47-.Ltext0 + .quad .LVL48-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL52-.Ltext0 + .quad .LFE29-.Ltext0 + .value 0x1 + .byte 0x56 + .quad 0x0 + .quad 0x0 +.LLST12: + .quad .LVL38-.Ltext0 + .quad .LVL41-.Ltext0 + .value 0x1 + .byte 0x54 + .quad .LVL41-.Ltext0 + .quad .LVL45-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL47-.Ltext0 + .quad .LVL50-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL52-.Ltext0 + .quad .LFE29-.Ltext0 + .value 0x1 + .byte 0x5c + .quad 0x0 + .quad 0x0 +.LLST13: + .quad .LVL42-.Ltext0 + .quad .LVL44-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL47-.Ltext0 + .quad .LVL49-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL52-.Ltext0 + .quad .LFE29-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST14: + .quad .LVL53-.Ltext0 + .quad .LVL55-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL55-.Ltext0 + .quad .LVL61-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL61-.Ltext0 + .quad .LVL62-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL62-.Ltext0 + .quad .LVL66-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL66-.Ltext0 + .quad .LVL67-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL67-.Ltext0 + .quad .LFE30-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad 0x0 + .quad 0x0 +.LLST15: + .quad .LVL53-.Ltext0 + .quad .LVL54-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL54-.Ltext0 + .quad .LVL58-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL62-.Ltext0 + .quad .LVL63-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL67-.Ltext0 + .quad .LFE30-.Ltext0 + .value 0x1 + .byte 0x56 + .quad 0x0 + .quad 0x0 +.LLST16: + .quad .LVL53-.Ltext0 + .quad .LVL56-.Ltext0 + .value 0x1 + .byte 0x54 + .quad .LVL56-.Ltext0 + .quad .LVL60-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL62-.Ltext0 + .quad .LVL65-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL67-.Ltext0 + .quad .LFE30-.Ltext0 + .value 0x1 + .byte 0x5c + .quad 0x0 + .quad 0x0 +.LLST17: + .quad .LVL57-.Ltext0 + .quad .LVL59-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL62-.Ltext0 + .quad .LVL64-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL67-.Ltext0 + .quad .LFE30-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST18: + .quad .LVL68-.Ltext0 + .quad .LVL69-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -40 + .quad .LVL69-.Ltext0 + .quad .LVL84-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL84-.Ltext0 + .quad .LVL85-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -40 + .quad .LVL85-.Ltext0 + .quad .LFE31-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad 0x0 + .quad 0x0 +.LLST19: + .quad .LVL68-.Ltext0 + .quad .LVL70-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL70-.Ltext0 + .quad .LVL81-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL85-.Ltext0 + .quad .LVL87-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL88-.Ltext0 + .quad .LFE31-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST20: + .quad .LVL68-.Ltext0 + .quad .LVL71-.Ltext0 + .value 0x1 + .byte 0x54 + .quad .LVL71-.Ltext0 + .quad .LVL82-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL85-.Ltext0 + .quad .LVL86-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL88-.Ltext0 + .quad .LFE31-.Ltext0 + .value 0x1 + .byte 0x56 + .quad 0x0 + .quad 0x0 +.LLST21: + .quad .LVL72-.Ltext0 + .quad .LVL83-.Ltext0 + .value 0x1 + .byte 0x5d + .quad .LVL85-.Ltext0 + .quad .LFE31-.Ltext0 + .value 0x1 + .byte 0x5d + .quad 0x0 + .quad 0x0 +.LLST22: + .quad .LVL73-.Ltext0 + .quad .LVL74-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL75-.Ltext0 + .quad .LVL76-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL77-.Ltext0 + .quad .LVL78-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL79-.Ltext0 + .quad .LVL80-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL88-.Ltext0 + .quad .LFE31-.Ltext0 + .value 0x1 + .byte 0x50 + .quad 0x0 + .quad 0x0 +.LLST23: + .quad .LVL89-.Ltext0 + .quad .LVL90-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad .LVL90-.Ltext0 + .quad .LVL92-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL92-.Ltext0 + .quad .LFE32-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad 0x0 + .quad 0x0 +.LLST24: + .quad .LVL89-.Ltext0 + .quad .LVL91-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL91-.Ltext0 + .quad .LVL92-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST25: + .quad .LVL93-.Ltext0 + .quad .LVL94-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad .LVL94-.Ltext0 + .quad .LVL96-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL96-.Ltext0 + .quad .LVL97-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad .LVL97-.Ltext0 + .quad .LVL99-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL99-.Ltext0 + .quad .LFE33-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad 0x0 + .quad 0x0 +.LLST26: + .quad .LVL93-.Ltext0 + .quad .LVL95-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL95-.Ltext0 + .quad .LVL96-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL96-.Ltext0 + .quad .LVL97-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL97-.Ltext0 + .quad .LVL98-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST27: + .quad .LVL100-.Ltext0 + .quad .LVL102-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL102-.Ltext0 + .quad .LVL106-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL106-.Ltext0 + .quad .LVL107-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL107-.Ltext0 + .quad .LVL110-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL110-.Ltext0 + .quad .LVL111-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL111-.Ltext0 + .quad .LVL114-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL114-.Ltext0 + .quad .LFE34-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad 0x0 + .quad 0x0 +.LLST28: + .quad .LVL100-.Ltext0 + .quad .LVL101-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL101-.Ltext0 + .quad .LVL104-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL107-.Ltext0 + .quad .LVL108-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL111-.Ltext0 + .quad .LVL112-.Ltext0 + .value 0x1 + .byte 0x56 + .quad 0x0 + .quad 0x0 +.LLST29: + .quad .LVL103-.Ltext0 + .quad .LVL105-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL107-.Ltext0 + .quad .LVL109-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL111-.Ltext0 + .quad .LVL113-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST30: + .quad .LVL115-.Ltext0 + .quad .LVL116-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad .LVL116-.Ltext0 + .quad .LVL118-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL118-.Ltext0 + .quad .LVL120-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad .LVL120-.Ltext0 + .quad .LVL121-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL121-.Ltext0 + .quad .LFE35-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad 0x0 + .quad 0x0 +.LLST31: + .quad .LVL115-.Ltext0 + .quad .LVL117-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL117-.Ltext0 + .quad .LVL118-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL118-.Ltext0 + .quad .LVL119-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL120-.Ltext0 + .quad .LVL121-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL121-.Ltext0 + .quad .LVL122-.Ltext0 + .value 0x1 + .byte 0x55 + .quad 0x0 + .quad 0x0 +.LLST32: + .quad .LVL123-.Ltext0 + .quad .LVL124-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -72 + .quad .LVL124-.Ltext0 + .quad .LVL139-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL139-.Ltext0 + .quad .LVL140-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -72 + .quad .LVL140-.Ltext0 + .quad .LFE36-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad 0x0 + .quad 0x0 +.LLST33: + .quad .LVL123-.Ltext0 + .quad .LVL128-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL128-.Ltext0 + .quad .LVL137-.Ltext0 + .value 0x1 + .byte 0x5e + .quad .LVL140-.Ltext0 + .quad .LVL142-.Ltext0 + .value 0x1 + .byte 0x5e + .quad .LVL142-.Ltext0 + .quad .LVL144-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL144-.Ltext0 + .quad .LFE36-.Ltext0 + .value 0x1 + .byte 0x5e + .quad 0x0 + .quad 0x0 +.LLST34: + .quad .LVL123-.Ltext0 + .quad .LVL126-.Ltext0 + .value 0x1 + .byte 0x54 + .quad .LVL126-.Ltext0 + .quad .LVL134-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL140-.Ltext0 + .quad .LVL145-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL145-.Ltext0 + .quad .LVL146-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL146-.Ltext0 + .quad .LVL147-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL147-.Ltext0 + .quad .LVL148-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL148-.Ltext0 + .quad .LVL149-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL149-.Ltext0 + .quad .LVL150-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL150-.Ltext0 + .quad .LVL151-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL151-.Ltext0 + .quad .LVL152-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL152-.Ltext0 + .quad .LVL153-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL153-.Ltext0 + .quad .LVL154-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL154-.Ltext0 + .quad .LVL155-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL155-.Ltext0 + .quad .LVL156-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL156-.Ltext0 + .quad .LVL157-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL157-.Ltext0 + .quad .LVL158-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL158-.Ltext0 + .quad .LVL159-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL159-.Ltext0 + .quad .LVL160-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL160-.Ltext0 + .quad .LVL161-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL161-.Ltext0 + .quad .LVL162-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL162-.Ltext0 + .quad .LVL163-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL163-.Ltext0 + .quad .LVL164-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL164-.Ltext0 + .quad .LVL165-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL165-.Ltext0 + .quad .LVL166-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL166-.Ltext0 + .quad .LVL167-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL167-.Ltext0 + .quad .LVL168-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL168-.Ltext0 + .quad .LVL169-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL169-.Ltext0 + .quad .LVL170-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL170-.Ltext0 + .quad .LVL171-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL171-.Ltext0 + .quad .LVL172-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL172-.Ltext0 + .quad .LVL173-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL173-.Ltext0 + .quad .LVL174-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL174-.Ltext0 + .quad .LVL175-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL175-.Ltext0 + .quad .LVL176-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL176-.Ltext0 + .quad .LVL177-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL177-.Ltext0 + .quad .LVL178-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL178-.Ltext0 + .quad .LVL179-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL179-.Ltext0 + .quad .LVL180-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL180-.Ltext0 + .quad .LVL181-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL181-.Ltext0 + .quad .LVL182-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL182-.Ltext0 + .quad .LVL183-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL183-.Ltext0 + .quad .LVL184-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL184-.Ltext0 + .quad .LVL185-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL185-.Ltext0 + .quad .LVL186-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL186-.Ltext0 + .quad .LVL187-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL187-.Ltext0 + .quad .LVL188-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL188-.Ltext0 + .quad .LVL189-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL189-.Ltext0 + .quad .LVL190-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL190-.Ltext0 + .quad .LVL191-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL191-.Ltext0 + .quad .LVL192-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL192-.Ltext0 + .quad .LVL193-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL193-.Ltext0 + .quad .LVL194-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL194-.Ltext0 + .quad .LVL195-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL195-.Ltext0 + .quad .LVL196-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL196-.Ltext0 + .quad .LFE36-.Ltext0 + .value 0x1 + .byte 0x56 + .quad 0x0 + .quad 0x0 +.LLST35: + .quad .LVL123-.Ltext0 + .quad .LVL126-.Ltext0 + .value 0x1 + .byte 0x51 + .quad .LVL126-.Ltext0 + .quad .LVL133-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL140-.Ltext0 + .quad .LFE36-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST36: + .quad .LVL123-.Ltext0 + .quad .LVL126-.Ltext0 + .value 0x1 + .byte 0x52 + .quad .LVL126-.Ltext0 + .quad .LVL138-.Ltext0 + .value 0x1 + .byte 0x5f + .quad .LVL140-.Ltext0 + .quad .LFE36-.Ltext0 + .value 0x1 + .byte 0x5f + .quad 0x0 + .quad 0x0 +.LLST37: + .quad .LVL127-.Ltext0 + .quad .LVL135-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL140-.Ltext0 + .quad .LVL142-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL143-.Ltext0 + .quad .LFE36-.Ltext0 + .value 0x1 + .byte 0x5c + .quad 0x0 + .quad 0x0 +.LLST38: + .quad .LVL130-.Ltext0 + .quad .LVL136-.Ltext0 + .value 0x1 + .byte 0x5d + .quad .LVL140-.Ltext0 + .quad .LVL142-.Ltext0 + .value 0x1 + .byte 0x5d + .quad .LVL144-.Ltext0 + .quad .LFE36-.Ltext0 + .value 0x1 + .byte 0x5d + .quad 0x0 + .quad 0x0 +.LLST39: + .quad .LVL198-.Ltext0 + .quad .LVL199-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad .LVL199-.Ltext0 + .quad .LVL201-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL201-.Ltext0 + .quad .LVL202-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad .LVL202-.Ltext0 + .quad .LVL203-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL203-.Ltext0 + .quad .LFE37-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad 0x0 + .quad 0x0 +.LLST40: + .quad .LVL198-.Ltext0 + .quad .LVL200-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL200-.Ltext0 + .quad .LVL201-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL201-.Ltext0 + .quad .LVL202-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL202-.Ltext0 + .quad .LVL203-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST41: + .quad .LVL206-.Ltext0 + .quad .LVL207-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad .LVL207-.Ltext0 + .quad .LVL208-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL208-.Ltext0 + .quad .LVL209-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad .LVL209-.Ltext0 + .quad .LVL211-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL211-.Ltext0 + .quad .LFE40-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad 0x0 + .quad 0x0 +.LLST42: + .quad .LVL206-.Ltext0 + .quad .LVL210-.Ltext0 + .value 0x1 + .byte 0x55 + .quad 0x0 + .quad 0x0 +.LLST43: + .quad .LVL212-.Ltext0 + .quad .LVL213-.Ltext0 + .value 0x1 + .byte 0x55 + .quad 0x0 + .quad 0x0 +.LLST44: + .quad .LVL214-.Ltext0 + .quad .LVL215-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad .LVL215-.Ltext0 + .quad .LVL217-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL217-.Ltext0 + .quad .LVL218-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad .LVL218-.Ltext0 + .quad .LVL219-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL219-.Ltext0 + .quad .LVL220-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad .LVL220-.Ltext0 + .quad .LVL222-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL222-.Ltext0 + .quad .LFE42-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad 0x0 + .quad 0x0 +.LLST45: + .quad .LVL214-.Ltext0 + .quad .LVL216-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL218-.Ltext0 + .quad .LVL221-.Ltext0 + .value 0x1 + .byte 0x55 + .quad 0x0 + .quad 0x0 +.LLST46: + .quad .LVL223-.Ltext0 + .quad .LVL224-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad .LVL224-.Ltext0 + .quad .LVL227-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL227-.Ltext0 + .quad .LVL228-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad .LVL228-.Ltext0 + .quad .LVL229-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL229-.Ltext0 + .quad .LVL230-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad .LVL230-.Ltext0 + .quad .LVL232-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL232-.Ltext0 + .quad .LVL234-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad .LVL234-.Ltext0 + .quad .LVL236-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL236-.Ltext0 + .quad .LFE43-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -8 + .quad 0x0 + .quad 0x0 +.LLST47: + .quad .LVL223-.Ltext0 + .quad .LVL225-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL225-.Ltext0 + .quad .LVL227-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL227-.Ltext0 + .quad .LVL228-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL228-.Ltext0 + .quad .LVL229-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL229-.Ltext0 + .quad .LVL230-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL230-.Ltext0 + .quad .LVL232-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL234-.Ltext0 + .quad .LVL236-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST48: + .quad .LVL238-.Ltext0 + .quad .LVL239-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -56 + .quad .LVL239-.Ltext0 + .quad .LVL254-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL254-.Ltext0 + .quad .LVL255-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -56 + .quad .LVL255-.Ltext0 + .quad .LFE45-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad 0x0 + .quad 0x0 +.LLST49: + .quad .LVL238-.Ltext0 + .quad .LVL242-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL242-.Ltext0 + .quad .LVL249-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL249-.Ltext0 + .quad .LVL255-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL255-.Ltext0 + .quad .LVL256-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL258-.Ltext0 + .quad .LVL261-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL261-.Ltext0 + .quad .LVL263-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL263-.Ltext0 + .quad .LVL265-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL265-.Ltext0 + .quad .LFE45-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST50: + .quad .LVL238-.Ltext0 + .quad .LVL240-.Ltext0 + .value 0x1 + .byte 0x54 + .quad .LVL240-.Ltext0 + .quad .LVL252-.Ltext0 + .value 0x1 + .byte 0x5e + .quad .LVL252-.Ltext0 + .quad .LVL255-.Ltext0 + .value 0x1 + .byte 0x54 + .quad .LVL255-.Ltext0 + .quad .LFE45-.Ltext0 + .value 0x1 + .byte 0x5e + .quad 0x0 + .quad 0x0 +.LLST51: + .quad .LVL238-.Ltext0 + .quad .LVL240-.Ltext0 + .value 0x1 + .byte 0x51 + .quad .LVL240-.Ltext0 + .quad .LVL251-.Ltext0 + .value 0x1 + .byte 0x5d + .quad .LVL251-.Ltext0 + .quad .LVL255-.Ltext0 + .value 0x1 + .byte 0x51 + .quad .LVL255-.Ltext0 + .quad .LVL259-.Ltext0 + .value 0x1 + .byte 0x5d + .quad .LVL259-.Ltext0 + .quad .LVL261-.Ltext0 + .value 0x1 + .byte 0x51 + .quad .LVL261-.Ltext0 + .quad .LVL263-.Ltext0 + .value 0x1 + .byte 0x5d + .quad .LVL263-.Ltext0 + .quad .LVL266-.Ltext0 + .value 0x1 + .byte 0x51 + .quad .LVL266-.Ltext0 + .quad .LFE45-.Ltext0 + .value 0x1 + .byte 0x5d + .quad 0x0 + .quad 0x0 +.LLST52: + .quad .LVL238-.Ltext0 + .quad .LVL240-.Ltext0 + .value 0x1 + .byte 0x52 + .quad .LVL240-.Ltext0 + .quad .LVL253-.Ltext0 + .value 0x1 + .byte 0x5f + .quad .LVL253-.Ltext0 + .quad .LVL255-.Ltext0 + .value 0x1 + .byte 0x52 + .quad .LVL255-.Ltext0 + .quad .LFE45-.Ltext0 + .value 0x1 + .byte 0x5f + .quad 0x0 + .quad 0x0 +.LLST53: + .quad .LVL241-.Ltext0 + .quad .LVL250-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL255-.Ltext0 + .quad .LVL258-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL260-.Ltext0 + .quad .LVL263-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL264-.Ltext0 + .quad .LFE45-.Ltext0 + .value 0x1 + .byte 0x56 + .quad 0x0 + .quad 0x0 +.LLST54: + .quad .LVL244-.Ltext0 + .quad .LVL245-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL246-.Ltext0 + .quad .LVL247-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL248-.Ltext0 + .quad .LVL250-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL255-.Ltext0 + .quad .LVL257-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL262-.Ltext0 + .quad .LVL263-.Ltext0 + .value 0x1 + .byte 0x50 + .quad 0x0 + .quad 0x0 +.LLST55: + .quad .LVL267-.Ltext0 + .quad .LVL269-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -88 + .quad .LVL269-.Ltext0 + .quad .LVL283-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL283-.Ltext0 + .quad .LVL284-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -88 + .quad .LVL284-.Ltext0 + .quad .LFE44-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad 0x0 + .quad 0x0 +.LLST56: + .quad .LVL267-.Ltext0 + .quad .LVL271-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL271-.Ltext0 + .quad .LVL274-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL284-.Ltext0 + .quad .LVL286-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL288-.Ltext0 + .quad .LVL291-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL293-.Ltext0 + .quad .LFE44-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST57: + .quad .LVL267-.Ltext0 + .quad .LVL271-.Ltext0 + .value 0x1 + .byte 0x54 + .quad .LVL271-.Ltext0 + .quad .LFE44-.Ltext0 + .value 0x2 + .byte 0x91 + .sleb128 16 + .quad 0x0 + .quad 0x0 +.LLST58: + .quad .LVL267-.Ltext0 + .quad .LVL271-.Ltext0 + .value 0x1 + .byte 0x51 + .quad .LVL271-.Ltext0 + .quad .LVL281-.Ltext0 + .value 0x1 + .byte 0x5e + .quad .LVL284-.Ltext0 + .quad .LFE44-.Ltext0 + .value 0x1 + .byte 0x5e + .quad 0x0 + .quad 0x0 +.LLST59: + .quad .LVL267-.Ltext0 + .quad .LVL271-.Ltext0 + .value 0x1 + .byte 0x52 + .quad .LVL271-.Ltext0 + .quad .LVL276-.Ltext0 + .value 0x2 + .byte 0x91 + .sleb128 8 + .quad .LVL284-.Ltext0 + .quad .LVL287-.Ltext0 + .value 0x2 + .byte 0x91 + .sleb128 8 + .quad .LVL288-.Ltext0 + .quad .LFE44-.Ltext0 + .value 0x2 + .byte 0x91 + .sleb128 8 + .quad 0x0 + .quad 0x0 +.LLST60: + .quad .LVL267-.Ltext0 + .quad .LVL272-.Ltext0 + .value 0x1 + .byte 0x58 + .quad .LVL272-.Ltext0 + .quad .LVL279-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL284-.Ltext0 + .quad .LVL289-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL289-.Ltext0 + .quad .LVL290-.Ltext0 + .value 0x1 + .byte 0x58 + .quad .LVL290-.Ltext0 + .quad .LVL292-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL293-.Ltext0 + .quad .LFE44-.Ltext0 + .value 0x1 + .byte 0x58 + .quad 0x0 + .quad 0x0 +.LLST61: + .quad .LVL267-.Ltext0 + .quad .LVL271-.Ltext0 + .value 0x1 + .byte 0x59 + .quad .LVL271-.Ltext0 + .quad .LFE44-.Ltext0 + .value 0x2 + .byte 0x91 + .sleb128 4 + .quad 0x0 + .quad 0x0 +.LLST62: + .quad .LVL270-.Ltext0 + .quad .LVL280-.Ltext0 + .value 0x1 + .byte 0x5d + .quad .LVL284-.Ltext0 + .quad .LFE44-.Ltext0 + .value 0x1 + .byte 0x5d + .quad 0x0 + .quad 0x0 +.LLST63: + .quad .LVL273-.Ltext0 + .quad .LVL278-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL285-.Ltext0 + .quad .LVL288-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL291-.Ltext0 + .quad .LVL293-.Ltext0 + .value 0x1 + .byte 0x56 + .quad 0x0 + .quad 0x0 +.LLST64: + .quad .LVL275-.Ltext0 + .quad .LVL277-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL287-.Ltext0 + .quad .LVL288-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST65: + .quad .LVL268-.Ltext0 + .quad .LVL282-.Ltext0 + .value 0x1 + .byte 0x5f + .quad .LVL284-.Ltext0 + .quad .LFE44-.Ltext0 + .value 0x1 + .byte 0x5f + .quad 0x0 + .quad 0x0 +.LLST66: + .quad .LVL294-.Ltext0 + .quad .LVL295-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -40 + .quad .LVL295-.Ltext0 + .quad .LVL309-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL309-.Ltext0 + .quad .LVL310-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -40 + .quad .LVL310-.Ltext0 + .quad .LFE46-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad 0x0 + .quad 0x0 +.LLST67: + .quad .LVL294-.Ltext0 + .quad .LVL298-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL298-.Ltext0 + .quad .LVL301-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL303-.Ltext0 + .quad .LVL311-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL311-.Ltext0 + .quad .LVL312-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL315-.Ltext0 + .quad .LVL316-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL316-.Ltext0 + .quad .LFE46-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST68: + .quad .LVL294-.Ltext0 + .quad .LVL297-.Ltext0 + .value 0x1 + .byte 0x54 + .quad .LVL297-.Ltext0 + .quad .LVL301-.Ltext0 + .value 0x1 + .byte 0x5e + .quad .LVL301-.Ltext0 + .quad .LVL303-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL303-.Ltext0 + .quad .LVL304-.Ltext0 + .value 0x1 + .byte 0x5e + .quad .LVL308-.Ltext0 + .quad .LVL310-.Ltext0 + .value 0x1 + .byte 0x54 + .quad .LVL310-.Ltext0 + .quad .LVL312-.Ltext0 + .value 0x1 + .byte 0x5e + .quad .LVL312-.Ltext0 + .quad .LVL315-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL315-.Ltext0 + .quad .LVL315-.Ltext0 + .value 0x1 + .byte 0x5e + .quad .LVL316-.Ltext0 + .quad .LFE46-.Ltext0 + .value 0x1 + .byte 0x5e + .quad 0x0 + .quad 0x0 +.LLST69: + .quad .LVL294-.Ltext0 + .quad .LVL297-.Ltext0 + .value 0x1 + .byte 0x51 + .quad .LVL297-.Ltext0 + .quad .LVL305-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL305-.Ltext0 + .quad .LVL310-.Ltext0 + .value 0x1 + .byte 0x51 + .quad .LVL310-.Ltext0 + .quad .LVL314-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL315-.Ltext0 + .quad .LFE46-.Ltext0 + .value 0x1 + .byte 0x56 + .quad 0x0 + .quad 0x0 +.LLST70: + .quad .LVL296-.Ltext0 + .quad .LVL307-.Ltext0 + .value 0x1 + .byte 0x5d + .quad .LVL310-.Ltext0 + .quad .LFE46-.Ltext0 + .value 0x1 + .byte 0x5d + .quad 0x0 + .quad 0x0 +.LLST71: + .quad .LVL302-.Ltext0 + .quad .LVL305-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL314-.Ltext0 + .quad .LVL315-.Ltext0 + .value 0x1 + .byte 0x56 + .quad 0x0 + .quad 0x0 +.LLST72: + .quad .LVL300-.Ltext0 + .quad .LVL306-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL313-.Ltext0 + .quad .LVL315-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL317-.Ltext0 + .quad .LFE46-.Ltext0 + .value 0x1 + .byte 0x5c + .quad 0x0 + .quad 0x0 +.LLST73: + .quad .LVL318-.Ltext0 + .quad .LVL319-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL319-.Ltext0 + .quad .LVL328-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL328-.Ltext0 + .quad .LVL329-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL329-.Ltext0 + .quad .LFE47-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad 0x0 + .quad 0x0 +.LLST74: + .quad .LVL318-.Ltext0 + .quad .LVL322-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL322-.Ltext0 + .quad .LVL325-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL325-.Ltext0 + .quad .LVL330-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL330-.Ltext0 + .quad .LFE47-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST75: + .quad .LVL318-.Ltext0 + .quad .LVL321-.Ltext0 + .value 0x1 + .byte 0x54 + .quad .LVL321-.Ltext0 + .quad .LVL327-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL327-.Ltext0 + .quad .LVL329-.Ltext0 + .value 0x1 + .byte 0x54 + .quad .LVL329-.Ltext0 + .quad .LFE47-.Ltext0 + .value 0x1 + .byte 0x5c + .quad 0x0 + .quad 0x0 +.LLST76: + .quad .LVL320-.Ltext0 + .quad .LVL326-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL329-.Ltext0 + .quad .LFE47-.Ltext0 + .value 0x1 + .byte 0x56 + .quad 0x0 + .quad 0x0 +.LLST77: + .quad .LVL331-.Ltext0 + .quad .LVL332-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL332-.Ltext0 + .quad .LVL335-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL335-.Ltext0 + .quad .LVL336-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL336-.Ltext0 + .quad .LVL340-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL340-.Ltext0 + .quad .LVL341-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL341-.Ltext0 + .quad .LVL347-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL347-.Ltext0 + .quad .LFE48-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad 0x0 + .quad 0x0 +.LLST78: + .quad .LVL331-.Ltext0 + .quad .LVL337-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL337-.Ltext0 + .quad .LVL338-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL341-.Ltext0 + .quad .LVL342-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL342-.Ltext0 + .quad .LVL345-.Ltext0 + .value 0x1 + .byte 0x56 + .quad 0x0 + .quad 0x0 +.LLST79: + .quad .LVL331-.Ltext0 + .quad .LVL333-.Ltext0 + .value 0x1 + .byte 0x54 + .quad .LVL333-.Ltext0 + .quad .LVL334-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL334-.Ltext0 + .quad .LVL336-.Ltext0 + .value 0x1 + .byte 0x54 + .quad .LVL336-.Ltext0 + .quad .LVL339-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL339-.Ltext0 + .quad .LVL341-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL341-.Ltext0 + .quad .LVL346-.Ltext0 + .value 0x1 + .byte 0x5c + .quad 0x0 + .quad 0x0 +.LLST80: + .quad .LVL343-.Ltext0 + .quad .LVL344-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL344-.Ltext0 + .quad .LVL348-.Ltext0 + .value 0x1 + .byte 0x55 + .quad 0x0 + .quad 0x0 +.LLST81: + .quad .LVL349-.Ltext0 + .quad .LVL350-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -216 + .quad .LVL350-.Ltext0 + .quad .LVL351-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -208 + .quad .LVL351-.Ltext0 + .quad .LVL352-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -200 + .quad .LVL352-.Ltext0 + .quad .LVL353-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -192 + .quad .LVL353-.Ltext0 + .quad .LVL354-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -184 + .quad .LVL354-.Ltext0 + .quad .LVL355-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -176 + .quad .LVL355-.Ltext0 + .quad .LVL356-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -168 + .quad .LVL356-.Ltext0 + .quad .LVL357-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL357-.Ltext0 + .quad .LVL358-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -168 + .quad .LVL358-.Ltext0 + .quad .LVL359-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -176 + .quad .LVL359-.Ltext0 + .quad .LVL360-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -184 + .quad .LVL360-.Ltext0 + .quad .LVL361-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -192 + .quad .LVL361-.Ltext0 + .quad .LVL362-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -200 + .quad .LVL362-.Ltext0 + .quad .LVL363-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -208 + .quad .LVL363-.Ltext0 + .quad .LVL364-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -216 + .quad .LVL364-.Ltext0 + .quad .LVL380-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL380-.Ltext0 + .quad .LVL381-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -168 + .quad .LVL381-.Ltext0 + .quad .LVL382-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -176 + .quad .LVL382-.Ltext0 + .quad .LVL383-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -184 + .quad .LVL383-.Ltext0 + .quad .LVL384-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -192 + .quad .LVL384-.Ltext0 + .quad .LVL385-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -200 + .quad .LVL385-.Ltext0 + .quad .LVL386-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -208 + .quad .LVL386-.Ltext0 + .quad .LVL387-.Ltext0 + .value 0x3 + .byte 0x77 + .sleb128 -216 + .quad .LVL387-.Ltext0 + .quad .LFE50-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad 0x0 + .quad 0x0 +.LLST82: + .quad .LVL365-.Ltext0 + .quad .LVL385-.Ltext0 + .value 0x1 + .byte 0x5e + .quad .LVL387-.Ltext0 + .quad .LFE50-.Ltext0 + .value 0x1 + .byte 0x5e + .quad 0x0 + .quad 0x0 +.LLST83: + .quad .LVL369-.Ltext0 + .quad .LVL370-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL378-.Ltext0 + .quad .LVL381-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL391-.Ltext0 + .quad .LVL393-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL394-.Ltext0 + .quad .LFE50-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST84: + .quad .LVL370-.Ltext0 + .quad .LVL373-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL377-.Ltext0 + .quad .LVL378-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST85: + .quad .LVL367-.Ltext0 + .quad .LVL379-.Ltext0 + .value 0x1 + .byte 0x5c + .quad .LVL387-.Ltext0 + .quad .LFE50-.Ltext0 + .value 0x1 + .byte 0x5c + .quad 0x0 + .quad 0x0 +.LLST86: + .quad .LVL367-.Ltext0 + .quad .LVL369-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL371-.Ltext0 + .quad .LVL372-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL373-.Ltext0 + .quad .LVL374-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL374-.Ltext0 + .quad .LVL375-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL376-.Ltext0 + .quad .LVL376-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL387-.Ltext0 + .quad .LVL388-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL388-.Ltext0 + .quad .LVL390-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL390-.Ltext0 + .quad .LVL391-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL393-.Ltext0 + .quad .LVL394-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL394-.Ltext0 + .quad .LVL395-.Ltext0 + .value 0x1 + .byte 0x50 + .quad 0x0 + .quad 0x0 +.LLST87: + .quad .LVL389-.Ltext0 + .quad .LVL392-.Ltext0 + .value 0x1 + .byte 0x54 + .quad .LVL393-.Ltext0 + .quad .LVL395-.Ltext0 + .value 0x1 + .byte 0x54 + .quad 0x0 + .quad 0x0 + .section .debug_info + .long 0xf4e + .value 0x2 + .long .Ldebug_abbrev0 + .byte 0x8 + .uleb128 0x1 + .long .Ldebug_line0 + .quad .Letext0 + .quad .Ltext0 + .long .LASF148 + .byte 0x1 + .long .LASF149 + .long .LASF150 + .uleb128 0x2 + .long .LASF7 + .byte 0x5 + .byte 0xd6 + .long 0x38 + .uleb128 0x3 + .long .LASF0 + .byte 0x8 + .byte 0x7 + .uleb128 0x4 + .string "int" + .byte 0x4 + .byte 0x5 + .uleb128 0x3 + .long .LASF1 + .byte 0x8 + .byte 0x5 + .uleb128 0x3 + .long .LASF2 + .byte 0x1 + .byte 0x8 + .uleb128 0x3 + .long .LASF3 + .byte 0x2 + .byte 0x7 + .uleb128 0x3 + .long .LASF4 + .byte 0x4 + .byte 0x7 + .uleb128 0x3 + .long .LASF5 + .byte 0x1 + .byte 0x6 + .uleb128 0x3 + .long .LASF6 + .byte 0x2 + .byte 0x5 + .uleb128 0x2 + .long .LASF8 + .byte 0x8 + .byte 0x8f + .long 0x46 + .uleb128 0x2 + .long .LASF9 + .byte 0x8 + .byte 0x90 + .long 0x46 + .uleb128 0x3 + .long .LASF0 + .byte 0x8 + .byte 0x7 + .uleb128 0x5 + .byte 0x8 + .uleb128 0x6 + .byte 0x8 + .long 0x95 + .uleb128 0x3 + .long .LASF10 + .byte 0x1 + .byte 0x6 + .uleb128 0x2 + .long .LASF11 + .byte 0x6 + .byte 0x2e + .long 0xa7 + .uleb128 0x7 + .long 0x243 + .long .LASF39 + .byte 0xd8 + .byte 0x6 + .byte 0x2e + .uleb128 0x8 + .long .LASF12 + .byte 0x7 + .value 0x10c + .long 0x3f + .byte 0x2 + .byte 0x23 + .uleb128 0x0 + .uleb128 0x8 + .long .LASF13 + .byte 0x7 + .value 0x111 + .long 0x8f + .byte 0x2 + .byte 0x23 + .uleb128 0x8 + .uleb128 0x8 + .long .LASF14 + .byte 0x7 + .value 0x112 + .long 0x8f + .byte 0x2 + .byte 0x23 + .uleb128 0x10 + .uleb128 0x8 + .long .LASF15 + .byte 0x7 + .value 0x113 + .long 0x8f + .byte 0x2 + .byte 0x23 + .uleb128 0x18 + .uleb128 0x8 + .long .LASF16 + .byte 0x7 + .value 0x114 + .long 0x8f + .byte 0x2 + .byte 0x23 + .uleb128 0x20 + .uleb128 0x8 + .long .LASF17 + .byte 0x7 + .value 0x115 + .long 0x8f + .byte 0x2 + .byte 0x23 + .uleb128 0x28 + .uleb128 0x8 + .long .LASF18 + .byte 0x7 + .value 0x116 + .long 0x8f + .byte 0x2 + .byte 0x23 + .uleb128 0x30 + .uleb128 0x8 + .long .LASF19 + .byte 0x7 + .value 0x117 + .long 0x8f + .byte 0x2 + .byte 0x23 + .uleb128 0x38 + .uleb128 0x8 + .long .LASF20 + .byte 0x7 + .value 0x118 + .long 0x8f + .byte 0x2 + .byte 0x23 + .uleb128 0x40 + .uleb128 0x8 + .long .LASF21 + .byte 0x7 + .value 0x11a + .long 0x8f + .byte 0x2 + .byte 0x23 + .uleb128 0x48 + .uleb128 0x8 + .long .LASF22 + .byte 0x7 + .value 0x11b + .long 0x8f + .byte 0x2 + .byte 0x23 + .uleb128 0x50 + .uleb128 0x8 + .long .LASF23 + .byte 0x7 + .value 0x11c + .long 0x8f + .byte 0x2 + .byte 0x23 + .uleb128 0x58 + .uleb128 0x8 + .long .LASF24 + .byte 0x7 + .value 0x11e + .long 0x2af + .byte 0x2 + .byte 0x23 + .uleb128 0x60 + .uleb128 0x8 + .long .LASF25 + .byte 0x7 + .value 0x120 + .long 0x2b5 + .byte 0x2 + .byte 0x23 + .uleb128 0x68 + .uleb128 0x8 + .long .LASF26 + .byte 0x7 + .value 0x122 + .long 0x3f + .byte 0x2 + .byte 0x23 + .uleb128 0x70 + .uleb128 0x8 + .long .LASF27 + .byte 0x7 + .value 0x126 + .long 0x3f + .byte 0x2 + .byte 0x23 + .uleb128 0x74 + .uleb128 0x8 + .long .LASF28 + .byte 0x7 + .value 0x128 + .long 0x70 + .byte 0x2 + .byte 0x23 + .uleb128 0x78 + .uleb128 0x8 + .long .LASF29 + .byte 0x7 + .value 0x12c + .long 0x54 + .byte 0x3 + .byte 0x23 + .uleb128 0x80 + .uleb128 0x8 + .long .LASF30 + .byte 0x7 + .value 0x12d + .long 0x62 + .byte 0x3 + .byte 0x23 + .uleb128 0x82 + .uleb128 0x8 + .long .LASF31 + .byte 0x7 + .value 0x12e + .long 0x2bb + .byte 0x3 + .byte 0x23 + .uleb128 0x83 + .uleb128 0x8 + .long .LASF32 + .byte 0x7 + .value 0x132 + .long 0x2cb + .byte 0x3 + .byte 0x23 + .uleb128 0x88 + .uleb128 0x8 + .long .LASF33 + .byte 0x7 + .value 0x13b + .long 0x7b + .byte 0x3 + .byte 0x23 + .uleb128 0x90 + .uleb128 0x8 + .long .LASF34 + .byte 0x7 + .value 0x141 + .long 0x8d + .byte 0x3 + .byte 0x23 + .uleb128 0x98 + .uleb128 0x8 + .long .LASF35 + .byte 0x7 + .value 0x142 + .long 0x8d + .byte 0x3 + .byte 0x23 + .uleb128 0xa0 + .uleb128 0x8 + .long .LASF36 + .byte 0x7 + .value 0x144 + .long 0x3f + .byte 0x3 + .byte 0x23 + .uleb128 0xa8 + .uleb128 0x8 + .long .LASF37 + .byte 0x7 + .value 0x146 + .long 0x2d1 + .byte 0x3 + .byte 0x23 + .uleb128 0xac + .byte 0x0 + .uleb128 0x6 + .byte 0x8 + .long 0x249 + .uleb128 0x9 + .long 0x4d + .uleb128 0x6 + .byte 0x8 + .long 0x4d + .uleb128 0x6 + .byte 0x8 + .long 0x25a + .uleb128 0x9 + .long 0x95 + .uleb128 0x6 + .byte 0x8 + .long 0x265 + .uleb128 0xa + .long 0x271 + .byte 0x1 + .uleb128 0xb + .long 0x8d + .byte 0x0 + .uleb128 0xc + .long .LASF38 + .byte 0x7 + .byte 0xb0 + .uleb128 0x7 + .long 0x2af + .long .LASF40 + .byte 0x18 + .byte 0x7 + .byte 0xb6 + .uleb128 0xd + .long .LASF41 + .byte 0x7 + .byte 0xb7 + .long 0x2af + .byte 0x2 + .byte 0x23 + .uleb128 0x0 + .uleb128 0xd + .long .LASF42 + .byte 0x7 + .byte 0xb8 + .long 0x2b5 + .byte 0x2 + .byte 0x23 + .uleb128 0x8 + .uleb128 0xd + .long .LASF43 + .byte 0x7 + .byte 0xbc + .long 0x3f + .byte 0x2 + .byte 0x23 + .uleb128 0x10 + .byte 0x0 + .uleb128 0x6 + .byte 0x8 + .long 0x278 + .uleb128 0x6 + .byte 0x8 + .long 0xa7 + .uleb128 0xe + .long 0x2cb + .long 0x95 + .uleb128 0xf + .long 0x86 + .byte 0x0 + .byte 0x0 + .uleb128 0x6 + .byte 0x8 + .long 0x271 + .uleb128 0xe + .long 0x2e1 + .long 0x95 + .uleb128 0xf + .long 0x86 + .byte 0x2b + .byte 0x0 + .uleb128 0x6 + .byte 0x8 + .long 0x9c + .uleb128 0x2 + .long .LASF44 + .byte 0x3 + .byte 0x5d + .long 0x2f2 + .uleb128 0x7 + .long 0x329 + .long .LASF44 + .byte 0x10 + .byte 0x3 + .byte 0x5d + .uleb128 0x10 + .string "val" + .byte 0x1 + .byte 0x31 + .long 0x43e + .byte 0x2 + .byte 0x23 + .uleb128 0x0 + .uleb128 0xd + .long .LASF45 + .byte 0x1 + .byte 0x32 + .long 0x45f + .byte 0x2 + .byte 0x23 + .uleb128 0x8 + .uleb128 0xd + .long .LASF46 + .byte 0x1 + .byte 0x33 + .long 0x4d + .byte 0x2 + .byte 0x23 + .uleb128 0xc + .byte 0x0 + .uleb128 0x11 + .long 0x3e0 + .byte 0x4 + .byte 0x3 + .byte 0x78 + .uleb128 0x12 + .long .LASF47 + .sleb128 0 + .uleb128 0x12 + .long .LASF48 + .sleb128 1 + .uleb128 0x12 + .long .LASF49 + .sleb128 2 + .uleb128 0x12 + .long .LASF50 + .sleb128 3 + .uleb128 0x12 + .long .LASF51 + .sleb128 4 + .uleb128 0x12 + .long .LASF52 + .sleb128 5 + .uleb128 0x12 + .long .LASF53 + .sleb128 6 + .uleb128 0x12 + .long .LASF54 + .sleb128 7 + .uleb128 0x12 + .long .LASF55 + .sleb128 8 + .uleb128 0x12 + .long .LASF56 + .sleb128 9 + .uleb128 0x12 + .long .LASF57 + .sleb128 10 + .uleb128 0x12 + .long .LASF58 + .sleb128 11 + .uleb128 0x12 + .long .LASF59 + .sleb128 12 + .uleb128 0x12 + .long .LASF60 + .sleb128 13 + .uleb128 0x12 + .long .LASF61 + .sleb128 14 + .uleb128 0x12 + .long .LASF62 + .sleb128 15 + .uleb128 0x12 + .long .LASF63 + .sleb128 16 + .uleb128 0x12 + .long .LASF64 + .sleb128 17 + .uleb128 0x12 + .long .LASF65 + .sleb128 18 + .uleb128 0x12 + .long .LASF66 + .sleb128 19 + .uleb128 0x12 + .long .LASF67 + .sleb128 20 + .uleb128 0x12 + .long .LASF68 + .sleb128 21 + .uleb128 0x12 + .long .LASF69 + .sleb128 22 + .uleb128 0x12 + .long .LASF70 + .sleb128 23 + .uleb128 0x12 + .long .LASF71 + .sleb128 24 + .uleb128 0x12 + .long .LASF72 + .sleb128 25 + .uleb128 0x12 + .long .LASF73 + .sleb128 26 + .uleb128 0x12 + .long .LASF74 + .sleb128 27 + .uleb128 0x12 + .long .LASF75 + .sleb128 28 + .byte 0x0 + .uleb128 0x2 + .long .LASF76 + .byte 0x3 + .byte 0x97 + .long 0x329 + .uleb128 0x6 + .byte 0x8 + .long 0x2e7 + .uleb128 0x2 + .long .LASF77 + .byte 0x4 + .byte 0x18 + .long 0x5b + .uleb128 0x2 + .long .LASF78 + .byte 0x4 + .byte 0x31 + .long 0x407 + .uleb128 0x6 + .byte 0x8 + .long 0x3f1 + .uleb128 0x11 + .long 0x422 + .byte 0x4 + .byte 0x4 + .byte 0x55 + .uleb128 0x12 + .long .LASF79 + .sleb128 0 + .uleb128 0x12 + .long .LASF80 + .sleb128 1 + .byte 0x0 + .uleb128 0x2 + .long .LASF81 + .byte 0x4 + .byte 0x55 + .long 0x40d + .uleb128 0x2 + .long .LASF82 + .byte 0x4 + .byte 0xd4 + .long 0x438 + .uleb128 0x13 + .long .LASF82 + .byte 0x1 + .uleb128 0x14 + .long 0x45f + .string "val" + .byte 0x8 + .byte 0x1 + .byte 0x2e + .uleb128 0x15 + .string "ul" + .byte 0x1 + .byte 0x2f + .long 0x38 + .uleb128 0x15 + .string "bv" + .byte 0x1 + .byte 0x30 + .long 0x3fc + .byte 0x0 + .uleb128 0x11 + .long 0x474 + .byte 0x4 + .byte 0x1 + .byte 0x32 + .uleb128 0x12 + .long .LASF83 + .sleb128 0 + .uleb128 0x12 + .long .LASF84 + .sleb128 1 + .byte 0x0 + .uleb128 0x7 + .long 0x4c7 + .long .LASF85 + .byte 0x20 + .byte 0x2 + .byte 0x27 + .uleb128 0xd + .long .LASF86 + .byte 0x2 + .byte 0x29 + .long 0x3f + .byte 0x2 + .byte 0x23 + .uleb128 0x0 + .uleb128 0xd + .long .LASF87 + .byte 0x2 + .byte 0x2c + .long 0x3f + .byte 0x2 + .byte 0x23 + .uleb128 0x4 + .uleb128 0xd + .long .LASF88 + .byte 0x2 + .byte 0x2f + .long 0x254 + .byte 0x2 + .byte 0x23 + .uleb128 0x8 + .uleb128 0xd + .long .LASF89 + .byte 0x2 + .byte 0x32 + .long 0x38 + .byte 0x2 + .byte 0x23 + .uleb128 0x10 + .uleb128 0xd + .long .LASF90 + .byte 0x2 + .byte 0x35 + .long 0x243 + .byte 0x2 + .byte 0x23 + .uleb128 0x18 + .byte 0x0 + .uleb128 0x2 + .long .LASF85 + .byte 0x2 + .byte 0x36 + .long 0x474 + .uleb128 0x16 + .byte 0x1 + .long .LASF91 + .byte 0x1 + .byte 0x41 + .byte 0x1 + .quad .LFB25 + .quad .LFE25 + .long .LLST0 + .uleb128 0x16 + .byte 0x1 + .long .LASF92 + .byte 0x1 + .byte 0x4c + .byte 0x1 + .quad .LFB26 + .quad .LFE26 + .long .LLST1 + .uleb128 0x17 + .long 0x55f + .byte 0x1 + .long .LASF94 + .byte 0x1 + .byte 0x57 + .byte 0x1 + .long 0x3eb + .quad .LFB27 + .quad .LFE27 + .long .LLST2 + .uleb128 0x18 + .string "str" + .byte 0x1 + .byte 0x56 + .long 0x8f + .long .LLST3 + .uleb128 0x19 + .long .LASF93 + .byte 0x1 + .byte 0x56 + .long 0x38 + .long .LLST4 + .uleb128 0x1a + .long .LASF96 + .byte 0x1 + .byte 0x58 + .long 0x3eb + .long .LLST5 + .byte 0x0 + .uleb128 0x17 + .long 0x5b2 + .byte 0x1 + .long .LASF95 + .byte 0x1 + .byte 0x6d + .byte 0x1 + .long 0x3eb + .quad .LFB28 + .quad .LFE28 + .long .LLST6 + .uleb128 0x18 + .string "str" + .byte 0x1 + .byte 0x6c + .long 0x8f + .long .LLST7 + .uleb128 0x19 + .long .LASF93 + .byte 0x1 + .byte 0x6c + .long 0x38 + .long .LLST8 + .uleb128 0x1a + .long .LASF96 + .byte 0x1 + .byte 0x6e + .long 0x3eb + .long .LLST9 + .byte 0x0 + .uleb128 0x17 + .long 0x605 + .byte 0x1 + .long .LASF97 + .byte 0x1 + .byte 0x84 + .byte 0x1 + .long 0x3eb + .quad .LFB29 + .quad .LFE29 + .long .LLST10 + .uleb128 0x18 + .string "str" + .byte 0x1 + .byte 0x83 + .long 0x8f + .long .LLST11 + .uleb128 0x19 + .long .LASF93 + .byte 0x1 + .byte 0x83 + .long 0x38 + .long .LLST12 + .uleb128 0x1a + .long .LASF96 + .byte 0x1 + .byte 0x85 + .long 0x3eb + .long .LLST13 + .byte 0x0 + .uleb128 0x17 + .long 0x658 + .byte 0x1 + .long .LASF98 + .byte 0x1 + .byte 0x9b + .byte 0x1 + .long 0x3eb + .quad .LFB30 + .quad .LFE30 + .long .LLST14 + .uleb128 0x18 + .string "str" + .byte 0x1 + .byte 0x9a + .long 0x8f + .long .LLST15 + .uleb128 0x19 + .long .LASF93 + .byte 0x1 + .byte 0x9a + .long 0x38 + .long .LLST16 + .uleb128 0x1a + .long .LASF96 + .byte 0x1 + .byte 0x9c + .long 0x3eb + .long .LLST17 + .byte 0x0 + .uleb128 0x17 + .long 0x6ba + .byte 0x1 + .long .LASF99 + .byte 0x1 + .byte 0xb3 + .byte 0x1 + .long 0x3eb + .quad .LFB31 + .quad .LFE31 + .long .LLST18 + .uleb128 0x18 + .string "str" + .byte 0x1 + .byte 0xb2 + .long 0x254 + .long .LLST19 + .uleb128 0x19 + .long .LASF93 + .byte 0x1 + .byte 0xb2 + .long 0x38 + .long .LLST20 + .uleb128 0x1a + .long .LASF96 + .byte 0x1 + .byte 0xb4 + .long 0x3eb + .long .LLST21 + .uleb128 0x1b + .string "len" + .byte 0x1 + .byte 0xb5 + .long 0x2d + .long .LLST22 + .byte 0x0 + .uleb128 0x17 + .long 0x6f8 + .byte 0x1 + .long .LASF100 + .byte 0x1 + .byte 0xe6 + .byte 0x1 + .long 0x3eb + .quad .LFB32 + .quad .LFE32 + .long .LLST23 + .uleb128 0x18 + .string "i" + .byte 0x1 + .byte 0xe5 + .long 0x38 + .long .LLST24 + .uleb128 0x1c + .long .LASF96 + .byte 0x1 + .byte 0xe7 + .long 0x3eb + .byte 0x0 + .uleb128 0x17 + .long 0x736 + .byte 0x1 + .long .LASF101 + .byte 0x1 + .byte 0xf2 + .byte 0x1 + .long 0x3eb + .quad .LFB33 + .quad .LFE33 + .long .LLST25 + .uleb128 0x18 + .string "i" + .byte 0x1 + .byte 0xf1 + .long 0x46 + .long .LLST26 + .uleb128 0x1c + .long .LASF96 + .byte 0x1 + .byte 0xf3 + .long 0x3eb + .byte 0x0 + .uleb128 0x1d + .long 0x77b + .byte 0x1 + .long .LASF102 + .byte 0x1 + .value 0x107 + .byte 0x1 + .long 0x3eb + .quad .LFB34 + .quad .LFE34 + .long .LLST27 + .uleb128 0x1e + .long .LASF96 + .byte 0x1 + .value 0x106 + .long 0x77b + .long .LLST28 + .uleb128 0x1f + .string "n" + .byte 0x1 + .value 0x108 + .long 0x3eb + .long .LLST29 + .byte 0x0 + .uleb128 0x6 + .byte 0x8 + .long 0x781 + .uleb128 0x9 + .long 0x2e7 + .uleb128 0x20 + .long 0x7b9 + .byte 0x1 + .long .LASF103 + .byte 0x1 + .value 0x11a + .byte 0x1 + .quad .LFB35 + .quad .LFE35 + .long .LLST30 + .uleb128 0x1e + .long .LASF96 + .byte 0x1 + .value 0x119 + .long 0x3eb + .long .LLST31 + .byte 0x0 + .uleb128 0x20 + .long 0x84a + .byte 0x1 + .long .LASF104 + .byte 0x1 + .value 0x124 + .byte 0x1 + .quad .LFB36 + .quad .LFE36 + .long .LLST32 + .uleb128 0x21 + .string "acc" + .byte 0x1 + .value 0x122 + .long 0x3eb + .long .LLST33 + .uleb128 0x21 + .string "op" + .byte 0x1 + .value 0x122 + .long 0x3e0 + .long .LLST34 + .uleb128 0x1e + .long .LASF105 + .byte 0x1 + .value 0x122 + .long 0x3eb + .long .LLST35 + .uleb128 0x1e + .long .LASF93 + .byte 0x1 + .value 0x123 + .long 0x38 + .long .LLST36 + .uleb128 0x22 + .long .LASF106 + .byte 0x1 + .value 0x125 + .long 0x422 + .byte 0x2 + .byte 0x77 + .sleb128 20 + .uleb128 0x1f + .string "op1" + .byte 0x1 + .value 0x126 + .long 0x3fc + .long .LLST37 + .uleb128 0x1f + .string "op2" + .byte 0x1 + .value 0x126 + .long 0x3fc + .long .LLST38 + .byte 0x0 + .uleb128 0x20 + .long 0x87d + .byte 0x1 + .long .LASF107 + .byte 0x1 + .value 0x1c6 + .byte 0x1 + .quad .LFB37 + .quad .LFE37 + .long .LLST39 + .uleb128 0x1e + .long .LASF96 + .byte 0x1 + .value 0x1c5 + .long 0x3eb + .long .LLST40 + .byte 0x0 + .uleb128 0x23 + .long 0x8b1 + .byte 0x1 + .long .LASF108 + .byte 0x1 + .value 0x1d0 + .byte 0x1 + .long 0x3f + .quad .LFB38 + .quad .LFE38 + .byte 0x2 + .byte 0x77 + .sleb128 0 + .uleb128 0x24 + .long .LASF96 + .byte 0x1 + .value 0x1cf + .long 0x77b + .byte 0x1 + .byte 0x55 + .byte 0x0 + .uleb128 0x23 + .long 0x8e5 + .byte 0x1 + .long .LASF109 + .byte 0x1 + .value 0x1d6 + .byte 0x1 + .long 0x3f + .quad .LFB39 + .quad .LFE39 + .byte 0x2 + .byte 0x77 + .sleb128 0 + .uleb128 0x24 + .long .LASF96 + .byte 0x1 + .value 0x1d5 + .long 0x77b + .byte 0x1 + .byte 0x55 + .byte 0x0 + .uleb128 0x1d + .long 0x91c + .byte 0x1 + .long .LASF110 + .byte 0x1 + .value 0x1dc + .byte 0x1 + .long 0x3f + .quad .LFB40 + .quad .LFE40 + .long .LLST41 + .uleb128 0x1e + .long .LASF96 + .byte 0x1 + .value 0x1db + .long 0x77b + .long .LLST42 + .byte 0x0 + .uleb128 0x23 + .long 0x952 + .byte 0x1 + .long .LASF111 + .byte 0x1 + .value 0x1e2 + .byte 0x1 + .long 0x3f + .quad .LFB41 + .quad .LFE41 + .byte 0x2 + .byte 0x77 + .sleb128 0 + .uleb128 0x1e + .long .LASF96 + .byte 0x1 + .value 0x1e1 + .long 0x77b + .long .LLST43 + .byte 0x0 + .uleb128 0x1d + .long 0x989 + .byte 0x1 + .long .LASF112 + .byte 0x1 + .value 0x1ee + .byte 0x1 + .long 0x38 + .quad .LFB42 + .quad .LFE42 + .long .LLST44 + .uleb128 0x1e + .long .LASF96 + .byte 0x1 + .value 0x1ed + .long 0x77b + .long .LLST45 + .byte 0x0 + .uleb128 0x1d + .long 0x9d3 + .byte 0x1 + .long .LASF113 + .byte 0x1 + .value 0x1fd + .byte 0x1 + .long 0x46 + .quad .LFB43 + .quad .LFE43 + .long .LLST46 + .uleb128 0x1e + .long .LASF96 + .byte 0x1 + .value 0x1fc + .long 0x77b + .long .LLST47 + .uleb128 0x25 + .long .Ldebug_ranges0+0x0 + .uleb128 0x26 + .string "ul" + .byte 0x1 + .value 0x207 + .long 0x38 + .byte 0x1 + .byte 0x50 + .byte 0x0 + .byte 0x0 + .uleb128 0x1d + .long 0xa8e + .byte 0x1 + .long .LASF114 + .byte 0x1 + .value 0x262 + .byte 0x1 + .long 0x3f + .quad .LFB45 + .quad .LFE45 + .long .LLST48 + .uleb128 0x1e + .long .LASF96 + .byte 0x1 + .value 0x260 + .long 0x77b + .long .LLST49 + .uleb128 0x1e + .long .LASF115 + .byte 0x1 + .value 0x260 + .long 0x2d + .long .LLST50 + .uleb128 0x1e + .long .LASF116 + .byte 0x1 + .value 0x260 + .long 0x2d + .long .LLST51 + .uleb128 0x1e + .long .LASF117 + .byte 0x1 + .value 0x261 + .long 0x3f + .long .LLST52 + .uleb128 0x1f + .string "val" + .byte 0x1 + .value 0x263 + .long 0x3fc + .long .LLST53 + .uleb128 0x27 + .long 0xa6b + .quad .LBB5 + .quad .LBE5 + .uleb128 0x28 + .long .LASF118 + .byte 0x1 + .value 0x276 + .long 0x3f + .byte 0x0 + .uleb128 0x29 + .quad .LBB6 + .quad .LBE6 + .uleb128 0x2a + .long .LASF119 + .byte 0x1 + .value 0x27e + .long 0x3f + .long .LLST54 + .byte 0x0 + .byte 0x0 + .uleb128 0x20 + .long 0xb8c + .byte 0x1 + .long .LASF120 + .byte 0x1 + .value 0x220 + .byte 0x1 + .quad .LFB44 + .quad .LFE44 + .long .LLST55 + .uleb128 0x1e + .long .LASF96 + .byte 0x1 + .value 0x21d + .long 0x77b + .long .LLST56 + .uleb128 0x21 + .string "ptr" + .byte 0x1 + .value 0x21d + .long 0x24e + .long .LLST57 + .uleb128 0x1e + .long .LASF121 + .byte 0x1 + .value 0x21e + .long 0x2d + .long .LLST58 + .uleb128 0x1e + .long .LASF122 + .byte 0x1 + .value 0x21e + .long 0x2d + .long .LLST59 + .uleb128 0x1e + .long .LASF123 + .byte 0x1 + .value 0x21e + .long 0x3f + .long .LLST60 + .uleb128 0x1e + .long .LASF124 + .byte 0x1 + .value 0x21f + .long 0x3f + .long .LLST61 + .uleb128 0x24 + .long .LASF125 + .byte 0x1 + .value 0x21f + .long 0x3f + .byte 0x3 + .byte 0x77 + .sleb128 96 + .uleb128 0x24 + .long .LASF93 + .byte 0x1 + .value 0x21f + .long 0x38 + .byte 0x3 + .byte 0x77 + .sleb128 104 + .uleb128 0x1f + .string "op1" + .byte 0x1 + .value 0x221 + .long 0x3fc + .long .LLST62 + .uleb128 0x1f + .string "op2" + .byte 0x1 + .value 0x221 + .long 0x3fc + .long .LLST63 + .uleb128 0x1f + .string "buf" + .byte 0x1 + .value 0x222 + .long 0x24e + .long .LLST64 + .uleb128 0x26 + .string "len" + .byte 0x1 + .value 0x223 + .long 0x5b + .byte 0x2 + .byte 0x77 + .sleb128 36 + .uleb128 0x2a + .long .LASF116 + .byte 0x1 + .value 0x224 + .long 0x2d + .long .LLST65 + .uleb128 0x28 + .long .LASF118 + .byte 0x1 + .value 0x225 + .long 0x3f + .byte 0x0 + .uleb128 0x1d + .long 0xc1d + .byte 0x1 + .long .LASF126 + .byte 0x1 + .value 0x28f + .byte 0x1 + .long 0x38 + .quad .LFB46 + .quad .LFE46 + .long .LLST66 + .uleb128 0x1e + .long .LASF96 + .byte 0x1 + .value 0x28e + .long 0x77b + .long .LLST67 + .uleb128 0x21 + .string "ptr" + .byte 0x1 + .value 0x28e + .long 0x24e + .long .LLST68 + .uleb128 0x1e + .long .LASF86 + .byte 0x1 + .value 0x28e + .long 0x3f + .long .LLST69 + .uleb128 0x1f + .string "val" + .byte 0x1 + .value 0x290 + .long 0x3fc + .long .LLST70 + .uleb128 0x1f + .string "i" + .byte 0x1 + .value 0x291 + .long 0x38 + .long .LLST71 + .uleb128 0x2a + .long .LASF115 + .byte 0x1 + .value 0x291 + .long 0x38 + .long .LLST72 + .uleb128 0x28 + .long .LASF127 + .byte 0x1 + .value 0x292 + .long 0x24e + .byte 0x0 + .uleb128 0x1d + .long 0xc74 + .byte 0x1 + .long .LASF128 + .byte 0x1 + .value 0x2bd + .byte 0x1 + .long 0x38 + .quad .LFB47 + .quad .LFE47 + .long .LLST73 + .uleb128 0x1e + .long .LASF96 + .byte 0x1 + .value 0x2bc + .long 0x77b + .long .LLST74 + .uleb128 0x1e + .long .LASF86 + .byte 0x1 + .value 0x2bc + .long 0x3f + .long .LLST75 + .uleb128 0x1f + .string "val" + .byte 0x1 + .value 0x2be + .long 0x3fc + .long .LLST76 + .byte 0x0 + .uleb128 0x20 + .long 0xcc3 + .byte 0x1 + .long .LASF129 + .byte 0x1 + .value 0x2df + .byte 0x1 + .quad .LFB48 + .quad .LFE48 + .long .LLST77 + .uleb128 0x1e + .long .LASF96 + .byte 0x1 + .value 0x2de + .long 0x77b + .long .LLST78 + .uleb128 0x21 + .string "f" + .byte 0x1 + .value 0x2de + .long 0x2e1 + .long .LLST79 + .uleb128 0x1f + .string "s" + .byte 0x1 + .value 0x2e0 + .long 0x24e + .long .LLST80 + .byte 0x0 + .uleb128 0x2b + .long 0xd20 + .long .LASF151 + .byte 0x2 + .byte 0x54 + .byte 0x1 + .long 0x3f + .byte 0x1 + .uleb128 0x2c + .long .LASF130 + .byte 0x2 + .byte 0x53 + .long 0xd20 + .uleb128 0x1c + .long .LASF131 + .byte 0x2 + .byte 0x55 + .long 0x8f + .uleb128 0x1c + .long .LASF96 + .byte 0x2 + .byte 0x56 + .long 0x3eb + .uleb128 0x1c + .long .LASF115 + .byte 0x2 + .byte 0x57 + .long 0x38 + .uleb128 0x2d + .string "i" + .byte 0x2 + .byte 0x57 + .long 0x38 + .uleb128 0x2d + .string "out" + .byte 0x2 + .byte 0x58 + .long 0xd26 + .uleb128 0x2d + .string "bad" + .byte 0x2 + .byte 0x59 + .long 0x3f + .byte 0x0 + .uleb128 0x6 + .byte 0x8 + .long 0x4c7 + .uleb128 0xe + .long 0xd36 + .long 0x4d + .uleb128 0xf + .long 0x86 + .byte 0x63 + .byte 0x0 + .uleb128 0x17 + .long 0xde8 + .byte 0x1 + .long .LASF132 + .byte 0x2 + .byte 0x86 + .byte 0x1 + .long 0x3f + .quad .LFB50 + .quad .LFE50 + .long .LLST81 + .uleb128 0x2e + .string "nf" + .byte 0x2 + .byte 0x87 + .long 0x3f + .byte 0x2 + .byte 0x77 + .sleb128 44 + .uleb128 0x1c + .long .LASF133 + .byte 0x2 + .byte 0x88 + .long 0x3f + .uleb128 0x1b + .string "i" + .byte 0x2 + .byte 0x89 + .long 0x3f + .long .LLST82 + .uleb128 0x25 + .long .Ldebug_ranges0+0x40 + .uleb128 0x1a + .long .LASF134 + .byte 0x2 + .byte 0x92 + .long 0x3f + .long .LLST83 + .uleb128 0x2f + .long 0xcc3 + .quad .LBB8 + .quad .LBE8 + .uleb128 0x30 + .long 0xcd4 + .uleb128 0x25 + .long .Ldebug_ranges0+0xb0 + .uleb128 0x31 + .long 0xcdf + .long .LLST84 + .uleb128 0x31 + .long 0xcea + .long .LLST85 + .uleb128 0x31 + .long 0xcf5 + .long .LLST86 + .uleb128 0x32 + .long 0xd00 + .uleb128 0x33 + .long 0xd09 + .byte 0x2 + .byte 0x77 + .sleb128 48 + .uleb128 0x31 + .long 0xd14 + .long .LLST87 + .byte 0x0 + .byte 0x0 + .byte 0x0 + .byte 0x0 + .uleb128 0x34 + .long .LASF135 + .byte 0x1 + .byte 0x37 + .long 0x3fc + .byte 0x9 + .byte 0x3 + .quad conv_bv + .uleb128 0x34 + .long .LASF90 + .byte 0x1 + .byte 0x3a + .long 0x3fc + .byte 0x9 + .byte 0x3 + .quad result + .uleb128 0x34 + .long .LASF136 + .byte 0x1 + .byte 0x3a + .long 0x3fc + .byte 0x9 + .byte 0x3 + .quad spare + .uleb128 0x34 + .long .LASF137 + .byte 0x1 + .byte 0x3a + .long 0x3fc + .byte 0x9 + .byte 0x3 + .quad op1static + .uleb128 0x34 + .long .LASF138 + .byte 0x1 + .byte 0x3a + .long 0x3fc + .byte 0x9 + .byte 0x3 + .quad op2static + .uleb128 0x34 + .long .LASF139 + .byte 0x1 + .byte 0x3c + .long 0xe66 + .byte 0x9 + .byte 0x3 + .quad from_dec_data + .uleb128 0x6 + .byte 0x8 + .long 0x42d + .uleb128 0xe + .long 0xe7c + .long 0x4c7 + .uleb128 0xf + .long 0x86 + .byte 0xf + .byte 0x0 + .uleb128 0x34 + .long .LASF140 + .byte 0x2 + .byte 0x38 + .long 0xe6c + .byte 0x9 + .byte 0x3 + .quad tests + .uleb128 0xe + .long 0xea2 + .long 0x95 + .uleb128 0x35 + .long 0x86 + .value 0x3e7 + .byte 0x0 + .uleb128 0x34 + .long .LASF141 + .byte 0x2 + .byte 0x4f + .long 0xe91 + .byte 0x9 + .byte 0x3 + .quad failed + .uleb128 0xe + .long 0xec7 + .long 0x95 + .uleb128 0xf + .long 0x86 + .byte 0x63 + .byte 0x0 + .uleb128 0x34 + .long .LASF142 + .byte 0x2 + .byte 0x50 + .long 0xeb7 + .byte 0x9 + .byte 0x3 + .quad failmsg + .uleb128 0x36 + .long .LASF143 + .byte 0x6 + .byte 0x8e + .long 0x2b5 + .byte 0x1 + .byte 0x1 + .uleb128 0x36 + .long .LASF144 + .byte 0x6 + .byte 0x8f + .long 0x2b5 + .byte 0x1 + .byte 0x1 + .uleb128 0x37 + .long 0xf06 + .byte 0x1 + .long 0x8d + .uleb128 0xb + .long 0x2d + .byte 0x0 + .uleb128 0x38 + .long .LASF145 + .byte 0x3 + .value 0x117 + .long 0xf14 + .byte 0x1 + .byte 0x1 + .uleb128 0x6 + .byte 0x8 + .long 0xef6 + .uleb128 0x38 + .long .LASF146 + .byte 0x3 + .value 0x132 + .long 0x25f + .byte 0x1 + .byte 0x1 + .uleb128 0xa + .long 0xf3e + .byte 0x1 + .uleb128 0xb + .long 0x254 + .uleb128 0xb + .long 0x5b + .uleb128 0xb + .long 0x254 + .byte 0x0 + .uleb128 0x36 + .long .LASF147 + .byte 0x9 + .byte 0x3f + .long 0xf4b + .byte 0x1 + .byte 0x1 + .uleb128 0x6 + .byte 0x8 + .long 0xf28 + .byte 0x0 + .section .debug_abbrev + .uleb128 0x1 + .uleb128 0x11 + .byte 0x1 + .uleb128 0x10 + .uleb128 0x6 + .uleb128 0x12 + .uleb128 0x1 + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x25 + .uleb128 0xe + .uleb128 0x13 + .uleb128 0xb + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x1b + .uleb128 0xe + .byte 0x0 + .byte 0x0 + .uleb128 0x2 + .uleb128 0x16 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x24 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3e + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0x4 + .uleb128 0x24 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3e + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0x5 + .uleb128 0xf + .byte 0x0 + .uleb128 0xb + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0x6 + .uleb128 0xf + .byte 0x0 + .uleb128 0xb + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0x7 + .uleb128 0x13 + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0x8 + .uleb128 0xd + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0x5 + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x38 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0x9 + .uleb128 0x26 + .byte 0x0 + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0xa + .uleb128 0x15 + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0x27 + .uleb128 0xc + .byte 0x0 + .byte 0x0 + .uleb128 0xb + .uleb128 0x5 + .byte 0x0 + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0xc + .uleb128 0x16 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0xd + .uleb128 0xd + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x38 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0xe + .uleb128 0x1 + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0xf + .uleb128 0x21 + .byte 0x0 + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2f + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0x10 + .uleb128 0xd + .byte 0x0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x38 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0x11 + .uleb128 0x4 + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0x12 + .uleb128 0x28 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x1c + .uleb128 0xd + .byte 0x0 + .byte 0x0 + .uleb128 0x13 + .uleb128 0x13 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3c + .uleb128 0xc + .byte 0x0 + .byte 0x0 + .uleb128 0x14 + .uleb128 0x17 + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0x15 + .uleb128 0xd + .byte 0x0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0x16 + .uleb128 0x2e + .byte 0x0 + .uleb128 0x3f + .uleb128 0xc + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x27 + .uleb128 0xc + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x1 + .uleb128 0x40 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x17 + .uleb128 0x2e + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0x3f + .uleb128 0xc + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x27 + .uleb128 0xc + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x1 + .uleb128 0x40 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x18 + .uleb128 0x5 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x19 + .uleb128 0x5 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x1a + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x1b + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x1c + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0x1d + .uleb128 0x2e + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0x3f + .uleb128 0xc + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0x5 + .uleb128 0x27 + .uleb128 0xc + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x1 + .uleb128 0x40 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x1e + .uleb128 0x5 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0x5 + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x1f + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0x5 + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x20 + .uleb128 0x2e + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0x3f + .uleb128 0xc + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0x5 + .uleb128 0x27 + .uleb128 0xc + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x1 + .uleb128 0x40 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x21 + .uleb128 0x5 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0x5 + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x22 + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0x5 + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0x23 + .uleb128 0x2e + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0x3f + .uleb128 0xc + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0x5 + .uleb128 0x27 + .uleb128 0xc + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x1 + .uleb128 0x40 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0x24 + .uleb128 0x5 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0x5 + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0x25 + .uleb128 0xb + .byte 0x1 + .uleb128 0x55 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x26 + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0x5 + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0x27 + .uleb128 0xb + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x1 + .byte 0x0 + .byte 0x0 + .uleb128 0x28 + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0x5 + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0x29 + .uleb128 0xb + .byte 0x1 + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x1 + .byte 0x0 + .byte 0x0 + .uleb128 0x2a + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0x5 + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x2b + .uleb128 0x2e + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x27 + .uleb128 0xc + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x20 + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0x2c + .uleb128 0x5 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0x2d + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0x2e + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0x2f + .uleb128 0x1d + .byte 0x1 + .uleb128 0x31 + .uleb128 0x13 + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x1 + .byte 0x0 + .byte 0x0 + .uleb128 0x30 + .uleb128 0x5 + .byte 0x0 + .uleb128 0x31 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0x31 + .uleb128 0x34 + .byte 0x0 + .uleb128 0x31 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x32 + .uleb128 0x34 + .byte 0x0 + .uleb128 0x31 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0x33 + .uleb128 0x34 + .byte 0x0 + .uleb128 0x31 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0x34 + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0x35 + .uleb128 0x21 + .byte 0x0 + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2f + .uleb128 0x5 + .byte 0x0 + .byte 0x0 + .uleb128 0x36 + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x3f + .uleb128 0xc + .uleb128 0x3c + .uleb128 0xc + .byte 0x0 + .byte 0x0 + .uleb128 0x37 + .uleb128 0x15 + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0x27 + .uleb128 0xc + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0x38 + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0x5 + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x3f + .uleb128 0xc + .uleb128 0x3c + .uleb128 0xc + .byte 0x0 + .byte 0x0 + .byte 0x0 + .section .debug_pubnames,"",@progbits + .long 0x27a + .value 0x2 + .long .Ldebug_info0 + .long 0xf52 + .long 0x4d2 + .string "yasm_intnum_initialize" + .long 0x4ef + .string "yasm_intnum_cleanup" + .long 0x50c + .string "yasm_intnum_create_dec" + .long 0x55f + .string "yasm_intnum_create_bin" + .long 0x5b2 + .string "yasm_intnum_create_oct" + .long 0x605 + .string "yasm_intnum_create_hex" + .long 0x658 + .string "yasm_intnum_create_charconst_nasm" + .long 0x6ba + .string "yasm_intnum_create_uint" + .long 0x6f8 + .string "yasm_intnum_create_int" + .long 0x736 + .string "yasm_intnum_copy" + .long 0x786 + .string "yasm_intnum_destroy" + .long 0x7b9 + .string "yasm_intnum_calc" + .long 0x84a + .string "yasm_intnum_zero" + .long 0x87d + .string "yasm_intnum_is_zero" + .long 0x8b1 + .string "yasm_intnum_is_pos1" + .long 0x8e5 + .string "yasm_intnum_is_neg1" + .long 0x91c + .string "yasm_intnum_sign" + .long 0x952 + .string "yasm_intnum_get_uint" + .long 0x989 + .string "yasm_intnum_get_int" + .long 0x9d3 + .string "yasm_intnum_check_size" + .long 0xa8e + .string "yasm_intnum_get_sized" + .long 0xb8c + .string "yasm_intnum_get_leb128" + .long 0xc1d + .string "yasm_intnum_size_leb128" + .long 0xc74 + .string "yasm_intnum_print" + .long 0xd36 + .string "main" + .long 0x0 + .section .debug_aranges,"",@progbits + .long 0x2c + .value 0x2 + .long .Ldebug_info0 + .byte 0x8 + .byte 0x0 + .value 0x0 + .value 0x0 + .quad .Ltext0 + .quad .Letext0-.Ltext0 + .quad 0x0 + .quad 0x0 + .section .debug_ranges,"",@progbits +.Ldebug_ranges0: + .quad .LBB2-.Ltext0 + .quad .LBE2-.Ltext0 + .quad .LBB4-.Ltext0 + .quad .LBE4-.Ltext0 + .quad .LBB3-.Ltext0 + .quad .LBE3-.Ltext0 + .quad 0x0 + .quad 0x0 + .quad .LBB7-.Ltext0 + .quad .LBE7-.Ltext0 + .quad .LBB16-.Ltext0 + .quad .LBE16-.Ltext0 + .quad .LBB15-.Ltext0 + .quad .LBE15-.Ltext0 + .quad .LBB14-.Ltext0 + .quad .LBE14-.Ltext0 + .quad .LBB11-.Ltext0 + .quad .LBE11-.Ltext0 + .quad .LBB10-.Ltext0 + .quad .LBE10-.Ltext0 + .quad 0x0 + .quad 0x0 + .quad .LBB9-.Ltext0 + .quad .LBE9-.Ltext0 + .quad .LBB18-.Ltext0 + .quad .LBE18-.Ltext0 + .quad .LBB13-.Ltext0 + .quad .LBE13-.Ltext0 + .quad 0x0 + .quad 0x0 + .section .debug_str,"MS",@progbits,1 +.LASF150: + .string "/home/pete/yasm" +.LASF139: + .string "from_dec_data" +.LASF31: + .string "_shortbuf" +.LASF137: + .string "op1static" +.LASF97: + .string "yasm_intnum_create_oct" +.LASF140: + .string "tests" +.LASF38: + .string "_IO_lock_t" +.LASF20: + .string "_IO_buf_end" +.LASF51: + .string "YASM_EXPR_DIV" +.LASF128: + .string "yasm_intnum_size_leb128" +.LASF46: + .string "origsize" +.LASF127: + .string "ptr_orig" +.LASF18: + .string "_IO_write_end" +.LASF4: + .string "unsigned int" +.LASF70: + .string "YASM_EXPR_GE" +.LASF12: + .string "_flags" +.LASF122: + .string "valsize" +.LASF67: + .string "YASM_EXPR_GT" +.LASF147: + .string "yasm_internal_error_" +.LASF24: + .string "_markers" +.LASF75: + .string "YASM_EXPR_SEGOFF" +.LASF6: + .string "short int" +.LASF73: + .string "YASM_EXPR_SEG" +.LASF95: + .string "yasm_intnum_create_bin" +.LASF72: + .string "YASM_EXPR_NONNUM" +.LASF78: + .string "wordptr" +.LASF74: + .string "YASM_EXPR_WRT" +.LASF102: + .string "yasm_intnum_copy" +.LASF125: + .string "warn" +.LASF120: + .string "yasm_intnum_get_sized" +.LASF43: + .string "_pos" +.LASF151: + .string "run_test" +.LASF144: + .string "stdout" +.LASF115: + .string "size" +.LASF100: + .string "yasm_intnum_create_uint" +.LASF123: + .string "shift" +.LASF65: + .string "YASM_EXPR_LNOT" +.LASF106: + .string "carry" +.LASF92: + .string "yasm_intnum_cleanup" +.LASF90: + .string "result" +.LASF71: + .string "YASM_EXPR_NE" +.LASF101: + .string "yasm_intnum_create_int" +.LASF112: + .string "yasm_intnum_get_uint" +.LASF149: + .string "libyasm/tests/leb128_test.c" +.LASF98: + .string "yasm_intnum_create_hex" +.LASF105: + .string "operand" +.LASF22: + .string "_IO_backup_base" +.LASF118: + .string "carry_in" +.LASF33: + .string "_offset" +.LASF119: + .string "retval" +.LASF26: + .string "_fileno" +.LASF7: + .string "size_t" +.LASF86: + .string "sign" +.LASF84: + .string "INTNUM_BV" +.LASF15: + .string "_IO_read_base" +.LASF124: + .string "bigendian" +.LASF23: + .string "_IO_save_end" +.LASF41: + .string "_next" +.LASF121: + .string "destsize" +.LASF47: + .string "YASM_EXPR_IDENT" +.LASF99: + .string "yasm_intnum_create_charconst_nasm" +.LASF135: + .string "conv_bv" +.LASF16: + .string "_IO_write_base" +.LASF50: + .string "YASM_EXPR_MUL" +.LASF56: + .string "YASM_EXPR_NOT" +.LASF54: + .string "YASM_EXPR_SIGNMOD" +.LASF36: + .string "_mode" +.LASF69: + .string "YASM_EXPR_LE" +.LASF111: + .string "yasm_intnum_sign" +.LASF94: + .string "yasm_intnum_create_dec" +.LASF66: + .string "YASM_EXPR_LT" +.LASF13: + .string "_IO_read_ptr" +.LASF126: + .string "yasm_intnum_get_leb128" +.LASF60: + .string "YASM_EXPR_NOR" +.LASF145: + .string "yasm_xmalloc" +.LASF52: + .string "YASM_EXPR_SIGNDIV" +.LASF59: + .string "YASM_EXPR_XOR" +.LASF104: + .string "yasm_intnum_calc" +.LASF40: + .string "_IO_marker" +.LASF138: + .string "op2static" +.LASF80: + .string "true" +.LASF21: + .string "_IO_save_base" +.LASF91: + .string "yasm_intnum_initialize" +.LASF62: + .string "YASM_EXPR_SHR" +.LASF87: + .string "negate" +.LASF83: + .string "INTNUM_UL" +.LASF133: + .string "numtests" +.LASF34: + .string "__pad1" +.LASF35: + .string "__pad2" +.LASF0: + .string "long unsigned int" +.LASF85: + .string "Test_Entry" +.LASF88: + .string "input" +.LASF107: + .string "yasm_intnum_zero" +.LASF30: + .string "_vtable_offset" +.LASF63: + .string "YASM_EXPR_LOR" +.LASF108: + .string "yasm_intnum_is_zero" +.LASF57: + .string "YASM_EXPR_OR" +.LASF76: + .string "yasm_expr_op" +.LASF141: + .string "failed" +.LASF48: + .string "YASM_EXPR_ADD" +.LASF142: + .string "failmsg" +.LASF10: + .string "char" +.LASF14: + .string "_IO_read_end" +.LASF114: + .string "yasm_intnum_check_size" +.LASF77: + .string "N_word" +.LASF143: + .string "stdin" +.LASF1: + .string "long int" +.LASF96: + .string "intn" +.LASF55: + .string "YASM_EXPR_NEG" +.LASF129: + .string "yasm_intnum_print" +.LASF49: + .string "YASM_EXPR_SUB" +.LASF131: + .string "valstr" +.LASF146: + .string "yasm_xfree" +.LASF32: + .string "_lock" +.LASF28: + .string "_old_offset" +.LASF39: + .string "_IO_FILE" +.LASF42: + .string "_sbuf" +.LASF136: + .string "spare" +.LASF103: + .string "yasm_intnum_destroy" +.LASF45: + .string "type" +.LASF109: + .string "yasm_intnum_is_pos1" +.LASF2: + .string "unsigned char" +.LASF89: + .string "outsize" +.LASF93: + .string "line" +.LASF130: + .string "test" +.LASF17: + .string "_IO_write_ptr" +.LASF79: + .string "false" +.LASF117: + .string "rangetype" +.LASF116: + .string "rshift" +.LASF58: + .string "YASM_EXPR_AND" +.LASF134: + .string "fail" +.LASF8: + .string "__off_t" +.LASF82: + .string "BitVector_from_Dec_static_data" +.LASF5: + .string "signed char" +.LASF3: + .string "short unsigned int" +.LASF110: + .string "yasm_intnum_is_neg1" +.LASF61: + .string "YASM_EXPR_SHL" +.LASF132: + .string "main" +.LASF25: + .string "_chain" +.LASF113: + .string "yasm_intnum_get_int" +.LASF11: + .string "FILE" +.LASF27: + .string "_flags2" +.LASF148: + .string "GNU C 4.0.2 (Debian 4.0.2-2)" +.LASF68: + .string "YASM_EXPR_EQ" +.LASF29: + .string "_cur_column" +.LASF64: + .string "YASM_EXPR_LAND" +.LASF9: + .string "__off64_t" +.LASF37: + .string "_unused2" +.LASF19: + .string "_IO_buf_base" +.LASF53: + .string "YASM_EXPR_MOD" +.LASF81: + .string "boolean" +.LASF44: + .string "yasm_intnum" + .ident "GCC: (GNU) 4.0.2 (Debian 4.0.2-2)" + .section .note.GNU-stack,"",@progbits diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_leb128.hex b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_leb128.hex new file mode 100644 index 0000000000..2af9150499 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/pass64/dwarf64_leb128.hex @@ -0,0 +1,91280 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +5c +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +1f +00 +01 +00 +48 +83 +ec +08 +31 +f6 +bf +80 +00 +00 +00 +e8 +00 +00 +00 +00 +31 +f6 +bf +80 +00 +00 +00 +48 +89 +05 +00 +00 +00 +00 +e8 +00 +00 +00 +00 +31 +f6 +bf +80 +00 +00 +00 +48 +89 +05 +00 +00 +00 +00 +e8 +00 +00 +00 +00 +31 +f6 +bf +80 +00 +00 +00 +48 +89 +05 +00 +00 +00 +00 +e8 +00 +00 +00 +00 +31 +f6 +bf +80 +00 +00 +00 +48 +89 +05 +00 +00 +00 +00 +e8 +00 +00 +00 +00 +bf +80 +00 +00 +00 +48 +89 +05 +00 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +89 +05 +00 +00 +00 +00 +48 +83 +c4 +08 +c3 +0f +1f +80 +00 +00 +00 +00 +48 +83 +ec +08 +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +48 +83 +c4 +08 +e9 +00 +00 +00 +00 +48 +89 +5c +24 +e8 +48 +89 +6c +24 +f0 +48 +89 +fb +4c +89 +64 +24 +f8 +bf +10 +00 +00 +00 +48 +83 +ec +18 +49 +89 +f4 +ff +15 +00 +00 +00 +00 +c6 +40 +0c +00 +48 +8b +35 +00 +00 +00 +00 +48 +89 +da +48 +8b +3d +00 +00 +00 +00 +48 +89 +c5 +e8 +00 +00 +00 +00 +83 +f8 +0c +74 +7a +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +83 +f8 +1f +7f +38 +48 +8b +3d +00 +00 +00 +00 +c7 +45 +08 +00 +00 +00 +00 +31 +d2 +be +20 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +89 +45 +00 +48 +89 +e8 +48 +8b +1c +24 +48 +8b +6c +24 +08 +4c +8b +64 +24 +10 +48 +83 +c4 +18 +c3 +0f +1f +40 +00 +48 +8b +3d +00 +00 +00 +00 +c7 +45 +08 +01 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +89 +45 +00 +48 +89 +e8 +48 +8b +1c +24 +48 +8b +6c +24 +08 +4c +8b +64 +24 +10 +48 +83 +c4 +18 +c3 +0f +1f +00 +ba +00 +00 +00 +00 +4c +89 +e6 +31 +ff +31 +c0 +e8 +00 +00 +00 +00 +e9 +70 +ff +ff +ff +66 +2e +0f +1f +84 +00 +00 +00 +00 +00 +48 +89 +6c +24 +f0 +48 +89 +fd +48 +89 +5c +24 +e8 +4c +89 +64 +24 +f8 +bf +10 +00 +00 +00 +48 +83 +ec +18 +49 +89 +f4 +ff +15 +00 +00 +00 +00 +48 +89 +ef +48 +89 +c3 +e8 +00 +00 +00 +00 +3c +80 +88 +43 +0c +0f +87 +86 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +48 +89 +ee +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +83 +f8 +1f +7f +35 +48 +8b +3d +00 +00 +00 +00 +c7 +43 +08 +00 +00 +00 +00 +31 +d2 +be +20 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +89 +03 +48 +89 +d8 +48 +8b +6c +24 +08 +48 +8b +1c +24 +4c +8b +64 +24 +10 +48 +83 +c4 +18 +c3 +66 +90 +48 +8b +3d +00 +00 +00 +00 +c7 +43 +08 +01 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +89 +03 +48 +89 +d8 +48 +8b +6c +24 +08 +48 +8b +1c +24 +4c +8b +64 +24 +10 +48 +83 +c4 +18 +c3 +0f +1f +40 +00 +ba +00 +00 +00 +00 +4c +89 +e6 +31 +ff +31 +c0 +e8 +00 +00 +00 +00 +e9 +64 +ff +ff +ff +66 +2e +0f +1f +84 +00 +00 +00 +00 +00 +48 +89 +6c +24 +f0 +48 +89 +fd +48 +89 +5c +24 +e8 +4c +89 +64 +24 +f8 +bf +10 +00 +00 +00 +48 +83 +ec +18 +49 +89 +f4 +ff +15 +00 +00 +00 +00 +48 +89 +ef +48 +89 +c3 +e8 +00 +00 +00 +00 +48 +8d +04 +40 +3c +80 +88 +43 +0c +0f +87 +82 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +48 +89 +ee +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +83 +f8 +1f +7f +33 +48 +8b +3d +00 +00 +00 +00 +c7 +43 +08 +00 +00 +00 +00 +31 +d2 +be +20 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +89 +03 +48 +89 +d8 +48 +8b +6c +24 +08 +48 +8b +1c +24 +4c +8b +64 +24 +10 +48 +83 +c4 +18 +c3 +48 +8b +3d +00 +00 +00 +00 +c7 +43 +08 +01 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +89 +03 +48 +89 +d8 +48 +8b +6c +24 +08 +48 +8b +1c +24 +4c +8b +64 +24 +10 +48 +83 +c4 +18 +c3 +66 +90 +ba +00 +00 +00 +00 +4c +89 +e6 +31 +ff +31 +c0 +e8 +00 +00 +00 +00 +e9 +68 +ff +ff +ff +66 +2e +0f +1f +84 +00 +00 +00 +00 +00 +48 +89 +6c +24 +f0 +48 +89 +fd +48 +89 +5c +24 +e8 +4c +89 +64 +24 +f8 +bf +10 +00 +00 +00 +48 +83 +ec +18 +49 +89 +f4 +ff +15 +00 +00 +00 +00 +48 +89 +ef +48 +89 +c3 +e8 +00 +00 +00 +00 +48 +c1 +e0 +02 +3c +80 +88 +43 +0c +0f +87 +82 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +48 +89 +ee +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +83 +f8 +1f +7f +33 +48 +8b +3d +00 +00 +00 +00 +c7 +43 +08 +00 +00 +00 +00 +31 +d2 +be +20 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +89 +03 +48 +89 +d8 +48 +8b +6c +24 +08 +48 +8b +1c +24 +4c +8b +64 +24 +10 +48 +83 +c4 +18 +c3 +48 +8b +3d +00 +00 +00 +00 +c7 +43 +08 +01 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +89 +03 +48 +89 +d8 +48 +8b +6c +24 +08 +48 +8b +1c +24 +4c +8b +64 +24 +10 +48 +83 +c4 +18 +c3 +66 +90 +ba +00 +00 +00 +00 +4c +89 +e6 +31 +ff +31 +c0 +e8 +00 +00 +00 +00 +e9 +68 +ff +ff +ff +66 +2e +0f +1f +84 +00 +00 +00 +00 +00 +48 +89 +5c +24 +e0 +48 +89 +fb +48 +89 +6c +24 +e8 +4c +89 +64 +24 +f0 +4c +89 +6c +24 +f8 +48 +89 +f5 +48 +83 +ec +28 +bf +10 +00 +00 +00 +ff +15 +00 +00 +00 +00 +48 +89 +df +49 +89 +c5 +e8 +00 +00 +00 +00 +49 +89 +c4 +48 +8d +04 +c5 +00 +00 +00 +00 +3c +80 +41 +88 +45 +0c +0f +87 +b5 +00 +00 +00 +49 +83 +fc +04 +0f +87 +92 +00 +00 +00 +49 +c7 +45 +00 +00 +00 +00 +00 +41 +c7 +45 +08 +00 +00 +00 +00 +41 +83 +fc +04 +77 +65 +44 +89 +e0 +ff +24 +c5 +00 +00 +00 +00 +48 +0f +be +53 +03 +49 +0b +55 +00 +48 +c1 +e2 +08 +49 +89 +55 +00 +48 +0f +be +43 +02 +48 +09 +c2 +48 +c1 +e2 +08 +49 +89 +55 +00 +48 +0f +be +43 +01 +48 +09 +c2 +48 +c1 +e2 +08 +49 +89 +55 +00 +48 +0f +be +03 +48 +09 +c2 +49 +89 +55 +00 +4c +89 +e8 +48 +8b +5c +24 +08 +48 +8b +6c +24 +10 +4c +8b +64 +24 +18 +4c +8b +6c +24 +20 +48 +83 +c4 +28 +c3 +0f +1f +00 +4d +85 +e4 +75 +41 +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +49 +89 +45 +00 +eb +ca +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +41 +c7 +45 +08 +01 +00 +00 +00 +e9 +65 +ff +ff +ff +ba +00 +00 +00 +00 +48 +89 +ee +31 +ff +31 +c0 +e8 +00 +00 +00 +00 +e9 +35 +ff +ff +ff +4a +8d +2c +23 +31 +db +0f +1f +40 +00 +48 +8b +3d +00 +00 +00 +00 +be +08 +00 +00 +00 +48 +ff +c3 +e8 +00 +00 +00 +00 +48 +0f +be +4d +ff +48 +8b +3d +00 +00 +00 +00 +31 +d2 +be +08 +00 +00 +00 +48 +ff +cd +e8 +00 +00 +00 +00 +49 +39 +dc +75 +cc +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +49 +89 +45 +00 +e9 +48 +ff +ff +ff +49 +8b +55 +00 +e9 +14 +ff +ff +ff +49 +8b +55 +00 +e9 +1b +ff +ff +ff +49 +8b +55 +00 +90 +e9 +21 +ff +ff +ff +66 +66 +2e +0f +1f +84 +00 +00 +00 +00 +00 +53 +48 +89 +fb +bf +10 +00 +00 +00 +ff +15 +00 +00 +00 +00 +48 +89 +18 +c7 +40 +08 +00 +00 +00 +00 +c6 +40 +0c +00 +5b +c3 +90 +48 +85 +ff +53 +48 +89 +fb +78 +07 +5b +eb +d4 +0f +1f +40 +00 +48 +8b +3d +00 +00 +00 +00 +48 +f7 +db +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +48 +89 +d9 +31 +d2 +be +20 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +48 +89 +fe +e8 +00 +00 +00 +00 +bf +10 +00 +00 +00 +ff +15 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +48 +89 +c3 +e8 +00 +00 +00 +00 +c7 +43 +08 +01 +00 +00 +00 +48 +89 +03 +48 +89 +d8 +c6 +43 +0c +00 +5b +c3 +66 +66 +66 +66 +66 +66 +2e +0f +1f +84 +00 +00 +00 +00 +00 +48 +89 +6c +24 +f8 +48 +89 +fd +48 +89 +5c +24 +f0 +bf +10 +00 +00 +00 +48 +83 +ec +18 +ff +15 +00 +00 +00 +00 +8b +55 +08 +48 +89 +c3 +85 +d2 +74 +21 +83 +fa +01 +74 +45 +0f +b6 +45 +0c +89 +53 +08 +88 +43 +0c +48 +89 +d8 +48 +8b +6c +24 +10 +48 +8b +5c +24 +08 +48 +83 +c4 +18 +c3 +48 +8b +45 +00 +89 +53 +08 +48 +89 +03 +0f +b6 +45 +0c +88 +43 +0c +48 +89 +d8 +48 +8b +6c +24 +10 +48 +8b +5c +24 +08 +48 +83 +c4 +18 +c3 +66 +0f +1f +44 +00 +00 +48 +8b +7d +00 +e8 +00 +00 +00 +00 +48 +89 +03 +0f +b6 +45 +0c +8b +55 +08 +88 +43 +0c +89 +53 +08 +48 +89 +d8 +48 +8b +6c +24 +10 +48 +8b +5c +24 +08 +48 +83 +c4 +18 +c3 +0f +1f +44 +00 +00 +53 +83 +7f +08 +01 +48 +89 +fb +74 +0e +48 +89 +df +4c +8b +1d +00 +00 +00 +00 +5b +41 +ff +e3 +48 +8b +3f +e8 +00 +00 +00 +00 +48 +89 +df +4c +8b +1d +00 +00 +00 +00 +5b +41 +ff +e3 +66 +90 +48 +89 +5c +24 +d0 +48 +89 +6c +24 +d8 +48 +89 +d3 +4c +89 +74 +24 +f0 +4c +89 +7c +24 +f8 +49 +89 +fe +4c +89 +64 +24 +e0 +4c +89 +6c +24 +e8 +48 +83 +ec +48 +83 +7f +08 +01 +89 +f5 +49 +89 +cf +c7 +44 +24 +14 +00 +00 +00 +00 +0f +84 +19 +01 +00 +00 +4c +8b +25 +00 +00 +00 +00 +4c +89 +e7 +e8 +00 +00 +00 +00 +49 +8b +0e +31 +d2 +be +20 +00 +00 +00 +4c +89 +e7 +e8 +00 +00 +00 +00 +45 +31 +ed +48 +85 +db +74 +2b +83 +7b +08 +01 +0f +84 +de +00 +00 +00 +4c +8b +2d +00 +00 +00 +00 +4c +89 +ef +e8 +00 +00 +00 +00 +48 +8b +0b +31 +d2 +be +20 +00 +00 +00 +4c +89 +ef +e8 +00 +00 +00 +00 +48 +85 +db +0f +94 +d2 +83 +fd +08 +0f +95 +d0 +84 +c2 +74 +14 +83 +fd +09 +0f +95 +d2 +83 +fd +12 +0f +95 +d0 +84 +c2 +0f +85 +ae +00 +00 +00 +83 +fd +1c +77 +09 +89 +e8 +ff +24 +c5 +00 +00 +00 +00 +ba +00 +00 +00 +00 +be +af +01 +00 +00 +bf +00 +00 +00 +00 +ff +15 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +83 +f8 +1f +7f +44 +41 +83 +7e +08 +01 +0f +84 +9d +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +31 +d2 +be +20 +00 +00 +00 +e8 +00 +00 +00 +00 +49 +89 +06 +48 +8b +5c +24 +18 +48 +8b +6c +24 +20 +4c +8b +64 +24 +28 +4c +8b +6c +24 +30 +4c +8b +74 +24 +38 +4c +8b +7c +24 +40 +48 +83 +c4 +48 +c3 +41 +83 +7e +08 +01 +74 +49 +48 +8b +3d +00 +00 +00 +00 +41 +c7 +46 +08 +01 +00 +00 +00 +e8 +00 +00 +00 +00 +49 +89 +06 +eb +bd +4c +8b +2b +e9 +3b +ff +ff +ff +4c +8b +27 +0f +1f +44 +00 +00 +e9 +fb +fe +ff +ff +ba +00 +00 +00 +00 +be +3f +01 +00 +00 +bf +00 +00 +00 +00 +ff +15 +00 +00 +00 +00 +e9 +38 +ff +ff +ff +90 +48 +8b +35 +00 +00 +00 +00 +49 +8b +3e +e8 +00 +00 +00 +00 +e9 +79 +ff +ff +ff +49 +8b +3e +e8 +00 +00 +00 +00 +41 +c7 +46 +08 +00 +00 +00 +00 +e9 +4e +ff +ff +ff +48 +8b +0d +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +4c +89 +ea +4c +89 +e6 +e8 +00 +00 +00 +00 +e9 +13 +ff +ff +ff +48 +8b +0d +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +4c +89 +ea +4c +89 +e6 +e8 +00 +00 +00 +00 +e9 +f5 +fe +ff +ff +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +4c +89 +e7 +e8 +00 +00 +00 +00 +89 +c6 +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +e9 +ce +fe +ff +ff +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +4c +89 +ee +4c +89 +e7 +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +89 +c6 +c1 +ee +1f +e8 +00 +00 +00 +00 +e9 +a1 +fe +ff +ff +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +4c +89 +ee +4c +89 +e7 +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +31 +f6 +85 +c0 +40 +0f +9f +d6 +e8 +00 +00 +00 +00 +e9 +71 +fe +ff +ff +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +4c +89 +ee +4c +89 +e7 +e8 +00 +00 +00 +00 +89 +c6 +e9 +74 +ff +ff +ff +ba +00 +00 +00 +00 +be +00 +00 +00 +00 +4c +89 +ff +31 +c0 +e8 +00 +00 +00 +00 +e9 +3a +fe +ff +ff +ba +00 +00 +00 +00 +be +00 +00 +00 +00 +4c +89 +ff +31 +c0 +e8 +00 +00 +00 +00 +e9 +21 +fe +ff +ff +48 +8b +3d +00 +00 +00 +00 +4c +89 +e6 +e8 +00 +00 +00 +00 +e9 +0d +fe +ff +ff +48 +8b +3d +00 +00 +00 +00 +48 +85 +ff +0f +84 +fd +fd +ff +ff +4c +89 +e6 +e8 +00 +00 +00 +00 +e9 +f0 +fd +ff +ff +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +4c +89 +e7 +e8 +00 +00 +00 +00 +85 +c0 +0f +84 +1f +02 +00 +00 +31 +f6 +e9 +ee +fe +ff +ff +48 +8b +3d +00 +00 +00 +00 +4c +89 +ea +4c +89 +e6 +e8 +00 +00 +00 +00 +e9 +b6 +fd +ff +ff +48 +8b +3d +00 +00 +00 +00 +48 +8d +4c +24 +14 +4c +89 +ea +4c +89 +e6 +e8 +00 +00 +00 +00 +e9 +9a +fd +ff +ff +48 +8b +3d +00 +00 +00 +00 +48 +8d +4c +24 +14 +4c +89 +ea +4c +89 +e6 +e8 +00 +00 +00 +00 +e9 +7e +fd +ff +ff +48 +8b +3d +00 +00 +00 +00 +4c +89 +ea +4c +89 +e6 +e8 +00 +00 +00 +00 +e9 +67 +fd +ff +ff +48 +8b +3d +00 +00 +00 +00 +4c +89 +ea +4c +89 +e6 +e8 +00 +00 +00 +00 +e9 +50 +fd +ff +ff +48 +8b +3d +00 +00 +00 +00 +4c +89 +ea +4c +89 +e6 +e8 +00 +00 +00 +00 +e9 +39 +fd +ff +ff +48 +8b +3d +00 +00 +00 +00 +4c +89 +e6 +4c +89 +ea +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +48 +89 +fe +e8 +00 +00 +00 +00 +e9 +13 +fd +ff +ff +8b +53 +08 +85 +d2 +0f +85 +6f +01 +00 +00 +48 +8b +3d +00 +00 +00 +00 +4c +89 +e6 +e8 +00 +00 +00 +00 +48 +8b +03 +48 +8b +3d +00 +00 +00 +00 +89 +c6 +e8 +00 +00 +00 +00 +e9 +e3 +fc +ff +ff +8b +43 +08 +85 +c0 +0f +85 +3f +01 +00 +00 +48 +8b +3d +00 +00 +00 +00 +4c +89 +e6 +e8 +00 +00 +00 +00 +48 +8b +03 +48 +8b +3d +00 +00 +00 +00 +89 +c6 +e8 +00 +00 +00 +00 +e9 +b3 +fc +ff +ff +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +4c +89 +e7 +e8 +00 +00 +00 +00 +85 +c0 +0f +85 +c6 +00 +00 +00 +be +01 +00 +00 +00 +e9 +ae +fd +ff +ff +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +4c +89 +ee +4c +89 +e7 +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +31 +f6 +85 +c0 +40 +0f +9e +d6 +e8 +00 +00 +00 +00 +e9 +5d +fc +ff +ff +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +4c +89 +ee +4c +89 +e7 +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +89 +c6 +f7 +d6 +c1 +ee +1f +e8 +00 +00 +00 +00 +e9 +2e +fc +ff +ff +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +4c +89 +ee +4c +89 +e7 +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +31 +f6 +85 +c0 +40 +0f +94 +d6 +e8 +00 +00 +00 +00 +e9 +fe +fb +ff +ff +ba +00 +00 +00 +00 +be +00 +00 +00 +00 +4c +89 +ff +31 +c0 +e8 +00 +00 +00 +00 +e9 +e5 +fb +ff +ff +48 +8b +3d +00 +00 +00 +00 +4c +89 +e6 +e8 +00 +00 +00 +00 +e9 +d1 +fb +ff +ff +4c +89 +ef +e8 +00 +00 +00 +00 +31 +f6 +85 +c0 +0f +85 +e0 +fc +ff +ff +be +01 +00 +00 +00 +e9 +d6 +fc +ff +ff +4c +89 +ef +e8 +00 +00 +00 +00 +85 +c0 +be +01 +00 +00 +00 +0f +84 +c1 +fc +ff +ff +31 +f6 +e9 +ba +fc +ff +ff +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +e9 +88 +fb +ff +ff +66 +66 +66 +66 +66 +2e +0f +1f +84 +00 +00 +00 +00 +00 +53 +83 +7f +08 +01 +48 +89 +fb +74 +09 +48 +c7 +03 +00 +00 +00 +00 +5b +c3 +48 +8b +3f +e8 +00 +00 +00 +00 +c7 +43 +08 +00 +00 +00 +00 +48 +c7 +03 +00 +00 +00 +00 +5b +c3 +0f +1f +44 +00 +00 +8b +4f +08 +85 +c9 +75 +0d +48 +83 +3f +00 +b8 +01 +00 +00 +00 +75 +02 +f3 +c3 +31 +c0 +c3 +66 +0f +1f +84 +00 +00 +00 +00 +00 +8b +77 +08 +85 +f6 +75 +0b +48 +83 +3f +01 +b8 +01 +00 +00 +00 +74 +02 +31 +c0 +f3 +c3 +66 +2e +0f +1f +84 +00 +00 +00 +00 +00 +48 +83 +ec +08 +83 +7f +08 +01 +74 +09 +31 +d2 +48 +83 +c4 +08 +89 +d0 +c3 +48 +8b +3f +e8 +00 +00 +00 +00 +85 +c0 +ba +01 +00 +00 +00 +74 +e6 +89 +d0 +48 +83 +c4 +08 +c3 +0f +1f +44 +00 +00 +44 +8b +47 +08 +45 +85 +c0 +75 +0a +31 +c0 +48 +83 +3f +00 +0f +95 +d0 +c3 +48 +8b +3f +e9 +00 +00 +00 +00 +0f +1f +44 +00 +00 +48 +83 +ec +08 +8b +47 +08 +85 +c0 +74 +25 +ff +c8 +74 +29 +ba +00 +00 +00 +00 +be +f5 +01 +00 +00 +bf +00 +00 +00 +00 +ff +15 +00 +00 +00 +00 +31 +c0 +48 +83 +c4 +08 +c3 +0f +1f +44 +00 +00 +48 +8b +07 +48 +83 +c4 +08 +c3 +48 +8b +3f +31 +d2 +be +20 +00 +00 +00 +48 +83 +c4 +08 +e9 +00 +00 +00 +00 +0f +1f +44 +00 +00 +53 +8b +47 +08 +48 +89 +fb +85 +c0 +74 +1d +ff +c8 +74 +31 +ba +00 +00 +00 +00 +be +16 +02 +00 +00 +bf +00 +00 +00 +00 +ff +15 +00 +00 +00 +00 +31 +c0 +5b +c3 +48 +8b +07 +85 +c0 +79 +f7 +5b +48 +b8 +ff +ff +ff +ff +ff +ff +ff +7f +c3 +0f +1f +44 +00 +00 +48 +8b +3f +e8 +00 +00 +00 +00 +85 +c0 +74 +e3 +48 +8b +33 +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +83 +f8 +1f +7e +0c +5b +48 +b8 +00 +00 +00 +00 +00 +00 +00 +80 +c3 +48 +8b +3d +00 +00 +00 +00 +31 +d2 +be +20 +00 +00 +00 +e8 +00 +00 +00 +00 +85 +c0 +78 +dd +5b +48 +f7 +d8 +c3 +66 +66 +2e +0f +1f +84 +00 +00 +00 +00 +00 +48 +89 +5c +24 +d0 +4c +89 +6c +24 +e8 +48 +89 +fb +4c +89 +74 +24 +f0 +4c +89 +7c +24 +f8 +49 +89 +f6 +48 +89 +6c +24 +d8 +4c +89 +64 +24 +e0 +48 +83 +ec +38 +83 +7f +08 +01 +49 +89 +d5 +41 +89 +cf +0f +84 +ad +00 +00 +00 +48 +8b +2d +00 +00 +00 +00 +48 +89 +ef +e8 +00 +00 +00 +00 +48 +8b +0b +31 +d2 +be +20 +00 +00 +00 +48 +89 +ef +e8 +00 +00 +00 +00 +49 +83 +fe +7f +b8 +01 +00 +00 +00 +77 +33 +4d +85 +ed +75 +57 +45 +85 +ff +7e +18 +48 +89 +ef +e8 +00 +00 +00 +00 +85 +c0 +75 +7b +31 +c0 +41 +83 +ff +01 +0f +94 +d0 +49 +29 +c6 +48 +89 +ef +e8 +00 +00 +00 +00 +4c +39 +f0 +0f +9c +d0 +0f +b6 +c0 +48 +8b +5c +24 +08 +48 +8b +6c +24 +10 +4c +8b +64 +24 +18 +4c +8b +6c +24 +20 +4c +8b +74 +24 +28 +4c +8b +7c +24 +30 +48 +83 +c4 +38 +c3 +66 +0f +1f +44 +00 +00 +48 +89 +ef +31 +db +e8 +00 +00 +00 +00 +41 +89 +c4 +0f +1f +00 +44 +89 +e6 +48 +89 +ef +48 +ff +c3 +e8 +00 +00 +00 +00 +49 +39 +dd +75 +ed +eb +84 +48 +85 +d2 +75 +47 +48 +8b +2f +0f +1f +00 +e9 +64 +ff +ff +ff +48 +8b +3d +00 +00 +00 +00 +48 +89 +ee +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +48 +89 +fe +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +49 +8d +56 +ff +48 +39 +d0 +0f +9c +d0 +0f +b6 +c0 +e9 +66 +ff +ff +ff +48 +8b +2d +00 +00 +00 +00 +48 +8b +37 +48 +89 +ef +e8 +00 +00 +00 +00 +e9 +11 +ff +ff +ff +0f +1f +84 +00 +00 +00 +00 +00 +48 +89 +5c +24 +d0 +4c +89 +64 +24 +e0 +48 +89 +fb +4c +89 +6c +24 +e8 +4c +89 +74 +24 +f0 +45 +89 +c4 +4c +89 +7c +24 +f8 +48 +89 +6c +24 +d8 +45 +31 +ff +48 +83 +ec +58 +45 +85 +c0 +49 +89 +d6 +48 +89 +74 +24 +10 +48 +89 +4c +24 +08 +44 +89 +4c +24 +04 +4c +8b +2d +00 +00 +00 +00 +0f +88 +23 +02 +00 +00 +4a +8d +04 +f5 +00 +00 +00 +00 +48 +3d +80 +00 +00 +00 +0f +87 +bf +01 +00 +00 +8b +6c +24 +60 +85 +ed +0f +85 +7b +01 +00 +00 +44 +8b +5c +24 +04 +45 +85 +db +0f +84 +d5 +00 +00 +00 +ba +00 +00 +00 +00 +be +33 +02 +00 +00 +bf +00 +00 +00 +00 +ff +15 +00 +00 +00 +00 +83 +7b +08 +01 +0f +84 +d0 +00 +00 +00 +48 +8b +2d +00 +00 +00 +00 +48 +89 +ef +e8 +00 +00 +00 +00 +48 +8b +0b +31 +d2 +be +20 +00 +00 +00 +48 +89 +ef +e8 +00 +00 +00 +00 +44 +8b +54 +24 +60 +4d +85 +ff +0f +95 +d3 +45 +85 +d2 +0f +95 +d0 +84 +d8 +0f +85 +b2 +00 +00 +00 +84 +db +44 +89 +e2 +0f +85 +61 +01 +00 +00 +44 +8b +44 +24 +08 +31 +c9 +48 +89 +ee +4c +89 +ef +e8 +00 +00 +00 +00 +48 +8d +74 +24 +24 +4c +89 +ef +e8 +00 +00 +00 +00 +44 +8b +4c +24 +04 +48 +89 +c3 +45 +85 +c9 +0f +84 +c4 +00 +00 +00 +ba +00 +00 +00 +00 +be +58 +02 +00 +00 +bf +00 +00 +00 +00 +ff +15 +00 +00 +00 +00 +48 +89 +df +ff +15 +00 +00 +00 +00 +48 +8b +5c +24 +28 +48 +8b +6c +24 +30 +4c +8b +64 +24 +38 +4c +8b +6c +24 +40 +4c +8b +74 +24 +48 +4c +8b +7c +24 +50 +48 +83 +c4 +58 +c3 +48 +8b +74 +24 +10 +44 +89 +f2 +4c +89 +ef +e8 +00 +00 +00 +00 +83 +7b +08 +01 +0f +85 +30 +ff +ff +ff +44 +8b +54 +24 +60 +4d +85 +ff +48 +8b +2b +0f +95 +d3 +45 +85 +d2 +0f +95 +d0 +84 +d8 +0f +84 +4e +ff +ff +ff +48 +8b +3d +00 +00 +00 +00 +48 +89 +ee +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +be +80 +00 +00 +00 +44 +29 +fe +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +85 +c0 +0f +85 +17 +ff +ff +ff +48 +8b +74 +24 +68 +ba +00 +00 +00 +00 +31 +ff +e8 +00 +00 +00 +00 +e9 +01 +ff +ff +ff +48 +8b +7c +24 +10 +4c +89 +f2 +48 +89 +c6 +e8 +00 +00 +00 +00 +e9 +3c +ff +ff +ff +48 +8b +74 +24 +08 +b9 +02 +00 +00 +00 +4c +89 +fa +48 +89 +df +e8 +b3 +fc +ff +ff +85 +c0 +0f +85 +68 +fe +ff +ff +48 +8b +4c +24 +08 +48 +8b +74 +24 +68 +ba +00 +00 +00 +00 +31 +ff +e8 +00 +00 +00 +00 +e9 +4d +fe +ff +ff +ba +00 +00 +00 +00 +be +29 +02 +00 +00 +bf +00 +00 +00 +00 +ff +15 +00 +00 +00 +00 +e9 +27 +fe +ff +ff +66 +0f +1f +44 +00 +00 +48 +89 +ef +e8 +00 +00 +00 +00 +4d +85 +ff +41 +89 +c4 +66 +90 +74 +15 +31 +db +44 +89 +e6 +48 +89 +ef +48 +ff +c3 +e8 +00 +00 +00 +00 +49 +39 +df +75 +ed +31 +d2 +e9 +71 +fe +ff +ff +66 +90 +44 +89 +c0 +f7 +d8 +4c +63 +f8 +e9 +d0 +fd +ff +ff +0f +1f +00 +48 +89 +5c +24 +d8 +48 +89 +6c +24 +e0 +48 +89 +fb +4c +89 +6c +24 +f0 +4c +89 +74 +24 +f8 +89 +d5 +4c +89 +64 +24 +e8 +48 +83 +ec +28 +8b +47 +08 +49 +89 +f6 +4c +8b +2d +00 +00 +00 +00 +85 +c0 +75 +5f +48 +83 +3f +00 +0f +84 +b3 +00 +00 +00 +4c +89 +ef +e8 +00 +00 +00 +00 +48 +8b +0b +31 +d2 +be +20 +00 +00 +00 +4c +89 +ef +e8 +00 +00 +00 +00 +85 +ed +75 +45 +4c +89 +ef +e8 +00 +00 +00 +00 +4c +8d +60 +01 +31 +c0 +4d +85 +e4 +4c +89 +f3 +75 +51 +80 +63 +ff +7f +48 +8b +1c +24 +48 +8b +6c +24 +08 +4c +8b +64 +24 +10 +4c +8b +6c +24 +18 +4c +8b +74 +24 +20 +48 +83 +c4 +28 +c3 +ff +c8 +75 +a7 +85 +ed +4c +8b +2f +74 +be +0f +1f +00 +4c +89 +ef +e8 +00 +00 +00 +00 +85 +c0 +75 +51 +4c +89 +ef +4c +89 +f3 +e8 +00 +00 +00 +00 +4c +8d +60 +02 +31 +c0 +4d +85 +e4 +74 +af +31 +ed +89 +ea +be +07 +00 +00 +00 +4c +89 +ef +e8 +00 +00 +00 +00 +48 +83 +c5 +07 +83 +c8 +80 +88 +03 +48 +ff +c3 +49 +39 +ec +77 +e0 +48 +89 +d8 +4c +29 +f0 +eb +85 +0f +1f +40 +00 +b8 +01 +00 +00 +00 +c6 +06 +00 +e9 +78 +ff +ff +ff +48 +8b +3d +00 +00 +00 +00 +4c +89 +ee +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +4c +8d +60 +02 +e9 +46 +ff +ff +ff +66 +66 +66 +66 +66 +66 +2e +0f +1f +84 +00 +00 +00 +00 +00 +48 +89 +5c +24 +e8 +48 +89 +6c +24 +f0 +48 +89 +fb +4c +89 +64 +24 +f8 +48 +83 +ec +18 +8b +47 +08 +41 +89 +f4 +48 +8b +2d +00 +00 +00 +00 +85 +c0 +0f +85 +89 +00 +00 +00 +48 +83 +3f +00 +ba +01 +00 +00 +00 +74 +68 +48 +89 +ef +e8 +00 +00 +00 +00 +48 +8b +0b +31 +d2 +be +20 +00 +00 +00 +48 +89 +ef +e8 +00 +00 +00 +00 +45 +85 +e4 +74 +6f +48 +89 +ef +e8 +00 +00 +00 +00 +85 +c0 +90 +74 +70 +48 +8b +3d +00 +00 +00 +00 +48 +89 +ee +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +8d +48 +08 +48 +89 +c8 +48 +ba +25 +49 +92 +24 +49 +92 +24 +49 +48 +f7 +ea +48 +89 +c8 +48 +c1 +f8 +3f +48 +d1 +fa +48 +29 +c2 +48 +8b +1c +24 +48 +8b +6c +24 +08 +48 +89 +d0 +4c +8b +64 +24 +10 +48 +83 +c4 +18 +c3 +ff +c8 +0f +85 +7a +ff +ff +ff +45 +85 +e4 +48 +8b +2f +75 +91 +48 +89 +ef +e8 +00 +00 +00 +00 +48 +8d +48 +07 +eb +af +48 +89 +ef +e8 +00 +00 +00 +00 +48 +8d +48 +08 +66 +90 +eb +9f +66 +66 +66 +66 +66 +2e +0f +1f +84 +00 +00 +00 +00 +00 +48 +89 +6c +24 +f0 +4c +89 +64 +24 +f8 +48 +89 +fd +48 +89 +5c +24 +e8 +48 +83 +ec +18 +8b +47 +08 +49 +89 +f4 +85 +c0 +74 +17 +ff +c8 +74 +3c +48 +8b +1c +24 +48 +8b +6c +24 +08 +4c +8b +64 +24 +10 +48 +83 +c4 +18 +c3 +0f +b6 +4f +0c +48 +8b +17 +be +00 +00 +00 +00 +4c +89 +e7 +48 +8b +1c +24 +48 +8b +6c +24 +08 +4c +8b +64 +24 +10 +31 +c0 +48 +83 +c4 +18 +e9 +00 +00 +00 +00 +90 +48 +8b +3f +e8 +00 +00 +00 +00 +0f +b6 +4d +0c +48 +89 +c3 +4c +89 +e7 +48 +89 +c2 +be +00 +00 +00 +00 +31 +c0 +e8 +00 +00 +00 +00 +48 +89 +df +4c +8b +1d +00 +00 +00 +00 +48 +8b +1c +24 +48 +8b +6c +24 +08 +4c +8b +64 +24 +10 +48 +83 +c4 +18 +41 +ff +e3 +41 +57 +41 +56 +41 +55 +41 +54 +55 +53 +48 +81 +ec +a8 +00 +00 +00 +e8 +00 +00 +00 +00 +85 +c0 +ba +01 +00 +00 +00 +74 +14 +48 +81 +c4 +a8 +00 +00 +00 +89 +d0 +5b +5d +41 +5c +41 +5d +41 +5e +41 +5f +c3 +48 +8d +6c +24 +30 +45 +31 +f6 +41 +bd +00 +00 +00 +00 +e8 +ca +ea +ff +ff +41 +bf +00 +00 +00 +00 +bf +00 +00 +00 +00 +31 +c0 +c6 +05 +00 +00 +00 +00 +00 +e8 +00 +00 +00 +00 +c7 +44 +24 +2c +00 +00 +00 +00 +48 +c7 +44 +24 +20 +00 +00 +00 +00 +48 +c7 +44 +24 +18 +00 +00 +00 +00 +e9 +8f +00 +00 +00 +4c +89 +e7 +e8 +aa +f1 +ff +ff +41 +8b +45 +f4 +ba +00 +00 +00 +00 +b9 +00 +00 +00 +00 +4d +8b +4d +00 +4d +8b +45 +f8 +be +00 +00 +00 +00 +85 +c0 +41 +8b +07 +48 +89 +1c +24 +48 +0f +44 +ca +85 +c0 +b8 +00 +00 +00 +00 +48 +0f +44 +d0 +bf +00 +00 +00 +00 +31 +c0 +bb +01 +00 +00 +00 +e8 +00 +00 +00 +00 +bf +46 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +8b +3d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +85 +db +0f +85 +fe +00 +00 +00 +41 +ff +c6 +01 +5c +24 +2c +48 +83 +44 +24 +18 +20 +49 +83 +c7 +20 +49 +83 +c5 +20 +48 +83 +44 +24 +20 +20 +41 +83 +fe +10 +0f +84 +19 +01 +00 +00 +49 +8b +7d +f8 +e8 +00 +00 +00 +00 +31 +f6 +48 +89 +c3 +48 +89 +c7 +e8 +5d +ed +ff +ff +48 +89 +df +49 +89 +c4 +ff +15 +00 +00 +00 +00 +41 +8b +55 +f4 +85 +d2 +0f +85 +95 +00 +00 +00 +41 +8b +75 +f0 +4c +89 +e7 +e8 +29 +fd +ff +ff +49 +3b +45 +00 +48 +89 +c3 +0f +85 +2a +ff +ff +ff +b8 +01 +00 +00 +00 +0f +1f +80 +00 +00 +00 +00 +c6 +44 +28 +ff +ff +48 +ff +c0 +48 +83 +f8 +65 +75 +f2 +41 +8b +17 +48 +89 +ee +4c +89 +e7 +e8 +c4 +fb +ff +ff +49 +3b +45 +00 +48 +89 +c3 +0f +84 +fe +00 +00 +00 +4c +89 +e7 +e8 +9f +f0 +ff +ff +48 +8b +44 +24 +18 +ba +00 +00 +00 +00 +4d +8b +4d +00 +b9 +00 +00 +00 +00 +be +00 +00 +00 +00 +4c +8b +00 +48 +8b +44 +24 +20 +8b +00 +85 +c0 +41 +8b +07 +48 +89 +1c +24 +48 +0f +44 +ca +85 +c0 +b8 +00 +00 +00 +00 +48 +0f +44 +d0 +e9 +e9 +fe +ff +ff +31 +c9 +31 +d2 +be +08 +00 +00 +00 +4c +89 +e7 +e8 +7f +f0 +ff +ff +e9 +55 +ff +ff +ff +31 +c0 +b9 +00 +00 +00 +00 +ba +00 +00 +00 +00 +be +00 +00 +00 +00 +bf +00 +00 +00 +00 +41 +ff +c6 +e8 +00 +00 +00 +00 +49 +83 +c7 +20 +01 +5c +24 +2c +48 +83 +44 +24 +18 +20 +49 +83 +c5 +20 +48 +83 +44 +24 +20 +20 +41 +83 +fe +10 +0f +85 +e7 +fe +ff +ff +e8 +65 +e9 +ff +ff +44 +89 +f6 +2b +74 +24 +2c +41 +bc +64 +00 +00 +00 +8b +54 +24 +2c +41 +b9 +00 +00 +00 +00 +b9 +10 +00 +00 +00 +bf +00 +00 +00 +00 +41 +89 +f0 +45 +0f +af +c4 +41 +8d +40 +0f +45 +85 +c0 +44 +0f +48 +c0 +31 +c0 +41 +c1 +f8 +04 +e8 +00 +00 +00 +00 +31 +d2 +83 +7c +24 +2c +00 +0f +95 +d2 +48 +81 +c4 +a8 +00 +00 +00 +5b +5d +41 +5c +41 +5d +41 +5e +41 +5f +89 +d0 +c3 +48 +85 +c0 +0f +84 +87 +00 +00 +00 +49 +8b +7d +08 +31 +f6 +b9 +01 +00 +00 +00 +0f +b6 +44 +0f +ff +38 +44 +29 +ff +b8 +01 +00 +00 +00 +0f +45 +f0 +85 +f6 +0f +94 +d2 +48 +39 +cb +0f +97 +d0 +48 +ff +c1 +84 +c2 +75 +dd +85 +f6 +74 +55 +4c +89 +e7 +bb +01 +00 +00 +00 +e8 +61 +ef +ff +ff +48 +8b +44 +24 +20 +ba +00 +00 +00 +00 +b9 +00 +00 +00 +00 +bf +00 +00 +00 +00 +be +00 +00 +00 +00 +8b +00 +85 +c0 +41 +8b +07 +48 +0f +44 +ca +85 +c0 +b8 +00 +00 +00 +00 +48 +0f +44 +d0 +48 +8b +44 +24 +18 +4c +8b +00 +31 +c0 +e8 +00 +00 +00 +00 +bf +46 +00 +00 +00 +e9 +b8 +fd +ff +ff +4c +89 +e7 +31 +db +e8 +0f +ef +ff +ff +bf +2e +00 +00 +00 +e9 +a4 +fd +ff +ff +00 +0c +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +9e +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +1a +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +1f +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +9e +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +2d +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +32 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +9e +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +40 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +76 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +45 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +9e +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +53 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +75 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +58 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +9e +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +64 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +74 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +69 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +9f +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +70 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +73 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +87 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +73 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +8c +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a1 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +93 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +74 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +98 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +9f +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +75 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +a4 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +ab +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +76 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +b0 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +b7 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +bc +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +c3 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +cc +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +f0 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a4 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +fb +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +05 +01 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +73 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +0d +01 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a5 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +19 +01 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +1e +01 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a6 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +2b +01 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +3e +01 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +63 +01 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +6f +01 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a8 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +91 +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +6a +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9d +01 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a9 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +d0 +01 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a4 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +db +01 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +ab +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +ed +01 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +f5 +01 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +ac +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +fc +01 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +01 +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a6 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +0e +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +21 +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +43 +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +4f +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a8 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +71 +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +6a +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7d +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a9 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +b0 +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a4 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +bb +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +ab +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +d1 +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +d9 +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +ae +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +e0 +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +e5 +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a6 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +f2 +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +05 +03 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +25 +03 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +31 +03 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a8 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +51 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +6a +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5d +03 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a9 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +90 +03 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a4 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +9b +03 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +ab +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +b1 +03 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +b9 +03 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b0 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +c0 +03 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +c5 +03 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a6 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +d2 +03 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +e5 +03 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +05 +04 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +11 +04 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a8 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +31 +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +6a +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3d +04 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a9 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +75 +04 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a4 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +80 +04 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +ab +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +c1 +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +91 +04 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +28 +05 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +2d +05 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a8 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +3a +05 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +3f +05 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +51 +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +6a +04 +00 +00 +30 +00 +00 +00 +00 +00 +00 +00 +5d +05 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a9 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +73 +05 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +80 +05 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b3 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +8c +05 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +9b +05 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b4 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +a7 +05 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +ac +05 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a8 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +eb +05 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a4 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +13 +06 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +1b +06 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +22 +06 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +31 +06 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b4 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +38 +06 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +40 +06 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +4b +06 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a4 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +52 +06 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +5a +06 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a8 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +98 +06 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a4 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +f5 +06 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a8 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +30 +07 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +ba +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +3c +07 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +46 +07 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +ba +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +92 +07 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +75 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +9a +07 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +ac +07 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b4 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +c5 +07 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +74 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +cd +07 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +df +07 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b4 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +11 +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +91 +04 +00 +00 +30 +00 +00 +00 +00 +00 +00 +00 +16 +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +6a +04 +00 +00 +68 +00 +00 +00 +00 +00 +00 +00 +20 +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +4b +00 +00 +00 +00 +00 +00 +00 +26 +08 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bc +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +2d +08 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +32 +08 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a6 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +4a +08 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +56 +08 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +8a +08 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +97 +08 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a8 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +b6 +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +30 +00 +00 +00 +00 +00 +00 +00 +c0 +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +4b +00 +00 +00 +00 +00 +00 +00 +c6 +08 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bc +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +d3 +08 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +db +08 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bd +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +e8 +08 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +fc +08 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +03 +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +76 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +0e +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +be +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +1a +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +76 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +21 +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +2c +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +be +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +38 +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +3d +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +45 +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bf +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +4e +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +53 +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c0 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +5f +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +64 +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +6f +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c1 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +76 +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +80 +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c0 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +8c +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +91 +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +9c +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c1 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +a3 +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +b0 +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c0 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +bc +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +c1 +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +cc +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +d8 +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +76 +00 +00 +00 +00 +00 +00 +00 +dd +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +62 +00 +00 +00 +00 +00 +00 +00 +e7 +09 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c3 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +f1 +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +7a +00 +00 +00 +00 +00 +00 +00 +f6 +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +62 +00 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c3 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +0c +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +14 +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +20 +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +31 +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bd +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +3d +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +42 +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +4a +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bf +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +60 +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +6b +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c4 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +77 +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +87 +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c5 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +93 +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +a3 +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c6 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +af +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +ba +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +c6 +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +d1 +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c8 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +dd +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +e8 +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c9 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +f4 +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +ff +0a +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +06 +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +0e +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +ca +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +25 +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +2d +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bd +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +37 +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +3e +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b3 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +55 +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +5d +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bd +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +67 +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +6e +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +cb +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +7a +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +7f +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +87 +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bf +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +a0 +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +a5 +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +b0 +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c1 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +b7 +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +c4 +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c0 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +d0 +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +d5 +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +e0 +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c1 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +e7 +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +f3 +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c0 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +ff +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +04 +0c +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +0f +0c +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +16 +0c +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +23 +0c +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c0 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +2d +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +5e +00 +00 +00 +00 +00 +00 +00 +32 +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +62 +00 +00 +00 +00 +00 +00 +00 +3c +0c +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +c3 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +48 +0c +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +50 +0c +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +ca +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +5d +0c +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bf +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +79 +0c +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bf +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +94 +0c +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +77 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +99 +0c +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +c7 +0c +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +37 +0d +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +d0 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +67 +0d +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +d2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +80 +0d +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +7c +00 +00 +00 +00 +00 +00 +00 +8a +0d +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +4b +00 +00 +00 +00 +00 +00 +00 +90 +0d +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bc +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +b7 +0d +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +d0 +0d +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +7c +00 +00 +00 +00 +00 +00 +00 +da +0d +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +4b +00 +00 +00 +00 +00 +00 +00 +e0 +0d +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bc +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +04 +0e +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +d5 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +12 +0e +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +17 +0e +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +1e +0e +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +23 +0e +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a6 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +3c +0e +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +48 +0e +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +9b +0e +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +a3 +0e +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +b5 +0e +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b4 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +d2 +0e +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +d5 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +ea +0e +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a6 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +26 +0f +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +d5 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +3a +0f +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +d7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +58 +0f +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +60 +0f +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +67 +0f +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +6f +0f +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +d8 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +76 +0f +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +7b +0f +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a6 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +94 +0f +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +9f +0f +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bd +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +f3 +0f +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +75 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +2c +10 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +a6 +00 +00 +00 +00 +00 +00 +00 +36 +10 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +4b +00 +00 +00 +00 +00 +00 +00 +3c +10 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bc +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +4d +10 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +74 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +55 +10 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +67 +10 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b4 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +9d +10 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +da +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +aa +10 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +db +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +c0 +10 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +a6 +00 +00 +00 +00 +00 +00 +00 +ca +10 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +4b +00 +00 +00 +00 +00 +00 +00 +d0 +10 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bc +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +d9 +10 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +ba +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +0c +11 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +dc +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +39 +11 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +41 +11 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bd +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +48 +11 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +55 +11 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b3 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +5c +11 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +61 +11 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bf +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +73 +11 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +6a +04 +00 +00 +b8 +00 +00 +00 +00 +00 +00 +00 +7a +11 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a9 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +8f +11 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +dd +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +c0 +11 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +6a +04 +00 +00 +90 +00 +00 +00 +00 +00 +00 +00 +c7 +11 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a9 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +d1 +11 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +90 +00 +00 +00 +00 +00 +00 +00 +db +11 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +4b +00 +00 +00 +00 +00 +00 +00 +e1 +11 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +bc +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +f4 +11 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +d5 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +0e +12 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +d7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +5b +12 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +75 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +71 +12 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +83 +12 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b4 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +8f +12 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a6 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +d4 +12 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +d5 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +e3 +12 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a6 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +ff +12 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +30 +13 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +38 +13 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +3f +13 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +44 +13 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a6 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +7f +13 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +75 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +9a +13 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +ac +13 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b4 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +b9 +13 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +d5 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +c5 +13 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +cd +13 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +d4 +13 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +78 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +d9 +13 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a6 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +28 +14 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a6 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +36 +14 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +a6 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +8f +14 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +c1 +00 +00 +00 +00 +00 +00 +00 +ab +14 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +e1 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +b4 +14 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +e2 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +c6 +14 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +ca +00 +00 +00 +00 +00 +00 +00 +cd +14 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +e1 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +d7 +14 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +ba +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +02 +15 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +e4 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +2d +15 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +7e +04 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +38 +15 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +7e +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3d +15 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +d2 +00 +00 +00 +00 +00 +00 +00 +45 +15 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +de +01 +00 +00 +fb +ff +ff +ff +ff +ff +ff +ff +4b +15 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +e5 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +5c +15 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +7e +04 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +65 +15 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +7e +04 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +7b +15 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +e7 +00 +00 +00 +00 +00 +00 +00 +80 +15 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +e5 +00 +00 +00 +00 +00 +00 +00 +8d +15 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +6a +04 +00 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +a1 +15 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +aa +15 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +d4 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b6 +15 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +e6 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +c0 +15 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +e7 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +c7 +15 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +e8 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +cc +15 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +e9 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +02 +16 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +ea +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +1b +16 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +ba +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +87 +16 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +e7 +00 +00 +00 +00 +00 +00 +00 +90 +16 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +e5 +00 +00 +00 +00 +00 +00 +00 +95 +16 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +6a +04 +00 +00 +20 +01 +00 +00 +00 +00 +00 +00 +b3 +16 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +d9 +16 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +d4 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +de +16 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +de +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e3 +16 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +eb +00 +00 +00 +00 +00 +00 +00 +e8 +16 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +de +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f0 +16 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +e6 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +2e +17 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +de +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +38 +17 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +f8 +00 +00 +00 +00 +00 +00 +00 +55 +17 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +e5 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +c5 +17 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +e7 +00 +00 +00 +00 +00 +00 +00 +ca +17 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +e5 +00 +00 +00 +00 +00 +00 +00 +cf +17 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +d4 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d4 +17 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +6a +04 +00 +00 +58 +01 +00 +00 +00 +00 +00 +00 +e6 +17 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +93 +04 +00 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +f9 +17 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +e6 +04 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +01 +11 +01 +10 +06 +12 +01 +11 +01 +25 +0e +13 +0b +03 +0e +1b +0e +00 +00 +02 +16 +00 +03 +0e +3a +0b +3b +0b +49 +13 +00 +00 +03 +24 +00 +03 +0e +0b +0b +3e +0b +00 +00 +04 +24 +00 +03 +08 +0b +0b +3e +0b +00 +00 +05 +0f +00 +0b +0b +00 +00 +06 +0f +00 +0b +0b +49 +13 +00 +00 +07 +13 +01 +01 +13 +03 +0e +0b +0b +3a +0b +3b +0b +00 +00 +08 +0d +00 +03 +0e +3a +0b +3b +05 +49 +13 +38 +0a +00 +00 +09 +26 +00 +49 +13 +00 +00 +0a +15 +01 +01 +13 +27 +0c +00 +00 +0b +05 +00 +49 +13 +00 +00 +0c +16 +00 +03 +0e +3a +0b +3b +0b +00 +00 +0d +0d +00 +03 +0e +3a +0b +3b +0b +49 +13 +38 +0a +00 +00 +0e +01 +01 +01 +13 +49 +13 +00 +00 +0f +21 +00 +49 +13 +2f +0b +00 +00 +10 +0d +00 +03 +08 +3a +0b +3b +0b +49 +13 +38 +0a +00 +00 +11 +04 +01 +01 +13 +0b +0b +3a +0b +3b +0b +00 +00 +12 +28 +00 +03 +0e +1c +0d +00 +00 +13 +13 +00 +03 +0e +3c +0c +00 +00 +14 +17 +01 +01 +13 +03 +08 +0b +0b +3a +0b +3b +0b +00 +00 +15 +0d +00 +03 +08 +3a +0b +3b +0b +49 +13 +00 +00 +16 +2e +00 +3f +0c +03 +0e +3a +0b +3b +0b +27 +0c +11 +01 +12 +01 +40 +06 +00 +00 +17 +2e +01 +01 +13 +3f +0c +03 +0e +3a +0b +3b +0b +27 +0c +49 +13 +11 +01 +12 +01 +40 +06 +00 +00 +18 +05 +00 +03 +08 +3a +0b +3b +0b +49 +13 +02 +06 +00 +00 +19 +05 +00 +03 +0e +3a +0b +3b +0b +49 +13 +02 +06 +00 +00 +1a +34 +00 +03 +0e +3a +0b +3b +0b +49 +13 +02 +06 +00 +00 +1b +34 +00 +03 +08 +3a +0b +3b +0b +49 +13 +02 +06 +00 +00 +1c +34 +00 +03 +0e +3a +0b +3b +0b +49 +13 +00 +00 +1d +2e +01 +01 +13 +3f +0c +03 +0e +3a +0b +3b +05 +27 +0c +49 +13 +11 +01 +12 +01 +40 +06 +00 +00 +1e +05 +00 +03 +0e +3a +0b +3b +05 +49 +13 +02 +06 +00 +00 +1f +34 +00 +03 +08 +3a +0b +3b +05 +49 +13 +02 +06 +00 +00 +20 +2e +01 +01 +13 +3f +0c +03 +0e +3a +0b +3b +05 +27 +0c +11 +01 +12 +01 +40 +06 +00 +00 +21 +05 +00 +03 +08 +3a +0b +3b +05 +49 +13 +02 +06 +00 +00 +22 +34 +00 +03 +0e +3a +0b +3b +05 +49 +13 +02 +0a +00 +00 +23 +2e +01 +01 +13 +3f +0c +03 +0e +3a +0b +3b +05 +27 +0c +49 +13 +11 +01 +12 +01 +40 +0a +00 +00 +24 +05 +00 +03 +0e +3a +0b +3b +05 +49 +13 +02 +0a +00 +00 +25 +0b +01 +55 +06 +00 +00 +26 +34 +00 +03 +08 +3a +0b +3b +05 +49 +13 +02 +0a +00 +00 +27 +0b +01 +01 +13 +11 +01 +12 +01 +00 +00 +28 +34 +00 +03 +0e +3a +0b +3b +05 +49 +13 +00 +00 +29 +0b +01 +11 +01 +12 +01 +00 +00 +2a +34 +00 +03 +0e +3a +0b +3b +05 +49 +13 +02 +06 +00 +00 +2b +2e +01 +01 +13 +03 +0e +3a +0b +3b +0b +27 +0c +49 +13 +20 +0b +00 +00 +2c +05 +00 +03 +0e +3a +0b +3b +0b +49 +13 +00 +00 +2d +34 +00 +03 +08 +3a +0b +3b +0b +49 +13 +00 +00 +2e +34 +00 +03 +08 +3a +0b +3b +0b +49 +13 +02 +0a +00 +00 +2f +1d +01 +31 +13 +11 +01 +12 +01 +00 +00 +30 +05 +00 +31 +13 +00 +00 +31 +34 +00 +31 +13 +02 +06 +00 +00 +32 +34 +00 +31 +13 +00 +00 +33 +34 +00 +31 +13 +02 +0a +00 +00 +34 +34 +00 +03 +0e +3a +0b +3b +0b +49 +13 +02 +0a +00 +00 +35 +21 +00 +49 +13 +2f +05 +00 +00 +36 +34 +00 +03 +0e +3a +0b +3b +0b +49 +13 +3f +0c +3c +0c +00 +00 +37 +15 +01 +01 +13 +27 +0c +49 +13 +00 +00 +38 +34 +00 +03 +0e +3a +0b +3b +05 +49 +13 +3f +0c +3c +0c +00 +00 +00 +4e +0f +00 +00 +02 +00 +00 +00 +00 +00 +08 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +05 +d6 +38 +00 +00 +00 +03 +00 +00 +00 +00 +08 +07 +04 +69 +6e +74 +00 +04 +05 +03 +00 +00 +00 +00 +08 +05 +03 +00 +00 +00 +00 +01 +08 +03 +00 +00 +00 +00 +02 +07 +03 +00 +00 +00 +00 +04 +07 +03 +00 +00 +00 +00 +01 +06 +03 +00 +00 +00 +00 +02 +05 +02 +00 +00 +00 +00 +08 +8f +46 +00 +00 +00 +02 +00 +00 +00 +00 +08 +90 +46 +00 +00 +00 +03 +00 +00 +00 +00 +08 +07 +05 +08 +06 +08 +95 +00 +00 +00 +03 +00 +00 +00 +00 +01 +06 +02 +00 +00 +00 +00 +06 +2e +a7 +00 +00 +00 +07 +43 +02 +00 +00 +00 +00 +00 +00 +d8 +06 +2e +08 +00 +00 +00 +00 +07 +0c +01 +3f +00 +00 +00 +02 +23 +00 +08 +00 +00 +00 +00 +07 +11 +01 +8f +00 +00 +00 +02 +23 +08 +08 +00 +00 +00 +00 +07 +12 +01 +8f +00 +00 +00 +02 +23 +10 +08 +00 +00 +00 +00 +07 +13 +01 +8f +00 +00 +00 +02 +23 +18 +08 +00 +00 +00 +00 +07 +14 +01 +8f +00 +00 +00 +02 +23 +20 +08 +00 +00 +00 +00 +07 +15 +01 +8f +00 +00 +00 +02 +23 +28 +08 +00 +00 +00 +00 +07 +16 +01 +8f +00 +00 +00 +02 +23 +30 +08 +00 +00 +00 +00 +07 +17 +01 +8f +00 +00 +00 +02 +23 +38 +08 +00 +00 +00 +00 +07 +18 +01 +8f +00 +00 +00 +02 +23 +40 +08 +00 +00 +00 +00 +07 +1a +01 +8f +00 +00 +00 +02 +23 +48 +08 +00 +00 +00 +00 +07 +1b +01 +8f +00 +00 +00 +02 +23 +50 +08 +00 +00 +00 +00 +07 +1c +01 +8f +00 +00 +00 +02 +23 +58 +08 +00 +00 +00 +00 +07 +1e +01 +af +02 +00 +00 +02 +23 +60 +08 +00 +00 +00 +00 +07 +20 +01 +b5 +02 +00 +00 +02 +23 +68 +08 +00 +00 +00 +00 +07 +22 +01 +3f +00 +00 +00 +02 +23 +70 +08 +00 +00 +00 +00 +07 +26 +01 +3f +00 +00 +00 +02 +23 +74 +08 +00 +00 +00 +00 +07 +28 +01 +70 +00 +00 +00 +02 +23 +78 +08 +00 +00 +00 +00 +07 +2c +01 +54 +00 +00 +00 +03 +23 +80 +01 +08 +00 +00 +00 +00 +07 +2d +01 +62 +00 +00 +00 +03 +23 +82 +01 +08 +00 +00 +00 +00 +07 +2e +01 +bb +02 +00 +00 +03 +23 +83 +01 +08 +00 +00 +00 +00 +07 +32 +01 +cb +02 +00 +00 +03 +23 +88 +01 +08 +00 +00 +00 +00 +07 +3b +01 +7b +00 +00 +00 +03 +23 +90 +01 +08 +00 +00 +00 +00 +07 +41 +01 +8d +00 +00 +00 +03 +23 +98 +01 +08 +00 +00 +00 +00 +07 +42 +01 +8d +00 +00 +00 +03 +23 +a0 +01 +08 +00 +00 +00 +00 +07 +44 +01 +3f +00 +00 +00 +03 +23 +a8 +01 +08 +00 +00 +00 +00 +07 +46 +01 +d1 +02 +00 +00 +03 +23 +ac +01 +00 +06 +08 +49 +02 +00 +00 +09 +4d +00 +00 +00 +06 +08 +4d +00 +00 +00 +06 +08 +5a +02 +00 +00 +09 +95 +00 +00 +00 +06 +08 +65 +02 +00 +00 +0a +71 +02 +00 +00 +01 +0b +8d +00 +00 +00 +00 +0c +00 +00 +00 +00 +07 +b0 +07 +af +02 +00 +00 +00 +00 +00 +00 +18 +07 +b6 +0d +00 +00 +00 +00 +07 +b7 +af +02 +00 +00 +02 +23 +00 +0d +00 +00 +00 +00 +07 +b8 +b5 +02 +00 +00 +02 +23 +08 +0d +00 +00 +00 +00 +07 +bc +3f +00 +00 +00 +02 +23 +10 +00 +06 +08 +78 +02 +00 +00 +06 +08 +a7 +00 +00 +00 +0e +cb +02 +00 +00 +95 +00 +00 +00 +0f +86 +00 +00 +00 +00 +00 +06 +08 +71 +02 +00 +00 +0e +e1 +02 +00 +00 +95 +00 +00 +00 +0f +86 +00 +00 +00 +2b +00 +06 +08 +9c +00 +00 +00 +02 +00 +00 +00 +00 +03 +5d +f2 +02 +00 +00 +07 +29 +03 +00 +00 +00 +00 +00 +00 +10 +03 +5d +10 +76 +61 +6c +00 +01 +31 +3e +04 +00 +00 +02 +23 +00 +0d +00 +00 +00 +00 +01 +32 +5f +04 +00 +00 +02 +23 +08 +0d +00 +00 +00 +00 +01 +33 +4d +00 +00 +00 +02 +23 +0c +00 +11 +e0 +03 +00 +00 +04 +03 +78 +12 +00 +00 +00 +00 +00 +12 +00 +00 +00 +00 +01 +12 +00 +00 +00 +00 +02 +12 +00 +00 +00 +00 +03 +12 +00 +00 +00 +00 +04 +12 +00 +00 +00 +00 +05 +12 +00 +00 +00 +00 +06 +12 +00 +00 +00 +00 +07 +12 +00 +00 +00 +00 +08 +12 +00 +00 +00 +00 +09 +12 +00 +00 +00 +00 +0a +12 +00 +00 +00 +00 +0b +12 +00 +00 +00 +00 +0c +12 +00 +00 +00 +00 +0d +12 +00 +00 +00 +00 +0e +12 +00 +00 +00 +00 +0f +12 +00 +00 +00 +00 +10 +12 +00 +00 +00 +00 +11 +12 +00 +00 +00 +00 +12 +12 +00 +00 +00 +00 +13 +12 +00 +00 +00 +00 +14 +12 +00 +00 +00 +00 +15 +12 +00 +00 +00 +00 +16 +12 +00 +00 +00 +00 +17 +12 +00 +00 +00 +00 +18 +12 +00 +00 +00 +00 +19 +12 +00 +00 +00 +00 +1a +12 +00 +00 +00 +00 +1b +12 +00 +00 +00 +00 +1c +00 +02 +00 +00 +00 +00 +03 +97 +29 +03 +00 +00 +06 +08 +e7 +02 +00 +00 +02 +00 +00 +00 +00 +04 +18 +5b +00 +00 +00 +02 +00 +00 +00 +00 +04 +31 +07 +04 +00 +00 +06 +08 +f1 +03 +00 +00 +11 +22 +04 +00 +00 +04 +04 +55 +12 +00 +00 +00 +00 +00 +12 +00 +00 +00 +00 +01 +00 +02 +00 +00 +00 +00 +04 +55 +0d +04 +00 +00 +02 +00 +00 +00 +00 +04 +d4 +38 +04 +00 +00 +13 +00 +00 +00 +00 +01 +14 +5f +04 +00 +00 +76 +61 +6c +00 +08 +01 +2e +15 +75 +6c +00 +01 +2f +38 +00 +00 +00 +15 +62 +76 +00 +01 +30 +fc +03 +00 +00 +00 +11 +74 +04 +00 +00 +04 +01 +32 +12 +00 +00 +00 +00 +00 +12 +00 +00 +00 +00 +01 +00 +07 +c7 +04 +00 +00 +00 +00 +00 +00 +20 +02 +27 +0d +00 +00 +00 +00 +02 +29 +3f +00 +00 +00 +02 +23 +00 +0d +00 +00 +00 +00 +02 +2c +3f +00 +00 +00 +02 +23 +04 +0d +00 +00 +00 +00 +02 +2f +54 +02 +00 +00 +02 +23 +08 +0d +00 +00 +00 +00 +02 +32 +38 +00 +00 +00 +02 +23 +10 +0d +00 +00 +00 +00 +02 +35 +43 +02 +00 +00 +02 +23 +18 +00 +02 +00 +00 +00 +00 +02 +36 +74 +04 +00 +00 +16 +01 +00 +00 +00 +00 +01 +41 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +16 +01 +00 +00 +00 +00 +01 +4c +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +5f +05 +00 +00 +01 +00 +00 +00 +00 +01 +57 +01 +eb +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +73 +74 +72 +00 +01 +56 +8f +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +00 +01 +56 +38 +00 +00 +00 +00 +00 +00 +00 +1a +00 +00 +00 +00 +01 +58 +eb +03 +00 +00 +00 +00 +00 +00 +00 +17 +b2 +05 +00 +00 +01 +00 +00 +00 +00 +01 +6d +01 +eb +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +73 +74 +72 +00 +01 +6c +8f +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +00 +01 +6c +38 +00 +00 +00 +00 +00 +00 +00 +1a +00 +00 +00 +00 +01 +6e +eb +03 +00 +00 +00 +00 +00 +00 +00 +17 +05 +06 +00 +00 +01 +00 +00 +00 +00 +01 +84 +01 +eb +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +73 +74 +72 +00 +01 +83 +8f +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +00 +01 +83 +38 +00 +00 +00 +00 +00 +00 +00 +1a +00 +00 +00 +00 +01 +85 +eb +03 +00 +00 +00 +00 +00 +00 +00 +17 +58 +06 +00 +00 +01 +00 +00 +00 +00 +01 +9b +01 +eb +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +73 +74 +72 +00 +01 +9a +8f +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +00 +01 +9a +38 +00 +00 +00 +00 +00 +00 +00 +1a +00 +00 +00 +00 +01 +9c +eb +03 +00 +00 +00 +00 +00 +00 +00 +17 +ba +06 +00 +00 +01 +00 +00 +00 +00 +01 +b3 +01 +eb +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +73 +74 +72 +00 +01 +b2 +54 +02 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +00 +01 +b2 +38 +00 +00 +00 +00 +00 +00 +00 +1a +00 +00 +00 +00 +01 +b4 +eb +03 +00 +00 +00 +00 +00 +00 +1b +6c +65 +6e +00 +01 +b5 +2d +00 +00 +00 +00 +00 +00 +00 +00 +17 +f8 +06 +00 +00 +01 +00 +00 +00 +00 +01 +e6 +01 +eb +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +69 +00 +01 +e5 +38 +00 +00 +00 +00 +00 +00 +00 +1c +00 +00 +00 +00 +01 +e7 +eb +03 +00 +00 +00 +17 +36 +07 +00 +00 +01 +00 +00 +00 +00 +01 +f2 +01 +eb +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +69 +00 +01 +f1 +46 +00 +00 +00 +00 +00 +00 +00 +1c +00 +00 +00 +00 +01 +f3 +eb +03 +00 +00 +00 +1d +7b +07 +00 +00 +01 +00 +00 +00 +00 +01 +07 +01 +01 +eb +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +06 +01 +7b +07 +00 +00 +00 +00 +00 +00 +1f +6e +00 +01 +08 +01 +eb +03 +00 +00 +00 +00 +00 +00 +00 +06 +08 +81 +07 +00 +00 +09 +e7 +02 +00 +00 +20 +b9 +07 +00 +00 +01 +00 +00 +00 +00 +01 +1a +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +19 +01 +eb +03 +00 +00 +00 +00 +00 +00 +00 +20 +4a +08 +00 +00 +01 +00 +00 +00 +00 +01 +24 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +61 +63 +63 +00 +01 +22 +01 +eb +03 +00 +00 +00 +00 +00 +00 +21 +6f +70 +00 +01 +22 +01 +e0 +03 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +22 +01 +eb +03 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +23 +01 +38 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +00 +01 +25 +01 +22 +04 +00 +00 +02 +77 +14 +1f +6f +70 +31 +00 +01 +26 +01 +fc +03 +00 +00 +00 +00 +00 +00 +1f +6f +70 +32 +00 +01 +26 +01 +fc +03 +00 +00 +00 +00 +00 +00 +00 +20 +7d +08 +00 +00 +01 +00 +00 +00 +00 +01 +c6 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +c5 +01 +eb +03 +00 +00 +00 +00 +00 +00 +00 +23 +b1 +08 +00 +00 +01 +00 +00 +00 +00 +01 +d0 +01 +01 +3f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +77 +00 +24 +00 +00 +00 +00 +01 +cf +01 +7b +07 +00 +00 +01 +55 +00 +23 +e5 +08 +00 +00 +01 +00 +00 +00 +00 +01 +d6 +01 +01 +3f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +77 +00 +24 +00 +00 +00 +00 +01 +d5 +01 +7b +07 +00 +00 +01 +55 +00 +1d +1c +09 +00 +00 +01 +00 +00 +00 +00 +01 +dc +01 +01 +3f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +db +01 +7b +07 +00 +00 +00 +00 +00 +00 +00 +23 +52 +09 +00 +00 +01 +00 +00 +00 +00 +01 +e2 +01 +01 +3f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +77 +00 +1e +00 +00 +00 +00 +01 +e1 +01 +7b +07 +00 +00 +00 +00 +00 +00 +00 +1d +89 +09 +00 +00 +01 +00 +00 +00 +00 +01 +ee +01 +01 +38 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +ed +01 +7b +07 +00 +00 +00 +00 +00 +00 +00 +1d +d3 +09 +00 +00 +01 +00 +00 +00 +00 +01 +fd +01 +01 +46 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +fc +01 +7b +07 +00 +00 +00 +00 +00 +00 +25 +00 +00 +00 +00 +26 +75 +6c +00 +01 +07 +02 +38 +00 +00 +00 +01 +50 +00 +00 +1d +8e +0a +00 +00 +01 +00 +00 +00 +00 +01 +62 +02 +01 +3f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +60 +02 +7b +07 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +60 +02 +2d +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +60 +02 +2d +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +61 +02 +3f +00 +00 +00 +00 +00 +00 +00 +1f +76 +61 +6c +00 +01 +63 +02 +fc +03 +00 +00 +00 +00 +00 +00 +27 +6b +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +00 +01 +76 +02 +3f +00 +00 +00 +00 +29 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2a +00 +00 +00 +00 +01 +7e +02 +3f +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +8c +0b +00 +00 +01 +00 +00 +00 +00 +01 +20 +02 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +1d +02 +7b +07 +00 +00 +00 +00 +00 +00 +21 +70 +74 +72 +00 +01 +1d +02 +4e +02 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +1e +02 +2d +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +1e +02 +2d +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +1e +02 +3f +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +1f +02 +3f +00 +00 +00 +00 +00 +00 +00 +24 +00 +00 +00 +00 +01 +1f +02 +3f +00 +00 +00 +03 +77 +e0 +00 +24 +00 +00 +00 +00 +01 +1f +02 +38 +00 +00 +00 +03 +77 +e8 +00 +1f +6f +70 +31 +00 +01 +21 +02 +fc +03 +00 +00 +00 +00 +00 +00 +1f +6f +70 +32 +00 +01 +21 +02 +fc +03 +00 +00 +00 +00 +00 +00 +1f +62 +75 +66 +00 +01 +22 +02 +4e +02 +00 +00 +00 +00 +00 +00 +26 +6c +65 +6e +00 +01 +23 +02 +5b +00 +00 +00 +02 +77 +24 +2a +00 +00 +00 +00 +01 +24 +02 +2d +00 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +00 +01 +25 +02 +3f +00 +00 +00 +00 +1d +1d +0c +00 +00 +01 +00 +00 +00 +00 +01 +8f +02 +01 +38 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +8e +02 +7b +07 +00 +00 +00 +00 +00 +00 +21 +70 +74 +72 +00 +01 +8e +02 +4e +02 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +8e +02 +3f +00 +00 +00 +00 +00 +00 +00 +1f +76 +61 +6c +00 +01 +90 +02 +fc +03 +00 +00 +00 +00 +00 +00 +1f +69 +00 +01 +91 +02 +38 +00 +00 +00 +00 +00 +00 +00 +2a +00 +00 +00 +00 +01 +91 +02 +38 +00 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +00 +01 +92 +02 +4e +02 +00 +00 +00 +1d +74 +0c +00 +00 +01 +00 +00 +00 +00 +01 +bd +02 +01 +38 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +bc +02 +7b +07 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +bc +02 +3f +00 +00 +00 +00 +00 +00 +00 +1f +76 +61 +6c +00 +01 +be +02 +fc +03 +00 +00 +00 +00 +00 +00 +00 +20 +c3 +0c +00 +00 +01 +00 +00 +00 +00 +01 +df +02 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +01 +de +02 +7b +07 +00 +00 +00 +00 +00 +00 +21 +66 +00 +01 +de +02 +e1 +02 +00 +00 +00 +00 +00 +00 +1f +73 +00 +01 +e0 +02 +4e +02 +00 +00 +00 +00 +00 +00 +00 +2b +20 +0d +00 +00 +00 +00 +00 +00 +02 +54 +01 +3f +00 +00 +00 +01 +2c +00 +00 +00 +00 +02 +53 +20 +0d +00 +00 +1c +00 +00 +00 +00 +02 +55 +8f +00 +00 +00 +1c +00 +00 +00 +00 +02 +56 +eb +03 +00 +00 +1c +00 +00 +00 +00 +02 +57 +38 +00 +00 +00 +2d +69 +00 +02 +57 +38 +00 +00 +00 +2d +6f +75 +74 +00 +02 +58 +26 +0d +00 +00 +2d +62 +61 +64 +00 +02 +59 +3f +00 +00 +00 +00 +06 +08 +c7 +04 +00 +00 +0e +36 +0d +00 +00 +4d +00 +00 +00 +0f +86 +00 +00 +00 +63 +00 +17 +e8 +0d +00 +00 +01 +00 +00 +00 +00 +02 +86 +01 +3f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +6e +66 +00 +02 +87 +3f +00 +00 +00 +02 +77 +2c +1c +00 +00 +00 +00 +02 +88 +3f +00 +00 +00 +1b +69 +00 +02 +89 +3f +00 +00 +00 +00 +00 +00 +00 +25 +00 +00 +00 +00 +1a +00 +00 +00 +00 +02 +92 +3f +00 +00 +00 +00 +00 +00 +00 +2f +c3 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +d4 +0c +00 +00 +25 +00 +00 +00 +00 +31 +df +0c +00 +00 +00 +00 +00 +00 +31 +ea +0c +00 +00 +00 +00 +00 +00 +31 +f5 +0c +00 +00 +00 +00 +00 +00 +32 +00 +0d +00 +00 +33 +09 +0d +00 +00 +02 +77 +30 +31 +14 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +01 +37 +fc +03 +00 +00 +09 +03 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +01 +3a +fc +03 +00 +00 +09 +03 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +01 +3a +fc +03 +00 +00 +09 +03 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +01 +3a +fc +03 +00 +00 +09 +03 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +01 +3a +fc +03 +00 +00 +09 +03 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +01 +3c +66 +0e +00 +00 +09 +03 +00 +00 +00 +00 +00 +00 +00 +00 +06 +08 +2d +04 +00 +00 +0e +7c +0e +00 +00 +c7 +04 +00 +00 +0f +86 +00 +00 +00 +0f +00 +34 +00 +00 +00 +00 +02 +38 +6c +0e +00 +00 +09 +03 +00 +00 +00 +00 +00 +00 +00 +00 +0e +a2 +0e +00 +00 +95 +00 +00 +00 +35 +86 +00 +00 +00 +e7 +03 +00 +34 +00 +00 +00 +00 +02 +4f +91 +0e +00 +00 +09 +03 +00 +00 +00 +00 +00 +00 +00 +00 +0e +c7 +0e +00 +00 +95 +00 +00 +00 +0f +86 +00 +00 +00 +63 +00 +34 +00 +00 +00 +00 +02 +50 +b7 +0e +00 +00 +09 +03 +00 +00 +00 +00 +00 +00 +00 +00 +36 +00 +00 +00 +00 +06 +8e +b5 +02 +00 +00 +01 +01 +36 +00 +00 +00 +00 +06 +8f +b5 +02 +00 +00 +01 +01 +37 +06 +0f +00 +00 +01 +8d +00 +00 +00 +0b +2d +00 +00 +00 +00 +38 +00 +00 +00 +00 +03 +17 +01 +14 +0f +00 +00 +01 +01 +06 +08 +f6 +0e +00 +00 +38 +00 +00 +00 +00 +03 +32 +01 +5f +02 +00 +00 +01 +01 +0a +3e +0f +00 +00 +01 +0b +54 +02 +00 +00 +0b +5b +00 +00 +00 +0b +54 +02 +00 +00 +00 +36 +00 +00 +00 +00 +09 +3f +4b +0f +00 +00 +01 +01 +06 +08 +28 +0f +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +9b +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +97 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +1b +18 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +ee +06 +00 +00 +00 +00 +00 +00 +25 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +34 +02 +00 +00 +00 +00 +00 +00 +29 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +9f +02 +00 +00 +00 +00 +00 +00 +39 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +8d +04 +00 +00 +00 +00 +00 +00 +47 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +5f +05 +00 +00 +00 +00 +00 +00 +4e +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +01 +06 +00 +00 +00 +00 +00 +00 +55 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +8c +06 +00 +00 +00 +00 +00 +00 +5c +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +ac +00 +00 +00 +00 +00 +00 +00 +63 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +80 +06 +00 +00 +00 +00 +00 +00 +6a +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +11 +01 +00 +00 +00 +00 +00 +00 +71 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +59 +06 +00 +00 +00 +00 +00 +00 +7c +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +33 +07 +00 +00 +00 +00 +00 +00 +87 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +8d +04 +00 +00 +00 +00 +00 +00 +96 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +29 +05 +00 +00 +00 +00 +00 +00 +9d +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +e1 +06 +00 +00 +00 +00 +00 +00 +ac +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +bf +05 +00 +00 +00 +00 +00 +00 +b4 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +c6 +00 +00 +00 +00 +00 +00 +00 +c3 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +a8 +03 +00 +00 +00 +00 +00 +00 +d2 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +2e +05 +00 +00 +00 +00 +00 +00 +e1 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +b5 +02 +00 +00 +00 +00 +00 +00 +f0 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +23 +03 +00 +00 +00 +00 +00 +00 +ff +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +21 +06 +00 +00 +00 +00 +00 +00 +0e +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +9e +00 +00 +00 +00 +00 +00 +00 +1d +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +46 +07 +00 +00 +00 +00 +00 +00 +2c +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +5a +00 +00 +00 +00 +00 +00 +00 +3b +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +32 +04 +00 +00 +00 +00 +00 +00 +4a +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +6f +02 +00 +00 +00 +00 +00 +00 +59 +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +cd +02 +00 +00 +00 +00 +00 +00 +68 +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +f7 +00 +00 +00 +00 +00 +00 +00 +77 +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +c6 +06 +00 +00 +00 +00 +00 +00 +86 +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +97 +02 +00 +00 +00 +00 +00 +00 +95 +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +e6 +06 +00 +00 +00 +00 +00 +00 +a4 +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +b3 +05 +00 +00 +00 +00 +00 +00 +b3 +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +18 +07 +00 +00 +00 +00 +00 +00 +c3 +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +c1 +04 +00 +00 +00 +00 +00 +00 +d3 +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +1e +00 +00 +00 +00 +00 +00 +00 +e3 +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +ad +05 +00 +00 +00 +00 +00 +00 +f3 +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +88 +02 +00 +00 +00 +00 +00 +00 +03 +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +7f +04 +00 +00 +00 +00 +00 +00 +13 +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +86 +04 +00 +00 +00 +00 +00 +00 +23 +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +60 +03 +00 +00 +00 +00 +00 +00 +33 +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +3d +07 +00 +00 +00 +00 +00 +00 +72 +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +4f +00 +00 +00 +00 +00 +00 +00 +7d +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +18 +04 +00 +00 +00 +00 +00 +00 +85 +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +da +02 +00 +00 +00 +00 +00 +00 +93 +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +c8 +05 +00 +00 +00 +00 +00 +00 +a1 +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +93 +01 +00 +00 +00 +00 +00 +00 +e8 +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +69 +07 +00 +00 +00 +00 +00 +00 +f7 +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +69 +07 +00 +00 +00 +00 +00 +00 +0d +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +e8 +05 +00 +00 +00 +00 +00 +00 +1b +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +8c +00 +00 +00 +00 +00 +00 +00 +32 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +e9 +02 +00 +00 +00 +00 +00 +00 +38 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +13 +05 +00 +00 +00 +00 +00 +00 +3e +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +8d +05 +00 +00 +00 +00 +00 +00 +44 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +32 +03 +00 +00 +00 +00 +00 +00 +4a +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +66 +00 +00 +00 +00 +00 +00 +00 +50 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +e7 +03 +00 +00 +00 +00 +00 +00 +56 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +53 +07 +00 +00 +00 +00 +00 +00 +5c +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +4e +03 +00 +00 +00 +00 +00 +00 +62 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +6d +05 +00 +00 +00 +00 +00 +00 +68 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +40 +03 +00 +00 +00 +00 +00 +00 +6e +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +f2 +04 +00 +00 +00 +00 +00 +00 +74 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +46 +06 +00 +00 +00 +00 +00 +00 +7a +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +f9 +03 +00 +00 +00 +00 +00 +00 +80 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +cc +03 +00 +00 +00 +00 +00 +00 +86 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +b3 +06 +00 +00 +00 +00 +00 +00 +8c +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +57 +04 +00 +00 +00 +00 +00 +00 +92 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +d0 +04 +00 +00 +00 +00 +00 +00 +98 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +24 +07 +00 +00 +00 +00 +00 +00 +9e +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +cb +01 +00 +00 +00 +00 +00 +00 +a4 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +9b +03 +00 +00 +00 +00 +00 +00 +aa +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +d5 +00 +00 +00 +00 +00 +00 +00 +b0 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +0b +07 +00 +00 +00 +00 +00 +00 +b6 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +66 +03 +00 +00 +00 +00 +00 +00 +bc +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +b9 +00 +00 +00 +00 +00 +00 +00 +c2 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +fb +01 +00 +00 +00 +00 +00 +00 +c8 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +40 +01 +00 +00 +00 +00 +00 +00 +ce +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +1b +01 +00 +00 +00 +00 +00 +00 +d4 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +59 +01 +00 +00 +00 +00 +00 +00 +da +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +e1 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +ff +04 +00 +00 +00 +00 +00 +00 +f2 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +52 +05 +00 +00 +00 +00 +00 +00 +fd +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +51 +01 +00 +00 +00 +00 +00 +00 +16 +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +2f +06 +00 +00 +00 +00 +00 +00 +1c +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +2d +04 +00 +00 +00 +00 +00 +00 +23 +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +61 +07 +00 +00 +00 +00 +00 +00 +2e +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +61 +06 +00 +00 +00 +00 +00 +00 +39 +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +61 +06 +00 +00 +00 +00 +00 +00 +68 +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +6c +04 +00 +00 +00 +00 +00 +00 +6e +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +ab +02 +00 +00 +00 +00 +00 +00 +79 +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +9f +04 +00 +00 +00 +00 +00 +00 +81 +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +a6 +02 +00 +00 +00 +00 +00 +00 +8f +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +65 +04 +00 +00 +00 +00 +00 +00 +9d +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +aa +04 +00 +00 +00 +00 +00 +00 +ab +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +0f +06 +00 +00 +00 +00 +00 +00 +b9 +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +f4 +01 +00 +00 +00 +00 +00 +00 +c8 +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +9f +04 +00 +00 +00 +00 +00 +00 +d4 +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +40 +04 +00 +00 +00 +00 +00 +00 +db +04 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e3 +04 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +79 +00 +00 +00 +00 +00 +00 +00 +eb +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f1 +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +e0 +01 +00 +00 +00 +00 +00 +00 +f8 +04 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +08 +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +4c +00 +00 +00 +00 +00 +00 +00 +12 +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +84 +03 +00 +00 +00 +00 +00 +00 +1d +05 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +25 +05 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +a6 +01 +00 +00 +00 +00 +00 +00 +2d +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +98 +00 +00 +00 +00 +00 +00 +00 +3c +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +20 +01 +00 +00 +00 +00 +00 +00 +41 +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +17 +06 +00 +00 +00 +00 +00 +00 +4b +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +7c +01 +00 +00 +00 +00 +00 +00 +50 +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +5a +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +d8 +01 +00 +00 +00 +00 +00 +00 +65 +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +29 +01 +00 +00 +00 +00 +00 +00 +70 +05 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +b0 +01 +00 +00 +00 +00 +00 +00 +78 +05 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +86 +02 +00 +00 +00 +00 +00 +00 +80 +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +34 +02 +00 +00 +00 +00 +00 +00 +8f +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +bc +02 +00 +00 +00 +00 +00 +00 +94 +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +17 +06 +00 +00 +00 +00 +00 +00 +9e +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +18 +03 +00 +00 +00 +00 +00 +00 +a3 +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +ad +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +74 +03 +00 +00 +00 +00 +00 +00 +b8 +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +32 +00 +00 +00 +00 +00 +00 +00 +c3 +05 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +90 +02 +00 +00 +00 +00 +00 +00 +cb +05 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +66 +03 +00 +00 +00 +00 +00 +00 +d3 +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +bd +03 +00 +00 +00 +00 +00 +00 +e2 +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +45 +04 +00 +00 +00 +00 +00 +00 +e7 +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +17 +06 +00 +00 +00 +00 +00 +00 +f1 +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +a1 +04 +00 +00 +00 +00 +00 +00 +f6 +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +fd +04 +00 +00 +00 +00 +00 +00 +0b +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +50 +02 +00 +00 +00 +00 +00 +00 +16 +06 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +70 +03 +00 +00 +00 +00 +00 +00 +1e +06 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +46 +04 +00 +00 +00 +00 +00 +00 +26 +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +46 +05 +00 +00 +00 +00 +00 +00 +35 +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +ce +05 +00 +00 +00 +00 +00 +00 +3a +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +17 +06 +00 +00 +00 +00 +00 +00 +44 +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +2a +06 +00 +00 +00 +00 +00 +00 +49 +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +53 +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +86 +06 +00 +00 +00 +00 +00 +00 +5e +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +f9 +02 +00 +00 +00 +00 +00 +00 +69 +06 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +50 +04 +00 +00 +00 +00 +00 +00 +71 +06 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +d5 +05 +00 +00 +00 +00 +00 +00 +79 +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +cf +06 +00 +00 +00 +00 +00 +00 +88 +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +2f +07 +00 +00 +00 +00 +00 +00 +8d +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +17 +06 +00 +00 +00 +00 +00 +00 +97 +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +8b +07 +00 +00 +00 +00 +00 +00 +9c +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +a6 +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +e7 +07 +00 +00 +00 +00 +00 +00 +b5 +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +1d +08 +00 +00 +00 +00 +00 +00 +c0 +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +ad +01 +00 +00 +00 +00 +00 +00 +cb +06 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +e0 +05 +00 +00 +00 +00 +00 +00 +d3 +06 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +ff +05 +00 +00 +00 +00 +00 +00 +db +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +8c +08 +00 +00 +00 +00 +00 +00 +e8 +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +d8 +08 +00 +00 +00 +00 +00 +00 +ed +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +fe +06 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +08 +02 +00 +00 +00 +00 +00 +00 +09 +07 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +11 +07 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +71 +06 +00 +00 +00 +00 +00 +00 +19 +07 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +0e +09 +00 +00 +00 +00 +00 +00 +26 +07 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +82 +09 +00 +00 +00 +00 +00 +00 +2b +07 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +3c +07 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +67 +01 +00 +00 +00 +00 +00 +00 +48 +07 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +80 +06 +00 +00 +00 +00 +00 +00 +50 +07 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +1b +07 +00 +00 +00 +00 +00 +00 +58 +07 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +de +09 +00 +00 +00 +00 +00 +00 +5d +07 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +68 +07 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +7a +0a +00 +00 +00 +00 +00 +00 +76 +07 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +d6 +0a +00 +00 +00 +00 +00 +00 +8c +07 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +d4 +05 +00 +00 +00 +00 +00 +00 +94 +07 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +20 +07 +00 +00 +00 +00 +00 +00 +9c +07 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +4e +07 +00 +00 +00 +00 +00 +00 +a4 +07 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +1f +0b +00 +00 +00 +00 +00 +00 +a9 +07 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +b4 +07 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +93 +0b +00 +00 +00 +00 +00 +00 +bf +07 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +07 +04 +00 +00 +00 +00 +00 +00 +c7 +07 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +50 +07 +00 +00 +00 +00 +00 +00 +cf +07 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +a2 +0c +00 +00 +00 +00 +00 +00 +d7 +07 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +02 +0c +00 +00 +00 +00 +00 +00 +e7 +07 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +64 +0c +00 +00 +00 +00 +00 +00 +f6 +07 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +d3 +0c +00 +00 +00 +00 +00 +00 +fb +07 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +67 +02 +00 +00 +00 +00 +00 +00 +06 +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +f8 +10 +00 +00 +00 +00 +00 +00 +0b +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +17 +06 +00 +00 +00 +00 +00 +00 +16 +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +41 +11 +00 +00 +00 +00 +00 +00 +1b +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +da +01 +00 +00 +00 +00 +00 +00 +35 +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +8a +11 +00 +00 +00 +00 +00 +00 +45 +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +d3 +11 +00 +00 +00 +00 +00 +00 +50 +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +b0 +04 +00 +00 +00 +00 +00 +00 +58 +08 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +b0 +0c +00 +00 +00 +00 +00 +00 +60 +08 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +db +0c +00 +00 +00 +00 +00 +00 +68 +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +1c +12 +00 +00 +00 +00 +00 +00 +6d +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +78 +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +90 +12 +00 +00 +00 +00 +00 +00 +83 +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +de +04 +00 +00 +00 +00 +00 +00 +8f +08 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +e0 +0c +00 +00 +00 +00 +00 +00 +97 +08 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +f7 +0c +00 +00 +00 +00 +00 +00 +a3 +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +b7 +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +ed +05 +00 +00 +00 +00 +00 +00 +c3 +08 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +cb +08 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +16 +0d +00 +00 +00 +00 +00 +00 +d7 +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +eb +08 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +9f +06 +00 +00 +00 +00 +00 +00 +f7 +08 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +20 +0d +00 +00 +00 +00 +00 +00 +ff +08 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +4b +0d +00 +00 +00 +00 +00 +00 +07 +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +ec +12 +00 +00 +00 +00 +00 +00 +0c +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +17 +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +60 +13 +00 +00 +00 +00 +00 +00 +22 +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +73 +03 +00 +00 +00 +00 +00 +00 +2e +09 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +50 +0d +00 +00 +00 +00 +00 +00 +36 +09 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +6b +0d +00 +00 +00 +00 +00 +00 +42 +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +4d +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +83 +13 +00 +00 +00 +00 +00 +00 +58 +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +1f +02 +00 +00 +00 +00 +00 +00 +64 +09 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +70 +0d +00 +00 +00 +00 +00 +00 +6c +09 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +bb +0d +00 +00 +00 +00 +00 +00 +74 +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +a6 +13 +00 +00 +00 +00 +00 +00 +79 +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +84 +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +42 +14 +00 +00 +00 +00 +00 +00 +8f +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +cd +06 +00 +00 +00 +00 +00 +00 +9b +09 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +c0 +0d +00 +00 +00 +00 +00 +00 +a3 +09 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +55 +0e +00 +00 +00 +00 +00 +00 +ab +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +78 +14 +00 +00 +00 +00 +00 +00 +b0 +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +bb +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +3c +15 +00 +00 +00 +00 +00 +00 +c0 +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d9 +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +3b +05 +00 +00 +00 +00 +00 +00 +e5 +09 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +60 +0e +00 +00 +00 +00 +00 +00 +ed +09 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +a8 +0f +00 +00 +00 +00 +00 +00 +f5 +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +d1 +15 +00 +00 +00 +00 +00 +00 +fa +09 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +05 +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +31 +16 +00 +00 +00 +00 +00 +00 +0a +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +a8 +01 +00 +00 +00 +00 +00 +00 +15 +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +d9 +16 +00 +00 +00 +00 +00 +00 +1a +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +3f +06 +00 +00 +00 +00 +00 +00 +25 +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +35 +17 +00 +00 +00 +00 +00 +00 +2a +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +35 +06 +00 +00 +00 +00 +00 +00 +35 +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +dd +17 +00 +00 +00 +00 +00 +00 +45 +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +39 +18 +00 +00 +00 +00 +00 +00 +4e +0a +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +20 +0f +00 +00 +00 +00 +00 +00 +56 +0a +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +45 +0f +00 +00 +00 +00 +00 +00 +5f +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +7f +02 +00 +00 +00 +00 +00 +00 +6c +0a +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +55 +0f +00 +00 +00 +00 +00 +00 +74 +0a +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +91 +0f +00 +00 +00 +00 +00 +00 +7d +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +90 +02 +00 +00 +00 +00 +00 +00 +88 +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +95 +18 +00 +00 +00 +00 +00 +00 +94 +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +7d +01 +00 +00 +00 +00 +00 +00 +9c +0a +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +b0 +0f +00 +00 +00 +00 +00 +00 +a4 +0a +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +2d +12 +00 +00 +00 +00 +00 +00 +ac +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +04 +19 +00 +00 +00 +00 +00 +00 +b1 +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +bc +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +66 +19 +00 +00 +00 +00 +00 +00 +cc +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +d5 +19 +00 +00 +00 +00 +00 +00 +d1 +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +e0 +02 +00 +00 +00 +00 +00 +00 +dc +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +0c +1a +00 +00 +00 +00 +00 +00 +e1 +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +cd +00 +00 +00 +00 +00 +00 +00 +ec +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +55 +1a +00 +00 +00 +00 +00 +00 +f1 +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +c5 +01 +00 +00 +00 +00 +00 +00 +fc +0a +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +b4 +1a +00 +00 +00 +00 +00 +00 +01 +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +c3 +02 +00 +00 +00 +00 +00 +00 +0c +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +36 +1b +00 +00 +00 +00 +00 +00 +11 +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +78 +01 +00 +00 +00 +00 +00 +00 +21 +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +17 +06 +00 +00 +00 +00 +00 +00 +3c +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +6d +1b +00 +00 +00 +00 +00 +00 +4c +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +a3 +1b +00 +00 +00 +00 +00 +00 +5c +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +ec +1b +00 +00 +00 +00 +00 +00 +70 +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +3f +06 +00 +00 +00 +00 +00 +00 +7b +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +22 +1c +00 +00 +00 +00 +00 +00 +80 +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +7f +02 +00 +00 +00 +00 +00 +00 +92 +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +b5 +03 +00 +00 +00 +00 +00 +00 +9e +0b +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +30 +12 +00 +00 +00 +00 +00 +00 +a6 +0b +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +51 +13 +00 +00 +00 +00 +00 +00 +ae +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +58 +1c +00 +00 +00 +00 +00 +00 +b3 +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +be +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +b8 +1c +00 +00 +00 +00 +00 +00 +ce +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +3a +1d +00 +00 +00 +00 +00 +00 +d3 +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +a6 +02 +00 +00 +00 +00 +00 +00 +de +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +f5 +1d +00 +00 +00 +00 +00 +00 +ee +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +64 +1e +00 +00 +00 +00 +00 +00 +fc +0b +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +9a +1e +00 +00 +00 +00 +00 +00 +01 +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +a8 +01 +00 +00 +00 +00 +00 +00 +0c +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +d0 +1e +00 +00 +00 +00 +00 +00 +11 +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +95 +00 +00 +00 +00 +00 +00 +00 +23 +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +74 +00 +00 +00 +00 +00 +00 +00 +2f +0c +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +60 +13 +00 +00 +00 +00 +00 +00 +37 +0c +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +42 +14 +00 +00 +00 +00 +00 +00 +3f +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +19 +1f +00 +00 +00 +00 +00 +00 +44 +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +4f +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +79 +1f +00 +00 +00 +00 +00 +00 +54 +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +a6 +02 +00 +00 +00 +00 +00 +00 +5f +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +d5 +1f +00 +00 +00 +00 +00 +00 +6f +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +31 +20 +00 +00 +00 +00 +00 +00 +7a +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +7b +05 +00 +00 +00 +00 +00 +00 +82 +0c +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +50 +14 +00 +00 +00 +00 +00 +00 +8a +0c +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +f0 +14 +00 +00 +00 +00 +00 +00 +92 +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +67 +20 +00 +00 +00 +00 +00 +00 +97 +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +a2 +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +03 +21 +00 +00 +00 +00 +00 +00 +b0 +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +5f +21 +00 +00 +00 +00 +00 +00 +be +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +e1 +21 +00 +00 +00 +00 +00 +00 +c8 +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +d5 +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +1c +06 +00 +00 +00 +00 +00 +00 +e0 +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +9b +05 +00 +00 +00 +00 +00 +00 +eb +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +68 +05 +00 +00 +00 +00 +00 +00 +f6 +0c +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +a8 +01 +00 +00 +00 +00 +00 +00 +3c +0d +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +c1 +06 +00 +00 +00 +00 +00 +00 +47 +0d +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +f0 +14 +00 +00 +00 +00 +00 +00 +4f +0d +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +1b +18 +00 +00 +00 +00 +00 +00 +57 +0d +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +17 +22 +00 +00 +00 +00 +00 +00 +69 +0d +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +76 +04 +00 +00 +00 +00 +00 +00 +7c +0d +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +1c +24 +00 +00 +00 +00 +00 +00 +81 +0d +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +04 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +86 +0d +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +54 +06 +00 +00 +00 +00 +00 +00 +90 +0d +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +52 +24 +00 +00 +00 +00 +00 +00 +99 +0d +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +6e +15 +00 +00 +00 +00 +00 +00 +a1 +0d +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +bf +15 +00 +00 +00 +00 +00 +00 +af +0d +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +04 +00 +00 +00 +b0 +00 +00 +00 +00 +00 +00 +00 +b8 +0d +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +ae +24 +00 +00 +00 +00 +00 +00 +c1 +0d +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +e4 +24 +00 +00 +00 +00 +00 +00 +ca +0d +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +1a +25 +00 +00 +00 +00 +00 +00 +e0 +0d +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +f9 +00 +00 +00 +e8 +25 +00 +00 +00 +00 +00 +00 +e9 +0d +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +1b +03 +00 +00 +00 +00 +00 +00 +f5 +0d +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +78 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fe +0d +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +f4 +01 +00 +00 +00 +00 +00 +00 +0a +0e +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +77 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +13 +0e +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +ce +05 +00 +00 +00 +00 +00 +00 +1f +0e +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +76 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +0e +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +28 +00 +00 +00 +00 +00 +00 +00 +34 +0e +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +75 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3d +0e +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +23 +04 +00 +00 +00 +00 +00 +00 +49 +0e +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +74 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +52 +0e +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +5e +0e +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +73 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7d +0e +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +49 +00 +00 +00 +00 +00 +00 +00 +89 +0e +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +7e +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a3 +0e +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +0c +05 +00 +00 +00 +00 +00 +00 +af +0e +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +de +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c8 +0e +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +21 +05 +00 +00 +00 +00 +00 +00 +d4 +0e +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +d4 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +dd +0e +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +59 +05 +00 +00 +00 +00 +00 +00 +ea +0e +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +a1 +01 +00 +00 +00 +00 +00 +00 +07 +0f +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +da +03 +00 +00 +00 +00 +00 +00 +1b +0f +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +a2 +05 +00 +00 +00 +00 +00 +00 +3f +0f +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +e2 +00 +00 +00 +00 +00 +00 +00 +83 +04 +00 +00 +02 +00 +e8 +00 +00 +00 +01 +01 +fb +0e +0d +00 +01 +01 +01 +01 +00 +00 +00 +01 +00 +00 +01 +2e +2f +6c +69 +62 +79 +61 +73 +6d +00 +6c +69 +62 +79 +61 +73 +6d +2f +74 +65 +73 +74 +73 +00 +2f +75 +73 +72 +2f +6c +69 +62 +2f +67 +63 +63 +2f +78 +38 +36 +5f +36 +34 +2d +6c +69 +6e +75 +78 +2d +67 +6e +75 +2f +34 +2e +30 +2e +32 +2f +69 +6e +63 +6c +75 +64 +65 +00 +2f +75 +73 +72 +2f +69 +6e +63 +6c +75 +64 +65 +00 +2f +75 +73 +72 +2f +69 +6e +63 +6c +75 +64 +65 +2f +62 +69 +74 +73 +00 +00 +69 +6e +74 +6e +75 +6d +2e +63 +00 +01 +00 +00 +6c +65 +62 +31 +32 +38 +5f +74 +65 +73 +74 +2e +63 +00 +02 +00 +00 +63 +6f +72 +65 +74 +79 +70 +65 +2e +68 +00 +01 +00 +00 +62 +69 +74 +76 +65 +63 +74 +2e +68 +00 +01 +00 +00 +73 +74 +64 +64 +65 +66 +2e +68 +00 +03 +00 +00 +73 +74 +64 +69 +6f +2e +68 +00 +04 +00 +00 +6c +69 +62 +69 +6f +2e +68 +00 +04 +00 +00 +74 +79 +70 +65 +73 +2e +68 +00 +05 +00 +00 +65 +72 +72 +77 +61 +72 +6e +2e +68 +00 +01 +00 +00 +00 +00 +09 +02 +00 +00 +00 +00 +00 +00 +00 +00 +03 +c0 +00 +01 +4b +bb +73 +75 +59 +73 +75 +59 +73 +75 +59 +73 +75 +59 +57 +75 +bb +be +4b +bb +bb +bb +bb +bb +75 +49 +5d +08 +21 +57 +4a +3d +68 +4c +fc +40 +a2 +08 +22 +73 +75 +f9 +08 +8c +73 +75 +94 +03 +75 +08 +82 +03 +0f +08 +e4 +08 +21 +57 +4a +3d +68 +3a +3e +5a +2c +3e +6a +e5 +08 +22 +73 +75 +eb +08 +70 +73 +75 +86 +03 +73 +08 +90 +03 +11 +08 +e4 +08 +21 +57 +4a +3d +68 +3a +3e +92 +2c +3e +6a +e5 +08 +22 +73 +75 +eb +08 +54 +73 +75 +86 +03 +73 +08 +74 +03 +11 +08 +e4 +08 +21 +57 +4a +3d +68 +3a +3e +92 +2c +3e +6a +e5 +08 +22 +73 +75 +eb +08 +54 +73 +75 +86 +03 +73 +08 +74 +03 +12 +08 +e4 +08 +c9 +ad +3b +3d +84 +84 +2c +4c +6a +a2 +83 +85 +f4 +91 +85 +83 +85 +83 +85 +03 +0e +ac +03 +77 +08 +d6 +5d +03 +61 +08 +20 +bb +c3 +03 +79 +08 +58 +03 +26 +9e +bb +3b +59 +08 +9c +5d +03 +09 +02 +3c +01 +20 +3d +ae +3d +75 +4d +44 +38 +20 +40 +03 +0d +2e +03 +74 +20 +68 +75 +3b +59 +08 +59 +e6 +ad +73 +3d +59 +73 +41 +39 +4d +08 +16 +c9 +57 +4b +68 +3a +3e +03 +09 +90 +49 +3d +3f +03 +76 +08 +20 +50 +03 +7a +3c +43 +77 +03 +79 +08 +74 +be +9d +40 +08 +6a +21 +49 +3d +30 +9f +1f +3b +83 +9f +1f +5f +02 +28 +19 +03 +79 +4a +59 +88 +69 +75 +83 +08 +23 +83 +a1 +75 +83 +08 +24 +02 +24 +17 +03 +ed +00 +d6 +08 +4e +08 +21 +b0 +03 +09 +08 +58 +03 +79 +02 +23 +01 +78 +73 +83 +03 +f7 +7e +9e +03 +77 +82 +03 +13 +c8 +03 +fc +00 +08 +9e +03 +7a +08 +3c +83 +03 +a2 +7f +c8 +03 +79 +08 +c8 +03 +35 +08 +c8 +bb +a2 +08 +15 +bb +08 +f5 +bb +03 +77 +02 +24 +01 +bb +03 +1a +08 +20 +08 +85 +03 +b3 +7f +08 +82 +03 +d0 +00 +08 +3c +f3 +03 +55 +c8 +bb +03 +48 +08 +66 +03 +7a +08 +66 +08 +af +03 +1a +08 +ac +08 +69 +08 +69 +08 +69 +08 +21 +08 +3f +ad +e5 +08 +5d +ad +e5 +08 +5d +bb +03 +19 +08 +90 +bb +02 +24 +15 +bb +02 +23 +15 +bb +02 +24 +15 +03 +bc +7f +08 +82 +03 +1f +08 +3c +08 +b1 +03 +77 +08 +ac +03 +cd +00 +08 +d6 +21 +49 +3d +32 +75 +2a +83 +76 +75 +79 +08 +21 +2d +2f +a3 +08 +3d +be +4b +83 +73 +08 +13 +bf +91 +96 +1f +cd +4b +b2 +08 +6a +03 +78 +9e +44 +03 +7a +58 +a4 +03 +7a +4a +03 +0a +9e +21 +3b +3d +03 +18 +82 +08 +6a +03 +67 +2e +03 +19 +74 +1e +a0 +03 +69 +66 +c0 +e5 +03 +10 +08 +20 +1e +a0 +03 +74 +20 +08 +30 +03 +0a +4a +03 +76 +20 +03 +0a +3c +03 +c8 +00 +ba +02 +28 +16 +46 +6a +6d +75 +83 +08 +23 +af +5e +59 +03 +0c +ba +bc +08 +13 +03 +6b +02 +29 +01 +3d +2d +ae +d5 +03 +70 +74 +5c +03 +15 +ac +e5 +e5 +03 +66 +08 +c8 +75 +03 +b7 +7f +08 +74 +02 +24 +16 +38 +4e +38 +08 +21 +77 +6a +08 +40 +bf +d8 +08 +4f +a1 +75 +83 +08 +24 +03 +09 +08 +82 +b4 +08 +23 +c9 +57 +3d +92 +08 +4d +91 +03 +59 +02 +23 +01 +f5 +03 +09 +9e +03 +78 +82 +44 +08 +13 +e5 +08 +3d +08 +3d +03 +15 +08 +58 +03 +52 +08 +4a +08 +bb +08 +9a +03 +22 +08 +e4 +83 +3b +3d +67 +d5 +03 +58 +d6 +03 +eb +00 +f2 +02 +22 +18 +03 +7a +3c +3d +79 +03 +09 +d6 +83 +08 +23 +03 +0c +4a +be +a3 +4c +03 +62 +08 +ba +51 +03 +7a +2e +42 +5a +c0 +44 +03 +78 +3c +98 +91 +e3 +4c +59 +39 +03 +64 +08 +12 +03 +10 +c8 +e5 +03 +16 +02 +24 +01 +08 +5c +38 +3d +77 +08 +36 +83 +08 +23 +5a +ca +e5 +f9 +08 +bc +03 +6b +08 +58 +89 +03 +7a +3c +42 +03 +0c +2e +d2 +03 +0a +08 +c8 +08 +5b +39 +3f +03 +0a +82 +03 +78 +08 +2e +ec +03 +78 +d6 +36 +03 +78 +4a +69 +83 +49 +3d +08 +21 +a1 +08 +1d +04 +02 +03 +9d +7b +3c +08 +17 +03 +14 +d6 +03 +71 +08 +82 +8d +af +73 +75 +03 +52 +02 +24 +01 +83 +03 +0b +02 +33 +01 +03 +25 +08 +58 +59 +bb +7e +42 +03 +7a +4a +03 +44 +08 +c8 +91 +2d +3d +87 +37 +41 +68 +bd +bb +49 +3d +68 +c1 +81 +68 +d7 +49 +3d +67 +83 +03 +70 +02 +3f +01 +03 +38 +08 +58 +08 +53 +41 +53 +50 +03 +7a +4a +03 +09 +08 +90 +5a +02 +3e +14 +9f +03 +56 +08 +3c +91 +08 +ab +08 +24 +4b +3d +57 +59 +02 +48 +17 +02 +14 +00 +01 +01 +00 +f5 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +24 +49 +64 +3a +20 +69 +6e +74 +6e +75 +6d +2e +63 +20 +31 +32 +39 +35 +20 +32 +30 +30 +35 +2d +31 +30 +2d +33 +30 +20 +30 +36 +3a +31 +33 +3a +32 +34 +5a +20 +70 +65 +74 +65 +72 +20 +24 +00 +47 +43 +43 +3a +20 +28 +47 +4e +55 +29 +20 +34 +2e +30 +2e +32 +20 +28 +44 +65 +62 +69 +61 +6e +20 +34 +2e +30 +2e +32 +2d +32 +29 +00 +30 +00 +32 +00 +02 +00 +37 +46 +00 +7f +00 +38 +30 +00 +80 +01 +00 +38 +31 +00 +81 +01 +00 +38 +32 +00 +82 +01 +00 +33 +32 +33 +39 +00 +b9 +64 +00 +7e +00 +81 +7f +00 +80 +7f +00 +ff +7e +00 +4f +70 +65 +72 +61 +74 +69 +6f +6e +20 +6e +65 +65 +64 +73 +20 +61 +6e +20 +6f +70 +65 +72 +61 +6e +64 +00 +2e +2f +6c +69 +62 +79 +61 +73 +6d +2f +69 +6e +74 +6e +75 +6d +2e +63 +00 +53 +45 +47 +00 +69 +6e +76 +61 +6c +69 +64 +20 +75 +73 +65 +20 +6f +66 +20 +27 +25 +73 +27 +00 +57 +52 +54 +00 +3a +00 +75 +6e +6b +6e +6f +77 +6e +20 +69 +6e +74 +6e +75 +6d +20 +74 +79 +70 +65 +00 +64 +65 +73 +74 +69 +6e +61 +74 +69 +6f +6e +20 +74 +6f +6f +20 +6c +61 +72 +67 +65 +00 +62 +69 +67 +20 +65 +6e +64 +69 +61 +6e +20 +6e +6f +74 +20 +69 +6d +70 +6c +65 +6d +65 +6e +74 +65 +64 +00 +30 +78 +25 +6c +78 +2f +25 +75 +00 +30 +78 +25 +73 +2f +25 +75 +00 +54 +65 +73 +74 +20 +6c +65 +62 +31 +32 +38 +5f +74 +65 +73 +74 +3a +20 +00 +2d +00 +00 +75 +6e +00 +25 +73 +20 +2a +2a +20 +46 +3a +20 +25 +73 +0a +00 +20 +2b +25 +64 +2d +25 +64 +2f +25 +64 +20 +25 +64 +25 +25 +0a +25 +73 +00 +00 +00 +00 +00 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +01 +05 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +cb +05 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +c2 +05 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +b9 +05 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +c5 +04 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +1d +0a +00 +00 +00 +00 +00 +00 +38 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +74 +0a +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +90 +0a +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +5d +0a +00 +00 +00 +00 +00 +00 +50 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +17 +09 +00 +00 +00 +00 +00 +00 +58 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +17 +09 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +f9 +08 +00 +00 +00 +00 +00 +00 +68 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +f9 +08 +00 +00 +00 +00 +00 +00 +70 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +09 +0a +00 +00 +00 +00 +00 +00 +78 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +45 +0c +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +ac +0a +00 +00 +00 +00 +00 +00 +88 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +c3 +0a +00 +00 +00 +00 +00 +00 +90 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +da +0a +00 +00 +00 +00 +00 +00 +98 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +f1 +0a +00 +00 +00 +00 +00 +00 +a0 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +17 +0b +00 +00 +00 +00 +00 +00 +a8 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +47 +0b +00 +00 +00 +00 +00 +00 +b0 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +77 +0b +00 +00 +00 +00 +00 +00 +b8 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +3a +0a +00 +00 +00 +00 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +35 +09 +00 +00 +00 +00 +00 +00 +c8 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +5c +09 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +89 +09 +00 +00 +00 +00 +00 +00 +d8 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +b9 +09 +00 +00 +00 +00 +00 +00 +e0 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +9d +0b +00 +00 +00 +00 +00 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +cd +0b +00 +00 +00 +00 +00 +00 +f0 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +fc +0b +00 +00 +00 +00 +00 +00 +f8 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +15 +08 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +2c +0c +00 +00 +00 +00 +00 +00 +08 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +d7 +09 +00 +00 +00 +00 +00 +00 +10 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +f0 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +91 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +38 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +58 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +68 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +78 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +88 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +98 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +a8 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +17 +00 +00 +00 +00 +00 +00 +00 +b8 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +1a +00 +00 +00 +00 +00 +00 +00 +c8 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +1d +00 +00 +00 +00 +00 +00 +00 +d8 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +22 +00 +00 +00 +00 +00 +00 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f8 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +91 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +18 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +28 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +38 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +91 +04 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +48 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +58 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +68 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +78 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +88 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +25 +00 +00 +00 +00 +00 +00 +00 +a8 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +b8 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +c8 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +d8 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +2a +00 +00 +00 +00 +00 +00 +00 +e8 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +f8 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +93 +04 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +4e +75 +6d +65 +72 +69 +63 +20 +63 +6f +6e +73 +74 +61 +6e +74 +20 +74 +6f +6f +20 +6c +61 +72 +67 +65 +20 +66 +6f +72 +20 +69 +6e +74 +65 +72 +6e +61 +6c +20 +66 +6f +72 +6d +61 +74 +00 +00 +43 +68 +61 +72 +61 +63 +74 +65 +72 +20 +63 +6f +6e +73 +74 +61 +6e +74 +20 +74 +6f +6f +20 +6c +61 +72 +67 +65 +20 +66 +6f +72 +20 +69 +6e +74 +65 +72 +6e +61 +6c +20 +66 +6f +72 +6d +61 +74 +00 +00 +00 +00 +00 +00 +00 +00 +69 +6e +76 +61 +6c +69 +64 +20 +6f +70 +65 +72 +61 +74 +69 +6f +6e +20 +69 +6e +20 +69 +6e +74 +6e +75 +6d +20 +63 +61 +6c +63 +75 +6c +61 +74 +69 +6f +6e +00 +76 +61 +6c +75 +65 +20 +64 +6f +65 +73 +20 +6e +6f +74 +20 +66 +69 +74 +20 +69 +6e +20 +25 +64 +20 +62 +69 +74 +20 +66 +69 +65 +6c +64 +00 +00 +00 +00 +00 +00 +6d +69 +73 +61 +6c +69 +67 +6e +65 +64 +20 +76 +61 +6c +75 +65 +2c +20 +74 +72 +75 +6e +63 +61 +74 +69 +6e +67 +20 +74 +6f +20 +62 +6f +75 +6e +64 +61 +72 +79 +00 +00 +00 +00 +00 +00 +00 +00 +25 +73 +73 +69 +67 +6e +65 +64 +20 +25 +73 +25 +73 +20 +73 +69 +7a +65 +28 +29 +20 +62 +61 +64 +20 +73 +69 +7a +65 +3a +20 +65 +78 +70 +65 +63 +74 +65 +64 +20 +25 +6c +75 +2c +20 +67 +6f +74 +20 +25 +6c +75 +21 +00 +00 +00 +25 +73 +73 +69 +67 +6e +65 +64 +20 +25 +73 +25 +73 +20 +67 +65 +74 +28 +29 +20 +62 +61 +64 +20 +73 +69 +7a +65 +3a +20 +65 +78 +70 +65 +63 +74 +65 +64 +20 +25 +6c +75 +2c +20 +67 +6f +74 +20 +25 +6c +75 +21 +00 +00 +00 +00 +25 +73 +73 +69 +67 +6e +65 +64 +20 +25 +73 +25 +73 +20 +67 +65 +74 +28 +29 +20 +62 +61 +64 +20 +6f +75 +74 +70 +75 +74 +21 +00 +14 +00 +00 +00 +ff +ff +ff +ff +01 +00 +01 +78 +10 +0c +07 +08 +90 +01 +00 +00 +00 +00 +00 +00 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +79 +00 +00 +00 +00 +00 +00 +00 +04 +04 +00 +00 +00 +0e +10 +00 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +00 +00 +00 +00 +00 +00 +00 +04 +04 +00 +00 +00 +0e +10 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d6 +00 +00 +00 +00 +00 +00 +00 +04 +0a +00 +00 +00 +86 +03 +83 +04 +04 +11 +00 +00 +00 +0e +20 +8c +02 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d6 +00 +00 +00 +00 +00 +00 +00 +04 +05 +00 +00 +00 +86 +03 +04 +16 +00 +00 +00 +0e +20 +8c +02 +83 +04 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d6 +00 +00 +00 +00 +00 +00 +00 +04 +05 +00 +00 +00 +86 +03 +04 +16 +00 +00 +00 +0e +20 +8c +02 +83 +04 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d6 +00 +00 +00 +00 +00 +00 +00 +04 +05 +00 +00 +00 +86 +03 +04 +16 +00 +00 +00 +0e +20 +8c +02 +83 +04 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +85 +01 +00 +00 +00 +00 +00 +00 +04 +05 +00 +00 +00 +83 +05 +04 +12 +00 +00 +00 +8d +02 +8c +03 +86 +04 +04 +07 +00 +00 +00 +0e +30 +00 +00 +00 +00 +00 +00 +00 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1f +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +00 +0e +10 +83 +02 +00 +00 +00 +00 +00 +00 +00 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +71 +00 +00 +00 +00 +00 +00 +00 +04 +04 +00 +00 +00 +0e +10 +83 +02 +00 +00 +00 +00 +00 +00 +00 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9b +00 +00 +00 +00 +00 +00 +00 +04 +05 +00 +00 +00 +86 +02 +04 +11 +00 +00 +00 +0e +20 +83 +03 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +00 +0e +10 +83 +02 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +52 +05 +00 +00 +00 +00 +00 +00 +04 +0a +00 +00 +00 +86 +06 +83 +07 +04 +0d +00 +00 +00 +8f +02 +8e +03 +04 +11 +00 +00 +00 +0e +50 +8d +04 +8c +05 +00 +00 +00 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +00 +0e +10 +83 +02 +00 +00 +00 +00 +00 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +00 +00 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +16 +00 +00 +00 +00 +00 +00 +00 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +04 +04 +00 +00 +00 +0e +10 +00 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1b +00 +00 +00 +00 +00 +00 +00 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4b +00 +00 +00 +00 +00 +00 +00 +04 +04 +00 +00 +00 +0e +10 +00 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +95 +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +00 +0e +10 +83 +02 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +01 +00 +00 +00 +00 +00 +00 +04 +0a +00 +00 +00 +8d +04 +83 +07 +04 +0d +00 +00 +00 +8f +02 +8e +03 +04 +11 +00 +00 +00 +0e +40 +8c +05 +86 +06 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7d +02 +00 +00 +00 +00 +00 +00 +04 +0a +00 +00 +00 +8c +05 +83 +07 +04 +1a +00 +00 +00 +86 +06 +8f +02 +8e +03 +8d +04 +04 +07 +00 +00 +00 +0e +60 +00 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +01 +00 +00 +00 +00 +00 +00 +04 +0a +00 +00 +00 +86 +05 +83 +06 +04 +18 +00 +00 +00 +0e +30 +8c +04 +8e +02 +8d +03 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e2 +00 +00 +00 +00 +00 +00 +00 +04 +0a +00 +00 +00 +86 +03 +83 +04 +04 +0c +00 +00 +00 +0e +20 +8c +02 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +00 +00 +00 +00 +00 +00 +00 +04 +0a +00 +00 +00 +8c +02 +86 +03 +04 +0c +00 +00 +00 +0e +20 +83 +04 +00 +00 +00 +00 +00 +00 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2b +03 +00 +00 +00 +00 +00 +00 +04 +02 +00 +00 +00 +0e +10 +04 +02 +00 +00 +00 +0e +18 +04 +02 +00 +00 +00 +0e +20 +04 +02 +00 +00 +00 +0e +28 +04 +01 +00 +00 +00 +0e +30 +04 +01 +00 +00 +00 +0e +38 +04 +07 +00 +00 +00 +0e +e0 +01 +83 +07 +86 +06 +8c +05 +8d +04 +8e +03 +8f +02 +00 +00 +1c +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3c +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +5c +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +8c +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +b0 +01 +00 +00 +00 +00 +00 +00 +bc +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +90 +02 +00 +00 +00 +00 +00 +00 +ec +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f0 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +70 +03 +00 +00 +00 +00 +00 +00 +1c +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +50 +04 +00 +00 +00 +00 +00 +00 +54 +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +58 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +e0 +05 +00 +00 +00 +00 +00 +00 +7c +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +a4 +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a8 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +80 +06 +00 +00 +00 +00 +00 +00 +cc +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +20 +07 +00 +00 +00 +00 +00 +00 +f4 +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f8 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +50 +07 +00 +00 +00 +00 +00 +00 +2c +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +b0 +0c +00 +00 +00 +00 +00 +00 +54 +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +58 +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +e0 +0c +00 +00 +00 +00 +00 +00 +6c +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +84 +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +88 +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +20 +0d +00 +00 +00 +00 +00 +00 +a4 +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a8 +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +50 +0d +00 +00 +00 +00 +00 +00 +bc +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +70 +0d +00 +00 +00 +00 +00 +00 +dc +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e0 +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +c0 +0d +00 +00 +00 +00 +00 +00 +04 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +03 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +60 +0e +00 +00 +00 +00 +00 +00 +3c +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +03 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +b0 +0f +00 +00 +00 +00 +00 +00 +74 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +03 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +30 +12 +00 +00 +00 +00 +00 +00 +a4 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a8 +03 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +60 +13 +00 +00 +00 +00 +00 +00 +d4 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d8 +03 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +50 +14 +00 +00 +00 +00 +00 +00 +04 +04 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +04 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +f0 +14 +00 +00 +00 +00 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +00 +01 +78 +10 +0c +07 +08 +90 +01 +00 +00 +00 +00 +00 +00 +1c +00 +00 +00 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +79 +00 +00 +00 +00 +00 +00 +00 +04 +04 +00 +00 +00 +0e +10 +00 +1c +00 +00 +00 +3c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +00 +00 +00 +00 +00 +00 +00 +04 +04 +00 +00 +00 +0e +10 +00 +2c +00 +00 +00 +5c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d6 +00 +00 +00 +00 +00 +00 +00 +04 +0a +00 +00 +00 +86 +03 +83 +04 +04 +11 +00 +00 +00 +0e +20 +8c +02 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +8c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d6 +00 +00 +00 +00 +00 +00 +00 +04 +05 +00 +00 +00 +86 +03 +04 +16 +00 +00 +00 +0e +20 +8c +02 +83 +04 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +bc +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d6 +00 +00 +00 +00 +00 +00 +00 +04 +05 +00 +00 +00 +86 +03 +04 +16 +00 +00 +00 +0e +20 +8c +02 +83 +04 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +ec +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d6 +00 +00 +00 +00 +00 +00 +00 +04 +05 +00 +00 +00 +86 +03 +04 +16 +00 +00 +00 +0e +20 +8c +02 +83 +04 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +1c +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +85 +01 +00 +00 +00 +00 +00 +00 +04 +05 +00 +00 +00 +83 +05 +04 +12 +00 +00 +00 +8d +02 +8c +03 +86 +04 +04 +07 +00 +00 +00 +0e +30 +00 +00 +00 +00 +00 +00 +00 +24 +00 +00 +00 +54 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1f +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +00 +0e +10 +83 +02 +00 +00 +00 +00 +00 +00 +00 +24 +00 +00 +00 +7c +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +71 +00 +00 +00 +00 +00 +00 +00 +04 +04 +00 +00 +00 +0e +10 +83 +02 +00 +00 +00 +00 +00 +00 +00 +24 +00 +00 +00 +a4 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9b +00 +00 +00 +00 +00 +00 +00 +04 +05 +00 +00 +00 +86 +02 +04 +11 +00 +00 +00 +0e +20 +83 +03 +24 +00 +00 +00 +cc +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +00 +0e +10 +83 +02 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +f4 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +52 +05 +00 +00 +00 +00 +00 +00 +04 +0a +00 +00 +00 +86 +06 +83 +07 +04 +0d +00 +00 +00 +8f +02 +8e +03 +04 +11 +00 +00 +00 +0e +50 +8d +04 +8c +05 +00 +00 +00 +24 +00 +00 +00 +2c +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +00 +0e +10 +83 +02 +00 +00 +00 +00 +00 +00 +00 +14 +00 +00 +00 +54 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +00 +00 +00 +00 +14 +00 +00 +00 +6c +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +16 +00 +00 +00 +00 +00 +00 +00 +1c +00 +00 +00 +84 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +04 +04 +00 +00 +00 +0e +10 +00 +14 +00 +00 +00 +a4 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1b +00 +00 +00 +00 +00 +00 +00 +1c +00 +00 +00 +bc +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4b +00 +00 +00 +00 +00 +00 +00 +04 +04 +00 +00 +00 +0e +10 +00 +24 +00 +00 +00 +dc +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +95 +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +00 +0e +10 +83 +02 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +04 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +01 +00 +00 +00 +00 +00 +00 +04 +0a +00 +00 +00 +8d +04 +83 +07 +04 +0d +00 +00 +00 +8f +02 +8e +03 +04 +11 +00 +00 +00 +0e +40 +8c +05 +86 +06 +00 +00 +00 +34 +00 +00 +00 +3c +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7d +02 +00 +00 +00 +00 +00 +00 +04 +0a +00 +00 +00 +8c +05 +83 +07 +04 +1a +00 +00 +00 +86 +06 +8f +02 +8e +03 +8d +04 +04 +07 +00 +00 +00 +0e +60 +00 +00 +00 +2c +00 +00 +00 +74 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +01 +00 +00 +00 +00 +00 +00 +04 +0a +00 +00 +00 +86 +05 +83 +06 +04 +18 +00 +00 +00 +0e +30 +8c +04 +8e +02 +8d +03 +00 +00 +2c +00 +00 +00 +a4 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e2 +00 +00 +00 +00 +00 +00 +00 +04 +0a +00 +00 +00 +86 +03 +83 +04 +04 +0c +00 +00 +00 +0e +20 +8c +02 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +d4 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +00 +00 +00 +00 +00 +00 +00 +04 +0a +00 +00 +00 +8c +02 +86 +03 +04 +0c +00 +00 +00 +0e +20 +83 +04 +00 +00 +00 +00 +00 +00 +54 +00 +00 +00 +04 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2b +03 +00 +00 +00 +00 +00 +00 +04 +02 +00 +00 +00 +0e +10 +04 +02 +00 +00 +00 +0e +18 +04 +02 +00 +00 +00 +0e +20 +04 +02 +00 +00 +00 +0e +28 +04 +01 +00 +00 +00 +0e +30 +04 +01 +00 +00 +00 +0e +38 +04 +07 +00 +00 +00 +0e +e0 +01 +83 +07 +86 +06 +8c +05 +8d +04 +8e +03 +8f +02 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +90 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +b0 +01 +00 +00 +00 +00 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +90 +02 +00 +00 +00 +00 +00 +00 +f0 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +70 +03 +00 +00 +00 +00 +00 +00 +20 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +50 +04 +00 +00 +00 +00 +00 +00 +58 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +e0 +05 +00 +00 +00 +00 +00 +00 +80 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +a8 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +80 +06 +00 +00 +00 +00 +00 +00 +d0 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +20 +07 +00 +00 +00 +00 +00 +00 +f8 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +50 +07 +00 +00 +00 +00 +00 +00 +30 +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +b0 +0c +00 +00 +00 +00 +00 +00 +58 +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +e0 +0c +00 +00 +00 +00 +00 +00 +70 +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +88 +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +20 +0d +00 +00 +00 +00 +00 +00 +a8 +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +50 +0d +00 +00 +00 +00 +00 +00 +c0 +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +70 +0d +00 +00 +00 +00 +00 +00 +e0 +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +c0 +0d +00 +00 +00 +00 +00 +00 +08 +03 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +60 +0e +00 +00 +00 +00 +00 +00 +40 +03 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +b0 +0f +00 +00 +00 +00 +00 +00 +78 +03 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +30 +12 +00 +00 +00 +00 +00 +00 +a8 +03 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +60 +13 +00 +00 +00 +00 +00 +00 +d8 +03 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +50 +14 +00 +00 +00 +00 +00 +00 +08 +04 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +f0 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +04 +00 +00 +00 +00 +00 +00 +00 +78 +00 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +78 +00 +00 +00 +00 +00 +00 +00 +79 +00 +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +84 +00 +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +84 +00 +00 +00 +00 +00 +00 +00 +cb +00 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +cb +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +eb +00 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +eb +00 +00 +00 +00 +00 +00 +00 +5b +01 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +5b +01 +00 +00 +00 +00 +00 +00 +5c +01 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +5c +01 +00 +00 +00 +00 +00 +00 +8c +01 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +8c +01 +00 +00 +00 +00 +00 +00 +8d +01 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +8d +01 +00 +00 +00 +00 +00 +00 +a6 +01 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +e7 +00 +00 +00 +00 +00 +00 +00 +01 +00 +55 +e7 +00 +00 +00 +00 +00 +00 +00 +4d +01 +00 +00 +00 +00 +00 +00 +01 +00 +53 +5c +01 +00 +00 +00 +00 +00 +00 +7e +01 +00 +00 +00 +00 +00 +00 +01 +00 +53 +8d +01 +00 +00 +00 +00 +00 +00 +a6 +01 +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +f4 +00 +00 +00 +00 +00 +00 +00 +01 +00 +54 +f4 +00 +00 +00 +00 +00 +00 +00 +57 +01 +00 +00 +00 +00 +00 +00 +01 +00 +5c +5c +01 +00 +00 +00 +00 +00 +00 +88 +01 +00 +00 +00 +00 +00 +00 +01 +00 +5c +8d +01 +00 +00 +00 +00 +00 +00 +a6 +01 +00 +00 +00 +00 +00 +00 +01 +00 +5c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f4 +00 +00 +00 +00 +00 +00 +00 +09 +01 +00 +00 +00 +00 +00 +00 +01 +00 +50 +0c +01 +00 +00 +00 +00 +00 +00 +52 +01 +00 +00 +00 +00 +00 +00 +01 +00 +56 +5c +01 +00 +00 +00 +00 +00 +00 +83 +01 +00 +00 +00 +00 +00 +00 +01 +00 +56 +8d +01 +00 +00 +00 +00 +00 +00 +a6 +01 +00 +00 +00 +00 +00 +00 +01 +00 +56 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +01 +00 +00 +00 +00 +00 +00 +cb +01 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +cb +01 +00 +00 +00 +00 +00 +00 +3d +02 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +3d +02 +00 +00 +00 +00 +00 +00 +3e +02 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +3e +02 +00 +00 +00 +00 +00 +00 +6b +02 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +6b +02 +00 +00 +00 +00 +00 +00 +6c +02 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +6c +02 +00 +00 +00 +00 +00 +00 +86 +02 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +01 +00 +00 +00 +00 +00 +00 +c7 +01 +00 +00 +00 +00 +00 +00 +01 +00 +55 +c7 +01 +00 +00 +00 +00 +00 +00 +30 +02 +00 +00 +00 +00 +00 +00 +01 +00 +56 +3e +02 +00 +00 +00 +00 +00 +00 +5e +02 +00 +00 +00 +00 +00 +00 +01 +00 +56 +6c +02 +00 +00 +00 +00 +00 +00 +86 +02 +00 +00 +00 +00 +00 +00 +01 +00 +56 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +01 +00 +00 +00 +00 +00 +00 +d4 +01 +00 +00 +00 +00 +00 +00 +01 +00 +54 +d4 +01 +00 +00 +00 +00 +00 +00 +39 +02 +00 +00 +00 +00 +00 +00 +01 +00 +5c +3e +02 +00 +00 +00 +00 +00 +00 +67 +02 +00 +00 +00 +00 +00 +00 +01 +00 +5c +6c +02 +00 +00 +00 +00 +00 +00 +86 +02 +00 +00 +00 +00 +00 +00 +01 +00 +5c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +da +01 +00 +00 +00 +00 +00 +00 +34 +02 +00 +00 +00 +00 +00 +00 +01 +00 +53 +3e +02 +00 +00 +00 +00 +00 +00 +62 +02 +00 +00 +00 +00 +00 +00 +01 +00 +53 +6c +02 +00 +00 +00 +00 +00 +00 +86 +02 +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +02 +00 +00 +00 +00 +00 +00 +ab +02 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +ab +02 +00 +00 +00 +00 +00 +00 +21 +03 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +21 +03 +00 +00 +00 +00 +00 +00 +22 +03 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +22 +03 +00 +00 +00 +00 +00 +00 +4d +03 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +4d +03 +00 +00 +00 +00 +00 +00 +4e +03 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +4e +03 +00 +00 +00 +00 +00 +00 +66 +03 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +02 +00 +00 +00 +00 +00 +00 +a7 +02 +00 +00 +00 +00 +00 +00 +01 +00 +55 +a7 +02 +00 +00 +00 +00 +00 +00 +14 +03 +00 +00 +00 +00 +00 +00 +01 +00 +56 +22 +03 +00 +00 +00 +00 +00 +00 +40 +03 +00 +00 +00 +00 +00 +00 +01 +00 +56 +4e +03 +00 +00 +00 +00 +00 +00 +66 +03 +00 +00 +00 +00 +00 +00 +01 +00 +56 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +02 +00 +00 +00 +00 +00 +00 +b4 +02 +00 +00 +00 +00 +00 +00 +01 +00 +54 +b4 +02 +00 +00 +00 +00 +00 +00 +1d +03 +00 +00 +00 +00 +00 +00 +01 +00 +5c +22 +03 +00 +00 +00 +00 +00 +00 +49 +03 +00 +00 +00 +00 +00 +00 +01 +00 +5c +4e +03 +00 +00 +00 +00 +00 +00 +66 +03 +00 +00 +00 +00 +00 +00 +01 +00 +5c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ba +02 +00 +00 +00 +00 +00 +00 +18 +03 +00 +00 +00 +00 +00 +00 +01 +00 +53 +22 +03 +00 +00 +00 +00 +00 +00 +44 +03 +00 +00 +00 +00 +00 +00 +01 +00 +53 +4e +03 +00 +00 +00 +00 +00 +00 +66 +03 +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +03 +00 +00 +00 +00 +00 +00 +8b +03 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +8b +03 +00 +00 +00 +00 +00 +00 +01 +04 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +01 +04 +00 +00 +00 +00 +00 +00 +02 +04 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +02 +04 +00 +00 +00 +00 +00 +00 +2d +04 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +2d +04 +00 +00 +00 +00 +00 +00 +2e +04 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +2e +04 +00 +00 +00 +00 +00 +00 +46 +04 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +03 +00 +00 +00 +00 +00 +00 +87 +03 +00 +00 +00 +00 +00 +00 +01 +00 +55 +87 +03 +00 +00 +00 +00 +00 +00 +f4 +03 +00 +00 +00 +00 +00 +00 +01 +00 +56 +02 +04 +00 +00 +00 +00 +00 +00 +20 +04 +00 +00 +00 +00 +00 +00 +01 +00 +56 +2e +04 +00 +00 +00 +00 +00 +00 +46 +04 +00 +00 +00 +00 +00 +00 +01 +00 +56 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +03 +00 +00 +00 +00 +00 +00 +94 +03 +00 +00 +00 +00 +00 +00 +01 +00 +54 +94 +03 +00 +00 +00 +00 +00 +00 +fd +03 +00 +00 +00 +00 +00 +00 +01 +00 +5c +02 +04 +00 +00 +00 +00 +00 +00 +29 +04 +00 +00 +00 +00 +00 +00 +01 +00 +5c +2e +04 +00 +00 +00 +00 +00 +00 +46 +04 +00 +00 +00 +00 +00 +00 +01 +00 +5c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9a +03 +00 +00 +00 +00 +00 +00 +f8 +03 +00 +00 +00 +00 +00 +00 +01 +00 +53 +02 +04 +00 +00 +00 +00 +00 +00 +24 +04 +00 +00 +00 +00 +00 +00 +01 +00 +53 +2e +04 +00 +00 +00 +00 +00 +00 +46 +04 +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +04 +00 +00 +00 +00 +00 +00 +6e +04 +00 +00 +00 +00 +00 +00 +02 +00 +77 +58 +6e +04 +00 +00 +00 +00 +00 +00 +1c +05 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +1c +05 +00 +00 +00 +00 +00 +00 +1d +05 +00 +00 +00 +00 +00 +00 +02 +00 +77 +58 +1d +05 +00 +00 +00 +00 +00 +00 +d5 +05 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +04 +00 +00 +00 +00 +00 +00 +73 +04 +00 +00 +00 +00 +00 +00 +01 +00 +55 +73 +04 +00 +00 +00 +00 +00 +00 +09 +05 +00 +00 +00 +00 +00 +00 +01 +00 +53 +1d +05 +00 +00 +00 +00 +00 +00 +6c +05 +00 +00 +00 +00 +00 +00 +01 +00 +53 +b9 +05 +00 +00 +00 +00 +00 +00 +d5 +05 +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +04 +00 +00 +00 +00 +00 +00 +79 +04 +00 +00 +00 +00 +00 +00 +01 +00 +54 +79 +04 +00 +00 +00 +00 +00 +00 +0e +05 +00 +00 +00 +00 +00 +00 +01 +00 +56 +1d +05 +00 +00 +00 +00 +00 +00 +6a +05 +00 +00 +00 +00 +00 +00 +01 +00 +56 +b9 +05 +00 +00 +00 +00 +00 +00 +d5 +05 +00 +00 +00 +00 +00 +00 +01 +00 +56 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7f +04 +00 +00 +00 +00 +00 +00 +18 +05 +00 +00 +00 +00 +00 +00 +01 +00 +5d +1d +05 +00 +00 +00 +00 +00 +00 +d5 +05 +00 +00 +00 +00 +00 +00 +01 +00 +5d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +be +04 +00 +00 +00 +00 +00 +00 +db +04 +00 +00 +00 +00 +00 +00 +01 +00 +50 +e6 +04 +00 +00 +00 +00 +00 +00 +eb +04 +00 +00 +00 +00 +00 +00 +01 +00 +50 +f6 +04 +00 +00 +00 +00 +00 +00 +fa +04 +00 +00 +00 +00 +00 +00 +01 +00 +50 +01 +05 +00 +00 +00 +00 +00 +00 +04 +05 +00 +00 +00 +00 +00 +00 +01 +00 +50 +b9 +05 +00 +00 +00 +00 +00 +00 +d5 +05 +00 +00 +00 +00 +00 +00 +01 +00 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e0 +05 +00 +00 +00 +00 +00 +00 +e1 +05 +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +e1 +05 +00 +00 +00 +00 +00 +00 +fe +05 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +fe +05 +00 +00 +00 +00 +00 +00 +ff +05 +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e0 +05 +00 +00 +00 +00 +00 +00 +e9 +05 +00 +00 +00 +00 +00 +00 +01 +00 +55 +e9 +05 +00 +00 +00 +00 +00 +00 +fe +05 +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +04 +06 +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +04 +06 +00 +00 +00 +00 +00 +00 +0a +06 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +0a +06 +00 +00 +00 +00 +00 +00 +0c +06 +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +0c +06 +00 +00 +00 +00 +00 +00 +70 +06 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +70 +06 +00 +00 +00 +00 +00 +00 +71 +06 +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +09 +06 +00 +00 +00 +00 +00 +00 +01 +00 +55 +09 +06 +00 +00 +00 +00 +00 +00 +0a +06 +00 +00 +00 +00 +00 +00 +01 +00 +53 +0a +06 +00 +00 +00 +00 +00 +00 +0c +06 +00 +00 +00 +00 +00 +00 +01 +00 +55 +0c +06 +00 +00 +00 +00 +00 +00 +59 +06 +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +06 +00 +00 +00 +00 +00 +00 +96 +06 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +96 +06 +00 +00 +00 +00 +00 +00 +c6 +06 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +c6 +06 +00 +00 +00 +00 +00 +00 +c7 +06 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +c7 +06 +00 +00 +00 +00 +00 +00 +e9 +06 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +e9 +06 +00 +00 +00 +00 +00 +00 +ea +06 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +ea +06 +00 +00 +00 +00 +00 +00 +1a +07 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +1a +07 +00 +00 +00 +00 +00 +00 +1b +07 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +06 +00 +00 +00 +00 +00 +00 +92 +06 +00 +00 +00 +00 +00 +00 +01 +00 +55 +92 +06 +00 +00 +00 +00 +00 +00 +bd +06 +00 +00 +00 +00 +00 +00 +01 +00 +56 +c7 +06 +00 +00 +00 +00 +00 +00 +e0 +06 +00 +00 +00 +00 +00 +00 +01 +00 +56 +ea +06 +00 +00 +00 +00 +00 +00 +11 +07 +00 +00 +00 +00 +00 +00 +01 +00 +56 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a2 +06 +00 +00 +00 +00 +00 +00 +c2 +06 +00 +00 +00 +00 +00 +00 +01 +00 +53 +c7 +06 +00 +00 +00 +00 +00 +00 +e5 +06 +00 +00 +00 +00 +00 +00 +01 +00 +53 +ea +06 +00 +00 +00 +00 +00 +00 +16 +07 +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +07 +00 +00 +00 +00 +00 +00 +21 +07 +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +21 +07 +00 +00 +00 +00 +00 +00 +35 +07 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +35 +07 +00 +00 +00 +00 +00 +00 +38 +07 +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +38 +07 +00 +00 +00 +00 +00 +00 +4b +07 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +4b +07 +00 +00 +00 +00 +00 +00 +4e +07 +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +07 +00 +00 +00 +00 +00 +00 +2a +07 +00 +00 +00 +00 +00 +00 +01 +00 +55 +2a +07 +00 +00 +00 +00 +00 +00 +35 +07 +00 +00 +00 +00 +00 +00 +01 +00 +53 +35 +07 +00 +00 +00 +00 +00 +00 +38 +07 +00 +00 +00 +00 +00 +00 +01 +00 +55 +38 +07 +00 +00 +00 +00 +00 +00 +4b +07 +00 +00 +00 +00 +00 +00 +01 +00 +53 +4b +07 +00 +00 +00 +00 +00 +00 +4e +07 +00 +00 +00 +00 +00 +00 +01 +00 +55 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +07 +00 +00 +00 +00 +00 +00 +78 +07 +00 +00 +00 +00 +00 +00 +03 +00 +77 +b8 +7f +78 +07 +00 +00 +00 +00 +00 +00 +7f +08 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +7f +08 +00 +00 +00 +00 +00 +00 +80 +08 +00 +00 +00 +00 +00 +00 +03 +00 +77 +b8 +7f +80 +08 +00 +00 +00 +00 +00 +00 +a2 +0c +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +07 +00 +00 +00 +00 +00 +00 +99 +07 +00 +00 +00 +00 +00 +00 +01 +00 +55 +99 +07 +00 +00 +00 +00 +00 +00 +76 +08 +00 +00 +00 +00 +00 +00 +01 +00 +5e +80 +08 +00 +00 +00 +00 +00 +00 +a8 +08 +00 +00 +00 +00 +00 +00 +01 +00 +5e +a8 +08 +00 +00 +00 +00 +00 +00 +b5 +08 +00 +00 +00 +00 +00 +00 +01 +00 +55 +b5 +08 +00 +00 +00 +00 +00 +00 +a2 +0c +00 +00 +00 +00 +00 +00 +01 +00 +5e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +07 +00 +00 +00 +00 +00 +00 +8f +07 +00 +00 +00 +00 +00 +00 +01 +00 +54 +8f +07 +00 +00 +00 +00 +00 +00 +67 +08 +00 +00 +00 +00 +00 +00 +01 +00 +56 +80 +08 +00 +00 +00 +00 +00 +00 +f9 +08 +00 +00 +00 +00 +00 +00 +01 +00 +56 +f9 +08 +00 +00 +00 +00 +00 +00 +12 +09 +00 +00 +00 +00 +00 +00 +01 +00 +50 +12 +09 +00 +00 +00 +00 +00 +00 +17 +09 +00 +00 +00 +00 +00 +00 +01 +00 +56 +17 +09 +00 +00 +00 +00 +00 +00 +30 +09 +00 +00 +00 +00 +00 +00 +01 +00 +50 +30 +09 +00 +00 +00 +00 +00 +00 +35 +09 +00 +00 +00 +00 +00 +00 +01 +00 +56 +35 +09 +00 +00 +00 +00 +00 +00 +41 +09 +00 +00 +00 +00 +00 +00 +01 +00 +50 +41 +09 +00 +00 +00 +00 +00 +00 +5c +09 +00 +00 +00 +00 +00 +00 +01 +00 +56 +5c +09 +00 +00 +00 +00 +00 +00 +68 +09 +00 +00 +00 +00 +00 +00 +01 +00 +50 +68 +09 +00 +00 +00 +00 +00 +00 +89 +09 +00 +00 +00 +00 +00 +00 +01 +00 +56 +89 +09 +00 +00 +00 +00 +00 +00 +95 +09 +00 +00 +00 +00 +00 +00 +01 +00 +50 +95 +09 +00 +00 +00 +00 +00 +00 +b9 +09 +00 +00 +00 +00 +00 +00 +01 +00 +56 +b9 +09 +00 +00 +00 +00 +00 +00 +c5 +09 +00 +00 +00 +00 +00 +00 +01 +00 +50 +c5 +09 +00 +00 +00 +00 +00 +00 +d7 +09 +00 +00 +00 +00 +00 +00 +01 +00 +56 +d7 +09 +00 +00 +00 +00 +00 +00 +e6 +09 +00 +00 +00 +00 +00 +00 +01 +00 +50 +e6 +09 +00 +00 +00 +00 +00 +00 +f0 +09 +00 +00 +00 +00 +00 +00 +01 +00 +56 +f0 +09 +00 +00 +00 +00 +00 +00 +ff +09 +00 +00 +00 +00 +00 +00 +01 +00 +50 +ff +09 +00 +00 +00 +00 +00 +00 +09 +0a +00 +00 +00 +00 +00 +00 +01 +00 +56 +09 +0a +00 +00 +00 +00 +00 +00 +18 +0a +00 +00 +00 +00 +00 +00 +01 +00 +50 +18 +0a +00 +00 +00 +00 +00 +00 +1d +0a +00 +00 +00 +00 +00 +00 +01 +00 +56 +1d +0a +00 +00 +00 +00 +00 +00 +35 +0a +00 +00 +00 +00 +00 +00 +01 +00 +50 +35 +0a +00 +00 +00 +00 +00 +00 +3a +0a +00 +00 +00 +00 +00 +00 +01 +00 +56 +3a +0a +00 +00 +00 +00 +00 +00 +46 +0a +00 +00 +00 +00 +00 +00 +01 +00 +50 +46 +0a +00 +00 +00 +00 +00 +00 +5d +0a +00 +00 +00 +00 +00 +00 +01 +00 +56 +5d +0a +00 +00 +00 +00 +00 +00 +6f +0a +00 +00 +00 +00 +00 +00 +01 +00 +50 +6f +0a +00 +00 +00 +00 +00 +00 +74 +0a +00 +00 +00 +00 +00 +00 +01 +00 +56 +74 +0a +00 +00 +00 +00 +00 +00 +8b +0a +00 +00 +00 +00 +00 +00 +01 +00 +50 +8b +0a +00 +00 +00 +00 +00 +00 +90 +0a +00 +00 +00 +00 +00 +00 +01 +00 +56 +90 +0a +00 +00 +00 +00 +00 +00 +a7 +0a +00 +00 +00 +00 +00 +00 +01 +00 +50 +a7 +0a +00 +00 +00 +00 +00 +00 +ac +0a +00 +00 +00 +00 +00 +00 +01 +00 +56 +ac +0a +00 +00 +00 +00 +00 +00 +be +0a +00 +00 +00 +00 +00 +00 +01 +00 +50 +be +0a +00 +00 +00 +00 +00 +00 +c3 +0a +00 +00 +00 +00 +00 +00 +01 +00 +56 +c3 +0a +00 +00 +00 +00 +00 +00 +d5 +0a +00 +00 +00 +00 +00 +00 +01 +00 +50 +d5 +0a +00 +00 +00 +00 +00 +00 +da +0a +00 +00 +00 +00 +00 +00 +01 +00 +56 +da +0a +00 +00 +00 +00 +00 +00 +ec +0a +00 +00 +00 +00 +00 +00 +01 +00 +50 +ec +0a +00 +00 +00 +00 +00 +00 +f1 +0a +00 +00 +00 +00 +00 +00 +01 +00 +56 +f1 +0a +00 +00 +00 +00 +00 +00 +03 +0b +00 +00 +00 +00 +00 +00 +01 +00 +50 +03 +0b +00 +00 +00 +00 +00 +00 +17 +0b +00 +00 +00 +00 +00 +00 +01 +00 +56 +17 +0b +00 +00 +00 +00 +00 +00 +31 +0b +00 +00 +00 +00 +00 +00 +01 +00 +50 +31 +0b +00 +00 +00 +00 +00 +00 +47 +0b +00 +00 +00 +00 +00 +00 +01 +00 +56 +47 +0b +00 +00 +00 +00 +00 +00 +4a +0b +00 +00 +00 +00 +00 +00 +01 +00 +50 +4a +0b +00 +00 +00 +00 +00 +00 +77 +0b +00 +00 +00 +00 +00 +00 +01 +00 +56 +77 +0b +00 +00 +00 +00 +00 +00 +83 +0b +00 +00 +00 +00 +00 +00 +01 +00 +50 +83 +0b +00 +00 +00 +00 +00 +00 +9d +0b +00 +00 +00 +00 +00 +00 +01 +00 +56 +9d +0b +00 +00 +00 +00 +00 +00 +a9 +0b +00 +00 +00 +00 +00 +00 +01 +00 +50 +a9 +0b +00 +00 +00 +00 +00 +00 +cd +0b +00 +00 +00 +00 +00 +00 +01 +00 +56 +cd +0b +00 +00 +00 +00 +00 +00 +d9 +0b +00 +00 +00 +00 +00 +00 +01 +00 +50 +d9 +0b +00 +00 +00 +00 +00 +00 +fc +0b +00 +00 +00 +00 +00 +00 +01 +00 +56 +fc +0b +00 +00 +00 +00 +00 +00 +08 +0c +00 +00 +00 +00 +00 +00 +01 +00 +50 +08 +0c +00 +00 +00 +00 +00 +00 +2c +0c +00 +00 +00 +00 +00 +00 +01 +00 +56 +2c +0c +00 +00 +00 +00 +00 +00 +3b +0c +00 +00 +00 +00 +00 +00 +01 +00 +50 +3b +0c +00 +00 +00 +00 +00 +00 +45 +0c +00 +00 +00 +00 +00 +00 +01 +00 +56 +45 +0c +00 +00 +00 +00 +00 +00 +54 +0c +00 +00 +00 +00 +00 +00 +01 +00 +50 +54 +0c +00 +00 +00 +00 +00 +00 +a2 +0c +00 +00 +00 +00 +00 +00 +01 +00 +56 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +07 +00 +00 +00 +00 +00 +00 +8f +07 +00 +00 +00 +00 +00 +00 +01 +00 +51 +8f +07 +00 +00 +00 +00 +00 +00 +62 +08 +00 +00 +00 +00 +00 +00 +01 +00 +53 +80 +08 +00 +00 +00 +00 +00 +00 +a2 +0c +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +07 +00 +00 +00 +00 +00 +00 +8f +07 +00 +00 +00 +00 +00 +00 +01 +00 +52 +8f +07 +00 +00 +00 +00 +00 +00 +7b +08 +00 +00 +00 +00 +00 +00 +01 +00 +5f +80 +08 +00 +00 +00 +00 +00 +00 +a2 +0c +00 +00 +00 +00 +00 +00 +01 +00 +5f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +96 +07 +00 +00 +00 +00 +00 +00 +6c +08 +00 +00 +00 +00 +00 +00 +01 +00 +5c +80 +08 +00 +00 +00 +00 +00 +00 +a8 +08 +00 +00 +00 +00 +00 +00 +01 +00 +5c +ab +08 +00 +00 +00 +00 +00 +00 +a2 +0c +00 +00 +00 +00 +00 +00 +01 +00 +5c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b3 +07 +00 +00 +00 +00 +00 +00 +71 +08 +00 +00 +00 +00 +00 +00 +01 +00 +5d +80 +08 +00 +00 +00 +00 +00 +00 +a8 +08 +00 +00 +00 +00 +00 +00 +01 +00 +5d +b5 +08 +00 +00 +00 +00 +00 +00 +a2 +0c +00 +00 +00 +00 +00 +00 +01 +00 +5d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +0c +00 +00 +00 +00 +00 +00 +b1 +0c +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +b1 +0c +00 +00 +00 +00 +00 +00 +c2 +0c +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +c2 +0c +00 +00 +00 +00 +00 +00 +c3 +0c +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +c3 +0c +00 +00 +00 +00 +00 +00 +da +0c +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +da +0c +00 +00 +00 +00 +00 +00 +db +0c +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +0c +00 +00 +00 +00 +00 +00 +ba +0c +00 +00 +00 +00 +00 +00 +01 +00 +55 +ba +0c +00 +00 +00 +00 +00 +00 +c2 +0c +00 +00 +00 +00 +00 +00 +01 +00 +53 +c2 +0c +00 +00 +00 +00 +00 +00 +c3 +0c +00 +00 +00 +00 +00 +00 +01 +00 +55 +c3 +0c +00 +00 +00 +00 +00 +00 +da +0c +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +0d +00 +00 +00 +00 +00 +00 +24 +0d +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +24 +0d +00 +00 +00 +00 +00 +00 +30 +0d +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +30 +0d +00 +00 +00 +00 +00 +00 +33 +0d +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +33 +0d +00 +00 +00 +00 +00 +00 +4a +0d +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +4a +0d +00 +00 +00 +00 +00 +00 +4b +0d +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +0d +00 +00 +00 +00 +00 +00 +36 +0d +00 +00 +00 +00 +00 +00 +01 +00 +55 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +0d +00 +00 +00 +00 +00 +00 +66 +0d +00 +00 +00 +00 +00 +00 +01 +00 +55 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +0d +00 +00 +00 +00 +00 +00 +74 +0d +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +74 +0d +00 +00 +00 +00 +00 +00 +9a +0d +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +9a +0d +00 +00 +00 +00 +00 +00 +9b +0d +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +9b +0d +00 +00 +00 +00 +00 +00 +a7 +0d +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +a7 +0d +00 +00 +00 +00 +00 +00 +a8 +0d +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +a8 +0d +00 +00 +00 +00 +00 +00 +b6 +0d +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +b6 +0d +00 +00 +00 +00 +00 +00 +bb +0d +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +0d +00 +00 +00 +00 +00 +00 +8e +0d +00 +00 +00 +00 +00 +00 +01 +00 +55 +9b +0d +00 +00 +00 +00 +00 +00 +ab +0d +00 +00 +00 +00 +00 +00 +01 +00 +55 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +0d +00 +00 +00 +00 +00 +00 +c1 +0d +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +c1 +0d +00 +00 +00 +00 +00 +00 +e7 +0d +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +e7 +0d +00 +00 +00 +00 +00 +00 +e8 +0d +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +e8 +0d +00 +00 +00 +00 +00 +00 +f0 +0d +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +f0 +0d +00 +00 +00 +00 +00 +00 +fb +0d +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +fb +0d +00 +00 +00 +00 +00 +00 +2e +0e +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +2e +0e +00 +00 +00 +00 +00 +00 +39 +0e +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +39 +0e +00 +00 +00 +00 +00 +00 +51 +0e +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +51 +0e +00 +00 +00 +00 +00 +00 +55 +0e +00 +00 +00 +00 +00 +00 +02 +00 +77 +78 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +0d +00 +00 +00 +00 +00 +00 +cb +0d +00 +00 +00 +00 +00 +00 +01 +00 +55 +cb +0d +00 +00 +00 +00 +00 +00 +e7 +0d +00 +00 +00 +00 +00 +00 +01 +00 +53 +e7 +0d +00 +00 +00 +00 +00 +00 +e8 +0d +00 +00 +00 +00 +00 +00 +01 +00 +55 +e8 +0d +00 +00 +00 +00 +00 +00 +f0 +0d +00 +00 +00 +00 +00 +00 +01 +00 +53 +f0 +0d +00 +00 +00 +00 +00 +00 +fb +0d +00 +00 +00 +00 +00 +00 +01 +00 +55 +fb +0d +00 +00 +00 +00 +00 +00 +2e +0e +00 +00 +00 +00 +00 +00 +01 +00 +53 +39 +0e +00 +00 +00 +00 +00 +00 +51 +0e +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +0e +00 +00 +00 +00 +00 +00 +88 +0e +00 +00 +00 +00 +00 +00 +02 +00 +77 +48 +88 +0e +00 +00 +00 +00 +00 +00 +19 +0f +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +19 +0f +00 +00 +00 +00 +00 +00 +1a +0f +00 +00 +00 +00 +00 +00 +02 +00 +77 +48 +1a +0f +00 +00 +00 +00 +00 +00 +a8 +0f +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +0e +00 +00 +00 +00 +00 +00 +a2 +0e +00 +00 +00 +00 +00 +00 +01 +00 +55 +a2 +0e +00 +00 +00 +00 +00 +00 +fc +0e +00 +00 +00 +00 +00 +00 +01 +00 +53 +fc +0e +00 +00 +00 +00 +00 +00 +1a +0f +00 +00 +00 +00 +00 +00 +01 +00 +55 +1a +0f +00 +00 +00 +00 +00 +00 +25 +0f +00 +00 +00 +00 +00 +00 +01 +00 +53 +45 +0f +00 +00 +00 +00 +00 +00 +55 +0f +00 +00 +00 +00 +00 +00 +01 +00 +55 +55 +0f +00 +00 +00 +00 +00 +00 +91 +0f +00 +00 +00 +00 +00 +00 +01 +00 +53 +91 +0f +00 +00 +00 +00 +00 +00 +9e +0f +00 +00 +00 +00 +00 +00 +01 +00 +55 +9e +0f +00 +00 +00 +00 +00 +00 +a8 +0f +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +0e +00 +00 +00 +00 +00 +00 +98 +0e +00 +00 +00 +00 +00 +00 +01 +00 +54 +98 +0e +00 +00 +00 +00 +00 +00 +10 +0f +00 +00 +00 +00 +00 +00 +01 +00 +5e +10 +0f +00 +00 +00 +00 +00 +00 +1a +0f +00 +00 +00 +00 +00 +00 +01 +00 +54 +1a +0f +00 +00 +00 +00 +00 +00 +a8 +0f +00 +00 +00 +00 +00 +00 +01 +00 +5e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +0e +00 +00 +00 +00 +00 +00 +98 +0e +00 +00 +00 +00 +00 +00 +01 +00 +51 +98 +0e +00 +00 +00 +00 +00 +00 +0b +0f +00 +00 +00 +00 +00 +00 +01 +00 +5d +0b +0f +00 +00 +00 +00 +00 +00 +1a +0f +00 +00 +00 +00 +00 +00 +01 +00 +51 +1a +0f +00 +00 +00 +00 +00 +00 +4a +0f +00 +00 +00 +00 +00 +00 +01 +00 +5d +4a +0f +00 +00 +00 +00 +00 +00 +55 +0f +00 +00 +00 +00 +00 +00 +01 +00 +51 +55 +0f +00 +00 +00 +00 +00 +00 +91 +0f +00 +00 +00 +00 +00 +00 +01 +00 +5d +91 +0f +00 +00 +00 +00 +00 +00 +a3 +0f +00 +00 +00 +00 +00 +00 +01 +00 +51 +a3 +0f +00 +00 +00 +00 +00 +00 +a8 +0f +00 +00 +00 +00 +00 +00 +01 +00 +5d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +0e +00 +00 +00 +00 +00 +00 +98 +0e +00 +00 +00 +00 +00 +00 +01 +00 +52 +98 +0e +00 +00 +00 +00 +00 +00 +15 +0f +00 +00 +00 +00 +00 +00 +01 +00 +5f +15 +0f +00 +00 +00 +00 +00 +00 +1a +0f +00 +00 +00 +00 +00 +00 +01 +00 +52 +1a +0f +00 +00 +00 +00 +00 +00 +a8 +0f +00 +00 +00 +00 +00 +00 +01 +00 +5f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9f +0e +00 +00 +00 +00 +00 +00 +01 +0f +00 +00 +00 +00 +00 +00 +01 +00 +56 +1a +0f +00 +00 +00 +00 +00 +00 +45 +0f +00 +00 +00 +00 +00 +00 +01 +00 +56 +4d +0f +00 +00 +00 +00 +00 +00 +91 +0f +00 +00 +00 +00 +00 +00 +01 +00 +56 +98 +0f +00 +00 +00 +00 +00 +00 +a8 +0f +00 +00 +00 +00 +00 +00 +01 +00 +56 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c2 +0e +00 +00 +00 +00 +00 +00 +d6 +0e +00 +00 +00 +00 +00 +00 +01 +00 +50 +e6 +0e +00 +00 +00 +00 +00 +00 +ee +0e +00 +00 +00 +00 +00 +00 +01 +00 +50 +f7 +0e +00 +00 +00 +00 +00 +00 +01 +0f +00 +00 +00 +00 +00 +00 +01 +00 +50 +1a +0f +00 +00 +00 +00 +00 +00 +2a +0f +00 +00 +00 +00 +00 +00 +01 +00 +50 +8c +0f +00 +00 +00 +00 +00 +00 +91 +0f +00 +00 +00 +00 +00 +00 +01 +00 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +0f +00 +00 +00 +00 +00 +00 +db +0f +00 +00 +00 +00 +00 +00 +03 +00 +77 +a8 +7f +db +0f +00 +00 +00 +00 +00 +00 +ff +10 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +ff +10 +00 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +03 +00 +77 +a8 +7f +00 +11 +00 +00 +00 +00 +00 +00 +2d +12 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +0f +00 +00 +00 +00 +00 +00 +fd +0f +00 +00 +00 +00 +00 +00 +01 +00 +55 +fd +0f +00 +00 +00 +00 +00 +00 +76 +10 +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +11 +00 +00 +00 +00 +00 +00 +28 +11 +00 +00 +00 +00 +00 +00 +01 +00 +53 +98 +11 +00 +00 +00 +00 +00 +00 +ea +11 +00 +00 +00 +00 +00 +00 +01 +00 +53 +1e +12 +00 +00 +00 +00 +00 +00 +2d +12 +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +0f +00 +00 +00 +00 +00 +00 +fd +0f +00 +00 +00 +00 +00 +00 +01 +00 +54 +fd +0f +00 +00 +00 +00 +00 +00 +2d +12 +00 +00 +00 +00 +00 +00 +02 +00 +91 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +0f +00 +00 +00 +00 +00 +00 +fd +0f +00 +00 +00 +00 +00 +00 +01 +00 +51 +fd +0f +00 +00 +00 +00 +00 +00 +f6 +10 +00 +00 +00 +00 +00 +00 +01 +00 +5e +00 +11 +00 +00 +00 +00 +00 +00 +2d +12 +00 +00 +00 +00 +00 +00 +01 +00 +5e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +0f +00 +00 +00 +00 +00 +00 +fd +0f +00 +00 +00 +00 +00 +00 +01 +00 +52 +fd +0f +00 +00 +00 +00 +00 +00 +bf +10 +00 +00 +00 +00 +00 +00 +02 +00 +91 +08 +00 +11 +00 +00 +00 +00 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +02 +00 +91 +08 +98 +11 +00 +00 +00 +00 +00 +00 +2d +12 +00 +00 +00 +00 +00 +00 +02 +00 +91 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +0f +00 +00 +00 +00 +00 +00 +11 +10 +00 +00 +00 +00 +00 +00 +01 +00 +58 +11 +10 +00 +00 +00 +00 +00 +00 +ec +10 +00 +00 +00 +00 +00 +00 +01 +00 +5c +00 +11 +00 +00 +00 +00 +00 +00 +d0 +11 +00 +00 +00 +00 +00 +00 +01 +00 +5c +d0 +11 +00 +00 +00 +00 +00 +00 +e5 +11 +00 +00 +00 +00 +00 +00 +01 +00 +58 +e5 +11 +00 +00 +00 +00 +00 +00 +fe +11 +00 +00 +00 +00 +00 +00 +01 +00 +5c +1e +12 +00 +00 +00 +00 +00 +00 +2d +12 +00 +00 +00 +00 +00 +00 +01 +00 +58 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +0f +00 +00 +00 +00 +00 +00 +fd +0f +00 +00 +00 +00 +00 +00 +01 +00 +59 +fd +0f +00 +00 +00 +00 +00 +00 +2d +12 +00 +00 +00 +00 +00 +00 +02 +00 +91 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f7 +0f +00 +00 +00 +00 +00 +00 +f1 +10 +00 +00 +00 +00 +00 +00 +01 +00 +5d +00 +11 +00 +00 +00 +00 +00 +00 +2d +12 +00 +00 +00 +00 +00 +00 +01 +00 +5d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +51 +10 +00 +00 +00 +00 +00 +00 +e7 +10 +00 +00 +00 +00 +00 +00 +01 +00 +56 +25 +11 +00 +00 +00 +00 +00 +00 +98 +11 +00 +00 +00 +00 +00 +00 +01 +00 +56 +ea +11 +00 +00 +00 +00 +00 +00 +1e +12 +00 +00 +00 +00 +00 +00 +01 +00 +56 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b6 +10 +00 +00 +00 +00 +00 +00 +e2 +10 +00 +00 +00 +00 +00 +00 +01 +00 +53 +83 +11 +00 +00 +00 +00 +00 +00 +98 +11 +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d7 +0f +00 +00 +00 +00 +00 +00 +fb +10 +00 +00 +00 +00 +00 +00 +01 +00 +5f +00 +11 +00 +00 +00 +00 +00 +00 +2d +12 +00 +00 +00 +00 +00 +00 +01 +00 +5f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +12 +00 +00 +00 +00 +00 +00 +52 +12 +00 +00 +00 +00 +00 +00 +02 +00 +77 +58 +52 +12 +00 +00 +00 +00 +00 +00 +c1 +12 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +c1 +12 +00 +00 +00 +00 +00 +00 +c2 +12 +00 +00 +00 +00 +00 +00 +02 +00 +77 +58 +c2 +12 +00 +00 +00 +00 +00 +00 +51 +13 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +12 +00 +00 +00 +00 +00 +00 +70 +12 +00 +00 +00 +00 +00 +00 +01 +00 +55 +70 +12 +00 +00 +00 +00 +00 +00 +9f +12 +00 +00 +00 +00 +00 +00 +01 +00 +53 +a5 +12 +00 +00 +00 +00 +00 +00 +cd +12 +00 +00 +00 +00 +00 +00 +01 +00 +55 +cd +12 +00 +00 +00 +00 +00 +00 +e2 +12 +00 +00 +00 +00 +00 +00 +01 +00 +53 +1c +13 +00 +00 +00 +00 +00 +00 +2d +13 +00 +00 +00 +00 +00 +00 +01 +00 +55 +2d +13 +00 +00 +00 +00 +00 +00 +51 +13 +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +12 +00 +00 +00 +00 +00 +00 +63 +12 +00 +00 +00 +00 +00 +00 +01 +00 +54 +63 +12 +00 +00 +00 +00 +00 +00 +9f +12 +00 +00 +00 +00 +00 +00 +01 +00 +5e +9f +12 +00 +00 +00 +00 +00 +00 +a5 +12 +00 +00 +00 +00 +00 +00 +01 +00 +53 +a5 +12 +00 +00 +00 +00 +00 +00 +a9 +12 +00 +00 +00 +00 +00 +00 +01 +00 +5e +bd +12 +00 +00 +00 +00 +00 +00 +c2 +12 +00 +00 +00 +00 +00 +00 +01 +00 +54 +c2 +12 +00 +00 +00 +00 +00 +00 +e2 +12 +00 +00 +00 +00 +00 +00 +01 +00 +5e +e2 +12 +00 +00 +00 +00 +00 +00 +1c +13 +00 +00 +00 +00 +00 +00 +01 +00 +53 +1c +13 +00 +00 +00 +00 +00 +00 +1c +13 +00 +00 +00 +00 +00 +00 +01 +00 +5e +2d +13 +00 +00 +00 +00 +00 +00 +51 +13 +00 +00 +00 +00 +00 +00 +01 +00 +5e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +12 +00 +00 +00 +00 +00 +00 +63 +12 +00 +00 +00 +00 +00 +00 +01 +00 +51 +63 +12 +00 +00 +00 +00 +00 +00 +ae +12 +00 +00 +00 +00 +00 +00 +01 +00 +56 +ae +12 +00 +00 +00 +00 +00 +00 +c2 +12 +00 +00 +00 +00 +00 +00 +01 +00 +51 +c2 +12 +00 +00 +00 +00 +00 +00 +f4 +12 +00 +00 +00 +00 +00 +00 +01 +00 +56 +1c +13 +00 +00 +00 +00 +00 +00 +51 +13 +00 +00 +00 +00 +00 +00 +01 +00 +56 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +12 +00 +00 +00 +00 +00 +00 +b8 +12 +00 +00 +00 +00 +00 +00 +01 +00 +5d +c2 +12 +00 +00 +00 +00 +00 +00 +51 +13 +00 +00 +00 +00 +00 +00 +01 +00 +5d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a1 +12 +00 +00 +00 +00 +00 +00 +ae +12 +00 +00 +00 +00 +00 +00 +01 +00 +56 +f4 +12 +00 +00 +00 +00 +00 +00 +1c +13 +00 +00 +00 +00 +00 +00 +01 +00 +56 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +97 +12 +00 +00 +00 +00 +00 +00 +b3 +12 +00 +00 +00 +00 +00 +00 +01 +00 +5c +eb +12 +00 +00 +00 +00 +00 +00 +1c +13 +00 +00 +00 +00 +00 +00 +01 +00 +5c +4c +13 +00 +00 +00 +00 +00 +00 +51 +13 +00 +00 +00 +00 +00 +00 +01 +00 +5c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +13 +00 +00 +00 +00 +00 +00 +76 +13 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +76 +13 +00 +00 +00 +00 +00 +00 +13 +14 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +13 +14 +00 +00 +00 +00 +00 +00 +14 +14 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +14 +14 +00 +00 +00 +00 +00 +00 +42 +14 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +13 +00 +00 +00 +00 +00 +00 +99 +13 +00 +00 +00 +00 +00 +00 +01 +00 +55 +99 +13 +00 +00 +00 +00 +00 +00 +02 +14 +00 +00 +00 +00 +00 +00 +01 +00 +53 +02 +14 +00 +00 +00 +00 +00 +00 +24 +14 +00 +00 +00 +00 +00 +00 +01 +00 +55 +24 +14 +00 +00 +00 +00 +00 +00 +42 +14 +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +13 +00 +00 +00 +00 +00 +00 +8b +13 +00 +00 +00 +00 +00 +00 +01 +00 +54 +8b +13 +00 +00 +00 +00 +00 +00 +0f +14 +00 +00 +00 +00 +00 +00 +01 +00 +5c +0f +14 +00 +00 +00 +00 +00 +00 +14 +14 +00 +00 +00 +00 +00 +00 +01 +00 +54 +14 +14 +00 +00 +00 +00 +00 +00 +42 +14 +00 +00 +00 +00 +00 +00 +01 +00 +5c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +83 +13 +00 +00 +00 +00 +00 +00 +07 +14 +00 +00 +00 +00 +00 +00 +01 +00 +56 +14 +14 +00 +00 +00 +00 +00 +00 +42 +14 +00 +00 +00 +00 +00 +00 +01 +00 +56 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +14 +00 +00 +00 +00 +00 +00 +66 +14 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +66 +14 +00 +00 +00 +00 +00 +00 +86 +14 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +86 +14 +00 +00 +00 +00 +00 +00 +87 +14 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +87 +14 +00 +00 +00 +00 +00 +00 +aa +14 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +aa +14 +00 +00 +00 +00 +00 +00 +af +14 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +af +14 +00 +00 +00 +00 +00 +00 +ed +14 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +ed +14 +00 +00 +00 +00 +00 +00 +f0 +14 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +14 +00 +00 +00 +00 +00 +00 +96 +14 +00 +00 +00 +00 +00 +00 +01 +00 +55 +96 +14 +00 +00 +00 +00 +00 +00 +9f +14 +00 +00 +00 +00 +00 +00 +01 +00 +56 +af +14 +00 +00 +00 +00 +00 +00 +b3 +14 +00 +00 +00 +00 +00 +00 +01 +00 +55 +b3 +14 +00 +00 +00 +00 +00 +00 +e4 +14 +00 +00 +00 +00 +00 +00 +01 +00 +56 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +14 +00 +00 +00 +00 +00 +00 +70 +14 +00 +00 +00 +00 +00 +00 +01 +00 +54 +70 +14 +00 +00 +00 +00 +00 +00 +82 +14 +00 +00 +00 +00 +00 +00 +01 +00 +5c +82 +14 +00 +00 +00 +00 +00 +00 +87 +14 +00 +00 +00 +00 +00 +00 +01 +00 +54 +87 +14 +00 +00 +00 +00 +00 +00 +a4 +14 +00 +00 +00 +00 +00 +00 +01 +00 +5c +a4 +14 +00 +00 +00 +00 +00 +00 +af +14 +00 +00 +00 +00 +00 +00 +01 +00 +55 +af +14 +00 +00 +00 +00 +00 +00 +e9 +14 +00 +00 +00 +00 +00 +00 +01 +00 +5c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bf +14 +00 +00 +00 +00 +00 +00 +df +14 +00 +00 +00 +00 +00 +00 +01 +00 +53 +df +14 +00 +00 +00 +00 +00 +00 +f0 +14 +00 +00 +00 +00 +00 +00 +01 +00 +55 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f0 +14 +00 +00 +00 +00 +00 +00 +f2 +14 +00 +00 +00 +00 +00 +00 +03 +00 +77 +a8 +7e +f2 +14 +00 +00 +00 +00 +00 +00 +f4 +14 +00 +00 +00 +00 +00 +00 +03 +00 +77 +b0 +7e +f4 +14 +00 +00 +00 +00 +00 +00 +f6 +14 +00 +00 +00 +00 +00 +00 +03 +00 +77 +b8 +7e +f6 +14 +00 +00 +00 +00 +00 +00 +f8 +14 +00 +00 +00 +00 +00 +00 +03 +00 +77 +c0 +7e +f8 +14 +00 +00 +00 +00 +00 +00 +f9 +14 +00 +00 +00 +00 +00 +00 +03 +00 +77 +c8 +7e +f9 +14 +00 +00 +00 +00 +00 +00 +fa +14 +00 +00 +00 +00 +00 +00 +03 +00 +77 +d0 +7e +fa +14 +00 +00 +00 +00 +00 +00 +01 +15 +00 +00 +00 +00 +00 +00 +03 +00 +77 +d8 +7e +01 +15 +00 +00 +00 +00 +00 +00 +16 +15 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +16 +15 +00 +00 +00 +00 +00 +00 +19 +15 +00 +00 +00 +00 +00 +00 +03 +00 +77 +d8 +7e +19 +15 +00 +00 +00 +00 +00 +00 +1a +15 +00 +00 +00 +00 +00 +00 +03 +00 +77 +d0 +7e +1a +15 +00 +00 +00 +00 +00 +00 +1c +15 +00 +00 +00 +00 +00 +00 +03 +00 +77 +c8 +7e +1c +15 +00 +00 +00 +00 +00 +00 +1e +15 +00 +00 +00 +00 +00 +00 +03 +00 +77 +c0 +7e +1e +15 +00 +00 +00 +00 +00 +00 +20 +15 +00 +00 +00 +00 +00 +00 +03 +00 +77 +b8 +7e +20 +15 +00 +00 +00 +00 +00 +00 +22 +15 +00 +00 +00 +00 +00 +00 +03 +00 +77 +b0 +7e +22 +15 +00 +00 +00 +00 +00 +00 +23 +15 +00 +00 +00 +00 +00 +00 +03 +00 +77 +a8 +7e +23 +15 +00 +00 +00 +00 +00 +00 +6a +17 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +6a +17 +00 +00 +00 +00 +00 +00 +6b +17 +00 +00 +00 +00 +00 +00 +03 +00 +77 +d8 +7e +6b +17 +00 +00 +00 +00 +00 +00 +6c +17 +00 +00 +00 +00 +00 +00 +03 +00 +77 +d0 +7e +6c +17 +00 +00 +00 +00 +00 +00 +6e +17 +00 +00 +00 +00 +00 +00 +03 +00 +77 +c8 +7e +6e +17 +00 +00 +00 +00 +00 +00 +70 +17 +00 +00 +00 +00 +00 +00 +03 +00 +77 +c0 +7e +70 +17 +00 +00 +00 +00 +00 +00 +72 +17 +00 +00 +00 +00 +00 +00 +03 +00 +77 +b8 +7e +72 +17 +00 +00 +00 +00 +00 +00 +74 +17 +00 +00 +00 +00 +00 +00 +03 +00 +77 +b0 +7e +74 +17 +00 +00 +00 +00 +00 +00 +77 +17 +00 +00 +00 +00 +00 +00 +03 +00 +77 +a8 +7e +77 +17 +00 +00 +00 +00 +00 +00 +1b +18 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2b +15 +00 +00 +00 +00 +00 +00 +72 +17 +00 +00 +00 +00 +00 +00 +01 +00 +5e +77 +17 +00 +00 +00 +00 +00 +00 +1b +18 +00 +00 +00 +00 +00 +00 +01 +00 +5e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b5 +15 +00 +00 +00 +00 +00 +00 +0b +16 +00 +00 +00 +00 +00 +00 +01 +00 +53 +d6 +16 +00 +00 +00 +00 +00 +00 +6b +17 +00 +00 +00 +00 +00 +00 +01 +00 +53 +ba +17 +00 +00 +00 +00 +00 +00 +07 +18 +00 +00 +00 +00 +00 +00 +01 +00 +53 +0c +18 +00 +00 +00 +00 +00 +00 +1b +18 +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0b +16 +00 +00 +00 +00 +00 +00 +3e +16 +00 +00 +00 +00 +00 +00 +01 +00 +53 +c0 +16 +00 +00 +00 +00 +00 +00 +d6 +16 +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6e +15 +00 +00 +00 +00 +00 +00 +28 +17 +00 +00 +00 +00 +00 +00 +01 +00 +5c +77 +17 +00 +00 +00 +00 +00 +00 +1b +18 +00 +00 +00 +00 +00 +00 +01 +00 +5c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6e +15 +00 +00 +00 +00 +00 +00 +b5 +15 +00 +00 +00 +00 +00 +00 +01 +00 +53 +37 +16 +00 +00 +00 +00 +00 +00 +3b +16 +00 +00 +00 +00 +00 +00 +01 +00 +50 +3e +16 +00 +00 +00 +00 +00 +00 +6c +16 +00 +00 +00 +00 +00 +00 +01 +00 +53 +6c +16 +00 +00 +00 +00 +00 +00 +70 +16 +00 +00 +00 +00 +00 +00 +01 +00 +50 +73 +16 +00 +00 +00 +00 +00 +00 +73 +16 +00 +00 +00 +00 +00 +00 +01 +00 +53 +77 +17 +00 +00 +00 +00 +00 +00 +80 +17 +00 +00 +00 +00 +00 +00 +01 +00 +53 +80 +17 +00 +00 +00 +00 +00 +00 +90 +17 +00 +00 +00 +00 +00 +00 +01 +00 +50 +90 +17 +00 +00 +00 +00 +00 +00 +ba +17 +00 +00 +00 +00 +00 +00 +01 +00 +53 +07 +18 +00 +00 +00 +00 +00 +00 +0c +18 +00 +00 +00 +00 +00 +00 +01 +00 +53 +0c +18 +00 +00 +00 +00 +00 +00 +11 +18 +00 +00 +00 +00 +00 +00 +01 +00 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +86 +17 +00 +00 +00 +00 +00 +00 +bf +17 +00 +00 +00 +00 +00 +00 +01 +00 +54 +07 +18 +00 +00 +00 +00 +00 +00 +11 +18 +00 +00 +00 +00 +00 +00 +01 +00 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7a +02 +00 +00 +02 +00 +00 +00 +00 +00 +52 +0f +00 +00 +d2 +04 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +69 +6e +69 +74 +69 +61 +6c +69 +7a +65 +00 +ef +04 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +6c +65 +61 +6e +75 +70 +00 +0c +05 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +64 +65 +63 +00 +5f +05 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +62 +69 +6e +00 +b2 +05 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +6f +63 +74 +00 +05 +06 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +68 +65 +78 +00 +58 +06 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +63 +68 +61 +72 +63 +6f +6e +73 +74 +5f +6e +61 +73 +6d +00 +ba +06 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +75 +69 +6e +74 +00 +f8 +06 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +69 +6e +74 +00 +36 +07 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +6f +70 +79 +00 +86 +07 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +64 +65 +73 +74 +72 +6f +79 +00 +b9 +07 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +61 +6c +63 +00 +4a +08 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +7a +65 +72 +6f +00 +7d +08 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +69 +73 +5f +7a +65 +72 +6f +00 +b1 +08 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +69 +73 +5f +70 +6f +73 +31 +00 +e5 +08 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +69 +73 +5f +6e +65 +67 +31 +00 +1c +09 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +73 +69 +67 +6e +00 +52 +09 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +67 +65 +74 +5f +75 +69 +6e +74 +00 +89 +09 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +67 +65 +74 +5f +69 +6e +74 +00 +d3 +09 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +68 +65 +63 +6b +5f +73 +69 +7a +65 +00 +8e +0a +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +67 +65 +74 +5f +73 +69 +7a +65 +64 +00 +8c +0b +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +67 +65 +74 +5f +6c +65 +62 +31 +32 +38 +00 +1d +0c +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +73 +69 +7a +65 +5f +6c +65 +62 +31 +32 +38 +00 +74 +0c +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +70 +72 +69 +6e +74 +00 +36 +0d +00 +00 +6d +61 +69 +6e +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +99 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +02 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1b +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +99 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +9c +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +0e +00 +00 +00 +00 +00 +00 +2d +0e +00 +00 +00 +00 +00 +00 +51 +0e +00 +00 +00 +00 +00 +00 +54 +0e +00 +00 +00 +00 +00 +00 +39 +0e +00 +00 +00 +00 +00 +00 +50 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6e +15 +00 +00 +00 +00 +00 +00 +d8 +15 +00 +00 +00 +00 +00 +00 +77 +17 +00 +00 +00 +00 +00 +00 +1b +18 +00 +00 +00 +00 +00 +00 +f8 +16 +00 +00 +00 +00 +00 +00 +fc +16 +00 +00 +00 +00 +00 +00 +ef +16 +00 +00 +00 +00 +00 +00 +f4 +16 +00 +00 +00 +00 +00 +00 +fd +15 +00 +00 +00 +00 +00 +00 +ec +16 +00 +00 +00 +00 +00 +00 +db +15 +00 +00 +00 +00 +00 +00 +df +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6e +15 +00 +00 +00 +00 +00 +00 +bf +15 +00 +00 +00 +00 +00 +00 +77 +17 +00 +00 +00 +00 +00 +00 +1b +18 +00 +00 +00 +00 +00 +00 +fd +15 +00 +00 +00 +00 +00 +00 +d6 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2f +68 +6f +6d +65 +2f +70 +65 +74 +65 +2f +79 +61 +73 +6d +00 +66 +72 +6f +6d +5f +64 +65 +63 +5f +64 +61 +74 +61 +00 +5f +73 +68 +6f +72 +74 +62 +75 +66 +00 +6f +70 +31 +73 +74 +61 +74 +69 +63 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +6f +63 +74 +00 +74 +65 +73 +74 +73 +00 +5f +49 +4f +5f +6c +6f +63 +6b +5f +74 +00 +5f +49 +4f +5f +62 +75 +66 +5f +65 +6e +64 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +44 +49 +56 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +73 +69 +7a +65 +5f +6c +65 +62 +31 +32 +38 +00 +6f +72 +69 +67 +73 +69 +7a +65 +00 +70 +74 +72 +5f +6f +72 +69 +67 +00 +5f +49 +4f +5f +77 +72 +69 +74 +65 +5f +65 +6e +64 +00 +75 +6e +73 +69 +67 +6e +65 +64 +20 +69 +6e +74 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +47 +45 +00 +5f +66 +6c +61 +67 +73 +00 +76 +61 +6c +73 +69 +7a +65 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +47 +54 +00 +79 +61 +73 +6d +5f +69 +6e +74 +65 +72 +6e +61 +6c +5f +65 +72 +72 +6f +72 +5f +00 +5f +6d +61 +72 +6b +65 +72 +73 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +53 +45 +47 +4f +46 +46 +00 +73 +68 +6f +72 +74 +20 +69 +6e +74 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +53 +45 +47 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +62 +69 +6e +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +4e +4f +4e +4e +55 +4d +00 +77 +6f +72 +64 +70 +74 +72 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +57 +52 +54 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +6f +70 +79 +00 +77 +61 +72 +6e +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +67 +65 +74 +5f +73 +69 +7a +65 +64 +00 +5f +70 +6f +73 +00 +72 +75 +6e +5f +74 +65 +73 +74 +00 +73 +74 +64 +6f +75 +74 +00 +73 +69 +7a +65 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +75 +69 +6e +74 +00 +73 +68 +69 +66 +74 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +4c +4e +4f +54 +00 +63 +61 +72 +72 +79 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +6c +65 +61 +6e +75 +70 +00 +72 +65 +73 +75 +6c +74 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +4e +45 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +69 +6e +74 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +67 +65 +74 +5f +75 +69 +6e +74 +00 +6c +69 +62 +79 +61 +73 +6d +2f +74 +65 +73 +74 +73 +2f +6c +65 +62 +31 +32 +38 +5f +74 +65 +73 +74 +2e +63 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +68 +65 +78 +00 +6f +70 +65 +72 +61 +6e +64 +00 +5f +49 +4f +5f +62 +61 +63 +6b +75 +70 +5f +62 +61 +73 +65 +00 +63 +61 +72 +72 +79 +5f +69 +6e +00 +5f +6f +66 +66 +73 +65 +74 +00 +72 +65 +74 +76 +61 +6c +00 +5f +66 +69 +6c +65 +6e +6f +00 +73 +69 +7a +65 +5f +74 +00 +73 +69 +67 +6e +00 +49 +4e +54 +4e +55 +4d +5f +42 +56 +00 +5f +49 +4f +5f +72 +65 +61 +64 +5f +62 +61 +73 +65 +00 +62 +69 +67 +65 +6e +64 +69 +61 +6e +00 +5f +49 +4f +5f +73 +61 +76 +65 +5f +65 +6e +64 +00 +5f +6e +65 +78 +74 +00 +64 +65 +73 +74 +73 +69 +7a +65 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +49 +44 +45 +4e +54 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +63 +68 +61 +72 +63 +6f +6e +73 +74 +5f +6e +61 +73 +6d +00 +63 +6f +6e +76 +5f +62 +76 +00 +5f +49 +4f +5f +77 +72 +69 +74 +65 +5f +62 +61 +73 +65 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +4d +55 +4c +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +4e +4f +54 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +53 +49 +47 +4e +4d +4f +44 +00 +5f +6d +6f +64 +65 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +4c +45 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +73 +69 +67 +6e +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +64 +65 +63 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +4c +54 +00 +5f +49 +4f +5f +72 +65 +61 +64 +5f +70 +74 +72 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +67 +65 +74 +5f +6c +65 +62 +31 +32 +38 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +4e +4f +52 +00 +79 +61 +73 +6d +5f +78 +6d +61 +6c +6c +6f +63 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +53 +49 +47 +4e +44 +49 +56 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +58 +4f +52 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +61 +6c +63 +00 +5f +49 +4f +5f +6d +61 +72 +6b +65 +72 +00 +6f +70 +32 +73 +74 +61 +74 +69 +63 +00 +74 +72 +75 +65 +00 +5f +49 +4f +5f +73 +61 +76 +65 +5f +62 +61 +73 +65 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +69 +6e +69 +74 +69 +61 +6c +69 +7a +65 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +53 +48 +52 +00 +6e +65 +67 +61 +74 +65 +00 +49 +4e +54 +4e +55 +4d +5f +55 +4c +00 +6e +75 +6d +74 +65 +73 +74 +73 +00 +5f +5f +70 +61 +64 +31 +00 +5f +5f +70 +61 +64 +32 +00 +6c +6f +6e +67 +20 +75 +6e +73 +69 +67 +6e +65 +64 +20 +69 +6e +74 +00 +54 +65 +73 +74 +5f +45 +6e +74 +72 +79 +00 +69 +6e +70 +75 +74 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +7a +65 +72 +6f +00 +5f +76 +74 +61 +62 +6c +65 +5f +6f +66 +66 +73 +65 +74 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +4c +4f +52 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +69 +73 +5f +7a +65 +72 +6f +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +4f +52 +00 +79 +61 +73 +6d +5f +65 +78 +70 +72 +5f +6f +70 +00 +66 +61 +69 +6c +65 +64 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +41 +44 +44 +00 +66 +61 +69 +6c +6d +73 +67 +00 +63 +68 +61 +72 +00 +5f +49 +4f +5f +72 +65 +61 +64 +5f +65 +6e +64 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +68 +65 +63 +6b +5f +73 +69 +7a +65 +00 +4e +5f +77 +6f +72 +64 +00 +73 +74 +64 +69 +6e +00 +6c +6f +6e +67 +20 +69 +6e +74 +00 +69 +6e +74 +6e +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +4e +45 +47 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +70 +72 +69 +6e +74 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +53 +55 +42 +00 +76 +61 +6c +73 +74 +72 +00 +79 +61 +73 +6d +5f +78 +66 +72 +65 +65 +00 +5f +6c +6f +63 +6b +00 +5f +6f +6c +64 +5f +6f +66 +66 +73 +65 +74 +00 +5f +49 +4f +5f +46 +49 +4c +45 +00 +5f +73 +62 +75 +66 +00 +73 +70 +61 +72 +65 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +64 +65 +73 +74 +72 +6f +79 +00 +74 +79 +70 +65 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +69 +73 +5f +70 +6f +73 +31 +00 +75 +6e +73 +69 +67 +6e +65 +64 +20 +63 +68 +61 +72 +00 +6f +75 +74 +73 +69 +7a +65 +00 +6c +69 +6e +65 +00 +74 +65 +73 +74 +00 +5f +49 +4f +5f +77 +72 +69 +74 +65 +5f +70 +74 +72 +00 +66 +61 +6c +73 +65 +00 +72 +61 +6e +67 +65 +74 +79 +70 +65 +00 +72 +73 +68 +69 +66 +74 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +41 +4e +44 +00 +66 +61 +69 +6c +00 +5f +5f +6f +66 +66 +5f +74 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +66 +72 +6f +6d +5f +44 +65 +63 +5f +73 +74 +61 +74 +69 +63 +5f +64 +61 +74 +61 +00 +73 +69 +67 +6e +65 +64 +20 +63 +68 +61 +72 +00 +73 +68 +6f +72 +74 +20 +75 +6e +73 +69 +67 +6e +65 +64 +20 +69 +6e +74 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +69 +73 +5f +6e +65 +67 +31 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +53 +48 +4c +00 +6d +61 +69 +6e +00 +5f +63 +68 +61 +69 +6e +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +67 +65 +74 +5f +69 +6e +74 +00 +46 +49 +4c +45 +00 +5f +66 +6c +61 +67 +73 +32 +00 +47 +4e +55 +20 +43 +20 +34 +2e +30 +2e +32 +20 +28 +44 +65 +62 +69 +61 +6e +20 +34 +2e +30 +2e +32 +2d +32 +29 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +45 +51 +00 +5f +63 +75 +72 +5f +63 +6f +6c +75 +6d +6e +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +4c +41 +4e +44 +00 +5f +5f +6f +66 +66 +36 +34 +5f +74 +00 +5f +75 +6e +75 +73 +65 +64 +32 +00 +5f +49 +4f +5f +62 +75 +66 +5f +62 +61 +73 +65 +00 +59 +41 +53 +4d +5f +45 +58 +50 +52 +5f +4d +4f +44 +00 +62 +6f +6f +6c +65 +61 +6e +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +65 +62 +75 +67 +5f +61 +62 +62 +72 +65 +76 +00 +2e +64 +65 +62 +75 +67 +5f +69 +6e +66 +6f +00 +2e +64 +65 +62 +75 +67 +5f +6c +69 +6e +65 +00 +2e +63 +6f +6d +6d +65 +6e +74 +00 +2e +72 +6f +64 +61 +74 +61 +2e +73 +74 +72 +31 +2e +31 +00 +2e +72 +6f +64 +61 +74 +61 +00 +2e +64 +61 +74 +61 +00 +2e +72 +6f +64 +61 +74 +61 +2e +73 +74 +72 +31 +2e +38 +00 +2e +62 +73 +73 +00 +2e +64 +65 +62 +75 +67 +5f +66 +72 +61 +6d +65 +00 +2e +65 +68 +5f +66 +72 +61 +6d +65 +00 +2e +64 +65 +62 +75 +67 +5f +6c +6f +63 +00 +2e +64 +65 +62 +75 +67 +5f +70 +75 +62 +6e +61 +6d +65 +73 +00 +2e +64 +65 +62 +75 +67 +5f +61 +72 +61 +6e +67 +65 +73 +00 +2e +64 +65 +62 +75 +67 +5f +72 +61 +6e +67 +65 +73 +00 +2e +64 +65 +62 +75 +67 +5f +73 +74 +72 +00 +2e +6e +6f +74 +65 +2e +47 +4e +55 +2d +73 +74 +61 +63 +6b +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +61 +2e +64 +65 +62 +75 +67 +5f +69 +6e +66 +6f +00 +2e +72 +65 +6c +61 +2e +64 +65 +62 +75 +67 +5f +6c +69 +6e +65 +00 +2e +72 +65 +6c +61 +2e +72 +6f +64 +61 +74 +61 +00 +2e +72 +65 +6c +61 +2e +64 +61 +74 +61 +00 +2e +72 +65 +6c +61 +2e +64 +65 +62 +75 +67 +5f +66 +72 +61 +6d +65 +00 +2e +72 +65 +6c +61 +2e +65 +68 +5f +66 +72 +61 +6d +65 +00 +2e +72 +65 +6c +61 +2e +64 +65 +62 +75 +67 +5f +70 +75 +62 +6e +61 +6d +65 +73 +00 +2e +72 +65 +6c +61 +2e +64 +65 +62 +75 +67 +5f +61 +72 +61 +6e +67 +65 +73 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +6c +65 +62 +31 +32 +38 +5f +74 +65 +73 +74 +2e +63 +00 +74 +65 +73 +74 +73 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +69 +6e +69 +74 +69 +61 +6c +69 +7a +65 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +6c +65 +61 +6e +75 +70 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +64 +65 +63 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +62 +69 +6e +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +6f +63 +74 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +68 +65 +78 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +63 +68 +61 +72 +63 +6f +6e +73 +74 +5f +6e +61 +73 +6d +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +75 +69 +6e +74 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +72 +65 +61 +74 +65 +5f +69 +6e +74 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +6f +70 +79 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +64 +65 +73 +74 +72 +6f +79 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +61 +6c +63 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +7a +65 +72 +6f +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +69 +73 +5f +7a +65 +72 +6f +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +69 +73 +5f +70 +6f +73 +31 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +69 +73 +5f +6e +65 +67 +31 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +73 +69 +67 +6e +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +67 +65 +74 +5f +75 +69 +6e +74 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +67 +65 +74 +5f +69 +6e +74 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +63 +68 +65 +63 +6b +5f +73 +69 +7a +65 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +67 +65 +74 +5f +73 +69 +7a +65 +64 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +67 +65 +74 +5f +6c +65 +62 +31 +32 +38 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +73 +69 +7a +65 +5f +6c +65 +62 +31 +32 +38 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +70 +72 +69 +6e +74 +00 +6d +61 +69 +6e +00 +2e +4c +64 +65 +62 +75 +67 +5f +61 +62 +62 +72 +65 +76 +30 +00 +2e +4c +64 +65 +62 +75 +67 +5f +69 +6e +66 +6f +30 +00 +2e +4c +64 +65 +62 +75 +67 +5f +6c +69 +6e +65 +30 +00 +2e +4c +74 +65 +78 +74 +30 +00 +2e +4c +43 +30 +00 +2e +4c +43 +31 +00 +2e +4c +43 +32 +00 +2e +4c +43 +33 +00 +2e +4c +43 +34 +00 +2e +4c +43 +35 +00 +2e +4c +43 +36 +00 +2e +4c +43 +37 +00 +2e +4c +43 +38 +00 +2e +4c +43 +39 +00 +2e +4c +43 +31 +30 +00 +2e +4c +43 +31 +31 +00 +2e +4c +43 +31 +32 +00 +2e +4c +43 +31 +33 +00 +2e +4c +43 +31 +34 +00 +2e +4c +43 +31 +35 +00 +2e +4c +43 +31 +36 +00 +2e +4c +43 +31 +37 +00 +2e +4c +43 +31 +38 +00 +2e +4c +46 +42 +32 +35 +00 +2e +4c +56 +4c +30 +00 +2e +4c +43 +46 +49 +30 +00 +2e +4c +56 +4c +31 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +43 +72 +65 +61 +74 +65 +00 +63 +6f +6e +76 +5f +62 +76 +00 +72 +65 +73 +75 +6c +74 +00 +73 +70 +61 +72 +65 +00 +6f +70 +31 +73 +74 +61 +74 +69 +63 +00 +6f +70 +32 +73 +74 +61 +74 +69 +63 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +66 +72 +6f +6d +5f +44 +65 +63 +5f +73 +74 +61 +74 +69 +63 +5f +42 +6f +6f +74 +00 +66 +72 +6f +6d +5f +64 +65 +63 +5f +64 +61 +74 +61 +00 +2e +4c +56 +4c +32 +00 +2e +4c +46 +45 +32 +35 +00 +2e +4c +46 +42 +32 +36 +00 +2e +4c +56 +4c +33 +00 +2e +4c +43 +46 +49 +31 +00 +2e +4c +56 +4c +34 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +66 +72 +6f +6d +5f +44 +65 +63 +5f +73 +74 +61 +74 +69 +63 +5f +53 +68 +75 +74 +64 +6f +77 +6e +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +44 +65 +73 +74 +72 +6f +79 +00 +2e +4c +56 +4c +35 +00 +2e +4c +46 +45 +32 +36 +00 +2e +4c +43 +31 +39 +00 +2e +4c +46 +42 +32 +37 +00 +2e +4c +56 +4c +36 +00 +2e +4c +43 +46 +49 +32 +00 +2e +4c +43 +46 +49 +33 +00 +2e +4c +43 +46 +49 +34 +00 +2e +4c +56 +4c +37 +00 +2e +4c +43 +46 +49 +35 +00 +2e +4c +56 +4c +38 +00 +79 +61 +73 +6d +5f +78 +6d +61 +6c +6c +6f +63 +00 +2e +4c +56 +4c +39 +00 +2e +4c +56 +4c +31 +30 +00 +2e +4c +56 +4c +31 +31 +00 +2e +4c +56 +4c +31 +32 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +66 +72 +6f +6d +5f +44 +65 +63 +5f +73 +74 +61 +74 +69 +63 +00 +2e +4c +31 +33 +00 +2e +4c +36 +00 +53 +65 +74 +5f +4d +61 +78 +00 +2e +4c +38 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +43 +68 +75 +6e +6b +5f +52 +65 +61 +64 +00 +2e +4c +56 +4c +31 +33 +00 +2e +4c +56 +4c +31 +34 +00 +2e +4c +56 +4c +31 +35 +00 +2e +4c +56 +4c +31 +36 +00 +2e +4c +56 +4c +31 +37 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +43 +6c +6f +6e +65 +00 +2e +4c +56 +4c +31 +38 +00 +2e +4c +56 +4c +31 +39 +00 +2e +4c +56 +4c +32 +30 +00 +2e +4c +56 +4c +32 +31 +00 +2e +4c +56 +4c +32 +32 +00 +79 +61 +73 +6d +5f +5f +77 +61 +72 +6e +69 +6e +67 +00 +2e +4c +46 +45 +32 +37 +00 +2e +4c +46 +42 +32 +38 +00 +2e +4c +56 +4c +32 +33 +00 +2e +4c +43 +46 +49 +36 +00 +2e +4c +43 +46 +49 +37 +00 +2e +4c +43 +46 +49 +38 +00 +2e +4c +56 +4c +32 +34 +00 +2e +4c +43 +46 +49 +39 +00 +2e +4c +56 +4c +32 +35 +00 +2e +4c +56 +4c +32 +36 +00 +2e +4c +56 +4c +32 +37 +00 +73 +74 +72 +6c +65 +6e +00 +2e +4c +32 +31 +00 +2e +4c +31 +35 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +66 +72 +6f +6d +5f +42 +69 +6e +00 +2e +4c +31 +37 +00 +2e +4c +56 +4c +32 +38 +00 +2e +4c +56 +4c +32 +39 +00 +2e +4c +56 +4c +33 +30 +00 +2e +4c +56 +4c +33 +31 +00 +2e +4c +56 +4c +33 +32 +00 +2e +4c +56 +4c +33 +33 +00 +2e +4c +56 +4c +33 +34 +00 +2e +4c +56 +4c +33 +35 +00 +2e +4c +56 +4c +33 +36 +00 +2e +4c +56 +4c +33 +37 +00 +2e +4c +46 +45 +32 +38 +00 +2e +4c +46 +42 +32 +39 +00 +2e +4c +56 +4c +33 +38 +00 +2e +4c +43 +46 +49 +31 +30 +00 +2e +4c +43 +46 +49 +31 +31 +00 +2e +4c +43 +46 +49 +31 +32 +00 +2e +4c +56 +4c +33 +39 +00 +2e +4c +43 +46 +49 +31 +33 +00 +2e +4c +56 +4c +34 +30 +00 +2e +4c +56 +4c +34 +31 +00 +2e +4c +56 +4c +34 +32 +00 +2e +4c +32 +39 +00 +2e +4c +32 +33 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +66 +72 +6f +6d +5f +4f +63 +74 +00 +2e +4c +32 +35 +00 +2e +4c +56 +4c +34 +33 +00 +2e +4c +56 +4c +34 +34 +00 +2e +4c +56 +4c +34 +35 +00 +2e +4c +56 +4c +34 +36 +00 +2e +4c +56 +4c +34 +37 +00 +2e +4c +56 +4c +34 +38 +00 +2e +4c +56 +4c +34 +39 +00 +2e +4c +56 +4c +35 +30 +00 +2e +4c +56 +4c +35 +31 +00 +2e +4c +56 +4c +35 +32 +00 +2e +4c +46 +45 +32 +39 +00 +2e +4c +46 +42 +33 +30 +00 +2e +4c +56 +4c +35 +33 +00 +2e +4c +43 +46 +49 +31 +34 +00 +2e +4c +43 +46 +49 +31 +35 +00 +2e +4c +43 +46 +49 +31 +36 +00 +2e +4c +56 +4c +35 +34 +00 +2e +4c +43 +46 +49 +31 +37 +00 +2e +4c +56 +4c +35 +35 +00 +2e +4c +56 +4c +35 +36 +00 +2e +4c +56 +4c +35 +37 +00 +2e +4c +33 +37 +00 +2e +4c +33 +31 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +66 +72 +6f +6d +5f +48 +65 +78 +00 +2e +4c +33 +33 +00 +2e +4c +56 +4c +35 +38 +00 +2e +4c +56 +4c +35 +39 +00 +2e +4c +56 +4c +36 +30 +00 +2e +4c +56 +4c +36 +31 +00 +2e +4c +56 +4c +36 +32 +00 +2e +4c +56 +4c +36 +33 +00 +2e +4c +56 +4c +36 +34 +00 +2e +4c +56 +4c +36 +35 +00 +2e +4c +56 +4c +36 +36 +00 +2e +4c +56 +4c +36 +37 +00 +2e +4c +46 +45 +33 +30 +00 +2e +4c +43 +32 +30 +00 +2e +4c +46 +42 +33 +31 +00 +2e +4c +56 +4c +36 +38 +00 +2e +4c +43 +46 +49 +31 +38 +00 +2e +4c +43 +46 +49 +31 +39 +00 +2e +4c +43 +46 +49 +32 +30 +00 +2e +4c +43 +46 +49 +32 +31 +00 +2e +4c +43 +46 +49 +32 +32 +00 +2e +4c +56 +4c +36 +39 +00 +2e +4c +56 +4c +37 +30 +00 +2e +4c +56 +4c +37 +31 +00 +2e +4c +56 +4c +37 +32 +00 +2e +4c +35 +39 +00 +2e +4c +33 +39 +00 +2e +4c +36 +30 +00 +2e +4c +34 +33 +00 +2e +4c +34 +34 +00 +2e +4c +56 +4c +37 +33 +00 +2e +4c +35 +30 +00 +2e +4c +34 +35 +00 +2e +4c +35 +35 +00 +2e +4c +35 +36 +00 +2e +4c +35 +37 +00 +2e +4c +34 +39 +00 +2e +4c +34 +38 +00 +2e +4c +56 +4c +37 +34 +00 +2e +4c +56 +4c +37 +35 +00 +2e +4c +34 +37 +00 +2e +4c +56 +4c +37 +36 +00 +2e +4c +56 +4c +37 +37 +00 +2e +4c +34 +36 +00 +2e +4c +56 +4c +37 +38 +00 +2e +4c +56 +4c +37 +39 +00 +2e +4c +56 +4c +38 +30 +00 +2e +4c +56 +4c +38 +31 +00 +2e +4c +56 +4c +38 +32 +00 +2e +4c +56 +4c +38 +33 +00 +2e +4c +56 +4c +38 +34 +00 +2e +4c +56 +4c +38 +35 +00 +2e +4c +36 +31 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +45 +6d +70 +74 +79 +00 +2e +4c +56 +4c +38 +36 +00 +2e +4c +56 +4c +38 +37 +00 +2e +4c +35 +31 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +4d +6f +76 +65 +5f +4c +65 +66 +74 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +43 +68 +75 +6e +6b +5f +53 +74 +6f +72 +65 +00 +2e +4c +56 +4c +38 +38 +00 +2e +4c +46 +45 +33 +31 +00 +2e +4c +46 +42 +33 +32 +00 +2e +4c +56 +4c +38 +39 +00 +2e +4c +43 +46 +49 +32 +33 +00 +2e +4c +56 +4c +39 +30 +00 +2e +4c +56 +4c +39 +31 +00 +2e +4c +56 +4c +39 +32 +00 +2e +4c +46 +45 +33 +32 +00 +2e +4c +46 +42 +33 +33 +00 +2e +4c +56 +4c +39 +33 +00 +2e +4c +43 +46 +49 +32 +34 +00 +2e +4c +56 +4c +39 +34 +00 +2e +4c +36 +35 +00 +2e +4c +56 +4c +39 +35 +00 +2e +4c +56 +4c +39 +36 +00 +2e +4c +56 +4c +39 +37 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +4e +65 +67 +61 +74 +65 +00 +2e +4c +56 +4c +39 +38 +00 +2e +4c +56 +4c +39 +39 +00 +2e +4c +46 +45 +33 +33 +00 +2e +4c +46 +42 +33 +34 +00 +2e +4c +56 +4c +31 +30 +30 +00 +2e +4c +43 +46 +49 +32 +35 +00 +2e +4c +43 +46 +49 +32 +36 +00 +2e +4c +56 +4c +31 +30 +31 +00 +2e +4c +43 +46 +49 +32 +37 +00 +2e +4c +56 +4c +31 +30 +32 +00 +2e +4c +56 +4c +31 +30 +33 +00 +2e +4c +37 +31 +00 +2e +4c +37 +34 +00 +2e +4c +56 +4c +31 +30 +34 +00 +2e +4c +56 +4c +31 +30 +35 +00 +2e +4c +56 +4c +31 +30 +36 +00 +2e +4c +56 +4c +31 +30 +37 +00 +2e +4c +56 +4c +31 +30 +38 +00 +2e +4c +56 +4c +31 +30 +39 +00 +2e +4c +56 +4c +31 +31 +30 +00 +2e +4c +56 +4c +31 +31 +31 +00 +2e +4c +56 +4c +31 +31 +32 +00 +2e +4c +56 +4c +31 +31 +33 +00 +2e +4c +56 +4c +31 +31 +34 +00 +2e +4c +46 +45 +33 +34 +00 +2e +4c +46 +42 +33 +35 +00 +2e +4c +56 +4c +31 +31 +35 +00 +2e +4c +43 +46 +49 +32 +38 +00 +2e +4c +56 +4c +31 +31 +36 +00 +2e +4c +37 +39 +00 +2e +4c +56 +4c +31 +31 +37 +00 +79 +61 +73 +6d +5f +78 +66 +72 +65 +65 +00 +2e +4c +56 +4c +31 +31 +38 +00 +2e +4c +56 +4c +31 +31 +39 +00 +2e +4c +56 +4c +31 +32 +30 +00 +2e +4c +56 +4c +31 +32 +31 +00 +2e +4c +56 +4c +31 +32 +32 +00 +2e +4c +46 +45 +33 +35 +00 +2e +4c +43 +32 +31 +00 +2e +4c +43 +32 +32 +00 +2e +4c +43 +32 +33 +00 +2e +4c +43 +32 +34 +00 +2e +4c +43 +32 +35 +00 +2e +4c +43 +32 +36 +00 +2e +4c +43 +32 +37 +00 +2e +4c +46 +42 +33 +36 +00 +2e +4c +56 +4c +31 +32 +33 +00 +2e +4c +43 +46 +49 +32 +39 +00 +2e +4c +43 +46 +49 +33 +30 +00 +2e +4c +43 +46 +49 +33 +31 +00 +2e +4c +43 +46 +49 +33 +32 +00 +2e +4c +43 +46 +49 +33 +33 +00 +2e +4c +43 +46 +49 +33 +34 +00 +2e +4c +43 +46 +49 +33 +35 +00 +2e +4c +56 +4c +31 +32 +34 +00 +2e +4c +56 +4c +31 +32 +35 +00 +2e +4c +31 +34 +36 +00 +2e +4c +56 +4c +31 +32 +36 +00 +2e +4c +56 +4c +31 +32 +37 +00 +2e +4c +56 +4c +31 +32 +38 +00 +2e +4c +56 +4c +31 +32 +39 +00 +2e +4c +38 +33 +00 +2e +4c +56 +4c +31 +33 +30 +00 +2e +4c +38 +36 +00 +2e +4c +31 +34 +37 +00 +2e +4c +56 +4c +31 +33 +31 +00 +2e +4c +38 +39 +00 +2e +4c +31 +34 +38 +00 +2e +4c +39 +32 +00 +2e +4c +31 +32 +31 +00 +2e +4c +39 +33 +00 +2e +4c +39 +34 +00 +2e +4c +39 +35 +00 +2e +4c +39 +36 +00 +2e +4c +39 +38 +00 +2e +4c +31 +30 +30 +00 +2e +4c +31 +30 +31 +00 +2e +4c +31 +30 +32 +00 +2e +4c +31 +30 +33 +00 +2e +4c +31 +30 +34 +00 +2e +4c +31 +30 +35 +00 +2e +4c +31 +30 +36 +00 +2e +4c +31 +30 +37 +00 +2e +4c +31 +30 +38 +00 +2e +4c +31 +30 +39 +00 +2e +4c +31 +31 +30 +00 +2e +4c +31 +31 +31 +00 +2e +4c +31 +31 +32 +00 +2e +4c +31 +31 +33 +00 +2e +4c +31 +31 +34 +00 +2e +4c +31 +31 +35 +00 +2e +4c +31 +31 +36 +00 +2e +4c +31 +31 +37 +00 +2e +4c +31 +31 +38 +00 +2e +4c +31 +31 +39 +00 +2e +4c +31 +32 +30 +00 +79 +61 +73 +6d +5f +69 +6e +74 +65 +72 +6e +61 +6c +5f +65 +72 +72 +6f +72 +5f +00 +2e +4c +56 +4c +31 +33 +32 +00 +2e +4c +31 +32 +32 +00 +2e +4c +31 +33 +36 +00 +2e +4c +31 +34 +39 +00 +2e +4c +31 +33 +38 +00 +2e +4c +31 +34 +33 +00 +2e +4c +56 +4c +31 +33 +33 +00 +2e +4c +56 +4c +31 +33 +34 +00 +2e +4c +56 +4c +31 +33 +35 +00 +2e +4c +56 +4c +31 +33 +36 +00 +2e +4c +56 +4c +31 +33 +37 +00 +2e +4c +56 +4c +31 +33 +38 +00 +2e +4c +56 +4c +31 +33 +39 +00 +2e +4c +56 +4c +31 +34 +30 +00 +2e +4c +31 +35 +30 +00 +2e +4c +56 +4c +31 +34 +31 +00 +2e +4c +56 +4c +31 +34 +32 +00 +2e +4c +56 +4c +31 +34 +33 +00 +2e +4c +56 +4c +31 +34 +34 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +43 +6f +70 +79 +00 +2e +4c +56 +4c +31 +34 +35 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +44 +69 +76 +69 +64 +65 +00 +2e +4c +56 +4c +31 +34 +36 +00 +2e +4c +56 +4c +31 +34 +37 +00 +2e +4c +56 +4c +31 +34 +38 +00 +2e +4c +56 +4c +31 +34 +39 +00 +2e +4c +56 +4c +31 +35 +30 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +69 +73 +5f +65 +6d +70 +74 +79 +00 +2e +4c +31 +34 +35 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +4c +53 +42 +00 +2e +4c +56 +4c +31 +35 +31 +00 +2e +4c +56 +4c +31 +35 +32 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +4c +65 +78 +69 +63 +6f +6d +70 +61 +72 +65 +00 +2e +4c +56 +4c +31 +35 +33 +00 +2e +4c +56 +4c +31 +35 +34 +00 +2e +4c +56 +4c +31 +35 +35 +00 +2e +4c +56 +4c +31 +35 +36 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +65 +71 +75 +61 +6c +00 +2e +4c +56 +4c +31 +35 +37 +00 +2e +4c +56 +4c +31 +35 +38 +00 +79 +61 +73 +6d +5f +5f +65 +72 +72 +6f +72 +00 +2e +4c +56 +4c +31 +35 +39 +00 +2e +4c +56 +4c +31 +36 +30 +00 +2e +4c +56 +4c +31 +36 +31 +00 +2e +4c +56 +4c +31 +36 +32 +00 +2e +4c +56 +4c +31 +36 +33 +00 +2e +4c +56 +4c +31 +36 +34 +00 +2e +4c +56 +4c +31 +36 +35 +00 +2e +4c +56 +4c +31 +36 +36 +00 +2e +4c +31 +35 +31 +00 +2e +4c +56 +4c +31 +36 +37 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +4d +75 +6c +74 +69 +70 +6c +79 +00 +2e +4c +56 +4c +31 +36 +38 +00 +2e +4c +56 +4c +31 +36 +39 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +61 +64 +64 +00 +2e +4c +56 +4c +31 +37 +30 +00 +2e +4c +56 +4c +31 +37 +31 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +73 +75 +62 +00 +2e +4c +56 +4c +31 +37 +32 +00 +2e +4c +56 +4c +31 +37 +33 +00 +53 +65 +74 +5f +55 +6e +69 +6f +6e +00 +2e +4c +56 +4c +31 +37 +34 +00 +2e +4c +56 +4c +31 +37 +35 +00 +53 +65 +74 +5f +49 +6e +74 +65 +72 +73 +65 +63 +74 +69 +6f +6e +00 +2e +4c +56 +4c +31 +37 +36 +00 +2e +4c +56 +4c +31 +37 +37 +00 +53 +65 +74 +5f +45 +78 +63 +6c +75 +73 +69 +76 +65 +4f +72 +00 +2e +4c +56 +4c +31 +37 +38 +00 +2e +4c +56 +4c +31 +37 +39 +00 +2e +4c +56 +4c +31 +38 +30 +00 +53 +65 +74 +5f +43 +6f +6d +70 +6c +65 +6d +65 +6e +74 +00 +2e +4c +56 +4c +31 +38 +31 +00 +2e +4c +31 +32 +35 +00 +2e +4c +56 +4c +31 +38 +32 +00 +2e +4c +56 +4c +31 +38 +33 +00 +2e +4c +56 +4c +31 +38 +34 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +4d +6f +76 +65 +5f +52 +69 +67 +68 +74 +00 +2e +4c +56 +4c +31 +38 +35 +00 +2e +4c +56 +4c +31 +38 +36 +00 +2e +4c +31 +35 +32 +00 +2e +4c +56 +4c +31 +38 +37 +00 +2e +4c +56 +4c +31 +38 +38 +00 +2e +4c +56 +4c +31 +38 +39 +00 +2e +4c +56 +4c +31 +39 +30 +00 +2e +4c +56 +4c +31 +39 +31 +00 +2e +4c +56 +4c +31 +39 +32 +00 +2e +4c +56 +4c +31 +39 +33 +00 +2e +4c +56 +4c +31 +39 +34 +00 +2e +4c +56 +4c +31 +39 +35 +00 +2e +4c +56 +4c +31 +39 +36 +00 +2e +4c +56 +4c +31 +39 +37 +00 +2e +4c +46 +45 +33 +36 +00 +2e +4c +46 +42 +33 +37 +00 +2e +4c +56 +4c +31 +39 +38 +00 +2e +4c +43 +46 +49 +33 +36 +00 +2e +4c +56 +4c +31 +39 +39 +00 +2e +4c +31 +35 +37 +00 +2e +4c +56 +4c +32 +30 +30 +00 +2e +4c +56 +4c +32 +30 +31 +00 +2e +4c +56 +4c +32 +30 +32 +00 +2e +4c +56 +4c +32 +30 +33 +00 +2e +4c +46 +45 +33 +37 +00 +2e +4c +46 +42 +33 +38 +00 +2e +4c +56 +4c +32 +30 +34 +00 +2e +4c +31 +35 +39 +00 +2e +4c +46 +45 +33 +38 +00 +2e +4c +46 +42 +33 +39 +00 +2e +4c +56 +4c +32 +30 +35 +00 +2e +4c +31 +36 +35 +00 +2e +4c +31 +36 +38 +00 +2e +4c +46 +45 +33 +39 +00 +2e +4c +46 +42 +34 +30 +00 +2e +4c +56 +4c +32 +30 +36 +00 +2e +4c +43 +46 +49 +33 +37 +00 +2e +4c +56 +4c +32 +30 +37 +00 +2e +4c +31 +37 +37 +00 +2e +4c +31 +37 +31 +00 +2e +4c +56 +4c +32 +30 +38 +00 +2e +4c +56 +4c +32 +30 +39 +00 +2e +4c +56 +4c +32 +31 +30 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +69 +73 +5f +66 +75 +6c +6c +00 +2e +4c +56 +4c +32 +31 +31 +00 +2e +4c +46 +45 +34 +30 +00 +2e +4c +46 +42 +34 +31 +00 +2e +4c +56 +4c +32 +31 +32 +00 +2e +4c +31 +38 +36 +00 +2e +4c +56 +4c +32 +31 +33 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +53 +69 +67 +6e +00 +2e +4c +46 +45 +34 +31 +00 +2e +4c +43 +32 +38 +00 +2e +4c +46 +42 +34 +32 +00 +2e +4c +56 +4c +32 +31 +34 +00 +2e +4c +43 +46 +49 +33 +38 +00 +2e +4c +56 +4c +32 +31 +35 +00 +2e +4c +31 +38 +39 +00 +2e +4c +31 +39 +34 +00 +2e +4c +56 +4c +32 +31 +36 +00 +2e +4c +56 +4c +32 +31 +37 +00 +2e +4c +56 +4c +32 +31 +38 +00 +2e +4c +56 +4c +32 +31 +39 +00 +2e +4c +56 +4c +32 +32 +30 +00 +2e +4c +56 +4c +32 +32 +31 +00 +2e +4c +56 +4c +32 +32 +32 +00 +2e +4c +46 +45 +34 +32 +00 +2e +4c +46 +42 +34 +33 +00 +2e +4c +56 +4c +32 +32 +33 +00 +2e +4c +43 +46 +49 +33 +39 +00 +2e +4c +56 +4c +32 +32 +34 +00 +2e +4c +31 +39 +37 +00 +2e +4c +56 +4c +32 +32 +35 +00 +2e +4c +32 +30 +38 +00 +2e +4c +56 +4c +32 +32 +36 +00 +2e +4c +32 +30 +31 +00 +2e +4c +56 +4c +32 +32 +37 +00 +2e +4c +56 +4c +32 +32 +38 +00 +2e +4c +31 +39 +39 +00 +2e +4c +56 +4c +32 +32 +39 +00 +2e +4c +56 +4c +32 +33 +30 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +6d +73 +62 +5f +00 +2e +4c +42 +42 +32 +00 +2e +4c +32 +30 +39 +00 +2e +4c +56 +4c +32 +33 +31 +00 +2e +4c +32 +30 +33 +00 +2e +4c +42 +45 +32 +00 +2e +4c +56 +4c +32 +33 +32 +00 +2e +4c +56 +4c +32 +33 +33 +00 +2e +4c +56 +4c +32 +33 +34 +00 +2e +4c +42 +42 +33 +00 +2e +4c +56 +4c +32 +33 +35 +00 +2e +4c +42 +45 +33 +00 +2e +4c +56 +4c +32 +33 +36 +00 +2e +4c +42 +42 +34 +00 +2e +4c +56 +4c +32 +33 +37 +00 +2e +4c +42 +45 +34 +00 +2e +4c +46 +45 +34 +33 +00 +2e +4c +46 +42 +34 +35 +00 +2e +4c +56 +4c +32 +33 +38 +00 +2e +4c +43 +46 +49 +34 +30 +00 +2e +4c +43 +46 +49 +34 +31 +00 +2e +4c +43 +46 +49 +34 +32 +00 +2e +4c +43 +46 +49 +34 +33 +00 +2e +4c +43 +46 +49 +34 +34 +00 +2e +4c +43 +46 +49 +34 +35 +00 +2e +4c +43 +46 +49 +34 +36 +00 +2e +4c +56 +4c +32 +33 +39 +00 +2e +4c +32 +33 +30 +00 +2e +4c +56 +4c +32 +34 +30 +00 +2e +4c +56 +4c +32 +34 +31 +00 +2e +4c +56 +4c +32 +34 +32 +00 +2e +4c +56 +4c +32 +34 +33 +00 +2e +4c +32 +31 +35 +00 +2e +4c +56 +4c +32 +34 +34 +00 +2e +4c +32 +31 +38 +00 +2e +4c +32 +33 +31 +00 +2e +4c +32 +31 +39 +00 +2e +4c +32 +32 +33 +00 +2e +4c +56 +4c +32 +34 +35 +00 +2e +4c +32 +33 +32 +00 +2e +4c +56 +4c +32 +34 +36 +00 +2e +4c +56 +4c +32 +34 +37 +00 +2e +4c +56 +4c +32 +34 +38 +00 +2e +4c +56 +4c +32 +34 +39 +00 +2e +4c +56 +4c +32 +35 +30 +00 +2e +4c +56 +4c +32 +35 +31 +00 +2e +4c +56 +4c +32 +35 +32 +00 +2e +4c +56 +4c +32 +35 +33 +00 +2e +4c +56 +4c +32 +35 +34 +00 +2e +4c +56 +4c +32 +35 +35 +00 +2e +4c +42 +42 +35 +00 +2e +4c +56 +4c +32 +35 +36 +00 +2e +4c +56 +4c +32 +35 +37 +00 +2e +4c +32 +32 +32 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +73 +68 +69 +66 +74 +5f +72 +69 +67 +68 +74 +00 +2e +4c +56 +4c +32 +35 +38 +00 +2e +4c +42 +45 +35 +00 +2e +4c +32 +33 +33 +00 +2e +4c +56 +4c +32 +35 +39 +00 +2e +4c +56 +4c +32 +36 +30 +00 +2e +4c +56 +4c +32 +36 +31 +00 +2e +4c +42 +42 +36 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +64 +65 +63 +00 +2e +4c +56 +4c +32 +36 +32 +00 +2e +4c +56 +4c +32 +36 +33 +00 +2e +4c +42 +45 +36 +00 +2e +4c +56 +4c +32 +36 +34 +00 +2e +4c +56 +4c +32 +36 +35 +00 +2e +4c +56 +4c +32 +36 +36 +00 +2e +4c +46 +45 +34 +35 +00 +2e +4c +43 +32 +39 +00 +2e +4c +43 +33 +30 +00 +2e +4c +43 +33 +31 +00 +2e +4c +43 +33 +32 +00 +2e +4c +46 +42 +34 +34 +00 +2e +4c +56 +4c +32 +36 +37 +00 +2e +4c +43 +46 +49 +34 +37 +00 +2e +4c +43 +46 +49 +34 +38 +00 +2e +4c +43 +46 +49 +34 +39 +00 +2e +4c +43 +46 +49 +35 +30 +00 +2e +4c +43 +46 +49 +35 +31 +00 +2e +4c +43 +46 +49 +35 +32 +00 +2e +4c +56 +4c +32 +36 +38 +00 +2e +4c +43 +46 +49 +35 +33 +00 +2e +4c +56 +4c +32 +36 +39 +00 +2e +4c +56 +4c +32 +37 +30 +00 +2e +4c +32 +36 +33 +00 +2e +4c +56 +4c +32 +37 +31 +00 +2e +4c +32 +33 +37 +00 +2e +4c +32 +36 +34 +00 +2e +4c +56 +4c +32 +37 +32 +00 +2e +4c +32 +33 +38 +00 +2e +4c +32 +36 +35 +00 +2e +4c +32 +34 +30 +00 +2e +4c +32 +34 +33 +00 +2e +4c +32 +36 +36 +00 +2e +4c +32 +34 +36 +00 +2e +4c +56 +4c +32 +37 +33 +00 +2e +4c +56 +4c +32 +37 +34 +00 +2e +4c +32 +36 +37 +00 +2e +4c +32 +34 +39 +00 +2e +4c +32 +36 +38 +00 +2e +4c +32 +35 +34 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +49 +6e +74 +65 +72 +76 +61 +6c +5f +43 +6f +70 +79 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +42 +6c +6f +63 +6b +5f +52 +65 +61 +64 +00 +2e +4c +56 +4c +32 +37 +35 +00 +2e +4c +32 +35 +38 +00 +2e +4c +56 +4c +32 +37 +36 +00 +2e +4c +32 +36 +30 +00 +2e +4c +56 +4c +32 +37 +37 +00 +2e +4c +56 +4c +32 +37 +38 +00 +2e +4c +56 +4c +32 +37 +39 +00 +2e +4c +56 +4c +32 +38 +30 +00 +2e +4c +56 +4c +32 +38 +31 +00 +2e +4c +56 +4c +32 +38 +32 +00 +2e +4c +56 +4c +32 +38 +33 +00 +2e +4c +56 +4c +32 +38 +34 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +42 +6c +6f +63 +6b +5f +53 +74 +6f +72 +65 +00 +2e +4c +56 +4c +32 +38 +35 +00 +2e +4c +56 +4c +32 +38 +36 +00 +2e +4c +56 +4c +32 +38 +37 +00 +6d +65 +6d +63 +70 +79 +00 +2e +4c +56 +4c +32 +38 +38 +00 +2e +4c +56 +4c +32 +38 +39 +00 +2e +4c +56 +4c +32 +39 +30 +00 +2e +4c +56 +4c +32 +39 +31 +00 +2e +4c +56 +4c +32 +39 +32 +00 +2e +4c +32 +35 +35 +00 +2e +4c +32 +35 +37 +00 +2e +4c +56 +4c +32 +39 +33 +00 +2e +4c +46 +45 +34 +34 +00 +2e +4c +46 +42 +34 +36 +00 +2e +4c +56 +4c +32 +39 +34 +00 +2e +4c +43 +46 +49 +35 +34 +00 +2e +4c +43 +46 +49 +35 +35 +00 +2e +4c +43 +46 +49 +35 +36 +00 +2e +4c +43 +46 +49 +35 +37 +00 +2e +4c +43 +46 +49 +35 +38 +00 +2e +4c +43 +46 +49 +35 +39 +00 +2e +4c +56 +4c +32 +39 +35 +00 +2e +4c +56 +4c +32 +39 +36 +00 +2e +4c +32 +37 +30 +00 +2e +4c +56 +4c +32 +39 +37 +00 +2e +4c +32 +39 +30 +00 +2e +4c +32 +37 +32 +00 +2e +4c +56 +4c +32 +39 +38 +00 +2e +4c +32 +39 +31 +00 +2e +4c +56 +4c +32 +39 +39 +00 +2e +4c +32 +37 +37 +00 +2e +4c +56 +4c +33 +30 +30 +00 +2e +4c +32 +38 +31 +00 +2e +4c +56 +4c +33 +30 +31 +00 +2e +4c +32 +39 +32 +00 +2e +4c +56 +4c +33 +30 +32 +00 +2e +4c +32 +38 +34 +00 +2e +4c +56 +4c +33 +30 +33 +00 +2e +4c +32 +37 +34 +00 +2e +4c +56 +4c +33 +30 +34 +00 +2e +4c +56 +4c +33 +30 +35 +00 +2e +4c +56 +4c +33 +30 +36 +00 +2e +4c +56 +4c +33 +30 +37 +00 +2e +4c +56 +4c +33 +30 +38 +00 +2e +4c +56 +4c +33 +30 +39 +00 +2e +4c +56 +4c +33 +31 +30 +00 +2e +4c +56 +4c +33 +31 +31 +00 +2e +4c +32 +39 +33 +00 +2e +4c +56 +4c +33 +31 +32 +00 +2e +4c +56 +4c +33 +31 +33 +00 +2e +4c +56 +4c +33 +31 +34 +00 +2e +4c +32 +38 +35 +00 +2e +4c +56 +4c +33 +31 +35 +00 +2e +4c +56 +4c +33 +31 +36 +00 +2e +4c +56 +4c +33 +31 +37 +00 +2e +4c +46 +45 +34 +36 +00 +2e +4c +46 +42 +34 +37 +00 +2e +4c +56 +4c +33 +31 +38 +00 +2e +4c +43 +46 +49 +36 +30 +00 +2e +4c +43 +46 +49 +36 +31 +00 +2e +4c +43 +46 +49 +36 +32 +00 +2e +4c +43 +46 +49 +36 +33 +00 +2e +4c +56 +4c +33 +31 +39 +00 +2e +4c +56 +4c +33 +32 +30 +00 +2e +4c +32 +39 +35 +00 +2e +4c +56 +4c +33 +32 +31 +00 +2e +4c +32 +39 +39 +00 +2e +4c +32 +39 +37 +00 +2e +4c +56 +4c +33 +32 +32 +00 +2e +4c +33 +30 +32 +00 +2e +4c +56 +4c +33 +32 +33 +00 +2e +4c +33 +30 +38 +00 +2e +4c +33 +30 +34 +00 +2e +4c +33 +30 +37 +00 +2e +4c +56 +4c +33 +32 +34 +00 +2e +4c +56 +4c +33 +32 +35 +00 +2e +4c +56 +4c +33 +32 +36 +00 +2e +4c +56 +4c +33 +32 +37 +00 +2e +4c +56 +4c +33 +32 +38 +00 +2e +4c +56 +4c +33 +32 +39 +00 +2e +4c +56 +4c +33 +33 +30 +00 +2e +4c +46 +45 +34 +37 +00 +2e +4c +43 +33 +33 +00 +2e +4c +43 +33 +34 +00 +2e +4c +46 +42 +34 +38 +00 +2e +4c +56 +4c +33 +33 +31 +00 +2e +4c +43 +46 +49 +36 +34 +00 +2e +4c +43 +46 +49 +36 +35 +00 +2e +4c +43 +46 +49 +36 +36 +00 +2e +4c +43 +46 +49 +36 +37 +00 +2e +4c +56 +4c +33 +33 +32 +00 +2e +4c +33 +31 +31 +00 +2e +4c +56 +4c +33 +33 +33 +00 +2e +4c +33 +31 +35 +00 +2e +4c +56 +4c +33 +33 +34 +00 +2e +4c +56 +4c +33 +33 +35 +00 +2e +4c +56 +4c +33 +33 +36 +00 +2e +4c +56 +4c +33 +33 +37 +00 +2e +4c +56 +4c +33 +33 +38 +00 +2e +4c +56 +4c +33 +33 +39 +00 +2e +4c +56 +4c +33 +34 +30 +00 +66 +70 +72 +69 +6e +74 +66 +00 +2e +4c +56 +4c +33 +34 +31 +00 +2e +4c +56 +4c +33 +34 +32 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +74 +6f +5f +48 +65 +78 +00 +2e +4c +56 +4c +33 +34 +33 +00 +2e +4c +56 +4c +33 +34 +34 +00 +2e +4c +56 +4c +33 +34 +35 +00 +2e +4c +56 +4c +33 +34 +36 +00 +2e +4c +56 +4c +33 +34 +37 +00 +2e +4c +56 +4c +33 +34 +38 +00 +2e +4c +46 +45 +34 +38 +00 +2e +4c +43 +33 +35 +00 +2e +4c +43 +33 +36 +00 +2e +4c +43 +33 +37 +00 +2e +4c +43 +33 +38 +00 +2e +4c +43 +33 +39 +00 +2e +4c +43 +34 +30 +00 +2e +4c +43 +34 +31 +00 +2e +4c +43 +34 +32 +00 +2e +4c +43 +34 +33 +00 +2e +4c +46 +42 +35 +30 +00 +2e +4c +56 +4c +33 +34 +39 +00 +2e +4c +43 +46 +49 +36 +38 +00 +2e +4c +56 +4c +33 +35 +30 +00 +2e +4c +43 +46 +49 +36 +39 +00 +2e +4c +56 +4c +33 +35 +31 +00 +2e +4c +43 +46 +49 +37 +30 +00 +2e +4c +56 +4c +33 +35 +32 +00 +2e +4c +43 +46 +49 +37 +31 +00 +2e +4c +56 +4c +33 +35 +33 +00 +2e +4c +43 +46 +49 +37 +32 +00 +2e +4c +56 +4c +33 +35 +34 +00 +2e +4c +43 +46 +49 +37 +33 +00 +2e +4c +56 +4c +33 +35 +35 +00 +2e +4c +43 +46 +49 +37 +34 +00 +2e +4c +56 +4c +33 +35 +36 +00 +42 +69 +74 +56 +65 +63 +74 +6f +72 +5f +42 +6f +6f +74 +00 +2e +4c +33 +36 +36 +00 +2e +4c +56 +4c +33 +35 +37 +00 +2e +4c +56 +4c +33 +35 +38 +00 +2e +4c +56 +4c +33 +35 +39 +00 +2e +4c +56 +4c +33 +36 +30 +00 +2e +4c +56 +4c +33 +36 +31 +00 +2e +4c +56 +4c +33 +36 +32 +00 +2e +4c +56 +4c +33 +36 +33 +00 +2e +4c +56 +4c +33 +36 +34 +00 +2e +4c +56 +4c +33 +36 +35 +00 +66 +61 +69 +6c +65 +64 +00 +70 +72 +69 +6e +74 +66 +00 +2e +4c +56 +4c +33 +36 +36 +00 +2e +4c +33 +32 +30 +00 +2e +4c +56 +4c +33 +36 +37 +00 +2e +4c +33 +37 +30 +00 +2e +4c +42 +42 +37 +00 +2e +4c +42 +42 +38 +00 +2e +4c +42 +42 +39 +00 +2e +4c +56 +4c +33 +36 +38 +00 +2e +4c +33 +36 +35 +00 +66 +61 +69 +6c +6d +73 +67 +00 +2e +4c +56 +4c +33 +36 +39 +00 +73 +70 +72 +69 +6e +74 +66 +00 +2e +4c +33 +33 +31 +00 +2e +4c +42 +45 +39 +00 +2e +4c +42 +45 +38 +00 +70 +75 +74 +63 +68 +61 +72 +00 +73 +74 +64 +6f +75 +74 +00 +66 +66 +6c +75 +73 +68 +00 +2e +4c +33 +36 +37 +00 +2e +4c +42 +45 +37 +00 +2e +4c +42 +42 +31 +30 +00 +2e +4c +42 +45 +31 +30 +00 +2e +4c +33 +36 +38 +00 +2e +4c +42 +42 +31 +31 +00 +2e +4c +42 +42 +31 +32 +00 +2e +4c +42 +42 +31 +33 +00 +79 +61 +73 +6d +5f +5f +78 +73 +74 +72 +64 +75 +70 +00 +2e +4c +56 +4c +33 +37 +30 +00 +2e +4c +33 +36 +39 +00 +2e +4c +33 +32 +31 +00 +2e +4c +56 +4c +33 +37 +31 +00 +2e +4c +56 +4c +33 +37 +32 +00 +2e +4c +56 +4c +33 +37 +33 +00 +2e +4c +33 +33 +32 +00 +2e +4c +56 +4c +33 +37 +34 +00 +2e +4c +56 +4c +33 +37 +35 +00 +2e +4c +56 +4c +33 +37 +36 +00 +2e +4c +33 +33 +34 +00 +2e +4c +56 +4c +33 +37 +37 +00 +2e +4c +56 +4c +33 +37 +38 +00 +2e +4c +42 +45 +31 +33 +00 +2e +4c +42 +45 +31 +32 +00 +2e +4c +42 +45 +31 +31 +00 +2e +4c +42 +42 +31 +34 +00 +2e +4c +42 +45 +31 +34 +00 +2e +4c +42 +42 +31 +35 +00 +2e +4c +42 +45 +31 +35 +00 +2e +4c +56 +4c +33 +37 +39 +00 +2e +4c +56 +4c +33 +38 +30 +00 +2e +4c +56 +4c +33 +38 +31 +00 +2e +4c +56 +4c +33 +38 +32 +00 +2e +4c +56 +4c +33 +38 +33 +00 +2e +4c +56 +4c +33 +38 +34 +00 +2e +4c +56 +4c +33 +38 +35 +00 +2e +4c +56 +4c +33 +38 +36 +00 +2e +4c +56 +4c +33 +38 +37 +00 +2e +4c +42 +42 +31 +36 +00 +2e +4c +42 +42 +31 +37 +00 +2e +4c +42 +42 +31 +38 +00 +2e +4c +33 +34 +36 +00 +2e +4c +56 +4c +33 +38 +38 +00 +2e +4c +56 +4c +33 +38 +39 +00 +2e +4c +33 +34 +32 +00 +2e +4c +56 +4c +33 +39 +30 +00 +2e +4c +56 +4c +33 +39 +31 +00 +2e +4c +56 +4c +33 +39 +32 +00 +2e +4c +56 +4c +33 +39 +33 +00 +2e +4c +56 +4c +33 +39 +34 +00 +2e +4c +56 +4c +33 +39 +35 +00 +2e +4c +42 +45 +31 +38 +00 +2e +4c +42 +45 +31 +37 +00 +2e +4c +42 +45 +31 +36 +00 +2e +4c +46 +45 +35 +30 +00 +2e +4c +66 +72 +61 +6d +65 +30 +00 +2e +4c +45 +43 +49 +45 +30 +00 +2e +4c +53 +43 +49 +45 +30 +00 +2e +4c +53 +46 +44 +45 +30 +00 +2e +4c +45 +46 +44 +45 +30 +00 +2e +4c +41 +53 +46 +44 +45 +30 +00 +2e +4c +53 +46 +44 +45 +32 +00 +2e +4c +45 +46 +44 +45 +32 +00 +2e +4c +41 +53 +46 +44 +45 +32 +00 +2e +4c +53 +46 +44 +45 +34 +00 +2e +4c +45 +46 +44 +45 +34 +00 +2e +4c +41 +53 +46 +44 +45 +34 +00 +2e +4c +53 +46 +44 +45 +36 +00 +2e +4c +45 +46 +44 +45 +36 +00 +2e +4c +41 +53 +46 +44 +45 +36 +00 +2e +4c +53 +46 +44 +45 +38 +00 +2e +4c +45 +46 +44 +45 +38 +00 +2e +4c +41 +53 +46 +44 +45 +38 +00 +2e +4c +53 +46 +44 +45 +31 +30 +00 +2e +4c +45 +46 +44 +45 +31 +30 +00 +2e +4c +41 +53 +46 +44 +45 +31 +30 +00 +2e +4c +53 +46 +44 +45 +31 +32 +00 +2e +4c +45 +46 +44 +45 +31 +32 +00 +2e +4c +41 +53 +46 +44 +45 +31 +32 +00 +2e +4c +53 +46 +44 +45 +31 +34 +00 +2e +4c +45 +46 +44 +45 +31 +34 +00 +2e +4c +41 +53 +46 +44 +45 +31 +34 +00 +2e +4c +53 +46 +44 +45 +31 +36 +00 +2e +4c +45 +46 +44 +45 +31 +36 +00 +2e +4c +41 +53 +46 +44 +45 +31 +36 +00 +2e +4c +53 +46 +44 +45 +31 +38 +00 +2e +4c +45 +46 +44 +45 +31 +38 +00 +2e +4c +41 +53 +46 +44 +45 +31 +38 +00 +2e +4c +53 +46 +44 +45 +32 +30 +00 +2e +4c +45 +46 +44 +45 +32 +30 +00 +2e +4c +41 +53 +46 +44 +45 +32 +30 +00 +2e +4c +53 +46 +44 +45 +32 +32 +00 +2e +4c +45 +46 +44 +45 +32 +32 +00 +2e +4c +41 +53 +46 +44 +45 +32 +32 +00 +2e +4c +53 +46 +44 +45 +32 +34 +00 +2e +4c +45 +46 +44 +45 +32 +34 +00 +2e +4c +41 +53 +46 +44 +45 +32 +34 +00 +2e +4c +53 +46 +44 +45 +32 +36 +00 +2e +4c +45 +46 +44 +45 +32 +36 +00 +2e +4c +41 +53 +46 +44 +45 +32 +36 +00 +2e +4c +53 +46 +44 +45 +32 +38 +00 +2e +4c +45 +46 +44 +45 +32 +38 +00 +2e +4c +41 +53 +46 +44 +45 +32 +38 +00 +2e +4c +53 +46 +44 +45 +33 +30 +00 +2e +4c +45 +46 +44 +45 +33 +30 +00 +2e +4c +41 +53 +46 +44 +45 +33 +30 +00 +2e +4c +53 +46 +44 +45 +33 +32 +00 +2e +4c +45 +46 +44 +45 +33 +32 +00 +2e +4c +41 +53 +46 +44 +45 +33 +32 +00 +2e +4c +53 +46 +44 +45 +33 +34 +00 +2e +4c +45 +46 +44 +45 +33 +34 +00 +2e +4c +41 +53 +46 +44 +45 +33 +34 +00 +2e +4c +53 +46 +44 +45 +33 +36 +00 +2e +4c +45 +46 +44 +45 +33 +36 +00 +2e +4c +41 +53 +46 +44 +45 +33 +36 +00 +2e +4c +53 +46 +44 +45 +33 +38 +00 +2e +4c +45 +46 +44 +45 +33 +38 +00 +2e +4c +41 +53 +46 +44 +45 +33 +38 +00 +2e +4c +53 +46 +44 +45 +34 +30 +00 +2e +4c +45 +46 +44 +45 +34 +30 +00 +2e +4c +41 +53 +46 +44 +45 +34 +30 +00 +2e +4c +53 +46 +44 +45 +34 +32 +00 +2e +4c +45 +46 +44 +45 +34 +32 +00 +2e +4c +41 +53 +46 +44 +45 +34 +32 +00 +2e +4c +53 +46 +44 +45 +34 +34 +00 +2e +4c +45 +46 +44 +45 +34 +34 +00 +2e +4c +41 +53 +46 +44 +45 +34 +34 +00 +2e +4c +53 +46 +44 +45 +34 +36 +00 +2e +4c +45 +46 +44 +45 +34 +36 +00 +2e +4c +41 +53 +46 +44 +45 +34 +36 +00 +2e +4c +53 +46 +44 +45 +34 +38 +00 +2e +4c +45 +46 +44 +45 +34 +38 +00 +2e +4c +41 +53 +46 +44 +45 +34 +38 +00 +2e +4c +66 +72 +61 +6d +65 +31 +00 +2e +4c +45 +43 +49 +45 +31 +00 +2e +4c +53 +43 +49 +45 +31 +00 +2e +4c +53 +46 +44 +45 +31 +00 +2e +4c +45 +46 +44 +45 +31 +00 +2e +4c +41 +53 +46 +44 +45 +31 +00 +2e +4c +53 +46 +44 +45 +33 +00 +2e +4c +45 +46 +44 +45 +33 +00 +2e +4c +41 +53 +46 +44 +45 +33 +00 +2e +4c +53 +46 +44 +45 +35 +00 +2e +4c +45 +46 +44 +45 +35 +00 +2e +4c +41 +53 +46 +44 +45 +35 +00 +2e +4c +53 +46 +44 +45 +37 +00 +2e +4c +45 +46 +44 +45 +37 +00 +2e +4c +41 +53 +46 +44 +45 +37 +00 +2e +4c +53 +46 +44 +45 +39 +00 +2e +4c +45 +46 +44 +45 +39 +00 +2e +4c +41 +53 +46 +44 +45 +39 +00 +2e +4c +53 +46 +44 +45 +31 +31 +00 +2e +4c +45 +46 +44 +45 +31 +31 +00 +2e +4c +41 +53 +46 +44 +45 +31 +31 +00 +2e +4c +53 +46 +44 +45 +31 +33 +00 +2e +4c +45 +46 +44 +45 +31 +33 +00 +2e +4c +41 +53 +46 +44 +45 +31 +33 +00 +2e +4c +53 +46 +44 +45 +31 +35 +00 +2e +4c +45 +46 +44 +45 +31 +35 +00 +2e +4c +41 +53 +46 +44 +45 +31 +35 +00 +2e +4c +53 +46 +44 +45 +31 +37 +00 +2e +4c +45 +46 +44 +45 +31 +37 +00 +2e +4c +41 +53 +46 +44 +45 +31 +37 +00 +2e +4c +53 +46 +44 +45 +31 +39 +00 +2e +4c +45 +46 +44 +45 +31 +39 +00 +2e +4c +41 +53 +46 +44 +45 +31 +39 +00 +2e +4c +53 +46 +44 +45 +32 +31 +00 +2e +4c +45 +46 +44 +45 +32 +31 +00 +2e +4c +41 +53 +46 +44 +45 +32 +31 +00 +2e +4c +53 +46 +44 +45 +32 +33 +00 +2e +4c +45 +46 +44 +45 +32 +33 +00 +2e +4c +41 +53 +46 +44 +45 +32 +33 +00 +2e +4c +53 +46 +44 +45 +32 +35 +00 +2e +4c +45 +46 +44 +45 +32 +35 +00 +2e +4c +41 +53 +46 +44 +45 +32 +35 +00 +2e +4c +53 +46 +44 +45 +32 +37 +00 +2e +4c +45 +46 +44 +45 +32 +37 +00 +2e +4c +41 +53 +46 +44 +45 +32 +37 +00 +2e +4c +53 +46 +44 +45 +32 +39 +00 +2e +4c +45 +46 +44 +45 +32 +39 +00 +2e +4c +41 +53 +46 +44 +45 +32 +39 +00 +2e +4c +53 +46 +44 +45 +33 +31 +00 +2e +4c +45 +46 +44 +45 +33 +31 +00 +2e +4c +41 +53 +46 +44 +45 +33 +31 +00 +2e +4c +53 +46 +44 +45 +33 +33 +00 +2e +4c +45 +46 +44 +45 +33 +33 +00 +2e +4c +41 +53 +46 +44 +45 +33 +33 +00 +2e +4c +53 +46 +44 +45 +33 +35 +00 +2e +4c +45 +46 +44 +45 +33 +35 +00 +2e +4c +41 +53 +46 +44 +45 +33 +35 +00 +2e +4c +53 +46 +44 +45 +33 +37 +00 +2e +4c +45 +46 +44 +45 +33 +37 +00 +2e +4c +41 +53 +46 +44 +45 +33 +37 +00 +2e +4c +53 +46 +44 +45 +33 +39 +00 +2e +4c +45 +46 +44 +45 +33 +39 +00 +2e +4c +41 +53 +46 +44 +45 +33 +39 +00 +2e +4c +53 +46 +44 +45 +34 +31 +00 +2e +4c +45 +46 +44 +45 +34 +31 +00 +2e +4c +41 +53 +46 +44 +45 +34 +31 +00 +2e +4c +53 +46 +44 +45 +34 +33 +00 +2e +4c +45 +46 +44 +45 +34 +33 +00 +2e +4c +41 +53 +46 +44 +45 +34 +33 +00 +2e +4c +53 +46 +44 +45 +34 +35 +00 +2e +4c +45 +46 +44 +45 +34 +35 +00 +2e +4c +41 +53 +46 +44 +45 +34 +35 +00 +2e +4c +53 +46 +44 +45 +34 +37 +00 +2e +4c +45 +46 +44 +45 +34 +37 +00 +2e +4c +41 +53 +46 +44 +45 +34 +37 +00 +2e +4c +53 +46 +44 +45 +34 +39 +00 +2e +4c +45 +46 +44 +45 +34 +39 +00 +2e +4c +41 +53 +46 +44 +45 +34 +39 +00 +2e +4c +65 +74 +65 +78 +74 +30 +00 +2e +4c +64 +65 +62 +75 +67 +5f +6c +6f +63 +30 +00 +2e +4c +4c +53 +54 +30 +00 +2e +4c +4c +53 +54 +31 +00 +2e +4c +4c +53 +54 +32 +00 +2e +4c +4c +53 +54 +33 +00 +2e +4c +4c +53 +54 +34 +00 +2e +4c +4c +53 +54 +35 +00 +2e +4c +4c +53 +54 +36 +00 +2e +4c +4c +53 +54 +37 +00 +2e +4c +4c +53 +54 +38 +00 +2e +4c +4c +53 +54 +39 +00 +2e +4c +4c +53 +54 +31 +30 +00 +2e +4c +4c +53 +54 +31 +31 +00 +2e +4c +4c +53 +54 +31 +32 +00 +2e +4c +4c +53 +54 +31 +33 +00 +2e +4c +4c +53 +54 +31 +34 +00 +2e +4c +4c +53 +54 +31 +35 +00 +2e +4c +4c +53 +54 +31 +36 +00 +2e +4c +4c +53 +54 +31 +37 +00 +2e +4c +4c +53 +54 +31 +38 +00 +2e +4c +4c +53 +54 +31 +39 +00 +2e +4c +4c +53 +54 +32 +30 +00 +2e +4c +4c +53 +54 +32 +31 +00 +2e +4c +4c +53 +54 +32 +32 +00 +2e +4c +4c +53 +54 +32 +33 +00 +2e +4c +4c +53 +54 +32 +34 +00 +2e +4c +4c +53 +54 +32 +35 +00 +2e +4c +4c +53 +54 +32 +36 +00 +2e +4c +4c +53 +54 +32 +37 +00 +2e +4c +4c +53 +54 +32 +38 +00 +2e +4c +4c +53 +54 +32 +39 +00 +2e +4c +4c +53 +54 +33 +30 +00 +2e +4c +4c +53 +54 +33 +31 +00 +2e +4c +4c +53 +54 +33 +32 +00 +2e +4c +4c +53 +54 +33 +33 +00 +2e +4c +4c +53 +54 +33 +34 +00 +2e +4c +4c +53 +54 +33 +35 +00 +2e +4c +4c +53 +54 +33 +36 +00 +2e +4c +4c +53 +54 +33 +37 +00 +2e +4c +4c +53 +54 +33 +38 +00 +2e +4c +4c +53 +54 +33 +39 +00 +2e +4c +4c +53 +54 +34 +30 +00 +2e +4c +4c +53 +54 +34 +31 +00 +2e +4c +4c +53 +54 +34 +32 +00 +2e +4c +4c +53 +54 +34 +33 +00 +2e +4c +4c +53 +54 +34 +34 +00 +2e +4c +4c +53 +54 +34 +35 +00 +2e +4c +4c +53 +54 +34 +36 +00 +2e +4c +4c +53 +54 +34 +37 +00 +2e +4c +4c +53 +54 +34 +38 +00 +2e +4c +4c +53 +54 +34 +39 +00 +2e +4c +4c +53 +54 +35 +30 +00 +2e +4c +4c +53 +54 +35 +31 +00 +2e +4c +4c +53 +54 +35 +32 +00 +2e +4c +4c +53 +54 +35 +33 +00 +2e +4c +4c +53 +54 +35 +34 +00 +2e +4c +4c +53 +54 +35 +35 +00 +2e +4c +4c +53 +54 +35 +36 +00 +2e +4c +4c +53 +54 +35 +37 +00 +2e +4c +4c +53 +54 +35 +38 +00 +2e +4c +4c +53 +54 +35 +39 +00 +2e +4c +4c +53 +54 +36 +30 +00 +2e +4c +4c +53 +54 +36 +31 +00 +2e +4c +4c +53 +54 +36 +32 +00 +2e +4c +4c +53 +54 +36 +33 +00 +2e +4c +4c +53 +54 +36 +34 +00 +2e +4c +4c +53 +54 +36 +35 +00 +2e +4c +4c +53 +54 +36 +36 +00 +2e +4c +4c +53 +54 +36 +37 +00 +2e +4c +4c +53 +54 +36 +38 +00 +2e +4c +4c +53 +54 +36 +39 +00 +2e +4c +4c +53 +54 +37 +30 +00 +2e +4c +4c +53 +54 +37 +31 +00 +2e +4c +4c +53 +54 +37 +32 +00 +2e +4c +4c +53 +54 +37 +33 +00 +2e +4c +4c +53 +54 +37 +34 +00 +2e +4c +4c +53 +54 +37 +35 +00 +2e +4c +4c +53 +54 +37 +36 +00 +2e +4c +4c +53 +54 +37 +37 +00 +2e +4c +4c +53 +54 +37 +38 +00 +2e +4c +4c +53 +54 +37 +39 +00 +2e +4c +4c +53 +54 +38 +30 +00 +2e +4c +4c +53 +54 +38 +31 +00 +2e +4c +4c +53 +54 +38 +32 +00 +2e +4c +4c +53 +54 +38 +33 +00 +2e +4c +4c +53 +54 +38 +34 +00 +2e +4c +4c +53 +54 +38 +35 +00 +2e +4c +4c +53 +54 +38 +36 +00 +2e +4c +4c +53 +54 +38 +37 +00 +2e +4c +41 +53 +46 +31 +34 +38 +00 +2e +4c +41 +53 +46 +31 +34 +39 +00 +2e +4c +41 +53 +46 +31 +35 +30 +00 +2e +4c +41 +53 +46 +37 +00 +2e +4c +41 +53 +46 +30 +00 +2e +4c +41 +53 +46 +31 +00 +2e +4c +41 +53 +46 +32 +00 +2e +4c +41 +53 +46 +33 +00 +2e +4c +41 +53 +46 +34 +00 +2e +4c +41 +53 +46 +35 +00 +2e +4c +41 +53 +46 +36 +00 +2e +4c +41 +53 +46 +38 +00 +2e +4c +41 +53 +46 +39 +00 +2e +4c +41 +53 +46 +31 +30 +00 +2e +4c +41 +53 +46 +31 +31 +00 +2e +4c +41 +53 +46 +33 +39 +00 +2e +4c +41 +53 +46 +31 +32 +00 +2e +4c +41 +53 +46 +31 +33 +00 +2e +4c +41 +53 +46 +31 +34 +00 +2e +4c +41 +53 +46 +31 +35 +00 +2e +4c +41 +53 +46 +31 +36 +00 +2e +4c +41 +53 +46 +31 +37 +00 +2e +4c +41 +53 +46 +31 +38 +00 +2e +4c +41 +53 +46 +31 +39 +00 +2e +4c +41 +53 +46 +32 +30 +00 +2e +4c +41 +53 +46 +32 +31 +00 +2e +4c +41 +53 +46 +32 +32 +00 +2e +4c +41 +53 +46 +32 +33 +00 +2e +4c +41 +53 +46 +32 +34 +00 +2e +4c +41 +53 +46 +32 +35 +00 +2e +4c +41 +53 +46 +32 +36 +00 +2e +4c +41 +53 +46 +32 +37 +00 +2e +4c +41 +53 +46 +32 +38 +00 +2e +4c +41 +53 +46 +32 +39 +00 +2e +4c +41 +53 +46 +33 +30 +00 +2e +4c +41 +53 +46 +33 +31 +00 +2e +4c +41 +53 +46 +33 +32 +00 +2e +4c +41 +53 +46 +33 +33 +00 +2e +4c +41 +53 +46 +33 +34 +00 +2e +4c +41 +53 +46 +33 +35 +00 +2e +4c +41 +53 +46 +33 +36 +00 +2e +4c +41 +53 +46 +33 +37 +00 +2e +4c +41 +53 +46 +33 +38 +00 +2e +4c +41 +53 +46 +34 +30 +00 +2e +4c +41 +53 +46 +34 +31 +00 +2e +4c +41 +53 +46 +34 +32 +00 +2e +4c +41 +53 +46 +34 +33 +00 +2e +4c +41 +53 +46 +34 +34 +00 +2e +4c +41 +53 +46 +34 +35 +00 +2e +4c +41 +53 +46 +34 +36 +00 +2e +4c +41 +53 +46 +34 +37 +00 +2e +4c +41 +53 +46 +34 +38 +00 +2e +4c +41 +53 +46 +34 +39 +00 +2e +4c +41 +53 +46 +35 +30 +00 +2e +4c +41 +53 +46 +35 +31 +00 +2e +4c +41 +53 +46 +35 +32 +00 +2e +4c +41 +53 +46 +35 +33 +00 +2e +4c +41 +53 +46 +35 +34 +00 +2e +4c +41 +53 +46 +35 +35 +00 +2e +4c +41 +53 +46 +35 +36 +00 +2e +4c +41 +53 +46 +35 +37 +00 +2e +4c +41 +53 +46 +35 +38 +00 +2e +4c +41 +53 +46 +35 +39 +00 +2e +4c +41 +53 +46 +36 +30 +00 +2e +4c +41 +53 +46 +36 +31 +00 +2e +4c +41 +53 +46 +36 +32 +00 +2e +4c +41 +53 +46 +36 +33 +00 +2e +4c +41 +53 +46 +36 +34 +00 +2e +4c +41 +53 +46 +36 +35 +00 +2e +4c +41 +53 +46 +36 +36 +00 +2e +4c +41 +53 +46 +36 +37 +00 +2e +4c +41 +53 +46 +36 +38 +00 +2e +4c +41 +53 +46 +36 +39 +00 +2e +4c +41 +53 +46 +37 +30 +00 +2e +4c +41 +53 +46 +37 +31 +00 +2e +4c +41 +53 +46 +37 +32 +00 +2e +4c +41 +53 +46 +37 +33 +00 +2e +4c +41 +53 +46 +37 +34 +00 +2e +4c +41 +53 +46 +37 +35 +00 +2e +4c +41 +53 +46 +37 +36 +00 +2e +4c +41 +53 +46 +37 +37 +00 +2e +4c +41 +53 +46 +37 +38 +00 +2e +4c +41 +53 +46 +37 +39 +00 +2e +4c +41 +53 +46 +38 +30 +00 +2e +4c +41 +53 +46 +38 +31 +00 +2e +4c +41 +53 +46 +38 +32 +00 +2e +4c +41 +53 +46 +38 +33 +00 +2e +4c +41 +53 +46 +38 +34 +00 +2e +4c +41 +53 +46 +38 +35 +00 +2e +4c +41 +53 +46 +38 +36 +00 +2e +4c +41 +53 +46 +38 +37 +00 +2e +4c +41 +53 +46 +38 +38 +00 +2e +4c +41 +53 +46 +38 +39 +00 +2e +4c +41 +53 +46 +39 +30 +00 +2e +4c +41 +53 +46 +39 +31 +00 +2e +4c +41 +53 +46 +39 +32 +00 +2e +4c +41 +53 +46 +39 +34 +00 +2e +4c +41 +53 +46 +39 +33 +00 +2e +4c +41 +53 +46 +39 +36 +00 +2e +4c +41 +53 +46 +39 +35 +00 +2e +4c +41 +53 +46 +39 +37 +00 +2e +4c +41 +53 +46 +39 +38 +00 +2e +4c +41 +53 +46 +39 +39 +00 +2e +4c +41 +53 +46 +31 +30 +30 +00 +2e +4c +41 +53 +46 +31 +30 +31 +00 +2e +4c +41 +53 +46 +31 +30 +32 +00 +2e +4c +41 +53 +46 +31 +30 +33 +00 +2e +4c +41 +53 +46 +31 +30 +34 +00 +2e +4c +41 +53 +46 +31 +30 +35 +00 +2e +4c +41 +53 +46 +31 +30 +36 +00 +2e +4c +41 +53 +46 +31 +30 +37 +00 +2e +4c +41 +53 +46 +31 +30 +38 +00 +2e +4c +41 +53 +46 +31 +30 +39 +00 +2e +4c +41 +53 +46 +31 +31 +30 +00 +2e +4c +41 +53 +46 +31 +31 +31 +00 +2e +4c +41 +53 +46 +31 +31 +32 +00 +2e +4c +41 +53 +46 +31 +31 +33 +00 +2e +4c +64 +65 +62 +75 +67 +5f +72 +61 +6e +67 +65 +73 +30 +00 +2e +4c +41 +53 +46 +31 +31 +34 +00 +2e +4c +41 +53 +46 +31 +31 +35 +00 +2e +4c +41 +53 +46 +31 +31 +36 +00 +2e +4c +41 +53 +46 +31 +31 +37 +00 +2e +4c +41 +53 +46 +31 +31 +38 +00 +2e +4c +41 +53 +46 +31 +31 +39 +00 +2e +4c +41 +53 +46 +31 +32 +30 +00 +2e +4c +41 +53 +46 +31 +32 +31 +00 +2e +4c +41 +53 +46 +31 +32 +32 +00 +2e +4c +41 +53 +46 +31 +32 +33 +00 +2e +4c +41 +53 +46 +31 +32 +34 +00 +2e +4c +41 +53 +46 +31 +32 +35 +00 +2e +4c +41 +53 +46 +31 +32 +36 +00 +2e +4c +41 +53 +46 +31 +32 +37 +00 +2e +4c +41 +53 +46 +31 +32 +38 +00 +2e +4c +41 +53 +46 +31 +32 +39 +00 +2e +4c +41 +53 +46 +31 +35 +31 +00 +2e +4c +41 +53 +46 +31 +33 +30 +00 +2e +4c +41 +53 +46 +31 +33 +31 +00 +2e +4c +41 +53 +46 +31 +33 +32 +00 +2e +4c +41 +53 +46 +31 +33 +33 +00 +2e +4c +41 +53 +46 +31 +33 +34 +00 +2e +4c +41 +53 +46 +31 +33 +35 +00 +2e +4c +41 +53 +46 +31 +33 +36 +00 +2e +4c +41 +53 +46 +31 +33 +37 +00 +2e +4c +41 +53 +46 +31 +33 +38 +00 +2e +4c +41 +53 +46 +31 +33 +39 +00 +2e +4c +41 +53 +46 +31 +34 +30 +00 +2e +4c +41 +53 +46 +31 +34 +31 +00 +2e +4c +41 +53 +46 +31 +34 +32 +00 +2e +4c +41 +53 +46 +31 +34 +33 +00 +2e +4c +41 +53 +46 +31 +34 +34 +00 +2e +4c +41 +53 +46 +31 +34 +35 +00 +2e +4c +41 +53 +46 +31 +34 +36 +00 +2e +4c +41 +53 +46 +31 +34 +37 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +1e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +1d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +1a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +28 +00 +00 +00 +00 +1d +00 +e2 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +28 +00 +00 +00 +00 +1d +00 +a2 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fd +27 +00 +00 +00 +00 +1d +00 +da +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f4 +27 +00 +00 +00 +00 +1d +00 +a1 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +27 +00 +00 +00 +00 +1d +00 +59 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e2 +27 +00 +00 +00 +00 +1d +00 +21 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d9 +27 +00 +00 +00 +00 +1d +00 +0c +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +27 +00 +00 +00 +00 +1d +00 +49 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c7 +27 +00 +00 +00 +00 +1d +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +be +27 +00 +00 +00 +00 +1d +00 +23 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b5 +27 +00 +00 +00 +00 +1d +00 +28 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ac +27 +00 +00 +00 +00 +1d +00 +ce +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a3 +27 +00 +00 +00 +00 +1d +00 +1b +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9a +27 +00 +00 +00 +00 +1d +00 +54 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +91 +27 +00 +00 +00 +00 +1d +00 +76 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +88 +27 +00 +00 +00 +00 +1d +00 +c1 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7f +27 +00 +00 +00 +00 +1d +00 +9b +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +76 +27 +00 +00 +00 +00 +1d +00 +1c +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6d +27 +00 +00 +00 +00 +1d +00 +98 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +64 +27 +00 +00 +00 +00 +1d +00 +7b +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5b +27 +00 +00 +00 +00 +1d +00 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +52 +27 +00 +00 +00 +00 +1d +00 +95 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +49 +27 +00 +00 +00 +00 +1d +00 +b5 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +27 +00 +00 +00 +00 +1d +00 +78 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +37 +27 +00 +00 +00 +00 +1d +00 +c3 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +27 +00 +00 +00 +00 +1d +00 +c5 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +25 +27 +00 +00 +00 +00 +1d +00 +cd +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1c +27 +00 +00 +00 +00 +1d +00 +e0 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +13 +27 +00 +00 +00 +00 +1d +00 +7d +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0a +27 +00 +00 +00 +00 +1d +00 +90 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +27 +00 +00 +00 +00 +1d +00 +7f +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f8 +26 +00 +00 +00 +00 +1d +00 +35 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ef +26 +00 +00 +00 +00 +1d +00 +3f +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e6 +26 +00 +00 +00 +00 +1d +00 +a8 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +dd +26 +00 +00 +00 +00 +1d +00 +3b +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cd +26 +00 +00 +00 +00 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c4 +26 +00 +00 +00 +00 +1d +00 +cd +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bb +26 +00 +00 +00 +00 +1d +00 +1f +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b2 +26 +00 +00 +00 +00 +1d +00 +73 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a9 +26 +00 +00 +00 +00 +1d +00 +9f +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +26 +00 +00 +00 +00 +1d +00 +ed +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +97 +26 +00 +00 +00 +00 +1d +00 +de +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8e +26 +00 +00 +00 +00 +1d +00 +b0 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +85 +26 +00 +00 +00 +00 +1d +00 +da +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +26 +00 +00 +00 +00 +1d +00 +67 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +73 +26 +00 +00 +00 +00 +1d +00 +07 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6a +26 +00 +00 +00 +00 +1d +00 +d4 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +61 +26 +00 +00 +00 +00 +1d +00 +67 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +58 +26 +00 +00 +00 +00 +1d +00 +08 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4f +26 +00 +00 +00 +00 +1d +00 +ad +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +47 +26 +00 +00 +00 +00 +1d +00 +f9 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3f +26 +00 +00 +00 +00 +1d +00 +50 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +37 +26 +00 +00 +00 +00 +1d +00 +32 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2f +26 +00 +00 +00 +00 +1d +00 +29 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +27 +26 +00 +00 +00 +00 +1d +00 +68 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1f +26 +00 +00 +00 +00 +1d +00 +17 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +26 +00 +00 +00 +00 +1d +00 +84 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +26 +00 +00 +00 +00 +1d +00 +e0 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +26 +00 +00 +00 +00 +1d +00 +40 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +25 +00 +00 +00 +00 +1d +00 +f4 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f7 +25 +00 +00 +00 +00 +1d +00 +0f +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ef +25 +00 +00 +00 +00 +1d +00 +aa +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e7 +25 +00 +00 +00 +00 +1d +00 +65 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +df +25 +00 +00 +00 +00 +1d +00 +a6 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d7 +25 +00 +00 +00 +00 +1d +00 +9f +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cf +25 +00 +00 +00 +00 +1d +00 +ab +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c7 +25 +00 +00 +00 +00 +1d +00 +6c +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bf +25 +00 +00 +00 +00 +1d +00 +61 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b7 +25 +00 +00 +00 +00 +1d +00 +61 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +af +25 +00 +00 +00 +00 +1d +00 +2d +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a7 +25 +00 +00 +00 +00 +1d +00 +2f +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9f +25 +00 +00 +00 +00 +1d +00 +51 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +97 +25 +00 +00 +00 +00 +1d +00 +52 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8f +25 +00 +00 +00 +00 +1d +00 +ff +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +87 +25 +00 +00 +00 +00 +1d +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7f +25 +00 +00 +00 +00 +1d +00 +59 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +77 +25 +00 +00 +00 +00 +1d +00 +1b +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6f +25 +00 +00 +00 +00 +1d +00 +40 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +67 +25 +00 +00 +00 +00 +1d +00 +fb +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +25 +00 +00 +00 +00 +1d +00 +b9 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +57 +25 +00 +00 +00 +00 +1d +00 +66 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4f +25 +00 +00 +00 +00 +1d +00 +0b +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +47 +25 +00 +00 +00 +00 +1d +00 +d5 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3f +25 +00 +00 +00 +00 +1d +00 +9b +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +37 +25 +00 +00 +00 +00 +1d +00 +cb +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2f +25 +00 +00 +00 +00 +1d +00 +24 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +27 +25 +00 +00 +00 +00 +1d +00 +d0 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1f +25 +00 +00 +00 +00 +1d +00 +57 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +25 +00 +00 +00 +00 +1d +00 +b3 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +25 +00 +00 +00 +00 +1d +00 +cc +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +25 +00 +00 +00 +00 +1d +00 +f9 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +24 +00 +00 +00 +00 +1d +00 +46 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f7 +24 +00 +00 +00 +00 +1d +00 +f2 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ef +24 +00 +00 +00 +00 +1d +00 +40 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e7 +24 +00 +00 +00 +00 +1d +00 +6d +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +df +24 +00 +00 +00 +00 +1d +00 +4e +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d7 +24 +00 +00 +00 +00 +1d +00 +53 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cf +24 +00 +00 +00 +00 +1d +00 +e7 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c7 +24 +00 +00 +00 +00 +1d +00 +66 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bf +24 +00 +00 +00 +00 +1d +00 +32 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b7 +24 +00 +00 +00 +00 +1d +00 +8d +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +af +24 +00 +00 +00 +00 +1d +00 +13 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a7 +24 +00 +00 +00 +00 +1d +00 +e9 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9f +24 +00 +00 +00 +00 +1d +00 +8c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +97 +24 +00 +00 +00 +00 +1d +00 +e8 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8f +24 +00 +00 +00 +00 +1d +00 +69 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +87 +24 +00 +00 +00 +00 +1d +00 +93 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7f +24 +00 +00 +00 +00 +1d +00 +c8 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +77 +24 +00 +00 +00 +00 +1d +00 +da +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6f +24 +00 +00 +00 +00 +1d +00 +18 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +67 +24 +00 +00 +00 +00 +1d +00 +4f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +24 +00 +00 +00 +00 +1d +00 +3d +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +57 +24 +00 +00 +00 +00 +1d +00 +60 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4f +24 +00 +00 +00 +00 +1d +00 +86 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +47 +24 +00 +00 +00 +00 +1d +00 +7f +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3f +24 +00 +00 +00 +00 +1d +00 +88 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +37 +24 +00 +00 +00 +00 +1d +00 +ad +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2f +24 +00 +00 +00 +00 +1d +00 +1e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +27 +24 +00 +00 +00 +00 +1d +00 +c1 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1f +24 +00 +00 +00 +00 +1d +00 +18 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +24 +00 +00 +00 +00 +1d +00 +b3 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +24 +00 +00 +00 +00 +1d +00 +e6 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +24 +00 +00 +00 +00 +1d +00 +97 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +23 +00 +00 +00 +00 +1d +00 +c6 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f7 +23 +00 +00 +00 +00 +1d +00 +f7 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ef +23 +00 +00 +00 +00 +1d +00 +cd +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e7 +23 +00 +00 +00 +00 +1d +00 +6f +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +df +23 +00 +00 +00 +00 +1d +00 +32 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d7 +23 +00 +00 +00 +00 +1d +00 +5a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cf +23 +00 +00 +00 +00 +1d +00 +46 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c7 +23 +00 +00 +00 +00 +1d +00 +9e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bf +23 +00 +00 +00 +00 +1d +00 +21 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b7 +23 +00 +00 +00 +00 +1d +00 +23 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +af +23 +00 +00 +00 +00 +1d +00 +b5 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a7 +23 +00 +00 +00 +00 +1d +00 +2e +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9f +23 +00 +00 +00 +00 +1d +00 +a8 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +97 +23 +00 +00 +00 +00 +1d +00 +c6 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8f +23 +00 +00 +00 +00 +1d +00 +bf +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +87 +23 +00 +00 +00 +00 +1d +00 +e1 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7f +23 +00 +00 +00 +00 +1d +00 +29 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +23 +00 +00 +00 +00 +1d +00 +33 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +71 +23 +00 +00 +00 +00 +1d +00 +59 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6a +23 +00 +00 +00 +00 +1d +00 +11 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +63 +23 +00 +00 +00 +00 +1d +00 +80 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5c +23 +00 +00 +00 +00 +1d +00 +ac +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +55 +23 +00 +00 +00 +00 +1d +00 +8c +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4e +23 +00 +00 +00 +00 +1d +00 +01 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +47 +23 +00 +00 +00 +00 +1d +00 +5f +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +23 +00 +00 +00 +00 +1d +00 +8d +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +39 +23 +00 +00 +00 +00 +1d +00 +9f +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +23 +00 +00 +00 +00 +1d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +27 +23 +00 +00 +00 +00 +1d +00 +34 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +23 +00 +00 +00 +00 +1d +00 +ee +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +16 +23 +00 +00 +00 +00 +17 +00 +e8 +25 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0e +23 +00 +00 +00 +00 +17 +00 +1a +25 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +23 +00 +00 +00 +00 +17 +00 +e4 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fe +22 +00 +00 +00 +00 +17 +00 +ae +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f6 +22 +00 +00 +00 +00 +17 +00 +52 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ee +22 +00 +00 +00 +00 +17 +00 +1c +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e6 +22 +00 +00 +00 +00 +17 +00 +17 +22 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +de +22 +00 +00 +00 +00 +17 +00 +e1 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d6 +22 +00 +00 +00 +00 +17 +00 +5f +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ce +22 +00 +00 +00 +00 +17 +00 +03 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c6 +22 +00 +00 +00 +00 +17 +00 +67 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +be +22 +00 +00 +00 +00 +17 +00 +31 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b6 +22 +00 +00 +00 +00 +17 +00 +d5 +1f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ae +22 +00 +00 +00 +00 +17 +00 +79 +1f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a6 +22 +00 +00 +00 +00 +17 +00 +19 +1f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9e +22 +00 +00 +00 +00 +17 +00 +d0 +1e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +96 +22 +00 +00 +00 +00 +17 +00 +9a +1e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8e +22 +00 +00 +00 +00 +17 +00 +64 +1e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +86 +22 +00 +00 +00 +00 +17 +00 +f5 +1d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7e +22 +00 +00 +00 +00 +17 +00 +3a +1d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +76 +22 +00 +00 +00 +00 +17 +00 +b8 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6e +22 +00 +00 +00 +00 +17 +00 +58 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +66 +22 +00 +00 +00 +00 +17 +00 +22 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5e +22 +00 +00 +00 +00 +17 +00 +ec +1b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +56 +22 +00 +00 +00 +00 +17 +00 +a3 +1b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4e +22 +00 +00 +00 +00 +17 +00 +6d +1b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +46 +22 +00 +00 +00 +00 +17 +00 +36 +1b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3e +22 +00 +00 +00 +00 +17 +00 +b4 +1a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +36 +22 +00 +00 +00 +00 +17 +00 +55 +1a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +22 +00 +00 +00 +00 +17 +00 +0c +1a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +26 +22 +00 +00 +00 +00 +17 +00 +d5 +19 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +22 +00 +00 +00 +00 +17 +00 +66 +19 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +16 +22 +00 +00 +00 +00 +17 +00 +04 +19 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0e +22 +00 +00 +00 +00 +17 +00 +95 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +22 +00 +00 +00 +00 +17 +00 +39 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fe +21 +00 +00 +00 +00 +17 +00 +dd +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f6 +21 +00 +00 +00 +00 +17 +00 +35 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ee +21 +00 +00 +00 +00 +17 +00 +d9 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e6 +21 +00 +00 +00 +00 +17 +00 +31 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +de +21 +00 +00 +00 +00 +17 +00 +d1 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d6 +21 +00 +00 +00 +00 +17 +00 +3c +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ce +21 +00 +00 +00 +00 +17 +00 +78 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c6 +21 +00 +00 +00 +00 +17 +00 +42 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +be +21 +00 +00 +00 +00 +17 +00 +a6 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b6 +21 +00 +00 +00 +00 +17 +00 +83 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ae +21 +00 +00 +00 +00 +17 +00 +60 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a6 +21 +00 +00 +00 +00 +17 +00 +ec +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9e +21 +00 +00 +00 +00 +17 +00 +90 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +96 +21 +00 +00 +00 +00 +17 +00 +1c +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8e +21 +00 +00 +00 +00 +17 +00 +d3 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +86 +21 +00 +00 +00 +00 +17 +00 +8a +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7e +21 +00 +00 +00 +00 +17 +00 +41 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +76 +21 +00 +00 +00 +00 +17 +00 +f8 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6e +21 +00 +00 +00 +00 +17 +00 +d3 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +66 +21 +00 +00 +00 +00 +17 +00 +64 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5e +21 +00 +00 +00 +00 +17 +00 +02 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +56 +21 +00 +00 +00 +00 +17 +00 +93 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4e +21 +00 +00 +00 +00 +17 +00 +1f +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +46 +21 +00 +00 +00 +00 +17 +00 +d6 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3e +21 +00 +00 +00 +00 +17 +00 +7a +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +36 +21 +00 +00 +00 +00 +17 +00 +de +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +21 +00 +00 +00 +00 +17 +00 +82 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +26 +21 +00 +00 +00 +00 +17 +00 +0e +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +21 +00 +00 +00 +00 +17 +00 +d8 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +16 +21 +00 +00 +00 +00 +17 +00 +8c +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0e +21 +00 +00 +00 +00 +17 +00 +1d +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +21 +00 +00 +00 +00 +17 +00 +e7 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fe +20 +00 +00 +00 +00 +17 +00 +8b +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f6 +20 +00 +00 +00 +00 +17 +00 +2f +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ee +20 +00 +00 +00 +00 +17 +00 +cf +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e6 +20 +00 +00 +00 +00 +17 +00 +86 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +de +20 +00 +00 +00 +00 +17 +00 +2a +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d6 +20 +00 +00 +00 +00 +17 +00 +ce +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ce +20 +00 +00 +00 +00 +17 +00 +46 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c6 +20 +00 +00 +00 +00 +17 +00 +fd +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +be +20 +00 +00 +00 +00 +17 +00 +a1 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b6 +20 +00 +00 +00 +00 +17 +00 +45 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ae +20 +00 +00 +00 +00 +17 +00 +bd +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a7 +20 +00 +00 +00 +00 +17 +00 +74 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +20 +00 +00 +00 +00 +17 +00 +18 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +99 +20 +00 +00 +00 +00 +17 +00 +bc +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +92 +20 +00 +00 +00 +00 +17 +00 +34 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8b +20 +00 +00 +00 +00 +17 +00 +d8 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +20 +00 +00 +00 +00 +17 +00 +7c +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7d +20 +00 +00 +00 +00 +17 +00 +20 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +76 +20 +00 +00 +00 +00 +17 +00 +98 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6f +20 +00 +00 +00 +00 +17 +00 +4c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +68 +20 +00 +00 +00 +00 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5b +20 +00 +00 +00 +00 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +52 +20 +00 +00 +00 +00 +04 +00 +1b +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +20 +00 +00 +00 +00 +15 +00 +04 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3f +20 +00 +00 +00 +00 +15 +00 +58 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +36 +20 +00 +00 +00 +00 +15 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2c +20 +00 +00 +00 +00 +15 +00 +d4 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +23 +20 +00 +00 +00 +00 +15 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1a +20 +00 +00 +00 +00 +15 +00 +d0 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +20 +00 +00 +00 +00 +15 +00 +a4 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +20 +00 +00 +00 +00 +15 +00 +d0 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fe +1f +00 +00 +00 +00 +15 +00 +a0 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f4 +1f +00 +00 +00 +00 +15 +00 +74 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +1f +00 +00 +00 +00 +15 +00 +a0 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e2 +1f +00 +00 +00 +00 +15 +00 +70 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d8 +1f +00 +00 +00 +00 +15 +00 +3c +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cf +1f +00 +00 +00 +00 +15 +00 +70 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c6 +1f +00 +00 +00 +00 +15 +00 +38 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bc +1f +00 +00 +00 +00 +15 +00 +04 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b3 +1f +00 +00 +00 +00 +15 +00 +38 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +aa +1f +00 +00 +00 +00 +15 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +1f +00 +00 +00 +00 +15 +00 +dc +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +97 +1f +00 +00 +00 +00 +15 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8e +1f +00 +00 +00 +00 +15 +00 +d8 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +1f +00 +00 +00 +00 +15 +00 +bc +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7b +1f +00 +00 +00 +00 +15 +00 +d8 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +72 +1f +00 +00 +00 +00 +15 +00 +b8 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +68 +1f +00 +00 +00 +00 +15 +00 +a4 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +1f +00 +00 +00 +00 +15 +00 +b8 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +56 +1f +00 +00 +00 +00 +15 +00 +a0 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4c +1f +00 +00 +00 +00 +15 +00 +84 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +43 +1f +00 +00 +00 +00 +15 +00 +a0 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3a +1f +00 +00 +00 +00 +15 +00 +80 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +1f +00 +00 +00 +00 +15 +00 +6c +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +27 +1f +00 +00 +00 +00 +15 +00 +80 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +1f +00 +00 +00 +00 +15 +00 +68 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +1f +00 +00 +00 +00 +15 +00 +54 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0b +1f +00 +00 +00 +00 +15 +00 +68 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +1f +00 +00 +00 +00 +15 +00 +50 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f8 +1e +00 +00 +00 +00 +15 +00 +2c +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ef +1e +00 +00 +00 +00 +15 +00 +50 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e6 +1e +00 +00 +00 +00 +15 +00 +28 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +dc +1e +00 +00 +00 +00 +15 +00 +f4 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d3 +1e +00 +00 +00 +00 +15 +00 +28 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ca +1e +00 +00 +00 +00 +15 +00 +f0 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +1e +00 +00 +00 +00 +15 +00 +cc +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b7 +1e +00 +00 +00 +00 +15 +00 +f0 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ae +1e +00 +00 +00 +00 +15 +00 +c8 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a4 +1e +00 +00 +00 +00 +15 +00 +a4 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9b +1e +00 +00 +00 +00 +15 +00 +c8 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +92 +1e +00 +00 +00 +00 +15 +00 +a0 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +88 +1e +00 +00 +00 +00 +15 +00 +7c +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7f +1e +00 +00 +00 +00 +15 +00 +a0 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +76 +1e +00 +00 +00 +00 +15 +00 +78 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +1e +00 +00 +00 +00 +15 +00 +54 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +63 +1e +00 +00 +00 +00 +15 +00 +78 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5a +1e +00 +00 +00 +00 +15 +00 +50 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +1e +00 +00 +00 +00 +15 +00 +1c +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +47 +1e +00 +00 +00 +00 +15 +00 +50 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3e +1e +00 +00 +00 +00 +15 +00 +18 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +1e +00 +00 +00 +00 +15 +00 +ec +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2b +1e +00 +00 +00 +00 +15 +00 +18 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +1e +00 +00 +00 +00 +15 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +1e +00 +00 +00 +00 +15 +00 +bc +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +1e +00 +00 +00 +00 +15 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +09 +1e +00 +00 +00 +00 +15 +00 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +15 +00 +8c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f8 +1d +00 +00 +00 +00 +15 +00 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f0 +1d +00 +00 +00 +00 +15 +00 +88 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e7 +1d +00 +00 +00 +00 +15 +00 +5c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +df +1d +00 +00 +00 +00 +15 +00 +88 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d7 +1d +00 +00 +00 +00 +15 +00 +58 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ce +1d +00 +00 +00 +00 +15 +00 +3c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c6 +1d +00 +00 +00 +00 +15 +00 +58 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +be +1d +00 +00 +00 +00 +15 +00 +38 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b5 +1d +00 +00 +00 +00 +15 +00 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ad +1d +00 +00 +00 +00 +15 +00 +38 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a5 +1d +00 +00 +00 +00 +15 +00 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9d +1d +00 +00 +00 +00 +15 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +95 +1d +00 +00 +00 +00 +15 +00 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8c +1d +00 +00 +00 +00 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +82 +1d +00 +00 +00 +00 +13 +00 +04 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +79 +1d +00 +00 +00 +00 +13 +00 +58 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +1d +00 +00 +00 +00 +13 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +66 +1d +00 +00 +00 +00 +13 +00 +d4 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5d +1d +00 +00 +00 +00 +13 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +54 +1d +00 +00 +00 +00 +13 +00 +d0 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4a +1d +00 +00 +00 +00 +13 +00 +a4 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +41 +1d +00 +00 +00 +00 +13 +00 +d0 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +38 +1d +00 +00 +00 +00 +13 +00 +a0 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +1d +00 +00 +00 +00 +13 +00 +74 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +25 +1d +00 +00 +00 +00 +13 +00 +a0 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1c +1d +00 +00 +00 +00 +13 +00 +70 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +1d +00 +00 +00 +00 +13 +00 +3c +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +09 +1d +00 +00 +00 +00 +13 +00 +70 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1d +00 +00 +00 +00 +13 +00 +38 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f6 +1c +00 +00 +00 +00 +13 +00 +04 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ed +1c +00 +00 +00 +00 +13 +00 +38 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e4 +1c +00 +00 +00 +00 +13 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +da +1c +00 +00 +00 +00 +13 +00 +dc +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d1 +1c +00 +00 +00 +00 +13 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c8 +1c +00 +00 +00 +00 +13 +00 +d8 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +be +1c +00 +00 +00 +00 +13 +00 +bc +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b5 +1c +00 +00 +00 +00 +13 +00 +d8 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ac +1c +00 +00 +00 +00 +13 +00 +b8 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a2 +1c +00 +00 +00 +00 +13 +00 +a4 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +99 +1c +00 +00 +00 +00 +13 +00 +b8 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +1c +00 +00 +00 +00 +13 +00 +a0 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +86 +1c +00 +00 +00 +00 +13 +00 +84 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7d +1c +00 +00 +00 +00 +13 +00 +a0 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +74 +1c +00 +00 +00 +00 +13 +00 +80 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6a +1c +00 +00 +00 +00 +13 +00 +6c +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +61 +1c +00 +00 +00 +00 +13 +00 +80 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +58 +1c +00 +00 +00 +00 +13 +00 +68 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4e +1c +00 +00 +00 +00 +13 +00 +54 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +45 +1c +00 +00 +00 +00 +13 +00 +68 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3c +1c +00 +00 +00 +00 +13 +00 +50 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +32 +1c +00 +00 +00 +00 +13 +00 +2c +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +29 +1c +00 +00 +00 +00 +13 +00 +50 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +1c +00 +00 +00 +00 +13 +00 +28 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +16 +1c +00 +00 +00 +00 +13 +00 +f4 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0d +1c +00 +00 +00 +00 +13 +00 +28 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +1c +00 +00 +00 +00 +13 +00 +f0 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fa +1b +00 +00 +00 +00 +13 +00 +cc +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f1 +1b +00 +00 +00 +00 +13 +00 +f0 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e8 +1b +00 +00 +00 +00 +13 +00 +c8 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +de +1b +00 +00 +00 +00 +13 +00 +a4 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d5 +1b +00 +00 +00 +00 +13 +00 +c8 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cc +1b +00 +00 +00 +00 +13 +00 +a0 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c2 +1b +00 +00 +00 +00 +13 +00 +7c +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b9 +1b +00 +00 +00 +00 +13 +00 +a0 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +1b +00 +00 +00 +00 +13 +00 +78 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a6 +1b +00 +00 +00 +00 +13 +00 +54 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9d +1b +00 +00 +00 +00 +13 +00 +78 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +94 +1b +00 +00 +00 +00 +13 +00 +50 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8a +1b +00 +00 +00 +00 +13 +00 +1c +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +81 +1b +00 +00 +00 +00 +13 +00 +50 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +1b +00 +00 +00 +00 +13 +00 +18 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6e +1b +00 +00 +00 +00 +13 +00 +ec +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +65 +1b +00 +00 +00 +00 +13 +00 +18 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5c +1b +00 +00 +00 +00 +13 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +53 +1b +00 +00 +00 +00 +13 +00 +bc +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4b +1b +00 +00 +00 +00 +13 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +43 +1b +00 +00 +00 +00 +13 +00 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3a +1b +00 +00 +00 +00 +13 +00 +8c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +32 +1b +00 +00 +00 +00 +13 +00 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2a +1b +00 +00 +00 +00 +13 +00 +88 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +1b +00 +00 +00 +00 +13 +00 +5c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +1b +00 +00 +00 +00 +13 +00 +88 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +1b +00 +00 +00 +00 +13 +00 +58 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +1b +00 +00 +00 +00 +13 +00 +3c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1b +00 +00 +00 +00 +13 +00 +58 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f8 +1a +00 +00 +00 +00 +13 +00 +38 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ef +1a +00 +00 +00 +00 +13 +00 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e7 +1a +00 +00 +00 +00 +13 +00 +38 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +df +1a +00 +00 +00 +00 +13 +00 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d7 +1a +00 +00 +00 +00 +13 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cf +1a +00 +00 +00 +00 +13 +00 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c6 +1a +00 +00 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bf +1a +00 +00 +00 +00 +04 +00 +1b +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b8 +1a +00 +00 +00 +00 +04 +00 +1b +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b1 +1a +00 +00 +00 +00 +04 +00 +1b +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +aa +1a +00 +00 +00 +00 +04 +00 +1b +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a2 +1a +00 +00 +00 +00 +04 +00 +11 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9a +1a +00 +00 +00 +00 +04 +00 +0c +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +92 +1a +00 +00 +00 +00 +04 +00 +07 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8a +1a +00 +00 +00 +00 +04 +00 +bf +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +82 +1a +00 +00 +00 +00 +04 +00 +ba +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7a +1a +00 +00 +00 +00 +04 +00 +90 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +74 +1a +00 +00 +00 +00 +04 +00 +8b +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +1a +00 +00 +00 +00 +04 +00 +86 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +64 +1a +00 +00 +00 +00 +04 +00 +80 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5e +1a +00 +00 +00 +00 +04 +00 +07 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +57 +1a +00 +00 +00 +00 +04 +00 +77 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +1a +00 +00 +00 +00 +04 +00 +77 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +49 +1a +00 +00 +00 +00 +04 +00 +77 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +41 +1a +00 +00 +00 +00 +04 +00 +77 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +39 +1a +00 +00 +00 +00 +04 +00 +74 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +31 +1a +00 +00 +00 +00 +04 +00 +72 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +29 +1a +00 +00 +00 +00 +04 +00 +70 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +1a +00 +00 +00 +00 +04 +00 +6e +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +1a +00 +00 +00 +00 +04 +00 +6c +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +1a +00 +00 +00 +00 +04 +00 +6b +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +09 +1a +00 +00 +00 +00 +04 +00 +6a +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +1a +00 +00 +00 +00 +04 +00 +28 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fa +19 +00 +00 +00 +00 +04 +00 +fc +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f3 +19 +00 +00 +00 +00 +04 +00 +f8 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ec +19 +00 +00 +00 +00 +04 +00 +f4 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e5 +19 +00 +00 +00 +00 +04 +00 +ef +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +de +19 +00 +00 +00 +00 +04 +00 +ec +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d7 +19 +00 +00 +00 +00 +04 +00 +d6 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +19 +00 +00 +00 +00 +04 +00 +d6 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c8 +19 +00 +00 +00 +00 +04 +00 +d6 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +19 +00 +00 +00 +00 +04 +00 +c0 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ba +19 +00 +00 +00 +00 +04 +00 +77 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b2 +19 +00 +00 +00 +00 +04 +00 +73 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +aa +19 +00 +00 +00 +00 +04 +00 +70 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a2 +19 +00 +00 +00 +00 +04 +00 +6c +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9c +19 +00 +00 +00 +00 +04 +00 +50 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +94 +19 +00 +00 +00 +00 +04 +00 +3e +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8c +19 +00 +00 +00 +00 +04 +00 +3b +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +19 +00 +00 +00 +00 +04 +00 +37 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7e +19 +00 +00 +00 +00 +04 +00 +2b +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +19 +00 +00 +00 +00 +04 +00 +c0 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +19 +00 +00 +00 +00 +04 +00 +0b +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5b +19 +00 +00 +00 +00 +04 +00 +fd +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +54 +19 +00 +00 +00 +00 +04 +00 +fd +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4d +19 +00 +00 +00 +00 +04 +00 +fd +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +47 +19 +00 +00 +00 +00 +04 +00 +16 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +19 +00 +00 +00 +00 +04 +00 +df +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +39 +19 +00 +00 +00 +00 +04 +00 +db +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +33 +19 +00 +00 +00 +00 +04 +00 +d8 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2d +19 +00 +00 +00 +00 +04 +00 +d6 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +19 +00 +00 +00 +00 +04 +00 +bf +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0b +19 +00 +00 +00 +00 +04 +00 +bf +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +05 +19 +00 +00 +00 +00 +04 +00 +bf +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f5 +18 +00 +00 +00 +00 +04 +00 +b5 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ed +18 +00 +00 +00 +00 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e7 +18 +00 +00 +00 +00 +04 +00 +a9 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +df +18 +00 +00 +00 +00 +04 +00 +a9 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d9 +18 +00 +00 +00 +00 +04 +00 +6e +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d3 +18 +00 +00 +00 +00 +04 +00 +6e +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cd +18 +00 +00 +00 +00 +04 +00 +6e +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c7 +18 +00 +00 +00 +00 +04 +00 +6e +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bf +18 +00 +00 +00 +00 +04 +00 +6e +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b9 +18 +00 +00 +00 +00 +04 +00 +fd +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b1 +18 +00 +00 +00 +00 +04 +00 +57 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a3 +18 +00 +00 +00 +00 +12 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9b +18 +00 +00 +00 +00 +04 +00 +2b +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +93 +18 +00 +00 +00 +00 +04 +00 +23 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8b +18 +00 +00 +00 +00 +04 +00 +22 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +83 +18 +00 +00 +00 +00 +04 +00 +20 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7b +18 +00 +00 +00 +00 +04 +00 +1e +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +73 +18 +00 +00 +00 +00 +04 +00 +1c +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6b +18 +00 +00 +00 +00 +04 +00 +1a +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +63 +18 +00 +00 +00 +00 +04 +00 +19 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5b +18 +00 +00 +00 +00 +04 +00 +16 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +55 +18 +00 +00 +00 +00 +04 +00 +23 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3e +18 +00 +00 +00 +00 +04 +00 +01 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +36 +18 +00 +00 +00 +00 +04 +00 +01 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +18 +00 +00 +00 +00 +04 +00 +fa +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +26 +18 +00 +00 +00 +00 +04 +00 +fa +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +18 +00 +00 +00 +00 +04 +00 +f9 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +16 +18 +00 +00 +00 +00 +04 +00 +f9 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0e +18 +00 +00 +00 +00 +04 +00 +f8 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +18 +00 +00 +00 +00 +04 +00 +f8 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fe +17 +00 +00 +00 +00 +04 +00 +f6 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f6 +17 +00 +00 +00 +00 +04 +00 +f6 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ee +17 +00 +00 +00 +00 +04 +00 +f4 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e6 +17 +00 +00 +00 +00 +04 +00 +f4 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +de +17 +00 +00 +00 +00 +04 +00 +f2 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d6 +17 +00 +00 +00 +00 +04 +00 +f2 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ce +17 +00 +00 +00 +00 +04 +00 +f0 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c7 +17 +00 +00 +00 +00 +04 +00 +f0 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c1 +17 +00 +00 +00 +00 +0c +00 +f8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bb +17 +00 +00 +00 +00 +0c +00 +eb +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b5 +17 +00 +00 +00 +00 +11 +00 +58 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +af +17 +00 +00 +00 +00 +11 +00 +20 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a9 +17 +00 +00 +00 +00 +11 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a3 +17 +00 +00 +00 +00 +0c +00 +e8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9d +17 +00 +00 +00 +00 +0c +00 +e7 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +97 +17 +00 +00 +00 +00 +0c +00 +e5 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +91 +17 +00 +00 +00 +00 +0c +00 +d2 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8a +17 +00 +00 +00 +00 +04 +00 +f0 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +82 +17 +00 +00 +00 +00 +04 +00 +f0 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7a +17 +00 +00 +00 +00 +04 +00 +ed +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +72 +17 +00 +00 +00 +00 +04 +00 +e9 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6a +17 +00 +00 +00 +00 +04 +00 +e4 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +62 +17 +00 +00 +00 +00 +04 +00 +df +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5a +17 +00 +00 +00 +00 +04 +00 +bf +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +41 +17 +00 +00 +00 +00 +04 +00 +b3 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +39 +17 +00 +00 +00 +00 +04 +00 +af +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +29 +17 +00 +00 +00 +00 +04 +00 +aa +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +17 +00 +00 +00 +00 +04 +00 +a4 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +17 +00 +00 +00 +00 +04 +00 +9f +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +17 +00 +00 +00 +00 +04 +00 +96 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +09 +17 +00 +00 +00 +00 +04 +00 +87 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +17 +00 +00 +00 +00 +04 +00 +86 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f9 +16 +00 +00 +00 +00 +04 +00 +82 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f3 +16 +00 +00 +00 +00 +04 +00 +b0 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +16 +00 +00 +00 +00 +04 +00 +70 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e5 +16 +00 +00 +00 +00 +04 +00 +87 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +dd +16 +00 +00 +00 +00 +04 +00 +66 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d5 +16 +00 +00 +00 +00 +04 +00 +66 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cd +16 +00 +00 +00 +00 +04 +00 +62 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c5 +16 +00 +00 +00 +00 +04 +00 +5a +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bd +16 +00 +00 +00 +00 +04 +00 +55 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b5 +16 +00 +00 +00 +00 +04 +00 +50 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ae +16 +00 +00 +00 +00 +04 +00 +50 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a8 +16 +00 +00 +00 +00 +0c +00 +ca +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a2 +16 +00 +00 +00 +00 +0c +00 +c1 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9b +16 +00 +00 +00 +00 +04 +00 +42 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +93 +16 +00 +00 +00 +00 +04 +00 +24 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8b +16 +00 +00 +00 +00 +04 +00 +14 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +83 +16 +00 +00 +00 +00 +04 +00 +13 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7b +16 +00 +00 +00 +00 +04 +00 +0f +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +73 +16 +00 +00 +00 +00 +04 +00 +07 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6b +16 +00 +00 +00 +00 +04 +00 +02 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +63 +16 +00 +00 +00 +00 +04 +00 +fe +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5d +16 +00 +00 +00 +00 +04 +00 +e1 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +57 +16 +00 +00 +00 +00 +04 +00 +32 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +51 +16 +00 +00 +00 +00 +04 +00 +b5 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +49 +16 +00 +00 +00 +00 +04 +00 +b5 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +43 +16 +00 +00 +00 +00 +04 +00 +24 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3b +16 +00 +00 +00 +00 +04 +00 +99 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +35 +16 +00 +00 +00 +00 +04 +00 +96 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2f +16 +00 +00 +00 +00 +04 +00 +fe +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +27 +16 +00 +00 +00 +00 +04 +00 +8b +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +16 +00 +00 +00 +00 +04 +00 +14 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +16 +00 +00 +00 +00 +04 +00 +83 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +16 +00 +00 +00 +00 +04 +00 +76 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +09 +16 +00 +00 +00 +00 +04 +00 +76 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +16 +00 +00 +00 +00 +04 +00 +72 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f9 +15 +00 +00 +00 +00 +04 +00 +6a +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f1 +15 +00 +00 +00 +00 +04 +00 +65 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e9 +15 +00 +00 +00 +00 +04 +00 +60 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e2 +15 +00 +00 +00 +00 +04 +00 +60 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +db +15 +00 +00 +00 +00 +04 +00 +51 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d3 +15 +00 +00 +00 +00 +04 +00 +4c +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cb +15 +00 +00 +00 +00 +04 +00 +2d +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c3 +15 +00 +00 +00 +00 +04 +00 +1c +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bd +15 +00 +00 +00 +00 +04 +00 +f4 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b5 +15 +00 +00 +00 +00 +04 +00 +f4 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ad +15 +00 +00 +00 +00 +04 +00 +eb +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a5 +15 +00 +00 +00 +00 +04 +00 +e2 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9f +15 +00 +00 +00 +00 +04 +00 +2d +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +97 +15 +00 +00 +00 +00 +04 +00 +cd +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8f +15 +00 +00 +00 +00 +04 +00 +c2 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +87 +15 +00 +00 +00 +00 +04 +00 +c1 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7f +15 +00 +00 +00 +00 +04 +00 +bd +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +77 +15 +00 +00 +00 +00 +04 +00 +b8 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6f +15 +00 +00 +00 +00 +04 +00 +b3 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +67 +15 +00 +00 +00 +00 +04 +00 +ae +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +15 +00 +00 +00 +00 +04 +00 +a9 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +59 +15 +00 +00 +00 +00 +04 +00 +a5 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +51 +15 +00 +00 +00 +00 +04 +00 +a5 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4b +15 +00 +00 +00 +00 +04 +00 +a1 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +43 +15 +00 +00 +00 +00 +04 +00 +a1 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3d +15 +00 +00 +00 +00 +04 +00 +f2 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +35 +15 +00 +00 +00 +00 +04 +00 +9f +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2f +15 +00 +00 +00 +00 +04 +00 +97 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +27 +15 +00 +00 +00 +00 +04 +00 +97 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +15 +00 +00 +00 +00 +04 +00 +8b +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +15 +00 +00 +00 +00 +04 +00 +8b +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +13 +15 +00 +00 +00 +00 +04 +00 +d0 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0b +15 +00 +00 +00 +00 +04 +00 +70 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +05 +15 +00 +00 +00 +00 +04 +00 +6d +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +14 +00 +00 +00 +00 +04 +00 +20 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f7 +14 +00 +00 +00 +00 +04 +00 +63 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f1 +14 +00 +00 +00 +00 +04 +00 +c2 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e9 +14 +00 +00 +00 +00 +04 +00 +5f +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e1 +14 +00 +00 +00 +00 +04 +00 +52 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d9 +14 +00 +00 +00 +00 +04 +00 +52 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d1 +14 +00 +00 +00 +00 +04 +00 +4e +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c9 +14 +00 +00 +00 +00 +04 +00 +47 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c1 +14 +00 +00 +00 +00 +04 +00 +42 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b9 +14 +00 +00 +00 +00 +04 +00 +3a +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b1 +14 +00 +00 +00 +00 +04 +00 +35 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a9 +14 +00 +00 +00 +00 +04 +00 +30 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a2 +14 +00 +00 +00 +00 +04 +00 +30 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9b +14 +00 +00 +00 +00 +04 +00 +2d +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +93 +14 +00 +00 +00 +00 +04 +00 +1e +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8d +14 +00 +00 +00 +00 +04 +00 +04 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +87 +14 +00 +00 +00 +00 +04 +00 +17 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7f +14 +00 +00 +00 +00 +04 +00 +fe +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +77 +14 +00 +00 +00 +00 +04 +00 +ea +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6f +14 +00 +00 +00 +00 +04 +00 +e5 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +67 +14 +00 +00 +00 +00 +04 +00 +d0 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +14 +00 +00 +00 +00 +04 +00 +98 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +14 +00 +00 +00 +00 +04 +00 +83 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +14 +00 +00 +00 +00 +04 +00 +28 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +14 +00 +00 +00 +00 +04 +00 +25 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +14 +00 +00 +00 +00 +04 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1a +14 +00 +00 +00 +00 +04 +00 +ff +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +14 +00 +00 +00 +00 +04 +00 +fb +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0a +14 +00 +00 +00 +00 +04 +00 +f6 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +14 +00 +00 +00 +00 +04 +00 +f1 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fa +13 +00 +00 +00 +00 +04 +00 +ec +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f2 +13 +00 +00 +00 +00 +04 +00 +e7 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ea +13 +00 +00 +00 +00 +04 +00 +e2 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e4 +13 +00 +00 +00 +00 +04 +00 +d4 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +dc +13 +00 +00 +00 +00 +04 +00 +bf +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d6 +13 +00 +00 +00 +00 +04 +00 +83 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ce +13 +00 +00 +00 +00 +04 +00 +b6 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9b +13 +00 +00 +00 +00 +04 +00 +8f +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +95 +13 +00 +00 +00 +00 +04 +00 +f0 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8f +13 +00 +00 +00 +00 +04 +00 +84 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +89 +13 +00 +00 +00 +00 +04 +00 +36 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +81 +13 +00 +00 +00 +00 +04 +00 +76 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +79 +13 +00 +00 +00 +00 +04 +00 +51 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +73 +13 +00 +00 +00 +00 +04 +00 +4a +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6d +13 +00 +00 +00 +00 +04 +00 +1a +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +67 +13 +00 +00 +00 +00 +04 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +61 +13 +00 +00 +00 +00 +04 +00 +1d +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5b +13 +00 +00 +00 +00 +04 +00 +98 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +55 +13 +00 +00 +00 +00 +04 +00 +11 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4d +13 +00 +00 +00 +00 +04 +00 +11 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +47 +13 +00 +00 +00 +00 +04 +00 +d0 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +41 +13 +00 +00 +00 +00 +04 +00 +fd +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +39 +13 +00 +00 +00 +00 +04 +00 +fd +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +33 +13 +00 +00 +00 +00 +04 +00 +20 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2b +13 +00 +00 +00 +00 +04 +00 +f7 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +23 +13 +00 +00 +00 +00 +04 +00 +db +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1b +13 +00 +00 +00 +00 +04 +00 +db +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +13 +13 +00 +00 +00 +00 +04 +00 +d7 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0b +13 +00 +00 +00 +00 +04 +00 +d4 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +13 +00 +00 +00 +00 +04 +00 +cf +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fb +12 +00 +00 +00 +00 +04 +00 +c7 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f3 +12 +00 +00 +00 +00 +04 +00 +c2 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +12 +00 +00 +00 +00 +04 +00 +ba +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e3 +12 +00 +00 +00 +00 +04 +00 +b5 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +db +12 +00 +00 +00 +00 +04 +00 +b0 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d4 +12 +00 +00 +00 +00 +04 +00 +b0 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ce +12 +00 +00 +00 +00 +11 +00 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c8 +12 +00 +00 +00 +00 +0c +00 +a6 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c2 +12 +00 +00 +00 +00 +11 +00 +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bc +12 +00 +00 +00 +00 +0c +00 +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b5 +12 +00 +00 +00 +00 +04 +00 +a8 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ad +12 +00 +00 +00 +00 +04 +00 +a3 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a5 +12 +00 +00 +00 +00 +04 +00 +9e +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9d +12 +00 +00 +00 +00 +04 +00 +98 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +97 +12 +00 +00 +00 +00 +04 +00 +91 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8f +12 +00 +00 +00 +00 +04 +00 +91 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +87 +12 +00 +00 +00 +00 +04 +00 +8c +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +73 +12 +00 +00 +00 +00 +04 +00 +55 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6b +12 +00 +00 +00 +00 +04 +00 +55 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +63 +12 +00 +00 +00 +00 +04 +00 +4d +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5b +12 +00 +00 +00 +00 +04 +00 +4a +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +55 +12 +00 +00 +00 +00 +04 +00 +91 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4f +12 +00 +00 +00 +00 +04 +00 +45 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +47 +12 +00 +00 +00 +00 +04 +00 +45 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2b +12 +00 +00 +00 +00 +04 +00 +30 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +23 +12 +00 +00 +00 +00 +04 +00 +2a +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1b +12 +00 +00 +00 +00 +04 +00 +25 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +15 +12 +00 +00 +00 +00 +04 +00 +20 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0d +12 +00 +00 +00 +00 +04 +00 +1a +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +05 +12 +00 +00 +00 +00 +04 +00 +19 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fd +11 +00 +00 +00 +00 +04 +00 +15 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f5 +11 +00 +00 +00 +00 +04 +00 +10 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ed +11 +00 +00 +00 +00 +04 +00 +0b +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e5 +11 +00 +00 +00 +00 +04 +00 +01 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +dd +11 +00 +00 +00 +00 +04 +00 +fc +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d5 +11 +00 +00 +00 +00 +04 +00 +f7 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cd +11 +00 +00 +00 +00 +04 +00 +ee +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c5 +11 +00 +00 +00 +00 +04 +00 +e6 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bf +11 +00 +00 +00 +00 +04 +00 +55 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b7 +11 +00 +00 +00 +00 +04 +00 +d6 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b1 +11 +00 +00 +00 +00 +04 +00 +e6 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ab +11 +00 +00 +00 +00 +04 +00 +c9 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a5 +11 +00 +00 +00 +00 +04 +00 +20 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9f +11 +00 +00 +00 +00 +04 +00 +f7 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +97 +11 +00 +00 +00 +00 +04 +00 +c2 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +91 +11 +00 +00 +00 +00 +04 +00 +b9 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +89 +11 +00 +00 +00 +00 +04 +00 +b9 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +81 +11 +00 +00 +00 +00 +04 +00 +a2 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +79 +11 +00 +00 +00 +00 +04 +00 +9f +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +71 +11 +00 +00 +00 +00 +04 +00 +98 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6b +11 +00 +00 +00 +00 +04 +00 +45 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +63 +11 +00 +00 +00 +00 +04 +00 +88 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5b +11 +00 +00 +00 +00 +04 +00 +88 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +53 +11 +00 +00 +00 +00 +04 +00 +84 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4b +11 +00 +00 +00 +00 +04 +00 +7f +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +43 +11 +00 +00 +00 +00 +04 +00 +77 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3b +11 +00 +00 +00 +00 +04 +00 +72 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +33 +11 +00 +00 +00 +00 +04 +00 +6a +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2b +11 +00 +00 +00 +00 +04 +00 +65 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +23 +11 +00 +00 +00 +00 +04 +00 +60 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1c +11 +00 +00 +00 +00 +04 +00 +60 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +15 +11 +00 +00 +00 +00 +04 +00 +55 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +11 +00 +00 +00 +00 +04 +00 +54 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +11 +00 +00 +00 +00 +04 +00 +54 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +11 +00 +00 +00 +00 +04 +00 +51 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f9 +10 +00 +00 +00 +00 +04 +00 +51 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f3 +10 +00 +00 +00 +00 +04 +00 +50 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +10 +00 +00 +00 +00 +04 +00 +4c +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e5 +10 +00 +00 +00 +00 +04 +00 +39 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +dd +10 +00 +00 +00 +00 +04 +00 +39 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d5 +10 +00 +00 +00 +00 +04 +00 +38 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cd +10 +00 +00 +00 +00 +04 +00 +2e +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c7 +10 +00 +00 +00 +00 +04 +00 +2d +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c1 +10 +00 +00 +00 +00 +04 +00 +2d +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b9 +10 +00 +00 +00 +00 +04 +00 +2d +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b3 +10 +00 +00 +00 +00 +04 +00 +39 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ad +10 +00 +00 +00 +00 +04 +00 +0c +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +96 +10 +00 +00 +00 +00 +04 +00 +fb +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8e +10 +00 +00 +00 +00 +04 +00 +f0 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +88 +10 +00 +00 +00 +00 +04 +00 +ef +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +10 +00 +00 +00 +00 +04 +00 +e8 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +10 +00 +00 +00 +00 +04 +00 +e7 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +72 +10 +00 +00 +00 +00 +04 +00 +e6 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6a +10 +00 +00 +00 +00 +04 +00 +e6 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +64 +10 +00 +00 +00 +00 +04 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5c +10 +00 +00 +00 +00 +04 +00 +cb +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +56 +10 +00 +00 +00 +00 +04 +00 +e8 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4e +10 +00 +00 +00 +00 +04 +00 +c1 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +46 +10 +00 +00 +00 +00 +04 +00 +c1 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3e +10 +00 +00 +00 +00 +04 +00 +c0 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +37 +10 +00 +00 +00 +00 +04 +00 +c0 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +10 +00 +00 +00 +00 +04 +00 +bb +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +10 +00 +00 +00 +00 +04 +00 +b6 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +10 +00 +00 +00 +00 +04 +00 +ab +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +10 +00 +00 +00 +00 +04 +00 +a8 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +10 +00 +00 +00 +00 +04 +00 +a7 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +10 +00 +00 +00 +00 +04 +00 +9b +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +04 +00 +9a +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f8 +0f +00 +00 +00 +00 +04 +00 +8e +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f2 +0f +00 +00 +00 +00 +04 +00 +a8 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ec +0f +00 +00 +00 +00 +04 +00 +a0 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e4 +0f +00 +00 +00 +00 +04 +00 +74 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +dc +0f +00 +00 +00 +00 +04 +00 +74 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d4 +0f +00 +00 +00 +00 +04 +00 +70 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cd +0f +00 +00 +00 +00 +04 +00 +70 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c7 +0f +00 +00 +00 +00 +0c +00 +7c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +0f +00 +00 +00 +00 +04 +00 +6b +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a9 +0f +00 +00 +00 +00 +04 +00 +66 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a3 +0f +00 +00 +00 +00 +04 +00 +63 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9b +0f +00 +00 +00 +00 +04 +00 +50 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +94 +0f +00 +00 +00 +00 +04 +00 +50 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8d +0f +00 +00 +00 +00 +04 +00 +4b +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +85 +0f +00 +00 +00 +00 +04 +00 +4a +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6b +0f +00 +00 +00 +00 +04 +00 +36 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +63 +0f +00 +00 +00 +00 +04 +00 +33 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5b +0f +00 +00 +00 +00 +04 +00 +30 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +55 +0f +00 +00 +00 +00 +04 +00 +2a +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4f +0f +00 +00 +00 +00 +04 +00 +33 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +47 +0f +00 +00 +00 +00 +04 +00 +24 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3f +0f +00 +00 +00 +00 +04 +00 +24 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +37 +0f +00 +00 +00 +00 +04 +00 +20 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +0f +00 +00 +00 +00 +04 +00 +20 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +29 +0f +00 +00 +00 +00 +04 +00 +16 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +23 +0f +00 +00 +00 +00 +04 +00 +14 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1d +0f +00 +00 +00 +00 +04 +00 +12 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +15 +0f +00 +00 +00 +00 +04 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0e +0f +00 +00 +00 +00 +04 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +0f +00 +00 +00 +00 +04 +00 +f7 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +0f +00 +00 +00 +00 +04 +00 +f4 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f9 +0e +00 +00 +00 +00 +04 +00 +e0 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f2 +0e +00 +00 +00 +00 +04 +00 +e0 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0e +00 +00 +00 +00 +04 +00 +db +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e3 +0e +00 +00 +00 +00 +04 +00 +da +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +db +0e +00 +00 +00 +00 +04 +00 +c3 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d3 +0e +00 +00 +00 +00 +04 +00 +c2 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cb +0e +00 +00 +00 +00 +04 +00 +ba +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c5 +0e +00 +00 +00 +00 +04 +00 +c3 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bd +0e +00 +00 +00 +00 +04 +00 +b1 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b5 +0e +00 +00 +00 +00 +04 +00 +b1 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ad +0e +00 +00 +00 +00 +04 +00 +b0 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a6 +0e +00 +00 +00 +00 +04 +00 +b0 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9f +0e +00 +00 +00 +00 +04 +00 +a2 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +97 +0e +00 +00 +00 +00 +04 +00 +91 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8f +0e +00 +00 +00 +00 +04 +00 +54 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +87 +0e +00 +00 +00 +00 +04 +00 +45 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7f +0e +00 +00 +00 +00 +04 +00 +3b +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +77 +0e +00 +00 +00 +00 +04 +00 +2c +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6f +0e +00 +00 +00 +00 +04 +00 +08 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +67 +0e +00 +00 +00 +00 +04 +00 +fc +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +0e +00 +00 +00 +00 +04 +00 +d9 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +57 +0e +00 +00 +00 +00 +04 +00 +cd +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4f +0e +00 +00 +00 +00 +04 +00 +a9 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +47 +0e +00 +00 +00 +00 +04 +00 +9d +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +41 +0e +00 +00 +00 +00 +04 +00 +59 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +39 +0e +00 +00 +00 +00 +04 +00 +83 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +31 +0e +00 +00 +00 +00 +04 +00 +77 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +0e +00 +00 +00 +00 +04 +00 +4a +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +0e +00 +00 +00 +00 +04 +00 +47 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +0e +00 +00 +00 +00 +04 +00 +31 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fe +0d +00 +00 +00 +00 +04 +00 +91 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f6 +0d +00 +00 +00 +00 +04 +00 +17 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +df +0d +00 +00 +00 +00 +04 +00 +03 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d7 +0d +00 +00 +00 +00 +04 +00 +f1 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cf +0d +00 +00 +00 +00 +04 +00 +ec +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b7 +0d +00 +00 +00 +00 +04 +00 +da +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +af +0d +00 +00 +00 +00 +04 +00 +d5 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +96 +0d +00 +00 +00 +00 +04 +00 +c3 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8e +0d +00 +00 +00 +00 +04 +00 +be +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +0d +00 +00 +00 +00 +04 +00 +ac +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +74 +0d +00 +00 +00 +00 +04 +00 +a7 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5e +0d +00 +00 +00 +00 +04 +00 +90 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +56 +0d +00 +00 +00 +00 +04 +00 +8b +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +0d +00 +00 +00 +00 +04 +00 +74 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +38 +0d +00 +00 +00 +00 +04 +00 +6f +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1d +0d +00 +00 +00 +00 +04 +00 +5d +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +0d +00 +00 +00 +00 +04 +00 +75 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +0d +00 +00 +00 +00 +04 +00 +46 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +0d +00 +00 +00 +00 +04 +00 +3a +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +0c +00 +00 +00 +00 +04 +00 +35 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f7 +0c +00 +00 +00 +00 +04 +00 +1d +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ef +0c +00 +00 +00 +00 +04 +00 +18 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e7 +0c +00 +00 +00 +00 +04 +00 +09 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +df +0c +00 +00 +00 +00 +04 +00 +ff +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d7 +0c +00 +00 +00 +00 +04 +00 +f0 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c3 +0c +00 +00 +00 +00 +04 +00 +e6 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bb +0c +00 +00 +00 +00 +04 +00 +d7 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a3 +0c +00 +00 +00 +00 +04 +00 +c5 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9b +0c +00 +00 +00 +00 +04 +00 +b9 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +93 +0c +00 +00 +00 +00 +04 +00 +95 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8b +0c +00 +00 +00 +00 +04 +00 +89 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6d +0c +00 +00 +00 +00 +04 +00 +68 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +65 +0c +00 +00 +00 +00 +04 +00 +5c +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +51 +0c +00 +00 +00 +00 +04 +00 +4b +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +36 +0c +00 +00 +00 +00 +04 +00 +41 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +0c +00 +00 +00 +00 +04 +00 +35 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +26 +0c +00 +00 +00 +00 +04 +00 +30 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +0c +00 +00 +00 +00 +04 +00 +17 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +16 +0c +00 +00 +00 +00 +04 +00 +12 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fd +0b +00 +00 +00 +00 +04 +00 +f9 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e6 +0b +00 +00 +00 +00 +04 +00 +b5 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +de +0b +00 +00 +00 +00 +04 +00 +ab +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d6 +0b +00 +00 +00 +00 +04 +00 +a8 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ce +0b +00 +00 +00 +00 +04 +00 +a0 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c8 +0b +00 +00 +00 +00 +04 +00 +d0 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +0b +00 +00 +00 +00 +04 +00 +80 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b8 +0b +00 +00 +00 +00 +04 +00 +7f +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +0b +00 +00 +00 +00 +04 +00 +7b +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a8 +0b +00 +00 +00 +00 +04 +00 +76 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +0b +00 +00 +00 +00 +04 +00 +71 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +98 +0b +00 +00 +00 +00 +04 +00 +6c +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +0b +00 +00 +00 +00 +04 +00 +67 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +88 +0b +00 +00 +00 +00 +04 +00 +62 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +82 +0b +00 +00 +00 +00 +04 +00 +5d +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +0b +00 +00 +00 +00 +04 +00 +47 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +76 +0b +00 +00 +00 +00 +04 +00 +e4 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +0b +00 +00 +00 +00 +04 +00 +80 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6a +0b +00 +00 +00 +00 +04 +00 +2a +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +62 +0b +00 +00 +00 +00 +04 +00 +2a +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +47 +0b +00 +00 +00 +00 +04 +00 +f0 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +41 +0b +00 +00 +00 +00 +04 +00 +d7 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3b +0b +00 +00 +00 +00 +04 +00 +2c +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +35 +0b +00 +00 +00 +00 +04 +00 +fc +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2f +0b +00 +00 +00 +00 +04 +00 +cd +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +29 +0b +00 +00 +00 +00 +04 +00 +9d +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +23 +0b +00 +00 +00 +00 +04 +00 +b9 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1d +0b +00 +00 +00 +00 +04 +00 +89 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +0b +00 +00 +00 +00 +04 +00 +5c +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +0b +00 +00 +00 +00 +04 +00 +35 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0b +0b +00 +00 +00 +00 +04 +00 +3a +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +05 +0b +00 +00 +00 +00 +04 +00 +77 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +0a +00 +00 +00 +00 +04 +00 +47 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f9 +0a +00 +00 +00 +00 +04 +00 +17 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f3 +0a +00 +00 +00 +00 +04 +00 +f1 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ed +0a +00 +00 +00 +00 +04 +00 +da +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e7 +0a +00 +00 +00 +00 +04 +00 +c3 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e1 +0a +00 +00 +00 +00 +04 +00 +ac +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +db +0a +00 +00 +00 +00 +04 +00 +45 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d5 +0a +00 +00 +00 +00 +04 +00 +09 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cf +0a +00 +00 +00 +00 +04 +00 +f9 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ca +0a +00 +00 +00 +00 +04 +00 +17 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c5 +0a +00 +00 +00 +00 +04 +00 +5d +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +0a +00 +00 +00 +00 +04 +00 +90 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bb +0a +00 +00 +00 +00 +04 +00 +74 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b6 +0a +00 +00 +00 +00 +04 +00 +1d +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +0a +00 +00 +00 +00 +0d +00 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ab +0a +00 +00 +00 +00 +04 +00 +15 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a5 +0a +00 +00 +00 +00 +04 +00 +b5 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +0a +00 +00 +00 +00 +04 +00 +07 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +98 +0a +00 +00 +00 +00 +04 +00 +e3 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +92 +0a +00 +00 +00 +00 +04 +00 +a0 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8d +0a +00 +00 +00 +00 +04 +00 +e3 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +85 +0a +00 +00 +00 +00 +04 +00 +b3 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +0a +00 +00 +00 +00 +04 +00 +b0 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +0a +00 +00 +00 +00 +04 +00 +b0 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +0a +00 +00 +00 +00 +04 +00 +99 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +68 +0a +00 +00 +00 +00 +04 +00 +96 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +0a +00 +00 +00 +00 +04 +00 +8f +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5a +0a +00 +00 +00 +00 +04 +00 +a8 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +52 +0a +00 +00 +00 +00 +04 +00 +89 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4a +0a +00 +00 +00 +00 +04 +00 +78 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +42 +0a +00 +00 +00 +00 +04 +00 +78 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3a +0a +00 +00 +00 +00 +04 +00 +74 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +32 +0a +00 +00 +00 +00 +04 +00 +6f +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2a +0a +00 +00 +00 +00 +04 +00 +67 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +0a +00 +00 +00 +00 +04 +00 +62 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1a +0a +00 +00 +00 +00 +04 +00 +5a +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +0a +00 +00 +00 +00 +04 +00 +55 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0a +0a +00 +00 +00 +00 +04 +00 +50 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +0a +00 +00 +00 +00 +04 +00 +50 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fd +09 +00 +00 +00 +00 +11 +00 +68 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f7 +09 +00 +00 +00 +00 +0c +00 +7a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f1 +09 +00 +00 +00 +00 +0c +00 +76 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +09 +00 +00 +00 +00 +0c +00 +62 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e5 +09 +00 +00 +00 +00 +0c +00 +5e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +df +09 +00 +00 +00 +00 +0c +00 +4b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d9 +09 +00 +00 +00 +00 +0c +00 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d2 +09 +00 +00 +00 +00 +04 +00 +4e +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ca +09 +00 +00 +00 +00 +04 +00 +4e +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c2 +09 +00 +00 +00 +00 +04 +00 +4b +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ba +09 +00 +00 +00 +00 +04 +00 +38 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b2 +09 +00 +00 +00 +00 +04 +00 +38 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +aa +09 +00 +00 +00 +00 +04 +00 +35 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +97 +09 +00 +00 +00 +00 +04 +00 +2a +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +92 +09 +00 +00 +00 +00 +04 +00 +38 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8a +09 +00 +00 +00 +00 +04 +00 +21 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +82 +09 +00 +00 +00 +00 +04 +00 +21 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7a +09 +00 +00 +00 +00 +04 +00 +20 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +73 +09 +00 +00 +00 +00 +04 +00 +20 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +09 +00 +00 +00 +00 +04 +00 +1b +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +64 +09 +00 +00 +00 +00 +04 +00 +1a +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5c +09 +00 +00 +00 +00 +04 +00 +16 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +54 +09 +00 +00 +00 +00 +04 +00 +11 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4c +09 +00 +00 +00 +00 +04 +00 +ea +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +09 +00 +00 +00 +00 +04 +00 +e9 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3c +09 +00 +00 +00 +00 +04 +00 +e5 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +09 +00 +00 +00 +00 +04 +00 +e0 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2c +09 +00 +00 +00 +00 +04 +00 +c7 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +24 +09 +00 +00 +00 +00 +04 +00 +c6 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1c +09 +00 +00 +00 +00 +04 +00 +c2 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +09 +00 +00 +00 +00 +04 +00 +bd +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +09 +00 +00 +00 +00 +04 +00 +f0 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0a +09 +00 +00 +00 +00 +04 +00 +c7 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +09 +00 +00 +00 +00 +04 +00 +a2 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fa +08 +00 +00 +00 +00 +04 +00 +96 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f2 +08 +00 +00 +00 +00 +04 +00 +96 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ea +08 +00 +00 +00 +00 +04 +00 +92 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e2 +08 +00 +00 +00 +00 +04 +00 +8d +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +da +08 +00 +00 +00 +00 +04 +00 +85 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d2 +08 +00 +00 +00 +00 +04 +00 +80 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cb +08 +00 +00 +00 +00 +04 +00 +80 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c4 +08 +00 +00 +00 +00 +04 +00 +71 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bd +08 +00 +00 +00 +00 +04 +00 +70 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b6 +08 +00 +00 +00 +00 +04 +00 +59 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9e +08 +00 +00 +00 +00 +04 +00 +0c +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +97 +08 +00 +00 +00 +00 +04 +00 +0a +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +08 +00 +00 +00 +00 +04 +00 +09 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8b +08 +00 +00 +00 +00 +04 +00 +10 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +08 +00 +00 +00 +00 +04 +00 +04 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +08 +00 +00 +00 +00 +04 +00 +04 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +75 +08 +00 +00 +00 +00 +04 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6e +08 +00 +00 +00 +00 +04 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +67 +08 +00 +00 +00 +00 +04 +00 +ff +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +08 +00 +00 +00 +00 +04 +00 +fe +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +59 +08 +00 +00 +00 +00 +04 +00 +e9 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +52 +08 +00 +00 +00 +00 +04 +00 +e1 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4a +08 +00 +00 +00 +00 +04 +00 +e1 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +43 +08 +00 +00 +00 +00 +04 +00 +e0 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3c +08 +00 +00 +00 +00 +04 +00 +e0 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +35 +08 +00 +00 +00 +00 +04 +00 +d5 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +08 +00 +00 +00 +00 +04 +00 +b9 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +07 +00 +00 +00 +00 +04 +00 +70 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f8 +07 +00 +00 +00 +00 +04 +00 +6c +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f1 +07 +00 +00 +00 +00 +04 +00 +6a +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +dc +07 +00 +00 +00 +00 +04 +00 +66 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d5 +07 +00 +00 +00 +00 +04 +00 +1d +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ce +07 +00 +00 +00 +00 +04 +00 +1c +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c7 +07 +00 +00 +00 +00 +04 +00 +18 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +07 +00 +00 +00 +00 +04 +00 +0e +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b9 +07 +00 +00 +00 +00 +04 +00 +09 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b2 +07 +00 +00 +00 +00 +04 +00 +04 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ab +07 +00 +00 +00 +00 +04 +00 +01 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a4 +07 +00 +00 +00 +00 +04 +00 +fa +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9f +07 +00 +00 +00 +00 +04 +00 +f6 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +98 +07 +00 +00 +00 +00 +04 +00 +f6 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +91 +07 +00 +00 +00 +00 +04 +00 +eb +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8c +07 +00 +00 +00 +00 +04 +00 +e6 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +85 +07 +00 +00 +00 +00 +04 +00 +e6 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7e +07 +00 +00 +00 +00 +04 +00 +db +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +79 +07 +00 +00 +00 +00 +04 +00 +d6 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +74 +07 +00 +00 +00 +00 +04 +00 +c5 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6f +07 +00 +00 +00 +00 +04 +00 +b9 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6a +07 +00 +00 +00 +00 +04 +00 +c2 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +65 +07 +00 +00 +00 +00 +04 +00 +cb +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +07 +00 +00 +00 +00 +04 +00 +01 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5b +07 +00 +00 +00 +00 +0d +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +54 +07 +00 +00 +00 +00 +04 +00 +be +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4f +07 +00 +00 +00 +00 +04 +00 +20 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4a +07 +00 +00 +00 +00 +04 +00 +b5 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +45 +07 +00 +00 +00 +00 +04 +00 +37 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +07 +00 +00 +00 +00 +04 +00 +9b +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3b +07 +00 +00 +00 +00 +04 +00 +50 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +07 +00 +00 +00 +00 +04 +00 +7f +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2d +07 +00 +00 +00 +00 +04 +00 +79 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +26 +07 +00 +00 +00 +00 +04 +00 +73 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1f +07 +00 +00 +00 +00 +04 +00 +6e +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +07 +00 +00 +00 +00 +04 +00 +6e +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +07 +00 +00 +00 +00 +04 +00 +67 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +07 +00 +00 +00 +00 +04 +00 +62 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +06 +00 +00 +00 +00 +04 +00 +5d +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f7 +06 +00 +00 +00 +00 +04 +00 +55 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f0 +06 +00 +00 +00 +00 +04 +00 +50 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e9 +06 +00 +00 +00 +00 +04 +00 +50 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e3 +06 +00 +00 +00 +00 +11 +00 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +dc +06 +00 +00 +00 +00 +04 +00 +46 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d5 +06 +00 +00 +00 +00 +04 +00 +2e +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ce +06 +00 +00 +00 +00 +04 +00 +2d +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c7 +06 +00 +00 +00 +00 +04 +00 +29 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +06 +00 +00 +00 +00 +04 +00 +24 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b9 +06 +00 +00 +00 +00 +04 +00 +20 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b2 +06 +00 +00 +00 +00 +04 +00 +02 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ab +06 +00 +00 +00 +00 +04 +00 +01 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a4 +06 +00 +00 +00 +00 +04 +00 +fd +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9d +06 +00 +00 +00 +00 +04 +00 +f8 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +96 +06 +00 +00 +00 +00 +04 +00 +f4 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +91 +06 +00 +00 +00 +00 +04 +00 +02 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +79 +06 +00 +00 +00 +00 +04 +00 +ae +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +74 +06 +00 +00 +00 +00 +04 +00 +30 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6d +06 +00 +00 +00 +00 +04 +00 +9a +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +66 +06 +00 +00 +00 +00 +04 +00 +94 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +06 +00 +00 +00 +00 +04 +00 +8b +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +57 +06 +00 +00 +00 +00 +04 +00 +8b +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +06 +00 +00 +00 +00 +04 +00 +87 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +06 +00 +00 +00 +00 +04 +00 +82 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +06 +00 +00 +00 +00 +04 +00 +7d +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +38 +06 +00 +00 +00 +00 +04 +00 +75 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +31 +06 +00 +00 +00 +00 +04 +00 +70 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2a +06 +00 +00 +00 +00 +04 +00 +70 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +23 +06 +00 +00 +00 +00 +04 +00 +66 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1c +06 +00 +00 +00 +00 +04 +00 +4e +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +15 +06 +00 +00 +00 +00 +04 +00 +4d +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0e +06 +00 +00 +00 +00 +04 +00 +49 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +06 +00 +00 +00 +00 +04 +00 +44 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +04 +00 +40 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f9 +05 +00 +00 +00 +00 +04 +00 +22 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f2 +05 +00 +00 +00 +00 +04 +00 +21 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +05 +00 +00 +00 +00 +04 +00 +1d +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e4 +05 +00 +00 +00 +00 +04 +00 +18 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +dd +05 +00 +00 +00 +00 +04 +00 +14 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d8 +05 +00 +00 +00 +00 +04 +00 +22 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +05 +00 +00 +00 +00 +04 +00 +ce +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bb +05 +00 +00 +00 +00 +04 +00 +50 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b4 +05 +00 +00 +00 +00 +04 +00 +ba +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ad +05 +00 +00 +00 +00 +04 +00 +b4 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a6 +05 +00 +00 +00 +00 +04 +00 +ab +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9e +05 +00 +00 +00 +00 +04 +00 +ab +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +97 +05 +00 +00 +00 +00 +04 +00 +a7 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8f +05 +00 +00 +00 +00 +04 +00 +a2 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +87 +05 +00 +00 +00 +00 +04 +00 +9d +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7f +05 +00 +00 +00 +00 +04 +00 +95 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +05 +00 +00 +00 +00 +04 +00 +90 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +71 +05 +00 +00 +00 +00 +04 +00 +90 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6a +05 +00 +00 +00 +00 +04 +00 +86 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +63 +05 +00 +00 +00 +00 +04 +00 +6c +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5c +05 +00 +00 +00 +00 +04 +00 +6b +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +55 +05 +00 +00 +00 +00 +04 +00 +67 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4e +05 +00 +00 +00 +00 +04 +00 +62 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +47 +05 +00 +00 +00 +00 +04 +00 +5e +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +05 +00 +00 +00 +00 +04 +00 +3e +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +39 +05 +00 +00 +00 +00 +04 +00 +3d +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +32 +05 +00 +00 +00 +00 +04 +00 +39 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2b +05 +00 +00 +00 +00 +04 +00 +34 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +24 +05 +00 +00 +00 +00 +04 +00 +30 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1f +05 +00 +00 +00 +00 +04 +00 +40 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +05 +00 +00 +00 +00 +04 +00 +ea +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +05 +00 +00 +00 +00 +04 +00 +70 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f4 +04 +00 +00 +00 +00 +04 +00 +da +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ed +04 +00 +00 +00 +00 +04 +00 +d4 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e6 +04 +00 +00 +00 +00 +04 +00 +cb +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +df +04 +00 +00 +00 +00 +04 +00 +cb +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d8 +04 +00 +00 +00 +00 +04 +00 +c7 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d1 +04 +00 +00 +00 +00 +04 +00 +c2 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ca +04 +00 +00 +00 +00 +04 +00 +bd +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c3 +04 +00 +00 +00 +00 +04 +00 +b5 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bc +04 +00 +00 +00 +00 +04 +00 +b0 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b5 +04 +00 +00 +00 +00 +04 +00 +b0 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ae +04 +00 +00 +00 +00 +04 +00 +a6 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +99 +04 +00 +00 +00 +00 +04 +00 +8d +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +92 +04 +00 +00 +00 +00 +04 +00 +8c +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8b +04 +00 +00 +00 +00 +04 +00 +88 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +04 +00 +00 +00 +00 +04 +00 +83 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7d +04 +00 +00 +00 +00 +04 +00 +7e +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +66 +04 +00 +00 +00 +00 +04 +00 +5c +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +04 +00 +00 +00 +00 +04 +00 +5b +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +58 +04 +00 +00 +00 +00 +04 +00 +57 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +51 +04 +00 +00 +00 +00 +04 +00 +52 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4a +04 +00 +00 +00 +00 +04 +00 +4d +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +31 +04 +00 +00 +00 +00 +04 +00 +60 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +25 +04 +00 +00 +00 +00 +04 +00 +16 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +04 +00 +00 +00 +00 +04 +00 +90 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +03 +00 +00 +00 +00 +04 +00 +0c +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f8 +03 +00 +00 +00 +00 +04 +00 +09 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f1 +03 +00 +00 +00 +00 +04 +00 +f4 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +03 +00 +00 +00 +00 +04 +00 +f4 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d8 +03 +00 +00 +00 +00 +04 +00 +eb +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d1 +03 +00 +00 +00 +00 +04 +00 +eb +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cb +03 +00 +00 +00 +00 +04 +00 +e7 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c4 +03 +00 +00 +00 +00 +04 +00 +e2 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bd +03 +00 +00 +00 +00 +04 +00 +da +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b6 +03 +00 +00 +00 +00 +04 +00 +d5 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +03 +00 +00 +00 +00 +04 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a9 +03 +00 +00 +00 +00 +04 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a3 +03 +00 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9c +03 +00 +00 +00 +00 +04 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +96 +03 +00 +00 +00 +00 +04 +00 +cb +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5b +03 +00 +00 +00 +00 +04 +00 +84 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +54 +03 +00 +00 +00 +00 +04 +00 +84 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4e +03 +00 +00 +00 +00 +04 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +47 +03 +00 +00 +00 +00 +04 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +03 +00 +00 +00 +00 +04 +00 +79 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3a +03 +00 +00 +00 +00 +04 +00 +78 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2c +03 +00 +00 +00 +00 +12 +00 +68 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +03 +00 +00 +00 +00 +12 +00 +70 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f9 +02 +00 +00 +00 +00 +12 +00 +78 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f3 +02 +00 +00 +00 +00 +12 +00 +80 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ec +02 +00 +00 +00 +00 +12 +00 +88 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e4 +02 +00 +00 +00 +00 +12 +00 +90 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cd +02 +00 +00 +00 +00 +04 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c6 +02 +00 +00 +00 +00 +04 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +02 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b9 +02 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +01 +00 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b3 +02 +00 +00 +00 +00 +0c +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ad +02 +00 +00 +00 +00 +0c +00 +2a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a7 +02 +00 +00 +00 +00 +0c +00 +27 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a1 +02 +00 +00 +00 +00 +0c +00 +25 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9b +02 +00 +00 +00 +00 +0d +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +95 +02 +00 +00 +00 +00 +0c +00 +22 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8f +02 +00 +00 +00 +00 +0c +00 +1d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +89 +02 +00 +00 +00 +00 +0c +00 +1a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +83 +02 +00 +00 +00 +00 +0c +00 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7e +02 +00 +00 +00 +00 +0c +00 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +79 +02 +00 +00 +00 +00 +0c +00 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +74 +02 +00 +00 +00 +00 +0c +00 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6f +02 +00 +00 +00 +00 +0c +00 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6a +02 +00 +00 +00 +00 +0c +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +65 +02 +00 +00 +00 +00 +0c +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +02 +00 +00 +00 +00 +0c +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5b +02 +00 +00 +00 +00 +0c +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +56 +02 +00 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +51 +02 +00 +00 +00 +00 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +49 +02 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3b +02 +00 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2d +02 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1d +02 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +15 +00 +00 +00 +12 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +79 +00 +00 +00 +00 +00 +00 +00 +d3 +02 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0d +03 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +12 +00 +04 +00 +80 +00 +00 +00 +00 +00 +00 +00 +50 +00 +00 +00 +00 +00 +00 +00 +61 +03 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +03 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +12 +00 +04 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +d6 +00 +00 +00 +00 +00 +00 +00 +de +03 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +04 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +29 +04 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +35 +04 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6d +04 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +04 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +57 +00 +00 +00 +12 +00 +04 +00 +b0 +01 +00 +00 +00 +00 +00 +00 +d6 +00 +00 +00 +00 +00 +00 +00 +fb +04 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +05 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6e +00 +00 +00 +12 +00 +04 +00 +90 +02 +00 +00 +00 +00 +00 +00 +d6 +00 +00 +00 +00 +00 +00 +00 +c5 +05 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +85 +00 +00 +00 +12 +00 +04 +00 +70 +03 +00 +00 +00 +00 +00 +00 +d6 +00 +00 +00 +00 +00 +00 +00 +7e +06 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9c +00 +00 +00 +12 +00 +04 +00 +50 +04 +00 +00 +00 +00 +00 +00 +85 +01 +00 +00 +00 +00 +00 +00 +e1 +07 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +08 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +08 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +be +00 +00 +00 +12 +00 +04 +00 +e0 +05 +00 +00 +00 +00 +00 +00 +1f +00 +00 +00 +00 +00 +00 +00 +d6 +00 +00 +00 +12 +00 +04 +00 +00 +06 +00 +00 +00 +00 +00 +00 +71 +00 +00 +00 +00 +00 +00 +00 +a5 +08 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ed +00 +00 +00 +12 +00 +04 +00 +80 +06 +00 +00 +00 +00 +00 +00 +9b +00 +00 +00 +00 +00 +00 +00 +fe +00 +00 +00 +12 +00 +04 +00 +20 +07 +00 +00 +00 +00 +00 +00 +2e +00 +00 +00 +00 +00 +00 +00 +9f +09 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +01 +00 +00 +12 +00 +04 +00 +50 +07 +00 +00 +00 +00 +00 +00 +52 +05 +00 +00 +00 +00 +00 +00 +4d +0b +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ee +0b +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +05 +0c +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3e +0c +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +57 +0c +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +75 +0c +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ab +0c +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cb +0c +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +25 +0d +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +0d +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +66 +0d +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +0d +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9e +0d +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bf +0d +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e7 +0d +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1c +0e +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +23 +01 +00 +00 +12 +00 +04 +00 +b0 +0c +00 +00 +00 +00 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +34 +01 +00 +00 +12 +00 +04 +00 +e0 +0c +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +00 +00 +00 +00 +48 +01 +00 +00 +12 +00 +04 +00 +00 +0d +00 +00 +00 +00 +00 +00 +16 +00 +00 +00 +00 +00 +00 +00 +5c +01 +00 +00 +12 +00 +04 +00 +20 +0d +00 +00 +00 +00 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +73 +0f +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +01 +00 +00 +12 +00 +04 +00 +50 +0d +00 +00 +00 +00 +00 +00 +1b +00 +00 +00 +00 +00 +00 +00 +b1 +0f +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +81 +01 +00 +00 +12 +00 +04 +00 +70 +0d +00 +00 +00 +00 +00 +00 +4b +00 +00 +00 +00 +00 +00 +00 +96 +01 +00 +00 +12 +00 +04 +00 +c0 +0d +00 +00 +00 +00 +00 +00 +95 +00 +00 +00 +00 +00 +00 +00 +9e +10 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +aa +01 +00 +00 +12 +00 +04 +00 +60 +0e +00 +00 +00 +00 +00 +00 +48 +01 +00 +00 +00 +00 +00 +00 +31 +12 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +79 +12 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c1 +01 +00 +00 +12 +00 +04 +00 +b0 +0f +00 +00 +00 +00 +00 +00 +7d +02 +00 +00 +00 +00 +00 +00 +a1 +13 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b9 +13 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2a +14 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +58 +14 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d7 +01 +00 +00 +12 +00 +04 +00 +30 +12 +00 +00 +00 +00 +00 +00 +21 +01 +00 +00 +00 +00 +00 +00 +ee +01 +00 +00 +12 +00 +04 +00 +60 +13 +00 +00 +00 +00 +00 +00 +e2 +00 +00 +00 +00 +00 +00 +00 +06 +02 +00 +00 +12 +00 +04 +00 +50 +14 +00 +00 +00 +00 +00 +00 +a0 +00 +00 +00 +00 +00 +00 +00 +31 +17 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +49 +17 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +02 +00 +00 +12 +00 +04 +00 +f0 +14 +00 +00 +00 +00 +00 +00 +2b +03 +00 +00 +00 +00 +00 +00 +46 +18 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +aa +18 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fd +18 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +19 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1f +19 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +26 +19 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +62 +19 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +01 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2c +bd +00 +00 +00 +00 +00 +00 +7a +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +01 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a8 +be +00 +00 +00 +00 +00 +00 +18 +28 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +68 +01 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +e6 +00 +00 +00 +00 +00 +00 +08 +76 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +9d +04 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +1b +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d1 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5c +18 +00 +00 +00 +00 +00 +00 +b0 +1f +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +38 +00 +00 +00 +00 +00 +00 +ef +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +15 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fb +3a +00 +00 +00 +00 +00 +00 +52 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +dc +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +4a +00 +00 +00 +00 +00 +00 +d0 +20 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +07 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +6b +00 +00 +00 +00 +00 +00 +87 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ed +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a8 +6f +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +09 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +2d +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +6f +00 +00 +00 +00 +00 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +36 +00 +00 +00 +01 +00 +00 +00 +32 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +13 +70 +00 +00 +00 +00 +00 +00 +0b +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +45 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +71 +00 +00 +00 +00 +00 +00 +18 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fe +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +38 +72 +00 +00 +00 +00 +00 +00 +30 +03 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +0d +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +4d +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +75 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0b +01 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +77 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +0f +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +53 +00 +00 +00 +01 +00 +00 +00 +32 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +7a +00 +00 +00 +00 +00 +00 +78 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +62 +00 +00 +00 +08 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +98 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +67 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f8 +7b +00 +00 +00 +00 +00 +00 +58 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +16 +01 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +80 +00 +00 +00 +00 +00 +00 +b0 +04 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +13 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +74 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +85 +00 +00 +00 +00 +00 +00 +58 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +01 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +58 +89 +00 +00 +00 +00 +00 +00 +58 +02 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +15 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +7e +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +8b +00 +00 +00 +00 +00 +00 +1e +26 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +89 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ce +b1 +00 +00 +00 +00 +00 +00 +7e +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +37 +01 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4c +b4 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +18 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +99 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +64 +b4 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4c +01 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +94 +b4 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +1a +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +a8 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c4 +b4 +00 +00 +00 +00 +00 +00 +f0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b6 +00 +00 +00 +01 +00 +00 +00 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b4 +b5 +00 +00 +00 +00 +00 +00 +75 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +c1 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +29 +bd +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/Makefile.inc new file mode 100644 index 0000000000..e1d9c4d995 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/Makefile.inc @@ -0,0 +1,7 @@ +TESTS += modules/dbgfmts/dwarf2/tests/passwin64/dwarf2_passwin64_test.sh + +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/passwin64/dwarf2_passwin64_test.sh +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.asm +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.errwarn +EXTRA_DIST += modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.hex + diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarf2_passwin64_test.sh b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarf2_passwin64_test.sh new file mode 100755 index 0000000000..336ceab931 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarf2_passwin64_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh dwarf2_passwin64_test modules/dbgfmts/dwarf2/tests/passwin64 "dwarf2 dbgfmt passwin64" "-f win64 -p gas -g dwarf2" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.asm b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.asm new file mode 100644 index 0000000000..d4e2ca434a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.asm @@ -0,0 +1,1132 @@ + .file "test_hd.c" + .section .debug_abbrev,"",@progbits +.Ldebug_abbrev0: + .section .debug_info,"",@progbits +.Ldebug_info0: + .section .debug_line,"",@progbits +.Ldebug_line0: + .text +.Ltext0: + .section .rodata.str1.1,"aMS",@progbits,1 +.LC0: + .string "Usage: %s \n" +.LC1: + .string "rb" +.LC2: + .string "Could not open `%s'.\n" +.LC3: + .string "%02x \n" +.LC4: + .string "Error reading from `%s'.\n" + .text + .p2align 4,,15 +.globl main + .type main, @function +main: +.LFB26: + .file 1 "test_hd.c" + .loc 1 33 0 +.LVL0: + movq %rbp, -16(%rsp) +.LCFI0: + movq %rbx, -24(%rsp) +.LCFI1: + movq %rsi, %rbp + movq %r12, -8(%rsp) +.LCFI2: + subq $24, %rsp +.LCFI3: +.LVL1: + .loc 1 37 0 + cmpl $2, %edi + je .L2 +.LVL2: + .loc 1 38 0 + movq (%rsi), %rdx + movq stderr(%rip), %rdi +.LVL3: + movl $.LC0, %esi + xorl %eax, %eax + call fprintf + movl $1, %eax +.LVL4: +.L4: + .loc 1 59 0 + movq (%rsp), %rbx +.LVL5: + movq 8(%rsp), %rbp +.LVL6: + movq 16(%rsp), %r12 + addq $24, %rsp +.LVL7: + ret +.LVL8: + .p2align 4,,7 +.L2: + .loc 1 42 0 + movq 8(%rbp), %rdi +.LVL9: + leaq 8(%rsi), %r12 + movl $.LC1, %esi + call fopen +.LVL10: + .loc 1 44 0 + testq %rax, %rax +.LVL11: + .loc 1 42 0 + movq %rax, %rbx +.LVL12: + .loc 1 44 0 + jne .L12 + jmp .L16 +.LVL13: + .p2align 4,,7 +.L7: + .loc 1 50 0 + movl %eax, %esi + movl $.LC3, %edi + xorl %eax, %eax +.LVL14: + call printf +.LVL15: +.L12: + .loc 1 49 0 + movq %rbx, %rdi + call fgetc +.LVL16: + cmpl $-1, %eax + jne .L7 + .loc 1 52 0 + movq %rbx, %rdi + call ferror +.LVL17: + testl %eax, %eax + .p2align 4,,2 + jne .L15 + .loc 1 57 0 + movq %rbx, %rdi + call fclose + .loc 1 59 0 + movq (%rsp), %rbx +.LVL18: + movq 8(%rsp), %rbp +.LVL19: + .loc 1 57 0 + xorl %eax, %eax + .loc 1 59 0 + movq 16(%rsp), %r12 + addq $24, %rsp +.LVL20: + ret +.LVL21: +.L15: + .loc 1 53 0 + movq (%r12), %rdx + movq stderr(%rip), %rdi + movl $.LC4, %esi + xorl %eax, %eax + call fprintf + .loc 1 59 0 + movq (%rsp), %rbx +.LVL22: + movq 8(%rsp), %rbp +.LVL23: + .loc 1 53 0 + movl $1, %eax + .loc 1 59 0 + movq 16(%rsp), %r12 + addq $24, %rsp +.LVL24: + ret +.LVL25: +.L16: + .loc 1 45 0 + movq 8(%rbp), %rdx + movq stderr(%rip), %rdi + movl $.LC2, %esi + xorl %eax, %eax + call fprintf + movl $1, %eax + jmp .L4 +.LFE26: + .size main, .-main + .section .debug_frame,"",@progbits +.Lframe0: + .long .LECIE0-.LSCIE0 +.LSCIE0: + .long 0xffffffff + .byte 0x1 + .string "" + .uleb128 0x1 + .sleb128 -8 + .byte 0x10 + .byte 0xc + .uleb128 0x7 + .uleb128 0x8 + .byte 0x90 + .uleb128 0x1 + .align 8 +.LECIE0: +.LSFDE0: + .long .LEFDE0-.LASFDE0 +.LASFDE0: + .long .Lframe0 + .quad .LFB26 + .quad .LFE26-.LFB26 + .byte 0x4 + .long .LCFI1-.LFB26 + .byte 0x83 + .uleb128 0x4 + .byte 0x86 + .uleb128 0x3 + .byte 0x4 + .long .LCFI3-.LCFI1 + .byte 0xe + .uleb128 0x20 + .byte 0x8c + .uleb128 0x2 + .align 8 +.LEFDE0: + .section .eh_frame,"a",@progbits +.Lframe1: + .long .LECIE1-.LSCIE1 +.LSCIE1: + .long 0x0 + .byte 0x1 + .string "" + .uleb128 0x1 + .sleb128 -8 + .byte 0x10 + .byte 0xc + .uleb128 0x7 + .uleb128 0x8 + .byte 0x90 + .uleb128 0x1 + .align 8 +.LECIE1: +.LSFDE1: + .long .LEFDE1-.LASFDE1 +.LASFDE1: + .long .LASFDE1-.Lframe1 + .quad .LFB26 + .quad .LFE26-.LFB26 + .byte 0x4 + .long .LCFI1-.LFB26 + .byte 0x83 + .uleb128 0x4 + .byte 0x86 + .uleb128 0x3 + .byte 0x4 + .long .LCFI3-.LCFI1 + .byte 0xe + .uleb128 0x20 + .byte 0x8c + .uleb128 0x2 + .align 8 +.LEFDE1: + .file 2 "/usr/include/stdio.h" + .file 3 "/usr/include/libio.h" + .file 4 "/usr/include/bits/types.h" + .text +.Letext0: + .section .debug_loc,"",@progbits +.Ldebug_loc0: +.LLST0: + .quad .LVL0-.Ltext0 + .quad .LVL1-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL1-.Ltext0 + .quad .LVL7-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL7-.Ltext0 + .quad .LVL8-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL8-.Ltext0 + .quad .LVL20-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL20-.Ltext0 + .quad .LVL21-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL21-.Ltext0 + .quad .LVL24-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad .LVL24-.Ltext0 + .quad .LVL25-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 -24 + .quad .LVL25-.Ltext0 + .quad .LFE26-.Ltext0 + .value 0x2 + .byte 0x77 + .sleb128 0 + .quad 0x0 + .quad 0x0 +.LLST1: + .quad .LVL0-.Ltext0 + .quad .LVL3-.Ltext0 + .value 0x1 + .byte 0x55 + .quad .LVL8-.Ltext0 + .quad .LVL9-.Ltext0 + .value 0x1 + .byte 0x55 + .quad 0x0 + .quad 0x0 +.LLST2: + .quad .LVL0-.Ltext0 + .quad .LVL2-.Ltext0 + .value 0x1 + .byte 0x54 + .quad .LVL2-.Ltext0 + .quad .LVL6-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL8-.Ltext0 + .quad .LVL19-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL21-.Ltext0 + .quad .LVL23-.Ltext0 + .value 0x1 + .byte 0x56 + .quad .LVL25-.Ltext0 + .quad .LFE26-.Ltext0 + .value 0x1 + .byte 0x56 + .quad 0x0 + .quad 0x0 +.LLST3: + .quad .LVL4-.Ltext0 + .quad .LVL5-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL10-.Ltext0 + .quad .LVL11-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL12-.Ltext0 + .quad .LVL18-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL21-.Ltext0 + .quad .LVL22-.Ltext0 + .value 0x1 + .byte 0x53 + .quad .LVL25-.Ltext0 + .quad .LFE26-.Ltext0 + .value 0x1 + .byte 0x53 + .quad 0x0 + .quad 0x0 +.LLST4: + .quad .LVL13-.Ltext0 + .quad .LVL14-.Ltext0 + .value 0x1 + .byte 0x50 + .quad .LVL14-.Ltext0 + .quad .LVL15-.Ltext0 + .value 0x1 + .byte 0x54 + .quad .LVL16-.Ltext0 + .quad .LVL17-.Ltext0 + .value 0x1 + .byte 0x50 + .quad 0x0 + .quad 0x0 + .section .debug_info + .long 0x347 + .value 0x2 + .long .Ldebug_abbrev0 + .byte 0x8 + .uleb128 0x1 + .long .Ldebug_line0 + .quad .Letext0 + .quad .Ltext0 + .long .LASF51 + .byte 0x1 + .long .LASF52 + .long .LASF53 + .uleb128 0x2 + .long .LASF0 + .byte 0x8 + .byte 0x7 + .uleb128 0x2 + .long .LASF1 + .byte 0x1 + .byte 0x8 + .uleb128 0x2 + .long .LASF2 + .byte 0x2 + .byte 0x7 + .uleb128 0x2 + .long .LASF3 + .byte 0x4 + .byte 0x7 + .uleb128 0x2 + .long .LASF4 + .byte 0x1 + .byte 0x6 + .uleb128 0x2 + .long .LASF5 + .byte 0x2 + .byte 0x5 + .uleb128 0x3 + .string "int" + .byte 0x4 + .byte 0x5 + .uleb128 0x2 + .long .LASF6 + .byte 0x8 + .byte 0x5 + .uleb128 0x4 + .long .LASF7 + .byte 0x4 + .byte 0x8f + .long 0x5e + .uleb128 0x4 + .long .LASF8 + .byte 0x4 + .byte 0x90 + .long 0x5e + .uleb128 0x2 + .long .LASF0 + .byte 0x8 + .byte 0x7 + .uleb128 0x5 + .byte 0x8 + .uleb128 0x6 + .byte 0x8 + .long 0x8a + .uleb128 0x2 + .long .LASF9 + .byte 0x1 + .byte 0x6 + .uleb128 0x4 + .long .LASF10 + .byte 0x2 + .byte 0x2e + .long 0x9c + .uleb128 0x7 + .long 0x238 + .long .LASF38 + .byte 0xd8 + .byte 0x2 + .byte 0x2e + .uleb128 0x8 + .long .LASF11 + .byte 0x3 + .value 0x10c + .long 0x57 + .byte 0x2 + .byte 0x23 + .uleb128 0x0 + .uleb128 0x8 + .long .LASF12 + .byte 0x3 + .value 0x111 + .long 0x84 + .byte 0x2 + .byte 0x23 + .uleb128 0x8 + .uleb128 0x8 + .long .LASF13 + .byte 0x3 + .value 0x112 + .long 0x84 + .byte 0x2 + .byte 0x23 + .uleb128 0x10 + .uleb128 0x8 + .long .LASF14 + .byte 0x3 + .value 0x113 + .long 0x84 + .byte 0x2 + .byte 0x23 + .uleb128 0x18 + .uleb128 0x8 + .long .LASF15 + .byte 0x3 + .value 0x114 + .long 0x84 + .byte 0x2 + .byte 0x23 + .uleb128 0x20 + .uleb128 0x8 + .long .LASF16 + .byte 0x3 + .value 0x115 + .long 0x84 + .byte 0x2 + .byte 0x23 + .uleb128 0x28 + .uleb128 0x8 + .long .LASF17 + .byte 0x3 + .value 0x116 + .long 0x84 + .byte 0x2 + .byte 0x23 + .uleb128 0x30 + .uleb128 0x8 + .long .LASF18 + .byte 0x3 + .value 0x117 + .long 0x84 + .byte 0x2 + .byte 0x23 + .uleb128 0x38 + .uleb128 0x8 + .long .LASF19 + .byte 0x3 + .value 0x118 + .long 0x84 + .byte 0x2 + .byte 0x23 + .uleb128 0x40 + .uleb128 0x8 + .long .LASF20 + .byte 0x3 + .value 0x11a + .long 0x84 + .byte 0x2 + .byte 0x23 + .uleb128 0x48 + .uleb128 0x8 + .long .LASF21 + .byte 0x3 + .value 0x11b + .long 0x84 + .byte 0x2 + .byte 0x23 + .uleb128 0x50 + .uleb128 0x8 + .long .LASF22 + .byte 0x3 + .value 0x11c + .long 0x84 + .byte 0x2 + .byte 0x23 + .uleb128 0x58 + .uleb128 0x8 + .long .LASF23 + .byte 0x3 + .value 0x11e + .long 0x276 + .byte 0x2 + .byte 0x23 + .uleb128 0x60 + .uleb128 0x8 + .long .LASF24 + .byte 0x3 + .value 0x120 + .long 0x27c + .byte 0x2 + .byte 0x23 + .uleb128 0x68 + .uleb128 0x8 + .long .LASF25 + .byte 0x3 + .value 0x122 + .long 0x57 + .byte 0x2 + .byte 0x23 + .uleb128 0x70 + .uleb128 0x8 + .long .LASF26 + .byte 0x3 + .value 0x126 + .long 0x57 + .byte 0x2 + .byte 0x23 + .uleb128 0x74 + .uleb128 0x8 + .long .LASF27 + .byte 0x3 + .value 0x128 + .long 0x65 + .byte 0x2 + .byte 0x23 + .uleb128 0x78 + .uleb128 0x8 + .long .LASF28 + .byte 0x3 + .value 0x12c + .long 0x3b + .byte 0x3 + .byte 0x23 + .uleb128 0x80 + .uleb128 0x8 + .long .LASF29 + .byte 0x3 + .value 0x12d + .long 0x49 + .byte 0x3 + .byte 0x23 + .uleb128 0x82 + .uleb128 0x8 + .long .LASF30 + .byte 0x3 + .value 0x12e + .long 0x282 + .byte 0x3 + .byte 0x23 + .uleb128 0x83 + .uleb128 0x8 + .long .LASF31 + .byte 0x3 + .value 0x132 + .long 0x292 + .byte 0x3 + .byte 0x23 + .uleb128 0x88 + .uleb128 0x8 + .long .LASF32 + .byte 0x3 + .value 0x13b + .long 0x70 + .byte 0x3 + .byte 0x23 + .uleb128 0x90 + .uleb128 0x8 + .long .LASF33 + .byte 0x3 + .value 0x141 + .long 0x82 + .byte 0x3 + .byte 0x23 + .uleb128 0x98 + .uleb128 0x8 + .long .LASF34 + .byte 0x3 + .value 0x142 + .long 0x82 + .byte 0x3 + .byte 0x23 + .uleb128 0xa0 + .uleb128 0x8 + .long .LASF35 + .byte 0x3 + .value 0x144 + .long 0x57 + .byte 0x3 + .byte 0x23 + .uleb128 0xa8 + .uleb128 0x8 + .long .LASF36 + .byte 0x3 + .value 0x146 + .long 0x298 + .byte 0x3 + .byte 0x23 + .uleb128 0xac + .byte 0x0 + .uleb128 0x9 + .long .LASF37 + .byte 0x3 + .byte 0xb0 + .uleb128 0x7 + .long 0x276 + .long .LASF39 + .byte 0x18 + .byte 0x3 + .byte 0xb6 + .uleb128 0xa + .long .LASF40 + .byte 0x3 + .byte 0xb7 + .long 0x276 + .byte 0x2 + .byte 0x23 + .uleb128 0x0 + .uleb128 0xa + .long .LASF41 + .byte 0x3 + .byte 0xb8 + .long 0x27c + .byte 0x2 + .byte 0x23 + .uleb128 0x8 + .uleb128 0xa + .long .LASF42 + .byte 0x3 + .byte 0xbc + .long 0x57 + .byte 0x2 + .byte 0x23 + .uleb128 0x10 + .byte 0x0 + .uleb128 0x6 + .byte 0x8 + .long 0x23f + .uleb128 0x6 + .byte 0x8 + .long 0x9c + .uleb128 0xb + .long 0x292 + .long 0x8a + .uleb128 0xc + .long 0x7b + .byte 0x0 + .byte 0x0 + .uleb128 0x6 + .byte 0x8 + .long 0x238 + .uleb128 0xb + .long 0x2a8 + .long 0x8a + .uleb128 0xc + .long 0x7b + .byte 0x2b + .byte 0x0 + .uleb128 0x2 + .long .LASF43 + .byte 0x8 + .byte 0x7 + .uleb128 0x2 + .long .LASF44 + .byte 0x8 + .byte 0x5 + .uleb128 0xd + .long 0x317 + .byte 0x1 + .long .LASF54 + .byte 0x1 + .byte 0x21 + .byte 0x1 + .long 0x57 + .quad .LFB26 + .quad .LFE26 + .long .LLST0 + .uleb128 0xe + .long .LASF45 + .byte 0x1 + .byte 0x20 + .long 0x57 + .long .LLST1 + .uleb128 0xe + .long .LASF46 + .byte 0x1 + .byte 0x20 + .long 0x317 + .long .LLST2 + .uleb128 0xf + .long .LASF47 + .byte 0x1 + .byte 0x22 + .long 0x31d + .long .LLST3 + .uleb128 0x10 + .string "ch" + .byte 0x1 + .byte 0x23 + .long 0x57 + .long .LLST4 + .byte 0x0 + .uleb128 0x6 + .byte 0x8 + .long 0x84 + .uleb128 0x6 + .byte 0x8 + .long 0x91 + .uleb128 0x11 + .long .LASF48 + .byte 0x2 + .byte 0x8e + .long 0x27c + .byte 0x1 + .byte 0x1 + .uleb128 0x11 + .long .LASF49 + .byte 0x2 + .byte 0x8f + .long 0x27c + .byte 0x1 + .byte 0x1 + .uleb128 0x11 + .long .LASF50 + .byte 0x2 + .byte 0x90 + .long 0x27c + .byte 0x1 + .byte 0x1 + .byte 0x0 + .section .debug_abbrev + .uleb128 0x1 + .uleb128 0x11 + .byte 0x1 + .uleb128 0x10 + .uleb128 0x6 + .uleb128 0x12 + .uleb128 0x1 + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x25 + .uleb128 0xe + .uleb128 0x13 + .uleb128 0xb + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x1b + .uleb128 0xe + .byte 0x0 + .byte 0x0 + .uleb128 0x2 + .uleb128 0x24 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3e + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x24 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3e + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0x4 + .uleb128 0x16 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0x5 + .uleb128 0xf + .byte 0x0 + .uleb128 0xb + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0x6 + .uleb128 0xf + .byte 0x0 + .uleb128 0xb + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0x7 + .uleb128 0x13 + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0x8 + .uleb128 0xd + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0x5 + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x38 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0x9 + .uleb128 0x16 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0xa + .uleb128 0xd + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x38 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0xb + .uleb128 0x1 + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0xc + .uleb128 0x21 + .byte 0x0 + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2f + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0xd + .uleb128 0x2e + .byte 0x1 + .uleb128 0x1 + .uleb128 0x13 + .uleb128 0x3f + .uleb128 0xc + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x27 + .uleb128 0xc + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x1 + .uleb128 0x40 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0xe + .uleb128 0x5 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0xf + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x10 + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x11 + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x3f + .uleb128 0xc + .uleb128 0x3c + .uleb128 0xc + .byte 0x0 + .byte 0x0 + .byte 0x0 + .section .debug_pubnames,"",@progbits + .long 0x17 + .value 0x2 + .long .Ldebug_info0 + .long 0x34b + .long 0x2b6 + .string "main" + .long 0x0 + .section .debug_aranges,"",@progbits + .long 0x2c + .value 0x2 + .long .Ldebug_info0 + .byte 0x8 + .byte 0x0 + .value 0x0 + .value 0x0 + .quad .Ltext0 + .quad .Letext0-.Ltext0 + .quad 0x0 + .quad 0x0 + .section .debug_str,"MS",@progbits,1 +.LASF7: + .string "__off_t" +.LASF12: + .string "_IO_read_ptr" +.LASF24: + .string "_chain" +.LASF30: + .string "_shortbuf" +.LASF4: + .string "signed char" +.LASF18: + .string "_IO_buf_base" +.LASF43: + .string "long long unsigned int" +.LASF44: + .string "long long int" +.LASF47: + .string "bfile" +.LASF25: + .string "_fileno" +.LASF13: + .string "_IO_read_end" +.LASF6: + .string "long int" +.LASF11: + .string "_flags" +.LASF19: + .string "_IO_buf_end" +.LASF28: + .string "_cur_column" +.LASF27: + .string "_old_offset" +.LASF32: + .string "_offset" +.LASF54: + .string "main" +.LASF48: + .string "stdin" +.LASF3: + .string "unsigned int" +.LASF0: + .string "long unsigned int" +.LASF52: + .string "test_hd.c" +.LASF16: + .string "_IO_write_ptr" +.LASF41: + .string "_sbuf" +.LASF2: + .string "short unsigned int" +.LASF31: + .string "_lock" +.LASF49: + .string "stdout" +.LASF26: + .string "_flags2" +.LASF35: + .string "_mode" +.LASF10: + .string "FILE" +.LASF20: + .string "_IO_save_base" +.LASF17: + .string "_IO_write_end" +.LASF53: + .string "/home/pete/yasm" +.LASF37: + .string "_IO_lock_t" +.LASF38: + .string "_IO_FILE" +.LASF39: + .string "_IO_marker" +.LASF42: + .string "_pos" +.LASF23: + .string "_markers" +.LASF1: + .string "unsigned char" +.LASF5: + .string "short int" +.LASF29: + .string "_vtable_offset" +.LASF9: + .string "char" +.LASF51: + .string "GNU C 4.0.2 (Debian 4.0.2-2)" +.LASF40: + .string "_next" +.LASF8: + .string "__off64_t" +.LASF14: + .string "_IO_read_base" +.LASF22: + .string "_IO_save_end" +.LASF33: + .string "__pad1" +.LASF34: + .string "__pad2" +.LASF36: + .string "_unused2" +.LASF50: + .string "stderr" +.LASF46: + .string "argv" +.LASF21: + .string "_IO_backup_base" +.LASF45: + .string "argc" +.LASF15: + .string "_IO_write_base" + .ident "GCC: (GNU) 4.0.2 (Debian 4.0.2-2)" + .section .note.GNU-stack,"",@progbits diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.errwarn b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.errwarn new file mode 100644 index 0000000000..be2a237ee3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.errwarn @@ -0,0 +1,17 @@ +-:2: warning: Unrecognized qualifier `progbits' +-:4: warning: Unrecognized qualifier `progbits' +-:6: warning: Unrecognized qualifier `progbits' +-:10: warning: unrecognized section attribute: `M' +-:10: warning: unrecognized section attribute: `S' +-:10: warning: Unrecognized qualifier `progbits' +-:24: warning: .type pseudo-op used outside of .def/.endef; ignored +-:152: warning: directive `.size' not recognized +-:153: warning: Unrecognized qualifier `progbits' +-:190: warning: Unrecognized qualifier `progbits' +-:232: warning: Unrecognized qualifier `progbits' +-:1000: warning: Unrecognized qualifier `progbits' +-:1008: warning: Unrecognized qualifier `progbits' +-:1020: warning: unrecognized section attribute: `M' +-:1020: warning: unrecognized section attribute: `S' +-:1020: warning: Unrecognized qualifier `progbits' +-:1132: warning: Unrecognized qualifier `progbits' diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.hex b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.hex new file mode 100644 index 0000000000..114906bfa2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/dwarf2/tests/passwin64/dwarfwin64_testhd.hex @@ -0,0 +1,7574 @@ +64 +86 +0d +00 +00 +00 +00 +00 +17 +11 +00 +00 +9d +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +1c +02 +00 +00 +20 +03 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +20 +00 +50 +60 +2f +34 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e8 +00 +00 +00 +c0 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +10 +42 +2f +31 +38 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4b +03 +00 +00 +a8 +04 +00 +00 +f3 +07 +00 +00 +00 +00 +00 +00 +43 +00 +00 +00 +40 +00 +10 +42 +2f +33 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9f +00 +00 +00 +91 +0a +00 +00 +30 +0b +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +40 +00 +10 +42 +2f +34 +32 +00 +00 +00 +00 +00 +04 +01 +00 +00 +00 +00 +00 +00 +4c +00 +00 +00 +3a +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +40 +40 +2f +35 +37 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +86 +0b +00 +00 +ce +0b +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +40 +00 +40 +42 +2f +37 +30 +00 +00 +00 +00 +00 +50 +01 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +e2 +0b +00 +00 +2a +0c +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +20 +00 +40 +c0 +2f +38 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0d +02 +00 +00 +34 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +10 +42 +2f +39 +31 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1b +00 +00 +00 +41 +0e +00 +00 +5c +0e +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +40 +00 +10 +42 +2f +31 +30 +37 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +66 +0e +00 +00 +96 +0e +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +40 +00 +10 +42 +2f +31 +32 +32 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4a +02 +00 +00 +aa +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +10 +42 +2f +31 +33 +33 +00 +00 +00 +00 +98 +01 +00 +00 +00 +00 +00 +00 +23 +00 +00 +00 +f4 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +40 +40 +2f +31 +34 +34 +00 +00 +00 +00 +bb +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +c0 +48 +89 +6c +24 +f0 +48 +89 +5c +24 +e8 +48 +89 +f5 +4c +89 +64 +24 +f8 +48 +83 +ec +18 +83 +ff +02 +74 +35 +48 +8b +16 +48 +8b +3d +00 +00 +00 +00 +be +00 +00 +00 +00 +31 +c0 +e8 +00 +00 +00 +00 +b8 +01 +00 +00 +00 +48 +8b +1c +24 +48 +8b +6c +24 +08 +4c +8b +64 +24 +10 +48 +83 +c4 +18 +c3 +0f +1f +80 +00 +00 +00 +00 +48 +8b +7d +08 +4c +8d +66 +08 +be +00 +00 +00 +00 +e8 +00 +00 +00 +00 +48 +85 +c0 +48 +89 +c3 +75 +14 +eb +77 +0f +1f +40 +00 +89 +c6 +bf +00 +00 +00 +00 +31 +c0 +e8 +00 +00 +00 +00 +48 +89 +df +e8 +00 +00 +00 +00 +83 +f8 +ff +75 +e5 +48 +89 +df +e8 +00 +00 +00 +00 +85 +c0 +75 +1d +48 +89 +df +e8 +00 +00 +00 +00 +48 +8b +1c +24 +48 +8b +6c +24 +08 +31 +c0 +4c +8b +64 +24 +10 +48 +83 +c4 +18 +c3 +49 +8b +14 +24 +48 +8b +3d +00 +00 +00 +00 +be +00 +00 +00 +00 +31 +c0 +e8 +00 +00 +00 +00 +48 +8b +1c +24 +48 +8b +6c +24 +08 +b8 +01 +00 +00 +00 +4c +8b +64 +24 +10 +48 +83 +c4 +18 +c3 +48 +8b +55 +08 +48 +8b +3d +00 +00 +00 +00 +be +00 +00 +00 +00 +31 +c0 +e8 +00 +00 +00 +00 +b8 +01 +00 +00 +00 +e9 +32 +ff +ff +ff +21 +00 +00 +00 +1f +00 +00 +00 +04 +00 +26 +00 +00 +00 +10 +00 +00 +00 +02 +00 +2d +00 +00 +00 +21 +00 +00 +00 +04 +00 +59 +00 +00 +00 +11 +00 +00 +00 +02 +00 +5e +00 +00 +00 +29 +00 +00 +00 +04 +00 +73 +00 +00 +00 +13 +00 +00 +00 +02 +00 +7a +00 +00 +00 +32 +00 +00 +00 +04 +00 +82 +00 +00 +00 +34 +00 +00 +00 +04 +00 +8f +00 +00 +00 +36 +00 +00 +00 +04 +00 +9b +00 +00 +00 +39 +00 +00 +00 +04 +00 +bb +00 +00 +00 +1f +00 +00 +00 +04 +00 +c0 +00 +00 +00 +14 +00 +00 +00 +02 +00 +c7 +00 +00 +00 +21 +00 +00 +00 +04 +00 +ea +00 +00 +00 +1f +00 +00 +00 +04 +00 +ef +00 +00 +00 +12 +00 +00 +00 +02 +00 +f6 +00 +00 +00 +21 +00 +00 +00 +04 +00 +01 +11 +01 +10 +06 +12 +01 +11 +01 +25 +0e +13 +0b +03 +0e +1b +0e +00 +00 +02 +24 +00 +03 +0e +0b +0b +3e +0b +00 +00 +03 +24 +00 +03 +08 +0b +0b +3e +0b +00 +00 +04 +16 +00 +03 +0e +3a +0b +3b +0b +49 +13 +00 +00 +05 +0f +00 +0b +0b +00 +00 +06 +0f +00 +0b +0b +49 +13 +00 +00 +07 +13 +01 +01 +13 +03 +0e +0b +0b +3a +0b +3b +0b +00 +00 +08 +0d +00 +03 +0e +3a +0b +3b +05 +49 +13 +38 +0a +00 +00 +09 +16 +00 +03 +0e +3a +0b +3b +0b +00 +00 +0a +0d +00 +03 +0e +3a +0b +3b +0b +49 +13 +38 +0a +00 +00 +0b +01 +01 +01 +13 +49 +13 +00 +00 +0c +21 +00 +49 +13 +2f +0b +00 +00 +0d +2e +01 +01 +13 +3f +0c +03 +0e +3a +0b +3b +0b +27 +0c +49 +13 +11 +01 +12 +01 +40 +06 +00 +00 +0e +05 +00 +03 +0e +3a +0b +3b +0b +49 +13 +02 +06 +00 +00 +0f +34 +00 +03 +0e +3a +0b +3b +0b +49 +13 +02 +06 +00 +00 +10 +34 +00 +03 +08 +3a +0b +3b +0b +49 +13 +02 +06 +00 +00 +11 +34 +00 +03 +0e +3a +0b +3b +0b +49 +13 +3f +0c +3c +0c +00 +00 +00 +47 +03 +00 +00 +02 +00 +00 +00 +00 +00 +08 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +08 +07 +02 +00 +00 +00 +00 +01 +08 +02 +00 +00 +00 +00 +02 +07 +02 +00 +00 +00 +00 +04 +07 +02 +00 +00 +00 +00 +01 +06 +02 +00 +00 +00 +00 +02 +05 +03 +69 +6e +74 +00 +04 +05 +02 +00 +00 +00 +00 +08 +05 +04 +00 +00 +00 +00 +04 +8f +5e +00 +00 +00 +04 +00 +00 +00 +00 +04 +90 +5e +00 +00 +00 +02 +00 +00 +00 +00 +08 +07 +05 +08 +06 +08 +8a +00 +00 +00 +02 +00 +00 +00 +00 +01 +06 +04 +00 +00 +00 +00 +02 +2e +9c +00 +00 +00 +07 +38 +02 +00 +00 +00 +00 +00 +00 +d8 +02 +2e +08 +00 +00 +00 +00 +03 +0c +01 +57 +00 +00 +00 +02 +23 +00 +08 +00 +00 +00 +00 +03 +11 +01 +84 +00 +00 +00 +02 +23 +08 +08 +00 +00 +00 +00 +03 +12 +01 +84 +00 +00 +00 +02 +23 +10 +08 +00 +00 +00 +00 +03 +13 +01 +84 +00 +00 +00 +02 +23 +18 +08 +00 +00 +00 +00 +03 +14 +01 +84 +00 +00 +00 +02 +23 +20 +08 +00 +00 +00 +00 +03 +15 +01 +84 +00 +00 +00 +02 +23 +28 +08 +00 +00 +00 +00 +03 +16 +01 +84 +00 +00 +00 +02 +23 +30 +08 +00 +00 +00 +00 +03 +17 +01 +84 +00 +00 +00 +02 +23 +38 +08 +00 +00 +00 +00 +03 +18 +01 +84 +00 +00 +00 +02 +23 +40 +08 +00 +00 +00 +00 +03 +1a +01 +84 +00 +00 +00 +02 +23 +48 +08 +00 +00 +00 +00 +03 +1b +01 +84 +00 +00 +00 +02 +23 +50 +08 +00 +00 +00 +00 +03 +1c +01 +84 +00 +00 +00 +02 +23 +58 +08 +00 +00 +00 +00 +03 +1e +01 +76 +02 +00 +00 +02 +23 +60 +08 +00 +00 +00 +00 +03 +20 +01 +7c +02 +00 +00 +02 +23 +68 +08 +00 +00 +00 +00 +03 +22 +01 +57 +00 +00 +00 +02 +23 +70 +08 +00 +00 +00 +00 +03 +26 +01 +57 +00 +00 +00 +02 +23 +74 +08 +00 +00 +00 +00 +03 +28 +01 +65 +00 +00 +00 +02 +23 +78 +08 +00 +00 +00 +00 +03 +2c +01 +3b +00 +00 +00 +03 +23 +80 +01 +08 +00 +00 +00 +00 +03 +2d +01 +49 +00 +00 +00 +03 +23 +82 +01 +08 +00 +00 +00 +00 +03 +2e +01 +82 +02 +00 +00 +03 +23 +83 +01 +08 +00 +00 +00 +00 +03 +32 +01 +92 +02 +00 +00 +03 +23 +88 +01 +08 +00 +00 +00 +00 +03 +3b +01 +70 +00 +00 +00 +03 +23 +90 +01 +08 +00 +00 +00 +00 +03 +41 +01 +82 +00 +00 +00 +03 +23 +98 +01 +08 +00 +00 +00 +00 +03 +42 +01 +82 +00 +00 +00 +03 +23 +a0 +01 +08 +00 +00 +00 +00 +03 +44 +01 +57 +00 +00 +00 +03 +23 +a8 +01 +08 +00 +00 +00 +00 +03 +46 +01 +98 +02 +00 +00 +03 +23 +ac +01 +00 +09 +00 +00 +00 +00 +03 +b0 +07 +76 +02 +00 +00 +00 +00 +00 +00 +18 +03 +b6 +0a +00 +00 +00 +00 +03 +b7 +76 +02 +00 +00 +02 +23 +00 +0a +00 +00 +00 +00 +03 +b8 +7c +02 +00 +00 +02 +23 +08 +0a +00 +00 +00 +00 +03 +bc +57 +00 +00 +00 +02 +23 +10 +00 +06 +08 +3f +02 +00 +00 +06 +08 +9c +00 +00 +00 +0b +92 +02 +00 +00 +8a +00 +00 +00 +0c +7b +00 +00 +00 +00 +00 +06 +08 +38 +02 +00 +00 +0b +a8 +02 +00 +00 +8a +00 +00 +00 +0c +7b +00 +00 +00 +2b +00 +02 +00 +00 +00 +00 +08 +07 +02 +00 +00 +00 +00 +08 +05 +0d +17 +03 +00 +00 +01 +00 +00 +00 +00 +01 +21 +01 +57 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0e +00 +00 +00 +00 +01 +20 +57 +00 +00 +00 +00 +00 +00 +00 +0e +00 +00 +00 +00 +01 +20 +17 +03 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +00 +01 +22 +1d +03 +00 +00 +00 +00 +00 +00 +10 +63 +68 +00 +01 +23 +57 +00 +00 +00 +00 +00 +00 +00 +00 +06 +08 +84 +00 +00 +00 +06 +08 +91 +00 +00 +00 +11 +00 +00 +00 +00 +02 +8e +7c +02 +00 +00 +01 +01 +11 +00 +00 +00 +00 +02 +8f +7c +02 +00 +00 +01 +01 +11 +00 +00 +00 +00 +02 +90 +7c +02 +00 +00 +01 +01 +00 +06 +00 +00 +00 +06 +00 +00 +00 +02 +00 +0c +00 +00 +00 +0c +00 +00 +00 +02 +00 +10 +00 +00 +00 +53 +00 +00 +00 +01 +00 +18 +00 +00 +00 +0d +00 +00 +00 +01 +00 +20 +00 +00 +00 +5c +00 +00 +00 +02 +00 +25 +00 +00 +00 +5d +00 +00 +00 +02 +00 +29 +00 +00 +00 +5e +00 +00 +00 +02 +00 +2e +00 +00 +00 +5f +00 +00 +00 +02 +00 +35 +00 +00 +00 +60 +00 +00 +00 +02 +00 +3c +00 +00 +00 +61 +00 +00 +00 +02 +00 +43 +00 +00 +00 +62 +00 +00 +00 +02 +00 +4a +00 +00 +00 +63 +00 +00 +00 +02 +00 +51 +00 +00 +00 +64 +00 +00 +00 +02 +00 +5f +00 +00 +00 +65 +00 +00 +00 +02 +00 +66 +00 +00 +00 +66 +00 +00 +00 +02 +00 +71 +00 +00 +00 +67 +00 +00 +00 +02 +00 +7c +00 +00 +00 +5f +00 +00 +00 +02 +00 +8b +00 +00 +00 +68 +00 +00 +00 +02 +00 +92 +00 +00 +00 +69 +00 +00 +00 +02 +00 +a1 +00 +00 +00 +6a +00 +00 +00 +02 +00 +a9 +00 +00 +00 +6b +00 +00 +00 +02 +00 +b8 +00 +00 +00 +6c +00 +00 +00 +02 +00 +c7 +00 +00 +00 +6d +00 +00 +00 +02 +00 +d6 +00 +00 +00 +6e +00 +00 +00 +02 +00 +e5 +00 +00 +00 +6f +00 +00 +00 +02 +00 +f4 +00 +00 +00 +70 +00 +00 +00 +02 +00 +03 +01 +00 +00 +71 +00 +00 +00 +02 +00 +12 +01 +00 +00 +72 +00 +00 +00 +02 +00 +21 +01 +00 +00 +73 +00 +00 +00 +02 +00 +30 +01 +00 +00 +74 +00 +00 +00 +02 +00 +3f +01 +00 +00 +75 +00 +00 +00 +02 +00 +4e +01 +00 +00 +76 +00 +00 +00 +02 +00 +5d +01 +00 +00 +77 +00 +00 +00 +02 +00 +6c +01 +00 +00 +78 +00 +00 +00 +02 +00 +7b +01 +00 +00 +79 +00 +00 +00 +02 +00 +8a +01 +00 +00 +7a +00 +00 +00 +02 +00 +99 +01 +00 +00 +7b +00 +00 +00 +02 +00 +a8 +01 +00 +00 +7c +00 +00 +00 +02 +00 +b8 +01 +00 +00 +7d +00 +00 +00 +02 +00 +c8 +01 +00 +00 +7e +00 +00 +00 +02 +00 +d8 +01 +00 +00 +7f +00 +00 +00 +02 +00 +e8 +01 +00 +00 +80 +00 +00 +00 +02 +00 +f8 +01 +00 +00 +81 +00 +00 +00 +02 +00 +08 +02 +00 +00 +82 +00 +00 +00 +02 +00 +18 +02 +00 +00 +83 +00 +00 +00 +02 +00 +28 +02 +00 +00 +84 +00 +00 +00 +02 +00 +39 +02 +00 +00 +85 +00 +00 +00 +02 +00 +44 +02 +00 +00 +86 +00 +00 +00 +02 +00 +4c +02 +00 +00 +87 +00 +00 +00 +02 +00 +5a +02 +00 +00 +88 +00 +00 +00 +02 +00 +68 +02 +00 +00 +89 +00 +00 +00 +02 +00 +a9 +02 +00 +00 +8a +00 +00 +00 +02 +00 +b0 +02 +00 +00 +8b +00 +00 +00 +02 +00 +bc +02 +00 +00 +8c +00 +00 +00 +02 +00 +c7 +02 +00 +00 +16 +00 +00 +00 +01 +00 +cf +02 +00 +00 +42 +00 +00 +00 +01 +00 +d7 +02 +00 +00 +57 +00 +00 +00 +02 +00 +dc +02 +00 +00 +8d +00 +00 +00 +02 +00 +e6 +02 +00 +00 +58 +00 +00 +00 +02 +00 +eb +02 +00 +00 +8e +00 +00 +00 +02 +00 +f5 +02 +00 +00 +59 +00 +00 +00 +02 +00 +fa +02 +00 +00 +8f +00 +00 +00 +02 +00 +04 +03 +00 +00 +5a +00 +00 +00 +02 +00 +12 +03 +00 +00 +5b +00 +00 +00 +02 +00 +24 +03 +00 +00 +90 +00 +00 +00 +02 +00 +31 +03 +00 +00 +91 +00 +00 +00 +02 +00 +3e +03 +00 +00 +92 +00 +00 +00 +02 +00 +9b +00 +00 +00 +02 +00 +60 +00 +00 +00 +01 +01 +fb +0e +0d +00 +01 +01 +01 +01 +00 +00 +00 +01 +00 +00 +01 +2f +75 +73 +72 +2f +69 +6e +63 +6c +75 +64 +65 +00 +2f +75 +73 +72 +2f +69 +6e +63 +6c +75 +64 +65 +2f +62 +69 +74 +73 +00 +00 +74 +65 +73 +74 +5f +68 +64 +2e +63 +00 +00 +00 +00 +73 +74 +64 +69 +6f +2e +68 +00 +01 +00 +00 +6c +69 +62 +69 +6f +2e +68 +00 +01 +00 +00 +74 +79 +70 +65 +73 +2e +68 +00 +02 +00 +00 +00 +00 +09 +02 +00 +00 +00 +00 +00 +00 +00 +00 +03 +20 +01 +08 +5c +59 +03 +15 +08 +9e +03 +6f +08 +90 +08 +22 +3a +3e +88 +d5 +cb +bf +84 +8e +30 +03 +7a +9e +08 +6c +03 +7a +90 +5e +03 +72 +9e +02 +21 +00 +01 +01 +6d +00 +00 +00 +17 +00 +00 +00 +01 +00 +55 +73 +61 +67 +65 +3a +20 +25 +73 +20 +3c +66 +69 +6c +65 +3e +0a +00 +72 +62 +00 +43 +6f +75 +6c +64 +20 +6e +6f +74 +20 +6f +70 +65 +6e +20 +60 +25 +73 +27 +2e +0a +00 +25 +30 +32 +78 +20 +0a +00 +45 +72 +72 +6f +72 +20 +72 +65 +61 +64 +69 +6e +67 +20 +66 +72 +6f +6d +20 +60 +25 +73 +27 +2e +0a +00 +14 +00 +00 +00 +ff +ff +ff +ff +01 +00 +01 +78 +10 +0c +07 +08 +90 +01 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +00 +00 +00 +00 +04 +0a +00 +00 +00 +83 +04 +86 +03 +04 +0c +00 +00 +00 +0e +20 +8c +02 +00 +00 +00 +00 +00 +00 +1c +00 +00 +00 +45 +00 +00 +00 +02 +00 +20 +00 +00 +00 +16 +00 +00 +00 +01 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +00 +01 +78 +10 +0c +07 +08 +90 +01 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +00 +00 +00 +00 +04 +0a +00 +00 +00 +83 +04 +86 +03 +04 +0c +00 +00 +00 +0e +20 +8c +02 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +16 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +16 +00 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +16 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +48 +00 +00 +00 +00 +00 +00 +00 +49 +00 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +49 +00 +00 +00 +00 +00 +00 +00 +b3 +00 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +b3 +00 +00 +00 +00 +00 +00 +00 +b4 +00 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +b4 +00 +00 +00 +00 +00 +00 +00 +e2 +00 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +e2 +00 +00 +00 +00 +00 +00 +00 +e3 +00 +00 +00 +00 +00 +00 +00 +02 +00 +77 +68 +e3 +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +00 +00 +00 +00 +02 +00 +77 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +25 +00 +00 +00 +00 +00 +00 +00 +01 +00 +55 +49 +00 +00 +00 +00 +00 +00 +00 +54 +00 +00 +00 +00 +00 +00 +00 +01 +00 +55 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1b +00 +00 +00 +00 +00 +00 +00 +01 +00 +54 +1b +00 +00 +00 +00 +00 +00 +00 +3f +00 +00 +00 +00 +00 +00 +00 +01 +00 +56 +49 +00 +00 +00 +00 +00 +00 +00 +a8 +00 +00 +00 +00 +00 +00 +00 +01 +00 +56 +b4 +00 +00 +00 +00 +00 +00 +00 +d4 +00 +00 +00 +00 +00 +00 +00 +01 +00 +56 +e3 +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +00 +00 +00 +00 +01 +00 +56 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +36 +00 +00 +00 +00 +00 +00 +00 +3a +00 +00 +00 +00 +00 +00 +00 +01 +00 +53 +62 +00 +00 +00 +00 +00 +00 +00 +65 +00 +00 +00 +00 +00 +00 +00 +01 +00 +50 +68 +00 +00 +00 +00 +00 +00 +00 +a3 +00 +00 +00 +00 +00 +00 +00 +01 +00 +53 +b4 +00 +00 +00 +00 +00 +00 +00 +cf +00 +00 +00 +00 +00 +00 +00 +01 +00 +53 +e3 +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +00 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +00 +00 +00 +00 +00 +00 +00 +79 +00 +00 +00 +00 +00 +00 +00 +01 +00 +50 +79 +00 +00 +00 +00 +00 +00 +00 +7e +00 +00 +00 +00 +00 +00 +00 +01 +00 +54 +86 +00 +00 +00 +00 +00 +00 +00 +93 +00 +00 +00 +00 +00 +00 +00 +01 +00 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +02 +00 +00 +00 +00 +00 +4b +03 +00 +00 +b6 +02 +00 +00 +6d +61 +69 +6e +00 +00 +00 +00 +00 +06 +00 +00 +00 +09 +00 +00 +00 +02 +00 +2c +00 +00 +00 +02 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +09 +00 +00 +00 +02 +00 +10 +00 +00 +00 +0d +00 +00 +00 +01 +00 +5f +5f +6f +66 +66 +5f +74 +00 +5f +49 +4f +5f +72 +65 +61 +64 +5f +70 +74 +72 +00 +5f +63 +68 +61 +69 +6e +00 +5f +73 +68 +6f +72 +74 +62 +75 +66 +00 +73 +69 +67 +6e +65 +64 +20 +63 +68 +61 +72 +00 +5f +49 +4f +5f +62 +75 +66 +5f +62 +61 +73 +65 +00 +6c +6f +6e +67 +20 +6c +6f +6e +67 +20 +75 +6e +73 +69 +67 +6e +65 +64 +20 +69 +6e +74 +00 +6c +6f +6e +67 +20 +6c +6f +6e +67 +20 +69 +6e +74 +00 +62 +66 +69 +6c +65 +00 +5f +66 +69 +6c +65 +6e +6f +00 +5f +49 +4f +5f +72 +65 +61 +64 +5f +65 +6e +64 +00 +6c +6f +6e +67 +20 +69 +6e +74 +00 +5f +66 +6c +61 +67 +73 +00 +5f +49 +4f +5f +62 +75 +66 +5f +65 +6e +64 +00 +5f +63 +75 +72 +5f +63 +6f +6c +75 +6d +6e +00 +5f +6f +6c +64 +5f +6f +66 +66 +73 +65 +74 +00 +5f +6f +66 +66 +73 +65 +74 +00 +6d +61 +69 +6e +00 +73 +74 +64 +69 +6e +00 +75 +6e +73 +69 +67 +6e +65 +64 +20 +69 +6e +74 +00 +6c +6f +6e +67 +20 +75 +6e +73 +69 +67 +6e +65 +64 +20 +69 +6e +74 +00 +74 +65 +73 +74 +5f +68 +64 +2e +63 +00 +5f +49 +4f +5f +77 +72 +69 +74 +65 +5f +70 +74 +72 +00 +5f +73 +62 +75 +66 +00 +73 +68 +6f +72 +74 +20 +75 +6e +73 +69 +67 +6e +65 +64 +20 +69 +6e +74 +00 +5f +6c +6f +63 +6b +00 +73 +74 +64 +6f +75 +74 +00 +5f +66 +6c +61 +67 +73 +32 +00 +5f +6d +6f +64 +65 +00 +46 +49 +4c +45 +00 +5f +49 +4f +5f +73 +61 +76 +65 +5f +62 +61 +73 +65 +00 +5f +49 +4f +5f +77 +72 +69 +74 +65 +5f +65 +6e +64 +00 +2f +68 +6f +6d +65 +2f +70 +65 +74 +65 +2f +79 +61 +73 +6d +00 +5f +49 +4f +5f +6c +6f +63 +6b +5f +74 +00 +5f +49 +4f +5f +46 +49 +4c +45 +00 +5f +49 +4f +5f +6d +61 +72 +6b +65 +72 +00 +5f +70 +6f +73 +00 +5f +6d +61 +72 +6b +65 +72 +73 +00 +75 +6e +73 +69 +67 +6e +65 +64 +20 +63 +68 +61 +72 +00 +73 +68 +6f +72 +74 +20 +69 +6e +74 +00 +5f +76 +74 +61 +62 +6c +65 +5f +6f +66 +66 +73 +65 +74 +00 +63 +68 +61 +72 +00 +47 +4e +55 +20 +43 +20 +34 +2e +30 +2e +32 +20 +28 +44 +65 +62 +69 +61 +6e +20 +34 +2e +30 +2e +32 +2d +32 +29 +00 +5f +6e +65 +78 +74 +00 +5f +5f +6f +66 +66 +36 +34 +5f +74 +00 +5f +49 +4f +5f +72 +65 +61 +64 +5f +62 +61 +73 +65 +00 +5f +49 +4f +5f +73 +61 +76 +65 +5f +65 +6e +64 +00 +5f +5f +70 +61 +64 +31 +00 +5f +5f +70 +61 +64 +32 +00 +5f +75 +6e +75 +73 +65 +64 +32 +00 +73 +74 +64 +65 +72 +72 +00 +61 +72 +67 +76 +00 +5f +49 +4f +5f +62 +61 +63 +6b +75 +70 +5f +62 +61 +73 +65 +00 +61 +72 +67 +63 +00 +5f +49 +4f +5f +77 +72 +69 +74 +65 +5f +62 +61 +73 +65 +00 +00 +47 +43 +43 +3a +20 +28 +47 +4e +55 +29 +20 +34 +2e +30 +2e +32 +20 +28 +44 +65 +62 +69 +61 +6e +20 +34 +2e +30 +2e +32 +2d +32 +29 +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +74 +65 +73 +74 +5f +68 +64 +2e +63 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +04 +01 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +01 +e8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ae +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +00 +00 +be +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +03 +01 +4b +03 +00 +00 +43 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ca +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +03 +00 +00 +00 +00 +00 +d8 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +03 +01 +9f +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e4 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +03 +00 +2e +4c +74 +65 +78 +74 +30 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +f2 +00 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +03 +01 +4c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +4c +43 +30 +00 +00 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +03 +00 +2e +4c +43 +31 +00 +00 +00 +00 +12 +00 +00 +00 +05 +00 +00 +00 +03 +00 +2e +4c +43 +32 +00 +00 +00 +00 +15 +00 +00 +00 +05 +00 +00 +00 +03 +00 +2e +4c +43 +33 +00 +00 +00 +00 +2b +00 +00 +00 +05 +00 +00 +00 +03 +00 +2e +4c +43 +34 +00 +00 +00 +00 +32 +00 +00 +00 +05 +00 +00 +00 +03 +00 +6d +61 +69 +6e +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +02 +00 +2e +4c +46 +42 +32 +36 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +30 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +43 +46 +49 +30 +00 +00 +05 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +43 +46 +49 +31 +00 +00 +0a +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +43 +46 +49 +32 +00 +00 +12 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +43 +46 +49 +33 +00 +00 +16 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +31 +00 +00 +00 +16 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +32 +00 +00 +00 +00 +00 +50 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +32 +00 +00 +00 +1b +00 +00 +00 +01 +00 +00 +00 +03 +00 +73 +74 +64 +65 +72 +72 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +2e +4c +56 +4c +33 +00 +00 +00 +25 +00 +00 +00 +01 +00 +00 +00 +03 +00 +66 +70 +72 +69 +6e +74 +66 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +2e +4c +56 +4c +34 +00 +00 +00 +36 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +34 +00 +00 +00 +00 +00 +36 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +35 +00 +00 +00 +3a +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +36 +00 +00 +00 +3f +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +37 +00 +00 +00 +48 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +38 +00 +00 +00 +49 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +39 +00 +00 +00 +54 +00 +00 +00 +01 +00 +00 +00 +03 +00 +66 +6f +70 +65 +6e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +2e +4c +56 +4c +31 +30 +00 +00 +62 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +31 +31 +00 +00 +65 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +31 +32 +00 +00 +68 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +31 +32 +00 +00 +00 +00 +7e +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +31 +36 +00 +00 +00 +00 +e3 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +31 +33 +00 +00 +6c +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +37 +00 +00 +00 +00 +00 +70 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +31 +34 +00 +00 +79 +00 +00 +00 +01 +00 +00 +00 +03 +00 +70 +72 +69 +6e +74 +66 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +2e +4c +56 +4c +31 +35 +00 +00 +7e +00 +00 +00 +01 +00 +00 +00 +03 +00 +66 +67 +65 +74 +63 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +2e +4c +56 +4c +31 +36 +00 +00 +86 +00 +00 +00 +01 +00 +00 +00 +03 +00 +66 +65 +72 +72 +6f +72 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +2e +4c +56 +4c +31 +37 +00 +00 +93 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +31 +35 +00 +00 +00 +00 +b4 +00 +00 +00 +01 +00 +00 +00 +03 +00 +66 +63 +6c +6f +73 +65 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +2e +4c +56 +4c +31 +38 +00 +00 +a3 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +31 +39 +00 +00 +a8 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +32 +30 +00 +00 +b3 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +32 +31 +00 +00 +b4 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +32 +32 +00 +00 +cf +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +32 +33 +00 +00 +d4 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +32 +34 +00 +00 +e2 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +56 +4c +32 +35 +00 +00 +e3 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +4c +46 +45 +32 +36 +00 +00 +04 +01 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +01 +01 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +03 +01 +48 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +4c +66 +72 +61 +6d +65 +30 +00 +00 +00 +00 +06 +00 +00 +00 +03 +00 +2e +4c +45 +43 +49 +45 +30 +00 +18 +00 +00 +00 +06 +00 +00 +00 +03 +00 +2e +4c +53 +43 +49 +45 +30 +00 +04 +00 +00 +00 +06 +00 +00 +00 +03 +00 +2e +4c +53 +46 +44 +45 +30 +00 +18 +00 +00 +00 +06 +00 +00 +00 +03 +00 +2e +4c +45 +46 +44 +45 +30 +00 +48 +00 +00 +00 +06 +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +44 +45 +30 +1c +00 +00 +00 +06 +00 +00 +00 +03 +00 +00 +00 +00 +00 +0e +01 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +01 +48 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +4c +66 +72 +61 +6d +65 +31 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +2e +4c +45 +43 +49 +45 +31 +00 +18 +00 +00 +00 +07 +00 +00 +00 +03 +00 +2e +4c +53 +43 +49 +45 +31 +00 +04 +00 +00 +00 +07 +00 +00 +00 +03 +00 +2e +4c +53 +46 +44 +45 +31 +00 +18 +00 +00 +00 +07 +00 +00 +00 +03 +00 +2e +4c +45 +46 +44 +45 +31 +00 +48 +00 +00 +00 +07 +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +44 +45 +31 +1c +00 +00 +00 +07 +00 +00 +00 +03 +00 +2e +4c +65 +74 +65 +78 +74 +30 +04 +01 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +18 +01 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +03 +01 +0d +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +23 +01 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +03 +00 +2e +4c +4c +53 +54 +30 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +03 +00 +2e +4c +4c +53 +54 +31 +00 +00 +b0 +00 +00 +00 +08 +00 +00 +00 +03 +00 +2e +4c +4c +53 +54 +32 +00 +00 +e6 +00 +00 +00 +08 +00 +00 +00 +03 +00 +2e +4c +4c +53 +54 +33 +00 +00 +55 +01 +00 +00 +08 +00 +00 +00 +03 +00 +2e +4c +4c +53 +54 +34 +00 +00 +c4 +01 +00 +00 +08 +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +35 +31 +00 +bb +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +35 +32 +00 +e5 +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +35 +33 +00 +52 +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +30 +00 +00 +d3 +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +31 +00 +00 +8f +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +32 +00 +00 +03 +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +33 +00 +00 +c6 +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +34 +00 +00 +26 +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +35 +00 +00 +9d +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +36 +00 +00 +7f +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +37 +00 +00 +00 +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +38 +00 +00 +de +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +39 +00 +00 +b6 +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +31 +30 +00 +31 +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +33 +38 +00 +6d +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +31 +31 +00 +88 +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +31 +32 +00 +08 +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +31 +33 +00 +72 +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +31 +34 +00 +e8 +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +31 +35 +00 +3b +02 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +31 +36 +00 +ef +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +31 +37 +00 +44 +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +31 +38 +00 +32 +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +31 +39 +00 +8f +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +32 +30 +00 +36 +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +32 +31 +00 +26 +02 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +32 +32 +00 +f6 +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +32 +33 +00 +86 +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +32 +34 +00 +15 +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +32 +35 +00 +6a +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +32 +36 +00 +23 +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +32 +37 +00 +a7 +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +32 +38 +00 +9b +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +32 +39 +00 +a7 +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +33 +30 +00 +1c +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +33 +31 +00 +16 +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +33 +32 +00 +b3 +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +33 +33 +00 +03 +02 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +33 +34 +00 +0a +02 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +33 +35 +00 +2b +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +33 +36 +00 +11 +02 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +33 +37 +00 +62 +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +33 +39 +00 +76 +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +34 +30 +00 +d8 +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +34 +31 +00 +fd +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +34 +32 +00 +81 +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +34 +33 +00 +3f +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +34 +34 +00 +56 +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +35 +34 +00 +bb +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +34 +35 +00 +36 +02 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +34 +36 +00 +21 +02 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +34 +37 +00 +64 +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +34 +38 +00 +c0 +00 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +34 +39 +00 +1c +01 +00 +00 +0b +00 +00 +00 +03 +00 +2e +4c +41 +53 +46 +35 +30 +00 +1a +02 +00 +00 +0b +00 +00 +00 +03 +00 +00 +00 +00 +00 +30 +01 +00 +00 +00 +00 +00 +00 +09 +00 +00 +00 +03 +01 +1b +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +01 +30 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4f +01 +00 +00 +00 +00 +00 +00 +0b +00 +00 +00 +03 +01 +4a +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5a +01 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +03 +01 +23 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +65 +01 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +03 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +75 +01 +00 +00 +2e +64 +65 +62 +75 +67 +5f +61 +62 +62 +72 +65 +76 +00 +2e +64 +65 +62 +75 +67 +5f +69 +6e +66 +6f +00 +2e +64 +65 +62 +75 +67 +5f +6c +69 +6e +65 +00 +2e +72 +6f +64 +61 +74 +61 +2e +73 +74 +72 +31 +2e +31 +00 +2e +64 +65 +62 +75 +67 +5f +66 +72 +61 +6d +65 +00 +2e +65 +68 +5f +66 +72 +61 +6d +65 +00 +2e +64 +65 +62 +75 +67 +5f +6c +6f +63 +00 +2e +64 +65 +62 +75 +67 +5f +70 +75 +62 +6e +61 +6d +65 +73 +00 +2e +64 +65 +62 +75 +67 +5f +61 +72 +61 +6e +67 +65 +73 +00 +2e +64 +65 +62 +75 +67 +5f +73 +74 +72 +00 +2e +72 +64 +61 +74 +61 +24 +7a +7a +7a +00 +2e +6e +6f +74 +65 +2e +47 +4e +55 +2d +73 +74 +61 +63 +6b +00 +2e +64 +65 +62 +75 +67 +5f +61 +62 +62 +72 +65 +76 +00 +2e +4c +64 +65 +62 +75 +67 +5f +61 +62 +62 +72 +65 +76 +30 +00 +2e +64 +65 +62 +75 +67 +5f +69 +6e +66 +6f +00 +2e +4c +64 +65 +62 +75 +67 +5f +69 +6e +66 +6f +30 +00 +2e +64 +65 +62 +75 +67 +5f +6c +69 +6e +65 +00 +2e +4c +64 +65 +62 +75 +67 +5f +6c +69 +6e +65 +30 +00 +2e +72 +6f +64 +61 +74 +61 +2e +73 +74 +72 +31 +2e +31 +00 +2e +64 +65 +62 +75 +67 +5f +66 +72 +61 +6d +65 +00 +2e +65 +68 +5f +66 +72 +61 +6d +65 +00 +2e +64 +65 +62 +75 +67 +5f +6c +6f +63 +00 +2e +4c +64 +65 +62 +75 +67 +5f +6c +6f +63 +30 +00 +2e +64 +65 +62 +75 +67 +5f +70 +75 +62 +6e +61 +6d +65 +73 +00 +2e +64 +65 +62 +75 +67 +5f +61 +72 +61 +6e +67 +65 +73 +00 +2e +64 +65 +62 +75 +67 +5f +73 +74 +72 +00 +2e +72 +64 +61 +74 +61 +24 +7a +7a +7a +00 +2e +6e +6f +74 +65 +2e +47 +4e +55 +2d +73 +74 +61 +63 +6b +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/null/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/null/CMakeLists.txt new file mode 100644 index 0000000000..9f85b2fd79 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/null/CMakeLists.txt @@ -0,0 +1,3 @@ +YASM_ADD_MODULE(dbgfmt_null + dbgfmts/null/null-dbgfmt.c + ) diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/null/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/null/Makefile.inc new file mode 100644 index 0000000000..94f7cdbe69 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/null/Makefile.inc @@ -0,0 +1,3 @@ +libyasm_a_SOURCES += modules/dbgfmts/null/null-dbgfmt.c + +YASM_MODULES += dbgfmt_null diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/null/null-dbgfmt.c b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/null/null-dbgfmt.c new file mode 100644 index 0000000000..d2d1bed58e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/null/null-dbgfmt.c @@ -0,0 +1,64 @@ +/* + * Null debugging format (creates NO debugging information) + * + * Copyright (C) 2002-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + + +yasm_dbgfmt_module yasm_null_LTX_dbgfmt; + + +static /*@null@*/ /*@only@*/ yasm_dbgfmt * +null_dbgfmt_create(yasm_object *object) +{ + yasm_dbgfmt_base *dbgfmt = yasm_xmalloc(sizeof(yasm_dbgfmt_base)); + dbgfmt->module = &yasm_null_LTX_dbgfmt; + return (yasm_dbgfmt *)dbgfmt; +} + +static void +null_dbgfmt_destroy(/*@only@*/ yasm_dbgfmt *dbgfmt) +{ + yasm_xfree(dbgfmt); +} + +static void +null_dbgfmt_generate(yasm_object *object, yasm_linemap *linemap, + yasm_errwarns *errwarns) +{ +} + + +/* Define dbgfmt structure -- see dbgfmt.h for details */ +yasm_dbgfmt_module yasm_null_LTX_dbgfmt = { + "No debugging info", + "null", + NULL, /* no directives */ + null_dbgfmt_create, + null_dbgfmt_destroy, + null_dbgfmt_generate +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/CMakeLists.txt new file mode 100644 index 0000000000..bd3b026898 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/CMakeLists.txt @@ -0,0 +1,3 @@ +YASM_ADD_MODULE(dbgfmt_stabs + dbgfmts/stabs/stabs-dbgfmt.c + ) diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/Makefile.inc new file mode 100644 index 0000000000..745c0decff --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/Makefile.inc @@ -0,0 +1,6 @@ +libyasm_a_SOURCES += modules/dbgfmts/stabs/stabs-dbgfmt.c + +YASM_MODULES += dbgfmt_stabs + +EXTRA_DIST += modules/dbgfmts/stabs/tests/Makefile.inc +include modules/dbgfmts/stabs/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/stabs-dbgfmt.c b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/stabs-dbgfmt.c new file mode 100644 index 0000000000..5c0cba6aeb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/stabs-dbgfmt.c @@ -0,0 +1,511 @@ +/* + * Stabs debugging format + * + * Copyright (C) 2003-2007 Michael Urman + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +typedef enum { + N_UNDF = 0x00, /* Undefined */ + N_GSYM = 0x20, /* Global symbol */ + N_FNAME = 0x22, /* Function name (BSD Fortran) */ + N_FUN = 0x24, /* Function name or Text segment variable */ + N_STSYM = 0x26, /* Data segment file-scope variable */ + N_LCSYM = 0x28, /* BSS segment file-scope variable */ + N_MAIN = 0x2a, /* Name of main routine */ + N_ROSYM = 0x2c, /* Variable in .rodata section */ + N_PC = 0x30, /* Global symbol (Pascal) */ + N_SYMS = 0x32, /* Number of symbols (Ultrix V4.0) */ + N_NOMAP = 0x34, /* No DST map */ + N_OBJ = 0x38, /* Object file (Solaris2) */ + N_OPT = 0x3c, /* Debugger options (Solaris2) */ + N_RSYM = 0x40, /* Register variable */ + N_M2C = 0x42, /* Modula-2 compilation unit */ + N_SLINE = 0x44, /* Line numbers in .text segment */ + N_DSLINE = 0x46, /* Line numbers in .data segment */ + N_BSLINE = 0x48, /* Line numbers in .bss segment */ + N_BROWS = 0x48, /* Source code .cb file's path */ + N_DEFD = 0x4a, /* GNU Modula-2 definition module dependency */ + N_FLINE = 0x4c, /* Function start/body/end line numbers (Solaris2) */ + N_EHDECL = 0x50, /* GNU C++ exception variable */ + N_MOD2 = 0x50, /* Modula2 info for imc (Ultrix V4.0) */ + N_CATCH = 0x54, /* GNU C++ catch clause */ + N_SSYM = 0x60, /* Structure or union element */ + N_ENDM = 0x62, /* Last stab for module (Solaris2) */ + N_SO = 0x64, /* Path and name of source files */ + N_LSYM = 0x80, /* Stack variable */ + N_BINCL = 0x84, /* Beginning of include file */ + N_SOL = 0x84, /* Name of include file */ + N_PSYM = 0xa0, /* Parameter variable */ + N_EINCL = 0xa2, /* End of include file */ + N_ENTRY = 0xa4, /* Alternate entry point */ + N_LBRAC = 0xc0, /* Beginning of lexical block */ + N_EXCL = 0xc2, /* Placeholder for a deleted include file */ + N_SCOPE = 0xc4, /* Modula 2 scope info (Sun) */ + N_RBRAC = 0xe0, /* End of lexical block */ + N_BCOMM = 0xe2, /* Begin named common block */ + N_ECOMM = 0xe4, /* End named common block */ + N_ECOML = 0xe8, /* Member of common block */ + N_WITH = 0xea, /* Pascal with statement: type,,0,0,offset (Solaris2) */ + N_NBTEXT = 0xf0, /* Gould non-base registers */ + N_NBDATA = 0xf2, /* Gould non-base registers */ + N_NBBSS = 0xf4, /* Gould non-base registers */ + N_NBSTS = 0xf6, /* Gould non-base registers */ + N_NBLCS = 0xf8 /* Gould non-base registers */ +} stabs_stab_type; + +typedef struct yasm_dbgfmt_stabs { + yasm_dbgfmt_base dbgfmt; /* base structure */ +} yasm_dbgfmt_stabs; + +typedef struct { + unsigned long lastline; /* track line and file of bytecodes */ + unsigned long curline; + const char *lastfile; + const char *curfile; + + unsigned int stablen; /* size of a stab for current machine */ + unsigned long stabcount; /* count stored stabs; doesn't include first */ + + yasm_section *stab; /* sections to which stabs, stabstrs appended */ + yasm_section *stabstr; + + yasm_bytecode *basebc; /* base bytecode from which to track SLINEs */ + + yasm_object *object; + yasm_linemap *linemap; + yasm_errwarns *errwarns; +} stabs_info; + +typedef struct { + /*@null@*/ yasm_bytecode *bcstr; /* bytecode in stabstr for string */ + stabs_stab_type type; /* stab type: N_* */ + unsigned char other; /* unused, but stored here anyway */ + unsigned short desc; /* description element of a stab */ + /*@null@*/ yasm_symrec *symvalue; /* value element needing relocation */ + /*@null@*/yasm_bytecode *bcvalue; /* relocated stab's bytecode */ + unsigned long value; /* fallthrough value if above NULL */ +} stabs_stab; + +/* Bytecode callback function prototypes */ + +static void stabs_bc_str_destroy(void *contents); +static void stabs_bc_str_print(const void *contents, FILE *f, int + indent_level); +static int stabs_bc_str_calc_len + (yasm_bytecode *bc, yasm_bc_add_span_func add_span, void *add_span_data); +static int stabs_bc_str_tobytes + (yasm_bytecode *bc, unsigned char **bufp, unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +static void stabs_bc_stab_destroy(void *contents); +static void stabs_bc_stab_print(const void *contents, FILE *f, int + indent_level); +static int stabs_bc_stab_calc_len + (yasm_bytecode *bc, yasm_bc_add_span_func add_span, void *add_span_data); +static int stabs_bc_stab_tobytes + (yasm_bytecode *bc, unsigned char **bufp, unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +/* Bytecode callback structures */ + +static const yasm_bytecode_callback stabs_bc_str_callback = { + stabs_bc_str_destroy, + stabs_bc_str_print, + yasm_bc_finalize_common, + NULL, + stabs_bc_str_calc_len, + yasm_bc_expand_common, + stabs_bc_str_tobytes, + 0 +}; + +static const yasm_bytecode_callback stabs_bc_stab_callback = { + stabs_bc_stab_destroy, + stabs_bc_stab_print, + yasm_bc_finalize_common, + NULL, + stabs_bc_stab_calc_len, + yasm_bc_expand_common, + stabs_bc_stab_tobytes, + 0 +}; + +yasm_dbgfmt_module yasm_stabs_LTX_dbgfmt; + + +static /*@null@*/ /*@only@*/ yasm_dbgfmt * +stabs_dbgfmt_create(yasm_object *object) +{ + yasm_dbgfmt_stabs *dbgfmt_stabs = yasm_xmalloc(sizeof(yasm_dbgfmt_stabs)); + dbgfmt_stabs->dbgfmt.module = &yasm_stabs_LTX_dbgfmt; + return (yasm_dbgfmt *)dbgfmt_stabs; +} + +static void +stabs_dbgfmt_destroy(/*@only@*/ yasm_dbgfmt *dbgfmt) +{ + yasm_xfree(dbgfmt); +} + +/* Create and add a new strtab-style string bytecode to a section, updating + * offset on insertion; no optimization necessary */ +/* Copies the string, so you must still free yours as normal */ +static yasm_bytecode * +stabs_dbgfmt_append_bcstr(yasm_section *sect, const char *str) +{ + yasm_bytecode *bc; + + bc = yasm_bc_create_common(&stabs_bc_str_callback, yasm__xstrdup(str), 0); + bc->len = (unsigned long)(strlen(str)+1); + bc->offset = yasm_bc_next_offset(yasm_section_bcs_last(sect)); + + yasm_section_bcs_append(sect, bc); + + return bc; +} + +/* Create and add a new stab bytecode to a section, updating offset on + * insertion; no optimization necessary. */ +/* Requires a string bytecode, or NULL, for its string entry */ +static stabs_stab * +stabs_dbgfmt_append_stab(stabs_info *info, yasm_section *sect, + /*@null@*/ yasm_bytecode *bcstr, stabs_stab_type type, + unsigned long desc, /*@null@*/ yasm_symrec *symvalue, + /*@null@*/ yasm_bytecode *bcvalue, unsigned long value) +{ + yasm_bytecode *bc; + stabs_stab *stab = yasm_xmalloc(sizeof(stabs_stab)); + + stab->other = 0; + stab->bcstr = bcstr; + stab->type = type; + stab->desc = (unsigned short)desc; + stab->symvalue = symvalue; + stab->bcvalue = bcvalue; + stab->value = value; + + bc = yasm_bc_create_common(&stabs_bc_stab_callback, stab, + bcvalue ? bcvalue->line : 0); + bc->len = info->stablen; + bc->offset = yasm_bc_next_offset(yasm_section_bcs_last(sect)); + + yasm_section_bcs_append(sect, bc); + + info->stabcount++; + return stab; +} + +static void +stabs_dbgfmt_generate_n_fun(stabs_info *info, yasm_bytecode *bc) +{ + /* check all syms at this bc for potential function syms */ + int bcsym; + for (bcsym=0; bc->symrecs && bc->symrecs[bcsym]; bcsym++) + { + char *str; + yasm_symrec *sym = bc->symrecs[bcsym]; + const char *name = yasm_symrec_get_name(sym); + + /* best guess algorithm - ignore labels containing a . or $ */ + if (strchr(name, '.') || strchr(name, '$')) + continue; + + /* if a function, update basebc, and output a funcname:F1 stab */ + info->basebc = bc; + + str = yasm_xmalloc(strlen(name)+4); + strcpy(str, name); + strcat(str, ":F1"); + stabs_dbgfmt_append_stab(info, info->stab, + stabs_dbgfmt_append_bcstr(info->stabstr, str), + N_FUN, 0, sym, info->basebc, 0); + yasm_xfree(str); + break; + } +} + +static int +stabs_dbgfmt_generate_bcs(yasm_bytecode *bc, void *d) +{ + stabs_info *info = (stabs_info *)d; + yasm_linemap_lookup(info->linemap, bc->line, &info->curfile, + &info->curline); + + /* check for new function */ + stabs_dbgfmt_generate_n_fun(info, bc); + + if (info->lastfile != info->curfile) { + info->lastline = 0; /* new file, so line changes */ + /*stabs_dbgfmt_append_stab(info, info->stab, + stabs_dbgfmt_append_bcstr(info->stabstr, info->curfile), + N_SOL, 0, NULL, bc, 0);*/ + } + + /* output new line stabs if there's a basebc (known function) */ + if (info->basebc != NULL && info->curline != info->lastline) { + info->lastline = bc->line; + stabs_dbgfmt_append_stab(info, info->stab, NULL, N_SLINE, + info->curline, NULL, NULL, + bc->offset - info->basebc->offset); + } + + info->lastline = info->curline; + info->lastfile = info->curfile; + + return 0; +} + +static int +stabs_dbgfmt_generate_sections(yasm_section *sect, /*@null@*/ void *d) +{ + stabs_info *info = (stabs_info *)d; + const char *sectname=yasm_section_get_name(sect); + + /* each section has a different base symbol */ + info->basebc = NULL; + + /* handle first (pseudo) bc separately */ + stabs_dbgfmt_generate_n_fun(d, yasm_section_bcs_first(sect)); + + yasm_section_bcs_traverse(sect, info->errwarns, d, + stabs_dbgfmt_generate_bcs); + + if (yasm__strcasecmp(sectname, ".text")==0) { + /* Close out last function by appending a null SO stab after last bc */ + yasm_bytecode *bc = yasm_section_bcs_last(sect); + yasm_symrec *sym = + yasm_symtab_define_label(info->object->symtab, ".n_so", bc, 1, + bc->line); + stabs_dbgfmt_append_stab(info, info->stab, 0, N_SO, 0, sym, bc, 0); + } + + return 1; +} + +static void +stabs_dbgfmt_generate(yasm_object *object, yasm_linemap *linemap, + yasm_errwarns *errwarns) +{ + stabs_info info; + int new; + yasm_bytecode *dbgbc; + stabs_stab *stab; + yasm_bytecode *filebc, *laststr, *firstbc; + yasm_symrec *firstsym; + yasm_section *stext; + + /* Stablen is determined by arch/machine */ + if (yasm__strcasecmp(yasm_arch_keyword(object->arch), "x86") == 0) { + info.stablen = 12; + } + else /* unknown machine; generate nothing */ + return; + + info.object = object; + info.linemap = linemap; + info.errwarns = errwarns; + info.lastline = 0; + info.stabcount = 0; + info.stab = yasm_object_get_general(object, ".stab", 4, 0, 0, &new, 0); + if (!new) { + yasm_bytecode *last = yasm_section_bcs_last(info.stab); + if (last == NULL) { + yasm_error_set(YASM_ERROR_GENERAL, + N_("stabs debugging conflicts with user-defined section .stab")); + yasm_errwarn_propagate(errwarns, + yasm_section_bcs_first(info.stab)->line); + } else { + yasm_warn_set(YASM_WARN_GENERAL, + N_("stabs debugging overrides empty section .stab")); + yasm_errwarn_propagate(errwarns, 0); + } + } + + info.stabstr = + yasm_object_get_general(object, ".stabstr", 1, 0, 0, &new, 0); + if (!new) { + yasm_bytecode *last = yasm_section_bcs_last(info.stabstr); + if (last == NULL) { + yasm_error_set(YASM_ERROR_GENERAL, + N_("stabs debugging conflicts with user-defined section .stabstr")); + yasm_errwarn_propagate(errwarns, + yasm_section_bcs_first(info.stab)->line); + } else { + yasm_warn_set(YASM_WARN_GENERAL, + N_("stabs debugging overrides empty section .stabstr")); + yasm_errwarn_propagate(errwarns, 0); + } + } + + /* initial pseudo-stab */ + stab = yasm_xmalloc(sizeof(stabs_stab)); + dbgbc = yasm_bc_create_common(&stabs_bc_stab_callback, stab, 0); + dbgbc->len = info.stablen; + dbgbc->offset = 0; + yasm_section_bcs_append(info.stab, dbgbc); + + /* initial strtab bytecodes */ + stabs_dbgfmt_append_bcstr(info.stabstr, ""); + filebc = stabs_dbgfmt_append_bcstr(info.stabstr, object->src_filename); + + stext = yasm_object_find_general(object, ".text"); + firstsym = yasm_symtab_use(object->symtab, ".text", 0); + firstbc = yasm_section_bcs_first(stext); + /* N_SO file stab */ + stabs_dbgfmt_append_stab(&info, info.stab, filebc, N_SO, 0, + firstsym, firstbc, 0); + + yasm_object_sections_traverse(object, (void *)&info, + stabs_dbgfmt_generate_sections); + + /* fill initial pseudo-stab's fields */ + laststr = yasm_section_bcs_last(info.stabstr); + if (laststr == NULL) + yasm_internal_error(".stabstr has no entries"); + + stab->bcvalue = NULL; + stab->symvalue = NULL; + stab->value = yasm_bc_next_offset(laststr); + stab->bcstr = filebc; + stab->type = N_UNDF; + stab->other = 0; + if (info.stabcount > 0xffff) { + yasm_warn_set(YASM_WARN_GENERAL, N_("over 65535 stabs")); + yasm_errwarn_propagate(errwarns, 0); + stab->desc = 0xffff; + } else + stab->desc = (unsigned short)info.stabcount; +} + +static int +stabs_bc_stab_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + yasm_output_reloc_func output_reloc) +{ + /* This entire function, essentially the core of rendering stabs to a file, + * needs to become endian aware. Size appears not to be an issue, as known + * 64-bit systems use truncated values in 32-bit fields. */ + + const stabs_stab *stab = (const stabs_stab *)bc->contents; + unsigned char *buf = *bufp; + + YASM_WRITE_32_L(buf, stab->bcstr ? stab->bcstr->offset : 0); + YASM_WRITE_8(buf, stab->type); + YASM_WRITE_8(buf, stab->other); + YASM_WRITE_16_L(buf, stab->desc); + + if (stab->symvalue != NULL) { + bc->offset += 8; + output_reloc(stab->symvalue, bc, buf, 4, 32, 0, d); + bc->offset -= 8; + buf += 4; + } + else if (stab->bcvalue != NULL) { + YASM_WRITE_32_L(buf, stab->bcvalue->offset); + } + else { + YASM_WRITE_32_L(buf, stab->value); + } + + *bufp = buf; + return 0; +} + +static int +stabs_bc_str_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + yasm_output_reloc_func output_reloc) +{ + const char *str = (const char *)bc->contents; + unsigned char *buf = *bufp; + + strcpy((char *)buf, str); + buf += strlen(str)+1; + + *bufp = buf; + return 0; +} + +static void +stabs_bc_stab_destroy(void *contents) +{ + yasm_xfree(contents); +} + +static void +stabs_bc_str_destroy(void *contents) +{ + yasm_xfree(contents); +} + +static void +stabs_bc_stab_print(const void *contents, FILE *f, int indent_level) +{ + const stabs_stab *stab = (const stabs_stab *)contents; + const char *str = ""; + fprintf(f, "%*s.stabs \"%s\", 0x%x, 0x%x, 0x%x, 0x%lx\n", + indent_level, "", str, stab->type, stab->other, stab->desc, + stab->bcvalue ? stab->bcvalue->offset : stab->value); +} + +static void +stabs_bc_str_print(const void *contents, FILE *f, int indent_level) +{ + fprintf(f, "%*s\"%s\"\n", indent_level, "", (const char *)contents); +} + +static int +stabs_bc_stab_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + yasm_internal_error(N_("tried to resolve a stabs stab bytecode")); + /*@notreached@*/ + return 0; +} + +static int +stabs_bc_str_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + yasm_internal_error(N_("tried to resolve a stabs str bytecode")); + /*@notreached@*/ + return 0; +} + +/* Define dbgfmt structure -- see dbgfmt.h for details */ +yasm_dbgfmt_module yasm_stabs_LTX_dbgfmt = { + "Stabs debugging format", + "stabs", + NULL, /* no directives */ + stabs_dbgfmt_create, + stabs_dbgfmt_destroy, + stabs_dbgfmt_generate +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/tests/Makefile.inc new file mode 100644 index 0000000000..6f789eb8f0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/tests/Makefile.inc @@ -0,0 +1,5 @@ +EXTRA_DIST += modules/dbgfmts/stabs/tests/stabs_test.sh +TESTS += modules/dbgfmts/stabs/tests/stabs_test.sh + +EXTRA_DIST += modules/dbgfmts/stabs/tests/stabs-elf.asm +EXTRA_DIST += modules/dbgfmts/stabs/tests/stabs-elf.hex diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/tests/stabs-elf.asm b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/tests/stabs-elf.asm new file mode 100644 index 0000000000..f88457e69a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/tests/stabs-elf.asm @@ -0,0 +1,83 @@ +; test source file for assembling to ELF +; copied from cofftest.asm; s/_//g s/coff/elf/g +; build with (under Linux, for example): +; yasm -f elf elftest.asm +; gcc -o elftest elftest.c elftest.o + +; This file should test the following: +; [1] Define and export a global text-section symbol +; [2] Define and export a global data-section symbol +; [3] Define and export a global BSS-section symbol +; [4] Define a non-global text-section symbol +; [5] Define a non-global data-section symbol +; [6] Define a non-global BSS-section symbol +; [7] Define a COMMON symbol +; [8] Define a NASM local label +; [9] Reference a NASM local label +; [10] Import an external symbol +; [11] Make a PC-relative call to an external symbol +; [12] Reference a text-section symbol in the text section +; [13] Reference a data-section symbol in the text section +; [14] Reference a BSS-section symbol in the text section +; [15] Reference a text-section symbol in the data section +; [16] Reference a data-section symbol in the data section +; [17] Reference a BSS-section symbol in the data section + +[BITS 32] +[GLOBAL lrotate] ; [1] +[GLOBAL greet] ; [1] +[GLOBAL asmstr] ; [2] +[GLOBAL textptr] ; [2] +[GLOBAL selfptr] ; [2] +[GLOBAL integer] ; [3] +[EXTERN printf] ; [10] +[COMMON commvar 4] ; [7] + +[SECTION .text] + +; prototype: long lrotate(long x, int num); +lrotate: ; [1] + push ebp + mov ebp,esp + mov eax,[ebp+8] + mov ecx,[ebp+12] +.label rol eax,1 ; [4] [8] + loop .label ; [9] [12] + mov esp,ebp + pop ebp + ret + +; prototype: void greet(void); +greet mov eax,[integer] ; [14] + inc eax + mov [localint],eax ; [14] + push dword [commvar] + mov eax,[localptr] ; [13] + push dword [eax] + push dword [integer] ; [1] [14] + push dword printfstr ; [13] + call printf ; [11] + add esp,16 + ret + +[SECTION .data] + +; a string +asmstr db 'hello, world', 0 ; [2] + +; a string for Printf +printfstr db "integer==%d, localint==%d, commvar=%d" + db 10, 0 + +; some pointers +localptr dd localint ; [5] [17] +textptr dd greet ; [15] +selfptr dd selfptr ; [16] + +[SECTION .bss] + +; an integer +integer resd 1 ; [3] + +; a local integer +localint resd 1 ; [6] diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/tests/stabs-elf.hex b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/tests/stabs-elf.hex new file mode 100644 index 0000000000..71cd7c9f54 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/tests/stabs-elf.hex @@ -0,0 +1,1632 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +04 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +0c +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +55 +89 +e5 +8b +45 +08 +8b +4d +0c +d1 +c0 +e2 +fc +89 +ec +5d +c3 +a1 +00 +00 +00 +00 +40 +a3 +04 +00 +00 +00 +ff +35 +00 +00 +00 +00 +a1 +34 +00 +00 +00 +ff +30 +ff +35 +00 +00 +00 +00 +68 +0d +00 +00 +00 +e8 +fc +ff +ff +ff +83 +c4 +10 +c3 +00 +00 +00 +12 +00 +00 +00 +01 +11 +00 +00 +18 +00 +00 +00 +01 +05 +00 +00 +1e +00 +00 +00 +01 +13 +00 +00 +23 +00 +00 +00 +01 +06 +00 +00 +2b +00 +00 +00 +01 +11 +00 +00 +30 +00 +00 +00 +01 +06 +00 +00 +35 +00 +00 +00 +02 +12 +00 +00 +68 +65 +6c +6c +6f +2c +20 +77 +6f +72 +6c +64 +00 +69 +6e +74 +65 +67 +65 +72 +3d +3d +25 +64 +2c +20 +6c +6f +63 +61 +6c +69 +6e +74 +3d +3d +25 +64 +2c +20 +63 +6f +6d +6d +76 +61 +72 +3d +25 +64 +0a +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +01 +05 +00 +00 +38 +00 +00 +00 +01 +0d +00 +00 +3c +00 +00 +00 +01 +10 +00 +00 +01 +00 +00 +00 +00 +00 +18 +00 +17 +00 +00 +00 +01 +00 +00 +00 +64 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +00 +28 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +00 +29 +00 +01 +00 +00 +00 +00 +00 +00 +00 +44 +00 +2a +00 +03 +00 +00 +00 +00 +00 +00 +00 +44 +00 +2b +00 +06 +00 +00 +00 +00 +00 +00 +00 +44 +00 +2c +00 +09 +00 +00 +00 +00 +00 +00 +00 +44 +00 +2d +00 +0b +00 +00 +00 +00 +00 +00 +00 +44 +00 +2e +00 +0d +00 +00 +00 +00 +00 +00 +00 +44 +00 +2f +00 +0f +00 +00 +00 +0e +00 +00 +00 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +00 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +00 +33 +00 +01 +00 +00 +00 +00 +00 +00 +00 +44 +00 +34 +00 +06 +00 +00 +00 +00 +00 +00 +00 +44 +00 +35 +00 +07 +00 +00 +00 +00 +00 +00 +00 +44 +00 +36 +00 +0c +00 +00 +00 +00 +00 +00 +00 +44 +00 +37 +00 +12 +00 +00 +00 +00 +00 +00 +00 +44 +00 +38 +00 +17 +00 +00 +00 +00 +00 +00 +00 +44 +00 +39 +00 +19 +00 +00 +00 +00 +00 +00 +00 +44 +00 +3a +00 +1f +00 +00 +00 +00 +00 +00 +00 +44 +00 +3b +00 +24 +00 +00 +00 +00 +00 +00 +00 +44 +00 +3c +00 +29 +00 +00 +00 +00 +00 +00 +00 +44 +00 +3d +00 +2c +00 +00 +00 +00 +00 +00 +00 +64 +00 +00 +00 +00 +00 +00 +00 +14 +00 +00 +00 +01 +0b +00 +00 +20 +00 +00 +00 +01 +0c +00 +00 +8c +00 +00 +00 +01 +0d +00 +00 +28 +01 +00 +00 +01 +02 +00 +00 +00 +2d +00 +6c +72 +6f +74 +61 +74 +65 +3a +46 +31 +00 +67 +72 +65 +65 +74 +3a +46 +31 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +61 +74 +61 +00 +2e +62 +73 +73 +00 +2e +73 +74 +61 +62 +00 +2e +73 +74 +61 +62 +73 +74 +72 +00 +2e +72 +65 +6c +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +2e +64 +61 +74 +61 +00 +2e +72 +65 +6c +2e +73 +74 +61 +62 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +6c +72 +6f +74 +61 +74 +65 +00 +67 +72 +65 +65 +74 +00 +61 +73 +6d +73 +74 +72 +00 +74 +65 +78 +74 +70 +74 +72 +00 +73 +65 +6c +66 +70 +74 +72 +00 +69 +6e +74 +65 +67 +65 +72 +00 +70 +72 +69 +6e +74 +66 +00 +63 +6f +6d +6d +76 +61 +72 +00 +6c +72 +6f +74 +61 +74 +65 +2e +6c +61 +62 +65 +6c +00 +6c +6f +63 +61 +6c +69 +6e +74 +00 +6c +6f +63 +61 +6c +70 +74 +72 +00 +70 +72 +69 +6e +74 +66 +73 +74 +72 +00 +2e +6e +5f +73 +6f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +69 +00 +00 +00 +3d +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +5f +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +56 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +4d +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +3f +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +0b +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +06 +00 +18 +00 +00 +00 +38 +00 +00 +00 +00 +00 +00 +00 +10 +00 +06 +00 +20 +00 +00 +00 +3c +00 +00 +00 +00 +00 +00 +00 +10 +00 +06 +00 +28 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +08 +00 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +37 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +10 +00 +f2 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4f +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +74 +02 +00 +00 +59 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3f +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +02 +00 +00 +6f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +47 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +03 +00 +00 +40 +01 +00 +00 +02 +00 +00 +00 +0c +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +3d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +38 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +b8 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +2b +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f8 +00 +00 +00 +18 +00 +00 +00 +03 +00 +00 +00 +06 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +0d +00 +00 +00 +08 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +00 +00 +2c +01 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +0c +00 +00 +00 +35 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3c +02 +00 +00 +20 +00 +00 +00 +03 +00 +00 +00 +09 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +18 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5c +02 +00 +00 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/tests/stabs_test.sh b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/tests/stabs_test.sh new file mode 100755 index 0000000000..e04b9522d4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/stabs/tests/stabs_test.sh @@ -0,0 +1,4 @@ +#! /bin/sh +# copied from yasm/modules/objfmts/coff/tests/coff_test.sh ; s/coff/stabs/g +${srcdir}/out_test.sh stabs_test modules/dbgfmts/stabs/tests "stabs dbgfmt" "-f elf -g stabs" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/dbgfmts/yasm_dbgfmts.xml b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/yasm_dbgfmts.xml new file mode 100644 index 0000000000..7cd38a4963 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/dbgfmts/yasm_dbgfmts.xml @@ -0,0 +1,125 @@ + + + + + + + Yasm Supported Debug Formats + October 2006 + Yasm + + Peter + Johnson + +
peter@tortall.net
+
+
+ + + 2006 + Peter Johnson + +
+ + + yasm_dbgfmts + 7 + + + + yasm_dbgfmts + Yasm Supported Debugging Formats + + + + + yasm + + + + + + + + + + + Description + + The standard Yasm distribution includes a number of modules + for different debugging formats. The debugging information is + embedded into the object file. Use of a non-null + debug format also causes Yasm to output all symbols to the object + file (including local symbols). + + The debug format is selected on the + + + yasm + 1 + + + command line by use of the command line + option. + + + + cv8 + + The CV8 debug format is used by Microsoft Visual Studio 2005 + (version 8.0) and is completely undocumented, although it bears + strong similarities to earlier CodeView formats. Yasm's support + for the CV8 debug format is currently limited to generating + assembly-level line number information (to allow some level of + source-level debugging). The CV8 debug information is stored in + the .debug$S and .debug$T sections of the Win64 object file. + + + + dwarf2 + + The DWARF 2 debug format is a complex, well-documented + standard for debugging information. It was created to overcome + shortcomings in STABS, allowing for much more detailed and compact + descriptions of data structures, data variable movement, and + complex language structures such as in C++. The debugging + information is stored in sections (just like normal program + sections) in the object file. Yasm supports full pass-through of + DWARF2 debugging information (e.g. from a C++ compiler), and can + also generate assembly-level line number information. + + + + null + + The null debug format is a placeholder; it adds + no debugging information to the output file. + + + + stabs + + The STABS debug format is a poorly documented, semi-standard + format for debugging information in COFF and ELF object files. The + debugging information is stored as part of the object file's symbol + table and thus is limited in complexity and scope. Despite this, + STABS is a common debugging format on older Unix and compatible + systems, as well as DJGPP. + + + + See Also + + + yasm + 1 + , + + + yasm_objfmts + 7 + + +
diff --git a/third-party/yasm/yasm-1.3.0/modules/listfmts/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/listfmts/CMakeLists.txt new file mode 100644 index 0000000000..ce3c92a099 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/listfmts/CMakeLists.txt @@ -0,0 +1 @@ +INCLUDE(listfmts/nasm/CMakeLists.txt) diff --git a/third-party/yasm/yasm-1.3.0/modules/listfmts/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/listfmts/Makefile.inc new file mode 100644 index 0000000000..77fb2ec50e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/listfmts/Makefile.inc @@ -0,0 +1,3 @@ +EXTRA_DIST += modules/listfmts/nasm/Makefile.inc + +include modules/listfmts/nasm/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/listfmts/nasm/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/listfmts/nasm/CMakeLists.txt new file mode 100644 index 0000000000..9d54f82fa1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/listfmts/nasm/CMakeLists.txt @@ -0,0 +1,3 @@ +YASM_ADD_MODULE(listfmt_nasm + listfmts/nasm/nasm-listfmt.c + ) diff --git a/third-party/yasm/yasm-1.3.0/modules/listfmts/nasm/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/listfmts/nasm/Makefile.inc new file mode 100644 index 0000000000..6f00499eda --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/listfmts/nasm/Makefile.inc @@ -0,0 +1,7 @@ +libyasm_a_SOURCES += modules/listfmts/nasm/nasm-listfmt.c + +YASM_MODULES += listfmt_nasm + +#EXTRA_DIST += modules/listfmts/nasm/tests/Makefile.inc + +#include modules/listfmts/nasm/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/listfmts/nasm/nasm-listfmt.c b/third-party/yasm/yasm-1.3.0/modules/listfmts/nasm/nasm-listfmt.c new file mode 100644 index 0000000000..1dfc5b621c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/listfmts/nasm/nasm-listfmt.c @@ -0,0 +1,301 @@ +/* + * NASM-style list format + * + * Copyright (C) 2004-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +/* NOTE: For this code to generate relocation information, the relocations + * have to be added by the object format to each section in program source + * order. + * + * This should not be an issue, as program source order == section bytecode + * order, so unless the object formats are very obtuse with their bytecode + * iteration, this should just happen. + */ + +#define REGULAR_BUF_SIZE 1024 + +yasm_listfmt_module yasm_nasm_LTX_listfmt; + +typedef struct sectreloc { + /*@reldef@*/ SLIST_ENTRY(sectreloc) link; + yasm_section *sect; + /*@null@*/ yasm_reloc *next_reloc; /* next relocation in section */ + unsigned long next_reloc_addr; +} sectreloc; + +typedef struct bcreloc { + /*@reldef@*/ STAILQ_ENTRY(bcreloc) link; + unsigned long offset; /* start of reloc from start of bytecode */ + size_t size; /* size of reloc in bytes */ + int rel; /* PC/IP-relative or "absolute" */ +} bcreloc; + +typedef struct nasm_listfmt_output_info { + yasm_arch *arch; + /*@reldef@*/ STAILQ_HEAD(bcrelochead, bcreloc) bcrelocs; + /*@null@*/ yasm_reloc *next_reloc; /* next relocation in section */ + unsigned long next_reloc_addr; +} nasm_listfmt_output_info; + + +static /*@null@*/ /*@only@*/ yasm_listfmt * +nasm_listfmt_create(const char *in_filename, const char *obj_filename) +{ + yasm_listfmt_base *listfmt = yasm_xmalloc(sizeof(yasm_listfmt_base)); + listfmt->module = &yasm_nasm_LTX_listfmt; + return (yasm_listfmt *)listfmt; +} + +static void +nasm_listfmt_destroy(/*@only@*/ yasm_listfmt *listfmt) +{ + yasm_xfree(listfmt); +} + +static int +nasm_listfmt_output_value(yasm_value *value, unsigned char *buf, + unsigned int destsize, unsigned long offset, + yasm_bytecode *bc, int warn, /*@null@*/ void *d) +{ + /*@null@*/ nasm_listfmt_output_info *info = (nasm_listfmt_output_info *)d; + /*@dependent@*/ /*@null@*/ yasm_intnum *intn; + unsigned int valsize = value->size; + + assert(info != NULL); + + /* Output */ + switch (yasm_value_output_basic(value, buf, destsize, bc, warn, + info->arch)) { + case -1: + return 1; + case 0: + break; + default: + return 0; + } + + /* Generate reloc if needed */ + if (info->next_reloc && info->next_reloc_addr == bc->offset+offset) { + bcreloc *reloc = yasm_xmalloc(sizeof(bcreloc)); + reloc->offset = offset; + reloc->size = destsize; + reloc->rel = value->curpos_rel; + STAILQ_INSERT_TAIL(&info->bcrelocs, reloc, link); + + /* Get next reloc's info */ + info->next_reloc = yasm_section_reloc_next(info->next_reloc); + if (info->next_reloc) { + yasm_intnum *addr; + yasm_symrec *sym; + yasm_reloc_get(info->next_reloc, &addr, &sym); + info->next_reloc_addr = yasm_intnum_get_uint(addr); + } + } + + if (value->abs) { + intn = yasm_expr_get_intnum(&value->abs, 0); + if (intn) + return yasm_arch_intnum_tobytes(info->arch, intn, buf, destsize, + valsize, 0, bc, 0); + else { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("relocation too complex")); + return 1; + } + } else { + int retval; + intn = yasm_intnum_create_uint(0); + retval = yasm_arch_intnum_tobytes(info->arch, intn, buf, destsize, + valsize, 0, bc, 0); + yasm_intnum_destroy(intn); + return retval; + } + + return 0; +} + +static void +nasm_listfmt_output(yasm_listfmt *listfmt, FILE *f, yasm_linemap *linemap, + yasm_arch *arch) +{ + yasm_bytecode *bc; + const char *source; + unsigned long line = 1; + unsigned long listline = 1; + /*@only@*/ unsigned char *buf; + nasm_listfmt_output_info info; + /*@reldef@*/ SLIST_HEAD(sectrelochead, sectreloc) reloc_hist; + /*@null@*/ sectreloc *last_hist = NULL; + /*@null@*/ bcreloc *reloc = NULL; + yasm_section *sect; + + SLIST_INIT(&reloc_hist); + + info.arch = arch; + + buf = yasm_xmalloc(REGULAR_BUF_SIZE); + + while (!yasm_linemap_get_source(linemap, line, &bc, &source)) { + if (!bc) { + fprintf(f, "%6lu %*s%s\n", listline++, 32, "", source); + } else { + /* get the next relocation for the bytecode's section */ + sect = yasm_bc_get_section(bc); + if (!last_hist || last_hist->sect != sect) { + int found = 0; + + /* look through reloc_hist for matching section */ + SLIST_FOREACH(last_hist, &reloc_hist, link) { + if (last_hist->sect == sect) { + found = 1; + break; + } + } + + if (!found) { + /* not found, add to list*/ + last_hist = yasm_xmalloc(sizeof(sectreloc)); + last_hist->sect = sect; + last_hist->next_reloc = yasm_section_relocs_first(sect); + + if (last_hist->next_reloc) { + yasm_intnum *addr; + yasm_symrec *sym; + yasm_reloc_get(last_hist->next_reloc, &addr, &sym); + last_hist->next_reloc_addr = + yasm_intnum_get_uint(addr); + } + + SLIST_INSERT_HEAD(&reloc_hist, last_hist, link); + } + } + + info.next_reloc = last_hist->next_reloc; + info.next_reloc_addr = last_hist->next_reloc_addr; + STAILQ_INIT(&info.bcrelocs); + + /* loop over bytecodes on this line (usually only one) */ + while (bc && bc->line == line) { + /*@null@*/ /*@only@*/ unsigned char *bigbuf; + unsigned long size = REGULAR_BUF_SIZE; + long multiple; + unsigned long offset = bc->offset; + unsigned char *origp, *p; + int gap; + + /* convert bytecode into bytes, recording relocs along the + * way + */ + bigbuf = yasm_bc_tobytes(bc, buf, &size, &gap, &info, + nasm_listfmt_output_value, NULL); + yasm_bc_get_multiple(bc, &multiple, 1); + if (multiple <= 0) + size = 0; + else + size /= multiple; + + /* output bytes with reloc information */ + origp = bigbuf ? bigbuf : buf; + p = origp; + reloc = STAILQ_FIRST(&info.bcrelocs); + if (gap) { + fprintf(f, "%6lu %08lX %*s%s\n", listline++, offset, + 18, "", source ? source : ""); + } else while (size > 0) { + int i; + + fprintf(f, "%6lu %08lX ", listline++, offset); + for (i=0; i<18 && size > 0; size--) { + if (reloc && (unsigned long)(p-origp) == + reloc->offset) { + fprintf(f, "%c", reloc->rel ? '(' : '['); + i++; + } + fprintf(f, "%02X", *(p++)); + i+=2; + if (reloc && (unsigned long)(p-origp) == + reloc->offset+reloc->size) { + fprintf(f, "%c", reloc->rel ? ')' : ']'); + i++; + reloc = STAILQ_NEXT(reloc, link); + } + } + if (size > 0) + fprintf(f, "-"); + else { + if (multiple > 1) { + fprintf(f, ""); + i += 6; + } + fprintf(f, "%*s", 18-i+1, ""); + } + if (source) { + fprintf(f, " %s", source); + source = NULL; + } + fprintf(f, "\n"); + } + + if (bigbuf) + yasm_xfree(bigbuf); + bc = STAILQ_NEXT(bc, link); + } + + /* delete bcrelocs (newly generated next bytecode if any) */ + reloc = STAILQ_FIRST(&info.bcrelocs); + while (reloc) { + bcreloc *reloc2 = STAILQ_NEXT(reloc, link); + yasm_xfree(reloc); + reloc = reloc2; + } + + /* save reloc context */ + last_hist->next_reloc = info.next_reloc; + last_hist->next_reloc_addr = info.next_reloc_addr; + } + line++; + } + + /* delete reloc history */ + while (!SLIST_EMPTY(&reloc_hist)) { + last_hist = SLIST_FIRST(&reloc_hist); + SLIST_REMOVE_HEAD(&reloc_hist, link); + yasm_xfree(last_hist); + } + + yasm_xfree(buf); +} + +/* Define listfmt structure -- see listfmt.h for details */ +yasm_listfmt_module yasm_nasm_LTX_listfmt = { + "NASM-style list format", + "nasm", + nasm_listfmt_create, + nasm_listfmt_destroy, + nasm_listfmt_output +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/objfmts/CMakeLists.txt new file mode 100644 index 0000000000..c00a3a0414 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/CMakeLists.txt @@ -0,0 +1,9 @@ +INCLUDE(objfmts/dbg/CMakeLists.txt) +INCLUDE(objfmts/bin/CMakeLists.txt) +INCLUDE(objfmts/elf/CMakeLists.txt) +INCLUDE(objfmts/coff/CMakeLists.txt) +INCLUDE(objfmts/macho/CMakeLists.txt) +INCLUDE(objfmts/rdf/CMakeLists.txt) +#INCLUDE(objfmts/win32/CMakeLists.txt) +#INCLUDE(objfmts/win64/CMakeLists.txt) +INCLUDE(objfmts/xdf/CMakeLists.txt) diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/Makefile.inc new file mode 100644 index 0000000000..a76359a4f0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/Makefile.inc @@ -0,0 +1,30 @@ +EXTRA_DIST += modules/objfmts/dbg/Makefile.inc +EXTRA_DIST += modules/objfmts/bin/Makefile.inc +EXTRA_DIST += modules/objfmts/elf/Makefile.inc +#!EXTRA_DIST += modules/objfmts/omf/Makefile.inc +EXTRA_DIST += modules/objfmts/coff/Makefile.inc +EXTRA_DIST += modules/objfmts/macho/Makefile.inc +EXTRA_DIST += modules/objfmts/rdf/Makefile.inc +EXTRA_DIST += modules/objfmts/win32/Makefile.inc +EXTRA_DIST += modules/objfmts/win64/Makefile.inc +EXTRA_DIST += modules/objfmts/xdf/Makefile.inc + +include modules/objfmts/dbg/Makefile.inc +include modules/objfmts/bin/Makefile.inc +include modules/objfmts/elf/Makefile.inc +#!include modules/objfmts/omf/Makefile.inc +include modules/objfmts/coff/Makefile.inc +include modules/objfmts/macho/Makefile.inc +include modules/objfmts/rdf/Makefile.inc +include modules/objfmts/win32/Makefile.inc +include modules/objfmts/win64/Makefile.inc +include modules/objfmts/xdf/Makefile.inc + +notrans_dist_man_MANS += yasm_objfmts.7 + +if BUILD_MAN +yasm_objfmts.7: modules/objfmts/yasm_objfmts.xml + $(XMLTO) -o $(top_builddir) man $(srcdir)/modules/objfmts/yasm_objfmts.xml +endif + +EXTRA_DIST += modules/objfmts/yasm_objfmts.xml diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/CMakeLists.txt new file mode 100644 index 0000000000..a3d396a50d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/CMakeLists.txt @@ -0,0 +1,3 @@ +YASM_ADD_MODULE(objfmt_bin + objfmts/bin/bin-objfmt.c + ) diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/Makefile.inc new file mode 100644 index 0000000000..ae23cfe7d5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/Makefile.inc @@ -0,0 +1,7 @@ +libyasm_a_SOURCES += modules/objfmts/bin/bin-objfmt.c + +YASM_MODULES += objfmt_bin objfmt_dosexe + +EXTRA_DIST += modules/objfmts/bin/tests/Makefile.inc + +include modules/objfmts/bin/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/bin-objfmt.c b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/bin-objfmt.c new file mode 100644 index 0000000000..5f422245d3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/bin-objfmt.c @@ -0,0 +1,1972 @@ +/* + * Flat-format binary object format + * + * Copyright (C) 2002-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#ifdef HAVE_UNISTD_H +#include +#endif +#include + + +#define REGULAR_OUTBUF_SIZE 1024 + +typedef struct bin_section_data { + int bss; /* aka nobits */ + + /* User-provided alignment */ + yasm_intnum *align, *valign; + + /* User-provided starts */ + /*@null@*/ /*@owned@*/ yasm_expr *start, *vstart; + + /* User-provided follows */ + /*@null@*/ /*@owned@*/ char *follows, *vfollows; + + /* Calculated (final) starts, used only during output() */ + /*@null@*/ /*@owned@*/ yasm_intnum *istart, *ivstart; + + /* Calculated (final) length, used only during output() */ + /*@null@*/ /*@owned@*/ yasm_intnum *length; +} bin_section_data; + +typedef struct yasm_objfmt_bin { + yasm_objfmt_base objfmt; /* base structure */ + + enum { + NO_MAP = 0, + MAP_NONE = 0x01, + MAP_BRIEF = 0x02, + MAP_SECTIONS = 0x04, + MAP_SYMBOLS = 0x08 + } map_flags; + /*@null@*/ /*@only@*/ char *map_filename; + + /*@null@*/ /*@only@*/ yasm_expr *org; +} yasm_objfmt_bin; + +/* symrec data is used only for the special symbols section.start, + * section.vstart, and section.length + */ +typedef struct bin_symrec_data { + yasm_section *section; /* referenced section */ + enum bin_ssym { + SSYM_START, + SSYM_VSTART, + SSYM_LENGTH + } which; +} bin_symrec_data; + +static void bin_section_data_destroy(/*@only@*/ void *d); +static void bin_section_data_print(void *data, FILE *f, int indent_level); + +static const yasm_assoc_data_callback bin_section_data_cb = { + bin_section_data_destroy, + bin_section_data_print +}; + +static void bin_symrec_data_destroy(/*@only@*/ void *d); +static void bin_symrec_data_print(void *data, FILE *f, int indent_level); + +static const yasm_assoc_data_callback bin_symrec_data_cb = { + bin_symrec_data_destroy, + bin_symrec_data_print +}; + +yasm_objfmt_module yasm_bin_LTX_objfmt; + + +static yasm_objfmt * +bin_objfmt_create(yasm_object *object) +{ + yasm_objfmt_bin *objfmt_bin = yasm_xmalloc(sizeof(yasm_objfmt_bin)); + objfmt_bin->objfmt.module = &yasm_bin_LTX_objfmt; + + objfmt_bin->map_flags = NO_MAP; + objfmt_bin->map_filename = NULL; + objfmt_bin->org = NULL; + + return (yasm_objfmt *)objfmt_bin; +} + +typedef TAILQ_HEAD(bin_group_head, bin_group) bin_groups; + +typedef struct bin_group { + TAILQ_ENTRY(bin_group) link; + yasm_section *section; + bin_section_data *bsd; + + /* Groups that (in parallel) logically come immediately after this + * group's section. + */ + bin_groups follow_groups; +} bin_group; + +/* Recursive function to find group containing named section. */ +static bin_group * +find_group_by_name(bin_groups *groups, const char *name) +{ + bin_group *group, *found; + TAILQ_FOREACH(group, groups, link) { + if (strcmp(yasm_section_get_name(group->section), name) == 0) + return group; + /* Recurse to loop through follow groups */ + found = find_group_by_name(&group->follow_groups, name); + if (found) + return found; + } + return NULL; +} + +/* Recursive function to find group. Returns NULL if not found. */ +static bin_group * +find_group_by_section(bin_groups *groups, yasm_section *section) +{ + bin_group *group, *found; + TAILQ_FOREACH(group, groups, link) { + if (group->section == section) + return group; + /* Recurse to loop through follow groups */ + found = find_group_by_section(&group->follow_groups, section); + if (found) + return found; + } + return NULL; +} + +#if 0 +/* Debugging function */ +static void +print_groups(const bin_groups *groups, int indent_level) +{ + bin_group *group; + TAILQ_FOREACH(group, groups, link) { + printf("%*sSection `%s':\n", indent_level, "", + yasm_section_get_name(group->section)); + bin_section_data_print(group->bsd, stdout, indent_level+1); + if (!TAILQ_EMPTY(&group->follow_groups)) { + printf("%*sFollowing groups:\n", indent_level, ""); + print_groups(&group->follow_groups, indent_level+1); + } + } +} +#endif + +static void +bin_group_destroy(/*@only@*/ bin_group *group) +{ + bin_group *follow, *group_temp; + TAILQ_FOREACH_SAFE(follow, &group->follow_groups, link, group_temp) + bin_group_destroy(follow); + yasm_xfree(group); +} + +typedef struct bin_objfmt_output_info { + yasm_object *object; + yasm_errwarns *errwarns; + /*@dependent@*/ FILE *f; + /*@only@*/ unsigned char *buf; + /*@observer@*/ const yasm_section *sect; + unsigned long start; /* what normal variables go against */ + + yasm_intnum *origin; + yasm_intnum *tmp_intn; /* temporary working intnum */ + + bin_groups lma_groups, vma_groups; +} bin_objfmt_output_info; + +static int +bin_objfmt_check_sym(yasm_symrec *sym, /*@null@*/ void *d) +{ + /*@null@*/ bin_objfmt_output_info *info = (bin_objfmt_output_info *)d; + yasm_sym_vis vis = yasm_symrec_get_visibility(sym); + assert(info != NULL); + + /* Don't check internally-generated symbols. Only internally generated + * symbols have symrec data, so simply check for its presence. + */ + if (yasm_symrec_get_data(sym, &bin_symrec_data_cb)) + return 0; + + if (vis & YASM_SYM_EXTERN) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("binary object format does not support extern variables")); + yasm_errwarn_propagate(info->errwarns, yasm_symrec_get_decl_line(sym)); + } else if (vis & YASM_SYM_GLOBAL) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("binary object format does not support global variables")); + yasm_errwarn_propagate(info->errwarns, yasm_symrec_get_decl_line(sym)); + } else if (vis & YASM_SYM_COMMON) { + yasm_error_set(YASM_ERROR_TYPE, + N_("binary object format does not support common variables")); + yasm_errwarn_propagate(info->errwarns, yasm_symrec_get_decl_line(sym)); + } + return 0; +} + +static int +bin_lma_create_group(yasm_section *sect, /*@null@*/ void *d) +{ + bin_objfmt_output_info *info = (bin_objfmt_output_info *)d; + bin_section_data *bsd = yasm_section_get_data(sect, &bin_section_data_cb); + unsigned long align = yasm_section_get_align(sect); + bin_group *group; + + assert(info != NULL); + assert(bsd != NULL); + + group = yasm_xmalloc(sizeof(bin_group)); + group->section = sect; + group->bsd = bsd; + TAILQ_INIT(&group->follow_groups); + + /* Determine section alignment as necessary. */ + if (!bsd->align) + bsd->align = yasm_intnum_create_uint(align > 4 ? align : 4); + else { + yasm_intnum *align_intn = yasm_intnum_create_uint(align); + if (yasm_intnum_compare(align_intn, bsd->align) > 0) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("section `%s' internal align of %lu is greater than `%s' of %lu; using `%s'"), + yasm_section_get_name(sect), + yasm_intnum_get_uint(align_intn), + N_("align"), + yasm_intnum_get_uint(bsd->align), + N_("align")); + yasm_errwarn_propagate(info->errwarns, 0); + } + yasm_intnum_destroy(align_intn); + } + + /* Calculate section integer start. */ + if (bsd->start) { + bsd->istart = yasm_expr_get_intnum(&bsd->start, 0); + if (!bsd->istart) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("start expression is too complex")); + yasm_errwarn_propagate(info->errwarns, bsd->start->line); + return 1; + } else + bsd->istart = yasm_intnum_copy(bsd->istart); + } else + bsd->istart = NULL; + + /* Calculate section integer vstart. */ + if (bsd->vstart) { + bsd->ivstart = yasm_expr_get_intnum(&bsd->vstart, 0); + if (!bsd->ivstart) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("vstart expression is too complex")); + yasm_errwarn_propagate(info->errwarns, bsd->vstart->line); + return 1; + } else + bsd->ivstart = yasm_intnum_copy(bsd->ivstart); + } else + bsd->ivstart = NULL; + + /* Calculate section integer length. */ + bsd->length = yasm_calc_bc_dist(yasm_section_bcs_first(sect), + yasm_section_bcs_last(sect)); + + TAILQ_INSERT_TAIL(&info->lma_groups, group, link); + return 0; +} + +static int +bin_vma_create_group(yasm_section *sect, /*@null@*/ void *d) +{ + bin_objfmt_output_info *info = (bin_objfmt_output_info *)d; + bin_section_data *bsd = yasm_section_get_data(sect, &bin_section_data_cb); + bin_group *group; + + assert(info != NULL); + assert(bsd != NULL); + + group = yasm_xmalloc(sizeof(bin_group)); + group->section = sect; + group->bsd = bsd; + TAILQ_INIT(&group->follow_groups); + + TAILQ_INSERT_TAIL(&info->vma_groups, group, link); + return 0; +} + +/* Calculates new start address based on alignment constraint. + * Start is modified (rounded up) to the closest aligned value greater than + * what was passed in. + * Align must be a power of 2. + */ +static void +bin_objfmt_align(yasm_intnum *start, const yasm_intnum *align) +{ + /* Because alignment is always a power of two, we can use some bit + * trickery to do this easily. + */ + yasm_intnum *align_intn = + yasm_intnum_create_uint(yasm_intnum_get_uint(align)-1); + yasm_intnum_calc(align_intn, YASM_EXPR_AND, start); + if (!yasm_intnum_is_zero(align_intn)) { + /* start = (start & ~(align-1)) + align; */ + yasm_intnum_set_uint(align_intn, yasm_intnum_get_uint(align)-1); + yasm_intnum_calc(align_intn, YASM_EXPR_NOT, NULL); + yasm_intnum_calc(align_intn, YASM_EXPR_AND, start); + yasm_intnum_set(start, align); + yasm_intnum_calc(start, YASM_EXPR_ADD, align_intn); + } + yasm_intnum_destroy(align_intn); +} + +/* Recursive function to assign start addresses. + * Updates start, last, and vdelta parameters as it goes along. + * The tmp parameter is just a working intnum so one doesn't have to be + * locally allocated for this purpose. + */ +static void +group_assign_start_recurse(bin_group *group, yasm_intnum *start, + yasm_intnum *last, yasm_intnum *vdelta, + yasm_intnum *tmp, yasm_errwarns *errwarns) +{ + bin_group *follow_group; + + /* Determine LMA */ + if (group->bsd->istart) { + yasm_intnum_set(group->bsd->istart, start); + if (group->bsd->align) { + bin_objfmt_align(group->bsd->istart, group->bsd->align); + if (yasm_intnum_compare(start, group->bsd->istart) != 0) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("start inconsistent with align; using aligned value")); + yasm_errwarn_propagate(errwarns, group->bsd->start->line); + } + } + } else { + group->bsd->istart = yasm_intnum_copy(start); + if (group->bsd->align != 0) + bin_objfmt_align(group->bsd->istart, group->bsd->align); + } + + /* Determine VMA if either just valign specified or if no v* specified */ + if (!group->bsd->vstart) { + if (!group->bsd->vfollows && !group->bsd->valign) { + /* No v* specified, set VMA=LMA+vdelta. */ + group->bsd->ivstart = yasm_intnum_copy(group->bsd->istart); + yasm_intnum_calc(group->bsd->ivstart, YASM_EXPR_ADD, vdelta); + } else if (!group->bsd->vfollows) { + /* Just valign specified: set VMA=LMA+vdelta, align VMA, then add + * delta between unaligned and aligned to vdelta parameter. + */ + group->bsd->ivstart = yasm_intnum_copy(group->bsd->istart); + yasm_intnum_calc(group->bsd->ivstart, YASM_EXPR_ADD, vdelta); + yasm_intnum_set(tmp, group->bsd->ivstart); + bin_objfmt_align(group->bsd->ivstart, group->bsd->valign); + yasm_intnum_calc(vdelta, YASM_EXPR_ADD, group->bsd->ivstart); + yasm_intnum_calc(vdelta, YASM_EXPR_SUB, tmp); + } + } + + /* Find the maximum end value */ + yasm_intnum_set(tmp, group->bsd->istart); + yasm_intnum_calc(tmp, YASM_EXPR_ADD, group->bsd->length); + if (yasm_intnum_compare(tmp, last) > 0) /* tmp > last */ + yasm_intnum_set(last, tmp); + + /* Recurse for each following group. */ + TAILQ_FOREACH(follow_group, &group->follow_groups, link) { + /* Following sections have to follow this one, + * so add length to start. + */ + yasm_intnum_set(start, group->bsd->istart); + yasm_intnum_calc(start, YASM_EXPR_ADD, group->bsd->length); + + group_assign_start_recurse(follow_group, start, last, vdelta, tmp, + errwarns); + } +} + +/* Recursive function to assign start addresses. + * Updates start parameter as it goes along. + * The tmp parameter is just a working intnum so one doesn't have to be + * locally allocated for this purpose. + */ +static void +group_assign_vstart_recurse(bin_group *group, yasm_intnum *start, + yasm_errwarns *errwarns) +{ + bin_group *follow_group; + + /* Determine VMA section alignment as necessary. + * Default to LMA alignment if not specified. + */ + if (!group->bsd->valign) + group->bsd->valign = yasm_intnum_copy(group->bsd->align); + else { + unsigned long align = yasm_section_get_align(group->section); + yasm_intnum *align_intn = yasm_intnum_create_uint(align); + if (yasm_intnum_compare(align_intn, group->bsd->valign) > 0) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("section `%s' internal align of %lu is greater than `%s' of %lu; using `%s'"), + yasm_section_get_name(group->section), + yasm_intnum_get_uint(align_intn), + N_("valign"), + yasm_intnum_get_uint(group->bsd->valign), + N_("valign")); + yasm_errwarn_propagate(errwarns, 0); + } + yasm_intnum_destroy(align_intn); + } + + /* Determine VMA */ + if (group->bsd->ivstart) { + yasm_intnum_set(group->bsd->ivstart, start); + if (group->bsd->valign) { + bin_objfmt_align(group->bsd->ivstart, group->bsd->valign); + if (yasm_intnum_compare(start, group->bsd->ivstart) != 0) { + yasm_error_set(YASM_ERROR_VALUE, + N_("vstart inconsistent with valign")); + yasm_errwarn_propagate(errwarns, group->bsd->vstart->line); + } + } + } else { + group->bsd->ivstart = yasm_intnum_copy(start); + if (group->bsd->valign) + bin_objfmt_align(group->bsd->ivstart, group->bsd->valign); + } + + /* Recurse for each following group. */ + TAILQ_FOREACH(follow_group, &group->follow_groups, link) { + /* Following sections have to follow this one, + * so add length to start. + */ + yasm_intnum_set(start, group->bsd->ivstart); + yasm_intnum_calc(start, YASM_EXPR_ADD, group->bsd->length); + + group_assign_vstart_recurse(follow_group, start, errwarns); + } +} + +static /*@null@*/ const yasm_intnum * +get_ssym_value(yasm_symrec *sym) +{ + bin_symrec_data *bsymd = yasm_symrec_get_data(sym, &bin_symrec_data_cb); + bin_section_data *bsd; + + if (!bsymd) + return NULL; + + bsd = yasm_section_get_data(bsymd->section, &bin_section_data_cb); + assert(bsd != NULL); + + switch (bsymd->which) { + case SSYM_START: return bsd->istart; + case SSYM_VSTART: return bsd->ivstart; + case SSYM_LENGTH: return bsd->length; + } + return NULL; +} + +static /*@only@*/ yasm_expr * +bin_objfmt_expr_xform(/*@returned@*/ /*@only@*/ yasm_expr *e, + /*@unused@*/ /*@null@*/ void *d) +{ + int i; + for (i=0; inumterms; i++) { + /*@dependent@*/ yasm_section *sect; + /*@dependent@*/ /*@null@*/ yasm_bytecode *precbc; + /*@null@*/ yasm_intnum *dist; + /*@null@*/ const yasm_intnum *ssymval; + + /* Transform symrecs or precbcs that reference sections into + * vstart + intnum(dist). + */ + if (((e->terms[i].type == YASM_EXPR_SYM && + yasm_symrec_get_label(e->terms[i].data.sym, &precbc)) || + (e->terms[i].type == YASM_EXPR_PRECBC && + (precbc = e->terms[i].data.precbc))) && + (sect = yasm_bc_get_section(precbc)) && + (dist = yasm_calc_bc_dist(yasm_section_bcs_first(sect), precbc))) { + bin_section_data *bsd; + bsd = yasm_section_get_data(sect, &bin_section_data_cb); + assert(bsd != NULL); + yasm_intnum_calc(dist, YASM_EXPR_ADD, bsd->ivstart); + e->terms[i].type = YASM_EXPR_INT; + e->terms[i].data.intn = dist; + } + + /* Transform our special symrecs into the appropriate value */ + if (e->terms[i].type == YASM_EXPR_SYM && + (ssymval = get_ssym_value(e->terms[i].data.sym))) { + e->terms[i].type = YASM_EXPR_INT; + e->terms[i].data.intn = yasm_intnum_copy(ssymval); + } + } + + return e; +} + +typedef struct map_output_info { + /* address width */ + int bytes; + + /* intnum output static data areas */ + unsigned char *buf; + yasm_intnum *intn; + + /* symrec output information */ + unsigned long count; + yasm_section *section; /* NULL for EQUs */ + + yasm_object *object; /* object */ + FILE *f; /* map output file */ +} map_output_info; + +static int +map_prescan_bytes(yasm_section *sect, void *d) +{ + bin_section_data *bsd = yasm_section_get_data(sect, &bin_section_data_cb); + map_output_info *info = (map_output_info *)d; + + assert(bsd != NULL); + assert(info != NULL); + + while (!yasm_intnum_check_size(bsd->length, info->bytes * 8, 0, 0)) + info->bytes *= 2; + while (!yasm_intnum_check_size(bsd->istart, info->bytes * 8, 0, 0)) + info->bytes *= 2; + while (!yasm_intnum_check_size(bsd->ivstart, info->bytes * 8, 0, 0)) + info->bytes *= 2; + + return 0; +} + +static void +map_print_intnum(const yasm_intnum *intn, map_output_info *info) +{ + size_t i; + yasm_intnum_get_sized(intn, info->buf, info->bytes, info->bytes*8, 0, 0, + 0); + for (i=info->bytes; i != 0; i--) + fprintf(info->f, "%02X", info->buf[i-1]); +} + +static void +map_sections_summary(bin_groups *groups, map_output_info *info) +{ + bin_group *group; + TAILQ_FOREACH(group, groups, link) { + bin_section_data *bsd = group->bsd; + + assert(bsd != NULL); + assert(info != NULL); + + map_print_intnum(bsd->ivstart, info); + fprintf(info->f, " "); + + yasm_intnum_set(info->intn, bsd->ivstart); + yasm_intnum_calc(info->intn, YASM_EXPR_ADD, bsd->length); + map_print_intnum(info->intn, info); + fprintf(info->f, " "); + + map_print_intnum(bsd->istart, info); + fprintf(info->f, " "); + + yasm_intnum_set(info->intn, bsd->istart); + yasm_intnum_calc(info->intn, YASM_EXPR_ADD, bsd->length); + map_print_intnum(info->intn, info); + fprintf(info->f, " "); + + map_print_intnum(bsd->length, info); + fprintf(info->f, " "); + + fprintf(info->f, "%-*s", 10, bsd->bss ? "nobits" : "progbits"); + fprintf(info->f, "%s\n", yasm_section_get_name(group->section)); + + /* Recurse to loop through follow groups */ + map_sections_summary(&group->follow_groups, info); + } +} + +static void +map_sections_detail(bin_groups *groups, map_output_info *info) +{ + bin_group *group; + TAILQ_FOREACH(group, groups, link) { + bin_section_data *bsd = group->bsd; + size_t i; + const char *s; + + s = yasm_section_get_name(group->section); + fprintf(info->f, "---- Section %s ", s); + for (i=0; i<(65-strlen(s)); i++) + fputc('-', info->f); + + fprintf(info->f, "\n\nclass: %s", + bsd->bss ? "nobits" : "progbits"); + fprintf(info->f, "\nlength: "); + map_print_intnum(bsd->length, info); + fprintf(info->f, "\nstart: "); + map_print_intnum(bsd->istart, info); + fprintf(info->f, "\nalign: "); + map_print_intnum(bsd->align, info); + fprintf(info->f, "\nfollows: %s", + bsd->follows ? bsd->follows : "not defined"); + fprintf(info->f, "\nvstart: "); + map_print_intnum(bsd->ivstart, info); + fprintf(info->f, "\nvalign: "); + map_print_intnum(bsd->valign, info); + fprintf(info->f, "\nvfollows: %s\n\n", + bsd->vfollows ? bsd->vfollows : "not defined"); + + /* Recurse to loop through follow groups */ + map_sections_detail(&group->follow_groups, info); + } +} + +static int +map_symrec_count(yasm_symrec *sym, void *d) +{ + map_output_info *info = (map_output_info *)d; + /*@dependent@*/ yasm_bytecode *precbc; + + assert(info != NULL); + + /* TODO: autodetect wider size */ + if (!info->section && yasm_symrec_get_equ(sym)) { + info->count++; + } else if (yasm_symrec_get_label(sym, &precbc) && + yasm_bc_get_section(precbc) == info->section) { + info->count++; + } + return 0; +} + +static int +map_symrec_output(yasm_symrec *sym, void *d) +{ + map_output_info *info = (map_output_info *)d; + const yasm_expr *equ; + /*@dependent@*/ yasm_bytecode *precbc; + /*@only@*/ char *name = yasm_symrec_get_global_name(sym, info->object); + + assert(info != NULL); + + if (!info->section && (equ = yasm_symrec_get_equ(sym))) { + yasm_expr *realequ = yasm_expr_copy(equ); + realequ = yasm_expr__level_tree + (realequ, 1, 1, 1, 0, bin_objfmt_expr_xform, NULL); + yasm_intnum_set(info->intn, yasm_expr_get_intnum(&realequ, 0)); + yasm_expr_destroy(realequ); + map_print_intnum(info->intn, info); + fprintf(info->f, " %s\n", name); + } else if (yasm_symrec_get_label(sym, &precbc) && + yasm_bc_get_section(precbc) == info->section) { + bin_section_data *bsd = + yasm_section_get_data(info->section, &bin_section_data_cb); + + /* Real address */ + yasm_intnum_set_uint(info->intn, yasm_bc_next_offset(precbc)); + yasm_intnum_calc(info->intn, YASM_EXPR_ADD, bsd->istart); + map_print_intnum(info->intn, info); + fprintf(info->f, " "); + + /* Virtual address */ + yasm_intnum_set_uint(info->intn, yasm_bc_next_offset(precbc)); + yasm_intnum_calc(info->intn, YASM_EXPR_ADD, bsd->ivstart); + map_print_intnum(info->intn, info); + + /* Name */ + fprintf(info->f, " %s\n", name); + } + yasm_xfree(name); + return 0; +} + +static void +map_sections_symbols(bin_groups *groups, map_output_info *info) +{ + bin_group *group; + TAILQ_FOREACH(group, groups, link) { + info->count = 0; + info->section = group->section; + yasm_symtab_traverse(info->object->symtab, info, map_symrec_count); + + if (info->count > 0) { + const char *s = yasm_section_get_name(group->section); + size_t i; + fprintf(info->f, "---- Section %s ", s); + for (i=0; i<(65-strlen(s)); i++) + fputc('-', info->f); + fprintf(info->f, "\n\n%-*s%-*s%s\n", + info->bytes*2+2, "Real", + info->bytes*2+2, "Virtual", + "Name"); + yasm_symtab_traverse(info->object->symtab, info, + map_symrec_output); + fprintf(info->f, "\n\n"); + } + + /* Recurse to loop through follow groups */ + map_sections_symbols(&group->follow_groups, info); + } +} + +static void +output_map(bin_objfmt_output_info *info) +{ + yasm_objfmt_bin *objfmt_bin = (yasm_objfmt_bin *)info->object->objfmt; + FILE *f; + int i; + map_output_info mapinfo; + + if (objfmt_bin->map_flags == NO_MAP) + return; + + if (objfmt_bin->map_flags == MAP_NONE) + objfmt_bin->map_flags = MAP_BRIEF; /* default to brief */ + + if (!objfmt_bin->map_filename) + f = stdout; /* default to stdout */ + else { + f = fopen(objfmt_bin->map_filename, "wt"); + if (!f) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("unable to open map file `%s'"), + objfmt_bin->map_filename); + yasm_errwarn_propagate(info->errwarns, 0); + return; + } + } + + mapinfo.object = info->object; + mapinfo.f = f; + + /* Temporary intnum */ + mapinfo.intn = info->tmp_intn; + + /* Prescan all values to figure out what width we should make the output + * fields. Start with a minimum of 4. + */ + mapinfo.bytes = 4; + while (!yasm_intnum_check_size(info->origin, mapinfo.bytes * 8, 0, 0)) + mapinfo.bytes *= 2; + yasm_object_sections_traverse(info->object, &mapinfo, map_prescan_bytes); + mapinfo.buf = yasm_xmalloc(mapinfo.bytes); + + fprintf(f, "\n- YASM Map file "); + for (i=0; i<63; i++) + fputc('-', f); + fprintf(f, "\n\nSource file: %s\n", info->object->src_filename); + fprintf(f, "Output file: %s\n\n", info->object->obj_filename); + + fprintf(f, "-- Program origin "); + for (i=0; i<61; i++) + fputc('-', f); + fprintf(f, "\n\n"); + map_print_intnum(info->origin, &mapinfo); + fprintf(f, "\n\n"); + + if (objfmt_bin->map_flags & MAP_BRIEF) { + fprintf(f, "-- Sections (summary) "); + for (i=0; i<57; i++) + fputc('-', f); + fprintf(f, "\n\n%-*s%-*s%-*s%-*s%-*s%-*s%s\n", + mapinfo.bytes*2+2, "Vstart", + mapinfo.bytes*2+2, "Vstop", + mapinfo.bytes*2+2, "Start", + mapinfo.bytes*2+2, "Stop", + mapinfo.bytes*2+2, "Length", + 10, "Class", "Name"); + + map_sections_summary(&info->lma_groups, &mapinfo); + fprintf(f, "\n"); + } + + if (objfmt_bin->map_flags & MAP_SECTIONS) { + fprintf(f, "-- Sections (detailed) "); + for (i=0; i<56; i++) + fputc('-', f); + fprintf(f, "\n\n"); + map_sections_detail(&info->lma_groups, &mapinfo); + } + + if (objfmt_bin->map_flags & MAP_SYMBOLS) { + fprintf(f, "-- Symbols "); + for (i=0; i<68; i++) + fputc('-', f); + fprintf(f, "\n\n"); + + /* We do two passes for EQU and each section; the first pass + * determines the byte width to use for the value and whether any + * symbols are present, the second pass actually outputs the text. + */ + + /* EQUs */ + mapinfo.count = 0; + mapinfo.section = NULL; + yasm_symtab_traverse(info->object->symtab, &mapinfo, map_symrec_count); + + if (mapinfo.count > 0) { + fprintf(f, "---- No Section "); + for (i=0; i<63; i++) + fputc('-', f); + fprintf(f, "\n\n%-*s%s\n", mapinfo.bytes*2+2, "Value", "Name"); + yasm_symtab_traverse(info->object->symtab, &mapinfo, + map_symrec_output); + fprintf(f, "\n\n"); + } + + /* Other sections */ + map_sections_symbols(&info->lma_groups, &mapinfo); + } + + if (f != stdout) + fclose(f); + + yasm_xfree(mapinfo.buf); +} + +/* Check for LMA overlap using a simple N^2 algorithm. */ +static int +check_lma_overlap(yasm_section *sect, /*@null@*/ void *d) +{ + bin_section_data *bsd, *bsd2; + yasm_section *other = (yasm_section *)d; + yasm_intnum *overlap; + + if (!d) + return yasm_object_sections_traverse(yasm_section_get_object(sect), + sect, check_lma_overlap); + if (sect == other) + return 0; + + bsd = yasm_section_get_data(sect, &bin_section_data_cb); + bsd2 = yasm_section_get_data(other, &bin_section_data_cb); + + if (yasm_intnum_is_zero(bsd->length) || + yasm_intnum_is_zero(bsd2->length)) + return 0; + + if (yasm_intnum_compare(bsd->istart, bsd2->istart) <= 0) { + overlap = yasm_intnum_copy(bsd->istart); + yasm_intnum_calc(overlap, YASM_EXPR_ADD, bsd->length); + yasm_intnum_calc(overlap, YASM_EXPR_SUB, bsd2->istart); + } else { + overlap = yasm_intnum_copy(bsd2->istart); + yasm_intnum_calc(overlap, YASM_EXPR_ADD, bsd2->length); + yasm_intnum_calc(overlap, YASM_EXPR_SUB, bsd->istart); + } + + if (yasm_intnum_sign(overlap) > 0) { + yasm_error_set(YASM_ERROR_GENERAL, + N_("sections `%s' and `%s' overlap by %lu bytes"), + yasm_section_get_name(sect), + yasm_section_get_name(other), + yasm_intnum_get_uint(overlap)); + yasm_intnum_destroy(overlap); + return -1; + } + + yasm_intnum_destroy(overlap); + return 0; +} + +static int +bin_objfmt_output_value(yasm_value *value, unsigned char *buf, + unsigned int destsize, + /*@unused@*/ unsigned long offset, yasm_bytecode *bc, + int warn, /*@null@*/ void *d) +{ + /*@null@*/ bin_objfmt_output_info *info = (bin_objfmt_output_info *)d; + /*@dependent@*/ /*@null@*/ yasm_bytecode *precbc; + /*@dependent@*/ yasm_section *sect; + + assert(info != NULL); + + /* Binary objects we need to resolve against object, not against section. */ + if (value->rel) { + unsigned int rshift = (unsigned int)value->rshift; + yasm_expr *syme; + /*@null@*/ const yasm_intnum *ssymval; + + if (yasm_symrec_is_abs(value->rel)) { + syme = yasm_expr_create_ident(yasm_expr_int( + yasm_intnum_create_uint(0)), bc->line); + } else if (yasm_symrec_get_label(value->rel, &precbc) + && (sect = yasm_bc_get_section(precbc))) { + syme = yasm_expr_create_ident(yasm_expr_sym(value->rel), bc->line); + } else if ((ssymval = get_ssym_value(value->rel))) { + syme = yasm_expr_create_ident(yasm_expr_int( + yasm_intnum_copy(ssymval)), bc->line); + } else + goto done; + + /* Handle PC-relative */ + if (value->curpos_rel) { + yasm_expr *sube; + sube = yasm_expr_create(YASM_EXPR_SUB, yasm_expr_precbc(bc), + yasm_expr_int(yasm_intnum_create_uint(bc->len*bc->mult_int)), + bc->line); + syme = yasm_expr_create(YASM_EXPR_SUB, yasm_expr_expr(syme), + yasm_expr_expr(sube), bc->line); + value->curpos_rel = 0; + value->ip_rel = 0; + } + + if (value->rshift > 0) + syme = yasm_expr_create(YASM_EXPR_SHR, yasm_expr_expr(syme), + yasm_expr_int(yasm_intnum_create_uint(rshift)), bc->line); + + /* Add into absolute portion */ + if (!value->abs) + value->abs = syme; + else + value->abs = + yasm_expr_create(YASM_EXPR_ADD, yasm_expr_expr(value->abs), + yasm_expr_expr(syme), bc->line); + value->rel = NULL; + value->rshift = 0; + } +done: + /* Simplify absolute portion of value, transforming symrecs */ + if (value->abs) + value->abs = yasm_expr__level_tree + (value->abs, 1, 1, 1, 0, bin_objfmt_expr_xform, NULL); + + /* Output */ + switch (yasm_value_output_basic(value, buf, destsize, bc, warn, + info->object->arch)) { + case -1: + return 1; + case 0: + break; + default: + return 0; + } + + /* Couldn't output, assume it contains an external reference. */ + yasm_error_set(YASM_ERROR_GENERAL, + N_("binary object format does not support external references")); + return 1; +} + +static int +bin_objfmt_output_bytecode(yasm_bytecode *bc, /*@null@*/ void *d) +{ + /*@null@*/ bin_objfmt_output_info *info = (bin_objfmt_output_info *)d; + /*@null@*/ /*@only@*/ unsigned char *bigbuf; + unsigned long size = REGULAR_OUTBUF_SIZE; + int gap; + + assert(info != NULL); + + bigbuf = yasm_bc_tobytes(bc, info->buf, &size, &gap, info, + bin_objfmt_output_value, NULL); + + /* Don't bother doing anything else if size ended up being 0. */ + if (size == 0) { + if (bigbuf) + yasm_xfree(bigbuf); + return 0; + } + + /* Warn that gaps are converted to 0 and write out the 0's. */ + if (gap) { + unsigned long left; + yasm_warn_set(YASM_WARN_UNINIT_CONTENTS, + N_("uninitialized space declared in code/data section: zeroing")); + /* Write out in chunks */ + memset(info->buf, 0, REGULAR_OUTBUF_SIZE); + left = size; + while (left > REGULAR_OUTBUF_SIZE) { + fwrite(info->buf, REGULAR_OUTBUF_SIZE, 1, info->f); + left -= REGULAR_OUTBUF_SIZE; + } + fwrite(info->buf, left, 1, info->f); + } else { + /* Output buf (or bigbuf if non-NULL) to file */ + fwrite(bigbuf ? bigbuf : info->buf, (size_t)size, 1, info->f); + } + + /* If bigbuf was allocated, free it */ + if (bigbuf) + yasm_xfree(bigbuf); + + return 0; +} + +/* Check to ensure bytecode is res* (for BSS sections) */ +static int +bin_objfmt_no_output_bytecode(yasm_bytecode *bc, /*@null@*/ void *d) +{ + /*@null@*/ bin_objfmt_output_info *info = (bin_objfmt_output_info *)d; + /*@null@*/ /*@only@*/ unsigned char *bigbuf; + unsigned long size = REGULAR_OUTBUF_SIZE; + int gap; + + assert(info != NULL); + + bigbuf = yasm_bc_tobytes(bc, info->buf, &size, &gap, info, + bin_objfmt_output_value, NULL); + + /* If bigbuf was allocated, free it */ + if (bigbuf) + yasm_xfree(bigbuf); + + /* Don't bother doing anything else if size ended up being 0. */ + if (size == 0) + return 0; + + /* Warn if not a gap. */ + if (!gap) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("initialized space declared in nobits section: ignoring")); + } + + return 0; +} + +static int +bin_objfmt_output_section(yasm_section *sect, /*@null@*/ void *d) +{ + bin_section_data *bsd = yasm_section_get_data(sect, &bin_section_data_cb); + /*@null@*/ bin_objfmt_output_info *info = (bin_objfmt_output_info *)d; + + assert(bsd != NULL); + assert(info != NULL); + + if (bsd->bss) { + yasm_section_bcs_traverse(sect, info->errwarns, + info, bin_objfmt_no_output_bytecode); + } else { + yasm_intnum_set(info->tmp_intn, bsd->istart); + yasm_intnum_calc(info->tmp_intn, YASM_EXPR_SUB, info->origin); + if (yasm_intnum_sign(info->tmp_intn) < 0) { + yasm_error_set(YASM_ERROR_VALUE, + N_("section `%s' starts before origin (ORG)"), + yasm_section_get_name(sect)); + yasm_errwarn_propagate(info->errwarns, 0); + return 0; + } + if (!yasm_intnum_check_size(info->tmp_intn, sizeof(long)*8, 0, 1)) { + yasm_error_set(YASM_ERROR_VALUE, + N_("section `%s' start value too large"), + yasm_section_get_name(sect)); + yasm_errwarn_propagate(info->errwarns, 0); + return 0; + } + if (fseek(info->f, yasm_intnum_get_int(info->tmp_intn) + info->start, + SEEK_SET) < 0) + yasm__fatal(N_("could not seek on output file")); + yasm_section_bcs_traverse(sect, info->errwarns, + info, bin_objfmt_output_bytecode); + } + + return 0; +} + +static void +bin_objfmt_cleanup(bin_objfmt_output_info *info) +{ + bin_group *group, *group_temp; + + yasm_xfree(info->buf); + yasm_intnum_destroy(info->origin); + yasm_intnum_destroy(info->tmp_intn); + + TAILQ_FOREACH_SAFE(group, &info->lma_groups, link, group_temp) + bin_group_destroy(group); + + TAILQ_FOREACH_SAFE(group, &info->vma_groups, link, group_temp) + bin_group_destroy(group); +} + +static void +bin_objfmt_output(yasm_object *object, FILE *f, /*@unused@*/ int all_syms, + yasm_errwarns *errwarns) +{ + yasm_objfmt_bin *objfmt_bin = (yasm_objfmt_bin *)object->objfmt; + bin_objfmt_output_info info; + bin_group *group, *lma_group, *vma_group, *group_temp; + yasm_intnum *start, *last, *vdelta; + bin_groups unsorted_groups, bss_groups; + + info.start = ftell(f); + + /* Set ORG to 0 unless otherwise specified */ + if (objfmt_bin->org) { + info.origin = yasm_expr_get_intnum(&objfmt_bin->org, 0); + if (!info.origin) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("ORG expression is too complex")); + yasm_errwarn_propagate(errwarns, objfmt_bin->org->line); + return; + } + if (yasm_intnum_sign(info.origin) < 0) { + yasm_error_set(YASM_ERROR_VALUE, N_("ORG expression is negative")); + yasm_errwarn_propagate(errwarns, objfmt_bin->org->line); + return; + } + info.origin = yasm_intnum_copy(info.origin); + } else + info.origin = yasm_intnum_create_uint(0); + + info.object = object; + info.errwarns = errwarns; + info.f = f; + info.buf = yasm_xmalloc(REGULAR_OUTBUF_SIZE); + info.tmp_intn = yasm_intnum_create_uint(0); + TAILQ_INIT(&info.lma_groups); + TAILQ_INIT(&info.vma_groups); + + /* Check symbol table */ + yasm_symtab_traverse(object->symtab, &info, bin_objfmt_check_sym); + + /* Create section groups */ + if (yasm_object_sections_traverse(object, &info, bin_lma_create_group)) { + bin_objfmt_cleanup(&info); + return; /* error detected */ + } + + /* Determine section order according to LMA. + * Sections can be ordered either by (priority): + * - follows + * - start + * - progbits/nobits setting + * - order in the input file + */ + + /* Look at each group with follows specified, and find the section + * that group is supposed to follow. + */ + TAILQ_FOREACH_SAFE(lma_group, &info.lma_groups, link, group_temp) { + if (lma_group->bsd->follows) { + bin_group *found; + /* Need to find group containing section this section follows. */ + found = + find_group_by_name(&info.lma_groups, lma_group->bsd->follows); + if (!found) { + yasm_error_set(YASM_ERROR_VALUE, + N_("section `%s' follows an invalid or unknown section `%s'"), + yasm_section_get_name(lma_group->section), + lma_group->bsd->follows); + yasm_errwarn_propagate(errwarns, 0); + bin_objfmt_cleanup(&info); + return; + } + + /* Check for loops */ + if (lma_group->section == found->section || + find_group_by_section(&lma_group->follow_groups, + found->section)) { + yasm_error_set(YASM_ERROR_VALUE, + N_("follows loop between section `%s' and section `%s'"), + yasm_section_get_name(lma_group->section), + yasm_section_get_name(found->section)); + yasm_errwarn_propagate(errwarns, 0); + bin_objfmt_cleanup(&info); + return; + } + + /* Remove this section from main lma groups list */ + TAILQ_REMOVE(&info.lma_groups, lma_group, link); + /* Add it after the section it's supposed to follow. */ + TAILQ_INSERT_TAIL(&found->follow_groups, lma_group, link); + } + } + + /* Sort the top-level groups according to their start address. + * Use Shell sort for ease of implementation. + * If no start address is specified for a section, don't change the order, + * and move BSS sections to a separate list so they can be moved to the + * end of the lma list after all other sections are sorted. + */ + unsorted_groups = info.lma_groups; /* structure copy */ + TAILQ_INIT(&info.lma_groups); + TAILQ_INIT(&bss_groups); + TAILQ_FOREACH_SAFE(lma_group, &unsorted_groups, link, group_temp) { + bin_group *before; + + if (!lma_group->bsd->istart) { + if (lma_group->bsd->bss) + TAILQ_INSERT_TAIL(&bss_groups, lma_group, link); + else + TAILQ_INSERT_TAIL(&info.lma_groups, lma_group, link); + continue; + } + + before = NULL; + TAILQ_FOREACH(group, &info.lma_groups, link) { + if (!group->bsd->istart) + continue; + if (yasm_intnum_compare(group->bsd->istart, + lma_group->bsd->istart) > 0) { + before = group; + break; + } + } + if (before) + TAILQ_INSERT_BEFORE(before, lma_group, link); + else + TAILQ_INSERT_TAIL(&info.lma_groups, lma_group, link); + } + + /* Move the pure-BSS sections to the end of the LMA list. */ + TAILQ_FOREACH_SAFE(group, &bss_groups, link, group_temp) + TAILQ_INSERT_TAIL(&info.lma_groups, group, link); + TAILQ_INIT(&bss_groups); /* For sanity */ + + /* Assign a LMA start address to every section. + * Also assign VMA=LMA unless otherwise specified. + * + * We need to assign VMA=LMA here (while walking the tree) for the case: + * sect1 start=0 (size=0x11) + * sect2 follows=sect1 valign=16 (size=0x104) + * sect3 follows=sect2 valign=16 + * Where the valign of sect2 will result in a sect3 vaddr higher than a + * naive segment-by-segment interpretation (where sect3 and sect2 would + * have a VMA overlap). + * + * Algorithm for VMA=LMA setting: + * Start with delta=0. + * If there's no virtual attributes, we simply set VMA = LMA+delta. + * If there's only valign specified, we set VMA = aligned LMA, and add + * any new alignment difference to delta. + * + * We could do the LMA start and VMA=LMA steps in two separate steps, + * but it's easier to just recurse once. + */ + start = yasm_intnum_copy(info.origin); + last = yasm_intnum_copy(info.origin); + vdelta = yasm_intnum_create_uint(0); + TAILQ_FOREACH(lma_group, &info.lma_groups, link) { + if (lma_group->bsd->istart) + yasm_intnum_set(start, lma_group->bsd->istart); + group_assign_start_recurse(lma_group, start, last, vdelta, + info.tmp_intn, errwarns); + yasm_intnum_set(start, last); + } + yasm_intnum_destroy(last); + yasm_intnum_destroy(vdelta); + + /* + * Determine section order according to VMA + */ + + /* Create section groups */ + if (yasm_object_sections_traverse(object, &info, bin_vma_create_group)) { + yasm_intnum_destroy(start); + bin_objfmt_cleanup(&info); + return; /* error detected */ + } + + /* Look at each group with vfollows specified, and find the section + * that group is supposed to follow. + */ + TAILQ_FOREACH_SAFE(vma_group, &info.vma_groups, link, group_temp) { + if (vma_group->bsd->vfollows) { + bin_group *found; + /* Need to find group containing section this section follows. */ + found = find_group_by_name(&info.vma_groups, + vma_group->bsd->vfollows); + if (!found) { + yasm_error_set(YASM_ERROR_VALUE, + N_("section `%s' vfollows an invalid or unknown section `%s'"), + yasm_section_get_name(vma_group->section), + vma_group->bsd->vfollows); + yasm_errwarn_propagate(errwarns, 0); + yasm_intnum_destroy(start); + bin_objfmt_cleanup(&info); + return; + } + + /* Check for loops */ + if (vma_group->section == found->section || + find_group_by_section(&vma_group->follow_groups, + found->section)) { + yasm_error_set(YASM_ERROR_VALUE, + N_("vfollows loop between section `%s' and section `%s'"), + yasm_section_get_name(vma_group->section), + yasm_section_get_name(found->section)); + yasm_errwarn_propagate(errwarns, 0); + bin_objfmt_cleanup(&info); + return; + } + + /* Remove this section from main lma groups list */ + TAILQ_REMOVE(&info.vma_groups, vma_group, link); + /* Add it after the section it's supposed to follow. */ + TAILQ_INSERT_TAIL(&found->follow_groups, vma_group, link); + } + } + + /* Due to the combination of steps above, we now know that all top-level + * groups have integer ivstart: + * Vstart Vfollows Valign Handled by + * No No No group_assign_start_recurse() + * No No Yes group_assign_start_recurse() + * No Yes - vfollows loop (above) + * Yes - - bin_lma_create_group() + */ + TAILQ_FOREACH(vma_group, &info.vma_groups, link) { + yasm_intnum_set(start, vma_group->bsd->ivstart); + group_assign_vstart_recurse(vma_group, start, errwarns); + } + + /* Output map file */ + output_map(&info); + + /* Ensure we don't have overlapping progbits LMAs. + * Use a dumb O(N^2) algorithm as the number of sections is essentially + * always low. + */ + if (yasm_object_sections_traverse(object, NULL, check_lma_overlap)) { + yasm_errwarn_propagate(errwarns, 0); + yasm_intnum_destroy(start); + bin_objfmt_cleanup(&info); + return; + } + + /* Output sections */ + yasm_object_sections_traverse(object, &info, bin_objfmt_output_section); + + /* Clean up */ + yasm_intnum_destroy(start); + bin_objfmt_cleanup(&info); +} + +static void +bin_objfmt_destroy(yasm_objfmt *objfmt) +{ + yasm_objfmt_bin *objfmt_bin = (yasm_objfmt_bin *)objfmt; + if (objfmt_bin->map_filename) + yasm_xfree(objfmt_bin->map_filename); + yasm_expr_destroy(objfmt_bin->org); + yasm_xfree(objfmt); +} + +static void +define_section_symbol(yasm_symtab *symtab, yasm_section *sect, + const char *sectname, const char *suffix, + enum bin_ssym which, unsigned long line) +{ + yasm_symrec *sym; + bin_symrec_data *bsymd = yasm_xmalloc(sizeof(bin_symrec_data)); + char *symname = yasm_xmalloc(8+strlen(sectname)+strlen(suffix)+1); + + strcpy(symname, "section."); + strcat(symname, sectname); + strcat(symname, suffix); + + bsymd->section = sect; + bsymd->which = which; + + sym = yasm_symtab_declare(symtab, symname, YASM_SYM_EXTERN, line); + yasm_xfree(symname); + yasm_symrec_add_data(sym, &bin_symrec_data_cb, bsymd); +} + +static void +bin_objfmt_init_new_section(yasm_section *sect, unsigned long line) +{ + yasm_object *object = yasm_section_get_object(sect); + const char *sectname = yasm_section_get_name(sect); + /*yasm_objfmt_bin *objfmt_bin = (yasm_objfmt_bin *)object->objfmt;*/ + bin_section_data *data; + + data = yasm_xmalloc(sizeof(bin_section_data)); + data->bss = 0; + data->align = NULL; + data->valign = NULL; + data->start = NULL; + data->vstart = NULL; + data->follows = NULL; + data->vfollows = NULL; + data->istart = NULL; + data->ivstart = NULL; + data->length = NULL; + yasm_section_add_data(sect, &bin_section_data_cb, data); + + define_section_symbol(object->symtab, sect, sectname, ".start", + SSYM_START, line); + define_section_symbol(object->symtab, sect, sectname, ".vstart", + SSYM_VSTART, line); + define_section_symbol(object->symtab, sect, sectname, ".length", + SSYM_LENGTH, line); +} + +static yasm_section * +bin_objfmt_add_default_section(yasm_object *object) +{ + yasm_section *retval; + int isnew; + + retval = yasm_object_get_general(object, ".text", 0, 1, 0, &isnew, 0); + if (isnew) + yasm_section_set_default(retval, 1); + return retval; +} + +/* GAS-style flags */ +static int +bin_helper_gasflags(void *obj, yasm_valparam *vp, unsigned long line, void *d, + /*@unused@*/ uintptr_t arg) +{ + /* TODO */ + return 0; +} + +static /*@observer@*/ /*@null@*/ yasm_section * +bin_objfmt_section_switch(yasm_object *object, yasm_valparamhead *valparams, + /*@unused@*/ /*@null@*/ + yasm_valparamhead *objext_valparams, + unsigned long line) +{ + yasm_valparam *vp; + yasm_section *retval; + int isnew; + int flags_override = 0; + const char *sectname; + bin_section_data *bsd = NULL; + + struct bin_section_switch_data { + /*@only@*/ /*@null@*/ char *follows; + /*@only@*/ /*@null@*/ char *vfollows; + /*@only@*/ /*@null@*/ yasm_expr *start; + /*@only@*/ /*@null@*/ yasm_expr *vstart; + /*@only@*/ /*@null@*/ yasm_intnum *align; + /*@only@*/ /*@null@*/ yasm_intnum *valign; + unsigned long bss; + unsigned long code; + } data; + + static const yasm_dir_help help[] = { + { "follows", 1, yasm_dir_helper_string, + offsetof(struct bin_section_switch_data, follows), 0 }, + { "vfollows", 1, yasm_dir_helper_string, + offsetof(struct bin_section_switch_data, vfollows), 0 }, + { "start", 1, yasm_dir_helper_expr, + offsetof(struct bin_section_switch_data, start), 0 }, + { "vstart", 1, yasm_dir_helper_expr, + offsetof(struct bin_section_switch_data, vstart), 0 }, + { "align", 1, yasm_dir_helper_intn, + offsetof(struct bin_section_switch_data, align), 0 }, + { "valign", 1, yasm_dir_helper_intn, + offsetof(struct bin_section_switch_data, valign), 0 }, + { "nobits", 0, yasm_dir_helper_flag_set, + offsetof(struct bin_section_switch_data, bss), 1 }, + { "progbits", 0, yasm_dir_helper_flag_set, + offsetof(struct bin_section_switch_data, bss), 0 }, + { "code", 0, yasm_dir_helper_flag_set, + offsetof(struct bin_section_switch_data, code), 1 }, + { "data", 0, yasm_dir_helper_flag_set, + offsetof(struct bin_section_switch_data, code), 0 }, + { "execute", 0, yasm_dir_helper_flag_set, + offsetof(struct bin_section_switch_data, code), 1 }, + { "noexecute", 0, yasm_dir_helper_flag_set, + offsetof(struct bin_section_switch_data, code), 0 }, + { "gasflags", 1, bin_helper_gasflags, 0, 0 } + }; + + vp = yasm_vps_first(valparams); + sectname = yasm_vp_string(vp); + if (!sectname) + return NULL; + vp = yasm_vps_next(vp); + + retval = yasm_object_find_general(object, sectname); + if (retval) { + bsd = yasm_section_get_data(retval, &bin_section_data_cb); + assert(bsd != NULL); + data.follows = bsd->follows; + data.vfollows = bsd->vfollows; + data.start = bsd->start; + data.vstart = bsd->vstart; + data.align = NULL; + data.valign = NULL; + data.bss = bsd->bss; + data.code = yasm_section_is_code(retval); + } else { + data.follows = NULL; + data.vfollows = NULL; + data.start = NULL; + data.vstart = NULL; + data.align = NULL; + data.valign = NULL; + data.bss = strcmp(sectname, ".bss") == 0; + data.code = strcmp(sectname, ".text") == 0; + } + + flags_override = yasm_dir_helper(object, vp, line, help, NELEMS(help), + &data, yasm_dir_helper_valparam_warn); + if (flags_override < 0) + return NULL; /* error occurred */ + + if (data.start && data.follows) { + yasm_error_set(YASM_ERROR_GENERAL, + N_("cannot combine `start' and `follows' section attributes")); + return NULL; + } + + if (data.vstart && data.vfollows) { + yasm_error_set(YASM_ERROR_GENERAL, + N_("cannot combine `vstart' and `vfollows' section attributes")); + return NULL; + } + + if (data.align) { + unsigned long align = yasm_intnum_get_uint(data.align); + + /* Alignments must be a power of two. */ + if (!is_exp2(align)) { + yasm_error_set(YASM_ERROR_VALUE, + N_("argument to `%s' is not a power of two"), + "align"); + return NULL; + } + } else + data.align = bsd ? bsd->align : NULL; + + if (data.valign) { + unsigned long valign = yasm_intnum_get_uint(data.valign); + + /* Alignments must be a power of two. */ + if (!is_exp2(valign)) { + yasm_error_set(YASM_ERROR_VALUE, + N_("argument to `%s' is not a power of two"), + "valign"); + return NULL; + } + } else + data.valign = bsd ? bsd->valign : NULL; + + retval = yasm_object_get_general(object, sectname, 0, (int)data.code, + (int)data.bss, &isnew, line); + + bsd = yasm_section_get_data(retval, &bin_section_data_cb); + + if (isnew || yasm_section_is_default(retval)) { + yasm_section_set_default(retval, 0); + } + + /* Update section flags */ + bsd->bss = data.bss; + bsd->align = data.align; + bsd->valign = data.valign; + bsd->start = data.start; + bsd->vstart = data.vstart; + bsd->follows = data.follows; + bsd->vfollows = data.vfollows; + + return retval; +} + +static /*@observer@*/ /*@null@*/ yasm_symrec * +bin_objfmt_get_special_sym(yasm_object *object, const char *name, + const char *parser) +{ + return NULL; +} + +static void +bin_objfmt_dir_org(yasm_object *object, + /*@null@*/ yasm_valparamhead *valparams, + /*@unused@*/ /*@null@*/ + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_objfmt_bin *objfmt_bin = (yasm_objfmt_bin *)object->objfmt; + yasm_valparam *vp; + + /* We only allow a single ORG in a program. */ + if (objfmt_bin->org) { + yasm_error_set(YASM_ERROR_GENERAL, N_("program origin redefined")); + return; + } + + /* ORG takes just a simple expression as param */ + vp = yasm_vps_first(valparams); + objfmt_bin->org = yasm_vp_expr(vp, object->symtab, line); + if (!objfmt_bin->org) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("argument to ORG must be expression")); + return; + } +} + +struct bin_dir_map_data { + unsigned long flags; + /*@only@*/ /*@null@*/ char *filename; +}; + +static int +dir_map_filename(void *obj, yasm_valparam *vp, unsigned long line, void *data) +{ + struct bin_dir_map_data *mdata = (struct bin_dir_map_data *)data; + const char *filename; + + if (mdata->filename) { + yasm_warn_set(YASM_WARN_GENERAL, N_("map file already specified")); + return 0; + } + + filename = yasm_vp_string(vp); + if (!filename) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("unexpected expression in [map]")); + return -1; + } + mdata->filename = yasm__xstrdup(filename); + + return 1; +} + +static void +bin_objfmt_dir_map(yasm_object *object, + /*@null@*/ yasm_valparamhead *valparams, + /*@unused@*/ /*@null@*/ + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_objfmt_bin *objfmt_bin = (yasm_objfmt_bin *)object->objfmt; + + struct bin_dir_map_data data; + + static const yasm_dir_help help[] = { + { "all", 0, yasm_dir_helper_flag_or, + offsetof(struct bin_dir_map_data, flags), + MAP_BRIEF|MAP_SECTIONS|MAP_SYMBOLS }, + { "brief", 0, yasm_dir_helper_flag_or, + offsetof(struct bin_dir_map_data, flags), MAP_BRIEF }, + { "sections", 0, yasm_dir_helper_flag_or, + offsetof(struct bin_dir_map_data, flags), MAP_SECTIONS }, + { "segments", 0, yasm_dir_helper_flag_or, + offsetof(struct bin_dir_map_data, flags), MAP_SECTIONS }, + { "symbols", 0, yasm_dir_helper_flag_or, + offsetof(struct bin_dir_map_data, flags), MAP_SYMBOLS } + }; + + data.flags = objfmt_bin->map_flags | MAP_NONE; + data.filename = objfmt_bin->map_filename; + + if (valparams && yasm_dir_helper(object, yasm_vps_first(valparams), line, help, + NELEMS(help), &data, dir_map_filename) < 0) + return; /* error occurred */ + + objfmt_bin->map_flags = data.flags; + objfmt_bin->map_filename = data.filename; +} + +static void +bin_section_data_destroy(void *data) +{ + bin_section_data *bsd = (bin_section_data *)data; + if (bsd->start) + yasm_expr_destroy(bsd->start); + if (bsd->vstart) + yasm_expr_destroy(bsd->vstart); + if (bsd->follows) + yasm_xfree(bsd->follows); + if (bsd->vfollows) + yasm_xfree(bsd->vfollows); + if (bsd->istart) + yasm_intnum_destroy(bsd->istart); + if (bsd->ivstart) + yasm_intnum_destroy(bsd->ivstart); + if (bsd->length) + yasm_intnum_destroy(bsd->length); + yasm_xfree(data); +} + +static void +bin_section_data_print(void *data, FILE *f, int indent_level) +{ + bin_section_data *bsd = (bin_section_data *)data; + + fprintf(f, "%*sbss=%d\n", indent_level, "", bsd->bss); + + fprintf(f, "%*salign=", indent_level, ""); + if (bsd->align) + yasm_intnum_print(bsd->align, f); + else + fprintf(f, "(nil)"); + fprintf(f, "\n%*svalign=", indent_level, ""); + if (bsd->valign) + yasm_intnum_print(bsd->valign, f); + else + fprintf(f, "(nil)"); + + fprintf(f, "\n%*sstart=", indent_level, ""); + yasm_expr_print(bsd->start, f); + fprintf(f, "\n%*svstart=", indent_level, ""); + yasm_expr_print(bsd->vstart, f); + + fprintf(f, "\n%*sfollows=", indent_level, ""); + if (bsd->follows) + fprintf(f, "\"%s\"", bsd->follows); + else + fprintf(f, "(nil)"); + fprintf(f, "\n%*svfollows=", indent_level, ""); + if (bsd->vfollows) + fprintf(f, "\"%s\"", bsd->vfollows); + else + fprintf(f, "(nil)"); + + fprintf(f, "\n%*sistart=", indent_level, ""); + if (bsd->istart) + yasm_intnum_print(bsd->istart, f); + else + fprintf(f, "(nil)"); + fprintf(f, "\n%*sivstart=", indent_level, ""); + if (bsd->ivstart) + yasm_intnum_print(bsd->ivstart, f); + else + fprintf(f, "(nil)"); + + fprintf(f, "\n%*slength=", indent_level, ""); + if (bsd->length) + yasm_intnum_print(bsd->length, f); + else + fprintf(f, "(nil)"); + fprintf(f, "\n"); +} + +static void +bin_symrec_data_destroy(void *data) +{ + yasm_xfree(data); +} + +static void +bin_symrec_data_print(void *data, FILE *f, int indent_level) +{ + bin_symrec_data *bsymd = (bin_symrec_data *)data; + + fprintf(f, "%*ssection=\"%s\"\n", indent_level, "", + yasm_section_get_name(bsymd->section)); + fprintf(f, "%*swhich=", indent_level, ""); + switch (bsymd->which) { + case SSYM_START: fprintf(f, "START"); break; + case SSYM_VSTART: fprintf(f, "VSTART"); break; + case SSYM_LENGTH: fprintf(f, "LENGTH"); break; + } + fprintf(f, "\n"); +} + + +/* Define valid debug formats to use with this object format */ +static const char *bin_objfmt_dbgfmt_keywords[] = { + "null", + NULL +}; + +static const yasm_directive bin_objfmt_directives[] = { + { "org", "nasm", bin_objfmt_dir_org, YASM_DIR_ARG_REQUIRED }, + { "map", "nasm", bin_objfmt_dir_map, YASM_DIR_ANY }, + { NULL, NULL, NULL, 0 } +}; + +static const char *bin_nasm_stdmac[] = { + "%imacro org 1+.nolist", + "[org %1]", + "%endmacro", + NULL +}; + +static const yasm_stdmac bin_objfmt_stdmacs[] = { + { "nasm", "nasm", bin_nasm_stdmac }, + { "tasm", "tasm", bin_nasm_stdmac }, + { NULL, NULL, NULL } +}; + +/* Define objfmt structure -- see objfmt.h for details */ +yasm_objfmt_module yasm_bin_LTX_objfmt = { + "Flat format binary", + "bin", + NULL, + 16, + 0, + bin_objfmt_dbgfmt_keywords, + "null", + bin_objfmt_directives, + bin_objfmt_stdmacs, + bin_objfmt_create, + bin_objfmt_output, + bin_objfmt_destroy, + bin_objfmt_add_default_section, + bin_objfmt_init_new_section, + bin_objfmt_section_switch, + bin_objfmt_get_special_sym +}; + +#define EXE_HEADER_SIZE 0x200 + +/* DOS .EXE binaries are just raw binaries with a header */ +yasm_objfmt_module yasm_dosexe_LTX_objfmt; + +static yasm_objfmt * +dosexe_objfmt_create(yasm_object *object) +{ + yasm_objfmt_bin *objfmt_bin = (yasm_objfmt_bin *) bin_objfmt_create(object); + objfmt_bin->objfmt.module = &yasm_dosexe_LTX_objfmt; + return (yasm_objfmt *)objfmt_bin; +} + +static unsigned long +get_sym(yasm_object *object, const char *name) { + yasm_symrec *symrec = yasm_symtab_get(object->symtab, name); + yasm_bytecode *prevbc; + if (!symrec) + return 0; + if (!yasm_symrec_get_label(symrec, &prevbc)) + return 0; + return prevbc->offset + prevbc->len; +} + +static void +dosexe_objfmt_output(yasm_object *object, FILE *f, /*@unused@*/ int all_syms, + yasm_errwarns *errwarns) +{ + unsigned long tot_size, size, bss_size; + unsigned long start, bss; + unsigned char c; + + fseek(f, EXE_HEADER_SIZE, SEEK_SET); + + bin_objfmt_output(object, f, all_syms, errwarns); + + tot_size = ftell(f); + + /* if there is a __bss_start symbol, data after it is 0, no need to write + * it. */ + bss = get_sym(object, "__bss_start"); + if (bss) + size = bss; + else + size = tot_size; + bss_size = tot_size - size; +#ifdef HAVE_FTRUNCATE + if (size != tot_size) + ftruncate(fileno(f), EXE_HEADER_SIZE + size); +#endif + fseek(f, 0, SEEK_SET); + + /* magic */ + fwrite("MZ", 1, 2, f); + + /* file size */ + c = size & 0xff; + fwrite(&c, 1, 1, f); + c = !!(size & 0x100); + fwrite(&c, 1, 1, f); + c = ((size + 511) >> 9) & 0xff; + fwrite(&c, 1, 1, f); + c = ((size + 511) >> 17) & 0xff; + fwrite(&c, 1, 1, f); + + /* relocation # */ + c = 0; + fwrite(&c, 1, 1, f); + fwrite(&c, 1, 1, f); + + /* header size */ + c = EXE_HEADER_SIZE / 16; + fwrite(&c, 1, 1, f); + c = 0; + fwrite(&c, 1, 1, f); + + /* minimum paragraph # */ + bss_size = (bss_size + 15) >> 4; + c = bss_size & 0xff; + fwrite(&c, 1, 1, f); + c = (bss_size >> 8) & 0xff; + fwrite(&c, 1, 1, f); + + /* maximum paragraph # */ + c = 0xFF; + fwrite(&c, 1, 1, f); + fwrite(&c, 1, 1, f); + + /* relative value of stack segment */ + c = 0; + fwrite(&c, 1, 1, f); + fwrite(&c, 1, 1, f); + + /* SP at start */ + c = 0; + fwrite(&c, 1, 1, f); + fwrite(&c, 1, 1, f); + + /* header checksum */ + c = 0; + fwrite(&c, 1, 1, f); + fwrite(&c, 1, 1, f); + + /* IP at start */ + start = get_sym(object, "start"); + if (!start) { + yasm_error_set(YASM_ERROR_GENERAL, + N_("%s: could not find symbol `start'")); + return; + } + c = start & 0xff; + fwrite(&c, 1, 1, f); + c = (start >> 8) & 0xff; + fwrite(&c, 1, 1, f); + + /* CS start */ + c = 0; + fwrite(&c, 1, 1, f); + fwrite(&c, 1, 1, f); + + /* reloc start */ + c = 0x22; + fwrite(&c, 1, 1, f); + c = 0; + fwrite(&c, 1, 1, f); + + /* Overlay number */ + c = 0; + fwrite(&c, 1, 1, f); + fwrite(&c, 1, 1, f); +} + + +/* Define objfmt structure -- see objfmt.h for details */ +yasm_objfmt_module yasm_dosexe_LTX_objfmt = { + "DOS .EXE format binary", + "dosexe", + "exe", + 16, + 0, + bin_objfmt_dbgfmt_keywords, + "null", + bin_objfmt_directives, + bin_objfmt_stdmacs, + dosexe_objfmt_create, + dosexe_objfmt_output, + bin_objfmt_destroy, + bin_objfmt_add_default_section, + bin_objfmt_init_new_section, + bin_objfmt_section_switch, + bin_objfmt_get_special_sym +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/Makefile.inc new file mode 100644 index 0000000000..e29ed72f1d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/Makefile.inc @@ -0,0 +1,34 @@ +TESTS += modules/objfmts/bin/tests/bin_test.sh + +EXTRA_DIST += modules/objfmts/bin/tests/bin_test.sh +EXTRA_DIST += modules/objfmts/bin/tests/abs.asm +EXTRA_DIST += modules/objfmts/bin/tests/abs.hex +EXTRA_DIST += modules/objfmts/bin/tests/bigorg.asm +EXTRA_DIST += modules/objfmts/bin/tests/bigorg.hex +EXTRA_DIST += modules/objfmts/bin/tests/bigorg.errwarn +EXTRA_DIST += modules/objfmts/bin/tests/bin-farabs.asm +EXTRA_DIST += modules/objfmts/bin/tests/bin-farabs.hex +EXTRA_DIST += modules/objfmts/bin/tests/bin-rip.asm +EXTRA_DIST += modules/objfmts/bin/tests/bin-rip.hex +EXTRA_DIST += modules/objfmts/bin/tests/bintest.asm +EXTRA_DIST += modules/objfmts/bin/tests/bintest.hex +EXTRA_DIST += modules/objfmts/bin/tests/float-err.asm +EXTRA_DIST += modules/objfmts/bin/tests/float-err.errwarn +EXTRA_DIST += modules/objfmts/bin/tests/float.asm +EXTRA_DIST += modules/objfmts/bin/tests/float.hex +EXTRA_DIST += modules/objfmts/bin/tests/integer-warn.asm +EXTRA_DIST += modules/objfmts/bin/tests/integer-warn.hex +EXTRA_DIST += modules/objfmts/bin/tests/integer-warn.errwarn +EXTRA_DIST += modules/objfmts/bin/tests/integer.asm +EXTRA_DIST += modules/objfmts/bin/tests/integer.hex +EXTRA_DIST += modules/objfmts/bin/tests/levelop.asm +EXTRA_DIST += modules/objfmts/bin/tests/levelop.hex +EXTRA_DIST += modules/objfmts/bin/tests/reserve.asm +EXTRA_DIST += modules/objfmts/bin/tests/reserve.hex +EXTRA_DIST += modules/objfmts/bin/tests/reserve.errwarn +EXTRA_DIST += modules/objfmts/bin/tests/shr.asm +EXTRA_DIST += modules/objfmts/bin/tests/shr.hex + +EXTRA_DIST += modules/objfmts/bin/tests/multisect/Makefile.inc + +include modules/objfmts/bin/tests/multisect/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/abs.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/abs.asm new file mode 100644 index 0000000000..e34b14a7a6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/abs.asm @@ -0,0 +1,5 @@ +[absolute 0f0000000h] +foo: resb 1 +[section .data] +bar dd foo +baz db (foo>>24) diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/abs.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/abs.hex new file mode 100644 index 0000000000..a5612f0552 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/abs.hex @@ -0,0 +1,5 @@ +00 +00 +00 +f0 +f0 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bigorg.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bigorg.asm new file mode 100644 index 0000000000..a02ed32192 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bigorg.asm @@ -0,0 +1,9 @@ +[bits 64] +[org 0x000ffff100000000] +dd end-start +start: +mov rax, $ +mov rbx, $ +mov rax, qword $ +mov rbx, qword $ +end: diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bigorg.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bigorg.errwarn new file mode 100644 index 0000000000..30f590d6b3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bigorg.errwarn @@ -0,0 +1,2 @@ +-:5: warning: value does not fit in 32 bit field +-:6: warning: value does not fit in 32 bit field diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bigorg.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bigorg.hex new file mode 100644 index 0000000000..f26abd8f45 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bigorg.hex @@ -0,0 +1,38 @@ +22 +00 +00 +00 +48 +c7 +c0 +04 +00 +00 +00 +48 +c7 +c3 +0b +00 +00 +00 +48 +b8 +12 +00 +00 +00 +f1 +ff +0f +00 +48 +bb +1c +00 +00 +00 +f1 +ff +0f +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin-farabs.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin-farabs.asm new file mode 100644 index 0000000000..4d931c1e95 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin-farabs.asm @@ -0,0 +1,53 @@ +keybuf equ 0040h:001Eh + +absolute 5000h +label: + +section .text +absval equ 1000h + +org 0x100 +; Using seg should yield the segment part. +mov ax, seg keybuf +mov ax, seg (0040h:001Eh) ; NASM doesn't understand this syntax +mov es, ax + +; Use without seg should yield just the offset part. +mov bx, keybuf +;mov bx, 0040h:001Eh ; Illegal + +; Each of the below pairs should be equivalent (and legal) in Yasm. +; There are some differences from NASM here! + +; Defaults to near jump (on both NASM and Yasm) +jmp keybuf + +; Direct far jump. +jmp 0040h:001Eh + +; Force near (non-far) jump (just offset, no segment). +jmp near keybuf +jmp near 0040h:001Eh ; Illegal in NASM ("mismatch in operand sizes") + +; A couple of jumps to "normal" absolute addresses. +jmp 0x1e +jmp 0 +jmp absval +jmp label + +; Non-absolute jump +label2: +jmp label2 + +; Non-relative access +mov ax, [0] +mov ax, [label] + +; Direct far, explicitly. +jmp far keybuf ; Illegal in NASM ("value referenced by FAR is not relocatable") +jmp far 0040h:001Eh ; Illegal in NASM ("mismatch in operand sizes") + +keybufptr: +dw keybuf ; offset part +dw seg keybuf ; segment part + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin-farabs.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin-farabs.hex new file mode 100644 index 0000000000..5ebd422523 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin-farabs.hex @@ -0,0 +1,59 @@ +b8 +40 +00 +b8 +40 +00 +8e +c0 +bb +1e +00 +e9 +10 +ff +ea +1e +00 +40 +00 +e9 +08 +ff +e9 +05 +ff +e9 +02 +ff +e9 +e1 +fe +e9 +de +0e +e9 +db +4e +eb +fe +a1 +00 +00 +a1 +00 +50 +ea +1e +00 +40 +00 +ea +1e +00 +40 +00 +1e +00 +40 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin-rip.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin-rip.asm new file mode 100755 index 0000000000..22110545cc --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin-rip.asm @@ -0,0 +1,20 @@ +bits 64 +org 0x100 +foo_equ equ 0x12345678 + +section .text +nop +foo_text: +nop +mov rax,[foo_equ wrt rip] +mov rax,[foo_text wrt rip] +mov rax,[foo_data wrt rip] +mov rbx,[foo_equ wrt rip] +mov rbx,[foo_text wrt rip] +mov rbx,[foo_data wrt rip] + +section .data +db 0 +foo_data: +db 0 + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin-rip.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin-rip.hex new file mode 100644 index 0000000000..d56601d924 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin-rip.hex @@ -0,0 +1,46 @@ +90 +90 +48 +8b +05 +6f +55 +34 +12 +48 +8b +05 +f1 +ff +ff +ff +48 +8b +05 +16 +00 +00 +00 +48 +8b +1d +5a +55 +34 +12 +48 +8b +1d +dc +ff +ff +ff +48 +8b +1d +01 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin_test.sh new file mode 100755 index 0000000000..9ab7e41a7f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bin_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh bin_test modules/objfmts/bin/tests "bin objfmt" "-f bin" "" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bintest.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bintest.asm new file mode 100644 index 0000000000..c434ce942b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bintest.asm @@ -0,0 +1,56 @@ +; test source file for assembling to binary files +; build with: +; yasm -f bin -o bintest.com bintest.asm + +; When run (as a DOS .COM file), this program should print +; hello, world +; on two successive lines, then exit cleanly. + +; This file should test the following: +; [1] Define a text-section symbol +; [2] Define a data-section symbol +; [3] Define a BSS-section symbol +; [4] Define a NASM local label +; [5] Reference a NASM local label +; [6] Reference a text-section symbol in the text section +; [7] Reference a data-section symbol in the text section +; [8] Reference a BSS-section symbol in the text section +; [9] Reference a text-section symbol in the data section +; [10] Reference a data-section symbol in the data section +; [11] Reference a BSS-section symbol in the data section + +[BITS 16] +[ORG 0x100] + +[SECTION .text] + + jmp start ; [6] + +endX mov ax,0x4c00 ; [1] + int 0x21 + +start mov byte [bss_sym],',' ; [1] [8] + mov bx,[bssptr] ; [7] + mov al,[bx] + mov bx,[dataptr] ; [7] + mov [bx],al + mov cx,2 +.loop mov dx,datasym ; [1] [4] [7] + mov ah,9 + push cx + int 0x21 + pop cx + loop .loop ; [5] [6] + mov bx,[textptr] ; [7] + jmp bx + +[SECTION .data] + +datasym db 'hello world', 13, 10, '$' ; [2] +bssptr dw bss_sym ; [2] [11] +dataptr dw datasym+5 ; [2] [10] +textptr dw endX ; [2] [9] + +[SECTION .bss] + +bss_sym resb 1 ; [3] diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bintest.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bintest.hex new file mode 100644 index 0000000000..3a53e371c3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/bintest.hex @@ -0,0 +1,65 @@ +eb +05 +b8 +00 +4c +cd +21 +c6 +06 +44 +01 +2c +8b +1e +3b +01 +8a +07 +8b +1e +3d +01 +88 +07 +b9 +02 +00 +ba +2c +01 +b4 +09 +51 +cd +21 +59 +e2 +f5 +8b +1e +3f +01 +ff +e3 +68 +65 +6c +6c +6f +20 +20 +77 +6f +72 +6c +64 +0d +0a +24 +44 +01 +31 +01 +02 +01 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/float-err.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/float-err.asm new file mode 100644 index 0000000000..7c608ba02a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/float-err.asm @@ -0,0 +1,12 @@ +; Tests illegal float handling +db 1.2 +dw 3.14e500 +dd 5.12e100000 +dq 3.141592653589793e-158105 +dt 5653894745.318293470142875104710284019245e-1999 + +db -1.5 +dw -5593824513450897123075109385109385019324871093470134710984.34981 +dd -47102940.46710358135703124751034875109875103294510984019324 +dq -45102571092751092341095.5827509174509178450917845019e15555 +dt -1.e-100000 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/float-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/float-err.errwarn new file mode 100644 index 0000000000..4aaa940292 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/float-err.errwarn @@ -0,0 +1,8 @@ +-:2: error: invalid floating point constant size +-:3: warning: overflow in floating point expression +-:4: warning: overflow in floating point expression +-:5: warning: underflow in floating point expression +-:8: error: invalid floating point constant size +-:9: warning: overflow in floating point expression +-:11: warning: overflow in floating point expression +-:12: warning: underflow in floating point expression diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/float.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/float.asm new file mode 100644 index 0000000000..32d2777bfb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/float.asm @@ -0,0 +1,10 @@ +; Tests float handling +dw 3.14 +dd 5.12 +dq 3.141592653589793 +dt 5653894745.318293470142875104710284019245e335 + +dw -62000.0 +dd -47102940.467103581 +dq -45102571092751092341095.5827509174509178450917845019 +dt -1.e-1000 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/float.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/float.hex new file mode 100644 index 0000000000..33b0d9787c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/float.hex @@ -0,0 +1,48 @@ +48 +42 +0a +d7 +a3 +40 +18 +2d +44 +54 +fb +21 +09 +40 +75 +4e +ef +f1 +30 +25 +6e +97 +78 +44 +92 +fb +f7 +ae +33 +cc +4d +63 +8a +d2 +07 +1a +a3 +c4 +67 +14 +9e +a8 +88 +91 +8a +86 +05 +b3 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer-warn.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer-warn.asm new file mode 100644 index 0000000000..31c0f410b8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer-warn.asm @@ -0,0 +1,6 @@ +; Tests warnings with integer constant handling (for output, not parsing) +db 0x51a +dw 0x3875bc +dd 0x35783134affff +dq 0xABCDEF012345678989abb +dt 0xa907bc890d0e907f0134afb8adee diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer-warn.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer-warn.errwarn new file mode 100644 index 0000000000..dfce6c5de0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer-warn.errwarn @@ -0,0 +1,5 @@ +-:2: warning: value does not fit in 8 bit field +-:3: warning: value does not fit in 16 bit field +-:4: warning: value does not fit in 32 bit field +-:5: warning: value does not fit in 64 bit field +-:6: warning: value does not fit in 80 bit field diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer-warn.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer-warn.hex new file mode 100644 index 0000000000..82c4bfa4e4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer-warn.hex @@ -0,0 +1,25 @@ +1a +bc +75 +ff +ff +4a +13 +bb +9a +98 +78 +56 +34 +12 +f0 +ee +ad +b8 +af +34 +01 +7f +90 +0e +0d diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer.asm new file mode 100644 index 0000000000..469887c454 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer.asm @@ -0,0 +1,8 @@ +; Tests integer constant handling (for output, not parsing) + +db 0x51 +dw 0x3875 +dd 0x35783134 +dq 0xABCDEF0123456789 +dt 0xa907bc890d0e907f0134 + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer.hex new file mode 100644 index 0000000000..baad38fdaa --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/integer.hex @@ -0,0 +1,25 @@ +51 +75 +38 +34 +31 +78 +35 +89 +67 +45 +23 +01 +ef +cd +ab +34 +01 +7f +90 +0e +0d +89 +bc +07 +a9 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/levelop.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/levelop.asm new file mode 100644 index 0000000000..ee67eef9f0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/levelop.asm @@ -0,0 +1,4 @@ +test1: +mov word [0x0010 + (test2 - test1)], 0x0000 +mov word [0x0010 + test2 - test1], 0x0000 +test2: diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/levelop.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/levelop.hex new file mode 100644 index 0000000000..4e70f4b759 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/levelop.hex @@ -0,0 +1,12 @@ +c7 +06 +1c +00 +00 +00 +c7 +06 +1c +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/Makefile.inc new file mode 100644 index 0000000000..dcb7d62af9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/Makefile.inc @@ -0,0 +1,51 @@ +TESTS += modules/objfmts/bin/tests/multisect/bin_multi_test.sh + +EXTRA_DIST += modules/objfmts/bin/tests/multisect/bin_multi_test.sh +EXTRA_DIST += modules/objfmts/bin/tests/multisect/bin-align.asm +EXTRA_DIST += modules/objfmts/bin/tests/multisect/bin-align.errwarn +EXTRA_DIST += modules/objfmts/bin/tests/multisect/bin-align.hex +EXTRA_DIST += modules/objfmts/bin/tests/multisect/bin-align.map +EXTRA_DIST += modules/objfmts/bin/tests/multisect/bin-ssym.asm +EXTRA_DIST += modules/objfmts/bin/tests/multisect/bin-ssym.hex +EXTRA_DIST += modules/objfmts/bin/tests/multisect/bin-ssym.map +EXTRA_DIST += modules/objfmts/bin/tests/multisect/follows-loop1-err.asm +EXTRA_DIST += modules/objfmts/bin/tests/multisect/follows-loop1-err.errwarn +EXTRA_DIST += modules/objfmts/bin/tests/multisect/follows-loop2-err.asm +EXTRA_DIST += modules/objfmts/bin/tests/multisect/follows-loop2-err.errwarn +EXTRA_DIST += modules/objfmts/bin/tests/multisect/follows-notfound-err.asm +EXTRA_DIST += modules/objfmts/bin/tests/multisect/follows-notfound-err.errwarn +EXTRA_DIST += modules/objfmts/bin/tests/multisect/initbss.asm +EXTRA_DIST += modules/objfmts/bin/tests/multisect/initbss.errwarn +EXTRA_DIST += modules/objfmts/bin/tests/multisect/initbss.hex +EXTRA_DIST += modules/objfmts/bin/tests/multisect/initbss.map +EXTRA_DIST += modules/objfmts/bin/tests/multisect/ldlinux-sects.asm +EXTRA_DIST += modules/objfmts/bin/tests/multisect/ldlinux-sects.hex +EXTRA_DIST += modules/objfmts/bin/tests/multisect/ldlinux-sects.map +EXTRA_DIST += modules/objfmts/bin/tests/multisect/multisect1.asm +EXTRA_DIST += modules/objfmts/bin/tests/multisect/multisect1.hex +EXTRA_DIST += modules/objfmts/bin/tests/multisect/multisect1.map +EXTRA_DIST += modules/objfmts/bin/tests/multisect/multisect2.asm +EXTRA_DIST += modules/objfmts/bin/tests/multisect/multisect2.hex +EXTRA_DIST += modules/objfmts/bin/tests/multisect/multisect2.map +EXTRA_DIST += modules/objfmts/bin/tests/multisect/multisect3.asm +EXTRA_DIST += modules/objfmts/bin/tests/multisect/multisect3.hex +EXTRA_DIST += modules/objfmts/bin/tests/multisect/multisect3.map +EXTRA_DIST += modules/objfmts/bin/tests/multisect/multisect4.asm +EXTRA_DIST += modules/objfmts/bin/tests/multisect/multisect4.hex +EXTRA_DIST += modules/objfmts/bin/tests/multisect/multisect4.map +EXTRA_DIST += modules/objfmts/bin/tests/multisect/multisect5.asm +EXTRA_DIST += modules/objfmts/bin/tests/multisect/multisect5.hex +EXTRA_DIST += modules/objfmts/bin/tests/multisect/multisect5.map +EXTRA_DIST += modules/objfmts/bin/tests/multisect/nomultisect1.asm +EXTRA_DIST += modules/objfmts/bin/tests/multisect/nomultisect1.hex +EXTRA_DIST += modules/objfmts/bin/tests/multisect/nomultisect1.map +EXTRA_DIST += modules/objfmts/bin/tests/multisect/nomultisect2.asm +EXTRA_DIST += modules/objfmts/bin/tests/multisect/nomultisect2.hex +EXTRA_DIST += modules/objfmts/bin/tests/multisect/nomultisect2.map +EXTRA_DIST += modules/objfmts/bin/tests/multisect/vfollows-loop1-err.asm +EXTRA_DIST += modules/objfmts/bin/tests/multisect/vfollows-loop1-err.errwarn +EXTRA_DIST += modules/objfmts/bin/tests/multisect/vfollows-loop2-err.asm +EXTRA_DIST += modules/objfmts/bin/tests/multisect/vfollows-loop2-err.errwarn +EXTRA_DIST += modules/objfmts/bin/tests/multisect/vfollows-notfound-err.asm +EXTRA_DIST += modules/objfmts/bin/tests/multisect/vfollows-notfound-err.errwarn + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.asm new file mode 100644 index 0000000000..e355aac7a9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.asm @@ -0,0 +1,12 @@ +[map all binalign.map] +section .text +db 1 +align 8 +db 0 +section .data +align 8 +db 0 +section .foo align=4 +align 8 +section .bar valign=4 +align 8 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.errwarn new file mode 100644 index 0000000000..e13f89df5f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.errwarn @@ -0,0 +1,3 @@ +-: warning: section `.foo' internal align of 8 is greater than `align' of 4; using `align' +-: warning: section `.bar' internal align of 8 is greater than `valign' of 4; using `valign' +-:1: warning: map file already specified diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.hex new file mode 100644 index 0000000000..dd133f7771 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.hex @@ -0,0 +1,17 @@ +01 +8d +74 +00 +8d +bd +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.map b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.map new file mode 100644 index 0000000000..3031bd154c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-align.map @@ -0,0 +1,66 @@ + +- YASM Map file --------------------------------------------------------------- + +Source file: - +Output file: results/bin-align + +-- Program origin ------------------------------------------------------------- + +00000000 + +-- Sections (summary) --------------------------------------------------------- + +Vstart Vstop Start Stop Length Class Name +00000000 00000009 00000000 00000009 00000009 progbits .text +00000010 00000011 00000010 00000011 00000001 progbits .data +00000014 00000014 00000014 00000014 00000000 progbits .foo +00000018 00000018 00000018 00000018 00000000 progbits .bar + +-- Sections (detailed) -------------------------------------------------------- + +---- Section .text ------------------------------------------------------------ + +class: progbits +length: 00000009 +start: 00000000 +align: 00000008 +follows: not defined +vstart: 00000000 +valign: 00000008 +vfollows: not defined + +---- Section .data ------------------------------------------------------------ + +class: progbits +length: 00000001 +start: 00000010 +align: 00000008 +follows: not defined +vstart: 00000010 +valign: 00000008 +vfollows: not defined + +---- Section .foo ------------------------------------------------------------- + +class: progbits +length: 00000000 +start: 00000014 +align: 00000004 +follows: not defined +vstart: 00000014 +valign: 00000004 +vfollows: not defined + +---- Section .bar ------------------------------------------------------------- + +class: progbits +length: 00000000 +start: 00000018 +align: 00000008 +follows: not defined +vstart: 00000018 +valign: 00000004 +vfollows: not defined + +-- Symbols -------------------------------------------------------------------- + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-ssym.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-ssym.asm new file mode 100644 index 0000000000..8c5608cfd7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-ssym.asm @@ -0,0 +1,5 @@ +section foo start=0x10 vstart=0x6000 +mov si, section.foo.start +mov di, section.foo.vstart +mov cx, section.foo.length +;mov dx, section.foo.vstart-section.foo.start diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-ssym.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-ssym.hex new file mode 100644 index 0000000000..e89a7e22a2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-ssym.hex @@ -0,0 +1,25 @@ +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +be +10 +00 +bf +00 +60 +b9 +09 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-ssym.map b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-ssym.map new file mode 100644 index 0000000000..9ddfe1688b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin-ssym.map @@ -0,0 +1,16 @@ + +- YASM Map file --------------------------------------------------------------- + +Source file: - +Output file: results/bin-ssym + +-- Program origin ------------------------------------------------------------- + +00000000 + +-- Sections (summary) --------------------------------------------------------- + +Vstart Vstop Start Stop Length Class Name +00000000 00000000 00000000 00000000 00000000 progbits .text +00006000 00006009 00000010 00000019 00000009 progbits foo + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin_multi_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin_multi_test.sh new file mode 100755 index 0000000000..aa3f616cad --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/bin_multi_test.sh @@ -0,0 +1,113 @@ +#! /bin/sh + +YASM_TEST_SUITE=1 +export YASM_TEST_SUITE + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +mkdir results >/dev/null 2>&1 + +# +# Verify that all test cases match +# + +passedct=0 +failedct=0 + +echo $ECHO_N "Test bin_multi_test: $ECHO_C" +for asm in ${srcdir}/modules/objfmts/bin/tests/multisect/*.asm +do + a=`echo ${asm} | sed 's,^.*/,,;s,.asm$,,'` + o=${a} + oh=${a}.hx + og=`echo ${asm} | sed 's,.asm$,.hex,'` + e=${a}.ew + eg=`echo ${asm} | sed 's,.asm$,.errwarn,'` + m=${a}.map + mg=`echo ${asm} | sed 's,.asm$,.map,'` + if test \! -f ${eg}; then + eg=/dev/null + fi + + # Run within a subshell to prevent signal messages from displaying. + sh -c "cat ${asm} | ./yasm -f bin --mapfile=results/${m} -o results/${o} - 2>results/${e}" >/dev/null 2>/dev/null + status=$? + if test $status -gt 128; then + # We should never get a coredump! + echo $ECHO_N "C$ECHO_C" + eval "failed$failedct='C: ${a} crashed!'" + failedct=`expr $failedct + 1` + elif test $status -gt 0; then + echo ${asm} | grep err >/dev/null + if test $? -gt 0; then + # YASM detected errors but shouldn't have! + echo $ECHO_N "E$ECHO_C" + eval "failed$failedct='E: ${a} returned an error code!'" + failedct=`expr $failedct + 1` + else + # We got errors, check to see if they match: + if diff -w ${eg} results/${e} >/dev/null; then + # Error/warnings match, it passes! + echo $ECHO_N ".$ECHO_C" + passedct=`expr $passedct + 1` + else + # Error/warnings don't match. + echo $ECHO_N "W$ECHO_C" + eval "failed$failedct='W: ${a} did not match errors and warnings!'" + failedct=`expr $failedct + 1` + fi + fi + else + echo ${asm} | grep -v err >/dev/null + if test $? -gt 0; then + # YASM didn't detect errors but should have! + echo $ECHO_N "E$ECHO_C" + eval "failed$failedct='E: ${a} did not return an error code!'" + failedct=`expr $failedct + 1` + else + ./test_hd results/${o} > results/${oh} + if diff -w ${og} results/${oh} >/dev/null; then + if diff -w ${eg} results/${e} >/dev/null; then + if diff -w ${mg} results/${m} >/dev/null; then + # All match, it passes! + echo $ECHO_N ".$ECHO_C" + passedct=`expr $passedct + 1` + else + # Map file doesn't match. + echo $ECHO_N "M$ECHO_C" + eval "failed$failedct='M: ${a} did not match map file!'" + failedct=`expr $failedct + 1` + fi + else + # Error/warnings don't match. + echo $ECHO_N "W$ECHO_C" + eval "failed$failedct='W: ${a} did not match errors and warnings!'" + failedct=`expr $failedct + 1` + fi + else + # Object file doesn't match. + echo $ECHO_N "O$ECHO_C" + eval "failed$failedct='O: ${a} did not match object file!'" + failedct=`expr $failedct + 1` + fi + fi + fi +done + +ct=`expr $failedct + $passedct` +per=`expr 100 \* $passedct / $ct` + +echo " +$passedct-$failedct/$ct $per%" +i=0 +while test $i -lt $failedct; do + eval "failure=\$failed$i" + echo " ** $failure" + i=`expr $i + 1` +done + +exit $failedct diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop1-err.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop1-err.asm new file mode 100644 index 0000000000..ad7fef165f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop1-err.asm @@ -0,0 +1,2 @@ +section sect1 follows=sect2 +section sect2 follows=sect1 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop1-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop1-err.errwarn new file mode 100644 index 0000000000..613280e9c5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop1-err.errwarn @@ -0,0 +1 @@ +-: error: follows loop between section `sect2' and section `sect1' diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop2-err.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop2-err.asm new file mode 100644 index 0000000000..9b15f46565 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop2-err.asm @@ -0,0 +1 @@ +section sect follows=sect diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop2-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop2-err.errwarn new file mode 100644 index 0000000000..bc832e009b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-loop2-err.errwarn @@ -0,0 +1 @@ +-: error: follows loop between section `sect' and section `sect' diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-notfound-err.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-notfound-err.asm new file mode 100644 index 0000000000..36361d5210 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-notfound-err.asm @@ -0,0 +1,2 @@ +section foo follows=bar + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-notfound-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-notfound-err.errwarn new file mode 100644 index 0000000000..53d29d80e5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/follows-notfound-err.errwarn @@ -0,0 +1 @@ +-: error: section `foo' follows an invalid or unknown section `bar' diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.asm new file mode 100644 index 0000000000..8fe39bcc84 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.asm @@ -0,0 +1,5 @@ +section .bss +mov ax, 5 + +section foo nobits +db 5 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.errwarn new file mode 100644 index 0000000000..e92a68e413 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.errwarn @@ -0,0 +1,2 @@ +-:2: warning: initialized space declared in nobits section: ignoring +-:5: warning: initialized space declared in nobits section: ignoring diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.hex new file mode 100644 index 0000000000..e69de29bb2 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.map b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.map new file mode 100644 index 0000000000..d26734de72 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/initbss.map @@ -0,0 +1,17 @@ + +- YASM Map file --------------------------------------------------------------- + +Source file: - +Output file: results/initbss + +-- Program origin ------------------------------------------------------------- + +00000000 + +-- Sections (summary) --------------------------------------------------------- + +Vstart Vstop Start Stop Length Class Name +00000000 00000000 00000000 00000000 00000000 progbits .text +00000000 00000003 00000000 00000003 00000003 nobits .bss +00000004 00000005 00000004 00000005 00000001 nobits foo + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/ldlinux-sects.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/ldlinux-sects.asm new file mode 100644 index 0000000000..2beae7c708 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/ldlinux-sects.asm @@ -0,0 +1,102 @@ +[map all] +BSS_START equ 0800h +LATEBSS_START equ 0B800h +TEXT_START equ 7C00h +STACK_SIZE equ 4096 +STACK_START equ TEXT_START-STACK_SIZE +org TEXT_START +[section .text] +times 0x2410 db 0x1 +[section .earlybss nobits start=BSS_START] +resb 0x40C4 +[section .bcopy32 align=4 valign=16 follows=.data vfollows=.earlybss] +times 0x2A0 db 0x3 +[section .config align=4 valign=16 follows=.bcopy32 vfollows=.bcopy32] +times 0x23 db 0x4 +[section .config.end nobits valign=4 vfollows=.config] +[section .bss1 nobits valign=16 vfollows=.config.end] +resb 0x1FB +[section .text start=TEXT_START] +[section .data align=16] +times 0x590 db 0x2 +[section .adv progbits align=1 follows=.config] +[section .bss nobits align=16 follows=.adv] +resb 0x3900 +[section .stack nobits align=16 start=STACK_START] +resb STACK_SIZE +[section .stack nobits align=16 start=STACK_START] +[section .stack nobits align=16 start=STACK_START] +[section .earlybss] +[section .bss] +[section .text] +[section .bss] +[section .text] +[section .data] +[section .text] +[section .text] +[section .text] +[section .bss] +[section .text] +[section .data] +[section .bss] +[section .text] +[section .data] +[section .bss] +[section .text] +[section .text] +[section .text] +[section .data] +[section .bss1] +[section .data] +[section .text] +[section .bss1] +[section .text] +[section .text] +[section .data] +[section .text] +[section .text] +[section .bss] +[section .text] +[section .bss] +[section .text] +[section .data] +[section .text] +[section .text] +[section .bss1] +[section .data] +[section .text] +[section .text] +[section .data] +[section .config] +[section .bss] +[section .text] +[section .text] +[section .text] +[section .data] +[section .text] +[section .data] +[section .config] +[section .bss] +[section .text] +[section .text] +[section .data] +[section .bss] +[section .bcopy32] +[section .data] +[section .bcopy32] +[section .earlybss] +[section .text] +[section .text] +[section .bss] +[section .data] +[section .bss1] +[section .text] +[section .data] +[section .bss1] +[section .text] +[section .bss] +[section .text] +[section .text] +[section .text] +[section .bss] +[section .data] diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/ldlinux-sects.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/ldlinux-sects.hex new file mode 100644 index 0000000000..bb591fc04d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/ldlinux-sects.hex @@ -0,0 +1,11363 @@ +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 +04 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/ldlinux-sects.map b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/ldlinux-sects.map new file mode 100644 index 0000000000..03fde84526 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/ldlinux-sects.map @@ -0,0 +1,148 @@ + +- YASM Map file --------------------------------------------------------------- + +Source file: - +Output file: results/ldlinux-sects + +-- Program origin ------------------------------------------------------------- + +00007C00 + +-- Sections (summary) --------------------------------------------------------- + +Vstart Vstop Start Stop Length Class Name +00000800 000048C4 00000800 000048C4 000040C4 nobits .earlybss +00006C00 00007C00 00006C00 00007C00 00001000 nobits .stack +00007C00 0000A010 00007C00 0000A010 00002410 progbits .text +0000A010 0000A5A0 0000A010 0000A5A0 00000590 progbits .data +000048D0 00004B70 0000A5A0 0000A840 000002A0 progbits .bcopy32 +00004B70 00004B93 0000A840 0000A863 00000023 progbits .config +0000A863 0000A863 0000A863 0000A863 00000000 progbits .adv +0000A870 0000E170 0000A870 0000E170 00003900 nobits .bss +00004B94 00004B94 0000E170 0000E170 00000000 nobits .config.end +00004BA0 00004D9B 0000E170 0000E36B 000001FB nobits .bss1 + +-- Sections (detailed) -------------------------------------------------------- + +---- Section .earlybss -------------------------------------------------------- + +class: nobits +length: 000040C4 +start: 00000800 +align: 00000004 +follows: not defined +vstart: 00000800 +valign: 00000004 +vfollows: not defined + +---- Section .stack ----------------------------------------------------------- + +class: nobits +length: 00001000 +start: 00006C00 +align: 00000010 +follows: not defined +vstart: 00006C00 +valign: 00000010 +vfollows: not defined + +---- Section .text ------------------------------------------------------------ + +class: progbits +length: 00002410 +start: 00007C00 +align: 00000004 +follows: not defined +vstart: 00007C00 +valign: 00000004 +vfollows: not defined + +---- Section .data ------------------------------------------------------------ + +class: progbits +length: 00000590 +start: 0000A010 +align: 00000010 +follows: not defined +vstart: 0000A010 +valign: 00000010 +vfollows: not defined + +---- Section .bcopy32 --------------------------------------------------------- + +class: progbits +length: 000002A0 +start: 0000A5A0 +align: 00000004 +follows: .data +vstart: 000048D0 +valign: 00000010 +vfollows: .earlybss + +---- Section .config ---------------------------------------------------------- + +class: progbits +length: 00000023 +start: 0000A840 +align: 00000004 +follows: .bcopy32 +vstart: 00004B70 +valign: 00000010 +vfollows: .bcopy32 + +---- Section .adv ------------------------------------------------------------- + +class: progbits +length: 00000000 +start: 0000A863 +align: 00000001 +follows: .config +vstart: 0000A863 +valign: 00000001 +vfollows: not defined + +---- Section .bss ------------------------------------------------------------- + +class: nobits +length: 00003900 +start: 0000A870 +align: 00000010 +follows: .adv +vstart: 0000A870 +valign: 00000010 +vfollows: not defined + +---- Section .config.end ------------------------------------------------------ + +class: nobits +length: 00000000 +start: 0000E170 +align: 00000004 +follows: not defined +vstart: 00004B94 +valign: 00000004 +vfollows: .config + +---- Section .bss1 ------------------------------------------------------------ + +class: nobits +length: 000001FB +start: 0000E170 +align: 00000004 +follows: not defined +vstart: 00004BA0 +valign: 00000010 +vfollows: .config.end + +-- Symbols -------------------------------------------------------------------- + +---- No Section --------------------------------------------------------------- + +Value Name +00000800 BSS_START +0000B800 LATEBSS_START +00007C00 TEXT_START +00001000 STACK_SIZE +00006C00 STACK_START + + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect1.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect1.asm new file mode 100644 index 0000000000..d9699b79f9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect1.asm @@ -0,0 +1,31 @@ +[BITS 32] + +[MAP all] +; This file is loaded as a DOS .COM file. +[SEGMENT _TEXT start=0 vstart=100h] + +; shrink & relocate stack: + mov sp, stack_ends ; NASM puts 460h here - + ; 9B0h is desired. + mov bx, sp + mov cl, 4 + shr bx, cl + mov ah, 4Ah ; DOS resize mem.block + int 21h + +[SEGMENT GATESEG align=1 follows=_TEXT vstart=0] +; label to use for copying this segment at run-time. +gate0cpy: +dd 0 + +; 32-bit ring-0 protected mode code that interacts +; with the VMM (Win3.x/9x kernel). To be relocated +; at run-time to memory dynamically allocated with +; DPMI, and called through a call-gate from ring-3. +; vstart=0 makes some calculations easier. + +; Reserve space for stack: +[SEGMENT .bss follows=GATESEG align=16] + resb 400h +stack_ends: + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect1.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect1.hex new file mode 100644 index 0000000000..32695b89af --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect1.hex @@ -0,0 +1,20 @@ +66 +bc +20 +04 +66 +89 +e3 +b1 +04 +66 +d3 +eb +b4 +4a +cd +21 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect1.map b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect1.map new file mode 100644 index 0000000000..0a56e413be --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect1.map @@ -0,0 +1,78 @@ + +- YASM Map file --------------------------------------------------------------- + +Source file: - +Output file: results/multisect1 + +-- Program origin ------------------------------------------------------------- + +00000000 + +-- Sections (summary) --------------------------------------------------------- + +Vstart Vstop Start Stop Length Class Name +00000000 00000000 00000000 00000000 00000000 progbits .text +00000100 00000110 00000000 00000010 00000010 progbits _TEXT +00000000 00000004 00000010 00000014 00000004 progbits GATESEG +00000020 00000420 00000020 00000420 00000400 nobits .bss + +-- Sections (detailed) -------------------------------------------------------- + +---- Section .text ------------------------------------------------------------ + +class: progbits +length: 00000000 +start: 00000000 +align: 00000004 +follows: not defined +vstart: 00000000 +valign: 00000004 +vfollows: not defined + +---- Section _TEXT ------------------------------------------------------------ + +class: progbits +length: 00000010 +start: 00000000 +align: 00000004 +follows: not defined +vstart: 00000100 +valign: 00000004 +vfollows: not defined + +---- Section GATESEG ---------------------------------------------------------- + +class: progbits +length: 00000004 +start: 00000010 +align: 00000001 +follows: _TEXT +vstart: 00000000 +valign: 00000001 +vfollows: not defined + +---- Section .bss ------------------------------------------------------------- + +class: nobits +length: 00000400 +start: 00000020 +align: 00000010 +follows: GATESEG +vstart: 00000020 +valign: 00000010 +vfollows: not defined + +-- Symbols -------------------------------------------------------------------- + +---- Section GATESEG ---------------------------------------------------------- + +Real Virtual Name +00000010 00000000 gate0cpy + + +---- Section .bss ------------------------------------------------------------- + +Real Virtual Name +00000420 00000420 stack_ends + + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect2.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect2.asm new file mode 100644 index 0000000000..cfbf58c62b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect2.asm @@ -0,0 +1,42 @@ +org 100h +[map all] + +section .bss ; follows=.data + buffer resb 123h +section .data + msg db "this is a message", 0 +section .text + mov ax, msg + call showax + mov ax, buffer + call showax + ret + +;----------------- +showax: + push cx + push dx + + mov cx, 4 ; four digits to show + +.top + rol ax, 4 ; rotate one digit into position + mov dl, al ; make a copy to process + and dl, 0Fh ; mask off a single (hex) digit + cmp dl, 9 ; is it in the "A" to "F" range? + jbe .dec_dig ; no, skip it + add dl, 7 ; adjust +.dec_dig: + add dl, 30h ; convert to character + + push ax + mov ah, 2 + int 21h + pop ax + + loop .top + + pop dx + pop cx + ret +;-------------------------- diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect2.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect2.hex new file mode 100644 index 0000000000..f043f3729a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect2.hex @@ -0,0 +1,66 @@ +b8 +30 +01 +e8 +07 +00 +b8 +44 +01 +e8 +01 +00 +c3 +51 +52 +b9 +04 +00 +c1 +c0 +04 +88 +c2 +80 +e2 +0f +80 +fa +09 +76 +03 +80 +c2 +07 +80 +c2 +30 +50 +b4 +02 +cd +21 +58 +e2 +e5 +5a +59 +c3 +74 +68 +69 +73 +20 +69 +73 +20 +61 +20 +6d +65 +73 +73 +61 +67 +65 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect2.map b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect2.map new file mode 100644 index 0000000000..82002edb4a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect2.map @@ -0,0 +1,74 @@ + +- YASM Map file --------------------------------------------------------------- + +Source file: - +Output file: results/multisect2 + +-- Program origin ------------------------------------------------------------- + +00000100 + +-- Sections (summary) --------------------------------------------------------- + +Vstart Vstop Start Stop Length Class Name +00000100 00000130 00000100 00000130 00000030 progbits .text +00000130 00000142 00000130 00000142 00000012 progbits .data +00000144 00000267 00000144 00000267 00000123 nobits .bss + +-- Sections (detailed) -------------------------------------------------------- + +---- Section .text ------------------------------------------------------------ + +class: progbits +length: 00000030 +start: 00000100 +align: 00000004 +follows: not defined +vstart: 00000100 +valign: 00000004 +vfollows: not defined + +---- Section .data ------------------------------------------------------------ + +class: progbits +length: 00000012 +start: 00000130 +align: 00000004 +follows: not defined +vstart: 00000130 +valign: 00000004 +vfollows: not defined + +---- Section .bss ------------------------------------------------------------- + +class: nobits +length: 00000123 +start: 00000144 +align: 00000004 +follows: not defined +vstart: 00000144 +valign: 00000004 +vfollows: not defined + +-- Symbols -------------------------------------------------------------------- + +---- Section .text ------------------------------------------------------------ + +Real Virtual Name +0000010D 0000010D showax +00000112 00000112 showax.top +00000122 00000122 showax.dec_dig + + +---- Section .data ------------------------------------------------------------ + +Real Virtual Name +00000130 00000130 msg + + +---- Section .bss ------------------------------------------------------------- + +Real Virtual Name +00000144 00000144 buffer + + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect3.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect3.asm new file mode 100644 index 0000000000..d6499f96b9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect3.asm @@ -0,0 +1,9 @@ +[map all] +section .text + mov ax, bx + +section .foo nobits follows=.text + resb 4 + +section .bss + resb 4 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect3.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect3.hex new file mode 100644 index 0000000000..a9949757f3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect3.hex @@ -0,0 +1,2 @@ +89 +d8 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect3.map b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect3.map new file mode 100644 index 0000000000..1c67c227b9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect3.map @@ -0,0 +1,54 @@ + +- YASM Map file --------------------------------------------------------------- + +Source file: - +Output file: results/multisect3 + +-- Program origin ------------------------------------------------------------- + +00000000 + +-- Sections (summary) --------------------------------------------------------- + +Vstart Vstop Start Stop Length Class Name +00000000 00000002 00000000 00000002 00000002 progbits .text +00000004 00000008 00000004 00000008 00000004 nobits .foo +00000008 0000000C 00000008 0000000C 00000004 nobits .bss + +-- Sections (detailed) -------------------------------------------------------- + +---- Section .text ------------------------------------------------------------ + +class: progbits +length: 00000002 +start: 00000000 +align: 00000004 +follows: not defined +vstart: 00000000 +valign: 00000004 +vfollows: not defined + +---- Section .foo ------------------------------------------------------------- + +class: nobits +length: 00000004 +start: 00000004 +align: 00000004 +follows: .text +vstart: 00000004 +valign: 00000004 +vfollows: not defined + +---- Section .bss ------------------------------------------------------------- + +class: nobits +length: 00000004 +start: 00000008 +align: 00000004 +follows: not defined +vstart: 00000008 +valign: 00000004 +vfollows: not defined + +-- Symbols -------------------------------------------------------------------- + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect4.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect4.asm new file mode 100644 index 0000000000..94d2415f4b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect4.asm @@ -0,0 +1,31 @@ +[map all] +; Memory below 0800h is reserved for the BIOS and the MBR +BSS_START equ 0800h + +; PXELINUX needs lots of BSS, so it relocates itself on startup +;%if IS_PXELINUX +TEXT_START equ 9000h +;%else +;TEXT_START equ 7C00h +;%endif + +; +; The various sections and their relationship +; +org TEXT_START + +times 0x100 db 0x3 + +section .earlybss nobits start=BSS_START +resb 0x100 +section .bcopy32 align=16 follows=.data vfollows=.earlybss +times 0x100 db 0x1 +section .bss nobits align=256 vfollows=.bcopy32 +resb 0x100 + +section .text start=TEXT_START +section .data align=16 follows=.text +times 0x100 db 0x2 + +section .latebss nobits align=16 follows=.bcopy32 +resb 0x100 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect4.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect4.hex new file mode 100644 index 0000000000..d40d7a1912 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect4.hex @@ -0,0 +1,768 @@ +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +02 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect4.map b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect4.map new file mode 100644 index 0000000000..e1940dc660 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect4.map @@ -0,0 +1,97 @@ + +- YASM Map file --------------------------------------------------------------- + +Source file: - +Output file: results/multisect4 + +-- Program origin ------------------------------------------------------------- + +00009000 + +-- Sections (summary) --------------------------------------------------------- + +Vstart Vstop Start Stop Length Class Name +00000800 00000900 00000800 00000900 00000100 nobits .earlybss +00009000 00009100 00009000 00009100 00000100 progbits .text +00009100 00009200 00009100 00009200 00000100 progbits .data +00000900 00000A00 00009200 00009300 00000100 progbits .bcopy32 +00009300 00009400 00009300 00009400 00000100 nobits .latebss +00000A00 00000B00 00009400 00009500 00000100 nobits .bss + +-- Sections (detailed) -------------------------------------------------------- + +---- Section .earlybss -------------------------------------------------------- + +class: nobits +length: 00000100 +start: 00000800 +align: 00000004 +follows: not defined +vstart: 00000800 +valign: 00000004 +vfollows: not defined + +---- Section .text ------------------------------------------------------------ + +class: progbits +length: 00000100 +start: 00009000 +align: 00000004 +follows: not defined +vstart: 00009000 +valign: 00000004 +vfollows: not defined + +---- Section .data ------------------------------------------------------------ + +class: progbits +length: 00000100 +start: 00009100 +align: 00000010 +follows: .text +vstart: 00009100 +valign: 00000010 +vfollows: not defined + +---- Section .bcopy32 --------------------------------------------------------- + +class: progbits +length: 00000100 +start: 00009200 +align: 00000010 +follows: .data +vstart: 00000900 +valign: 00000010 +vfollows: .earlybss + +---- Section .latebss --------------------------------------------------------- + +class: nobits +length: 00000100 +start: 00009300 +align: 00000010 +follows: .bcopy32 +vstart: 00009300 +valign: 00000010 +vfollows: not defined + +---- Section .bss ------------------------------------------------------------- + +class: nobits +length: 00000100 +start: 00009400 +align: 00000100 +follows: not defined +vstart: 00000A00 +valign: 00000100 +vfollows: .bcopy32 + +-- Symbols -------------------------------------------------------------------- + +---- No Section --------------------------------------------------------------- + +Value Name +00000800 BSS_START +00009000 TEXT_START + + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect5.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect5.asm new file mode 100644 index 0000000000..2b76117219 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect5.asm @@ -0,0 +1,22 @@ +org 0x100 +[map all] +section sect1 start=0x100 vstart=0x2000 +times 0x100 db 0 +section sect2 follows=sect1 +times 0x100 db 0 + +section sect3 start=0x300 vstart=0x4000 +times 0x100 db 0 +section sect4 follows=sect3 +times 0x100 db 0 +section sect5 vfollows=sect3 +times 0x100 db 0 + +section sect6 start=0x600 vstart=0x6000 +times 0x11 db 0 +section sect7 follows=sect6 valign=16 +times 0x104 db 0 +section sect8 follows=sect7 valign=16 ; NASM bug - sect7 and sect8 overlap +times 0x100 db 0 + +section sect9 vfollows=sect8 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect5.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect5.hex new file mode 100644 index 0000000000..a2776bc8b7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect5.hex @@ -0,0 +1,1816 @@ +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect5.map b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect5.map new file mode 100644 index 0000000000..4c052be6f4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/multisect5.map @@ -0,0 +1,138 @@ + +- YASM Map file --------------------------------------------------------------- + +Source file: - +Output file: results/multisect5 + +-- Program origin ------------------------------------------------------------- + +00000100 + +-- Sections (summary) --------------------------------------------------------- + +Vstart Vstop Start Stop Length Class Name +00000100 00000100 00000100 00000100 00000000 progbits .text +00002000 00002100 00000100 00000200 00000100 progbits sect1 +00000200 00000300 00000200 00000300 00000100 progbits sect2 +00004000 00004100 00000300 00000400 00000100 progbits sect3 +00000400 00000500 00000400 00000500 00000100 progbits sect4 +00004100 00004200 00000500 00000600 00000100 progbits sect5 +00006000 00006011 00000600 00000611 00000011 progbits sect6 +00000620 00000724 00000614 00000718 00000104 progbits sect7 +00000730 00000830 00000718 00000818 00000100 progbits sect8 +00000830 00000830 00000818 00000818 00000000 progbits sect9 + +-- Sections (detailed) -------------------------------------------------------- + +---- Section .text ------------------------------------------------------------ + +class: progbits +length: 00000000 +start: 00000100 +align: 00000004 +follows: not defined +vstart: 00000100 +valign: 00000004 +vfollows: not defined + +---- Section sect1 ------------------------------------------------------------ + +class: progbits +length: 00000100 +start: 00000100 +align: 00000004 +follows: not defined +vstart: 00002000 +valign: 00000004 +vfollows: not defined + +---- Section sect2 ------------------------------------------------------------ + +class: progbits +length: 00000100 +start: 00000200 +align: 00000004 +follows: sect1 +vstart: 00000200 +valign: 00000004 +vfollows: not defined + +---- Section sect3 ------------------------------------------------------------ + +class: progbits +length: 00000100 +start: 00000300 +align: 00000004 +follows: not defined +vstart: 00004000 +valign: 00000004 +vfollows: not defined + +---- Section sect4 ------------------------------------------------------------ + +class: progbits +length: 00000100 +start: 00000400 +align: 00000004 +follows: sect3 +vstart: 00000400 +valign: 00000004 +vfollows: not defined + +---- Section sect5 ------------------------------------------------------------ + +class: progbits +length: 00000100 +start: 00000500 +align: 00000004 +follows: not defined +vstart: 00004100 +valign: 00000004 +vfollows: sect3 + +---- Section sect6 ------------------------------------------------------------ + +class: progbits +length: 00000011 +start: 00000600 +align: 00000004 +follows: not defined +vstart: 00006000 +valign: 00000004 +vfollows: not defined + +---- Section sect7 ------------------------------------------------------------ + +class: progbits +length: 00000104 +start: 00000614 +align: 00000004 +follows: sect6 +vstart: 00000620 +valign: 00000010 +vfollows: not defined + +---- Section sect8 ------------------------------------------------------------ + +class: progbits +length: 00000100 +start: 00000718 +align: 00000004 +follows: sect7 +vstart: 00000730 +valign: 00000010 +vfollows: not defined + +---- Section sect9 ------------------------------------------------------------ + +class: progbits +length: 00000000 +start: 00000818 +align: 00000004 +follows: not defined +vstart: 00000830 +valign: 00000004 +vfollows: sect8 + +-- Symbols -------------------------------------------------------------------- + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect1.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect1.asm new file mode 100644 index 0000000000..5f720d840d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect1.asm @@ -0,0 +1,10 @@ +[map all] + +[section .bss] +resb 0x100 + +[section .data] +times 0x100 db 1 + +[section .text] +times 0x100 db 1 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect1.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect1.hex new file mode 100644 index 0000000000..59c9350b51 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect1.hex @@ -0,0 +1,512 @@ +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect1.map b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect1.map new file mode 100644 index 0000000000..8997420755 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect1.map @@ -0,0 +1,54 @@ + +- YASM Map file --------------------------------------------------------------- + +Source file: - +Output file: results/nomultisect1 + +-- Program origin ------------------------------------------------------------- + +00000000 + +-- Sections (summary) --------------------------------------------------------- + +Vstart Vstop Start Stop Length Class Name +00000000 00000100 00000000 00000100 00000100 progbits .text +00000100 00000200 00000100 00000200 00000100 progbits .data +00000200 00000300 00000200 00000300 00000100 nobits .bss + +-- Sections (detailed) -------------------------------------------------------- + +---- Section .text ------------------------------------------------------------ + +class: progbits +length: 00000100 +start: 00000000 +align: 00000004 +follows: not defined +vstart: 00000000 +valign: 00000004 +vfollows: not defined + +---- Section .data ------------------------------------------------------------ + +class: progbits +length: 00000100 +start: 00000100 +align: 00000004 +follows: not defined +vstart: 00000100 +valign: 00000004 +vfollows: not defined + +---- Section .bss ------------------------------------------------------------- + +class: nobits +length: 00000100 +start: 00000200 +align: 00000004 +follows: not defined +vstart: 00000200 +valign: 00000004 +vfollows: not defined + +-- Symbols -------------------------------------------------------------------- + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect2.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect2.asm new file mode 100644 index 0000000000..b97e40a77f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect2.asm @@ -0,0 +1,12 @@ +org 0x100 + +[map all] + +[section .bss] +resb 0x100 + +[section .data] +times 0x100 db 1 + +[section .text] +times 0x100 db 1 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect2.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect2.hex new file mode 100644 index 0000000000..59c9350b51 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect2.hex @@ -0,0 +1,512 @@ +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect2.map b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect2.map new file mode 100644 index 0000000000..cc6d9c87af --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/nomultisect2.map @@ -0,0 +1,54 @@ + +- YASM Map file --------------------------------------------------------------- + +Source file: - +Output file: results/nomultisect2 + +-- Program origin ------------------------------------------------------------- + +00000100 + +-- Sections (summary) --------------------------------------------------------- + +Vstart Vstop Start Stop Length Class Name +00000100 00000200 00000100 00000200 00000100 progbits .text +00000200 00000300 00000200 00000300 00000100 progbits .data +00000300 00000400 00000300 00000400 00000100 nobits .bss + +-- Sections (detailed) -------------------------------------------------------- + +---- Section .text ------------------------------------------------------------ + +class: progbits +length: 00000100 +start: 00000100 +align: 00000004 +follows: not defined +vstart: 00000100 +valign: 00000004 +vfollows: not defined + +---- Section .data ------------------------------------------------------------ + +class: progbits +length: 00000100 +start: 00000200 +align: 00000004 +follows: not defined +vstart: 00000200 +valign: 00000004 +vfollows: not defined + +---- Section .bss ------------------------------------------------------------- + +class: nobits +length: 00000100 +start: 00000300 +align: 00000004 +follows: not defined +vstart: 00000300 +valign: 00000004 +vfollows: not defined + +-- Symbols -------------------------------------------------------------------- + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop1-err.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop1-err.asm new file mode 100644 index 0000000000..84a7c1e43b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop1-err.asm @@ -0,0 +1,2 @@ +section sect1 vfollows=sect2 +section sect2 vfollows=sect1 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop1-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop1-err.errwarn new file mode 100644 index 0000000000..3965e589d1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop1-err.errwarn @@ -0,0 +1 @@ +-: error: vfollows loop between section `sect2' and section `sect1' diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop2-err.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop2-err.asm new file mode 100644 index 0000000000..ac080b859f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop2-err.asm @@ -0,0 +1 @@ +section sect vfollows=sect diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop2-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop2-err.errwarn new file mode 100644 index 0000000000..4f252b4272 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-loop2-err.errwarn @@ -0,0 +1 @@ +-: error: vfollows loop between section `sect' and section `sect' diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-notfound-err.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-notfound-err.asm new file mode 100644 index 0000000000..fe0f6e5b33 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-notfound-err.asm @@ -0,0 +1,2 @@ +section foo vfollows=bar + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-notfound-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-notfound-err.errwarn new file mode 100644 index 0000000000..93b44d086c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/multisect/vfollows-notfound-err.errwarn @@ -0,0 +1 @@ +-: error: section `foo' vfollows an invalid or unknown section `bar' diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/reserve.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/reserve.asm new file mode 100644 index 0000000000..cd87e21654 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/reserve.asm @@ -0,0 +1,14 @@ +; Test res* family +resb 5 +resw 10 +resd 50 +resq 1 +rest 0 + +[section .bss] +resb 1 +resw 5 +resd 10 +resq 40 +rest 4 + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/reserve.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/reserve.errwarn new file mode 100644 index 0000000000..fb0d722385 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/reserve.errwarn @@ -0,0 +1,4 @@ +-:2: warning: uninitialized space declared in code/data section: zeroing +-:3: warning: uninitialized space declared in code/data section: zeroing +-:4: warning: uninitialized space declared in code/data section: zeroing +-:5: warning: uninitialized space declared in code/data section: zeroing diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/reserve.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/reserve.hex new file mode 100644 index 0000000000..49dfa566d9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/reserve.hex @@ -0,0 +1,233 @@ +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/shr.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/shr.asm new file mode 100644 index 0000000000..66ade16c8d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/shr.asm @@ -0,0 +1,3 @@ +x: mov al, x>>8 +times 256 db 0 +y: mov ah, y>>8 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/shr.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/shr.hex new file mode 100644 index 0000000000..9ce7eee7d3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/bin/tests/shr.hex @@ -0,0 +1,260 @@ +b0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b4 +01 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/CMakeLists.txt new file mode 100644 index 0000000000..5f63d4f7ff --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/CMakeLists.txt @@ -0,0 +1,27 @@ +YASM_GENMACRO( + ${CMAKE_CURRENT_SOURCE_DIR}/objfmts/coff/win64-nasm.mac + ${CMAKE_CURRENT_BINARY_DIR}/win64-nasm.c + win64_nasm_stdmac + ) + +YASM_GENMACRO( + ${CMAKE_CURRENT_SOURCE_DIR}/objfmts/coff/win64-gas.mac + ${CMAKE_CURRENT_BINARY_DIR}/win64-gas.c + win64_gas_stdmac + ) + +SET(coff_DEPS + ${CMAKE_CURRENT_BINARY_DIR}/win64-nasm.c + ${CMAKE_CURRENT_BINARY_DIR}/win64-gas.c + ) + +SET_SOURCE_FILES_PROPERTIES(objfmts/coff/coff-objfmt.c PROPERTIES + OBJECT_DEPENDS "${coff_DEPS}" + ) + +YASM_ADD_MODULE(objfmt_coff + objfmts/coff/coff-objfmt.c + objfmts/coff/win64-except.c + ) +list(APPEND YASM_MODULES objfmt_win32) +list(APPEND YASM_MODULES objfmt_win64) diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/Makefile.inc new file mode 100644 index 0000000000..9564fed3ad --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/Makefile.inc @@ -0,0 +1,25 @@ +libyasm_a_SOURCES += modules/objfmts/coff/coff-objfmt.c +libyasm_a_SOURCES += modules/objfmts/coff/coff-objfmt.h +libyasm_a_SOURCES += modules/objfmts/coff/win64-except.c + +YASM_MODULES += objfmt_coff + +$(top_srcdir)/modules/objfmts/coff/coff-objfmt.c: win64-nasm.c win64-gas.c + +win64-nasm.c: $(srcdir)/modules/objfmts/coff/win64-nasm.mac genmacro$(EXEEXT) + $(top_builddir)/genmacro$(EXEEXT) $@ win64_nasm_stdmac $(srcdir)/modules/objfmts/coff/win64-nasm.mac + +BUILT_SOURCES += win64-nasm.c +CLEANFILES += win64-nasm.c +EXTRA_DIST += modules/objfmts/coff/win64-nasm.mac + +win64-gas.c: $(srcdir)/modules/objfmts/coff/win64-gas.mac genmacro$(EXEEXT) + $(top_builddir)/genmacro$(EXEEXT) $@ win64_gas_stdmac $(srcdir)/modules/objfmts/coff/win64-gas.mac + +BUILT_SOURCES += win64-gas.c +CLEANFILES += win64-gas.c +EXTRA_DIST += modules/objfmts/coff/win64-gas.mac + +EXTRA_DIST += modules/objfmts/coff/tests/Makefile.inc + +include modules/objfmts/coff/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/coff-objfmt.c b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/coff-objfmt.c new file mode 100644 index 0000000000..b1987ac3f9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/coff-objfmt.c @@ -0,0 +1,2517 @@ +/* + * COFF (DJGPP) object format + * + * Copyright (C) 2002-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 +#include + +#include + +#include "coff-objfmt.h" + + +#define REGULAR_OUTBUF_SIZE 1024 + +/* Defining this to 0 sets all section VMA's to 0 rather than as the same as + * the LMA. According to the DJGPP COFF Spec, this should be set to 1 + * (VMA=LMA), and indeed DJGPP's GCC output shows VMA=LMA. However, NASM + * outputs VMA=0 (as if this was 0), and GNU objdump output looks a lot nicer + * with VMA=0. Who's right? This is #defined as changing this setting affects + * several places in the code. + */ +#define COFF_SET_VMA (!objfmt_coff->win32) + +#define COFF_MACHINE_I386 0x014C +#define COFF_MACHINE_AMD64 0x8664 + +#define COFF_F_LNNO 0x0004 /* line number info NOT present */ +#define COFF_F_LSYMS 0x0008 /* local symbols NOT present */ +#define COFF_F_AR32WR 0x0100 /* 32-bit little endian file */ + +typedef struct coff_reloc { + yasm_reloc reloc; + enum { + COFF_RELOC_ABSOLUTE = 0, /* absolute, no reloc needed */ + + /* I386 relocations */ + COFF_RELOC_I386_ADDR16 = 0x1, /* 16-bit absolute reference */ + COFF_RELOC_I386_REL16 = 0x2, /* 16-bit PC-relative reference */ + COFF_RELOC_I386_ADDR32 = 0x6, /* 32-bit absolute reference */ + COFF_RELOC_I386_ADDR32NB = 0x7, /* 32-bit absolute ref w/o base */ + COFF_RELOC_I386_SEG12 = 0x9, /* 16-bit absolute segment ref */ + COFF_RELOC_I386_SECTION = 0xA, /* section index */ + COFF_RELOC_I386_SECREL = 0xB, /* offset from start of segment */ + COFF_RELOC_I386_TOKEN = 0xC, /* CLR metadata token */ + COFF_RELOC_I386_SECREL7 = 0xD, /* 7-bit offset from base of sect */ + COFF_RELOC_I386_REL32 = 0x14, /* 32-bit PC-relative reference */ + + /* AMD64 relocations */ + COFF_RELOC_AMD64_ADDR64 = 0x1, /* 64-bit address (VA) */ + COFF_RELOC_AMD64_ADDR32 = 0x2, /* 32-bit address (VA) */ + COFF_RELOC_AMD64_ADDR32NB = 0x3, /* 32-bit address w/o base (RVA) */ + COFF_RELOC_AMD64_REL32 = 0x4, /* 32-bit relative (0 byte dist) */ + COFF_RELOC_AMD64_REL32_1 = 0x5, /* 32-bit relative (1 byte dist) */ + COFF_RELOC_AMD64_REL32_2 = 0x6, /* 32-bit relative (2 byte dist) */ + COFF_RELOC_AMD64_REL32_3 = 0x7, /* 32-bit relative (3 byte dist) */ + COFF_RELOC_AMD64_REL32_4 = 0x8, /* 32-bit relative (4 byte dist) */ + COFF_RELOC_AMD64_REL32_5 = 0x9, /* 32-bit relative (5 byte dist) */ + COFF_RELOC_AMD64_SECTION = 0xA, /* section index */ + COFF_RELOC_AMD64_SECREL = 0xB, /* 32-bit offset from base of sect */ + COFF_RELOC_AMD64_SECREL7 = 0xC, /* 7-bit offset from base of sect */ + COFF_RELOC_AMD64_TOKEN = 0xD /* CLR metadata token */ + } type; /* type of relocation */ +} coff_reloc; + +#define COFF_STYP_TEXT 0x00000020UL +#define COFF_STYP_DATA 0x00000040UL +#define COFF_STYP_BSS 0x00000080UL +#define COFF_STYP_INFO 0x00000200UL +#define COFF_STYP_STD_MASK 0x000003FFUL +#define COFF_STYP_ALIGN_MASK 0x00F00000UL +#define COFF_STYP_ALIGN_SHIFT 20 +#define COFF_STYP_NRELOC_OVFL 0x01000000UL +#define COFF_STYP_DISCARD 0x02000000UL +#define COFF_STYP_NOCACHE 0x04000000UL +#define COFF_STYP_NOPAGE 0x08000000UL +#define COFF_STYP_SHARED 0x10000000UL +#define COFF_STYP_EXECUTE 0x20000000UL +#define COFF_STYP_READ 0x40000000UL +#define COFF_STYP_WRITE 0x80000000UL +#define COFF_STYP_WIN32_MASK 0xFF000000UL + +#define COFF_FLAG_NOBASE (1UL<<0) /* Use no-base (NB) relocs */ + +typedef struct coff_section_data { + /*@dependent@*/ yasm_symrec *sym; /* symbol created for this section */ + unsigned int scnum; /* section number (1=first section) */ + unsigned long flags; /* section flags (see COFF_STYP_* above) */ + unsigned long addr; /* starting memory address (first section -> 0) */ + unsigned long scnptr; /* file ptr to raw data */ + unsigned long size; /* size of raw data (section data) in bytes */ + unsigned long relptr; /* file ptr to relocation */ + unsigned long nreloc; /* number of relocation entries >64k -> error */ + unsigned long flags2; /* internal flags (see COFF_FLAG_* above) */ + unsigned long strtab_name; /* strtab offset of name if name > 8 chars */ + int isdebug; /* is a debug section? */ +} coff_section_data; + +typedef enum coff_symrec_sclass { + COFF_SCL_EFCN = 0xff, /* physical end of function */ + COFF_SCL_NULL = 0, + COFF_SCL_AUTO = 1, /* automatic variable */ + COFF_SCL_EXT = 2, /* external symbol */ + COFF_SCL_STAT = 3, /* static */ + COFF_SCL_REG = 4, /* register variable */ + COFF_SCL_EXTDEF = 5, /* external definition */ + COFF_SCL_LABEL = 6, /* label */ + COFF_SCL_ULABEL = 7, /* undefined label */ + COFF_SCL_MOS = 8, /* member of structure */ + COFF_SCL_ARG = 9, /* function argument */ + COFF_SCL_STRTAG = 10, /* structure tag */ + COFF_SCL_MOU = 11, /* member of union */ + COFF_SCL_UNTAG = 12, /* union tag */ + COFF_SCL_TPDEF = 13, /* type definition */ + COFF_SCL_USTATIC = 14, /* undefined static */ + COFF_SCL_ENTAG = 15, /* enumeration tag */ + COFF_SCL_MOE = 16, /* member of enumeration */ + COFF_SCL_REGPARM = 17, /* register parameter */ + COFF_SCL_FIELD = 18, /* bit field */ + COFF_SCL_AUTOARG = 19, /* auto argument */ + COFF_SCL_LASTENT = 20, /* dummy entry (end of block) */ + COFF_SCL_BLOCK = 100, /* ".bb" or ".eb" */ + COFF_SCL_FCN = 101, /* ".bf" or ".ef" */ + COFF_SCL_EOS = 102, /* end of structure */ + COFF_SCL_FILE = 103, /* file name */ + COFF_SCL_LINE = 104, /* line # reformatted as symbol table entry */ + COFF_SCL_ALIAS = 105, /* duplicate tag */ + COFF_SCL_HIDDEN = 106 /* ext symbol in dmert public lib */ +} coff_symrec_sclass; + +typedef union coff_symtab_auxent { + /* no data needed for section symbol auxent, all info avail from sym */ + /*@owned@*/ char *fname; /* filename aux entry */ +} coff_symtab_auxent; + +typedef enum coff_symtab_auxtype { + COFF_SYMTAB_AUX_NONE = 0, + COFF_SYMTAB_AUX_SECT, + COFF_SYMTAB_AUX_FILE +} coff_symtab_auxtype; + +typedef struct coff_symrec_data { + int forcevis; /* force visibility in symbol table */ + unsigned long index; /* assigned COFF symbol table index */ + unsigned int type; /* type */ + coff_symrec_sclass sclass; /* storage class */ + + int numaux; /* number of auxiliary entries */ + coff_symtab_auxtype auxtype; /* type of aux entries */ + coff_symtab_auxent aux[1]; /* actually may be any size (including 0) */ +} coff_symrec_data; + +typedef struct yasm_objfmt_coff { + yasm_objfmt_base objfmt; /* base structure */ + + unsigned int parse_scnum; /* sect numbering in parser */ + int win32; /* nonzero for win32/64 output */ + int win64; /* nonzero for win64 output */ + + unsigned int machine; /* COFF machine to use */ + + coff_symrec_data *filesym_data; /* Data for .file symbol */ + + /* data for .def/.endef and related directives */ + coff_symrec_data *def_sym; /* symbol specified by .def */ + + /* data for win64 proc_frame and related directives */ + unsigned long proc_frame; /* Line number of start of proc, or 0 */ + unsigned long done_prolog; /* Line number of end of prologue, or 0 */ + /*@null@*/ coff_unwind_info *unwind; /* Unwind info */ + + yasm_symrec *ssym_imagebase; /* ..imagebase symbol for win64 */ +} yasm_objfmt_coff; + +typedef struct coff_objfmt_output_info { + yasm_object *object; + yasm_objfmt_coff *objfmt_coff; + yasm_errwarns *errwarns; + /*@dependent@*/ FILE *f; + /*@only@*/ unsigned char *buf; + yasm_section *sect; + /*@dependent@*/ coff_section_data *csd; + unsigned long addr; /* start of next section */ + + unsigned long indx; /* current symbol index */ + int all_syms; /* outputting all symbols? */ + unsigned long strtab_offset; /* current string table offset */ +} coff_objfmt_output_info; + +static void coff_section_data_destroy(/*@only@*/ void *d); +static void coff_section_data_print(void *data, FILE *f, int indent_level); + +static const yasm_assoc_data_callback coff_section_data_cb = { + coff_section_data_destroy, + coff_section_data_print +}; + +static void coff_symrec_data_destroy(/*@only@*/ void *d); +static void coff_symrec_data_print(void *data, FILE *f, int indent_level); + +static const yasm_assoc_data_callback coff_symrec_data_cb = { + coff_symrec_data_destroy, + coff_symrec_data_print +}; + +/* Bytecode callback function prototypes */ +static void win32_sxdata_bc_destroy(void *contents); +static void win32_sxdata_bc_print(const void *contents, FILE *f, + int indent_level); +static int win32_sxdata_bc_calc_len + (yasm_bytecode *bc, yasm_bc_add_span_func add_span, void *add_span_data); +static int win32_sxdata_bc_tobytes + (yasm_bytecode *bc, unsigned char **bufp, unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +/* Bytecode callback structures */ +static const yasm_bytecode_callback win32_sxdata_bc_callback = { + win32_sxdata_bc_destroy, + win32_sxdata_bc_print, + yasm_bc_finalize_common, + NULL, + win32_sxdata_bc_calc_len, + yasm_bc_expand_common, + win32_sxdata_bc_tobytes, + 0 +}; + +yasm_objfmt_module yasm_coff_LTX_objfmt; +yasm_objfmt_module yasm_win32_LTX_objfmt; +yasm_objfmt_module yasm_win64_LTX_objfmt; + + +static /*@dependent@*/ coff_symrec_data * +coff_objfmt_sym_set_data(yasm_symrec *sym, coff_symrec_sclass sclass, + int numaux, coff_symtab_auxtype auxtype) +{ + coff_symrec_data *sym_data; + + sym_data = yasm_xmalloc(sizeof(coff_symrec_data) + + (numaux-1)*sizeof(coff_symtab_auxent)); + sym_data->forcevis = 0; + sym_data->index = 0; + sym_data->type = 0; + sym_data->sclass = sclass; + sym_data->numaux = numaux; + sym_data->auxtype = auxtype; + + yasm_symrec_add_data(sym, &coff_symrec_data_cb, sym_data); + + return sym_data; +} + +static yasm_objfmt_coff * +coff_common_create(yasm_object *object) +{ + yasm_objfmt_coff *objfmt_coff = yasm_xmalloc(sizeof(yasm_objfmt_coff)); + yasm_symrec *filesym; + + /* Only support x86 arch */ + if (yasm__strcasecmp(yasm_arch_keyword(object->arch), "x86") != 0) { + yasm_xfree(objfmt_coff); + return NULL; + } + + objfmt_coff->parse_scnum = 1; /* section numbering starts at 1 */ + + /* FIXME: misuse of NULL bytecode here; it works, but only barely. */ + filesym = yasm_symtab_define_special(object->symtab, ".file", + YASM_SYM_GLOBAL); + objfmt_coff->filesym_data = + coff_objfmt_sym_set_data(filesym, COFF_SCL_FILE, 1, + COFF_SYMTAB_AUX_FILE); + /* Filename is set in coff_objfmt_output */ + objfmt_coff->filesym_data->aux[0].fname = NULL; + + objfmt_coff->proc_frame = 0; + objfmt_coff->done_prolog = 0; + objfmt_coff->unwind = NULL; + objfmt_coff->ssym_imagebase = NULL; + + return objfmt_coff; +} + +static yasm_objfmt * +coff_objfmt_create(yasm_object *object) +{ + yasm_objfmt_coff *objfmt_coff = coff_common_create(object); + + if (objfmt_coff) { + /* Support x86 and amd64 machines of x86 arch */ + if (yasm__strcasecmp(yasm_arch_get_machine(object->arch), "x86") == 0) + objfmt_coff->machine = COFF_MACHINE_I386; + else if (yasm__strcasecmp(yasm_arch_get_machine(object->arch), + "amd64") == 0) + objfmt_coff->machine = COFF_MACHINE_AMD64; + else { + yasm_xfree(objfmt_coff); + return NULL; + } + + objfmt_coff->objfmt.module = &yasm_coff_LTX_objfmt; + objfmt_coff->win32 = 0; + objfmt_coff->win64 = 0; + } + return (yasm_objfmt *)objfmt_coff; +} + +static yasm_objfmt * +win32_objfmt_create(yasm_object *object) +{ + yasm_objfmt_coff *objfmt_coff = coff_common_create(object); + + if (objfmt_coff) { + /* Support x86 and amd64 machines of x86 arch. + * (amd64 machine supported for backwards compatibility) + */ + if (yasm__strcasecmp(yasm_arch_get_machine(object->arch), + "x86") == 0) { + objfmt_coff->machine = COFF_MACHINE_I386; + objfmt_coff->objfmt.module = &yasm_win32_LTX_objfmt; + objfmt_coff->win64 = 0; + } else if (yasm__strcasecmp(yasm_arch_get_machine(object->arch), + "amd64") == 0) { + objfmt_coff->machine = COFF_MACHINE_AMD64; + objfmt_coff->objfmt.module = &yasm_win64_LTX_objfmt; + objfmt_coff->win64 = 1; + } else { + yasm_xfree(objfmt_coff); + return NULL; + } + + objfmt_coff->win32 = 1; + /* Define a @feat.00 symbol for win32 safeseh handling */ + if (!objfmt_coff->win64) { + yasm_symrec *feat00; + coff_symrec_data *sym_data; + feat00 = yasm_symtab_define_equ(object->symtab, "@feat.00", + yasm_expr_create_ident(yasm_expr_int( + yasm_intnum_create_uint(1)), 0), 0); + sym_data = coff_objfmt_sym_set_data(feat00, COFF_SCL_STAT, 0, + COFF_SYMTAB_AUX_NONE); + sym_data->forcevis = 1; + } + } + return (yasm_objfmt *)objfmt_coff; +} + +static yasm_objfmt * +win64_objfmt_create(yasm_object *object) +{ + yasm_objfmt_coff *objfmt_coff = coff_common_create(object); + + if (objfmt_coff) { + /* Support amd64 machine of x86 arch */ + if (yasm__strcasecmp(yasm_arch_get_machine(object->arch), + "amd64") == 0) { + objfmt_coff->machine = COFF_MACHINE_AMD64; + } else { + yasm_xfree(objfmt_coff); + return NULL; + } + + objfmt_coff->objfmt.module = &yasm_win64_LTX_objfmt; + objfmt_coff->win32 = 1; + objfmt_coff->win64 = 1; + objfmt_coff->ssym_imagebase = + yasm_symtab_define_label(object->symtab, "..imagebase", NULL, 0, 0); + } + return (yasm_objfmt *)objfmt_coff; +} + +static void +coff_objfmt_init_new_section(yasm_section *sect, unsigned long line) +{ + yasm_object *object = yasm_section_get_object(sect); + const char *sectname = yasm_section_get_name(sect); + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; + coff_section_data *data; + yasm_symrec *sym; + + data = yasm_xmalloc(sizeof(coff_section_data)); + data->scnum = objfmt_coff->parse_scnum++; + data->flags = 0; + data->addr = 0; + data->scnptr = 0; + data->size = 0; + data->relptr = 0; + data->nreloc = 0; + data->flags2 = 0; + data->strtab_name = 0; + data->isdebug = 0; + + if (yasm__strncasecmp(sectname, ".debug", 6)==0) { + data->flags = COFF_STYP_DATA; + if (objfmt_coff->win32) + data->flags |= COFF_STYP_DISCARD|COFF_STYP_READ; + data->isdebug = 1; + } else + data->flags = COFF_STYP_TEXT; + + yasm_section_add_data(sect, &coff_section_data_cb, data); + + sym = yasm_symtab_define_label(object->symtab, sectname, + yasm_section_bcs_first(sect), 1, line); + yasm_symrec_declare(sym, YASM_SYM_GLOBAL, line); + coff_objfmt_sym_set_data(sym, COFF_SCL_STAT, 1, COFF_SYMTAB_AUX_SECT); + data->sym = sym; +} + +static int +coff_objfmt_set_section_addr(yasm_section *sect, /*@null@*/ void *d) +{ + /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d; + /*@dependent@*/ /*@null@*/ coff_section_data *csd; + + assert(info != NULL); + csd = yasm_section_get_data(sect, &coff_section_data_cb); + assert(csd != NULL); + + csd->addr = info->addr; + info->addr += yasm_bc_next_offset(yasm_section_bcs_last(sect)); + + return 0; +} + +static int +coff_objfmt_output_value(yasm_value *value, unsigned char *buf, + unsigned int destsize, unsigned long offset, + yasm_bytecode *bc, int warn, /*@null@*/ void *d) +{ + /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d; + yasm_objfmt_coff *objfmt_coff; + /*@only@*/ /*@null@*/ yasm_intnum *dist = NULL; + /*@dependent@*/ /*@null@*/ yasm_intnum *intn; + unsigned long intn_val, intn_minus; + int retval; + unsigned int valsize = value->size; + + assert(info != NULL); + objfmt_coff = info->objfmt_coff; + + if (value->abs) + value->abs = yasm_expr_simplify(value->abs, 1); + + /* Try to output constant and PC-relative section-local first. + * Note this does NOT output any value with a SEG, WRT, external, + * cross-section, or non-PC-relative reference (those are handled below). + */ + switch (yasm_value_output_basic(value, buf, destsize, bc, warn, + info->object->arch)) { + case -1: + return 1; + case 0: + break; + default: + return 0; + } + + /* Handle other expressions, with relocation if necessary */ + if (value->rshift > 0 + || (value->seg_of && (value->wrt || value->curpos_rel)) + || (value->section_rel && (value->wrt || value->curpos_rel))) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("coff: relocation too complex")); + return 1; + } + + intn_val = 0; + intn_minus = 0; + if (value->rel) { + yasm_sym_vis vis = yasm_symrec_get_visibility(value->rel); + /*@dependent@*/ /*@null@*/ yasm_symrec *sym = value->rel; + unsigned long addr; + coff_reloc *reloc; + int nobase = info->csd->flags2 & COFF_FLAG_NOBASE; + + /* Sometimes we want the relocation to be generated against one + * symbol but the value generated correspond to a different symbol. + * This is done through (sym being referenced) WRT (sym used for + * reloc). Note both syms need to be in the same section! + */ + if (value->wrt && value->wrt == objfmt_coff->ssym_imagebase) + nobase = 1; + else if (value->wrt) { + /*@dependent@*/ /*@null@*/ yasm_bytecode *rel_precbc, *wrt_precbc; + + if (!yasm_symrec_get_label(sym, &rel_precbc) + || !yasm_symrec_get_label(value->wrt, &wrt_precbc)) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("coff: wrt expression too complex")); + return 1; + } + dist = yasm_calc_bc_dist(wrt_precbc, rel_precbc); + if (!dist) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("coff: cannot wrt across sections")); + return 1; + } + sym = value->wrt; + } + + if (vis & YASM_SYM_COMMON) { + /* In standard COFF, COMMON symbols have their length added in */ + if (!objfmt_coff->win32) { + /*@dependent@*/ /*@null@*/ yasm_expr **csize_expr; + /*@dependent@*/ /*@null@*/ yasm_intnum *common_size; + + csize_expr = yasm_symrec_get_common_size(sym); + assert(csize_expr != NULL); + common_size = yasm_expr_get_intnum(csize_expr, 1); + if (!common_size) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("coff: common size too complex")); + return 1; + } + + if (yasm_intnum_sign(common_size) < 0) { + yasm_error_set(YASM_ERROR_VALUE, + N_("coff: common size is negative")); + return 1; + } + + intn_val += yasm_intnum_get_uint(common_size); + } + } else if (!(vis & YASM_SYM_EXTERN) && !objfmt_coff->win64) { + /*@dependent@*/ /*@null@*/ yasm_bytecode *sym_precbc; + + /* Local symbols need relocation to their section's start */ + if (yasm_symrec_get_label(sym, &sym_precbc)) { + yasm_section *sym_sect = yasm_bc_get_section(sym_precbc); + /*@null@*/ coff_section_data *sym_csd; + sym_csd = yasm_section_get_data(sym_sect, + &coff_section_data_cb); + assert(sym_csd != NULL); + sym = sym_csd->sym; + intn_val = yasm_bc_next_offset(sym_precbc); + if (COFF_SET_VMA) + intn_val += sym_csd->addr; + } + } + + if (value->curpos_rel) { + /* For standard COFF, need to adjust to start of section, e.g. + * subtract out the bytecode offset. + * For Win32 COFF, need to adjust based on value size and position. + * For Win64 COFF that's IP-relative, adjust to next bytecode; + * the difference between the offset+destsize and BC length is + * taken care of by special relocation types. + */ + if (objfmt_coff->win64 && value->ip_rel) + intn_val += bc->len*bc->mult_int; + else if (objfmt_coff->win32) + intn_val += offset+destsize; + else + intn_minus = bc->offset; + } + + if (value->seg_of) { + /* Segment generation; zero value. */ + intn_val = 0; + intn_minus = 0; + } + + /* Generate reloc */ + reloc = yasm_xmalloc(sizeof(coff_reloc)); + addr = bc->offset + offset; + if (COFF_SET_VMA) + addr += info->addr; + reloc->reloc.addr = yasm_intnum_create_uint(addr); + reloc->reloc.sym = sym; + + if (value->curpos_rel) { + if (objfmt_coff->machine == COFF_MACHINE_I386) { + if (valsize == 32) + reloc->type = COFF_RELOC_I386_REL32; + else { + yasm_error_set(YASM_ERROR_TYPE, + N_("coff: invalid relocation size")); + return 1; + } + } else if (objfmt_coff->machine == COFF_MACHINE_AMD64) { + if (valsize != 32) { + yasm_error_set(YASM_ERROR_TYPE, + N_("coff: invalid relocation size")); + return 1; + } + if (!value->ip_rel) + reloc->type = COFF_RELOC_AMD64_REL32; + else switch (bc->len*bc->mult_int - (offset+destsize)) { + case 0: + reloc->type = COFF_RELOC_AMD64_REL32; + break; + case 1: + reloc->type = COFF_RELOC_AMD64_REL32_1; + break; + case 2: + reloc->type = COFF_RELOC_AMD64_REL32_2; + break; + case 3: + reloc->type = COFF_RELOC_AMD64_REL32_3; + break; + case 4: + reloc->type = COFF_RELOC_AMD64_REL32_4; + break; + case 5: + reloc->type = COFF_RELOC_AMD64_REL32_5; + break; + default: + yasm_error_set(YASM_ERROR_TYPE, + N_("coff: invalid relocation size")); + return 1; + } + } else + yasm_internal_error(N_("coff objfmt: unrecognized machine")); + } else if (value->seg_of) { + if (objfmt_coff->machine == COFF_MACHINE_I386) + reloc->type = COFF_RELOC_I386_SECTION; + else if (objfmt_coff->machine == COFF_MACHINE_AMD64) + reloc->type = COFF_RELOC_AMD64_SECTION; + else + yasm_internal_error(N_("coff objfmt: unrecognized machine")); + } else if (value->section_rel) { + if (objfmt_coff->machine == COFF_MACHINE_I386) + reloc->type = COFF_RELOC_I386_SECREL; + else if (objfmt_coff->machine == COFF_MACHINE_AMD64) + reloc->type = COFF_RELOC_AMD64_SECREL; + else + yasm_internal_error(N_("coff objfmt: unrecognized machine")); + } else { + if (objfmt_coff->machine == COFF_MACHINE_I386) { + if (nobase) + reloc->type = COFF_RELOC_I386_ADDR32NB; + else + reloc->type = COFF_RELOC_I386_ADDR32; + } else if (objfmt_coff->machine == COFF_MACHINE_AMD64) { + if (valsize == 32) { + if (nobase) + reloc->type = COFF_RELOC_AMD64_ADDR32NB; + else + reloc->type = COFF_RELOC_AMD64_ADDR32; + } else if (valsize == 64) + reloc->type = COFF_RELOC_AMD64_ADDR64; + else { + yasm_error_set(YASM_ERROR_TYPE, + N_("coff: invalid relocation size")); + return 1; + } + } else + yasm_internal_error(N_("coff objfmt: unrecognized machine")); + } + info->csd->nreloc++; + yasm_section_add_reloc(info->sect, (yasm_reloc *)reloc, yasm_xfree); + } + + /* Build up final integer output from intn_val, intn_minus, value->abs, + * and dist. We do all this at the end to avoid creating temporary + * intnums above (except for dist). + */ + if (intn_minus <= intn_val) + intn = yasm_intnum_create_uint(intn_val-intn_minus); + else { + intn = yasm_intnum_create_uint(intn_minus-intn_val); + yasm_intnum_calc(intn, YASM_EXPR_NEG, NULL); + } + + if (value->abs) { + yasm_intnum *intn2 = yasm_expr_get_intnum(&value->abs, 0); + if (!intn2) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("coff: relocation too complex")); + yasm_intnum_destroy(intn); + if (dist) + yasm_intnum_destroy(dist); + return 1; + } + yasm_intnum_calc(intn, YASM_EXPR_ADD, intn2); + } + + if (dist) { + yasm_intnum_calc(intn, YASM_EXPR_ADD, dist); + yasm_intnum_destroy(dist); + } + + retval = yasm_arch_intnum_tobytes(info->object->arch, intn, buf, destsize, + valsize, 0, bc, warn); + yasm_intnum_destroy(intn); + return retval; +} + +static int +coff_objfmt_output_bytecode(yasm_bytecode *bc, /*@null@*/ void *d) +{ + /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d; + /*@null@*/ /*@only@*/ unsigned char *bigbuf; + unsigned long size = REGULAR_OUTBUF_SIZE; + int gap; + + assert(info != NULL); + + bigbuf = yasm_bc_tobytes(bc, info->buf, &size, &gap, info, + coff_objfmt_output_value, NULL); + + /* Don't bother doing anything else if size ended up being 0. */ + if (size == 0) { + if (bigbuf) + yasm_xfree(bigbuf); + return 0; + } + + info->csd->size += size; + + /* Warn that gaps are converted to 0 and write out the 0's. */ + if (gap) { + unsigned long left; + yasm_warn_set(YASM_WARN_UNINIT_CONTENTS, + N_("uninitialized space declared in code/data section: zeroing")); + /* Write out in chunks */ + memset(info->buf, 0, REGULAR_OUTBUF_SIZE); + left = size; + while (left > REGULAR_OUTBUF_SIZE) { + fwrite(info->buf, REGULAR_OUTBUF_SIZE, 1, info->f); + left -= REGULAR_OUTBUF_SIZE; + } + fwrite(info->buf, left, 1, info->f); + } else { + /* Output buf (or bigbuf if non-NULL) to file */ + fwrite(bigbuf ? bigbuf : info->buf, (size_t)size, 1, info->f); + } + + /* If bigbuf was allocated, free it */ + if (bigbuf) + yasm_xfree(bigbuf); + + return 0; +} + +static int +coff_objfmt_output_section(yasm_section *sect, /*@null@*/ void *d) +{ + /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d; + /*@dependent@*/ /*@null@*/ coff_section_data *csd; + long pos; + coff_reloc *reloc; + unsigned char *localbuf; + + assert(info != NULL); + csd = yasm_section_get_data(sect, &coff_section_data_cb); + assert(csd != NULL); + + /* Add to strtab if in win32 format and name > 8 chars */ + if (info->objfmt_coff->win32) { + size_t namelen = strlen(yasm_section_get_name(sect)); + if (namelen > 8) { + csd->strtab_name = info->strtab_offset; + info->strtab_offset += (unsigned long)(namelen + 1); + } + } + + if (!csd->isdebug) + csd->addr = info->addr; + + if ((csd->flags & COFF_STYP_STD_MASK) == COFF_STYP_BSS) { + /* Don't output BSS sections. + * TODO: Check for non-reserve bytecodes? + */ + pos = 0; /* position = 0 because it's not in the file */ + csd->size = yasm_bc_next_offset(yasm_section_bcs_last(sect)); + } else { + pos = ftell(info->f); + if (pos == -1) { + yasm__fatal(N_("could not get file position on output file")); + /*@notreached@*/ + return 1; + } + + info->sect = sect; + info->csd = csd; + yasm_section_bcs_traverse(sect, info->errwarns, info, + coff_objfmt_output_bytecode); + + /* Sanity check final section size */ + if (yasm_errwarns_num_errors(info->errwarns, 0) == 0 && + csd->size != yasm_bc_next_offset(yasm_section_bcs_last(sect))) + yasm_internal_error( + N_("coff: section computed size did not match actual size")); + } + + /* Empty? Go on to next section */ + if (csd->size == 0) + return 0; + + if (!csd->isdebug) + info->addr += csd->size; + csd->scnptr = (unsigned long)pos; + + /* No relocations to output? Go on to next section */ + if (csd->nreloc == 0) + return 0; + + pos = ftell(info->f); + if (pos == -1) { + yasm__fatal(N_("could not get file position on output file")); + /*@notreached@*/ + return 1; + } + csd->relptr = (unsigned long)pos; + + /* If >=64K relocs (for Win32/64), we set a flag in the section header + * (NRELOC_OVFL) and the first relocation contains the number of relocs. + */ + if (csd->nreloc >= 64*1024 && info->objfmt_coff->win32) { + localbuf = info->buf; + YASM_WRITE_32_L(localbuf, csd->nreloc+1); /* address of relocation */ + YASM_WRITE_32_L(localbuf, 0); /* relocated symbol */ + YASM_WRITE_16_L(localbuf, 0); /* type of relocation */ + fwrite(info->buf, 10, 1, info->f); + } + + reloc = (coff_reloc *)yasm_section_relocs_first(sect); + while (reloc) { + /*@null@*/ coff_symrec_data *csymd; + localbuf = info->buf; + + csymd = yasm_symrec_get_data(reloc->reloc.sym, &coff_symrec_data_cb); + if (!csymd) + yasm_internal_error( + N_("coff: no symbol data for relocated symbol")); + + yasm_intnum_get_sized(reloc->reloc.addr, localbuf, 4, 32, 0, 0, 0); + localbuf += 4; /* address of relocation */ + YASM_WRITE_32_L(localbuf, csymd->index); /* relocated symbol */ + YASM_WRITE_16_L(localbuf, reloc->type); /* type of relocation */ + fwrite(info->buf, 10, 1, info->f); + + reloc = (coff_reloc *)yasm_section_reloc_next((yasm_reloc *)reloc); + } + + return 0; +} + +static int +coff_objfmt_output_sectstr(yasm_section *sect, /*@null@*/ void *d) +{ + /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d; + const char *name; + size_t len; + + /* Add to strtab if in win32 format and name > 8 chars */ + if (!info->objfmt_coff->win32) + return 0; + + name = yasm_section_get_name(sect); + len = strlen(name); + if (len > 8) + fwrite(name, len+1, 1, info->f); + return 0; +} + +static int +coff_objfmt_output_secthead(yasm_section *sect, /*@null@*/ void *d) +{ + /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d; + yasm_objfmt_coff *objfmt_coff; + /*@dependent@*/ /*@null@*/ coff_section_data *csd; + unsigned char *localbuf; + unsigned long align = yasm_section_get_align(sect); + + assert(info != NULL); + objfmt_coff = info->objfmt_coff; + csd = yasm_section_get_data(sect, &coff_section_data_cb); + assert(csd != NULL); + + /* Check to see if alignment is supported size */ + if (align > 8192) + align = 8192; + + /* Convert alignment into flags setting */ + csd->flags &= ~COFF_STYP_ALIGN_MASK; + while (align != 0) { + csd->flags += 1<>= 1; + } + + /* section name */ + localbuf = info->buf; + if (strlen(yasm_section_get_name(sect)) > 8) { + char namenum[30]; + sprintf(namenum, "/%ld", csd->strtab_name); + strncpy((char *)localbuf, namenum, 8); + } else + strncpy((char *)localbuf, yasm_section_get_name(sect), 8); + localbuf += 8; + if (csd->isdebug) { + YASM_WRITE_32_L(localbuf, 0); /* physical address */ + YASM_WRITE_32_L(localbuf, 0); /* virtual address */ + } else { + YASM_WRITE_32_L(localbuf, csd->addr); /* physical address */ + if (COFF_SET_VMA) + YASM_WRITE_32_L(localbuf, csd->addr);/* virtual address */ + else + YASM_WRITE_32_L(localbuf, 0); /* virtual address */ + } + YASM_WRITE_32_L(localbuf, csd->size); /* section size */ + YASM_WRITE_32_L(localbuf, csd->scnptr); /* file ptr to data */ + YASM_WRITE_32_L(localbuf, csd->relptr); /* file ptr to relocs */ + YASM_WRITE_32_L(localbuf, 0); /* file ptr to line nums */ + if (csd->nreloc >= 64*1024) { + /* Win32/64 has special handling for this case. */ + if (objfmt_coff->win32) + csd->flags |= COFF_STYP_NRELOC_OVFL; + else { + yasm_warn_set(YASM_WARN_GENERAL, + N_("too many relocations in section `%s'"), + yasm_section_get_name(sect)); + yasm_errwarn_propagate(info->errwarns, 0); + } + YASM_WRITE_16_L(localbuf, 0xFFFF); /* max out */ + } else + YASM_WRITE_16_L(localbuf, csd->nreloc); /* num of relocation entries */ + YASM_WRITE_16_L(localbuf, 0); /* num of line number entries */ + YASM_WRITE_32_L(localbuf, csd->flags); /* flags */ + fwrite(info->buf, 40, 1, info->f); + + return 0; +} + +static int +coff_objfmt_count_sym(yasm_symrec *sym, /*@null@*/ void *d) +{ + /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d; + yasm_sym_vis vis = yasm_symrec_get_visibility(sym); + coff_symrec_data *sym_data; + + assert(info != NULL); + + sym_data = yasm_symrec_get_data(sym, &coff_symrec_data_cb); + + if (info->all_syms || vis != YASM_SYM_LOCAL || yasm_symrec_is_abs(sym) || + (sym_data && sym_data->forcevis)) { + /* Save index in symrec data */ + if (!sym_data) + sym_data = coff_objfmt_sym_set_data(sym, COFF_SCL_NULL, 0, + COFF_SYMTAB_AUX_NONE); + /* Set storage class based on visibility if not already set */ + if (sym_data->sclass == COFF_SCL_NULL) { + if (vis & (YASM_SYM_EXTERN|YASM_SYM_GLOBAL|YASM_SYM_COMMON)) + sym_data->sclass = COFF_SCL_EXT; + else + sym_data->sclass = COFF_SCL_STAT; + } + + sym_data->index = info->indx; + + info->indx += sym_data->numaux + 1; + } + return 0; +} + +static int +coff_objfmt_output_sym(yasm_symrec *sym, /*@null@*/ void *d) +{ + /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d; + yasm_sym_vis vis = yasm_symrec_get_visibility(sym); + int is_abs = yasm_symrec_is_abs(sym); + /*@dependent@*/ /*@null@*/ coff_symrec_data *csymd; + yasm_valparamhead *objext_valparams = + yasm_symrec_get_objext_valparams(sym); + csymd = yasm_symrec_get_data(sym, &coff_symrec_data_cb); + + assert(info != NULL); + + /* Look for "function" flag on global syms */ + if (csymd && csymd->type == 0 && (vis & YASM_SYM_GLOBAL) != 0) { + if (objext_valparams) { + const char *id = yasm_vp_id(yasm_vps_first(objext_valparams)); + if (yasm__strcasecmp(id, "function") == 0) + csymd->type = 0x20; + } + } + + /* Don't output local syms unless outputting all syms */ + if (info->all_syms || vis != YASM_SYM_LOCAL || is_abs || + (csymd && csymd->forcevis)) { + /*@only*/ char *name; + const yasm_expr *equ_val; + const yasm_intnum *intn; + unsigned char *localbuf; + size_t len; + int aux; + unsigned long value = 0; + unsigned int scnum = 0xfffe; /* -2 = debugging symbol */ + /*@dependent@*/ /*@null@*/ yasm_section *sect; + /*@dependent@*/ /*@null@*/ yasm_bytecode *precbc; + unsigned long scnlen = 0; /* for sect auxent */ + unsigned long nreloc = 0; /* for sect auxent */ + yasm_objfmt_coff *objfmt_coff = info->objfmt_coff; + + if (is_abs) + name = yasm__xstrdup(".absolut"); + else + name = yasm_symrec_get_global_name(sym, info->object); + len = strlen(name); + + /* Get symrec's of_data (needed for storage class) */ + if (!csymd) + yasm_internal_error(N_("coff: expected sym data to be present")); + + /* Look at symrec for value/scnum/etc. */ + if (yasm_symrec_get_label(sym, &precbc)) { + if (precbc) + sect = yasm_bc_get_section(precbc); + else + sect = NULL; + /* it's a label: get value and offset. + * If there is not a section, leave as debugging symbol. + */ + if (sect) { + /*@dependent@*/ /*@null@*/ coff_section_data *csectd; + csectd = yasm_section_get_data(sect, &coff_section_data_cb); + if (csectd) { + scnum = csectd->scnum; + scnlen = csectd->size; + nreloc = csectd->nreloc; + if (COFF_SET_VMA) + value = csectd->addr; + } else + yasm_internal_error(N_("didn't understand section")); + if (precbc) + value += yasm_bc_next_offset(precbc); + } + } else if ((equ_val = yasm_symrec_get_equ(sym))) { + yasm_expr *equ_val_copy = yasm_expr_copy(equ_val); + intn = yasm_expr_get_intnum(&equ_val_copy, 1); + if (!intn) { + if (vis & YASM_SYM_GLOBAL) { + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("global EQU value not an integer expression")); + yasm_errwarn_propagate(info->errwarns, equ_val->line); + } + } else + value = yasm_intnum_get_uint(intn); + yasm_expr_destroy(equ_val_copy); + + scnum = 0xffff; /* -1 = absolute symbol */ + } else { + if (vis & YASM_SYM_COMMON) { + /*@dependent@*/ /*@null@*/ yasm_expr **csize_expr; + csize_expr = yasm_symrec_get_common_size(sym); + assert(csize_expr != NULL); + intn = yasm_expr_get_intnum(csize_expr, 1); + if (!intn) { + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("COMMON data size not an integer expression")); + yasm_errwarn_propagate(info->errwarns, + (*csize_expr)->line); + } else + value = yasm_intnum_get_uint(intn); + scnum = 0; + } + if (vis & YASM_SYM_EXTERN) + scnum = 0; + } + + localbuf = info->buf; + if (len > 8) { + YASM_WRITE_32_L(localbuf, 0); /* "zeros" field */ + YASM_WRITE_32_L(localbuf, info->strtab_offset); /* strtab offset */ + info->strtab_offset += (unsigned long)(len+1); + } else { + /* <8 chars, so no string table entry needed */ + strncpy((char *)localbuf, name, 8); + localbuf += 8; + } + YASM_WRITE_32_L(localbuf, value); /* value */ + YASM_WRITE_16_L(localbuf, scnum); /* section number */ + YASM_WRITE_16_L(localbuf, csymd->type); /* type */ + YASM_WRITE_8(localbuf, csymd->sclass); /* storage class */ + YASM_WRITE_8(localbuf, csymd->numaux); /* number of aux entries */ + fwrite(info->buf, 18, 1, info->f); + for (aux=0; auxnumaux; aux++) { + localbuf = info->buf; + memset(localbuf, 0, 18); + switch (csymd->auxtype) { + case COFF_SYMTAB_AUX_NONE: + break; + case COFF_SYMTAB_AUX_SECT: + YASM_WRITE_32_L(localbuf, scnlen); /* section length */ + YASM_WRITE_16_L(localbuf, nreloc); /* number relocs */ + YASM_WRITE_16_L(localbuf, 0); /* number line nums */ + break; + case COFF_SYMTAB_AUX_FILE: + len = strlen(csymd->aux[0].fname); + if (len > 14) { + YASM_WRITE_32_L(localbuf, 0); + YASM_WRITE_32_L(localbuf, info->strtab_offset); + info->strtab_offset += (unsigned long)(len+1); + } else + strncpy((char *)localbuf, csymd->aux[0].fname, 14); + break; + default: + yasm_internal_error( + N_("coff: unrecognized aux symtab type")); + } + fwrite(info->buf, 18, 1, info->f); + } + yasm_xfree(name); + } + return 0; +} + +static int +coff_objfmt_output_str(yasm_symrec *sym, /*@null@*/ void *d) +{ + /*@null@*/ coff_objfmt_output_info *info = (coff_objfmt_output_info *)d; + yasm_sym_vis vis = yasm_symrec_get_visibility(sym); + /*@dependent@*/ /*@null@*/ coff_symrec_data *csymd; + csymd = yasm_symrec_get_data(sym, &coff_symrec_data_cb); + + assert(info != NULL); + + /* Don't output local syms unless outputting all syms */ + if (info->all_syms || vis != YASM_SYM_LOCAL || + (csymd && csymd->forcevis)) { + /*@only@*/ char *name = yasm_symrec_get_global_name(sym, info->object); + size_t len = strlen(name); + int aux; + + if (!csymd) + yasm_internal_error(N_("coff: expected sym data to be present")); + + if (len > 8) + fwrite(name, len+1, 1, info->f); + for (aux=0; auxnumaux; aux++) { + switch (csymd->auxtype) { + case COFF_SYMTAB_AUX_FILE: + len = strlen(csymd->aux[0].fname); + if (len > 14) + fwrite(csymd->aux[0].fname, len+1, 1, info->f); + break; + default: + break; + } + } + yasm_xfree(name); + } + return 0; +} + +static void +coff_objfmt_output(yasm_object *object, FILE *f, int all_syms, + yasm_errwarns *errwarns) +{ + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; + coff_objfmt_output_info info; + unsigned char *localbuf; + long pos; + unsigned long symtab_pos; + unsigned long symtab_count; + unsigned int flags; + unsigned long ts; + + if (objfmt_coff->proc_frame) { + yasm_error_set_xref(objfmt_coff->proc_frame, + N_("procedure started here")); + yasm_error_set(YASM_ERROR_GENERAL, + N_("end of file in procedure frame")); + yasm_errwarn_propagate(errwarns, 0); + return; + } + + if (objfmt_coff->filesym_data->aux[0].fname) + yasm_xfree(objfmt_coff->filesym_data->aux[0].fname); + objfmt_coff->filesym_data->aux[0].fname = + yasm__xstrdup(object->src_filename); + + /* Force all syms for win64 because they're needed for relocations. + * FIXME: Not *all* syms need to be output, only the ones needed for + * relocation. Find a way to do that someday. + */ + all_syms |= objfmt_coff->win64; + + info.strtab_offset = 4; + info.object = object; + info.objfmt_coff = objfmt_coff; + info.errwarns = errwarns; + info.f = f; + info.buf = yasm_xmalloc(REGULAR_OUTBUF_SIZE); + + /* Allocate space for headers by seeking forward */ + if (fseek(f, (long)(20+40*(objfmt_coff->parse_scnum-1)), SEEK_SET) < 0) { + yasm__fatal(N_("could not seek on output file")); + /*@notreached@*/ + return; + } + + /* Finalize symbol table (assign index to each symbol) */ + info.indx = 0; + info.all_syms = all_syms; + yasm_symtab_traverse(object->symtab, &info, coff_objfmt_count_sym); + symtab_count = info.indx; + + /* Section data/relocs */ + if (COFF_SET_VMA) { + /* If we're setting the VMA, we need to do a first section pass to + * determine each section's addr value before actually outputting + * relocations, as a relocation's section address is added into the + * addends in the generated code. + */ + info.addr = 0; + if (yasm_object_sections_traverse(object, &info, + coff_objfmt_set_section_addr)) + return; + } + info.addr = 0; + if (yasm_object_sections_traverse(object, &info, + coff_objfmt_output_section)) + return; + + /* Symbol table */ + pos = ftell(f); + if (pos == -1) { + yasm__fatal(N_("could not get file position on output file")); + /*@notreached@*/ + return; + } + symtab_pos = (unsigned long)pos; + yasm_symtab_traverse(object->symtab, &info, coff_objfmt_output_sym); + + /* String table */ + yasm_fwrite_32_l(info.strtab_offset, f); /* total length */ + yasm_object_sections_traverse(object, &info, coff_objfmt_output_sectstr); + yasm_symtab_traverse(object->symtab, &info, coff_objfmt_output_str); + + /* Write headers */ + if (fseek(f, 0, SEEK_SET) < 0) { + yasm__fatal(N_("could not seek on output file")); + /*@notreached@*/ + return; + } + + localbuf = info.buf; + YASM_WRITE_16_L(localbuf, objfmt_coff->machine); /* magic number */ + YASM_WRITE_16_L(localbuf, objfmt_coff->parse_scnum-1);/* number of sects */ + if (getenv("YASM_TEST_SUITE")) + ts = 0; + else + ts = (unsigned long)time(NULL); + YASM_WRITE_32_L(localbuf, ts); /* time/date stamp */ + YASM_WRITE_32_L(localbuf, symtab_pos); /* file ptr to symtab */ + YASM_WRITE_32_L(localbuf, symtab_count); /* number of symtabs */ + YASM_WRITE_16_L(localbuf, 0); /* size of optional header (none) */ + /* flags */ + flags = 0; + if (strcmp(yasm_dbgfmt_keyword(object->dbgfmt), "null")==0) + flags = COFF_F_LNNO; + if (!all_syms) + flags |= COFF_F_LSYMS; + if (objfmt_coff->machine != COFF_MACHINE_AMD64) + flags |= COFF_F_AR32WR; + YASM_WRITE_16_L(localbuf, flags); + fwrite(info.buf, 20, 1, f); + + yasm_object_sections_traverse(object, &info, coff_objfmt_output_secthead); + + yasm_xfree(info.buf); +} + +static void +coff_objfmt_destroy(yasm_objfmt *objfmt) +{ + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)objfmt; + if (objfmt_coff->filesym_data->aux[0].fname) + yasm_xfree(objfmt_coff->filesym_data->aux[0].fname); + if (objfmt_coff->unwind) + yasm_win64__uwinfo_destroy(objfmt_coff->unwind); + yasm_xfree(objfmt); +} + +static yasm_section * +coff_objfmt_add_default_section(yasm_object *object) +{ + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; + yasm_section *retval; + coff_section_data *csd; + int isnew; + + retval = yasm_object_get_general(object, ".text", 16, 1, 0, &isnew, 0); + if (isnew) { + csd = yasm_section_get_data(retval, &coff_section_data_cb); + csd->flags = COFF_STYP_TEXT; + if (objfmt_coff->win32) + csd->flags |= COFF_STYP_EXECUTE | COFF_STYP_READ; + yasm_section_set_default(retval, 1); + } + return retval; +} + +struct coff_section_switch_data { + int isdefault; + int gasflags; + unsigned long flags; + unsigned long flags2; + /*@only@*/ /*@null@*/ yasm_intnum *align_intn; +}; + +/* GAS-style flags */ +static int +coff_helper_gasflags(void *obj, yasm_valparam *vp, unsigned long line, void *d, + /*@unused@*/ uintptr_t arg) +{ + struct coff_section_switch_data *data = + (struct coff_section_switch_data *)d; + int alloc = 0, load = 0, readonly = 0, code = 0, datasect = 0; + int shared = 0; + const char *s = yasm_vp_string(vp); + size_t i; + + if (!s) { + yasm_error_set(YASM_ERROR_VALUE, N_("non-string section attribute")); + return -1; + } + + /* For GAS, default to read/write data */ + if (data->isdefault) + data->flags = COFF_STYP_TEXT | COFF_STYP_READ | COFF_STYP_WRITE; + + for (i=0; iflags = COFF_STYP_TEXT | COFF_STYP_EXECUTE | COFF_STYP_READ; + else if (datasect) + data->flags = COFF_STYP_DATA | COFF_STYP_READ | COFF_STYP_WRITE; + else if (readonly) + data->flags = COFF_STYP_DATA | COFF_STYP_READ; + else if (load) + data->flags = COFF_STYP_TEXT; + else if (alloc) + data->flags = COFF_STYP_BSS; + + if (shared) + data->flags |= COFF_STYP_SHARED; + + data->gasflags = 1; + return 0; +} + +static /*@observer@*/ /*@null@*/ yasm_section * +coff_objfmt_section_switch(yasm_object *object, yasm_valparamhead *valparams, + /*@unused@*/ /*@null@*/ + yasm_valparamhead *objext_valparams, + unsigned long line) +{ + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; + yasm_valparam *vp; + yasm_section *retval; + int isnew; + int iscode = 0; + int flags_override; + const char *sectname; + char *realname; + int resonly = 0; + unsigned long align = 0; + coff_section_data *csd; + + struct coff_section_switch_data data; + + static const yasm_dir_help help[] = { + { "code", 0, yasm_dir_helper_flag_set, + offsetof(struct coff_section_switch_data, flags), + COFF_STYP_TEXT | COFF_STYP_EXECUTE | COFF_STYP_READ }, + { "text", 0, yasm_dir_helper_flag_set, + offsetof(struct coff_section_switch_data, flags), + COFF_STYP_TEXT | COFF_STYP_EXECUTE | COFF_STYP_READ }, + { "data", 0, yasm_dir_helper_flag_set, + offsetof(struct coff_section_switch_data, flags), + COFF_STYP_DATA | COFF_STYP_READ | COFF_STYP_WRITE }, + { "rdata", 0, yasm_dir_helper_flag_set, + offsetof(struct coff_section_switch_data, flags), + COFF_STYP_DATA | COFF_STYP_READ }, + { "bss", 0, yasm_dir_helper_flag_set, + offsetof(struct coff_section_switch_data, flags), + COFF_STYP_BSS | COFF_STYP_READ | COFF_STYP_WRITE }, + { "info", 0, yasm_dir_helper_flag_set, + offsetof(struct coff_section_switch_data, flags), + COFF_STYP_INFO | COFF_STYP_DISCARD | COFF_STYP_READ }, + { "gasflags", 1, coff_helper_gasflags, 0, 0 }, + /* Win32 only below this point */ + { "discard", 0, yasm_dir_helper_flag_or, + offsetof(struct coff_section_switch_data, flags), COFF_STYP_DISCARD}, + { "nodiscard", 0, yasm_dir_helper_flag_and, + offsetof(struct coff_section_switch_data, flags), COFF_STYP_DISCARD}, + { "cache", 0, yasm_dir_helper_flag_and, + offsetof(struct coff_section_switch_data, flags), COFF_STYP_NOCACHE}, + { "nocache", 0, yasm_dir_helper_flag_or, + offsetof(struct coff_section_switch_data, flags), COFF_STYP_NOCACHE}, + { "page", 0, yasm_dir_helper_flag_and, + offsetof(struct coff_section_switch_data, flags), COFF_STYP_NOPAGE }, + { "nopage", 0, yasm_dir_helper_flag_or, + offsetof(struct coff_section_switch_data, flags), COFF_STYP_NOPAGE }, + { "share", 0, yasm_dir_helper_flag_or, + offsetof(struct coff_section_switch_data, flags), COFF_STYP_SHARED }, + { "noshare", 0, yasm_dir_helper_flag_and, + offsetof(struct coff_section_switch_data, flags), COFF_STYP_SHARED }, + { "execute", 0, yasm_dir_helper_flag_or, + offsetof(struct coff_section_switch_data, flags), COFF_STYP_EXECUTE}, + { "noexecute", 0, yasm_dir_helper_flag_and, + offsetof(struct coff_section_switch_data, flags), COFF_STYP_EXECUTE}, + { "read", 0, yasm_dir_helper_flag_or, + offsetof(struct coff_section_switch_data, flags), COFF_STYP_READ }, + { "noread", 0, yasm_dir_helper_flag_and, + offsetof(struct coff_section_switch_data, flags), COFF_STYP_READ }, + { "write", 0, yasm_dir_helper_flag_or, + offsetof(struct coff_section_switch_data, flags), COFF_STYP_WRITE }, + { "nowrite", 0, yasm_dir_helper_flag_and, + offsetof(struct coff_section_switch_data, flags), COFF_STYP_WRITE }, + { "base", 0, yasm_dir_helper_flag_and, + offsetof(struct coff_section_switch_data, flags2), COFF_FLAG_NOBASE}, + { "nobase", 0, yasm_dir_helper_flag_or, + offsetof(struct coff_section_switch_data, flags2), COFF_FLAG_NOBASE}, + { "align", 1, yasm_dir_helper_intn, + offsetof(struct coff_section_switch_data, align_intn), 0 } + }; + + vp = yasm_vps_first(valparams); + sectname = yasm_vp_string(vp); + if (!sectname) + return NULL; + vp = yasm_vps_next(vp); + + data.isdefault = 0; + data.gasflags = 0; + data.flags = 0; + data.flags2 = 0; + data.align_intn = NULL; + + if (strcmp(sectname, ".data") == 0) { + data.flags = COFF_STYP_DATA | COFF_STYP_READ | COFF_STYP_WRITE; + if (objfmt_coff->win32) { + if (objfmt_coff->machine == COFF_MACHINE_AMD64) + align = 16; + else + align = 4; + } + } else if (strcmp(sectname, ".bss") == 0) { + data.flags = COFF_STYP_BSS | COFF_STYP_READ | COFF_STYP_WRITE; + if (objfmt_coff->win32) { + if (objfmt_coff->machine == COFF_MACHINE_AMD64) + align = 16; + else + align = 4; + } + resonly = 1; + } else if (strcmp(sectname, ".text") == 0) { + data.flags = COFF_STYP_TEXT | COFF_STYP_EXECUTE | COFF_STYP_READ; + if (objfmt_coff->win32) + align = 16; + } else if (strcmp(sectname, ".rdata") == 0 + || strncmp(sectname, ".rodata", 7) == 0 + || strncmp(sectname, ".rdata$", 7) == 0) { + data.flags = COFF_STYP_DATA | COFF_STYP_READ; + if (objfmt_coff->win32) + align = 8; + else + yasm_warn_set(YASM_WARN_GENERAL, + N_("Standard COFF does not support read-only data sections")); + } else if (strcmp(sectname, ".drectve") == 0) { + data.flags = COFF_STYP_INFO; + if (objfmt_coff->win32) + data.flags |= COFF_STYP_DISCARD | COFF_STYP_READ; + } else if (objfmt_coff->win64 && strcmp(sectname, ".pdata") == 0) { + data.flags = COFF_STYP_DATA | COFF_STYP_READ; + align = 4; + data.flags2 = COFF_FLAG_NOBASE; + } else if (objfmt_coff->win64 && strcmp(sectname, ".xdata") == 0) { + data.flags = COFF_STYP_DATA | COFF_STYP_READ; + align = 8; + data.flags2 = COFF_FLAG_NOBASE; + } else if (objfmt_coff->win32 && strcmp(sectname, ".sxdata") == 0) { + data.flags = COFF_STYP_INFO; + } else if (strcmp(sectname, ".comment") == 0) { + data.flags = COFF_STYP_INFO | COFF_STYP_DISCARD | COFF_STYP_READ; + } else if (yasm__strncasecmp(sectname, ".debug", 6)==0) { + data.flags = COFF_STYP_DATA | COFF_STYP_DISCARD | COFF_STYP_READ; + align = 1; + } else { + /* Default to code, but set a flag so if we get gasflags we can + * change it (NASM and GAS have different defaults). + */ + data.isdefault = 1; + data.flags = COFF_STYP_TEXT | COFF_STYP_EXECUTE | COFF_STYP_READ; + } + + flags_override = yasm_dir_helper(object, vp, line, help, + objfmt_coff->win32 ? NELEMS(help) : 7, + &data, yasm_dir_helper_valparam_warn); + if (flags_override < 0) + return NULL; /* error occurred */ + + if (data.flags & COFF_STYP_EXECUTE) + iscode = 1; + + if (!objfmt_coff->win32) + data.flags &= ~COFF_STYP_WIN32_MASK; + + if (data.align_intn) { + align = yasm_intnum_get_uint(data.align_intn); + yasm_intnum_destroy(data.align_intn); + + /* Alignments must be a power of two. */ + if (!is_exp2(align)) { + yasm_error_set(YASM_ERROR_VALUE, + N_("argument to `%s' is not a power of two"), + "align"); + return NULL; + } + + /* Check to see if alignment is supported size */ + if (align > 8192) { + yasm_error_set(YASM_ERROR_VALUE, + N_("Win32 does not support alignments > 8192")); + return NULL; + } + } + + realname = yasm__xstrdup(sectname); + if (strlen(sectname) > 8 && !objfmt_coff->win32) { + /* win32 format supports >8 character section names in object + * files via "/nnnn" (where nnnn is decimal offset into string table), + * so only warn for regular COFF. + */ + yasm_warn_set(YASM_WARN_GENERAL, + N_("COFF section names limited to 8 characters: truncating")); + realname[8] = '\0'; + } + + retval = yasm_object_get_general(object, realname, align, iscode, + resonly, &isnew, line); + yasm_xfree(realname); + + csd = yasm_section_get_data(retval, &coff_section_data_cb); + + if (isnew || yasm_section_is_default(retval)) { + yasm_section_set_default(retval, 0); + csd->flags = data.flags; + csd->flags2 = data.flags2; + yasm_section_set_align(retval, align, line); + } else if (flags_override && !data.gasflags) + yasm_warn_set(YASM_WARN_GENERAL, + N_("section flags ignored on section redeclaration")); + return retval; +} + +static /*@observer@*/ /*@null@*/ yasm_symrec * +coff_objfmt_get_special_sym(yasm_object *object, const char *name, + const char *parser) +{ + return NULL; +} + +static /*@observer@*/ /*@null@*/ yasm_symrec * +win64_objfmt_get_special_sym(yasm_object *object, const char *name, + const char *parser) +{ + if (yasm__strcasecmp(name, "imagebase") == 0) { + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; + return objfmt_coff->ssym_imagebase; + } + return NULL; +} + +static void +coff_section_data_destroy(void *data) +{ + yasm_xfree(data); +} + +static void +coff_section_data_print(void *data, FILE *f, int indent_level) +{ + coff_section_data *csd = (coff_section_data *)data; + + fprintf(f, "%*ssym=\n", indent_level, ""); + yasm_symrec_print(csd->sym, f, indent_level+1); + fprintf(f, "%*sscnum=%d\n", indent_level, "", csd->scnum); + fprintf(f, "%*sflags=", indent_level, ""); + switch (csd->flags & COFF_STYP_STD_MASK) { + case COFF_STYP_TEXT: + fprintf(f, "TEXT"); + break; + case COFF_STYP_DATA: + fprintf(f, "DATA"); + break; + case COFF_STYP_BSS: + fprintf(f, "BSS"); + break; + default: + fprintf(f, "UNKNOWN"); + break; + } + fprintf(f, "\n%*saddr=0x%lx\n", indent_level, "", csd->addr); + fprintf(f, "%*sscnptr=0x%lx\n", indent_level, "", csd->scnptr); + fprintf(f, "%*ssize=%ld\n", indent_level, "", csd->size); + fprintf(f, "%*srelptr=0x%lx\n", indent_level, "", csd->relptr); + fprintf(f, "%*snreloc=%ld\n", indent_level, "", csd->nreloc); + fprintf(f, "%*srelocs:\n", indent_level, ""); +} + +static void +coff_symrec_data_destroy(void *data) +{ + yasm_xfree(data); +} + +static void +coff_symrec_data_print(void *data, FILE *f, int indent_level) +{ + coff_symrec_data *csd = (coff_symrec_data *)data; + + fprintf(f, "%*ssymtab index=%lu\n", indent_level, "", csd->index); + fprintf(f, "%*ssclass=%d\n", indent_level, "", csd->sclass); +} + +static void +dir_export(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_valparam *vp; + /*@null@*/ const char *symname; + int isnew; + yasm_section *sect; + yasm_datavalhead dvs; + + /* Reference exported symbol (to generate error if not declared) */ + vp = yasm_vps_first(valparams); + symname = yasm_vp_id(vp); + if (symname) + yasm_symtab_use(object->symtab, symname, line); + else { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("argument to EXPORT must be symbol name")); + return; + } + + /* Add to end of linker directives */ + sect = yasm_object_get_general(object, ".drectve", 0, 0, 0, &isnew, line); + + /* Initialize directive section if needed */ + if (isnew) { + coff_section_data *csd; + csd = yasm_section_get_data(sect, &coff_section_data_cb); + csd->flags = COFF_STYP_INFO | COFF_STYP_DISCARD | COFF_STYP_READ; + } + + /* Add text as data bytecode */ + yasm_dvs_initialize(&dvs); + yasm_dvs_append(&dvs, yasm_dv_create_string(yasm__xstrdup("-export:"), + strlen("-export:"))); + yasm_dvs_append(&dvs, yasm_dv_create_string(yasm__xstrdup(symname), + strlen(symname))); + yasm_dvs_append(&dvs, yasm_dv_create_string(yasm__xstrdup(" "), 1)); + yasm_section_bcs_append(sect, yasm_bc_create_data(&dvs, 1, 0, NULL, line)); +} + +static void +dir_safeseh(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_valparam *vp; + /*@null@*/ const char *symname; + yasm_symrec *sym; + int isnew; + yasm_section *sect; + + /* Reference symbol (to generate error if not declared). + * Also, symbol must be externally visible, so force it. + */ + vp = yasm_vps_first(valparams); + symname = yasm_vp_id(vp); + if (symname) { + coff_symrec_data *sym_data; + sym = yasm_symtab_use(object->symtab, symname, line); + sym_data = yasm_symrec_get_data(sym, &coff_symrec_data_cb); + if (!sym_data) { + sym_data = coff_objfmt_sym_set_data(sym, COFF_SCL_NULL, 0, + COFF_SYMTAB_AUX_NONE); + } + sym_data->forcevis = 1; + sym_data->type = 0x20; /* function */ + } else { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("argument to SAFESEH must be symbol name")); + return; + } + + /* + * Add symbol number to end of .sxdata section. + */ + + sect = yasm_object_get_general(object, ".sxdata", 0, 0, 0, &isnew, line); + + /* Initialize sxdata section if needed */ + if (isnew) { + coff_section_data *csd; + csd = yasm_section_get_data(sect, &coff_section_data_cb); + csd->flags = COFF_STYP_INFO; + } + + /* Add as sxdata bytecode */ + yasm_section_bcs_append(sect, + yasm_bc_create_common(&win32_sxdata_bc_callback, + sym, line)); +} + +static void +win32_sxdata_bc_destroy(void *contents) +{ + /* Contents is just the symbol pointer, so no need to delete */ +} + +static void +win32_sxdata_bc_print(const void *contents, FILE *f, int indent_level) +{ + /* TODO */ +} + +static int +win32_sxdata_bc_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + bc->len += 4; + return 0; +} + +static int +win32_sxdata_bc_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + yasm_output_reloc_func output_reloc) +{ + yasm_symrec *sym = (yasm_symrec *)bc->contents; + unsigned char *buf = *bufp; + coff_symrec_data *csymd; + + csymd = yasm_symrec_get_data(sym, &coff_symrec_data_cb); + if (!csymd) + yasm_internal_error(N_("coff: no symbol data for SAFESEH symbol")); + + YASM_WRITE_32_L(buf, csymd->index); + + *bufp = buf; + return 0; +} + +static void +dir_ident(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; + yasm_valparamhead sect_vps; + yasm_datavalhead dvs; + yasm_section *comment; + const char *sectname; + yasm_valparam *vp, *vp2; + + /* Accept, but do nothing with empty ident */ + if (!valparams) + return; + + vp = yasm_vps_first(valparams); + if (!vp) + return; + + if (objfmt_coff->win32) { + /* Put ident data into .comment section for COFF, or .rdata$zzz + * to be compatible with the GNU linker, which doesn't ignore + * .comment (see binutils/gas/config/obj-coff.c:476-502). + */ + sectname = ".rdata$zzz"; + } else { + sectname = ".comment"; + } + yasm_vps_initialize(§_vps); + vp2 = yasm_vp_create_id(NULL, yasm__xstrdup(sectname), '\0'); + yasm_vps_append(§_vps, vp2); + comment = coff_objfmt_section_switch(object, §_vps, NULL, line); + yasm_vps_delete(§_vps); + + /* To match GAS output, if the comment section is empty, put an + * initial 0 byte in the section. + */ + if (yasm_section_bcs_first(comment) == yasm_section_bcs_last(comment)) { + yasm_dvs_initialize(&dvs); + yasm_dvs_append(&dvs, yasm_dv_create_expr( + yasm_expr_create_ident(yasm_expr_int(yasm_intnum_create_uint(0)), + line))); + yasm_section_bcs_append(comment, + yasm_bc_create_data(&dvs, 1, 0, object->arch, line)); + } + + yasm_dvs_initialize(&dvs); + do { + const char *s = yasm_vp_string(vp); + if (!s) { + yasm_error_set(YASM_ERROR_VALUE, + N_(".comment requires string parameters")); + yasm_dvs_delete(&dvs); + return; + } + yasm_dvs_append(&dvs, + yasm_dv_create_string(yasm__xstrdup(s), strlen(s))); + } while ((vp = yasm_vps_next(vp))); + + yasm_section_bcs_append(comment, + yasm_bc_create_data(&dvs, 1, 1, object->arch, line)); +} + +static void +dir_secrel32(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_datavalhead dvs; + yasm_valparam *vp; + + if (!object->cur_section) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_(".secrel32 can only be used inside of a section")); + return; + } + + vp = yasm_vps_first(valparams); + yasm_dvs_initialize(&dvs); + do { + yasm_expr *e = yasm_vp_expr(vp, object->symtab, line); + yasm_dataval *dv; + if (!e) { + yasm_error_set(YASM_ERROR_VALUE, + N_(".secrel32 requires expressions")); + yasm_dvs_delete(&dvs); + return; + } + dv = yasm_dv_create_expr(e); + yasm_dv_get_value(dv)->section_rel = 1; + yasm_dvs_append(&dvs, dv); + } while ((vp = yasm_vps_next(vp))); + + yasm_section_bcs_append(object->cur_section, + yasm_bc_create_data(&dvs, 4, 0, object->arch, line)); +} + +static void +dir_def(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; + yasm_valparam *vp; + const char *symname; + yasm_symrec *sym; + coff_symrec_data *sym_data; + + if (objfmt_coff->def_sym) { + yasm_warn_set(YASM_WARN_GENERAL, + N_(".def pseudo-op used inside of .def/.endef; ignored")); + return; + } + + vp = yasm_vps_first(valparams); + symname = yasm_vp_id(vp); + if (!symname) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("argument to SAFESEH must be symbol name")); + return; + } + + sym = yasm_symtab_use(object->symtab, symname, line); + sym_data = yasm_symrec_get_data(sym, &coff_symrec_data_cb); + if (!sym_data) { + sym_data = coff_objfmt_sym_set_data(sym, COFF_SCL_NULL, 0, + COFF_SYMTAB_AUX_NONE); + } + objfmt_coff->def_sym = sym_data; +} + +static void +dir_scl(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; + yasm_intnum *intn = NULL; + + if (!objfmt_coff->def_sym) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("%s pseudo-op used outside of .def/.endef; ignored"), + ".scl"); + return; + } + + if (yasm_dir_helper_intn(object, yasm_vps_first(valparams), line, + &intn, 0) < 0) + return; + if (!intn) + return; + objfmt_coff->def_sym->sclass = yasm_intnum_get_uint(intn); + yasm_intnum_destroy(intn); +} + +static void +dir_type(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; + yasm_intnum *intn = NULL; + + if (!objfmt_coff->def_sym) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("%s pseudo-op used outside of .def/.endef; ignored"), + ".type"); + return; + } + + if (yasm_dir_helper_intn(object, yasm_vps_first(valparams), line, + &intn, 0) < 0) + return; + if (!intn) + return; + objfmt_coff->def_sym->type = yasm_intnum_get_uint(intn); + yasm_intnum_destroy(intn); +} + +static void +dir_endef(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; + if (!objfmt_coff->def_sym) { + yasm_warn_set(YASM_WARN_GENERAL, + N_(".endef pseudo-op used before .def; ignored")); + return; + } + objfmt_coff->def_sym = NULL; +} + +static void +dir_proc_frame(yasm_object *object, /*@null@*/ yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; + yasm_valparam *vp = yasm_vps_first(valparams); + const char *name = yasm_vp_id(vp); + + if (objfmt_coff->proc_frame) { + yasm_error_set_xref(objfmt_coff->proc_frame, + N_("previous procedure started here")); + yasm_error_set(YASM_ERROR_SYNTAX, + N_("nested procedures not supported (didn't use [ENDPROC_FRAME]?)")); + return; + } + objfmt_coff->proc_frame = line; + objfmt_coff->done_prolog = 0; + objfmt_coff->unwind = yasm_win64__uwinfo_create(); + objfmt_coff->unwind->proc = yasm_symtab_use(object->symtab, name, line); + + /* Optional error handler */ + vp = yasm_vps_next(vp); + if (!vp || !(name = yasm_vp_id(vp))) + return; + objfmt_coff->unwind->ehandler = + yasm_symtab_use(object->symtab, name, line); +} + +static int +procframe_checkstate(yasm_objfmt_coff *objfmt_coff, const char *dirname) +{ + if (!objfmt_coff->proc_frame) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("[%s] without preceding [PROC_FRAME]"), dirname); + return 0; + } + if (objfmt_coff->done_prolog) { + yasm_error_set_xref(objfmt_coff->done_prolog, + N_("prologue ended here")); + yasm_error_set(YASM_ERROR_SYNTAX, N_("[%s] after end of prologue"), + dirname); + return 0; + } + if (!objfmt_coff->unwind) + yasm_internal_error(N_("unwind info not present")); + return 1; +} + +/* Get current assembly position. + * XXX: There should be a better way to do this. + */ +static yasm_symrec * +get_curpos(yasm_object *object, const char *dirname, unsigned long line) +{ + if (!object->cur_section) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("[%s] can only be used inside of a section"), + dirname); + return NULL; + } + return yasm_symtab_define_curpos(object->symtab, "$", + yasm_section_bcs_last(object->cur_section), line); +} + +static void +dir_pushreg(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; + yasm_valparam *vp = yasm_vps_first(valparams); + coff_unwind_code *code; + const uintptr_t *reg; + + if (!procframe_checkstate(objfmt_coff, "PUSHREG")) + return; + + if (vp->type != YASM_PARAM_EXPR || + !(reg = yasm_expr_get_reg(&vp->param.e, 0))) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("[%s] requires a register as the first parameter"), + "PUSHREG"); + return; + } + + /* Generate a PUSH_NONVOL unwind code. */ + code = yasm_xmalloc(sizeof(coff_unwind_code)); + code->proc = objfmt_coff->unwind->proc; + code->loc = get_curpos(object, "PUSHREG", line); + code->opcode = UWOP_PUSH_NONVOL; + code->info = (unsigned int)(*reg & 0xF); + yasm_value_initialize(&code->off, NULL, 0); + SLIST_INSERT_HEAD(&objfmt_coff->unwind->codes, code, link); +} + +static void +dir_setframe(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; + yasm_valparam *vp = yasm_vps_first(valparams); + coff_unwind_code *code; + const uintptr_t *reg; + yasm_expr *off = NULL; + + if (!procframe_checkstate(objfmt_coff, "SETFRAME")) + return; + + if (vp->type != YASM_PARAM_EXPR || + !(reg = yasm_expr_get_reg(&vp->param.e, 0))) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("[%s] requires a register as the first parameter"), + "SETFRAME"); + return; + } + + vp = yasm_vps_next(vp); + if (vp) + off = yasm_vp_expr(vp, object->symtab, line); + + /* Set the frame fields in the unwind info */ + objfmt_coff->unwind->framereg = (unsigned long)(*reg); + yasm_value_initialize(&objfmt_coff->unwind->frameoff, off, 8); + + /* Generate a SET_FPREG unwind code */ + code = yasm_xmalloc(sizeof(coff_unwind_code)); + code->proc = objfmt_coff->unwind->proc; + code->loc = get_curpos(object, "SETFRAME", line); + code->opcode = UWOP_SET_FPREG; + code->info = (unsigned int)(*reg & 0xF); + yasm_value_initialize(&code->off, off ? yasm_expr_copy(off) : NULL, 8); + SLIST_INSERT_HEAD(&objfmt_coff->unwind->codes, code, link); +} + +static void +dir_allocstack(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; + yasm_valparam *vp = yasm_vps_first(valparams); + /*@null@*/ /*@only@*/ yasm_expr *size; + coff_unwind_code *code; + + if (!procframe_checkstate(objfmt_coff, "ALLOCSTACK")) + return; + + size = yasm_vp_expr(vp, object->symtab, line); + if (!size) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("[%s] requires a size"), + "ALLOCSTACK"); + return; + } + + /* Generate an ALLOC_SMALL unwind code; this will get enlarged to an + * ALLOC_LARGE if necessary. + */ + code = yasm_xmalloc(sizeof(coff_unwind_code)); + code->proc = objfmt_coff->unwind->proc; + code->loc = get_curpos(object, "ALLOCSTACK", line); + code->opcode = UWOP_ALLOC_SMALL; + code->info = 0; + yasm_value_initialize(&code->off, size, 7); + SLIST_INSERT_HEAD(&objfmt_coff->unwind->codes, code, link); +} + +static void +dir_save_common(yasm_object *object, yasm_valparamhead *valparams, + unsigned long line, const char *name, int op) +{ + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; + yasm_valparam *vp = yasm_vps_first(valparams); + coff_unwind_code *code; + const uintptr_t *reg; + /*@only@*/ /*@null@*/ yasm_expr *offset; + + if (!procframe_checkstate(objfmt_coff, name)) + return; + + if (vp->type != YASM_PARAM_EXPR || + !(reg = yasm_expr_get_reg(&vp->param.e, 0))) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("[%s] requires a register as the first parameter"), + name); + return; + } + + vp = yasm_vps_next(vp); + offset = yasm_vp_expr(vp, object->symtab, line); + if (!offset) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("[%s] requires an offset as the second parameter"), + name); + return; + } + + /* Generate a SAVE_XXX unwind code; this will get enlarged to a + * SAVE_XXX_FAR if necessary. + */ + code = yasm_xmalloc(sizeof(coff_unwind_code)); + code->proc = objfmt_coff->unwind->proc; + code->loc = get_curpos(object, name, line); + code->opcode = op; + code->info = (unsigned int)(*reg & 0xF); + yasm_value_initialize(&code->off, offset, 16); + SLIST_INSERT_HEAD(&objfmt_coff->unwind->codes, code, link); +} + +static void +dir_savereg(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + dir_save_common(object, valparams, line, "SAVEREG", UWOP_SAVE_NONVOL); +} + +static void +dir_savexmm128(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + dir_save_common(object, valparams, line, "SAVEXMM128", UWOP_SAVE_XMM128); +} + +static void +dir_pushframe(yasm_object *object, /*@null@*/ yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; + yasm_valparam *vp = yasm_vps_first(valparams); + coff_unwind_code *code; + + if (!procframe_checkstate(objfmt_coff, "PUSHFRAME")) + return; + + /* Generate a PUSH_MACHFRAME unwind code. If there's any parameter, + * we set info to 1. Otherwise we set info to 0. + */ + code = yasm_xmalloc(sizeof(coff_unwind_code)); + code->proc = objfmt_coff->unwind->proc; + code->loc = get_curpos(object, "PUSHFRAME", line); + code->opcode = UWOP_PUSH_MACHFRAME; + code->info = vp != NULL; + yasm_value_initialize(&code->off, NULL, 0); + SLIST_INSERT_HEAD(&objfmt_coff->unwind->codes, code, link); +} + +static void +dir_endprolog(yasm_object *object, /*@null@*/ yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; + if (!procframe_checkstate(objfmt_coff, "ENDPROLOG")) + return; + objfmt_coff->done_prolog = line; + + objfmt_coff->unwind->prolog = get_curpos(object, "ENDPROLOG", line); +} + +static void +dir_endproc_frame(yasm_object *object, /*@null@*/ yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_objfmt_coff *objfmt_coff = (yasm_objfmt_coff *)object->objfmt; + yasm_section *sect; + coff_section_data *csd; + yasm_datavalhead dvs; + int isnew; + /*@dependent@*/ yasm_symrec *curpos, *unwindpos, *proc_sym, *xdata_sym; + + if (!objfmt_coff->proc_frame) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("[%s] without preceding [PROC_FRAME]"), + "ENDPROC_FRAME"); + return; + } + if (!objfmt_coff->done_prolog) { + yasm_error_set_xref(objfmt_coff->proc_frame, + N_("procedure started here")); + yasm_error_set(YASM_ERROR_SYNTAX, + N_("ended procedure without ending prologue"), + "ENDPROC_FRAME"); + objfmt_coff->proc_frame = 0; + yasm_win64__uwinfo_destroy(objfmt_coff->unwind); + objfmt_coff->unwind = NULL; + return; + } + if (!objfmt_coff->unwind) + yasm_internal_error(N_("unwind info not present")); + + proc_sym = objfmt_coff->unwind->proc; + + curpos = get_curpos(object, "ENDPROC_FRAME", line); + + /* + * Add unwind info to end of .xdata section. + */ + + sect = yasm_object_get_general(object, ".xdata", 0, 0, 0, &isnew, line); + + /* Initialize xdata section if needed */ + if (isnew) { + csd = yasm_section_get_data(sect, &coff_section_data_cb); + csd->flags = COFF_STYP_DATA | COFF_STYP_READ; + yasm_section_set_align(sect, 8, line); + } + + /* Get current position in .xdata section */ + unwindpos = yasm_symtab_define_curpos(object->symtab, "$", + yasm_section_bcs_last(sect), line); + /* Get symbol for .xdata as we'll want to reference it with WRT */ + csd = yasm_section_get_data(sect, &coff_section_data_cb); + xdata_sym = csd->sym; + + /* Add unwind info. Use line number of start of procedure. */ + yasm_win64__unwind_generate(sect, objfmt_coff->unwind, + objfmt_coff->proc_frame); + objfmt_coff->unwind = NULL; /* generate keeps the unwind pointer */ + + /* + * Add function lookup to end of .pdata section. + */ + + sect = yasm_object_get_general(object, ".pdata", 0, 0, 0, &isnew, line); + + /* Initialize pdata section if needed */ + if (isnew) { + csd = yasm_section_get_data(sect, &coff_section_data_cb); + csd->flags = COFF_STYP_DATA | COFF_STYP_READ; + csd->flags2 = COFF_FLAG_NOBASE; + yasm_section_set_align(sect, 4, line); + } + + /* Add function structure as data bytecode */ + yasm_dvs_initialize(&dvs); + yasm_dvs_append(&dvs, yasm_dv_create_expr( + yasm_expr_create_ident(yasm_expr_sym(proc_sym), line))); + yasm_dvs_append(&dvs, yasm_dv_create_expr( + yasm_expr_create(YASM_EXPR_WRT, yasm_expr_sym(curpos), + yasm_expr_sym(proc_sym), line))); + yasm_dvs_append(&dvs, yasm_dv_create_expr( + yasm_expr_create(YASM_EXPR_WRT, yasm_expr_sym(unwindpos), + yasm_expr_sym(xdata_sym), line))); + yasm_section_bcs_append(sect, yasm_bc_create_data(&dvs, 4, 0, NULL, line)); + + objfmt_coff->proc_frame = 0; + objfmt_coff->done_prolog = 0; +} + +/* Define valid debug formats to use with this object format */ +static const char *coff_objfmt_dbgfmt_keywords[] = { + "null", + "dwarf2", + NULL +}; + +static const yasm_directive coff_objfmt_directives[] = { + { ".ident", "gas", dir_ident, YASM_DIR_ANY }, + { "ident", "nasm", dir_ident, YASM_DIR_ANY }, + { ".def", "gas", dir_def, YASM_DIR_ID_REQUIRED }, + { ".endef", "gas", dir_endef, YASM_DIR_ANY }, + { ".scl", "gas", dir_scl, YASM_DIR_ARG_REQUIRED }, + { ".type", "gas", dir_type, YASM_DIR_ARG_REQUIRED }, + { ".secrel32", "gas", dir_secrel32, YASM_DIR_ARG_REQUIRED }, + { NULL, NULL, NULL, 0 } +}; + +/* Define objfmt structure -- see objfmt.h for details */ +yasm_objfmt_module yasm_coff_LTX_objfmt = { + "COFF (DJGPP)", + "coff", + "o", + 32, + 0, + coff_objfmt_dbgfmt_keywords, + "null", + coff_objfmt_directives, + NULL, /* no standard macros */ + coff_objfmt_create, + coff_objfmt_output, + coff_objfmt_destroy, + coff_objfmt_add_default_section, + coff_objfmt_init_new_section, + coff_objfmt_section_switch, + coff_objfmt_get_special_sym +}; + +/* Define valid debug formats to use with this object format */ +static const char *winXX_objfmt_dbgfmt_keywords[] = { + "null", + "dwarf2", + "cv8", + NULL +}; + +static const yasm_directive win32_objfmt_directives[] = { + { ".ident", "gas", dir_ident, YASM_DIR_ANY }, + { "ident", "nasm", dir_ident, YASM_DIR_ANY }, + { ".def", "gas", dir_def, YASM_DIR_ID_REQUIRED }, + { ".endef", "gas", dir_endef, YASM_DIR_ANY }, + { ".scl", "gas", dir_scl, YASM_DIR_ARG_REQUIRED }, + { ".type", "gas", dir_type, YASM_DIR_ARG_REQUIRED }, + { ".secrel32", "gas", dir_secrel32, YASM_DIR_ARG_REQUIRED }, + { ".export", "gas", dir_export, YASM_DIR_ID_REQUIRED }, + { "export", "nasm", dir_export, YASM_DIR_ID_REQUIRED }, + { ".safeseh", "gas", dir_safeseh, YASM_DIR_ID_REQUIRED }, + { "safeseh", "nasm", dir_safeseh, YASM_DIR_ID_REQUIRED }, + { NULL, NULL, NULL, 0 } +}; + +static const char *win32_nasm_stdmac[] = { + "%imacro export 1+.nolist", + "[export %1]", + "%endmacro", + "%imacro safeseh 1+.nolist", + "[safeseh %1]", + "%endmacro", + NULL +}; + +static const yasm_stdmac win32_objfmt_stdmacs[] = { + { "nasm", "nasm", win32_nasm_stdmac }, + { NULL, NULL, NULL } +}; + +/* Define objfmt structure -- see objfmt.h for details */ +yasm_objfmt_module yasm_win32_LTX_objfmt = { + "Win32", + "win32", + "obj", + 32, + 1, + winXX_objfmt_dbgfmt_keywords, + "null", + win32_objfmt_directives, + win32_objfmt_stdmacs, + win32_objfmt_create, + coff_objfmt_output, + coff_objfmt_destroy, + coff_objfmt_add_default_section, + coff_objfmt_init_new_section, + coff_objfmt_section_switch, + coff_objfmt_get_special_sym +}; + +static const yasm_directive win64_objfmt_directives[] = { + { ".ident", "gas", dir_ident, YASM_DIR_ANY }, + { "ident", "nasm", dir_ident, YASM_DIR_ANY }, + { ".def", "gas", dir_def, YASM_DIR_ID_REQUIRED }, + { ".endef", "gas", dir_endef, YASM_DIR_ANY }, + { ".scl", "gas", dir_scl, YASM_DIR_ARG_REQUIRED }, + { ".type", "gas", dir_type, YASM_DIR_ARG_REQUIRED }, + { ".secrel32", "gas", dir_secrel32, YASM_DIR_ARG_REQUIRED }, + { ".export", "gas", dir_export, YASM_DIR_ID_REQUIRED }, + { "export", "nasm", dir_export, YASM_DIR_ID_REQUIRED }, + { ".proc_frame", "gas", dir_proc_frame, YASM_DIR_ID_REQUIRED }, + { "proc_frame", "nasm", dir_proc_frame, YASM_DIR_ID_REQUIRED }, + { ".pushreg", "gas", dir_pushreg, YASM_DIR_ARG_REQUIRED }, + { "pushreg", "nasm", dir_pushreg, YASM_DIR_ARG_REQUIRED }, + { ".setframe", "gas", dir_setframe, YASM_DIR_ARG_REQUIRED }, + { "setframe", "nasm", dir_setframe, YASM_DIR_ARG_REQUIRED }, + { ".allocstack", "gas", dir_allocstack, YASM_DIR_ARG_REQUIRED }, + { "allocstack", "nasm", dir_allocstack, YASM_DIR_ARG_REQUIRED }, + { ".savereg", "gas", dir_savereg, YASM_DIR_ARG_REQUIRED }, + { "savereg", "nasm", dir_savereg, YASM_DIR_ARG_REQUIRED }, + { ".savexmm128", "gas", dir_savexmm128, YASM_DIR_ARG_REQUIRED }, + { "savexmm128", "nasm", dir_savexmm128, YASM_DIR_ARG_REQUIRED }, + { ".pushframe", "gas", dir_pushframe, YASM_DIR_ANY }, + { "pushframe", "nasm", dir_pushframe, YASM_DIR_ANY }, + { ".endprolog", "gas", dir_endprolog, YASM_DIR_ANY }, + { "endprolog", "nasm", dir_endprolog, YASM_DIR_ANY }, + { ".endproc_frame", "gas", dir_endproc_frame, YASM_DIR_ANY }, + { "endproc_frame", "nasm", dir_endproc_frame, YASM_DIR_ANY }, + { NULL, NULL, NULL, 0 } +}; + +#include "win64-nasm.c" +#include "win64-gas.c" + +static const yasm_stdmac win64_objfmt_stdmacs[] = { + { "nasm", "nasm", win64_nasm_stdmac }, + { "gas", "nasm", win64_gas_stdmac }, + { NULL, NULL, NULL } +}; + +/* Define objfmt structure -- see objfmt.h for details */ +yasm_objfmt_module yasm_win64_LTX_objfmt = { + "Win64", + "win64", + "obj", + 64, + 1, + winXX_objfmt_dbgfmt_keywords, + "null", + win64_objfmt_directives, + win64_objfmt_stdmacs, + win64_objfmt_create, + coff_objfmt_output, + coff_objfmt_destroy, + coff_objfmt_add_default_section, + coff_objfmt_init_new_section, + coff_objfmt_section_switch, + win64_objfmt_get_special_sym +}; +yasm_objfmt_module yasm_x64_LTX_objfmt = { + "Win64", + "x64", + "obj", + 64, + 1, + winXX_objfmt_dbgfmt_keywords, + "null", + win64_objfmt_directives, + win64_objfmt_stdmacs, + win64_objfmt_create, + coff_objfmt_output, + coff_objfmt_destroy, + coff_objfmt_add_default_section, + coff_objfmt_init_new_section, + coff_objfmt_section_switch, + win64_objfmt_get_special_sym +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/coff-objfmt.h b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/coff-objfmt.h new file mode 100644 index 0000000000..10d88a0982 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/coff-objfmt.h @@ -0,0 +1,77 @@ +/* + * COFF (DJGPP) object format + * + * Copyright (C) 2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + */ +#ifndef COFF_OBJFMT_H +#define COFF_OBJFMT_H + +typedef struct coff_unwind_code { + SLIST_ENTRY(coff_unwind_code) link; + + /*@dependent@*/ yasm_symrec *proc; /* Start of procedure */ + /*@dependent@*/ yasm_symrec *loc; /* Location of operation */ + /* Unwind operation code */ + enum { + UWOP_PUSH_NONVOL = 0, + UWOP_ALLOC_LARGE = 1, + UWOP_ALLOC_SMALL = 2, + UWOP_SET_FPREG = 3, + UWOP_SAVE_NONVOL = 4, + UWOP_SAVE_NONVOL_FAR = 5, + UWOP_SAVE_XMM128 = 8, + UWOP_SAVE_XMM128_FAR = 9, + UWOP_PUSH_MACHFRAME = 10 + } opcode; + unsigned int info; /* Operation info */ + yasm_value off; /* Offset expression (used for some codes) */ +} coff_unwind_code; + +typedef struct coff_unwind_info { + /*@dependent@*/ yasm_symrec *proc; /* Start of procedure */ + /*@dependent@*/ yasm_symrec *prolog; /* End of prologue */ + + /*@null@*/ /*@dependent@*/ yasm_symrec *ehandler; /* Error handler */ + + unsigned long framereg; /* Frame register */ + yasm_value frameoff; /* Frame offset */ + + /* Linked list of codes, in decreasing location offset order. + * Inserting at the head of this list during assembly naturally results + * in this sorting. + */ + SLIST_HEAD(coff_unwind_code_head, coff_unwind_code) codes; + + /* These aren't used until inside of generate. */ + yasm_value prolog_size; + yasm_value codes_count; +} coff_unwind_info; + +coff_unwind_info *yasm_win64__uwinfo_create(void); +void yasm_win64__uwinfo_destroy(coff_unwind_info *info); +void yasm_win64__unwind_generate(yasm_section *xdata, + /*@only@*/ coff_unwind_info *info, + unsigned long line); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/Makefile.inc new file mode 100644 index 0000000000..aafdfbf2b5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/Makefile.inc @@ -0,0 +1,11 @@ +TESTS += modules/objfmts/coff/tests/coff_test.sh + +EXTRA_DIST += modules/objfmts/coff/tests/coff_test.sh +EXTRA_DIST += modules/objfmts/coff/tests/cofftest.c +EXTRA_DIST += modules/objfmts/coff/tests/cofftest.asm +EXTRA_DIST += modules/objfmts/coff/tests/cofftest.hex +EXTRA_DIST += modules/objfmts/coff/tests/cofftimes.asm +EXTRA_DIST += modules/objfmts/coff/tests/cofftimes.hex +EXTRA_DIST += modules/objfmts/coff/tests/x86id.asm +EXTRA_DIST += modules/objfmts/coff/tests/x86id.hex +EXTRA_DIST += modules/objfmts/coff/tests/x86id.errwarn diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/coff_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/coff_test.sh new file mode 100755 index 0000000000..eec61bebea --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/coff_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh coff_test modules/objfmts/coff/tests "coff objfmt" "-f coff" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftest.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftest.asm new file mode 100644 index 0000000000..17b93f9e03 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftest.asm @@ -0,0 +1,82 @@ +; test source file for assembling to COFF +; build with (under DJGPP, for example): +; yasm -f coff cofftest.asm +; gcc -o cofftest cofftest.c cofftest.o + +; This file should test the following: +; [1] Define and export a global text-section symbol +; [2] Define and export a global data-section symbol +; [3] Define and export a global BSS-section symbol +; [4] Define a non-global text-section symbol +; [5] Define a non-global data-section symbol +; [6] Define a non-global BSS-section symbol +; [7] Define a COMMON symbol +; [8] Define a NASM local label +; [9] Reference a NASM local label +; [10] Import an external symbol +; [11] Make a PC-relative call to an external symbol +; [12] Reference a text-section symbol in the text section +; [13] Reference a data-section symbol in the text section +; [14] Reference a BSS-section symbol in the text section +; [15] Reference a text-section symbol in the data section +; [16] Reference a data-section symbol in the data section +; [17] Reference a BSS-section symbol in the data section + +[BITS 32] +[GLOBAL _lrotate] ; [1] +[GLOBAL _greet] ; [1] +[GLOBAL _asmstr] ; [2] +[GLOBAL _textptr] ; [2] +[GLOBAL _selfptr] ; [2] +[GLOBAL _integer] ; [3] +[EXTERN _printf] ; [10] +[COMMON _commvar 4] ; [7] + +[SECTION .text] + +; prototype: long lrotate(long x, int num); +_lrotate: ; [1] + push ebp + mov ebp,esp + mov eax,[ebp+8] + mov ecx,[ebp+12] +.label rol eax,1 ; [4] [8] + loop .label ; [9] [12] + mov esp,ebp + pop ebp + ret + +; prototype: void greet(void); +_greet mov eax,[_integer] ; [14] + inc eax + mov [localint],eax ; [14] + push dword [_commvar] + mov eax,[localptr] ; [13] + push dword [eax] + push dword [_integer] ; [1] [14] + push dword _printfstr ; [13] + call _printf ; [11] + add esp,16 + ret + +[SECTION .data] + +; a string +_asmstr db 'hello, world', 0 ; [2] + +; a string for Printf +_printfstr db "integer==%d, localint==%d, commvar=%d" + db 10, 0 + +; some pointers +localptr dd localint ; [5] [17] +_textptr dd _greet ; [15] +_selfptr dd _selfptr ; [16] + +[SECTION .bss] + +; an integer +_integer resd 1 ; [3] + +; a local integer +localint resd 1 ; [6] diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftest.c b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftest.c new file mode 100644 index 0000000000..fa6a552d62 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftest.c @@ -0,0 +1,34 @@ +/* + * test source file for assembling to COFF + * build with (under DJGPP, for example): + * yasm -f coff cofftest.asm + * gcc -o cofftest cofftest.c cofftest.o + */ + +#include + +extern int lrotate(long, int); +extern void greet(void); +extern char asmstr[]; +extern void *selfptr; +extern void *textptr; +extern int integer, commvar; + +int main(void) { + + printf("Testing lrotate: should get 0x00400000, 0x00000001\n"); + printf("lrotate(0x00040000, 4) = 0x%08lx\n", lrotate(0x40000,4)); + printf("lrotate(0x00040000, 14) = 0x%08lx\n", lrotate(0x40000,14)); + + printf("This string should read `hello, world': `%s'\n", asmstr); + + printf("The integers here should be 1234, 1235 and 4321:\n"); + integer = 1234; + commvar = 4321; + greet(); + + printf("These pointers should be equal: %p and %p\n", + &greet, textptr); + + printf("So should these: %p and %p\n", selfptr, &selfptr); +} diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftest.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftest.hex new file mode 100644 index 0000000000..c6329775c9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftest.hex @@ -0,0 +1,657 @@ +4c +01 +03 +00 +00 +00 +00 +00 +6d +01 +00 +00 +10 +00 +00 +00 +00 +00 +0c +01 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3d +00 +00 +00 +8c +00 +00 +00 +c9 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +20 +00 +00 +00 +2e +64 +61 +74 +61 +00 +00 +00 +3d +00 +00 +00 +3d +00 +00 +00 +40 +00 +00 +00 +0f +01 +00 +00 +4f +01 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +40 +00 +00 +00 +2e +62 +73 +73 +00 +00 +00 +00 +7d +00 +00 +00 +7d +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +55 +89 +e5 +8b +45 +08 +8b +4d +0c +d1 +c0 +e2 +fc +89 +ec +5d +c3 +a1 +7d +00 +00 +00 +40 +a3 +81 +00 +00 +00 +ff +35 +04 +00 +00 +00 +a1 +71 +00 +00 +00 +ff +30 +ff +35 +7d +00 +00 +00 +68 +4a +00 +00 +00 +e8 +c7 +ff +ff +ff +83 +c4 +10 +c3 +12 +00 +00 +00 +0e +00 +00 +00 +06 +00 +18 +00 +00 +00 +0e +00 +00 +00 +06 +00 +1e +00 +00 +00 +0b +00 +00 +00 +06 +00 +23 +00 +00 +00 +0c +00 +00 +00 +06 +00 +2b +00 +00 +00 +0e +00 +00 +00 +06 +00 +30 +00 +00 +00 +0c +00 +00 +00 +06 +00 +35 +00 +00 +00 +0a +00 +00 +00 +14 +00 +68 +65 +6c +6c +6f +2c +20 +77 +6f +72 +6c +64 +00 +69 +6e +74 +65 +67 +65 +72 +3d +3d +25 +64 +2c +20 +6c +6f +63 +61 +6c +69 +6e +74 +3d +3d +25 +64 +2c +20 +63 +6f +6d +6d +76 +61 +72 +3d +25 +64 +0a +00 +81 +00 +00 +00 +11 +00 +00 +00 +79 +00 +00 +00 +71 +00 +00 +00 +0e +00 +00 +00 +06 +00 +75 +00 +00 +00 +02 +00 +00 +00 +06 +00 +79 +00 +00 +00 +0c +00 +00 +00 +06 +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +3d +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +6c +72 +6f +74 +61 +74 +65 +00 +00 +00 +00 +01 +00 +00 +00 +02 +00 +5f +67 +72 +65 +65 +74 +00 +00 +11 +00 +00 +00 +01 +00 +00 +00 +02 +00 +5f +61 +73 +6d +73 +74 +72 +00 +3d +00 +00 +00 +02 +00 +00 +00 +02 +00 +5f +74 +65 +78 +74 +70 +74 +72 +75 +00 +00 +00 +02 +00 +00 +00 +02 +00 +5f +73 +65 +6c +66 +70 +74 +72 +79 +00 +00 +00 +02 +00 +00 +00 +02 +00 +5f +69 +6e +74 +65 +67 +65 +72 +7d +00 +00 +00 +03 +00 +00 +00 +02 +00 +5f +70 +72 +69 +6e +74 +66 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +5f +63 +6f +6d +6d +76 +61 +72 +04 +00 +00 +00 +00 +00 +00 +00 +02 +00 +2e +64 +61 +74 +61 +00 +00 +00 +3d +00 +00 +00 +02 +00 +00 +00 +03 +01 +40 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +62 +73 +73 +00 +00 +00 +00 +7d +00 +00 +00 +03 +00 +00 +00 +03 +01 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftimes.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftimes.asm new file mode 100644 index 0000000000..20b8593016 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftimes.asm @@ -0,0 +1,12 @@ +[section .text] +mov eax, eax +mov ebx, ebx +[section .data] +times 0x1 mov eax, eax +mov ebx, ebx +[section .foo] +times 0x10 mov eax, eax +mov ebx, ebx +[section .bar] +times 0x10 mov eax, eax +times 0x10 mov ebx, ebx diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftimes.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftimes.hex new file mode 100644 index 0000000000..40cf2be15e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/cofftimes.hex @@ -0,0 +1,470 @@ +4c +01 +04 +00 +00 +00 +00 +00 +1e +01 +00 +00 +0a +00 +00 +00 +00 +00 +0c +01 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +b4 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +2e +64 +61 +74 +61 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +2e +66 +6f +6f +00 +00 +00 +00 +08 +00 +00 +00 +08 +00 +00 +00 +22 +00 +00 +00 +bc +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +2e +62 +61 +72 +00 +00 +00 +00 +2a +00 +00 +00 +2a +00 +00 +00 +40 +00 +00 +00 +de +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +89 +c0 +89 +db +89 +c0 +89 +db +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +db +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +64 +61 +74 +61 +00 +00 +00 +04 +00 +00 +00 +02 +00 +00 +00 +03 +01 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +66 +6f +6f +00 +00 +00 +00 +08 +00 +00 +00 +03 +00 +00 +00 +03 +01 +22 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +62 +61 +72 +00 +00 +00 +00 +2a +00 +00 +00 +04 +00 +00 +00 +03 +01 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/x86id.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/x86id.asm new file mode 100644 index 0000000000..e083fdd504 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/x86id.asm @@ -0,0 +1,26132 @@ +; Generated from x86id.c by GCC 3.2.3 with -O -S -I. -masm=intel. +; Many changes made to make nasm-syntax compatible. + + ;.file "x86id.c" +;#APP + ;.ident "$Id$" +;#NO_APP +extern yasm_internal_error_ +extern yasm_expr_copy +extern yasm_expr_expr +extern yasm_expr_new +extern yasm_symrec_define_label +extern yasm_x86_LTX_mode_bits +extern yasm_x86__bc_new_jmp +extern yasm_ea_get_disp +extern yasm_expr__contains +extern yasm_x86__get_reg_size +extern yasm__error +extern yasm_intnum_new_uint +extern yasm_expr_int +extern yasm_ea_delete +extern yasm_expr_delete +extern yasm_x86__ea_new_reg +extern yasm_x86__ea_set_disponly +extern yasm_x86__ea_new_imm +extern yasm_x86__set_rex_from_reg +extern yasm_xfree +extern yasm_x86__bc_new_insn +extern yasm__warning + + section .data + align 4 + ;.type cpu_enabled,@object + ;.size cpu_enabled,4 +cpu_enabled: + dd -1 + section .rodata + align 4 + ;.type not64_insn,@object + ;.size not64_insn,28 +not64_insn: + dd 33554432 + dd 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + align 4 + ;.type onebyte_insn,@object + ;.size onebyte_insn,28 +onebyte_insn: + dd 0 + dd 80 + db 0 + db 1 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + align 4 + ;.type twobyte_insn,@object + ;.size twobyte_insn,28 +twobyte_insn: + dd 0 + dd 20 + db 0 + db 2 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + align 4 + ;.type threebyte_insn,@object + ;.size threebyte_insn,28 +threebyte_insn: + dd 0 + dd 21 + db 0 + db 3 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + align 4 + ;.type onebytemem_insn,@object + ;.size onebytemem_insn,28 +onebytemem_insn: + dd 0 + dd 48 + db 0 + db 1 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4098 + dd 0 + dd 0 + align 4 + ;.type twobytemem_insn,@object + ;.size twobytemem_insn,28 +twobytemem_insn: + dd 0 + dd 52 + db 0 + db 2 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4098 + dd 0 + dd 0 + align 32 + ;.type mov_insn,@object + ;.size mov_insn,1260 +mov_insn: + dd 0 + dd 0 + db 0 + db 1 + db -96 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 43 + dd 4405 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -95 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 75 + dd 4437 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -95 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 107 + dd 4469 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -95 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 139 + dd 4501 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -94 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4405 + dd 43 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -93 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4437 + dd 75 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -93 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4469 + dd 107 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -93 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4501 + dd 139 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -120 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4387 + dd 16417 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -119 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 16449 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -119 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 16481 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -119 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 16513 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -118 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16417 + dd 4387 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -117 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4419 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -117 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4451 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -117 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4483 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -116 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4418 + dd 16710 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -116 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4161 + dd 16710 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -116 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4193 + dd 16710 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -116 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4225 + dd 16710 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -114 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16710 + dd 4419 + dd 0 + dd 4 + dd 0 + db 0 + db 1 + db -114 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16710 + dd 4193 + dd 0 + dd 16779264 + dd 0 + db 0 + db 1 + db -114 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16710 + dd 4225 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -80 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 20513 + dd 8480 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -72 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 20545 + dd 8512 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -72 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 20577 + dd 8544 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -72 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 20609 + dd 8576 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -58 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4387 + dd 8224 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -57 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 8256 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -57 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 8288 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -57 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 8288 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -58 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4131 + dd 8480 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -57 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4163 + dd 8512 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -57 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4195 + dd 8544 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -57 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4227 + dd 8544 + dd 0 + dd 41943056 + dd 0 + db 0 + db 2 + db 15 + db 34 + db 0 + db 0 + db 2 + db 0 + dd 16500 + dd 4193 + dd 0 + dd 41943044 + dd 0 + db 0 + db 2 + db 15 + db 34 + db 0 + db 0 + db 2 + db 0 + dd 16487 + dd 4193 + dd 0 + dd 25167872 + dd 0 + db 0 + db 2 + db 15 + db 34 + db 0 + db 0 + db 2 + db 0 + dd 16487 + dd 4225 + dd 0 + dd 41943056 + dd 0 + db 0 + db 2 + db 15 + db 32 + db 0 + db 0 + db 2 + db 0 + dd 4193 + dd 16500 + dd 0 + dd 41943044 + dd 0 + db 0 + db 2 + db 15 + db 32 + db 0 + db 0 + db 2 + db 0 + dd 4193 + dd 16487 + dd 0 + dd 25167872 + dd 0 + db 0 + db 2 + db 15 + db 32 + db 0 + db 0 + db 2 + db 0 + dd 4225 + dd 16487 + dd 0 + dd 41943044 + dd 0 + db 0 + db 2 + db 15 + db 35 + db 0 + db 0 + db 2 + db 0 + dd 16488 + dd 4193 + dd 0 + dd 25167872 + dd 0 + db 0 + db 2 + db 15 + db 35 + db 0 + db 0 + db 2 + db 0 + dd 16488 + dd 4225 + dd 0 + dd 41943044 + dd 0 + db 0 + db 2 + db 15 + db 33 + db 0 + db 0 + db 2 + db 0 + dd 4193 + dd 16488 + dd 0 + dd 25167872 + dd 0 + db 0 + db 2 + db 15 + db 33 + db 0 + db 0 + db 2 + db 0 + dd 4225 + dd 16488 + dd 0 + align 32 + ;.type movszx_insn,@object + ;.size movszx_insn,140 +movszx_insn: + dd 4 + dd 4 + db 16 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4387 + dd 0 + dd 4 + dd 4 + db 32 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4131 + dd 0 + dd 16779264 + dd 4 + db 64 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4131 + dd 0 + dd 4 + dd 4 + db 32 + db 2 + db 15 + db 1 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4163 + dd 0 + dd 16779264 + dd 4 + db 64 + db 2 + db 15 + db 1 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4163 + dd 0 + align 4 + ;.type movsxd_insn,@object + ;.size movsxd_insn,28 +movsxd_insn: + dd 16779264 + dd 0 + db 64 + db 1 + db 99 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4195 + dd 0 + align 32 + ;.type push_insn,@object + ;.size push_insn,784 +push_insn: + dd 0 + dd 0 + db 16 + db 1 + db 80 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 20545 + dd 0 + dd 0 + dd 33554436 + dd 0 + db 32 + db 1 + db 80 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 20577 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 0 + db 1 + db 80 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 20609 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -1 + db 0 + db 0 + db 6 + db 1 + db 0 + dd 4163 + dd 0 + dd 0 + dd 33554436 + dd 0 + db 32 + db 1 + db -1 + db 0 + db 0 + db 6 + db 1 + db 0 + dd 4195 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 6 + db 1 + db 0 + dd 4227 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db 106 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 8224 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db 104 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 8256 + dd 0 + dd 0 + dd 33554436 + dd 0 + db 32 + db 1 + db 104 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 8288 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db 104 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 8320 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 0 + db 1 + db 14 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 14 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 16 + db 1 + db 14 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 78 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 32 + db 1 + db 14 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 110 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 0 + db 1 + db 22 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 19 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 16 + db 1 + db 22 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 83 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 32 + db 1 + db 22 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 115 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 0 + db 1 + db 30 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 15 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 16 + db 1 + db 30 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 79 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 32 + db 1 + db 30 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 111 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 0 + db 1 + db 6 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 16 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 16 + db 1 + db 6 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 80 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 32 + db 1 + db 6 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 112 + dd 0 + dd 0 + dd 4 + dd 0 + db 0 + db 2 + db 15 + db -96 + db 0 + db 0 + db 1 + db 0 + dd 17 + dd 0 + dd 0 + dd 4 + dd 0 + db 16 + db 2 + db 15 + db -96 + db 0 + db 0 + db 1 + db 0 + dd 81 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 2 + db 15 + db -96 + db 0 + db 0 + db 1 + db 0 + dd 113 + dd 0 + dd 0 + dd 4 + dd 0 + db 0 + db 2 + db 15 + db -88 + db 0 + db 0 + db 1 + db 0 + dd 18 + dd 0 + dd 0 + dd 4 + dd 0 + db 16 + db 2 + db 15 + db -88 + db 0 + db 0 + db 1 + db 0 + dd 82 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 2 + db 15 + db -88 + db 0 + db 0 + db 1 + db 0 + dd 114 + dd 0 + dd 0 + align 32 + ;.type pop_insn,@object + ;.size pop_insn,588 +pop_insn: + dd 0 + dd 0 + db 16 + db 1 + db 88 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 20545 + dd 0 + dd 0 + dd 33554436 + dd 0 + db 32 + db 1 + db 88 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 20577 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 0 + db 1 + db 88 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 20609 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -113 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4163 + dd 0 + dd 0 + dd 33554436 + dd 0 + db 32 + db 1 + db -113 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4195 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 0 + db 1 + db -113 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4227 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 0 + db 1 + db 23 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 19 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 16 + db 1 + db 23 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 83 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 32 + db 1 + db 23 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 115 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 0 + db 1 + db 31 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 15 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 16 + db 1 + db 31 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 79 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 32 + db 1 + db 31 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 111 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 0 + db 1 + db 7 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 16 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 16 + db 1 + db 7 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 80 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 32 + db 1 + db 7 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 112 + dd 0 + dd 0 + dd 4 + dd 0 + db 0 + db 2 + db 15 + db -95 + db 0 + db 0 + db 1 + db 0 + dd 17 + dd 0 + dd 0 + dd 4 + dd 0 + db 16 + db 2 + db 15 + db -95 + db 0 + db 0 + db 1 + db 0 + dd 81 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 2 + db 15 + db -95 + db 0 + db 0 + db 1 + db 0 + dd 113 + dd 0 + dd 0 + dd 4 + dd 0 + db 0 + db 2 + db 15 + db -87 + db 0 + db 0 + db 1 + db 0 + dd 18 + dd 0 + dd 0 + dd 4 + dd 0 + db 16 + db 2 + db 15 + db -87 + db 0 + db 0 + db 1 + db 0 + dd 82 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 2 + db 15 + db -87 + db 0 + db 0 + db 1 + db 0 + dd 114 + dd 0 + dd 0 + align 32 + ;.type xchg_insn,@object + ;.size xchg_insn,392 +xchg_insn: + dd 0 + dd 0 + db 0 + db 1 + db -122 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4387 + dd 16417 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -122 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16417 + dd 4387 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -112 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 75 + dd 20545 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -112 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 20545 + dd 75 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -121 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 16449 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -121 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4419 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -112 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 107 + dd 20577 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -112 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 20577 + dd 107 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -121 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 16481 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -121 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4451 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -112 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 139 + dd 20609 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -112 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 20609 + dd 139 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -121 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 16513 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -121 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4483 + dd 0 + align 32 + ;.type in_insn,@object + ;.size in_insn,168 +in_insn: + dd 0 + dd 0 + db 0 + db 1 + db -28 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 43 + dd 8480 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -27 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 75 + dd 8480 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -27 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 107 + dd 8480 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -20 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 43 + dd 77 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -19 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 75 + dd 77 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -19 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 107 + dd 77 + dd 0 + align 32 + ;.type out_insn,@object + ;.size out_insn,168 +out_insn: + dd 0 + dd 0 + db 0 + db 1 + db -26 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 8480 + dd 43 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -25 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 8480 + dd 75 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -25 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 8480 + dd 107 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -18 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 77 + dd 43 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -17 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 77 + dd 75 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -17 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 77 + dd 107 + dd 0 + align 32 + ;.type lea_insn,@object + ;.size lea_insn,84 +lea_insn: + dd 0 + dd 0 + db 16 + db 1 + db -115 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4418 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -115 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4450 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -115 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4482 + dd 0 + align 32 + ;.type ldes_insn,@object + ;.size ldes_insn,56 +ldes_insn: + dd 33554432 + dd 16 + db 16 + db 1 + db 0 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4098 + dd 0 + dd 33554436 + dd 16 + db 32 + db 1 + db 0 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4098 + dd 0 + align 32 + ;.type lfgss_insn,@object + ;.size lfgss_insn,56 +lfgss_insn: + dd 4 + dd 4 + db 16 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4098 + dd 0 + dd 4 + dd 4 + db 32 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4098 + dd 0 + align 32 + ;.type arith_insn,@object + ;.size arith_insn,644 +arith_insn: + dd 0 + dd 16 + db 0 + db 1 + db 4 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 43 + dd 8480 + dd 0 + dd 0 + dd 16 + db 16 + db 1 + db 5 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 75 + dd 8512 + dd 0 + dd 4 + dd 16 + db 32 + db 1 + db 5 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 107 + dd 8544 + dd 0 + dd 16779264 + dd 16 + db 64 + db 1 + db 5 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 139 + dd 8544 + dd 0 + dd 0 + dd 34 + db 0 + db 1 + db -128 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4131 + dd 8480 + dd 0 + dd 0 + dd 34 + db 0 + db 1 + db -128 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4387 + dd 8224 + dd 0 + dd 0 + dd 34 + db 16 + db 1 + db -125 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4163 + dd 12320 + dd 0 + dd 0 + dd 34 + db 16 + db 1 + db -127 + db -125 + db 0 + db 0 + db 2 + db 0 + dd 4163 + dd 139584 + dd 0 + dd 0 + dd 34 + db 16 + db 1 + db -127 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 8256 + dd 0 + dd 4 + dd 34 + db 32 + db 1 + db -125 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4195 + dd 12320 + dd 0 + dd 4 + dd 34 + db 32 + db 1 + db -127 + db -125 + db 0 + db 0 + db 2 + db 0 + dd 4195 + dd 139616 + dd 0 + dd 4 + dd 34 + db 32 + db 1 + db -127 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 8288 + dd 0 + dd 16779264 + dd 34 + db 64 + db 1 + db -125 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4227 + dd 12320 + dd 0 + dd 16779264 + dd 34 + db 64 + db 1 + db -127 + db -125 + db 0 + db 0 + db 2 + db 0 + dd 4227 + dd 139616 + dd 0 + dd 16779264 + dd 34 + db 64 + db 1 + db -127 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 8288 + dd 0 + dd 0 + dd 16 + db 0 + db 1 + db 0 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4387 + dd 16417 + dd 0 + dd 0 + dd 16 + db 16 + db 1 + db 1 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 16449 + dd 0 + dd 4 + dd 16 + db 32 + db 1 + db 1 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 16481 + dd 0 + dd 16779264 + dd 16 + db 64 + db 1 + db 1 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 16513 + dd 0 + dd 0 + dd 16 + db 0 + db 1 + db 2 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16417 + dd 4387 + dd 0 + dd 0 + dd 16 + db 16 + db 1 + db 3 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4419 + dd 0 + dd 4 + dd 16 + db 32 + db 1 + db 3 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4451 + dd 0 + dd 16779264 + dd 16 + db 64 + db 1 + db 3 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4483 + dd 0 + align 32 + ;.type incdec_insn,@object + ;.size incdec_insn,168 +incdec_insn: + dd 0 + dd 34 + db 0 + db 1 + db -2 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4131 + dd 0 + dd 0 + dd 33554432 + dd 16 + db 16 + db 1 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 20545 + dd 0 + dd 0 + dd 0 + dd 34 + db 16 + db 1 + db -1 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4163 + dd 0 + dd 0 + dd 33554436 + dd 16 + db 32 + db 1 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 20577 + dd 0 + dd 0 + dd 4 + dd 34 + db 32 + db 1 + db -1 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4195 + dd 0 + dd 0 + dd 16779264 + dd 34 + db 64 + db 1 + db -1 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4227 + dd 0 + dd 0 + align 32 + ;.type f6_insn,@object + ;.size f6_insn,112 +f6_insn: + dd 0 + dd 32 + db 0 + db 1 + db -10 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4131 + dd 0 + dd 0 + dd 0 + dd 32 + db 16 + db 1 + db -9 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4163 + dd 0 + dd 0 + dd 4 + dd 32 + db 32 + db 1 + db -9 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4195 + dd 0 + dd 0 + dd 16779264 + dd 32 + db 64 + db 1 + db -9 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4227 + dd 0 + dd 0 + align 32 + ;.type test_insn,@object + ;.size test_insn,560 +test_insn: + dd 0 + dd 0 + db 0 + db 1 + db -88 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 43 + dd 8480 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -87 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 75 + dd 8512 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -87 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 107 + dd 8544 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -87 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 139 + dd 8544 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -10 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4131 + dd 8480 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -10 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4387 + dd 8224 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -9 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4163 + dd 8512 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -9 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 8256 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -9 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4195 + dd 8544 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -9 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 8288 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -9 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4227 + dd 8544 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -9 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 8288 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -124 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4387 + dd 16417 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -123 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 16449 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -123 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 16481 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -123 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 16513 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -124 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16417 + dd 4387 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -123 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4419 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -123 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4451 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -123 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4483 + dd 0 + align 32 + ;.type aadm_insn,@object + ;.size aadm_insn,56 +aadm_insn: + dd 0 + dd 16 + db 0 + db 2 + db -44 + db 10 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 16 + db 0 + db 1 + db -44 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 8480 + dd 0 + dd 0 + align 32 + ;.type imul_insn,@object + ;.size imul_insn,532 +imul_insn: + dd 0 + dd 0 + db 0 + db 1 + db -10 + db 0 + db 0 + db 5 + db 1 + db 0 + dd 4131 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -9 + db 0 + db 0 + db 5 + db 1 + db 0 + dd 4163 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -9 + db 0 + db 0 + db 5 + db 1 + db 0 + dd 4195 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -9 + db 0 + db 0 + db 5 + db 1 + db 0 + dd 4227 + dd 0 + dd 0 + dd 4 + dd 0 + db 16 + db 2 + db 15 + db -81 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4419 + dd 0 + dd 4 + dd 0 + db 32 + db 2 + db 15 + db -81 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4451 + dd 0 + dd 16779264 + dd 0 + db 64 + db 2 + db 15 + db -81 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4483 + dd 0 + dd 1 + dd 0 + db 16 + db 1 + db 107 + db 0 + db 0 + db 0 + db 3 + db 0 + dd 16449 + dd 4419 + dd 12320 + dd 4 + dd 0 + db 32 + db 1 + db 107 + db 0 + db 0 + db 0 + db 3 + db 0 + dd 16481 + dd 4451 + dd 12320 + dd 16779264 + dd 0 + db 64 + db 1 + db 107 + db 0 + db 0 + db 0 + db 3 + db 0 + dd 16513 + dd 4483 + dd 12320 + dd 1 + dd 0 + db 16 + db 1 + db 107 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 28737 + dd 12320 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db 107 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 28769 + dd 12320 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db 107 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 28801 + dd 12320 + dd 0 + dd 1 + dd 0 + db 16 + db 1 + db 105 + db 107 + db 0 + db 0 + db 3 + db 0 + dd 16449 + dd 4419 + dd 143680 + dd 4 + dd 0 + db 32 + db 1 + db 105 + db 107 + db 0 + db 0 + db 3 + db 0 + dd 16481 + dd 4451 + dd 143712 + dd 16779264 + dd 0 + db 64 + db 1 + db 105 + db 107 + db 0 + db 0 + db 3 + db 0 + dd 16513 + dd 4483 + dd 143712 + dd 1 + dd 0 + db 16 + db 1 + db 105 + db 107 + db 0 + db 0 + db 2 + db 0 + dd 28737 + dd 143680 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db 105 + db 107 + db 0 + db 0 + db 2 + db 0 + dd 28769 + dd 143712 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db 105 + db 107 + db 0 + db 0 + db 2 + db 0 + dd 28801 + dd 143712 + dd 0 + align 32 + ;.type shift_insn,@object + ;.size shift_insn,224 +shift_insn: + dd 0 + dd 32 + db 0 + db 1 + db -46 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4131 + dd 44 + dd 0 + dd 0 + dd 32 + db 0 + db 1 + db -64 + db -48 + db 0 + db 0 + db 2 + db 0 + dd 4131 + dd 74016 + dd 0 + dd 0 + dd 32 + db 16 + db 1 + db -45 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4163 + dd 44 + dd 0 + dd 0 + dd 32 + db 16 + db 1 + db -63 + db -47 + db 0 + db 0 + db 2 + db 0 + dd 4163 + dd 74016 + dd 0 + dd 0 + dd 32 + db 32 + db 1 + db -45 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4195 + dd 44 + dd 0 + dd 0 + dd 32 + db 32 + db 1 + db -63 + db -47 + db 0 + db 0 + db 2 + db 0 + dd 4195 + dd 74016 + dd 0 + dd 16779264 + dd 32 + db 64 + db 1 + db -45 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4227 + dd 44 + dd 0 + dd 16779264 + dd 32 + db 64 + db 1 + db -63 + db -47 + db 0 + db 0 + db 2 + db 0 + dd 4227 + dd 74016 + dd 0 + align 32 + ;.type shlrd_insn,@object + ;.size shlrd_insn,168 +shlrd_insn: + dd 4 + dd 4 + db 16 + db 2 + db 15 + db 0 + db 0 + db 0 + db 3 + db 0 + dd 4419 + dd 16449 + dd 8480 + dd 4 + dd 4 + db 16 + db 2 + db 15 + db 1 + db 0 + db 0 + db 3 + db 0 + dd 4419 + dd 16449 + dd 44 + dd 4 + dd 4 + db 32 + db 2 + db 15 + db 0 + db 0 + db 0 + db 3 + db 0 + dd 4451 + dd 16481 + dd 8480 + dd 4 + dd 4 + db 32 + db 2 + db 15 + db 1 + db 0 + db 0 + db 3 + db 0 + dd 4451 + dd 16481 + dd 44 + dd 16779264 + dd 4 + db 64 + db 2 + db 15 + db 0 + db 0 + db 0 + db 3 + db 0 + dd 4483 + dd 16513 + dd 8480 + dd 16779264 + dd 4 + db 64 + db 2 + db 15 + db 1 + db 0 + db 0 + db 3 + db 0 + dd 4483 + dd 16513 + dd 44 + align 32 + ;.type call_insn,@object + ;.size call_insn,560 +call_insn: + dd 0 + dd 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32768 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32832 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32864 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -24 + db -102 + db 0 + db 0 + db 1 + db 0 + dd 229952 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -24 + db -102 + db 0 + db 0 + db 1 + db 0 + dd 229984 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -24 + db -102 + db 0 + db 0 + db 1 + db 0 + dd 229888 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -1 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4163 + dd 0 + dd 0 + dd 33554436 + dd 0 + db 32 + db 1 + db -1 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4195 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4227 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4098 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -1 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4675 + dd 0 + dd 0 + dd 33554436 + dd 0 + db 32 + db 1 + db -1 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4707 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4739 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4610 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -102 + db 0 + db 0 + db 3 + db 1 + db 0 + dd 34368 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -102 + db 0 + db 0 + db 3 + db 1 + db 0 + dd 34400 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -102 + db 0 + db 0 + db 3 + db 1 + db 0 + dd 34304 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -1 + db 0 + db 0 + db 3 + db 1 + db 0 + dd 5698 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -1 + db 0 + db 0 + db 3 + db 1 + db 0 + dd 5730 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 3 + db 1 + db 0 + dd 5634 + dd 0 + dd 0 + align 32 + ;.type jmp_insn,@object + ;.size jmp_insn,588 +jmp_insn: + dd 0 + dd 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32768 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32832 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32864 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -21 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 33792 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -23 + db -22 + db 0 + db 0 + db 1 + db 0 + dd 229952 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -23 + db -22 + db 0 + db 0 + db 1 + db 0 + dd 229984 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -23 + db -22 + db 0 + db 0 + db 1 + db 0 + dd 229888 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -1 + db 0 + db 0 + db 4 + db 1 + db 0 + dd 4163 + dd 0 + dd 0 + dd 33554436 + dd 0 + db 32 + db 1 + db -1 + db 0 + db 0 + db 4 + db 1 + db 0 + dd 4195 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 4 + db 1 + db 0 + dd 4227 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 4 + db 1 + db 0 + dd 4098 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -1 + db 0 + db 0 + db 4 + db 1 + db 0 + dd 4675 + dd 0 + dd 0 + dd 33554436 + dd 0 + db 32 + db 1 + db -1 + db 0 + db 0 + db 4 + db 1 + db 0 + dd 4707 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 4 + db 1 + db 0 + dd 4739 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 4 + db 1 + db 0 + dd 4610 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -22 + db 0 + db 0 + db 3 + db 1 + db 0 + dd 34368 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -22 + db 0 + db 0 + db 3 + db 1 + db 0 + dd 34400 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -22 + db 0 + db 0 + db 3 + db 1 + db 0 + dd 34304 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -1 + db 0 + db 0 + db 5 + db 1 + db 0 + dd 5698 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -1 + db 0 + db 0 + db 5 + db 1 + db 0 + dd 5730 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 5 + db 1 + db 0 + dd 5634 + dd 0 + dd 0 + align 32 + ;.type retnf_insn,@object + ;.size retnf_insn,56 +retnf_insn: + dd 0 + dd 16 + db 0 + db 1 + db 1 + db 0 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 16 + db 0 + db 1 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 8512 + dd 0 + dd 0 + align 4 + ;.type enter_insn,@object + ;.size enter_insn,28 +enter_insn: + dd 1 + dd 0 + db 0 + db 1 + db -56 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4416 + dd 8480 + dd 0 + align 32 + ;.type jcc_insn,@object + ;.size jcc_insn,196 +jcc_insn: + dd 0 + dd 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32768 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32832 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32864 + dd 0 + dd 0 + dd 0 + dd 16 + db 0 + db 1 + db 112 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 33792 + dd 0 + dd 0 + dd 4 + dd 4 + db 16 + db 2 + db 15 + db -128 + db 0 + db 0 + db 1 + db 0 + dd 33344 + dd 0 + dd 0 + dd 4 + dd 4 + db 32 + db 2 + db 15 + db -128 + db 0 + db 0 + db 1 + db 0 + dd 33376 + dd 0 + dd 0 + dd 4 + dd 4 + db 0 + db 2 + db 15 + db -128 + db 0 + db 0 + db 1 + db 0 + dd 33280 + dd 0 + dd 0 + align 32 + ;.type jcxz_insn,@object + ;.size jcxz_insn,56 +jcxz_insn: + dd 0 + dd 256 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32768 + dd 0 + dd 0 + dd 0 + dd 256 + db 0 + db 1 + db -29 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 33792 + dd 0 + dd 0 + align 32 + ;.type loop_insn,@object + ;.size loop_insn,224 +loop_insn: + dd 0 + dd 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32768 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 32768 + dd 36940 + dd 0 + dd 4 + dd 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 32768 + dd 36972 + dd 0 + dd 16779264 + dd 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 32768 + dd 37004 + dd 0 + dd 33554432 + dd 16 + db 0 + db 1 + db -32 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 33792 + dd 0 + dd 0 + dd 0 + dd 16 + db 0 + db 1 + db -32 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 33792 + dd 36940 + dd 0 + dd 4 + dd 16 + db 0 + db 1 + db -32 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 33792 + dd 36972 + dd 0 + dd 16779264 + dd 16 + db 0 + db 1 + db -32 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 33792 + dd 37004 + dd 0 + align 4 + ;.type setcc_insn,@object + ;.size setcc_insn,28 +setcc_insn: + dd 4 + dd 4 + db 0 + db 2 + db 15 + db -112 + db 0 + db 2 + db 1 + db 0 + dd 4387 + dd 0 + dd 0 + align 32 + ;.type bittest_insn,@object + ;.size bittest_insn,168 +bittest_insn: + dd 4 + dd 4 + db 16 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 16449 + dd 0 + dd 4 + dd 4 + db 32 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 16481 + dd 0 + dd 16779264 + dd 4 + db 64 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 16513 + dd 0 + dd 4 + dd 34 + db 16 + db 2 + db 15 + db -70 + db 0 + db 0 + db 2 + db 0 + dd 4163 + dd 8224 + dd 0 + dd 4 + dd 34 + db 32 + db 2 + db 15 + db -70 + db 0 + db 0 + db 2 + db 0 + dd 4195 + dd 8224 + dd 0 + dd 16779264 + dd 34 + db 64 + db 2 + db 15 + db -70 + db 0 + db 0 + db 2 + db 0 + dd 4227 + dd 8224 + dd 0 + align 32 + ;.type bsfr_insn,@object + ;.size bsfr_insn,84 +bsfr_insn: + dd 2 + dd 4 + db 16 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4419 + dd 0 + dd 4 + dd 4 + db 32 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4451 + dd 0 + dd 16779264 + dd 4 + db 64 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4483 + dd 0 + align 4 + ;.type int_insn,@object + ;.size int_insn,28 +int_insn: + dd 0 + dd 0 + db 0 + db 1 + db -51 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 8480 + dd 0 + dd 0 + align 32 + ;.type bound_insn,@object + ;.size bound_insn,56 +bound_insn: + dd 1 + dd 0 + db 16 + db 1 + db 98 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4418 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db 98 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4450 + dd 0 + align 4 + ;.type arpl_insn,@object + ;.size arpl_insn,28 +arpl_insn: + dd 1048578 + dd 0 + db 0 + db 1 + db 99 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 16449 + dd 0 + align 32 + ;.type str_insn,@object + ;.size str_insn,112 +str_insn: + dd 2048 + dd 0 + db 16 + db 2 + db 15 + db 0 + db 0 + db 1 + db 1 + db 0 + dd 4161 + dd 0 + dd 0 + dd 2048 + dd 0 + db 32 + db 2 + db 15 + db 0 + db 0 + db 1 + db 1 + db 0 + dd 4193 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 64 + db 2 + db 15 + db 0 + db 0 + db 1 + db 1 + db 0 + dd 4225 + dd 0 + dd 0 + dd 2 + dd 36 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4419 + dd 0 + dd 0 + align 4 + ;.type prot286_insn,@object + ;.size prot286_insn,28 +prot286_insn: + dd 2 + dd 36 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4419 + dd 0 + dd 0 + align 32 + ;.type sldtmsw_insn,@object + ;.size sldtmsw_insn,168 +sldtmsw_insn: + dd 2 + dd 36 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4418 + dd 0 + dd 0 + dd 4 + dd 36 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4450 + dd 0 + dd 0 + dd 16779264 + dd 36 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4482 + dd 0 + dd 0 + dd 2 + dd 36 + db 16 + db 2 + db 15 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4161 + dd 0 + dd 0 + dd 4 + dd 36 + db 32 + db 2 + db 15 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4193 + dd 0 + dd 0 + dd 16779264 + dd 36 + db 64 + db 2 + db 15 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4225 + dd 0 + dd 0 + align 32 + ;.type fldstp_insn,@object + ;.size fldstp_insn,112 +fldstp_insn: + dd 4096 + dd 34 + db 0 + db 1 + db -39 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4194 + dd 0 + dd 0 + dd 4096 + dd 34 + db 0 + db 1 + db -35 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4226 + dd 0 + dd 0 + dd 4096 + dd 42 + db 0 + db 1 + db -37 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4258 + dd 0 + dd 0 + dd 4096 + dd 4 + db 0 + db 2 + db -39 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 24737 + dd 0 + dd 0 + align 32 + ;.type fildstp_insn,@object + ;.size fildstp_insn,84 +fildstp_insn: + dd 4096 + dd 32 + db 0 + db 1 + db -33 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4162 + dd 0 + dd 0 + dd 4096 + dd 32 + db 0 + db 1 + db -37 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4194 + dd 0 + dd 0 + dd 4096 + dd 34 + db 0 + db 1 + db -33 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4226 + dd 0 + dd 0 + align 4 + ;.type fbldstp_insn,@object + ;.size fbldstp_insn,28 +fbldstp_insn: + dd 4096 + dd 32 + db 0 + db 1 + db -33 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4514 + dd 0 + dd 0 + align 32 + ;.type fst_insn,@object + ;.size fst_insn,84 +fst_insn: + dd 4096 + dd 0 + db 0 + db 1 + db -39 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4194 + dd 0 + dd 0 + dd 4096 + dd 0 + db 0 + db 1 + db -35 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4226 + dd 0 + dd 0 + dd 4096 + dd 0 + db 0 + db 2 + db -35 + db -48 + db 0 + db 0 + db 1 + db 0 + dd 24737 + dd 0 + dd 0 + align 32 + ;.type fxch_insn,@object + ;.size fxch_insn,112 +fxch_insn: + dd 4096 + dd 0 + db 0 + db 2 + db -39 + db -56 + db 0 + db 0 + db 1 + db 0 + dd 24737 + dd 0 + dd 0 + dd 4096 + dd 0 + db 0 + db 2 + db -39 + db -56 + db 0 + db 0 + db 2 + db 0 + dd 170 + dd 24737 + dd 0 + dd 4096 + dd 0 + db 0 + db 2 + db -39 + db -56 + db 0 + db 0 + db 2 + db 0 + dd 24737 + dd 170 + dd 0 + dd 4096 + dd 0 + db 0 + db 2 + db -39 + db -55 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + align 32 + ;.type fcom_insn,@object + ;.size fcom_insn,112 +fcom_insn: + dd 4096 + dd 34 + db 0 + db 1 + db -40 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4194 + dd 0 + dd 0 + dd 4096 + dd 34 + db 0 + db 1 + db -36 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4226 + dd 0 + dd 0 + dd 4096 + dd 4 + db 0 + db 2 + db -40 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 24737 + dd 0 + dd 0 + dd 4096 + dd 4 + db 0 + db 2 + db -40 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 170 + dd 24737 + dd 0 + align 32 + ;.type fcom2_insn,@object + ;.size fcom2_insn,56 +fcom2_insn: + dd 4098 + dd 20 + db 0 + db 2 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 24737 + dd 0 + dd 0 + dd 4098 + dd 20 + db 0 + db 2 + db 0 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 170 + dd 24737 + dd 0 + align 32 + ;.type farith_insn,@object + ;.size farith_insn,168 +farith_insn: + dd 4096 + dd 42 + db 0 + db 1 + db -40 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4194 + dd 0 + dd 0 + dd 4096 + dd 42 + db 0 + db 1 + db -36 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4226 + dd 0 + dd 0 + dd 4096 + dd 6 + db 0 + db 2 + db -40 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 24737 + dd 0 + dd 0 + dd 4096 + dd 6 + db 0 + db 2 + db -40 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 170 + dd 24737 + dd 0 + dd 4096 + dd 4 + db 0 + db 2 + db -36 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 26785 + dd 0 + dd 0 + dd 4096 + dd 4 + db 0 + db 2 + db -36 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 24737 + dd 170 + dd 0 + align 32 + ;.type farithp_insn,@object + ;.size farithp_insn,84 +farithp_insn: + dd 4096 + dd 4 + db 0 + db 2 + db -34 + db 1 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + dd 4096 + dd 4 + db 0 + db 2 + db -34 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 24737 + dd 0 + dd 0 + dd 4096 + dd 4 + db 0 + db 2 + db -34 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 24737 + dd 170 + dd 0 + align 32 + ;.type fiarith_insn,@object + ;.size fiarith_insn,56 +fiarith_insn: + dd 4096 + dd 48 + db 0 + db 1 + db 4 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4162 + dd 0 + dd 0 + dd 4096 + dd 48 + db 0 + db 1 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4194 + dd 0 + dd 0 + align 4 + ;.type fldnstcw_insn,@object + ;.size fldnstcw_insn,28 +fldnstcw_insn: + dd 4096 + dd 32 + db 0 + db 1 + db -39 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4418 + dd 0 + dd 0 + align 4 + ;.type fstcw_insn,@object + ;.size fstcw_insn,28 +fstcw_insn: + dd 4096 + dd 0 + db 0 + db 2 + db -101 + db -39 + db 0 + db 7 + db 1 + db 0 + dd 4418 + dd 0 + dd 0 + align 32 + ;.type fnstsw_insn,@object + ;.size fnstsw_insn,56 +fnstsw_insn: + dd 4096 + dd 0 + db 0 + db 1 + db -35 + db 0 + db 0 + db 7 + db 1 + db 0 + dd 4418 + dd 0 + dd 0 + dd 4096 + dd 0 + db 0 + db 2 + db -33 + db -32 + db 0 + db 0 + db 1 + db 0 + dd 75 + dd 0 + dd 0 + align 32 + ;.type fstsw_insn,@object + ;.size fstsw_insn,56 +fstsw_insn: + dd 4096 + dd 0 + db 0 + db 2 + db -101 + db -35 + db 0 + db 7 + db 1 + db 0 + dd 4418 + dd 0 + dd 0 + dd 4096 + dd 0 + db 0 + db 3 + db -101 + db -33 + db -32 + db 0 + db 1 + db 0 + dd 75 + dd 0 + dd 0 + align 4 + ;.type ffree_insn,@object + ;.size ffree_insn,28 +ffree_insn: + dd 4096 + dd 16 + db 0 + db 2 + db 0 + db -64 + db 0 + db 0 + db 1 + db 0 + dd 24737 + dd 0 + dd 0 + align 32 + ;.type bswap_insn,@object + ;.size bswap_insn,56 +bswap_insn: + dd 8 + dd 0 + db 32 + db 2 + db 15 + db -56 + db 0 + db 0 + db 1 + db 0 + dd 24673 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 64 + db 2 + db 15 + db -56 + db 0 + db 0 + db 1 + db 0 + dd 24705 + dd 0 + dd 0 + align 32 + ;.type cmpxchgxadd_insn,@object + ;.size cmpxchgxadd_insn,112 +cmpxchgxadd_insn: + dd 8 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4387 + dd 16417 + dd 0 + dd 8 + dd 4 + db 16 + db 2 + db 15 + db 1 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 16449 + dd 0 + dd 8 + dd 4 + db 32 + db 2 + db 15 + db 1 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 16481 + dd 0 + dd 16779264 + dd 4 + db 64 + db 2 + db 15 + db 1 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 16513 + dd 0 + align 4 + ;.type cmpxchg8b_insn,@object + ;.size cmpxchg8b_insn,28 +cmpxchg8b_insn: + dd 16 + dd 0 + db 0 + db 2 + db 15 + db -57 + db 0 + db 1 + db 1 + db 0 + dd 4482 + dd 0 + dd 0 + align 32 + ;.type cmovcc_insn,@object + ;.size cmovcc_insn,84 +cmovcc_insn: + dd 32 + dd 4 + db 16 + db 2 + db 15 + db 64 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4419 + dd 0 + dd 32 + dd 4 + db 32 + db 2 + db 15 + db 64 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4451 + dd 0 + dd 16779264 + dd 4 + db 64 + db 2 + db 15 + db 64 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4483 + dd 0 + align 4 + ;.type fcmovcc_insn,@object + ;.size fcmovcc_insn,28 +fcmovcc_insn: + dd 4128 + dd 20 + db 0 + db 2 + db 0 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 170 + dd 24737 + dd 0 + align 32 + ;.type movnti_insn,@object + ;.size movnti_insn,56 +movnti_insn: + dd 128 + dd 0 + db 0 + db 2 + db 15 + db -61 + db 0 + db 0 + db 2 + db 0 + dd 4450 + dd 16481 + dd 0 + dd 16779264 + dd 0 + db 64 + db 2 + db 15 + db -61 + db 0 + db 0 + db 2 + db 0 + dd 4482 + dd 16513 + dd 0 + align 4 + ;.type clflush_insn,@object + ;.size clflush_insn,28 +clflush_insn: + dd 64 + dd 0 + db 0 + db 2 + db 15 + db -82 + db 0 + db 7 + db 1 + db 0 + dd 4386 + dd 0 + dd 0 + align 32 + ;.type movd_insn,@object + ;.size movd_insn,224 +movd_insn: + dd 8192 + dd 0 + db 0 + db 2 + db 15 + db 110 + db 0 + db 0 + db 2 + db 0 + dd 16516 + dd 4451 + dd 0 + dd 16787456 + dd 0 + db 64 + db 2 + db 15 + db 110 + db 0 + db 0 + db 2 + db 0 + dd 16516 + dd 4483 + dd 0 + dd 8192 + dd 0 + db 0 + db 2 + db 15 + db 126 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 16516 + dd 0 + dd 16787456 + dd 0 + db 64 + db 2 + db 15 + db 126 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 16516 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db 102 + db 15 + db 110 + db 0 + db 2 + db 0 + dd 16580 + dd 4451 + dd 0 + dd 16812032 + dd 0 + db 64 + db 3 + db 102 + db 15 + db 110 + db 0 + db 2 + db 0 + dd 16580 + dd 4483 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db 102 + db 15 + db 126 + db 0 + db 2 + db 0 + dd 4451 + dd 16580 + dd 0 + dd 16812032 + dd 0 + db 64 + db 3 + db 102 + db 15 + db 126 + db 0 + db 2 + db 0 + dd 4483 + dd 16580 + dd 0 + align 32 + ;.type movq_insn,@object + ;.size movq_insn,140 +movq_insn: + dd 8192 + dd 0 + db 0 + db 2 + db 15 + db 111 + db 0 + db 0 + db 2 + db 0 + dd 16516 + dd 4485 + dd 0 + dd 8192 + dd 0 + db 0 + db 2 + db 15 + db 127 + db 0 + db 0 + db 2 + db 0 + dd 4485 + dd 16516 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db -13 + db 15 + db 126 + db 0 + db 2 + db 0 + dd 16580 + dd 4292 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db -13 + db 15 + db 126 + db 0 + db 2 + db 0 + dd 16580 + dd 4485 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db 102 + db 15 + db -42 + db 0 + db 2 + db 0 + dd 4485 + dd 16580 + dd 0 + align 32 + ;.type mmxsse2_insn,@object + ;.size mmxsse2_insn,56 +mmxsse2_insn: + dd 8192 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16516 + dd 4485 + dd 0 + dd 32768 + dd 1 + db 0 + db 3 + db 102 + db 15 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4549 + dd 0 + align 32 + ;.type pshift_insn,@object + ;.size pshift_insn,112 +pshift_insn: + dd 8192 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16516 + dd 4485 + dd 0 + dd 8192 + dd 38 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4228 + dd 8480 + dd 0 + dd 32768 + dd 1 + db 0 + db 3 + db 102 + db 15 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4549 + dd 0 + dd 32768 + dd 35 + db 0 + db 3 + db 102 + db 15 + db 0 + db 0 + db 2 + db 0 + dd 4292 + dd 8480 + dd 0 + align 4 + ;.type sseps_insn,@object + ;.size sseps_insn,28 +sseps_insn: + dd 16384 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4549 + dd 0 + align 4 + ;.type ssess_insn,@object + ;.size ssess_insn,28 +ssess_insn: + dd 16384 + dd 17 + db 0 + db 3 + db 0 + db 15 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4549 + dd 0 + align 4 + ;.type ssecmpps_insn,@object + ;.size ssecmpps_insn,28 +ssecmpps_insn: + dd 16384 + dd 128 + db 0 + db 2 + db 15 + db -62 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4549 + dd 0 + align 4 + ;.type ssecmpss_insn,@object + ;.size ssecmpss_insn,28 +ssecmpss_insn: + dd 16384 + dd 144 + db 0 + db 3 + db 0 + db 15 + db -62 + db 0 + db 2 + db 0 + dd 16580 + dd 4549 + dd 0 + align 4 + ;.type ssepsimm_insn,@object + ;.size ssepsimm_insn,28 +ssepsimm_insn: + dd 16384 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 3 + db 0 + dd 16580 + dd 4549 + dd 8480 + align 4 + ;.type ssessimm_insn,@object + ;.size ssessimm_insn,28 +ssessimm_insn: + dd 16384 + dd 17 + db 0 + db 3 + db 0 + db 15 + db 0 + db 0 + db 3 + db 0 + dd 16580 + dd 4549 + dd 8480 + align 4 + ;.type ldstmxcsr_insn,@object + ;.size ldstmxcsr_insn,28 +ldstmxcsr_insn: + dd 16384 + dd 32 + db 0 + db 2 + db 15 + db -82 + db 0 + db 0 + db 1 + db 0 + dd 4450 + dd 0 + dd 0 + align 4 + ;.type maskmovq_insn,@object + ;.size maskmovq_insn,28 +maskmovq_insn: + dd 8256 + dd 0 + db 0 + db 2 + db 15 + db -9 + db 0 + db 0 + db 2 + db 0 + dd 16516 + dd 4228 + dd 0 + align 32 + ;.type movaups_insn,@object + ;.size movaups_insn,56 +movaups_insn: + dd 16384 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4549 + dd 0 + dd 16384 + dd 4 + db 0 + db 2 + db 15 + db 1 + db 0 + db 0 + db 2 + db 0 + dd 4549 + dd 16580 + dd 0 + align 4 + ;.type movhllhps_insn,@object + ;.size movhllhps_insn,28 +movhllhps_insn: + dd 16384 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4292 + dd 0 + align 32 + ;.type movhlps_insn,@object + ;.size movhlps_insn,56 +movhlps_insn: + dd 16384 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4482 + dd 0 + dd 16384 + dd 4 + db 0 + db 2 + db 15 + db 1 + db 0 + db 0 + db 2 + db 0 + dd 4482 + dd 16580 + dd 0 + align 4 + ;.type movmskps_insn,@object + ;.size movmskps_insn,28 +movmskps_insn: + dd 16384 + dd 0 + db 0 + db 2 + db 15 + db 80 + db 0 + db 0 + db 2 + db 0 + dd 4193 + dd 16580 + dd 0 + align 4 + ;.type movntps_insn,@object + ;.size movntps_insn,28 +movntps_insn: + dd 16384 + dd 0 + db 0 + db 2 + db 15 + db 43 + db 0 + db 0 + db 2 + db 0 + dd 4546 + dd 16577 + dd 0 + align 4 + ;.type movntq_insn,@object + ;.size movntq_insn,28 +movntq_insn: + dd 16384 + dd 0 + db 0 + db 2 + db 15 + db -25 + db 0 + db 0 + db 2 + db 0 + dd 4482 + dd 16580 + dd 0 + align 32 + ;.type movss_insn,@object + ;.size movss_insn,84 +movss_insn: + dd 16384 + dd 0 + db 0 + db 3 + db -13 + db 15 + db 16 + db 0 + db 2 + db 0 + dd 16580 + dd 4292 + dd 0 + dd 16384 + dd 0 + db 0 + db 3 + db -13 + db 15 + db 16 + db 0 + db 2 + db 0 + dd 16580 + dd 4482 + dd 0 + dd 16384 + dd 0 + db 0 + db 3 + db -13 + db 15 + db 17 + db 0 + db 2 + db 0 + dd 4482 + dd 16580 + dd 0 + align 32 + ;.type pextrw_insn,@object + ;.size pextrw_insn,56 +pextrw_insn: + dd 8256 + dd 0 + db 0 + db 2 + db 15 + db -59 + db 0 + db 0 + db 3 + db 0 + dd 4193 + dd 16516 + dd 8480 + dd 32768 + dd 0 + db 0 + db 3 + db 102 + db 15 + db -59 + db 0 + db 3 + db 0 + dd 4193 + dd 16580 + dd 8480 + align 32 + ;.type pinsrw_insn,@object + ;.size pinsrw_insn,112 +pinsrw_insn: + dd 8256 + dd 0 + db 0 + db 2 + db 15 + db -60 + db 0 + db 0 + db 3 + db 0 + dd 16516 + dd 4193 + dd 8480 + dd 8256 + dd 0 + db 0 + db 2 + db 15 + db -60 + db 0 + db 0 + db 3 + db 0 + dd 16516 + dd 4419 + dd 8480 + dd 32768 + dd 0 + db 0 + db 3 + db 102 + db 15 + db -60 + db 0 + db 3 + db 0 + dd 16580 + dd 4193 + dd 8480 + dd 32768 + dd 0 + db 0 + db 3 + db 102 + db 15 + db -60 + db 0 + db 3 + db 0 + dd 16516 + dd 4419 + dd 8480 + align 32 + ;.type pmovmskb_insn,@object + ;.size pmovmskb_insn,56 +pmovmskb_insn: + dd 8256 + dd 0 + db 0 + db 2 + db 15 + db -41 + db 0 + db 0 + db 2 + db 0 + dd 4193 + dd 16516 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db 102 + db 15 + db -41 + db 0 + db 2 + db 0 + dd 4193 + dd 16580 + dd 0 + align 4 + ;.type pshufw_insn,@object + ;.size pshufw_insn,28 +pshufw_insn: + dd 8256 + dd 0 + db 0 + db 2 + db 15 + db 112 + db 0 + db 0 + db 3 + db 0 + dd 16516 + dd 4485 + dd 8480 + align 32 + ;.type cmpsd_insn,@object + ;.size cmpsd_insn,56 +cmpsd_insn: + dd 0 + dd 0 + db 32 + db 1 + db -89 + db 0 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db -14 + db 15 + db -62 + db 0 + db 3 + db 0 + dd 16580 + dd 4549 + dd 8480 + align 32 + ;.type movaupd_insn,@object + ;.size movaupd_insn,56 +movaupd_insn: + dd 32768 + dd 1 + db 0 + db 3 + db 102 + db 15 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4549 + dd 0 + dd 32768 + dd 1 + db 0 + db 3 + db 102 + db 15 + db 1 + db 0 + db 2 + db 0 + dd 4549 + dd 16580 + dd 0 + align 32 + ;.type movhlpd_insn,@object + ;.size movhlpd_insn,56 +movhlpd_insn: + dd 32768 + dd 1 + db 0 + db 3 + db 102 + db 15 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4482 + dd 0 + dd 32768 + dd 1 + db 0 + db 3 + db 102 + db 15 + db 1 + db 0 + db 2 + db 0 + dd 4482 + dd 16580 + dd 0 + align 4 + ;.type movmskpd_insn,@object + ;.size movmskpd_insn,28 +movmskpd_insn: + dd 32768 + dd 0 + db 0 + db 3 + db 102 + db 15 + db 80 + db 0 + db 2 + db 0 + dd 4193 + dd 16580 + dd 0 + align 4 + ;.type movntpddq_insn,@object + ;.size movntpddq_insn,28 +movntpddq_insn: + dd 32768 + dd 1 + db 0 + db 3 + db 102 + db 15 + db 0 + db 0 + db 2 + db 0 + dd 4546 + dd 16580 + dd 0 + align 32 + ;.type movsd_insn,@object + ;.size movsd_insn,112 +movsd_insn: + dd 0 + dd 0 + db 32 + db 1 + db -91 + db 0 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db -14 + db 15 + db 16 + db 0 + db 2 + db 0 + dd 16580 + dd 4292 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db -14 + db 15 + db 16 + db 0 + db 2 + db 0 + dd 16580 + dd 4482 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db -14 + db 15 + db 17 + db 0 + db 2 + db 0 + dd 4482 + dd 16580 + dd 0 + align 4 + ;.type maskmovdqu_insn,@object + ;.size maskmovdqu_insn,28 +maskmovdqu_insn: + dd 32768 + dd 0 + db 0 + db 3 + db 102 + db 15 + db -9 + db 0 + db 2 + db 0 + dd 16580 + dd 4292 + dd 0 + align 32 + ;.type movdqau_insn,@object + ;.size movdqau_insn,56 +movdqau_insn: + dd 32768 + dd 16 + db 0 + db 3 + db 0 + db 15 + db 111 + db 0 + db 2 + db 0 + dd 16580 + dd 4549 + dd 0 + dd 32768 + dd 16 + db 0 + db 3 + db 0 + db 15 + db 127 + db 0 + db 2 + db 0 + dd 4549 + dd 16580 + dd 0 + align 4 + ;.type movdq2q_insn,@object + ;.size movdq2q_insn,28 +movdq2q_insn: + dd 32768 + dd 0 + db 0 + db 3 + db -14 + db 15 + db -42 + db 0 + db 2 + db 0 + dd 16516 + dd 4292 + dd 0 + align 4 + ;.type movq2dq_insn,@object + ;.size movq2dq_insn,28 +movq2dq_insn: + dd 32768 + dd 0 + db 0 + db 3 + db -13 + db 15 + db -42 + db 0 + db 2 + db 0 + dd 16580 + dd 4228 + dd 0 + align 4 + ;.type pslrldq_insn,@object + ;.size pslrldq_insn,28 +pslrldq_insn: + dd 32768 + dd 32 + db 0 + db 3 + db 102 + db 15 + db 115 + db 0 + db 2 + db 0 + dd 4292 + dd 8480 + dd 0 + align 4 + ;.type now3d_insn,@object + ;.size now3d_insn,28 +now3d_insn: + dd 65536 + dd 128 + db 0 + db 2 + db 15 + db 15 + db 0 + db 0 + db 2 + db 0 + dd 16516 + dd 4485 + dd 0 + align 4 + ;.type cyrixmmx_insn,@object + ;.size cyrixmmx_insn,28 +cyrixmmx_insn: + dd 139264 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16516 + dd 4485 + dd 0 + align 4 + ;.type pmachriw_insn,@object + ;.size pmachriw_insn,28 +pmachriw_insn: + dd 139264 + dd 0 + db 0 + db 2 + db 15 + db 94 + db 0 + db 0 + db 2 + db 0 + dd 16516 + dd 4482 + dd 0 + align 4 + ;.type rsdc_insn,@object + ;.size rsdc_insn,28 +rsdc_insn: + dd 655368 + dd 0 + db 0 + db 2 + db 15 + db 121 + db 0 + db 0 + db 2 + db 0 + dd 16454 + dd 4514 + dd 0 + align 4 + ;.type cyrixsmm_insn,@object + ;.size cyrixsmm_insn,28 +cyrixsmm_insn: + dd 655368 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4514 + dd 0 + dd 0 + align 4 + ;.type svdc_insn,@object + ;.size svdc_insn,28 +svdc_insn: + dd 655368 + dd 0 + db 0 + db 2 + db 15 + db 120 + db 0 + db 0 + db 2 + db 0 + dd 4514 + dd 16454 + dd 0 + align 32 + ;.type ibts_insn,@object + ;.size ibts_insn,56 +ibts_insn: + dd 6291460 + dd 0 + db 16 + db 2 + db 15 + db -89 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 16449 + dd 0 + dd 6291460 + dd 0 + db 32 + db 2 + db 15 + db -89 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 16481 + dd 0 + align 32 + ;.type umov_insn,@object + ;.size umov_insn,168 +umov_insn: + dd 2097156 + dd 0 + db 0 + db 2 + db 15 + db 16 + db 0 + db 0 + db 2 + db 0 + dd 4387 + dd 16417 + dd 0 + dd 2097156 + dd 0 + db 16 + db 2 + db 15 + db 17 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 16449 + dd 0 + dd 2097156 + dd 0 + db 32 + db 2 + db 15 + db 17 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 16481 + dd 0 + dd 2097156 + dd 0 + db 0 + db 2 + db 15 + db 18 + db 0 + db 0 + db 2 + db 0 + dd 16417 + dd 4387 + dd 0 + dd 2097156 + dd 0 + db 16 + db 2 + db 15 + db 19 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4419 + dd 0 + dd 2097156 + dd 0 + db 32 + db 2 + db 15 + db 19 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4451 + dd 0 + align 32 + ;.type xbts_insn,@object + ;.size xbts_insn,56 +xbts_insn: + dd 6291460 + dd 0 + db 16 + db 2 + db 15 + db -90 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4418 + dd 0 + dd 6291460 + dd 0 + db 32 + db 2 + db 15 + db -90 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4450 + dd 0 + ;.type size_lookup.0,@object + ;.size size_lookup.0,8 +size_lookup.0: + db 0 + db 8 + db 16 + db 32 + db 64 + db 80 + db -128 + db 0 + section .rodata;.str1.1,"aMS",@progbits,1 +LC0: + db "invalid operand conversion", 0 +LC1: + db "./modules/arch/x86/x86id.re", 0 +LC2: + db "$", 0 + section .text + ;.type x86_new_jmp,@function +x86_new_jmp: + push ebp + mov ebp, esp + push edi + push esi + push ebx + sub esp, 76 + mov edx, DWORD [ebp+8] + mov eax, DWORD [edx+4] + movzx esi, al + mov ebx, DWORD [edx] + shr eax, 8 + mov DWORD [ebp-60], eax + mov edi, DWORD [ebp+32] + mov DWORD [ebp-56], edi + mov eax, DWORD [ebp+16] + mov edi, DWORD [eax] + cmp DWORD [edi+4], 4 + je .L2 + sub esp, 4 + push DWORD LC0 + push DWORD 1543 + push DWORD LC1 + call [DWORD yasm_internal_error_] + add esp, 16 +.L2: + mov edx, DWORD [ebp+20] + mov eax, DWORD [edx+16] + and eax, 3584 + cmp eax, 1536 + jne .L3 + push DWORD [ebp+32] + sub esp, 8 + push DWORD [edi+8] + call yasm_expr_copy + mov DWORD [esp], eax + call yasm_expr_expr + add esp, 12 + push eax + sub esp, 8 + push DWORD [ebp+32] + push DWORD 0 + sub esp, 4 + push DWORD [edi+8] + call yasm_expr_expr + add esp, 8 + push eax + push DWORD 25 + call yasm_expr_new + add esp, 20 + push eax + call yasm_expr_expr + add esp, 8 + push eax + push DWORD 27 + call yasm_expr_new + mov DWORD [ebp-52], eax + add esp, 16 + jmp .L4 +.L3: + mov eax, DWORD [edi+8] + mov DWORD [ebp-52], eax +.L4: + sub esp, 12 + push DWORD [ebp+32] + push DWORD 0 + push DWORD [ebp+28] + push DWORD [ebp+24] + push DWORD LC2 + call yasm_symrec_define_label + mov DWORD [ebp-48], eax + mov BYTE [ebp-32], 0 + add esp, 32 + mov edi, DWORD [ebp+20] + mov eax, DWORD [edi+16] + and eax, 3584 + cmp eax, 1024 + je .L6 + cmp eax, 1024 + jg .L11 + cmp eax, 512 + je .L7 + jmp .L9 +.L11: + cmp eax, 1536 + je .L8 + jmp .L9 +.L6: + mov DWORD [ebp-44], 3 + jmp .L5 +.L7: + mov DWORD [ebp-44], 4 + jmp .L5 +.L8: + mov DWORD [ebp-44], 5 + mov al, BYTE [ebx+9] + mov BYTE [ebp-32], al + mov al, BYTE [ebx+10] + mov BYTE [ebp-31], al + mov al, BYTE [ebx+11] + mov BYTE [ebp-30], al + mov al, BYTE [ebx+12] + mov BYTE [ebp-29], al + jmp .L5 +.L9: + mov DWORD [ebp-44], 0 +.L5: + mov edx, DWORD [ebp+20] + mov al, BYTE [edx+8] + mov BYTE [ebp-27], al + cmp BYTE [edx+14], 1 + jbe .L12 + mov edx, DWORD [edx+20] + mov eax, edx + and eax, 61440 + cmp eax, 36864 + jne .L12 + mov eax, edx + and eax, 224 + shr eax, 5 + mov al, BYTE [size_lookup.0+eax] + mov BYTE [ebp-28], al + jmp .L13 +.L12: + mov BYTE [ebp-28], 0 +.L13: + mov eax, DWORD [ebp+20] + test BYTE [eax+5], 1 + je .L14 + mov dl, BYTE [ebp-60] + mov BYTE [ebp-28], dl +.L14: + mov BYTE [ebp-40], 0 + mov BYTE [ebp-36], 0 + test esi, esi + jle .L16 + mov cl, BYTE [yasm_x86_LTX_mode_bits] + mov edi, DWORD [cpu_enabled] + mov DWORD [ebp-76], edi + mov al, BYTE [ebp-27] + mov BYTE [ebp-61], al +.L34: + mov eax, DWORD [ebx] + mov edx, eax + mov edi, DWORD [ebp+8] + or edx, DWORD [edi+8] + test edx, 16777216 + je .L20 + cmp cl, 64 + jne .L17 +.L20: + test edx, 33554432 + je .L21 + cmp cl, 64 + je .L17 +.L21: + and edx, -50331649 + mov eax, DWORD [ebp-76] + and eax, edx + cmp eax, edx + jne .L17 + cmp BYTE [ebx+14], 0 + je .L17 + mov edx, DWORD [ebx+16] + mov eax, edx + and eax, 61440 + cmp eax, 32768 + jne .L17 + mov al, BYTE [ebp-61] + cmp BYTE [ebx+8], al + jne .L17 + mov eax, edx + and eax, 3584 + cmp eax, 512 + je .L29 + cmp eax, 1024 + jne .L17 + mov al, BYTE [ebx+9] + mov BYTE [ebp-40], al + mov dl, BYTE [ebx+10] + mov BYTE [ebp-39], dl + mov al, BYTE [ebx+11] + mov BYTE [ebp-38], al + mov al, BYTE [ebx+12] + mov BYTE [ebp-37], al + test BYTE [ebx+4], 16 + je .L17 + add edx, DWORD [ebp-60] + mov BYTE [ebp-39], dl + jmp .L17 +.L29: + mov al, BYTE [ebx+9] + mov BYTE [ebp-36], al + mov al, BYTE [ebx+10] + mov BYTE [ebp-35], al + mov dl, BYTE [ebx+11] + mov BYTE [ebp-34], dl + mov al, BYTE [ebx+12] + mov BYTE [ebp-33], al + test BYTE [ebx+4], 4 + je .L30 + add edx, DWORD [ebp-60] + mov BYTE [ebp-34], dl +.L30: + mov eax, DWORD [ebx+16] + and eax, 196608 + cmp eax, 196608 + jne .L17 + mov BYTE [ebp-32], 1 + movzx eax, BYTE [ebx+9] + mov al, BYTE [eax+10+ebx] + mov BYTE [ebp-31], al +.L17: + dec esi + add ebx, 28 + test esi, esi + jle .L16 + cmp BYTE [ebp-40], 0 + je .L34 + cmp BYTE [ebp-36], 0 + je .L34 +.L16: + sub esp, 12 + lea eax, [ebp-56] + push eax + call yasm_x86__bc_new_jmp + lea esp, [ebp-12] + pop ebx + pop esi + pop edi + leave + ret +.Lfe1: + ;.size x86_new_jmp,.Lfe1-x86_new_jmp + section .rodata + align 32 + ;.type size_lookup.1,@object + ;.size size_lookup.1,32 +size_lookup.1: + dd 0 + dd 1 + dd 2 + dd 4 + dd 8 + dd 10 + dd 16 + dd 0 + section .rodata;.str1.1 +LC3: + db "invalid operand type", 0 +LC4: + db "invalid target modifier type", 0 +LC6: + db "mismatch in operand sizes", 0 +LC7: + db "operand size not specified", 0 + section .rodata;.str1.32,"aMS",@progbits,1 + align 32 +LC8: + db "unrecognized x86 ext mod index", 0 + align 32 +LC9: + db "unrecognized x86 extended modifier", 0 + align 32 +LC5: + db "invalid combination of opcode and operands", 0 + section .rodata;.str1.1 +LC10: + db "unknown operand action", 0 + section .rodata;.str1.32 + align 32 +LC11: + db "unknown operand postponed action", 0 + section .text +global yasm_x86__parse_insn + ;.type yasm_x86__parse_insn,@function +yasm_x86__parse_insn: + push ebp + mov ebp, esp + push edi + push esi + push ebx + sub esp, 76 + mov edx, DWORD [ebp+8] + mov eax, DWORD [edx+4] + mov ebx, DWORD [edx] + mov ecx, eax + shr ecx, 8 + mov DWORD [ebp-68], ecx + mov DWORD [ebp-72], 0 + and eax, 255 + mov DWORD [ebp-64], eax + jle .L38 +.L166: + mov DWORD [ebp-80], 0 + mov eax, DWORD [ebx] + mov edx, eax + mov ecx, DWORD [ebp+8] + or edx, DWORD [ecx+8] + test edx, 16777216 + je .L42 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L39 +.L42: + test edx, 33554432 + je .L43 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L39 +.L43: + and edx, -50331649 + mov eax, edx + and eax, DWORD [cpu_enabled] + cmp eax, edx + jne .L39 + movzx eax, BYTE [ebx+14] + cmp DWORD [ebp+12], eax + jne .L39 + cmp DWORD [ebp+16], 0 + je .L261 + mov DWORD [ebp-76], 0 + mov eax, DWORD [ebp+16] + mov edi, DWORD [eax] + test edi, edi + je .L48 + movzx eax, BYTE [ebx+14] + cmp DWORD [ebp-76], eax + jge .L48 + cmp DWORD [ebp-80], 0 + jne .L39 +.L164: + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 31 + cmp eax, 21 + ja .L139 + jmp DWORD [.L140+eax*4] + section .rodata + align 4 + align 4 +.L140: + dd .L53 + dd .L57 + dd .L71 + dd .L55 + dd .L75 + dd .L73 + dd .L83 + dd .L85 + dd .L88 + dd .L91 + dd .L94 + dd .L97 + dd .L103 + dd .L109 + dd .L115 + dd .L118 + dd .L121 + dd .L124 + dd .L127 + dd .L130 + dd .L133 + dd .L136 + section .text +.L53: + cmp DWORD [edi+4], 4 + jmp .L273 +.L55: + cmp DWORD [edi+4], 3 + je .L52 +.L57: + cmp DWORD [edi+4], 1 + jne .L138 + mov eax, DWORD [edi+8] + and eax, -16 + cmp eax, 48 + je .L52 + cmp eax, 48 + ja .L69 + cmp eax, 16 + je .L52 + cmp eax, 32 + jmp .L273 +.L69: + cmp eax, 80 + je .L52 + cmp eax, 80 + ja .L70 + cmp eax, 64 + jmp .L273 +.L70: + cmp eax, 96 + jmp .L273 +.L71: + cmp DWORD [edi+4], 3 + jmp .L273 +.L73: + cmp DWORD [edi+4], 3 + je .L52 +.L75: + cmp DWORD [edi+4], 1 + jne .L138 + mov eax, DWORD [edi+8] + and eax, -16 + cmp eax, 112 + je .L52 + cmp eax, 128 + jmp .L273 +.L83: + cmp DWORD [edi+4], 2 + jmp .L273 +.L85: + cmp DWORD [edi+4], 1 + jne .L138 + mov eax, DWORD [edi+8] + and eax, -16 + cmp eax, 144 + jmp .L273 +.L88: + cmp DWORD [edi+4], 1 + jne .L138 + mov eax, DWORD [edi+8] + and eax, -16 + cmp eax, 160 + jmp .L273 +.L91: + cmp DWORD [edi+4], 1 + jne .L138 + mov eax, DWORD [edi+8] + and eax, -16 + cmp eax, 176 + jmp .L273 +.L94: + cmp DWORD [edi+4], 1 + jne .L138 + cmp DWORD [edi+8], 96 + jmp .L273 +.L97: + cmp DWORD [edi+4], 1 + jne .L138 + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 224 + cmp eax, 32 + jne .L100 + cmp DWORD [edi+8], 16 + je .L100 + cmp DWORD [edi+8], 32 + jne .L138 +.L100: + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 224 + cmp eax, 64 + jne .L101 + cmp DWORD [edi+8], 48 + jne .L138 +.L101: + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 224 + cmp eax, 96 + jne .L102 + cmp DWORD [edi+8], 64 + jne .L138 +.L102: + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 224 + cmp eax, 128 + jne .L52 + cmp DWORD [edi+8], 80 + jmp .L273 +.L103: + cmp DWORD [edi+4], 1 + jne .L138 + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 224 + cmp eax, 32 + jne .L106 + cmp DWORD [edi+8], 17 + je .L106 + cmp DWORD [edi+8], 33 + jne .L138 +.L106: + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 224 + cmp eax, 64 + jne .L107 + cmp DWORD [edi+8], 49 + jne .L138 +.L107: + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 224 + cmp eax, 96 + jne .L108 + cmp DWORD [edi+8], 65 + jne .L138 +.L108: + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 224 + cmp eax, 128 + jne .L52 + cmp DWORD [edi+8], 81 + jmp .L273 +.L109: + cmp DWORD [edi+4], 1 + jne .L138 + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 224 + cmp eax, 32 + jne .L112 + cmp DWORD [edi+8], 18 + je .L112 + cmp DWORD [edi+8], 34 + jne .L138 +.L112: + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 224 + cmp eax, 64 + jne .L113 + cmp DWORD [edi+8], 50 + jne .L138 +.L113: + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 224 + cmp eax, 96 + jne .L114 + cmp DWORD [edi+8], 66 + jne .L138 +.L114: + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 224 + cmp eax, 128 + jne .L52 + cmp DWORD [edi+8], 82 + jmp .L273 +.L115: + cmp DWORD [edi+4], 2 + jne .L138 + mov eax, DWORD [edi+8] + and eax, 15 + cmp eax, 1 + jmp .L273 +.L118: + cmp DWORD [edi+4], 2 + jne .L138 + mov eax, DWORD [edi+8] + and eax, 15 + cmp eax, 3 + jmp .L273 +.L121: + cmp DWORD [edi+4], 2 + jne .L138 + test BYTE [edi+8], 15 + jmp .L273 +.L124: + cmp DWORD [edi+4], 2 + jne .L138 + mov eax, DWORD [edi+8] + and eax, 15 + cmp eax, 4 + jmp .L273 +.L127: + cmp DWORD [edi+4], 2 + jne .L138 + mov eax, DWORD [edi+8] + and eax, 15 + cmp eax, 5 + jmp .L273 +.L130: + cmp DWORD [edi+4], 2 + jne .L138 + mov eax, DWORD [edi+8] + and eax, 15 + cmp eax, 2 + jmp .L273 +.L133: + cmp DWORD [edi+4], 1 + jne .L138 + cmp DWORD [edi+8], 148 + jmp .L273 +.L136: + cmp DWORD [edi+4], 3 + jne .L138 + sub esp, 8 + push DWORD 1 + push DWORD [edi+8] + call yasm_ea_get_disp + mov DWORD [esp], eax + call yasm_expr__contains + add esp, 16 + test eax, eax +.L273: + je .L52 +.L138: + mov DWORD [ebp-80], 1 + jmp .L52 +.L139: + sub esp, 4 + push DWORD LC3 + push DWORD 1849 + push DWORD LC1 + call [DWORD yasm_internal_error_] + add esp, 16 +.L52: + cmp DWORD [ebp-80], 0 + jne .L39 + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 224 + shr eax, 5 + mov esi, DWORD [size_lookup.1+eax*4] + cmp DWORD [edi+4], 1 + jne .L142 + cmp DWORD [edi+16], 0 + jne .L142 + sub esp, 12 + push DWORD [edi+8] + call yasm_x86__get_reg_size + add esp, 16 + cmp eax, esi + jmp .L274 +.L142: + mov eax, DWORD [ebp-76] + test BYTE [ebx+17+eax*4], 1 + je .L145 + test esi, esi + je .L144 + cmp DWORD [edi+16], esi + je .L144 + cmp DWORD [edi+16], 0 + jmp .L274 +.L145: + cmp DWORD [edi+16], esi +.L274: + je .L144 + mov DWORD [ebp-80], 1 +.L144: + cmp DWORD [ebp-80], 0 + jne .L39 + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 3584 + cmp eax, 1024 + je .L155 + cmp eax, 1024 + jg .L163 + test eax, eax + je .L151 + cmp eax, 512 + je .L153 + jmp .L161 +.L163: + cmp eax, 1536 + je .L157 + cmp eax, 2048 + je .L159 + jmp .L161 +.L151: + cmp DWORD [edi+12], 0 + jmp .L275 +.L153: + cmp DWORD [edi+12], 1 + jmp .L275 +.L155: + cmp DWORD [edi+12], 2 + jmp .L275 +.L157: + cmp DWORD [edi+12], 3 + jmp .L275 +.L159: + cmp DWORD [edi+12], 4 +.L275: + je .L49 + mov DWORD [ebp-80], 1 + jmp .L49 +.L161: + sub esp, 4 + push DWORD LC4 + push DWORD 1899 + push DWORD LC1 + call [DWORD yasm_internal_error_] + add esp, 16 +.L49: + mov edi, DWORD [edi] + inc DWORD [ebp-76] + test edi, edi + je .L48 + movzx eax, BYTE [ebx+14] + cmp DWORD [ebp-76], eax + jge .L48 + cmp DWORD [ebp-80], 0 + je .L164 + jmp .L39 +.L48: + cmp DWORD [ebp-80], 0 + je .L261 +.L39: + dec DWORD [ebp-64] + add ebx, 28 + cmp DWORD [ebp-64], 0 + jle .L38 + cmp DWORD [ebp-72], 0 + je .L166 + jmp .L167 +.L38: + cmp DWORD [ebp-72], 0 + jne .L167 + jmp .L277 +.L261: + mov DWORD [ebp-72], 1 + jmp .L38 +.L167: + mov eax, DWORD [ebx+4] + and eax, -268435456 + cmp eax, 268435456 + je .L170 + cmp eax, 268435456 + jg .L182 + test eax, eax + je .L168 + jmp .L180 +.L182: + cmp eax, 536870912 + je .L178 + jmp .L180 +.L170: + mov eax, DWORD [ebx+4] + and eax, 267386880 + shr eax, 20 + je .L172 + cmp eax, 1 + je .L173 + jmp .L174 +.L172: + sub esp, 8 + push DWORD LC6 + jmp .L268 +.L173: + sub esp, 8 + push DWORD LC7 +.L268: + push DWORD [ebp+28] + call yasm__error + jmp .L276 +.L174: + sub esp, 4 + push DWORD LC8 + push DWORD 1930 + push DWORD LC1 + call [DWORD yasm_internal_error_] + jmp .L276 +.L178: + sub esp, 4 + push DWORD LC8 + push DWORD 1937 + jmp DWORD .L269 +.L180: + sub esp, 4 + push DWORD LC9 + push DWORD 1941 +.L269: + push DWORD LC1 + call [DWORD yasm_internal_error_] + add esp, 16 +.L168: + cmp DWORD [ebp+16], 0 + je .L183 + mov eax, DWORD [ebx+16] + and eax, 61440 + cmp eax, 32768 + jne .L183 + sub esp, 4 + push DWORD [ebp+28] + push DWORD [ebp+24] + push DWORD [ebp+20] + push ebx + push DWORD [ebp+16] + push DWORD [ebp+12] + push DWORD [ebp+8] + call x86_new_jmp + jmp .L36 +.L183: + mov ecx, DWORD [ebp+28] + mov DWORD [ebp-56], ecx + mov DWORD [ebp-52], 0 + mov DWORD [ebp-48], 0 + mov al, BYTE [ebx+8] + mov BYTE [ebp-44], al + mov al, BYTE [ebx+9] + mov BYTE [ebp-43], al + mov al, BYTE [ebx+10] + mov BYTE [ebp-42], al + mov al, BYTE [ebx+11] + mov BYTE [ebp-41], al + mov al, BYTE [ebx+12] + mov BYTE [ebp-40], al + mov al, BYTE [ebx+13] + mov BYTE [ebp-39], al + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L184 + cmp BYTE [ebx+8], 64 + jne .L184 + mov al, 72 + jmp .L185 +.L184: + mov al, 0 +.L185: + mov BYTE [ebp-38], al + mov BYTE [ebp-37], 0 + mov BYTE [ebp-36], 0 + mov BYTE [ebp-35], 0 + mov BYTE [ebp-34], 0 + test BYTE [ebx+4], 1 + je .L186 + mov al, BYTE [ebp-68] + add BYTE [ebp-40], al + shr DWORD [ebp-68], 8 +.L186: + test BYTE [ebx+4], 2 + je .L187 + shr DWORD [ebp-68], 8 +.L187: + test BYTE [ebx+4], 4 + je .L188 + mov dl, BYTE [ebp-68] + add BYTE [ebp-41], dl + shr DWORD [ebp-68], 8 +.L188: + test BYTE [ebx+4], 8 + je .L189 + shr DWORD [ebp-68], 8 +.L189: + test BYTE [ebx+4], 16 + je .L190 + mov cl, BYTE [ebp-68] + add BYTE [ebp-42], cl + shr DWORD [ebp-68], 8 +.L190: + test BYTE [ebx+4], 32 + je .L191 + mov al, BYTE [ebp-68] + add BYTE [ebp-39], al + shr DWORD [ebp-68], 8 +.L191: + test BYTE [ebx+4], 64 + je .L192 + mov dl, BYTE [ebp-68] + mov BYTE [ebp-44], dl + shr DWORD [ebp-68], 8 +.L192: + cmp BYTE [ebx+4], 0 + jns .L193 + push DWORD [ebp+28] + push DWORD 0 + sub esp, 4 + movzx eax, BYTE [ebp-68] + push eax + call yasm_intnum_new_uint + mov DWORD [esp], eax + call yasm_expr_int + add esp, 8 + push eax + push DWORD 0 + call yasm_expr_new + mov DWORD [ebp-48], eax + mov BYTE [ebp-37], 1 + add esp, 16 +.L193: + cmp DWORD [ebp+16], 0 + je .L194 + mov DWORD [ebp-76], 0 + mov ecx, DWORD [ebp+16] + mov edi, DWORD [ecx] + test edi, edi + je .L194 + movzx eax, BYTE [ebx+14] + cmp DWORD [ebp-76], eax + jge .L194 +.L257: + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 61440 + cmp eax, 12288 + je .L223 + cmp eax, 12288 + jg .L247 + cmp eax, 4096 + je .L210 + cmp eax, 4096 + jg .L248 + test eax, eax + je .L201 + jmp .L245 +.L248: + cmp eax, 8192 + je .L220 + jmp .L245 +.L247: + cmp eax, 20480 + je .L232 + cmp eax, 20480 + jg .L249 + cmp eax, 16384 + je .L226 + jmp .L245 +.L249: + cmp eax, 24576 + je .L236 + cmp eax, 28672 + je .L239 + jmp .L245 +.L201: + mov eax, DWORD [edi+4] + cmp eax, 3 + je .L205 + cmp eax, 3 + jbe .L200 + cmp eax, 4 + je .L206 + jmp .L200 +.L205: + sub esp, 12 + push DWORD [edi+8] + call yasm_ea_delete + jmp .L271 +.L206: + sub esp, 12 + push DWORD [edi+8] + call yasm_expr_delete + jmp .L271 +.L210: + mov eax, DWORD [edi+4] + cmp eax, 2 + je .L213 + cmp eax, 2 + ja .L219 + cmp eax, 1 + je .L212 + jmp .L200 +.L219: + cmp eax, 3 + je .L214 + cmp eax, 4 + je .L216 + jmp .L200 +.L212: + sub esp, 4 + movzx eax, BYTE [yasm_x86_LTX_mode_bits] + push eax + lea eax, [ebp-38] + push eax + push DWORD [edi+8] + call yasm_x86__ea_new_reg + jmp .L272 +.L213: + sub esp, 4 + push DWORD LC0 + push DWORD 2025 + push DWORD LC1 + call [DWORD yasm_internal_error_] + add esp, 16 +.L214: + mov edx, DWORD [edi+8] + mov DWORD [ebp-52], edx + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 31 + cmp eax, 21 + jne .L200 + sub esp, 12 + push edx + call yasm_x86__ea_set_disponly + jmp .L271 +.L216: + sub esp, 8 + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 224 + shr eax, 5 + push DWORD [size_lookup.1+eax*4] + push DWORD [edi+8] + call yasm_x86__ea_new_imm +.L272: + mov DWORD [ebp-52], eax + jmp .L271 +.L220: + cmp DWORD [edi+4], 4 + jne .L221 + mov eax, DWORD [edi+8] + mov DWORD [ebp-48], eax + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 224 + shr eax, 5 + mov al, BYTE [size_lookup.1+eax*4] + mov BYTE [ebp-37], al + jmp .L200 +.L221: + sub esp, 4 + push DWORD LC0 + push DWORD 2045 + jmp .L270 +.L223: + cmp DWORD [edi+4], 4 + jne .L224 + mov eax, DWORD [edi+8] + mov DWORD [ebp-48], eax + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 224 + shr eax, 5 + mov al, BYTE [size_lookup.1+eax*4] + mov BYTE [ebp-37], al + mov BYTE [ebp-36], 1 + jmp .L200 +.L224: + sub esp, 4 + push DWORD LC0 + push DWORD 2054 + jmp .L270 +.L226: + cmp DWORD [edi+4], 2 + jne .L227 + mov al, BYTE [edi+8] + and eax, 7 + mov BYTE [ebp-39], al + jmp .L200 +.L227: + cmp DWORD [edi+4], 1 + jne .L229 + sub esp, 12 + push DWORD 2 + movzx eax, BYTE [yasm_x86_LTX_mode_bits] + push eax + push DWORD [edi+8] + lea eax, [ebp-39] + push eax + lea eax, [ebp-38] + push eax + call yasm_x86__set_rex_from_reg + add esp, 32 + test eax, eax + je .L200 +.L277: + sub esp, 8 + push DWORD LC5 + push DWORD [ebp+28] + call yasm__error + jmp .L243 +.L229: + sub esp, 4 + push DWORD LC0 + push DWORD 2068 + jmp .L270 +.L232: + cmp DWORD [edi+4], 1 + jne .L233 + sub esp, 12 + push DWORD 0 + movzx eax, BYTE [yasm_x86_LTX_mode_bits] + push eax + push DWORD [edi+8] + lea eax, [ebp-57] + push eax + lea eax, [ebp-38] + push eax + call yasm_x86__set_rex_from_reg + add esp, 32 + test eax, eax + jne .L277 + mov al, BYTE [ebp-42] + add al, BYTE [ebp-57] + mov BYTE [ebp-42], al + jmp .L200 +.L233: + sub esp, 4 + push DWORD LC0 + push DWORD 2082 + jmp .L270 +.L236: + cmp DWORD [edi+4], 1 + jne .L237 + mov al, BYTE [edi+8] + and eax, 7 + add BYTE [ebp-41], al + jmp .L200 +.L237: + sub esp, 4 + push DWORD LC0 + push DWORD 2089 + jmp .L270 +.L239: + cmp DWORD [edi+4], 1 + jne .L240 + sub esp, 4 + movzx eax, BYTE [yasm_x86_LTX_mode_bits] + push eax + lea esi, [ebp-38] + push esi + push DWORD [edi+8] + call yasm_x86__ea_new_reg + mov DWORD [ebp-52], eax + add esp, 16 + test eax, eax + je .L242 + sub esp, 12 + push DWORD 2 + movzx eax, BYTE [yasm_x86_LTX_mode_bits] + push eax + push DWORD [edi+8] + lea eax, [ebp-39] + push eax + push esi + call yasm_x86__set_rex_from_reg + add esp, 32 + test eax, eax + je .L200 +.L242: + sub esp, 8 + push DWORD LC5 + push DWORD [ebp+28] + call yasm__error + add esp, 16 + cmp DWORD [ebp-52], 0 + je .L243 + sub esp, 12 + push DWORD [ebp-52] + call [DWORD yasm_xfree] +.L276: + add esp, 16 +.L243: + mov eax, 0 + jmp .L36 +.L240: + sub esp, 4 + push DWORD LC0 + push DWORD 2106 + jmp .L270 +.L245: + sub esp, 4 + push DWORD LC10 + push DWORD 2109 +.L270: + push DWORD LC1 + call [DWORD yasm_internal_error_] +.L271: + add esp, 16 +.L200: + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 196608 + cmp eax, 65536 + je .L252 + cmp eax, 65536 + jg .L256 + test eax, eax + je .L197 + jmp .L254 +.L256: + cmp eax, 131072 + je .L253 + jmp .L254 +.L252: + mov BYTE [ebp-35], 1 + jmp .L197 +.L253: + mov BYTE [ebp-34], 1 + jmp .L197 +.L254: + sub esp, 4 + push DWORD LC11 + push DWORD 2123 + push DWORD LC1 + call [DWORD yasm_internal_error_] + add esp, 16 +.L197: + mov edi, DWORD [edi] + inc DWORD [ebp-76] + test edi, edi + je .L194 + movzx eax, BYTE [ebx+14] + cmp DWORD [ebp-76], eax + jl .L257 +.L194: + sub esp, 12 + lea eax, [ebp-56] + push eax + call yasm_x86__bc_new_insn +.L36: + lea esp, [ebp-12] + pop ebx + pop esi + pop edi + leave + ret +.Lfe2: + ;.size yasm_x86__parse_insn,.Lfe2-yasm_x86__parse_insn + section .rodata;.str1.32 + align 32 +LC12: + db "unrecognized CPU identifier `s'", 0 + section .text +global yasm_x86__parse_cpu + ;.type yasm_x86__parse_cpu,@function +yasm_x86__parse_cpu: + push ebp + mov ebp, esp + push ebx + sub esp, 4 + mov edx, DWORD [ebp+8] + mov ebx, DWORD [ebp+12] +.L279: + movsx eax, BYTE [edx] + cmp eax, 119 + ja .L338 + jmp DWORD [.L339+eax*4] + section .rodata + align 4 + align 4 +.L339: + dd .L283 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L285 + dd .L287 + dd .L289 + dd .L291 + dd .L293 + dd .L295 + dd .L338 + dd .L297 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L300 + dd .L338 + dd .L303 + dd .L338 + dd .L338 + dd .L306 + dd .L338 + dd .L309 + dd .L312 + dd .L338 + dd .L315 + dd .L338 + dd .L318 + dd .L321 + dd .L324 + dd .L327 + dd .L338 + dd .L338 + dd .L330 + dd .L338 + dd .L333 + dd .L338 + dd .L336 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L300 + dd .L338 + dd .L303 + dd .L338 + dd .L338 + dd .L306 + dd .L338 + dd .L309 + dd .L312 + dd .L338 + dd .L315 + dd .L338 + dd .L318 + dd .L321 + dd .L324 + dd .L327 + dd .L338 + dd .L338 + dd .L330 + dd .L338 + dd .L333 + dd .L338 + dd .L336 + section .text +.L297: + inc edx + mov cl, BYTE [edx] + cmp cl, 48 + je .L341 + jmp .L342 +.L343: +.L312: + inc edx + mov cl, BYTE [edx] + cmp cl, 64 + jg .L344 + cmp cl, 51 + jle .L925 + cmp cl, 52 + jle .L291 + cmp cl, 53 + jle .L293 + cmp cl, 54 + jle .L295 + jmp .L342 +.L344: + cmp cl, 96 + jg .L355 + cmp cl, 65 + jle .L357 + cmp cl, 84 + jmp .L913 +.L355: + cmp cl, 97 + jle .L357 + cmp cl, 116 +.L913: + je .L359 + jmp .L342 +.L285: + inc edx + mov cl, BYTE [edx] + cmp cl, 56 + je .L364 + jmp .L342 +.L287: + inc edx + mov cl, BYTE [edx] + cmp cl, 56 + je .L366 + jmp .L342 +.L289: + inc edx + mov cl, BYTE [edx] + cmp cl, 67 + jle .L912 + cmp cl, 68 + jle .L372 + cmp cl, 100 + je .L372 + jmp .L342 +.L291: + inc edx + mov cl, BYTE [edx] + cmp cl, 56 + je .L375 + jmp .L342 +.L293: + inc edx + mov cl, BYTE [edx] + cmp cl, 56 + je .L377 + jmp .L342 +.L327: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + jg .L378 + cmp cl, 52 + jle .L923 + cmp cl, 54 + jg .L387 + cmp cl, 53 + jle .L389 + jmp .L390 +.L387: + cmp cl, 69 + je .L393 + jmp .L342 +.L378: + cmp cl, 101 + jg .L395 + cmp cl, 81 + jg .L396 + cmp cl, 80 + jle .L824 + jmp .L342 +.L396: + cmp cl, 82 + jle .L401 + cmp cl, 100 + jle .L342 + jmp .L393 +.L395: + cmp cl, 112 + jg .L404 + cmp cl, 111 + jle .L342 + jmp .L824 +.L404: + cmp cl, 114 + je .L401 + jmp .L342 +.L295: + inc edx + mov cl, BYTE [edx] + cmp cl, 56 + je .L409 + jmp .L342 +.L315: + inc edx + mov cl, BYTE [edx] + cmp cl, 64 + jg .L410 + cmp cl, 53 + jle .L342 + cmp cl, 54 + jle .L413 + cmp cl, 55 + jle .L415 + jmp .L342 +.L410: + cmp cl, 65 + jle .L418 + cmp cl, 97 + je .L418 + jmp .L342 +.L336: + inc edx + mov cl, BYTE [edx] + cmp cl, 73 + je .L421 + cmp cl, 105 + je .L421 + jmp .L342 +.L300: + inc edx + mov cl, BYTE [edx] + cmp cl, 84 + jg .L423 + cmp cl, 77 + je .L425 + cmp cl, 83 + jle .L342 + jmp .L427 +.L423: + cmp cl, 109 + jg .L429 + cmp cl, 108 + jle .L342 + jmp .L425 +.L429: + cmp cl, 116 + je .L427 + jmp .L342 +.L330: + inc edx + mov cl, BYTE [edx] + cmp cl, 83 + jg .L433 + cmp cl, 76 + jg .L434 + cmp cl, 75 + jle .L342 + jmp .L436 +.L434: + cmp cl, 77 + jle .L439 + cmp cl, 82 + jle .L342 + jmp .L441 +.L433: + cmp cl, 109 + jg .L443 + cmp cl, 107 + jle .L342 + cmp cl, 108 + jle .L436 + jmp .L439 +.L443: + cmp cl, 115 + je .L441 + jmp .L342 +.L309: + inc edx + mov cl, BYTE [edx] + cmp cl, 65 + je .L449 + cmp cl, 97 + je .L449 + jmp .L342 +.L324: + inc edx + mov cl, BYTE [edx] + cmp cl, 80 + jg .L451 + cmp cl, 66 + je .L453 + cmp cl, 79 + jle .L342 + jmp .L455 +.L451: + cmp cl, 98 + jg .L457 + cmp cl, 97 + jle .L342 + jmp .L453 +.L457: + cmp cl, 112 + je .L455 + jmp .L342 +.L306: + inc edx + mov cl, BYTE [edx] + cmp cl, 80 + je .L462 + cmp cl, 112 + je .L462 + jmp .L342 +.L321: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + je .L465 + cmp cl, 111 + je .L465 + jmp .L342 +.L318: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L468 + cmp cl, 109 + je .L468 + jmp .L342 +.L303: + inc edx + mov cl, BYTE [edx] + cmp cl, 89 + je .L471 + cmp cl, 121 + je .L471 + jmp .L342 +.L333: + inc edx + mov cl, BYTE [edx] + cmp cl, 78 + je .L474 + cmp cl, 110 + je .L474 + jmp .L342 +.L338: + inc edx + mov cl, BYTE [edx] +.L342: + test cl, cl + jle .L922 + jmp .L338 +.L283: + inc edx +.L922: + push edx + push DWORD LC12 + push ebx + push DWORD 0 + call yasm__warning + jmp .L278 +.L474: + inc edx + mov cl, BYTE [edx] + cmp cl, 68 + je .L479 + cmp cl, 100 + jne .L342 +.L479: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + je .L482 + cmp cl, 111 + jne .L342 +.L482: + inc edx + mov cl, BYTE [edx] + cmp cl, 67 + je .L485 + cmp cl, 99 + jne .L342 +.L485: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 2097152 + jmp .L278 +.L471: + inc edx + mov cl, BYTE [edx] + cmp cl, 82 + je .L489 + cmp cl, 114 + jne .L342 +.L489: + inc edx + mov cl, BYTE [edx] + cmp cl, 73 + je .L492 + cmp cl, 105 + jne .L342 +.L492: + inc edx + mov cl, BYTE [edx] + cmp cl, 88 + je .L495 + cmp cl, 120 + jne .L342 +.L495: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 131072 + jmp .L278 +.L468: + inc edx + mov cl, BYTE [edx] + cmp cl, 88 + je .L499 + cmp cl, 120 + jne .L342 +.L499: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 8192 + jmp .L278 +.L465: + inc edx + mov cl, BYTE [edx] + movsx eax, cl + sub eax, 51 + cmp eax, 66 + ja .L342 + jmp DWORD [.L530+eax*4] + section .rodata + align 4 + align 4 +.L530: + dd .L504 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L507 + dd .L342 + dd .L510 + dd .L342 + dd .L342 + dd .L513 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L516 + dd .L342 + dd .L519 + dd .L522 + dd .L342 + dd .L342 + dd .L525 + dd .L342 + dd .L528 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L507 + dd .L342 + dd .L510 + dd .L342 + dd .L342 + dd .L513 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L516 + dd .L342 + dd .L519 + dd .L522 + dd .L342 + dd .L342 + dd .L525 + dd .L342 + dd .L528 + section .text +.L513: + inc edx + mov cl, BYTE [edx] + cmp cl, 80 + je .L532 + cmp cl, 112 + je .L532 + jmp .L342 +.L516: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L535 + cmp cl, 109 + je .L535 + jmp .L342 +.L525: + inc edx + mov cl, BYTE [edx] + cmp cl, 83 + jg .L537 + cmp cl, 77 + je .L539 + cmp cl, 82 + jle .L342 + jmp .L541 +.L537: + cmp cl, 109 + jg .L543 + cmp cl, 108 + jle .L342 + jmp .L539 +.L543: + cmp cl, 115 + je .L541 + jmp .L342 +.L504: + inc edx + mov cl, BYTE [edx] + cmp cl, 68 + je .L548 + cmp cl, 100 + je .L548 + jmp .L342 +.L510: + inc edx + mov cl, BYTE [edx] + cmp cl, 89 + je .L551 + cmp cl, 121 + je .L551 + jmp .L342 +.L507: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L554 + cmp cl, 109 + je .L554 + jmp .L342 +.L522: + inc edx + mov cl, BYTE [edx] + cmp cl, 82 + je .L557 + cmp cl, 114 + je .L557 + jmp .L342 +.L528: + inc edx + mov cl, BYTE [edx] + cmp cl, 78 + je .L560 + cmp cl, 110 + je .L560 + jmp .L342 +.L519: + inc edx + mov cl, BYTE [edx] + cmp cl, 66 + je .L563 + cmp cl, 98 + jne .L342 +.L563: + inc edx + mov cl, BYTE [edx] + cmp cl, 83 + je .L566 + cmp cl, 115 + jne .L342 +.L566: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -4194305 + jmp .L278 +.L560: + inc edx + mov cl, BYTE [edx] + cmp cl, 68 + je .L570 + cmp cl, 100 + jne .L342 +.L570: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + je .L573 + cmp cl, 111 + jne .L342 +.L573: + inc edx + mov cl, BYTE [edx] + cmp cl, 67 + je .L576 + cmp cl, 99 + jne .L342 +.L576: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -2097153 + jmp .L278 +.L557: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + jg .L579 + cmp cl, 73 + je .L581 + cmp cl, 78 + jle .L342 + jmp .L583 +.L579: + cmp cl, 105 + jg .L584 + cmp cl, 104 + jle .L342 + jmp .L581 +.L584: + cmp cl, 111 + jne .L342 +.L583: + inc edx + mov cl, BYTE [edx] + cmp cl, 84 + je .L589 + cmp cl, 116 + je .L589 + jmp .L342 +.L581: + inc edx + mov cl, BYTE [edx] + cmp cl, 86 + je .L592 + cmp cl, 118 + jne .L342 +.L592: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -8388609 + jmp .L278 +.L589: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -1048577 + jmp .L278 +.L554: + inc edx + mov cl, BYTE [edx] + cmp cl, 68 + je .L597 + cmp cl, 100 + jne .L342 +.L597: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -262145 + jmp .L278 +.L551: + inc edx + mov cl, BYTE [edx] + cmp cl, 82 + je .L601 + cmp cl, 114 + jne .L342 +.L601: + inc edx + mov cl, BYTE [edx] + cmp cl, 73 + je .L604 + cmp cl, 105 + jne .L342 +.L604: + inc edx + mov cl, BYTE [edx] + cmp cl, 88 + je .L607 + cmp cl, 120 + jne .L342 +.L607: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -131073 + jmp .L278 +.L548: + inc edx + mov cl, BYTE [edx] + cmp cl, 78 + je .L611 + cmp cl, 110 + jne .L342 +.L611: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + je .L614 + cmp cl, 111 + jne .L342 +.L614: + inc edx + mov cl, BYTE [edx] + cmp cl, 87 + je .L617 + cmp cl, 119 + jne .L342 +.L617: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -65537 + jmp .L278 +.L539: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L621 + cmp cl, 109 + je .L621 + jmp .L342 +.L541: + inc edx + mov cl, BYTE [edx] + cmp cl, 69 + je .L624 + cmp cl, 101 + jne .L342 +.L624: + inc edx + mov cl, BYTE [edx] + test cl, cl + jle .L627 + cmp cl, 50 + je .L629 + jmp .L338 +.L627: + and DWORD [cpu_enabled], -16385 + jmp .L278 +.L629: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -32769 + jmp .L278 +.L621: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -524289 + jmp .L278 +.L535: + inc edx + mov cl, BYTE [edx] + cmp cl, 88 + je .L633 + cmp cl, 120 + jne .L342 +.L633: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -8193 + jmp .L278 +.L532: + inc edx + mov cl, BYTE [edx] + cmp cl, 85 + je .L637 + cmp cl, 117 + jne .L342 +.L637: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -4097 + jmp .L278 +.L462: + inc edx + mov cl, BYTE [edx] + cmp cl, 85 + je .L641 + cmp cl, 117 + jne .L342 +.L641: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 4096 + jmp .L278 +.L453: + inc edx + mov cl, BYTE [edx] + cmp cl, 83 + je .L645 + cmp cl, 115 + je .L645 + jmp .L342 +.L455: + inc edx + mov cl, BYTE [edx] + cmp cl, 84 + je .L648 + cmp cl, 116 + jne .L342 +.L648: + inc edx + mov cl, BYTE [edx] + cmp cl, 69 + je .L651 + cmp cl, 101 + jne .L342 +.L651: + inc edx + mov cl, BYTE [edx] + cmp cl, 82 + je .L654 + cmp cl, 114 + jne .L342 +.L654: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + je .L657 + cmp cl, 111 + jne .L342 +.L657: + inc edx + mov cl, BYTE [edx] + cmp cl, 78 + je .L660 + cmp cl, 110 +.L914: + jne .L342 +.L660: + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 10059327 + jmp .L278 +.L645: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 4194304 + jmp .L278 +.L449: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L665 + cmp cl, 109 + jne .L342 +.L665: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L668 + cmp cl, 109 + jne .L342 +.L668: + inc edx + mov cl, BYTE [edx] + cmp cl, 69 + je .L671 + cmp cl, 101 + jne .L342 +.L671: + inc edx + mov cl, BYTE [edx] + cmp cl, 82 + je .L660 + cmp cl, 114 + jmp .L914 +.L436: + inc edx + mov cl, BYTE [edx] + cmp cl, 69 + je .L676 + cmp cl, 101 + je .L676 + jmp .L342 +.L439: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L679 + cmp cl, 109 + je .L679 + jmp .L342 +.L441: + inc edx + mov cl, BYTE [edx] + cmp cl, 69 + je .L682 + cmp cl, 101 + jne .L342 +.L682: + inc edx + mov cl, BYTE [edx] + test cl, cl + jle .L685 + cmp cl, 50 + je .L687 + jmp .L338 +.L685: + or DWORD [cpu_enabled], 16384 + jmp .L278 +.L687: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 32768 + jmp .L278 +.L679: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 524288 + jmp .L278 +.L676: + inc edx + mov cl, BYTE [edx] + cmp cl, 68 + je .L691 + cmp cl, 100 + jne .L342 +.L691: + inc edx + mov cl, BYTE [edx] + cmp cl, 71 + je .L694 + cmp cl, 103 + jne .L342 +.L694: + inc edx + mov cl, BYTE [edx] + cmp cl, 69 + je .L697 + cmp cl, 101 + jne .L342 +.L697: + inc edx + mov cl, BYTE [edx] + cmp cl, 72 + je .L309 + cmp cl, 104 + je .L309 + jmp .L342 +.L425: + inc edx + mov cl, BYTE [edx] + cmp cl, 68 + je .L702 + cmp cl, 100 + je .L702 + jmp .L342 +.L427: + inc edx + mov cl, BYTE [edx] + cmp cl, 72 + je .L705 + cmp cl, 104 + jne .L342 +.L705: + inc edx + mov cl, BYTE [edx] + cmp cl, 76 + je .L708 + cmp cl, 108 + jne .L342 +.L708: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + je .L711 + cmp cl, 111 + jne .L342 +.L711: + inc edx + mov cl, BYTE [edx] + cmp cl, 78 + je .L714 + cmp cl, 110 + jne .L342 +.L714: + inc edx + mov cl, BYTE [edx] + cmp cl, 45 + jg .L716 + test cl, cl + jle .L718 + cmp cl, 44 + jle .L338 + jmp .L720 +.L716: + cmp cl, 54 + je .L723 + jmp .L338 +.L718: + mov DWORD [cpu_enabled], 10057279 + jmp .L278 +.L720: + inc edx + mov cl, BYTE [edx] + cmp cl, 54 + jne .L342 +.L723: + inc edx + mov cl, BYTE [edx] + cmp cl, 52 + jmp .L914 +.L702: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 262144 + jmp .L278 +.L421: + inc edx + mov cl, BYTE [edx] + cmp cl, 76 + je .L728 + cmp cl, 108 + jne .L342 +.L728: + inc edx + mov cl, BYTE [edx] + cmp cl, 76 + je .L731 + cmp cl, 108 + jne .L342 +.L731: + inc edx + mov cl, BYTE [edx] + cmp cl, 73 + je .L734 + cmp cl, 105 + jne .L342 +.L734: + inc edx + mov cl, BYTE [edx] + cmp cl, 65 + je .L737 + cmp cl, 97 + jne .L342 +.L737: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L740 + cmp cl, 109 + jne .L342 +.L740: + inc edx + mov cl, BYTE [edx] + cmp cl, 69 + je .L743 + cmp cl, 101 + jne .L342 +.L743: + inc edx + mov cl, BYTE [edx] + cmp cl, 84 + je .L746 + cmp cl, 116 + jne .L342 +.L746: + inc edx + mov cl, BYTE [edx] + cmp cl, 84 + je .L749 + cmp cl, 116 + jne .L342 +.L749: + inc edx + mov cl, BYTE [edx] + cmp cl, 69 + je .L385 + cmp cl, 101 +.L915: + jne .L342 +.L385: + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 10023167 + jmp .L278 +.L413: + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 10039871 + jmp .L278 +.L415: + inc edx + cmp BYTE [edx], 0 + jle .L718 + jmp .L338 +.L418: + inc edx + mov cl, BYTE [edx] + cmp cl, 84 + je .L757 + cmp cl, 116 + jne .L342 +.L757: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L760 + cmp cl, 109 + jne .L342 +.L760: + inc edx + mov cl, BYTE [edx] + cmp cl, 65 + je .L763 + cmp cl, 97 + jne .L342 +.L763: + inc edx + mov cl, BYTE [edx] + cmp cl, 73 + je .L384 + cmp cl, 105 + jne .L342 +.L384: + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 9990271 + jmp .L278 +.L409: + inc edx + mov cl, BYTE [edx] + cmp cl, 54 +.L917: + jne .L342 +.L390: + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 9965631 + jmp .L278 +.L382: + inc edx + cmp BYTE [edx], 0 + jg .L338 +.L771: + mov DWORD [cpu_enabled], 9973823 + jmp .L278 +.L389: + inc edx + cmp BYTE [edx], 0 + jg .L338 +.L773: + mov DWORD [cpu_enabled], 9965599 + jmp .L278 +.L393: + inc edx + mov cl, BYTE [edx] + cmp cl, 78 + je .L775 + cmp cl, 110 + je .L775 + jmp .L342 +.L398: +.L401: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + jg .L780 + cmp cl, 73 + je .L782 + cmp cl, 78 + jle .L342 + jmp .L784 +.L780: + cmp cl, 105 + jg .L785 + cmp cl, 104 + jle .L342 + jmp .L782 +.L785: + cmp cl, 111 + jne .L342 +.L784: + inc edx + mov cl, BYTE [edx] + cmp cl, 84 + je .L790 + cmp cl, 116 + je .L790 + jmp .L342 +.L782: + inc edx + mov cl, BYTE [edx] + cmp cl, 86 + je .L793 + cmp cl, 118 + jne .L342 +.L793: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 8388608 + jmp .L278 +.L790: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 1048576 + jmp .L278 +.L778: +.L775: + inc edx + mov cl, BYTE [edx] + cmp cl, 84 + je .L800 + cmp cl, 116 + jne .L342 +.L800: + inc edx + mov cl, BYTE [edx] + cmp cl, 73 + je .L803 + cmp cl, 105 + jne .L342 +.L803: + inc edx + mov cl, BYTE [edx] + cmp cl, 85 + je .L806 + cmp cl, 117 + jne .L342 +.L806: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L809 + cmp cl, 109 + jne .L342 +.L809: + inc edx + mov cl, BYTE [edx] + cmp cl, 72 + jg .L811 + cmp cl, 49 + jg .L812 + test cl, cl + jle .L773 + cmp cl, 45 + jne .L338 + jmp .L819 +.L812: + cmp cl, 50 + jle .L382 + cmp cl, 51 + jle .L384 + cmp cl, 52 + jle .L385 + jmp .L338 +.L811: + cmp cl, 104 + jg .L820 + cmp cl, 73 + jle .L822 + cmp cl, 80 + jmp .L908 +.L820: + cmp cl, 105 + jle .L822 + cmp cl, 112 +.L908: + je .L824 + jmp .L338 +.L819: + inc edx + mov cl, BYTE [edx] + cmp cl, 52 + jg .L828 +.L923: + cmp cl, 49 + jle .L342 + cmp cl, 50 + jle .L382 + cmp cl, 51 + jle .L384 + jmp .L385 +.L828: + cmp cl, 73 + jg .L833 + cmp cl, 72 + jle .L342 + jmp .L822 +.L833: + cmp cl, 105 + jne .L342 +.L822: + inc edx + mov cl, BYTE [edx] + cmp cl, 86 + jg .L837 + cmp cl, 73 + je .L839 + cmp cl, 85 + jle .L342 + jmp .L385 +.L837: + cmp cl, 105 + jg .L842 + cmp cl, 104 + jle .L342 + jmp .L839 +.L842: + cmp cl, 118 + jmp .L915 +.L824: + inc edx + mov cl, BYTE [edx] + cmp cl, 82 + je .L847 + cmp cl, 114 + jne .L342 +.L847: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + je .L390 + cmp cl, 111 + jmp .L917 +.L839: + inc edx + mov cl, BYTE [edx] + cmp cl, 73 + jg .L851 + test cl, cl + jle .L771 + cmp cl, 72 + jle .L338 + jmp .L384 +.L851: + cmp cl, 105 + je .L384 + jmp .L338 +.L377: + inc edx + mov cl, BYTE [edx] + cmp cl, 54 + je .L389 + jmp .L342 +.L375: + inc edx + mov cl, BYTE [edx] + cmp cl, 54 + jne .L342 + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 9965583 + jmp .L278 +.L369: + inc edx + mov cl, BYTE [edx] + cmp cl, 54 + je .L860 + jmp .L342 +.L372: + inc edx + mov cl, BYTE [edx] + cmp cl, 78 + je .L862 + cmp cl, 110 + jne .L342 +.L862: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + je .L865 + cmp cl, 111 + jne .L342 +.L865: + inc edx + mov cl, BYTE [edx] + cmp cl, 87 + je .L868 + cmp cl, 119 + jne .L342 +.L868: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 65536 + jmp .L278 +.L860: + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 9961479 + jmp .L278 +.L366: + inc edx + mov cl, BYTE [edx] + cmp cl, 54 + jne .L342 + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 8388611 + jmp .L278 +.L364: + inc edx + mov cl, BYTE [edx] + cmp cl, 54 + jne .L342 + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 8388609 + jmp .L278 +.L349: + inc edx + mov cl, BYTE [edx] +.L912: + cmp cl, 56 + je .L369 + jmp .L342 +.L357: + inc edx + mov cl, BYTE [edx] + cmp cl, 45 + je .L878 + jmp .L909 +.L359: + inc edx + mov cl, BYTE [edx] + cmp cl, 65 + je .L882 + cmp cl, 97 + jne .L342 +.L882: + inc edx + mov cl, BYTE [edx] + cmp cl, 78 + je .L885 + cmp cl, 110 + jne .L342 +.L885: + inc edx + mov cl, BYTE [edx] + cmp cl, 73 + je .L888 + cmp cl, 105 + jne .L342 +.L888: + inc edx + mov cl, BYTE [edx] + cmp cl, 85 + je .L891 + cmp cl, 117 + jne .L342 +.L891: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L894 + cmp cl, 109 +.L920: + jne .L342 +.L894: + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 10023423 + jmp .L278 +.L878: + inc edx + mov cl, BYTE [edx] +.L909: + cmp cl, 54 + jne .L342 +.L880: + inc edx + mov cl, BYTE [edx] + cmp cl, 52 + jmp .L920 +.L341: + inc edx + mov cl, BYTE [edx] + cmp cl, 51 + jg .L899 +.L925: + cmp cl, 48 + jle .L342 + cmp cl, 49 + jle .L285 + cmp cl, 50 + jle .L287 + jmp .L349 +.L899: + cmp cl, 52 + jle .L291 + cmp cl, 56 + jne .L342 + inc edx + mov cl, BYTE [edx] + cmp cl, 54 + jne .L342 + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 8388608 +.L278: + mov ebx, DWORD [ebp-4] + leave + ret +.Lfe3: + ;.size yasm_x86__parse_cpu,.Lfe3-yasm_x86__parse_cpu + section .rodata;.str1.32 + align 32 +LC16: + db "`s' segment register ignored in 64-bit mode", 0 + align 32 +LC18: + db "Cannot override address size to 16 bits in 64-bit mode", 0 + align 32 +LC17: + db "`s' is a prefix in 64-bit mode", 0 + align 32 +LC15: + db "`s' is a register in 64-bit mode", 0 + align 32 +LC13: + db "`s' is an instruction in 64-bit mode", 0 + section .rodata;.str1.1 +LC14: + db "`s' invalid in 64-bit mode", 0 + section .text +global yasm_x86__parse_check_id + ;.type yasm_x86__parse_check_id,@function +yasm_x86__parse_check_id: + push ebp + mov ebp, esp + push edi + push esi + push ebx + sub esp, 12 + mov edi, DWORD [ebp+8] + mov ecx, DWORD [ebp+12] + mov esi, DWORD [ebp+16] + mov ebx, ecx +.L927: + movsx eax, BYTE [ecx] + cmp eax, 120 + ja .L999 + jmp DWORD [.L1000+eax*4] + section .rodata + align 4 + align 4 +.L1000: + dd .L8702 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L934 + dd .L937 + dd .L940 + dd .L943 + dd .L946 + dd .L949 + dd .L952 + dd .L955 + dd .L958 + dd .L961 + dd .L999 + dd .L964 + dd .L967 + dd .L970 + dd .L973 + dd .L976 + dd .L999 + dd .L979 + dd .L982 + dd .L985 + dd .L988 + dd .L991 + dd .L994 + dd .L997 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L934 + dd .L937 + dd .L940 + dd .L943 + dd .L946 + dd .L949 + dd .L952 + dd .L955 + dd .L958 + dd .L961 + dd .L999 + dd .L964 + dd .L967 + dd .L970 + dd .L973 + dd .L976 + dd .L999 + dd .L979 + dd .L982 + dd .L985 + dd .L988 + dd .L991 + dd .L994 + dd .L997 + section .text +.L970: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + jg .L1001 + cmp dl, 69 + je .L1003 + cmp dl, 78 + jle .L1005 + jmp .L1006 +.L1001: + cmp dl, 101 + jg .L1008 + cmp dl, 100 + jle .L1005 + jmp .L1003 +.L1008: + cmp dl, 111 + je .L1006 + jmp .L1005 +.L1012: +.L982: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 56 + ja .L1005 + jmp DWORD [.L1069+eax*4] + section .rodata + align 4 + align 4 +.L1069: + dd .L1016 + dd .L1019 + dd .L1022 + dd .L1005 + dd .L1025 + dd .L1028 + dd .L1031 + dd .L1034 + dd .L1037 + dd .L1005 + dd .L1005 + dd .L1040 + dd .L1043 + dd .L1005 + dd .L1005 + dd .L1046 + dd .L1049 + dd .L1005 + dd .L1052 + dd .L1055 + dd .L1058 + dd .L1061 + dd .L1064 + dd .L1005 + dd .L1067 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1016 + dd .L1019 + dd .L1022 + dd .L1005 + dd .L1025 + dd .L1028 + dd .L1031 + dd .L1034 + dd .L1037 + dd .L1005 + dd .L1005 + dd .L1040 + dd .L1043 + dd .L1005 + dd .L1005 + dd .L1046 + dd .L1049 + dd .L1005 + dd .L1052 + dd .L1055 + dd .L1058 + dd .L1061 + dd .L1064 + dd .L1005 + dd .L1067 + section .text +.L949: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 50 + cmp eax, 71 + ja .L1005 + jmp DWORD [.L1128+eax*4] + section .rodata + align 4 + align 4 +.L1128: + dd .L1072 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1075 + dd .L1078 + dd .L1081 + dd .L1084 + dd .L1087 + dd .L1090 + dd .L1005 + dd .L1005 + dd .L1093 + dd .L1005 + dd .L1005 + dd .L1096 + dd .L1099 + dd .L1102 + dd .L1005 + dd .L1105 + dd .L1005 + dd .L1108 + dd .L1111 + dd .L1114 + dd .L1117 + dd .L1005 + dd .L1120 + dd .L1123 + dd .L1126 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1075 + dd .L1078 + dd .L1081 + dd .L1084 + dd .L1087 + dd .L1090 + dd .L1005 + dd .L1005 + dd .L1093 + dd .L1005 + dd .L1005 + dd .L1096 + dd .L1099 + dd .L1102 + dd .L1005 + dd .L1105 + dd .L1005 + dd .L1108 + dd .L1111 + dd .L1114 + dd .L1117 + dd .L1005 + dd .L1120 + dd .L1123 + dd .L1126 + section .text +.L985: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L1129 + cmp dl, 78 + jg .L1130 + cmp dl, 69 + jmp .L8674 +.L1130: + cmp dl, 79 + jle .L1135 + cmp dl, 81 + jle .L1005 + jmp .L1137 +.L1129: + cmp dl, 110 + jg .L1139 + cmp dl, 101 +.L8674: + je .L1132 + jmp .L1005 +.L1139: + cmp dl, 111 + jle .L1135 + cmp dl, 114 + je .L1137 + jmp .L1005 +.L973: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + jg .L1144 + cmp dl, 50 + jg .L1145 + cmp dl, 49 + je .L1147 + jmp .L1005 +.L1145: + cmp dl, 51 + jle .L1150 + cmp dl, 54 + je .L1152 + jmp .L1005 +.L1144: + cmp dl, 113 + jg .L1154 + cmp dl, 82 + jle .L1156 + cmp dl, 85 + jmp .L8673 +.L1154: + cmp dl, 114 + jle .L1156 + cmp dl, 117 +.L8673: + je .L1158 + jmp .L1005 +.L934: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 49 + cmp eax, 71 + ja .L1005 + jmp DWORD [.L1191+eax*4] + section .rodata + align 4 + align 4 +.L1191: + dd .L1164 + dd .L1005 + dd .L1166 + dd .L1005 + dd .L1005 + dd .L1168 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1171 + dd .L1005 + dd .L1005 + dd .L1174 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1177 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1180 + dd .L1005 + dd .L1183 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1186 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1189 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1171 + dd .L1005 + dd .L1005 + dd .L1174 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1177 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1180 + dd .L1005 + dd .L1183 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1186 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1189 + section .text +.L964: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 51 + ja .L1005 + jmp DWORD [.L1227+eax*4] + section .rodata + align 4 + align 4 +.L1227: + dd .L1195 + dd .L1005 + dd .L1005 + dd .L1198 + dd .L1201 + dd .L1204 + dd .L1207 + dd .L1005 + dd .L1210 + dd .L1005 + dd .L1005 + dd .L1213 + dd .L1216 + dd .L1005 + dd .L1219 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1222 + dd .L1225 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1195 + dd .L1005 + dd .L1005 + dd .L1198 + dd .L1201 + dd .L1204 + dd .L1207 + dd .L1005 + dd .L1210 + dd .L1005 + dd .L1005 + dd .L1213 + dd .L1216 + dd .L1005 + dd .L1219 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1222 + dd .L1225 + section .text +.L979: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 49 + cmp eax, 66 + ja .L1005 + jmp DWORD [.L1259+eax*4] + section .rodata + align 4 + align 4 +.L1259: + dd .L1230 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1233 + dd .L1233 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1236 + dd .L1239 + dd .L1242 + dd .L1245 + dd .L1248 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1251 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1254 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1257 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1236 + dd .L1239 + dd .L1242 + dd .L1245 + dd .L1248 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1251 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1254 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1257 + section .text +.L940: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 55 + ja .L1005 + jmp DWORD [.L1301+eax*4] + section .rodata + align 4 + align 4 +.L1301: + dd .L1263 + dd .L1266 + dd .L1005 + dd .L1269 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1272 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1275 + dd .L1278 + dd .L1005 + dd .L1281 + dd .L1284 + dd .L1005 + dd .L1287 + dd .L1290 + dd .L1005 + dd .L1005 + dd .L1293 + dd .L1296 + dd .L1299 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1263 + dd .L1266 + dd .L1005 + dd .L1269 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1272 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1275 + dd .L1278 + dd .L1005 + dd .L1281 + dd .L1284 + dd .L1005 + dd .L1287 + dd .L1290 + dd .L1005 + dd .L1005 + dd .L1293 + dd .L1296 + dd .L1299 + section .text +.L943: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 55 + ja .L1005 + jmp DWORD [.L1328+eax*4] + section .rodata + align 4 + align 4 +.L1328: + dd .L1305 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1308 + dd .L1005 + dd .L1005 + dd .L1311 + dd .L1314 + dd .L1005 + dd .L1005 + dd .L1317 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1320 + dd .L1323 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1326 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1305 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1308 + dd .L1005 + dd .L1005 + dd .L1311 + dd .L1314 + dd .L1005 + dd .L1005 + dd .L1317 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1320 + dd .L1323 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1326 + section .text +.L967: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 52 + ja .L1005 + jmp DWORD [.L1349+eax*4] + section .rodata + align 4 + align 4 +.L1349: + dd .L1332 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1335 + dd .L1005 + dd .L1005 + dd .L1338 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1341 + dd .L1005 + dd .L1344 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1347 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1332 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1335 + dd .L1005 + dd .L1005 + dd .L1338 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1341 + dd .L1005 + dd .L1344 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1347 + section .text +.L997: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 46 + ja .L1005 + jmp DWORD [.L1370+eax*4] + section .rodata + align 4 + align 4 +.L1370: + dd .L1353 + dd .L1356 + dd .L1359 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1362 + dd .L1365 + dd .L1005 + dd .L1368 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1353 + dd .L1356 + dd .L1359 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1362 + dd .L1365 + dd .L1005 + dd .L1368 + section .text +.L946: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 50 + ja .L1005 + jmp DWORD [.L1394+eax*4] + section .rodata + align 4 + align 4 +.L1394: + dd .L1374 + dd .L1377 + dd .L1380 + dd .L1383 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1386 + dd .L1389 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1392 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1374 + dd .L1377 + dd .L1380 + dd .L1383 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1386 + dd .L1389 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1392 + section .text +.L937: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 72 + cmp eax, 48 + ja .L1005 + jmp DWORD [.L1418+eax*4] + section .rodata + align 4 + align 4 +.L1418: + dd .L1398 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1401 + dd .L1005 + dd .L1005 + dd .L1404 + dd .L1407 + dd .L1005 + dd .L1005 + dd .L1410 + dd .L1413 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1416 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1398 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1401 + dd .L1005 + dd .L1005 + dd .L1404 + dd .L1407 + dd .L1005 + dd .L1005 + dd .L1410 + dd .L1413 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1416 + section .text +.L952: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L1420 + cmp dl, 115 + je .L1420 + jmp .L1005 +.L976: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 55 + ja .L1005 + jmp DWORD [.L1457+eax*4] + section .rodata + align 4 + align 4 +.L1457: + dd .L1425 + dd .L1005 + dd .L1005 + dd .L1428 + dd .L1431 + dd .L1434 + dd .L1005 + dd .L1005 + dd .L1437 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1440 + dd .L1005 + dd .L1443 + dd .L1005 + dd .L1005 + dd .L1446 + dd .L1449 + dd .L1005 + dd .L1452 + dd .L1005 + dd .L1005 + dd .L1455 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1425 + dd .L1005 + dd .L1005 + dd .L1428 + dd .L1431 + dd .L1434 + dd .L1005 + dd .L1005 + dd .L1437 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1440 + dd .L1005 + dd .L1443 + dd .L1005 + dd .L1005 + dd .L1446 + dd .L1449 + dd .L1005 + dd .L1452 + dd .L1005 + dd .L1005 + dd .L1455 + section .text +.L958: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 66 + cmp eax, 48 + ja .L1005 + jmp DWORD [.L1475+eax*4] + section .rodata + align 4 + align 4 +.L1475: + dd .L1461 + dd .L1005 + dd .L1464 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1467 + dd .L1470 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1473 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1461 + dd .L1005 + dd .L1464 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1467 + dd .L1470 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1473 + section .text +.L961: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 57 + ja .L1005 + jmp DWORD [.L1517+eax*4] + section .rodata + align 4 + align 4 +.L1517: + dd .L1479 + dd .L1482 + dd .L1485 + dd .L1005 + dd .L1488 + dd .L1005 + dd .L1491 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1494 + dd .L1497 + dd .L1500 + dd .L1503 + dd .L1506 + dd .L1005 + dd .L1509 + dd .L1512 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1515 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1479 + dd .L1482 + dd .L1485 + dd .L1005 + dd .L1488 + dd .L1005 + dd .L1491 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1494 + dd .L1497 + dd .L1500 + dd .L1503 + dd .L1506 + dd .L1005 + dd .L1509 + dd .L1512 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1515 + section .text +.L955: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L1519 + cmp dl, 108 + je .L1519 + jmp .L1005 +.L991: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L1522 + cmp dl, 101 + je .L1522 + jmp .L1005 +.L994: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L1524 + cmp dl, 65 + jg .L1525 + cmp dl, 64 + jle .L1005 + jmp .L1527 +.L1525: + cmp dl, 66 + jle .L1530 + cmp dl, 81 + jle .L1005 + jmp .L1532 +.L1524: + cmp dl, 98 + jg .L1534 + cmp dl, 96 + jle .L1005 + cmp dl, 97 + jle .L1527 + jmp .L1530 +.L1534: + cmp dl, 114 + je .L1532 + jmp .L1005 +.L988: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + jg .L1539 + cmp dl, 68 + jg .L1540 + cmp dl, 66 + jle .L1005 + cmp dl, 67 + jmp .L8675 +.L1540: + cmp dl, 76 + jle .L1005 + cmp dl, 77 + jle .L1548 + jmp .L1549 +.L1539: + cmp dl, 100 + jg .L1551 + cmp dl, 98 + jle .L1005 + cmp dl, 99 +.L8675: + jle .L1543 + jmp .L1544 +.L1551: + cmp dl, 108 + jle .L1005 + cmp dl, 109 + jle .L1548 + cmp dl, 110 + jle .L1549 + jmp .L1005 +.L999: + inc ecx + mov dl, BYTE [ecx] +.L1005: + mov eax, 0 + test dl, dl + jle .L926 + jmp .L999 +.L931: +.L1543: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L1561 + cmp dl, 111 + je .L1561 + jmp .L1005 +.L1544: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 48 + jle .L1005 + cmp dl, 49 + jle .L1565 + cmp dl, 50 + jle .L1567 + jmp .L1005 +.L1548: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L1569 + cmp dl, 111 + je .L1569 + jmp .L1005 +.L1549: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L1572 + cmp dl, 112 + jne .L1005 +.L1572: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L1575 + cmp dl, 99 + jne .L1005 +.L1575: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 75 + je .L1578 + cmp dl, 107 + jne .L1005 +.L1578: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + jg .L1580 + cmp dl, 72 + je .L1582 + cmp dl, 75 + jle .L1005 + jmp .L1584 +.L1580: + cmp dl, 104 + jg .L1586 + cmp dl, 103 + jle .L1005 + jmp .L1582 +.L1586: + cmp dl, 108 + je .L1584 + jmp .L1005 +.L1582: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L1591 + cmp dl, 112 + je .L1591 + jmp .L1005 +.L1584: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L1594 + cmp dl, 112 + jne .L1005 +.L1594: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L1596 + cmp dl, 68 + je .L1598 + cmp dl, 82 + jle .L1005 + jmp .L1600 +.L1596: + cmp dl, 100 + jg .L1602 + cmp dl, 99 + jle .L1005 + jmp .L1598 +.L1602: + cmp dl, 115 + je .L1600 + jmp .L1005 +.L1598: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6689793 + jmp .L9151 +.L1600: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 5121 + jmp .L9152 +.L1591: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L1612 + cmp dl, 68 + je .L1614 + cmp dl, 82 + jle .L1005 + jmp .L1616 +.L1612: + cmp dl, 100 + jg .L1618 + cmp dl, 99 + jle .L1005 + jmp .L1614 +.L1618: + cmp dl, 115 + je .L1616 + jmp .L1005 +.L1614: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6690049 + jmp .L9151 +.L1616: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 5377 + jmp .L9152 +.L1569: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L1629 + cmp dl, 118 + jne .L1005 +.L1629: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], umov_insn + mov DWORD [edi+4], 6 + jmp .L9016 +.L1567: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 985857 + jmp .L9153 +.L1565: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 1030401 + jmp .L8709 +.L1561: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L1641 + cmp dl, 109 + jne .L1005 +.L1641: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L1644 + cmp dl, 105 + jne .L1005 +.L1644: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L1647 + cmp dl, 115 + jne .L1005 +.L1647: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L1649 + cmp dl, 68 + je .L1651 + cmp dl, 82 + jle .L1005 + jmp .L1653 +.L1649: + cmp dl, 100 + jg .L1654 + cmp dl, 99 + jle .L1005 + jmp .L1651 +.L1654: + cmp dl, 115 + jne .L1005 +.L1653: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15937025 + jmp .L9152 +.L1651: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15871489 + jmp .L9151 +.L1527: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L1665 + cmp dl, 105 + je .L1665 + jmp .L1005 +.L1530: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L1668 + cmp dl, 105 + je .L1668 + jmp .L1005 +.L1532: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L1670 + cmp dl, 77 + je .L1672 + cmp dl, 82 + jle .L1005 + jmp .L1674 +.L1670: + cmp dl, 109 + jg .L1676 + cmp dl, 108 + jle .L1005 + jmp .L1672 +.L1676: + cmp dl, 115 + je .L1674 + jmp .L1005 +.L1672: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L1681 + cmp dl, 115 + je .L1681 + jmp .L1005 +.L1674: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 72 + je .L1684 + cmp dl, 104 + jne .L1005 +.L1684: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L1687 + cmp dl, 114 + jne .L1005 +.L1687: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 997121 + jmp .L8712 +.L1681: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L1693 + cmp dl, 114 + jne .L1005 +.L1693: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 995329 + jmp .L8713 +.L1668: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L1699 + cmp dl, 110 + jne .L1005 +.L1699: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L1702 + cmp dl, 118 + jne .L1005 +.L1702: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L1705 + cmp dl, 100 + jne .L1005 +.L1705: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 985345 + jmp .L8721 +.L1665: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L1711 + cmp dl, 116 + jne .L1005 +.L1711: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 39681 + jmp .L8695 +.L1522: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L1717 + cmp dl, 114 + jne .L1005 +.L1717: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L1719 + cmp dl, 82 + je .L1721 + cmp dl, 86 + jle .L1005 + jmp .L1723 +.L1719: + cmp dl, 114 + jg .L1725 + cmp dl, 113 + jle .L1005 + jmp .L1721 +.L1725: + cmp dl, 119 + je .L1723 + jmp .L1005 +.L1721: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], prot286_insn + mov DWORD [edi+4], 262145 + jmp .L9031 +.L1723: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], prot286_insn + mov DWORD [edi+4], 327681 + jmp .L9031 +.L1519: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L1736 + cmp dl, 116 + jne .L1005 +.L1736: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 62465 + mov DWORD [edi+8], 8388608 + jmp .L8696 +.L1479: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L1741 + test dl, dl + jle .L9238 + cmp dl, 68 + jle .L999 + jmp .L1745 +.L1741: + cmp dl, 101 + je .L1745 + jmp .L999 +.L1743: +.L1482: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L1750 + test dl, dl + jle .L9237 + cmp dl, 68 + jle .L999 + jmp .L1754 +.L1750: + cmp dl, 101 + je .L1754 + jmp .L999 +.L1752: +.L1485: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + jg .L1759 + test dl, dl + jle .L9237 + cmp dl, 87 + jle .L999 + jmp .L1763 +.L1759: + cmp dl, 120 + je .L1763 + jmp .L999 +.L1761: +.L1488: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + jg .L1768 + test dl, dl + jle .L9236 + cmp dl, 66 + jle .L999 + jmp .L1772 +.L1768: + cmp dl, 99 + je .L1772 + jmp .L999 +.L1770: +.L1491: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L1777 + test dl, dl + jle .L9235 + cmp dl, 68 + jle .L999 + jmp .L1781 +.L1777: + cmp dl, 101 + je .L1781 + jmp .L999 +.L1779: +.L1494: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L1786 + test dl, dl + jle .L9234 + cmp dl, 68 + jle .L999 + jmp .L1790 +.L1786: + cmp dl, 101 + je .L1790 + jmp .L999 +.L1788: +.L1497: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L1796 + cmp dl, 112 + je .L1796 + jmp .L1005 +.L1500: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 57 + ja .L1005 + jmp DWORD [.L1830+eax*4] + section .rodata + align 4 + align 4 +.L1830: + dd .L1801 + dd .L1804 + dd .L1745 + dd .L1005 + dd .L1828 + dd .L1005 + dd .L1813 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1816 + dd .L1005 + dd .L1005 + dd .L1819 + dd .L1822 + dd .L1005 + dd .L1005 + dd .L1825 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1828 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1801 + dd .L1804 + dd .L1745 + dd .L1005 + dd .L1828 + dd .L1005 + dd .L1813 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1816 + dd .L1005 + dd .L1005 + dd .L1819 + dd .L1822 + dd .L1005 + dd .L1005 + dd .L1825 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1828 + section .text +.L1503: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 7 + jmp .L8695 +.L1506: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + jg .L1834 + cmp dl, 68 + jg .L1835 + test dl, dl + jmp .L9239 +.L1835: + cmp dl, 69 + jle .L1839 + cmp dl, 78 + jle .L999 + jmp .L1822 +.L1834: + cmp dl, 101 + jg .L1843 + cmp dl, 100 + jle .L999 + jmp .L1839 +.L1843: + cmp dl, 111 + je .L1822 + jmp .L999 +.L1509: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L1850 + cmp dl, 99 + je .L1850 + jmp .L1005 +.L1512: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 2055 + jmp .L8695 +.L1515: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9236: + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 1031 + jmp .L8695 +.L1850: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L1859 + cmp dl, 120 + jne .L1005 +.L1859: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + je .L1862 + cmp dl, 122 + jne .L1005 +.L1862: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], jcxz_insn + mov DWORD [edi+4], 16386 + jmp .L9148 +.L1839: + inc ecx + cmp BYTE [ecx], 0 +.L9239: + jg .L999 + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 2567 + jmp .L8695 +.L1841: +.L1819: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 263 + jmp .L8695 +.L1801: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L1877 + test dl, dl + jle .L9231 + cmp dl, 68 + jle .L999 + jmp .L1881 +.L1877: + cmp dl, 101 + je .L1881 + jmp .L999 +.L1879: +.L1804: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L1886 + test dl, dl + jle .L9230 + cmp dl, 68 + jle .L999 + jmp .L1890 +.L1886: + cmp dl, 101 + je .L1890 + jmp .L999 +.L1888: +.L1807: +.L1810: +.L1828: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 1287 + jmp .L8695 +.L1825: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 2311 + jmp .L8695 +.L1822: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 2823 + jmp .L8695 +.L1813: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L1910 + test dl, dl + jle .L9228 + cmp dl, 68 + jle .L999 + jmp .L1914 +.L1910: + cmp dl, 101 + je .L1914 + jmp .L999 +.L1912: +.L1816: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L1919 + test dl, dl + jle .L9227 + cmp dl, 68 + jle .L999 + jmp .L1923 +.L1919: + cmp dl, 101 + jne .L999 +.L1921: +.L1923: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9235: + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 3847 + jmp .L8695 +.L1914: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9234: + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 3079 + jmp .L8695 +.L1890: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9238: + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 1799 + jmp .L8695 +.L1881: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9237: + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 519 + jmp .L8695 +.L1796: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], jmp_insn + jmp .L9226 +.L1790: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9228: + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 3591 + jmp .L8695 +.L1781: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9227: + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 3335 + jmp .L8695 +.L1772: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L1950 + cmp dl, 120 + jne .L1005 +.L1950: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + je .L1953 + cmp dl, 122 + jne .L1005 +.L1953: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], jcxz_insn + mov DWORD [edi+4], 8194 + jmp .L9186 +.L1763: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + je .L1959 + cmp dl, 122 + jne .L1005 +.L1959: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], jcxz_insn + mov DWORD [edi+4], 4098 + jmp .L8695 +.L1754: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9231: + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 1543 + jmp .L8695 +.L1745: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9230: + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 775 + jmp .L8695 +.L1461: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L1971 + cmp dl, 116 + je .L1971 + jmp .L1005 +.L1464: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L1974 + cmp dl, 105 + je .L1974 + jmp .L1005 +.L1467: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + je .L1977 + cmp dl, 117 + je .L1977 + jmp .L1005 +.L1470: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + jg .L1979 + cmp dl, 82 + jg .L1980 + test dl, dl + jle .L1982 + cmp dl, 67 + je .L1984 + jmp .L999 +.L1980: + cmp dl, 83 + jle .L1987 + cmp dl, 84 + jle .L1989 + cmp dl, 85 + jle .L999 + jmp .L1991 +.L1979: + cmp dl, 115 + jg .L1993 + cmp dl, 99 + je .L1984 + cmp dl, 114 + jle .L999 + jmp .L1987 +.L1993: + cmp dl, 116 + jle .L1989 + cmp dl, 118 + je .L1991 + jmp .L999 +.L1982: + mov DWORD [edi], in_insn + jmp .L9225 +.L1473: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L2002 + cmp dl, 101 + jne .L1005 +.L2002: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L2005 + cmp dl, 116 + jne .L1005 +.L2005: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2007 + cmp dl, 68 + jg .L2008 + test dl, dl + jle .L2010 + cmp dl, 67 + jle .L999 + jmp .L2012 +.L2008: + cmp dl, 81 + je .L2015 + cmp dl, 86 + jle .L999 + jmp .L2017 +.L2007: + cmp dl, 112 + jg .L2019 + cmp dl, 100 + je .L2012 + jmp .L999 +.L2019: + cmp dl, 113 + jle .L2015 + cmp dl, 119 + je .L2017 + jmp .L999 +.L2010: + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 52993 + jmp .L8695 +.L2017: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1101569 + jmp .L8695 +.L2012: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2150145 + jmp .L9186 +.L2015: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4247297 + jmp .L9148 +.L1984: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], incdec_insn + mov DWORD [edi+4], 16390 + jmp .L8695 +.L1987: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2039 + cmp dl, 67 + jg .L2040 + cmp dl, 66 + jmp .L8672 +.L2040: + cmp dl, 68 + jle .L2045 + cmp dl, 86 + jle .L1005 + jmp .L2047 +.L2039: + cmp dl, 99 + jg .L2049 + cmp dl, 98 +.L8672: + je .L2042 + jmp .L1005 +.L2049: + cmp dl, 100 + jle .L2045 + cmp dl, 119 + je .L2047 + jmp .L1005 +.L1989: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 51 + jg .L2054 + cmp dl, 47 + jg .L2055 + test dl, dl + jg .L999 + jmp .L2062 +.L2055: + cmp dl, 48 + jle .L2059 + cmp dl, 50 + jle .L999 + jmp .L2093 +.L2054: + cmp dl, 79 + jg .L2063 + cmp dl, 78 + jle .L999 + jmp .L2065 +.L2063: + cmp dl, 111 + je .L2065 + jmp .L999 +.L2062: + mov DWORD [edi], int_insn + mov DWORD [edi+4], 1 + jmp .L8695 +.L1991: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + jg .L2070 + cmp dl, 68 + je .L2072 + cmp dl, 75 + jle .L1005 + jmp .L2074 +.L2070: + cmp dl, 100 + jg .L2076 + cmp dl, 99 + jle .L1005 + jmp .L2072 +.L2076: + cmp dl, 108 + je .L2074 + jmp .L1005 +.L2072: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 985089 + jmp .L8721 +.L2074: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L2084 + cmp dl, 112 + jne .L1005 +.L2084: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 71 + je .L2087 + cmp dl, 103 + jne .L1005 +.L2087: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 118423809 +.L8721: + mov DWORD [edi+8], 8388616 + jmp .L8696 +.L2059: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 51 + je .L2093 + jmp .L1005 +.L2061: +.L2065: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 52737 + jmp .L8695 +.L2093: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 52225 + jmp .L8695 +.L2042: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 27649 + jmp .L8695 +.L2045: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2125057 + jmp .L9186 +.L2047: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1076481 + jmp .L8695 +.L1977: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L2116 + cmp dl, 108 + jne .L1005 +.L2116: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], imul_insn + mov DWORD [edi+4], 19 + jmp .L8695 +.L1974: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L2122 + cmp dl, 118 + jne .L1005 +.L2122: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], f6_insn + mov DWORD [edi+4], 1796 + jmp .L8695 +.L1971: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L2128 + cmp dl, 115 + jne .L1005 +.L2128: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ibts_insn + jmp .L8724 +.L1425: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + jg .L2133 + cmp dl, 77 + jg .L2134 + cmp dl, 66 + jle .L1005 + cmp dl, 67 + jle .L2137 + cmp dl, 68 + jmp .L8671 +.L2134: + cmp dl, 78 + jle .L2142 + cmp dl, 84 + jle .L1005 + cmp dl, 85 + jle .L2145 + jmp .L2146 +.L2133: + cmp dl, 109 + jg .L2148 + cmp dl, 98 + jle .L1005 + cmp dl, 99 + jle .L2137 + cmp dl, 100 +.L8671: + jle .L2139 + jmp .L1005 +.L2148: + cmp dl, 116 + jg .L2153 + cmp dl, 110 + jle .L2142 + jmp .L1005 +.L2153: + cmp dl, 117 + jle .L2145 + cmp dl, 118 + jle .L2146 + jmp .L1005 +.L1428: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L2159 + cmp dl, 105 + je .L2159 + jmp .L1005 +.L1431: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L2162 + cmp dl, 120 + je .L2162 + jmp .L1005 +.L1434: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 50 + cmp eax, 65 + ja .L1005 + jmp DWORD [.L2189+eax*4] + section .rodata + align 4 + align 4 +.L2189: + dd .L2166 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2169 + dd .L1005 + dd .L2172 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2175 + dd .L2178 + dd .L1005 + dd .L2181 + dd .L1005 + dd .L2184 + dd .L2187 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2169 + dd .L1005 + dd .L2172 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2175 + dd .L2178 + dd .L1005 + dd .L2181 + dd .L1005 + dd .L2184 + dd .L2187 + section .text +.L1437: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + jg .L2190 + cmp dl, 50 + je .L2192 + jmp .L1005 +.L2190: + cmp dl, 78 + jle .L2195 + cmp dl, 110 + je .L2195 + jmp .L1005 +.L1440: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + jg .L2197 + cmp dl, 73 + jg .L2198 + cmp dl, 65 + je .L2200 + cmp dl, 72 + jle .L1005 + jmp .L2202 +.L2198: + cmp dl, 79 + jg .L2204 + cmp dl, 78 + jle .L1005 + jmp .L2206 +.L2204: + cmp dl, 84 + jle .L1005 + cmp dl, 85 + jle .L2210 + jmp .L2211 +.L2197: + cmp dl, 110 + jg .L2213 + cmp dl, 97 + jg .L2214 + cmp dl, 96 + jle .L1005 + jmp .L2200 +.L2214: + cmp dl, 105 + je .L2202 + jmp .L1005 +.L2213: + cmp dl, 116 + jg .L2219 + cmp dl, 111 + jle .L2206 + jmp .L1005 +.L2219: + cmp dl, 117 + jle .L2210 + cmp dl, 118 + jle .L2211 + jmp .L1005 +.L1443: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L2224 + cmp dl, 80 + je .L2226 + cmp dl, 81 + jle .L1005 + jmp .L2228 +.L2224: + cmp dl, 112 + jg .L2230 + cmp dl, 111 + jle .L1005 + jmp .L2226 +.L2230: + cmp dl, 114 + je .L2228 + jmp .L1005 +.L1446: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L2235 + cmp dl, 101 + je .L2235 + jmp .L1005 +.L1449: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 54 + ja .L1005 + jmp DWORD [.L2257+eax*4] + section .rodata + align 4 + align 4 +.L2257: + dd .L2240 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2243 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2246 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2249 + dd .L1005 + dd .L1005 + dd .L2252 + dd .L1005 + dd .L2255 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2240 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2243 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2246 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2249 + dd .L1005 + dd .L1005 + dd .L2252 + dd .L1005 + dd .L2255 + section .text +.L1452: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L2258 + cmp dl, 78 + je .L2260 + cmp dl, 82 + jle .L1005 + jmp .L2262 +.L2258: + cmp dl, 110 + jg .L2264 + cmp dl, 109 + jle .L1005 + jmp .L2260 +.L2264: + cmp dl, 115 + je .L2262 + jmp .L1005 +.L1455: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L2269 + cmp dl, 111 + jne .L1005 +.L2269: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L2272 + cmp dl, 114 + jne .L1005 +.L2272: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 61186 + jmp .L8866 +.L2262: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 72 + je .L2278 + cmp dl, 104 + je .L2278 + jmp .L1005 +.L2260: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L2281 + cmp dl, 112 + jne .L1005 +.L2281: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L2284 + cmp dl, 99 + jne .L1005 +.L2284: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 75 + je .L2287 + cmp dl, 107 + jne .L1005 +.L2287: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + jg .L2289 + cmp dl, 72 + je .L2291 + cmp dl, 75 + jle .L1005 + jmp .L2293 +.L2289: + cmp dl, 104 + jg .L2295 + cmp dl, 103 + jle .L1005 + jmp .L2291 +.L2295: + cmp dl, 108 + je .L2293 + jmp .L1005 +.L2291: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2299 + cmp dl, 68 + jg .L2300 + cmp dl, 66 + je .L2302 + cmp dl, 67 + jmp .L8677 +.L2300: + cmp dl, 81 + je .L2307 + cmp dl, 86 + jle .L1005 + jmp .L2309 +.L2299: + cmp dl, 100 + jg .L2311 + cmp dl, 98 + je .L2302 + cmp dl, 99 +.L8677: + jle .L1005 + jmp .L2304 +.L2311: + cmp dl, 113 + jg .L2315 + cmp dl, 112 + jle .L1005 + jmp .L2307 +.L2315: + cmp dl, 119 + je .L2309 + jmp .L1005 +.L2293: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2319 + cmp dl, 68 + jg .L2320 + cmp dl, 66 + je .L2322 + cmp dl, 67 + jmp .L8676 +.L2320: + cmp dl, 81 + je .L2327 + cmp dl, 86 + jle .L1005 + jmp .L2329 +.L2319: + cmp dl, 100 + jg .L2331 + cmp dl, 98 + je .L2322 + cmp dl, 99 +.L8676: + jle .L1005 + jmp .L2324 +.L2331: + cmp dl, 113 + jg .L2335 + cmp dl, 112 + jle .L1005 + jmp .L2327 +.L2335: + cmp dl, 119 + je .L2329 + jmp .L1005 +.L2322: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L2340 + cmp dl, 119 + je .L2340 + jmp .L1005 +.L2324: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L2343 + cmp dl, 113 + je .L2343 + jmp .L1005 +.L2327: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L2346 + cmp dl, 100 + je .L2346 + jmp .L1005 +.L2329: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L2349 + cmp dl, 100 + jne .L1005 +.L2349: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 24834 + jmp .L8866 +.L2346: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L2355 + cmp dl, 113 + jne .L1005 +.L2355: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6712321 + jmp .L9151 +.L2343: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 25090 + jmp .L8866 +.L2340: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 24578 + jmp .L8866 +.L2302: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L2367 + cmp dl, 119 + je .L2367 + jmp .L1005 +.L2304: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L2370 + cmp dl, 113 + je .L2370 + jmp .L1005 +.L2307: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L2373 + cmp dl, 100 + je .L2373 + jmp .L1005 +.L2309: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L2376 + cmp dl, 100 + jne .L1005 +.L2376: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 26882 + jmp .L8866 +.L2373: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L2382 + cmp dl, 113 + jne .L1005 +.L2382: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6712577 + jmp .L9151 +.L2370: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 27138 + jmp .L8866 +.L2367: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 26626 + jmp .L8866 +.L2278: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 70 + jg .L2393 + cmp dl, 64 + jg .L2394 + test dl, dl + jg .L999 + jmp .L2401 +.L2394: + cmp dl, 65 + jle .L2398 + cmp dl, 69 + jle .L999 + jmp .L2400 +.L2393: + cmp dl, 97 + jg .L2402 + cmp dl, 96 + jle .L999 + jmp .L2398 +.L2402: + cmp dl, 102 + je .L2400 + jmp .L999 +.L2401: + mov DWORD [edi], push_insn + mov DWORD [edi+4], 28 + jmp .L8695 +.L2398: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2408 + cmp dl, 67 + jg .L2409 + test dl, dl + jg .L999 + jmp .L2416 +.L2409: + cmp dl, 68 + jle .L2413 + cmp dl, 86 + jle .L999 + jmp .L2415 +.L2408: + cmp dl, 100 + jg .L2417 + cmp dl, 99 + jle .L999 + jmp .L2413 +.L2417: + cmp dl, 119 + je .L2415 + jmp .L999 +.L2416: + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 24577 + jmp .L8857 +.L2400: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2426 + cmp dl, 68 + jg .L2427 + test dl, dl + jle .L2429 + cmp dl, 67 + jle .L999 + jmp .L2431 +.L2427: + cmp dl, 81 + je .L2434 + cmp dl, 86 + jle .L999 + jmp .L2436 +.L2426: + cmp dl, 112 + jg .L2438 + cmp dl, 100 + je .L2431 + jmp .L999 +.L2438: + cmp dl, 113 + jle .L2434 + cmp dl, 119 + je .L2436 + jmp .L999 +.L2429: + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 39937 + jmp .L8695 +.L2431: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2137089 + jmp .L9186 +.L2434: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4234241 + jmp .L9148 +.L2436: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1088513 + jmp .L8695 +.L2413: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2121729 + jmp .L9186 +.L2415: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1073153 + jmp .L8857 +.L2246: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L2468 + cmp dl, 108 + je .L2468 + jmp .L1005 +.L2249: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + jg .L2470 + cmp dl, 65 + je .L2472 + cmp dl, 75 + jle .L1005 + jmp .L2474 +.L2470: + cmp dl, 97 + jg .L2476 + cmp dl, 96 + jle .L1005 + jmp .L2472 +.L2476: + cmp dl, 108 + je .L2474 + jmp .L1005 +.L2252: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L2481 + cmp dl, 98 + je .L2481 + jmp .L1005 +.L2240: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L2484 + cmp dl, 100 + je .L2484 + jmp .L1005 +.L2243: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + je .L2487 + cmp dl, 117 + je .L2487 + jmp .L1005 +.L2255: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L2490 + cmp dl, 97 + jne .L1005 +.L2490: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L2493 + cmp dl, 112 + jne .L1005 +.L2493: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L2496 + cmp dl, 100 + jne .L1005 +.L2496: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 47873 + jmp .L8812 +.L2487: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 70 + je .L2502 + cmp dl, 102 + jne .L1005 +.L2502: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2504 + cmp dl, 72 + jg .L2505 + cmp dl, 68 + je .L2507 + cmp dl, 71 + jmp .L8678 +.L2505: + cmp dl, 76 + je .L2512 + cmp dl, 86 + jle .L1005 + jmp .L2514 +.L2504: + cmp dl, 104 + jg .L2516 + cmp dl, 100 + je .L2507 + cmp dl, 103 +.L8678: + jle .L1005 + jmp .L2509 +.L2516: + cmp dl, 108 + jg .L2520 + cmp dl, 107 + jle .L1005 + jmp .L2512 +.L2520: + cmp dl, 119 + je .L2514 + jmp .L1005 +.L2507: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssessimm_insn + mov DWORD [edi+4], 6713345 + jmp .L9151 +.L2509: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L2528 + cmp dl, 119 + je .L2528 + jmp .L1005 +.L2512: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L2531 + cmp dl, 119 + je .L2531 + jmp .L1005 +.L2514: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pshufw_insn + jmp .L9240 +.L2531: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssessimm_insn + mov DWORD [edi+4], 15888385 + jmp .L9151 +.L2528: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssessimm_insn + mov DWORD [edi+4], 15953921 + jmp .L9151 +.L2484: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L2543 + cmp dl, 98 + jne .L1005 +.L2543: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L2546 + cmp dl, 119 + jne .L1005 +.L2546: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 62978 + jmp .L8825 +.L2481: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 66 + cmp eax, 53 + ja .L1005 + jmp DWORD [.L2571+eax*4] + section .rodata + align 4 + align 4 +.L2571: + dd .L2554 + dd .L1005 + dd .L2557 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2560 + dd .L1005 + dd .L2563 + dd .L1005 + dd .L2566 + dd .L1005 + dd .L2569 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2554 + dd .L1005 + dd .L2557 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2560 + dd .L1005 + dd .L2563 + dd .L1005 + dd .L2566 + dd .L1005 + dd .L2569 + section .text +.L2554: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 63490 + jmp .L8866 +.L2569: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 63746 + jmp .L8866 +.L2557: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 64002 + jmp .L8866 +.L2560: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 64258 + jmp .L8866 +.L2563: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2584 + cmp dl, 72 + jg .L2585 + cmp dl, 66 + jmp .L8670 +.L2585: + cmp dl, 73 + jle .L2590 + cmp dl, 86 + jle .L1005 + jmp .L2592 +.L2584: + cmp dl, 104 + jg .L2594 + cmp dl, 98 +.L8670: + je .L2587 + jmp .L1005 +.L2594: + cmp dl, 105 + jle .L2590 + cmp dl, 119 + je .L2592 + jmp .L1005 +.L2566: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L2600 + cmp dl, 115 + jne .L1005 +.L2600: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2602 + cmp dl, 66 + je .L2604 + cmp dl, 86 + jle .L1005 + jmp .L2606 +.L2602: + cmp dl, 98 + jg .L2608 + cmp dl, 97 + jle .L1005 + jmp .L2604 +.L2608: + cmp dl, 119 + je .L2606 + jmp .L1005 +.L2604: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 55298 + jmp .L8866 +.L2606: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 55554 + jmp .L8866 +.L2587: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 59394 + jmp .L8866 +.L2590: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L2622 + cmp dl, 119 + je .L2622 + jmp .L1005 +.L2592: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 59650 + jmp .L8866 +.L2622: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 21761 + jmp .L8827 +.L2472: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2630 + cmp dl, 68 + je .L2632 + cmp dl, 86 + jle .L1005 + jmp .L2634 +.L2630: + cmp dl, 100 + jg .L2636 + cmp dl, 99 + jle .L1005 + jmp .L2632 +.L2636: + cmp dl, 119 + je .L2634 + jmp .L1005 +.L2474: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2640 + cmp dl, 80 + jg .L2641 + cmp dl, 68 + jmp .L8669 +.L2641: + cmp dl, 81 + jle .L2646 + cmp dl, 86 + jle .L1005 + jmp .L2648 +.L2640: + cmp dl, 112 + jg .L2649 + cmp dl, 100 +.L8669: + je .L2643 + jmp .L1005 +.L2649: + cmp dl, 113 + jle .L2646 + cmp dl, 119 + jne .L1005 +.L2648: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pshift_insn + mov DWORD [edi+4], 41013508 + jmp .L8866 +.L2643: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + jg .L2657 + test dl, dl + jle .L2659 + cmp dl, 80 + jle .L999 + jmp .L2661 +.L2657: + cmp dl, 113 + je .L2661 + jmp .L999 +.L2659: + mov DWORD [edi], pshift_insn + mov DWORD [edi+4], 41079300 + jmp .L8866 +.L2646: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pshift_insn + mov DWORD [edi+4], 41145092 + jmp .L8866 +.L2661: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pslrldq_insn + mov DWORD [edi+4], 769 + jmp .L9151 +.L2634: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pshift_insn + mov DWORD [edi+4], 74572036 + jmp .L8866 +.L2632: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pshift_insn + mov DWORD [edi+4], 74637828 + jmp .L8866 +.L2468: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2678 + cmp dl, 80 + jg .L2679 + cmp dl, 68 + jmp .L8668 +.L2679: + cmp dl, 81 + jle .L2684 + cmp dl, 86 + jle .L1005 + jmp .L2686 +.L2678: + cmp dl, 112 + jg .L2687 + cmp dl, 100 +.L8668: + je .L2681 + jmp .L1005 +.L2687: + cmp dl, 113 + jle .L2684 + cmp dl, 119 + jne .L1005 +.L2686: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pshift_insn + mov DWORD [edi+4], 108130564 + jmp .L8866 +.L2681: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + jg .L2695 + test dl, dl + jle .L2697 + cmp dl, 80 + jle .L999 + jmp .L2699 +.L2695: + cmp dl, 113 + je .L2699 + jmp .L999 +.L2697: + mov DWORD [edi], pshift_insn + mov DWORD [edi+4], 108196356 + jmp .L8866 +.L2684: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pshift_insn + mov DWORD [edi+4], 108262148 + jmp .L8866 +.L2699: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pslrldq_insn + mov DWORD [edi+4], 1793 + jmp .L9151 +.L2235: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 70 + je .L2711 + cmp dl, 102 + jne .L1005 +.L2711: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L2714 + cmp dl, 101 + jne .L1005 +.L2714: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L2717 + cmp dl, 116 + jne .L1005 +.L2717: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L2720 + cmp dl, 99 + jne .L1005 +.L2720: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 72 + je .L2723 + cmp dl, 104 + jne .L1005 +.L2723: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2725 + cmp dl, 78 + jg .L2726 + test dl, dl + jle .L2728 + cmp dl, 77 + jle .L999 + jmp .L2730 +.L2726: + cmp dl, 84 + je .L2733 + cmp dl, 86 + jle .L999 + jmp .L2735 +.L2725: + cmp dl, 115 + jg .L2737 + cmp dl, 110 + je .L2730 + jmp .L999 +.L2737: + cmp dl, 116 + jle .L2733 + cmp dl, 119 + je .L2735 + jmp .L999 +.L2728: + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 986369 + jmp .L8826 +.L2730: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L2745 + cmp dl, 116 + je .L2745 + jmp .L1005 +.L2733: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 47 + jle .L1005 + cmp dl, 48 + jle .L2749 + cmp dl, 49 + jle .L2751 + cmp dl, 50 + jle .L2753 + jmp .L1005 +.L2735: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 17763585 + jmp .L8826 +.L2749: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 17766401 + jmp .L9024 +.L2751: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 34543617 + jmp .L9024 +.L2753: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 51320833 + jmp .L9024 +.L2745: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L2767 + cmp dl, 97 + jne .L1005 +.L2767: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 989185 + jmp .L9024 +.L2226: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 70 + jg .L2772 + cmp dl, 64 + jg .L2773 + test dl, dl + jg .L999 + jmp .L2780 +.L2773: + cmp dl, 65 + jle .L2777 + cmp dl, 69 + jle .L999 + jmp .L2779 +.L2772: + cmp dl, 97 + jg .L2781 + cmp dl, 96 + jle .L999 + jmp .L2777 +.L2781: + cmp dl, 102 + je .L2779 + jmp .L999 +.L2780: + mov DWORD [edi], pop_insn +.L9226: + mov DWORD [edi+4], 21 + jmp .L8695 +.L2228: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 60162 + jmp .L8866 +.L2777: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2790 + cmp dl, 67 + jg .L2791 + test dl, dl + jg .L999 + jmp .L2798 +.L2791: + cmp dl, 68 + jle .L2795 + cmp dl, 86 + jle .L999 + jmp .L2797 +.L2790: + cmp dl, 100 + jg .L2799 + cmp dl, 99 + jle .L999 + jmp .L2795 +.L2799: + cmp dl, 119 + je .L2797 + jmp .L999 +.L2798: + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 24833 + jmp .L8857 +.L2779: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2808 + cmp dl, 68 + jg .L2809 + test dl, dl + jle .L2811 + cmp dl, 67 + jle .L999 + jmp .L2813 +.L2809: + cmp dl, 81 + je .L2816 + cmp dl, 86 + jle .L999 + jmp .L2818 +.L2808: + cmp dl, 112 + jg .L2820 + cmp dl, 100 + je .L2813 + jmp .L999 +.L2820: + cmp dl, 113 + jle .L2816 + cmp dl, 119 + je .L2818 + jmp .L999 +.L2811: + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 40193 + jmp .L8695 +.L2813: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2137345 + jmp .L9186 +.L2818: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1088769 + jmp .L8695 +.L2816: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4234497 + jmp .L9148 +.L2795: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2121985 + jmp .L9186 +.L2797: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1073409 + jmp .L8857 +.L2200: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + jg .L2849 + cmp dl, 68 + jg .L2850 + cmp dl, 66 + jle .L1005 + cmp dl, 67 + jle .L2853 + jmp .L2854 +.L2850: + cmp dl, 71 + je .L2857 + cmp dl, 87 + jle .L1005 + jmp .L2859 +.L2849: + cmp dl, 102 + jg .L2861 + cmp dl, 98 + jle .L1005 + cmp dl, 99 + jle .L2853 + cmp dl, 100 + jle .L2854 + jmp .L1005 +.L2861: + cmp dl, 103 + jle .L2857 + cmp dl, 120 + je .L2859 + jmp .L1005 +.L2210: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L2869 + cmp dl, 108 + je .L2869 + jmp .L1005 +.L2202: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L2872 + cmp dl, 110 + je .L2872 + jmp .L1005 +.L2206: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L2875 + cmp dl, 118 + je .L2875 + jmp .L1005 +.L2211: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + jg .L2877 + cmp dl, 76 + jg .L2878 + cmp dl, 71 + je .L2880 + cmp dl, 75 + jmp .L8679 +.L2878: + cmp dl, 78 + je .L2885 + cmp dl, 89 + jle .L1005 + jmp .L2887 +.L2877: + cmp dl, 108 + jg .L2889 + cmp dl, 103 + je .L2880 + cmp dl, 107 +.L8679: + jle .L1005 + jmp .L2882 +.L2889: + cmp dl, 110 + jg .L2893 + cmp dl, 109 + jle .L1005 + jmp .L2885 +.L2893: + cmp dl, 122 + je .L2887 + jmp .L1005 +.L2880: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L2898 + cmp dl, 101 + je .L2898 + jmp .L1005 +.L2882: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + je .L2901 + cmp dl, 122 + je .L2901 + jmp .L1005 +.L2885: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + je .L2904 + cmp dl, 122 + je .L2904 + jmp .L1005 +.L2887: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L2907 + cmp dl, 98 + jne .L1005 +.L2907: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 22529 + jmp .L8827 +.L2904: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L2913 + cmp dl, 98 + jne .L1005 +.L2913: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 23041 + jmp .L8827 +.L2901: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L2919 + cmp dl, 98 + jne .L1005 +.L2919: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 23297 + jmp .L8827 +.L2898: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + je .L2925 + cmp dl, 122 + jne .L1005 +.L2925: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L2928 + cmp dl, 98 + jne .L1005 +.L2928: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 23553 + jmp .L8827 +.L2875: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L2934 + cmp dl, 109 + jne .L1005 +.L2934: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L2937 + cmp dl, 115 + jne .L1005 +.L2937: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 75 + je .L2940 + cmp dl, 107 + jne .L1005 +.L2940: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L2943 + cmp dl, 98 + jne .L1005 +.L2943: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pmovmskb_insn + mov DWORD [edi+4], 2 + jmp .L9152 +.L2872: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + jg .L2948 + cmp dl, 83 + je .L2950 + cmp dl, 84 + jle .L1005 + jmp .L2952 +.L2948: + cmp dl, 115 + jg .L2954 + cmp dl, 114 + jle .L1005 + jmp .L2950 +.L2954: + cmp dl, 117 + je .L2952 + jmp .L1005 +.L2950: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L2959 + cmp dl, 119 + je .L2959 + jmp .L1005 +.L2952: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L2962 + cmp dl, 98 + jne .L1005 +.L2962: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 55810 + jmp .L8825 +.L2959: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 59906 + jmp .L8825 +.L2869: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + jg .L2970 + cmp dl, 75 + jg .L2971 + cmp dl, 72 + jmp .L8680 +.L2971: + cmp dl, 76 + jle .L2975 + cmp dl, 84 + jle .L1005 + jmp .L2977 +.L2970: + cmp dl, 107 + jg .L2979 + cmp dl, 104 +.L8680: + jne .L1005 + jmp .L2978 +.L2979: + cmp dl, 108 + jle .L2975 + cmp dl, 117 + je .L2977 + jmp .L1005 +.L2978: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2984 + cmp dl, 84 + jg .L2985 + cmp dl, 82 + jmp .L8667 +.L2985: + cmp dl, 85 + jle .L2990 + cmp dl, 86 + jle .L1005 + jmp .L2992 +.L2984: + cmp dl, 116 + jg .L2994 + cmp dl, 114 +.L8667: + je .L2987 + jmp .L1005 +.L2994: + cmp dl, 117 + jle .L2990 + cmp dl, 119 + je .L2992 + jmp .L1005 +.L2975: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3000 + cmp dl, 119 + je .L3000 + jmp .L1005 +.L2977: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L3003 + cmp dl, 100 + jne .L1005 +.L3003: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L3006 + cmp dl, 113 + jne .L1005 +.L3006: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 62466 + jmp .L9151 +.L3000: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 54530 + jmp .L8866 +.L2987: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3014 + cmp dl, 73 + je .L3016 + cmp dl, 86 + jle .L1005 + jmp .L3018 +.L3014: + cmp dl, 105 + jg .L3020 + cmp dl, 104 + jle .L1005 + jmp .L3016 +.L3020: + cmp dl, 119 + je .L3018 + jmp .L1005 +.L2990: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3025 + cmp dl, 119 + je .L3025 + jmp .L1005 +.L2992: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 58626 + jmp .L8866 +.L3025: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 58370 + jmp .L8825 +.L3018: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + jg .L3033 + cmp dl, 65 + je .L3035 + cmp dl, 66 + jle .L1005 + jmp .L3037 +.L3033: + cmp dl, 97 + jg .L3039 + cmp dl, 96 + jle .L1005 + jmp .L3035 +.L3039: + cmp dl, 99 + je .L3037 + jmp .L1005 +.L3016: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3044 + cmp dl, 119 + jne .L1005 +.L3044: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 23809 + jmp .L8827 +.L3035: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 46849 + jmp .L8826 +.L3037: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 22785 + jmp .L8827 +.L2853: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 72 + je .L3056 + cmp dl, 104 + je .L3056 + jmp .L1005 +.L2854: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L3059 + cmp dl, 100 + je .L3059 + jmp .L1005 +.L2857: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3062 + cmp dl, 119 + je .L3062 + jmp .L1005 +.L2859: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + jg .L3064 + cmp dl, 83 + je .L3066 + cmp dl, 84 + jle .L1005 + jmp .L3068 +.L3064: + cmp dl, 115 + jg .L3070 + cmp dl, 114 + jle .L1005 + jmp .L3066 +.L3070: + cmp dl, 117 + je .L3068 + jmp .L1005 +.L3066: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3075 + cmp dl, 119 + je .L3075 + jmp .L1005 +.L3068: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L3078 + cmp dl, 98 + jne .L1005 +.L3078: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 56834 + jmp .L8825 +.L3075: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 60930 + jmp .L8825 +.L3062: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 20993 + jmp .L8827 +.L3059: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3090 + cmp dl, 119 + jne .L1005 +.L3090: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L3093 + cmp dl, 100 + jne .L1005 +.L3093: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 62722 + jmp .L8866 +.L3056: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L3099 + cmp dl, 114 + jne .L1005 +.L3099: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L3102 + cmp dl, 105 + jne .L1005 +.L3102: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3105 + cmp dl, 119 + jne .L1005 +.L3105: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pmachriw_insn + mov DWORD [edi+4], 1 + jmp .L8827 +.L2195: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L3111 + cmp dl, 115 + je .L3111 + jmp .L1005 +.L2192: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 70 + je .L3114 + cmp dl, 102 + jne .L1005 +.L3114: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3116 + cmp dl, 68 + je .L3118 + cmp dl, 86 + jle .L1005 + jmp .L3120 +.L3116: + cmp dl, 100 + jg .L3122 + cmp dl, 99 + jle .L1005 + jmp .L3118 +.L3122: + cmp dl, 119 + je .L3120 + jmp .L1005 +.L3118: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 3329 + jmp .L8826 +.L3120: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 3073 + jmp .L8812 +.L3111: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L3133 + cmp dl, 114 + jne .L1005 +.L3133: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3136 + cmp dl, 119 + jne .L1005 +.L3136: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pinsrw_insn + mov DWORD [edi+4], 4 + jmp .L8825 +.L2166: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L3142 + cmp dl, 105 + je .L3142 + jmp .L1005 +.L2169: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + jg .L3144 + cmp dl, 66 + jle .L1005 + cmp dl, 67 + jle .L3147 + jmp .L3148 +.L3144: + cmp dl, 98 + jle .L1005 + cmp dl, 99 + jle .L3147 + cmp dl, 100 + jle .L3148 + jmp .L1005 +.L2172: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L3154 + cmp dl, 109 + je .L3154 + jmp .L1005 +.L2175: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + jg .L3156 + cmp dl, 72 + jg .L3157 + cmp dl, 65 + jmp .L8666 +.L3157: + cmp dl, 73 + jle .L3162 + cmp dl, 84 + jle .L1005 + jmp .L3164 +.L3156: + cmp dl, 104 + jg .L3166 + cmp dl, 97 +.L8666: + je .L3159 + jmp .L1005 +.L3166: + cmp dl, 105 + jle .L3162 + cmp dl, 117 + je .L3164 + jmp .L1005 +.L2178: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L3172 + cmp dl, 97 + je .L3172 + jmp .L1005 +.L2181: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L3175 + cmp dl, 110 + je .L3175 + jmp .L1005 +.L2184: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L3177 + cmp dl, 67 + je .L3179 + cmp dl, 82 + jle .L1005 + jmp .L3181 +.L3177: + cmp dl, 99 + jg .L3183 + cmp dl, 98 + jle .L1005 + jmp .L3179 +.L3183: + cmp dl, 115 + je .L3181 + jmp .L1005 +.L2187: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + je .L3188 + cmp dl, 117 + jne .L1005 +.L3188: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L3191 + cmp dl, 98 + jne .L1005 +.L3191: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L3193 + test dl, dl + jle .L3195 + cmp dl, 81 + jle .L999 + jmp .L3197 +.L3193: + cmp dl, 114 + je .L3197 + jmp .L999 +.L3195: + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 39425 + jmp .L8826 +.L3197: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 43521 + jmp .L8826 +.L3179: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L3206 + cmp dl, 112 + je .L3206 + jmp .L1005 +.L3181: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L3209 + cmp dl, 113 + jne .L1005 +.L3209: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L3211 + cmp dl, 73 + je .L3213 + cmp dl, 81 + jle .L1005 + jmp .L3215 +.L3211: + cmp dl, 105 + jg .L3217 + cmp dl, 104 + jle .L1005 + jmp .L3213 +.L3217: + cmp dl, 114 + je .L3215 + jmp .L1005 +.L3213: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L3222 + cmp dl, 116 + je .L3222 + jmp .L1005 +.L3215: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L3225 + cmp dl, 116 + jne .L1005 +.L3225: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 38657 + jmp .L8826 +.L3222: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 49 + jne .L1005 + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 42753 + jmp .L8826 +.L3206: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + jg .L3234 + test dl, dl + jle .L3236 + cmp dl, 72 + jle .L999 + jmp .L3238 +.L3234: + cmp dl, 105 + je .L3238 + jmp .L999 +.L3236: + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 38401 + jmp .L8826 +.L3238: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L3244 + cmp dl, 116 + jne .L1005 +.L3244: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 48 + jle .L1005 + cmp dl, 49 + jle .L3248 + cmp dl, 50 + jle .L3250 + jmp .L1005 +.L3248: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 42497 + jmp .L8826 +.L3250: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 46593 + jmp .L8826 +.L3175: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L3258 + cmp dl, 97 + jne .L1005 +.L3258: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L3261 + cmp dl, 99 + jne .L1005 +.L3261: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L3264 + cmp dl, 99 + jne .L1005 +.L3264: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 36353 + jmp .L8812 +.L3172: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L3270 + cmp dl, 99 + jne .L1005 +.L3270: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L3273 + cmp dl, 99 + jne .L1005 +.L3273: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 35329 + jmp .L8812 +.L3159: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L3279 + cmp dl, 120 + je .L3279 + jmp .L1005 +.L3162: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L3282 + cmp dl, 110 + je .L3282 + jmp .L1005 +.L3164: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L3285 + cmp dl, 108 + jne .L1005 +.L3285: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 46081 + jmp .L8826 +.L3282: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 37889 + jmp .L8826 +.L3279: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 41985 + jmp .L8826 +.L3154: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L3297 + cmp dl, 112 + jne .L1005 +.L3297: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 71 + jg .L3299 + cmp dl, 69 + je .L3301 + cmp dl, 70 + jle .L1005 + jmp .L3303 +.L3299: + cmp dl, 101 + jg .L3305 + cmp dl, 100 + jle .L1005 + jmp .L3301 +.L3305: + cmp dl, 103 + je .L3303 + jmp .L1005 +.L3301: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L3310 + cmp dl, 113 + je .L3310 + jmp .L1005 +.L3303: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L3312 + cmp dl, 69 + je .L3314 + cmp dl, 83 + jle .L1005 + jmp .L3316 +.L3312: + cmp dl, 101 + jg .L3318 + cmp dl, 100 + jle .L1005 + jmp .L3314 +.L3318: + cmp dl, 116 + je .L3316 + jmp .L1005 +.L3314: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 36865 + jmp .L8826 +.L3316: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 40961 + jmp .L8826 +.L3310: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 45057 + jmp .L8826 +.L3147: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L3332 + cmp dl, 99 + je .L3332 + jmp .L1005 +.L3148: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L3335 + cmp dl, 100 + jne .L1005 +.L3335: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 40449 + jmp .L8826 +.L3332: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 44545 + jmp .L8826 +.L3142: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3343 + cmp dl, 68 + je .L3345 + cmp dl, 86 + jle .L1005 + jmp .L3347 +.L3343: + cmp dl, 100 + jg .L3349 + cmp dl, 99 + jle .L1005 + jmp .L3345 +.L3349: + cmp dl, 119 + je .L3347 + jmp .L1005 +.L3345: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 7425 + jmp .L8826 +.L3347: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 7169 +.L8812: + mov DWORD [edi+8], 66560 + jmp .L8696 +.L2162: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L3360 + cmp dl, 116 + jne .L1005 +.L3360: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L3363 + cmp dl, 114 + jne .L1005 +.L3363: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3366 + cmp dl, 119 + jne .L1005 +.L3366: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pextrw_insn + mov DWORD [edi+4], 2 + jmp .L8825 +.L2159: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L3372 + cmp dl, 115 + jne .L1005 +.L3372: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L3375 + cmp dl, 116 + jne .L1005 +.L3375: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L3378 + cmp dl, 105 + jne .L1005 +.L3378: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L3381 + cmp dl, 98 + jne .L1005 +.L3381: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 21505 + jmp .L8827 +.L2145: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L3387 + cmp dl, 115 + je .L3387 + jmp .L1005 +.L2137: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + jg .L3389 + cmp dl, 75 + je .L3391 + cmp dl, 76 + jle .L1005 + jmp .L3393 +.L3389: + cmp dl, 107 + jg .L3395 + cmp dl, 106 + jle .L1005 + jmp .L3391 +.L3395: + cmp dl, 109 + je .L3393 + jmp .L1005 +.L2139: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L3400 + cmp dl, 100 + je .L3400 + jmp .L1005 +.L2142: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L3403 + cmp dl, 100 + je .L3403 + jmp .L1005 +.L2146: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 71 + jg .L3405 + cmp dl, 69 + je .L3407 + cmp dl, 70 + jle .L1005 + jmp .L3409 +.L3405: + cmp dl, 101 + jg .L3411 + cmp dl, 100 + jle .L1005 + jmp .L3407 +.L3411: + cmp dl, 103 + je .L3409 + jmp .L1005 +.L3407: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L3416 + cmp dl, 98 + je .L3416 + jmp .L1005 +.L3409: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3418 + cmp dl, 84 + jg .L3419 + cmp dl, 66 + jmp .L8681 +.L3419: + cmp dl, 85 + jle .L3423 + cmp dl, 86 + jle .L1005 + jmp .L3425 +.L3418: + cmp dl, 116 + jg .L3427 + cmp dl, 98 +.L8681: + jne .L1005 + jmp .L3426 +.L3427: + cmp dl, 117 + jle .L3423 + cmp dl, 119 + je .L3425 + jmp .L1005 +.L3426: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 57346 + jmp .L8825 +.L3425: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 58114 + jmp .L8825 +.L3423: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L3439 + cmp dl, 115 + jne .L1005 +.L3439: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L3442 + cmp dl, 98 + jne .L1005 +.L3442: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 48897 + jmp .L8826 +.L3416: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 20481 + jmp .L8827 +.L3403: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + jg .L3450 + test dl, dl + jle .L3452 + cmp dl, 77 + jle .L999 + jmp .L3454 +.L3450: + cmp dl, 110 + je .L3454 + jmp .L999 +.L3452: + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 56066 + jmp .L8866 +.L3454: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 57090 + jmp .L8866 +.L3400: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 66 + cmp eax, 53 + ja .L1005 + jmp DWORD [.L3482+eax*4] + section .rodata + align 4 + align 4 +.L3482: + dd .L3465 + dd .L1005 + dd .L3468 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L3471 + dd .L1005 + dd .L3474 + dd .L1005 + dd .L3477 + dd .L1005 + dd .L3480 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L3465 + dd .L1005 + dd .L3468 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L3471 + dd .L1005 + dd .L3474 + dd .L1005 + dd .L3477 + dd .L1005 + dd .L3480 + section .text +.L3465: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 64514 + jmp .L8866 +.L3480: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 64770 + jmp .L8866 +.L3468: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 65026 + jmp .L8866 +.L3471: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 54274 + jmp .L8866 +.L3474: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3495 + cmp dl, 72 + jg .L3496 + cmp dl, 66 + jmp .L8665 +.L3496: + cmp dl, 73 + jle .L3501 + cmp dl, 86 + jle .L1005 + jmp .L3503 +.L3495: + cmp dl, 104 + jg .L3505 + cmp dl, 98 +.L8665: + je .L3498 + jmp .L1005 +.L3505: + cmp dl, 105 + jle .L3501 + cmp dl, 119 + je .L3503 + jmp .L1005 +.L3477: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L3511 + cmp dl, 115 + jne .L1005 +.L3511: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3513 + cmp dl, 66 + je .L3515 + cmp dl, 86 + jle .L1005 + jmp .L3517 +.L3513: + cmp dl, 98 + jg .L3519 + cmp dl, 97 + jle .L1005 + jmp .L3515 +.L3519: + cmp dl, 119 + je .L3517 + jmp .L1005 +.L3515: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 56322 + jmp .L8866 +.L3517: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 56578 + jmp .L8866 +.L3498: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 60418 + jmp .L8866 +.L3501: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3533 + cmp dl, 119 + je .L3533 + jmp .L1005 +.L3503: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 60674 + jmp .L8866 +.L3533: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 20737 +.L8827: + mov DWORD [edi+8], 139264 + jmp .L8696 +.L3391: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + jg .L3541 + cmp dl, 83 + je .L3543 + cmp dl, 84 + jle .L1005 + jmp .L3545 +.L3541: + cmp dl, 115 + jg .L3547 + cmp dl, 114 + jle .L1005 + jmp .L3543 +.L3547: + cmp dl, 117 + je .L3545 + jmp .L1005 +.L3393: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L3552 + cmp dl, 112 + jne .L1005 +.L3552: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 71 + jg .L3554 + cmp dl, 69 + je .L3556 + cmp dl, 70 + jle .L1005 + jmp .L3558 +.L3554: + cmp dl, 101 + jg .L3560 + cmp dl, 100 + jle .L1005 + jmp .L3556 +.L3560: + cmp dl, 103 + je .L3558 + jmp .L1005 +.L3556: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L3565 + cmp dl, 113 + je .L3565 + jmp .L1005 +.L3558: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L3568 + cmp dl, 116 + jne .L1005 +.L3568: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3570 + cmp dl, 67 + jg .L3571 + cmp dl, 66 + jmp .L8682 +.L3571: + cmp dl, 68 + jle .L3575 + cmp dl, 86 + jle .L1005 + jmp .L3577 +.L3570: + cmp dl, 99 + jg .L3579 + cmp dl, 98 +.L8682: + jne .L1005 + jmp .L3578 +.L3579: + cmp dl, 100 + jle .L3575 + cmp dl, 119 + je .L3577 + jmp .L1005 +.L3578: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 25602 + jmp .L8866 +.L3575: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 26114 + jmp .L8866 +.L3577: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 25858 + jmp .L8866 +.L3565: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3593 + cmp dl, 67 + jg .L3594 + cmp dl, 66 + jmp .L8683 +.L3594: + cmp dl, 68 + jle .L3598 + cmp dl, 86 + jle .L1005 + jmp .L3600 +.L3593: + cmp dl, 99 + jg .L3602 + cmp dl, 98 +.L8683: + jne .L1005 + jmp .L3601 +.L3602: + cmp dl, 100 + jle .L3598 + cmp dl, 119 + je .L3600 + jmp .L1005 +.L3601: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 29698 + jmp .L8866 +.L3598: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 30210 + jmp .L8866 +.L3600: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 29954 + jmp .L8866 +.L3543: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L3617 + cmp dl, 115 + je .L3617 + jmp .L1005 +.L3545: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L3620 + cmp dl, 115 + jne .L1005 +.L3620: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3623 + cmp dl, 119 + jne .L1005 +.L3623: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L3626 + cmp dl, 98 + jne .L1005 +.L3626: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 26370 + jmp .L8866 +.L3617: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3631 + cmp dl, 68 + je .L3633 + cmp dl, 86 + jle .L1005 + jmp .L3635 +.L3631: + cmp dl, 100 + jg .L3637 + cmp dl, 99 + jle .L1005 + jmp .L3633 +.L3637: + cmp dl, 119 + je .L3635 + jmp .L1005 +.L3633: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3642 + cmp dl, 119 + je .L3642 + jmp .L1005 +.L3635: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L3645 + cmp dl, 98 + jne .L1005 +.L3645: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 25346 + jmp .L8866 +.L3642: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 27394 + jmp .L8866 +.L3387: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L3654 + cmp dl, 101 + jne .L1005 +.L3654: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 15962113 + jmp .L8847 +.L1420: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 25861 + jmp .L8700 +.L1398: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 23 + jmp .L8699 +.L1401: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 19 + jmp .L8699 +.L1404: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + je .L3663 + cmp dl, 117 + je .L3663 + jmp .L1005 +.L1407: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + jg .L3665 + test dl, dl + jle .L3667 + cmp dl, 75 + jle .L999 + jmp .L3669 +.L3665: + cmp dl, 108 + je .L3669 + jmp .L999 +.L3667: + mov DWORD [edi], 53 + jmp .L8699 +.L1410: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3672 + cmp dl, 81 + jg .L3673 + cmp dl, 70 + jmp .L8664 +.L3673: + cmp dl, 82 + jle .L3678 + cmp dl, 86 + jle .L1005 + jmp .L3680 +.L3672: + cmp dl, 113 + jg .L3682 + cmp dl, 102 +.L8664: + je .L3675 + jmp .L1005 +.L3682: + cmp dl, 114 + jle .L3678 + cmp dl, 119 + je .L3680 + jmp .L1005 +.L1413: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L3687 + cmp dl, 67 + jg .L3688 + test dl, dl + jle .L3690 + cmp dl, 66 + jle .L999 + jmp .L3692 +.L3688: + cmp dl, 81 + jle .L999 + cmp dl, 82 + jle .L3696 + jmp .L3697 +.L3687: + cmp dl, 113 + jg .L3699 + cmp dl, 99 + je .L3692 + jmp .L999 +.L3699: + cmp dl, 114 + jle .L3696 + cmp dl, 115 + jle .L3697 + jmp .L999 +.L3690: + mov DWORD [edi], bittest_insn + mov DWORD [edi+4], 303878 + jmp .L9186 +.L1416: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 51 + jmp .L8699 +.L3692: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], bittest_insn + mov DWORD [edi+4], 506630 + jmp .L9186 +.L3696: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], bittest_insn + mov DWORD [edi+4], 439046 + jmp .L9186 +.L3697: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], bittest_insn + mov DWORD [edi+4], 371462 + jmp .L9186 +.L3675: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], bsfr_insn + mov DWORD [edi+4], 48131 + jmp .L9186 +.L3678: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], bsfr_insn + mov DWORD [edi+4], 48387 + jmp .L9186 +.L3680: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L3723 + cmp dl, 97 + jne .L1005 +.L3723: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L3726 + cmp dl, 112 + jne .L1005 +.L3726: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], bswap_insn + mov DWORD [edi+4], 2 + jmp .L8930 +.L3669: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 37 + jmp .L8699 +.L3663: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L3734 + cmp dl, 110 + jne .L1005 +.L3734: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L3737 + cmp dl, 100 + jne .L1005 +.L3737: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], bound_insn + mov DWORD [edi+4], 2 + jmp .L8857 +.L1374: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L3746 + cmp dl, 120 + je .L3746 + jmp .L1005 +.L1377: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + jg .L3748 + cmp dl, 80 + je .L3750 + cmp dl, 87 + jle .L1005 + jmp .L3752 +.L3748: + cmp dl, 112 + jg .L3754 + cmp dl, 111 + jle .L1005 + jmp .L3750 +.L3754: + cmp dl, 120 + je .L3752 + jmp .L1005 +.L1380: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L3759 + cmp dl, 120 + je .L3759 + jmp .L1005 +.L1383: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + jg .L3761 + cmp dl, 73 + je .L3763 + cmp dl, 87 + jle .L1005 + jmp .L3765 +.L3761: + cmp dl, 105 + jg .L3767 + cmp dl, 104 + jle .L1005 + jmp .L3763 +.L3767: + cmp dl, 120 + je .L3765 + jmp .L1005 +.L1386: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L3772 + cmp dl, 109 + je .L3772 + jmp .L1005 +.L1389: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L3775 + cmp dl, 116 + je .L3775 + jmp .L1005 +.L1392: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L3777 + cmp dl, 72 + jg .L3778 + test dl, dl + jg .L999 + jmp .L3785 +.L3778: + cmp dl, 73 + jle .L3782 + cmp dl, 79 + jle .L999 + jmp .L3784 +.L3777: + cmp dl, 105 + jg .L3786 + cmp dl, 104 + jle .L999 + jmp .L3782 +.L3786: + cmp dl, 112 + je .L3784 + jmp .L999 +.L3785: + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L3790 + push ebx + push DWORD LC16 + push esi + push DWORD 0 + call yasm__warning + add esp, 16 +.L3790: + mov DWORD [edi], 9728 + jmp .L8700 +.L3784: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 68 + jmp .L8699 +.L3782: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 70 + jmp .L8699 +.L3775: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L3794 + cmp dl, 101 + jne .L1005 +.L3794: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L3797 + cmp dl, 114 + jne .L1005 +.L3797: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], enter_insn + mov DWORD [edi+4], 1 + jmp .L8857 +.L3772: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L3803 + cmp dl, 115 + jne .L1005 +.L3803: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 1013505 + jmp .L8866 +.L3765: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 66 + jmp .L8699 +.L3763: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 71 + jmp .L8699 +.L3759: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 65 + jmp .L8699 +.L3752: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 67 + jmp .L8699 +.L3750: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 69 + jmp .L8699 +.L3746: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 64 + jmp .L8699 +.L1353: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L3815 + cmp dl, 100 + je .L3815 + jmp .L1005 +.L1356: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L3818 + cmp dl, 116 + je .L3818 + jmp .L1005 +.L1359: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 72 + je .L3821 + cmp dl, 104 + je .L3821 + jmp .L1005 +.L1362: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L3824 + cmp dl, 97 + je .L3824 + jmp .L1005 +.L1365: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L3827 + cmp dl, 109 + je .L3827 + jmp .L1005 +.L1368: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L3830 + cmp dl, 114 + jne .L1005 +.L3830: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L3832 + test dl, dl + jle .L3834 + cmp dl, 79 + jle .L999 + jmp .L3836 +.L3832: + cmp dl, 112 + je .L3836 + jmp .L999 +.L3834: + mov DWORD [edi], arith_insn + mov DWORD [edi+4], 405527 + jmp .L8695 +.L3836: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L3841 + cmp dl, 68 + je .L3843 + cmp dl, 82 + jle .L1005 + jmp .L3845 +.L3841: + cmp dl, 100 + jg .L3846 + cmp dl, 99 + jle .L1005 + jmp .L3843 +.L3846: + cmp dl, 115 + jne .L1005 +.L3845: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 22273 + jmp .L9152 +.L3843: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6706945 + jmp .L9151 +.L3827: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 47 + jle .L1005 + cmp dl, 49 + je .L3858 + cmp dl, 57 + jg .L1005 + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L3861: + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L3862 + mov al, BYTE [ebx+3] + sub eax, 56 + cmp al, 1 + jbe .L9215 +.L3862: + movsx eax, BYTE [ebx+3] + sub eax, 48 + or eax, 128 + jmp .L9201 +.L3858: + inc ecx + mov dl, BYTE [ecx] + test dl, dl + jle .L3861 + cmp dl, 47 + jle .L999 + cmp dl, 53 + jg .L999 + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + movsx eax, BYTE [ebx+4] + jmp .L9269 +.L3824: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L3869 + cmp dl, 116 + jne .L1005 +.L3869: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + jg .L3871 + test dl, dl + jle .L3873 + cmp dl, 65 + jle .L999 + jmp .L3875 +.L3871: + cmp dl, 98 + je .L3875 + jmp .L999 +.L3873: + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 55041 + jmp .L8695 +.L3875: + inc ecx + cmp BYTE [ecx], 0 + jle .L3873 + jmp .L999 +.L3821: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 71 + je .L3882 + cmp dl, 103 + jne .L1005 +.L3882: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], xchg_insn + mov DWORD [edi+4], 14 + jmp .L8695 +.L3818: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L3888 + cmp dl, 115 + jne .L1005 +.L3888: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], xbts_insn +.L8724: + mov DWORD [edi+4], 2 + mov DWORD [edi+8], 6291460 + jmp .L8696 +.L3815: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L3894 + cmp dl, 100 + jne .L1005 +.L3894: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmpxchgxadd_insn + mov DWORD [edi+4], 49156 + jmp .L8930 +.L1332: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + jg .L3899 + cmp dl, 83 + je .L3901 + cmp dl, 87 + jle .L1005 + jmp .L3903 +.L3899: + cmp dl, 115 + jg .L3905 + cmp dl, 114 + jle .L1005 + jmp .L3901 +.L3905: + cmp dl, 120 + je .L3903 + jmp .L1005 +.L1335: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L3910 + cmp dl, 101 + je .L3910 + jmp .L1005 +.L1338: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L3913 + cmp dl, 110 + je .L3913 + jmp .L1005 +.L1341: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 47 + jle .L1005 + cmp dl, 55 + jle .L3917 + jmp .L1005 +.L1344: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L3919 + cmp dl, 118 + je .L3919 + jmp .L1005 +.L1347: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L3922 + cmp dl, 108 + jne .L1005 +.L3922: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L3924 + cmp dl, 79 + jg .L3925 + test dl, dl + jg .L999 + jmp .L3932 +.L3925: + cmp dl, 80 + jle .L3929 + cmp dl, 82 + jle .L999 + jmp .L3931 +.L3924: + cmp dl, 112 + jg .L3933 + cmp dl, 111 + jle .L999 + jmp .L3929 +.L3933: + cmp dl, 115 + je .L3931 + jmp .L999 +.L3932: + mov DWORD [edi], f6_insn + mov DWORD [edi+4], 1028 + jmp .L8695 +.L3929: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L3939 + cmp dl, 68 + je .L3941 + cmp dl, 82 + jle .L1005 + jmp .L3943 +.L3939: + cmp dl, 100 + jg .L3945 + cmp dl, 99 + jle .L1005 + jmp .L3941 +.L3945: + cmp dl, 115 + je .L3943 + jmp .L1005 +.L3931: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L3949 + cmp dl, 68 + je .L3951 + cmp dl, 82 + jle .L1005 + jmp .L3953 +.L3949: + cmp dl, 100 + jg .L3954 + cmp dl, 99 + jle .L1005 + jmp .L3951 +.L3954: + cmp dl, 115 + jne .L1005 +.L3953: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15948033 + jmp .L9152 +.L3951: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15882497 + jmp .L9151 +.L3943: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 22785 + jmp .L9152 +.L3941: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6707457 + jmp .L9151 +.L3919: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + jg .L3970 + cmp dl, 76 + jg .L3971 + cmp dl, 67 + jg .L3972 + test dl, dl + jle .L3974 + cmp dl, 65 + je .L3976 + jmp .L999 +.L3972: + cmp dl, 71 + jg .L3978 + cmp dl, 68 + jle .L3980 + jmp .L999 +.L3978: + cmp dl, 72 + jle .L3983 + cmp dl, 75 + jle .L999 + jmp .L3985 +.L3971: + cmp dl, 82 + jg .L3987 + cmp dl, 78 + jg .L3988 + cmp dl, 77 + jle .L3990 + jmp .L3991 +.L3988: + cmp dl, 81 + je .L3994 + jmp .L999 +.L3987: + cmp dl, 84 + jg .L3996 + cmp dl, 83 + jle .L3998 + jmp .L999 +.L3996: + cmp dl, 85 + jle .L4001 + cmp dl, 89 + jle .L999 + jmp .L4003 +.L3970: + cmp dl, 109 + jg .L4005 + cmp dl, 100 + jg .L4006 + cmp dl, 97 + je .L3976 + cmp dl, 99 + jle .L999 + jmp .L3980 +.L4006: + cmp dl, 104 + jg .L4010 + cmp dl, 103 + jle .L999 + jmp .L3983 +.L4010: + cmp dl, 107 + jle .L999 + cmp dl, 108 + jle .L3985 + jmp .L3990 +.L4005: + cmp dl, 115 + jg .L4016 + cmp dl, 112 + jg .L4017 + cmp dl, 110 + jle .L3991 + jmp .L999 +.L4017: + cmp dl, 113 + jle .L3994 + cmp dl, 114 + jle .L999 + jmp .L3998 +.L4016: + cmp dl, 117 + jg .L4023 + cmp dl, 116 + jle .L999 + jmp .L4001 +.L4023: + cmp dl, 122 + je .L4003 + jmp .L999 +.L3974: + mov DWORD [edi], mov_insn + mov DWORD [edi+4], 45 + jmp .L8695 +.L3976: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L4030 + cmp dl, 112 + je .L4030 + jmp .L1005 +.L3980: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + jg .L4032 + test dl, dl + jle .L4034 + cmp dl, 80 + jle .L999 + jmp .L4036 +.L4032: + cmp dl, 113 + je .L4036 + jmp .L999 +.L4034: + mov DWORD [edi], movd_insn + mov DWORD [edi+4], 8 + jmp .L8866 +.L3983: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L4041 + cmp dl, 76 + je .L4043 + cmp dl, 79 + jle .L1005 + jmp .L4045 +.L4041: + cmp dl, 108 + jg .L4047 + cmp dl, 107 + jle .L1005 + jmp .L4043 +.L4047: + cmp dl, 112 + je .L4045 + jmp .L1005 +.L3985: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L4051 + cmp dl, 72 + je .L4053 + cmp dl, 79 + jle .L1005 + jmp .L4055 +.L4051: + cmp dl, 104 + jg .L4057 + cmp dl, 103 + jle .L1005 + jmp .L4053 +.L4057: + cmp dl, 112 + je .L4055 + jmp .L1005 +.L3990: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L4062 + cmp dl, 115 + je .L4062 + jmp .L1005 +.L3991: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L4065 + cmp dl, 116 + je .L4065 + jmp .L1005 +.L3994: + inc ecx + mov dl, BYTE [ecx] + test dl, dl + jle .L4068 + cmp dl, 50 + je .L4070 + jmp .L999 +.L4068: + mov DWORD [edi], movq_insn + mov DWORD [edi+4], 5 +.L8866: + mov DWORD [edi+8], 8192 + jmp .L8696 +.L3998: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 66 + cmp eax, 54 + ja .L1005 + jmp DWORD [.L4093+eax*4] + section .rodata + align 4 + align 4 +.L4093: + dd .L4076 + dd .L1005 + dd .L4079 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L4082 + dd .L1005 + dd .L4085 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L4088 + dd .L4091 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L4076 + dd .L1005 + dd .L4079 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L4082 + dd .L1005 + dd .L4085 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L4088 + dd .L4091 + section .text +.L4001: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L4095 + cmp dl, 112 + je .L4095 + jmp .L1005 +.L4003: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L4098 + cmp dl, 120 + jne .L1005 +.L4098: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movszx_insn + mov DWORD [edi+4], 46597 + jmp .L9186 +.L4095: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4103 + cmp dl, 68 + je .L4105 + cmp dl, 82 + jle .L1005 + jmp .L4107 +.L4103: + cmp dl, 100 + jg .L4109 + cmp dl, 99 + jle .L1005 + jmp .L4105 +.L4109: + cmp dl, 115 + je .L4107 + jmp .L1005 +.L4105: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movaupd_insn + mov DWORD [edi+4], 4098 + jmp .L9151 +.L4107: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movaups_insn + mov DWORD [edi+4], 4098 + jmp .L9152 +.L4091: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + jg .L4119 + test dl, dl + jle .L4121 + cmp dl, 67 + jle .L999 + jmp .L4123 +.L4119: + cmp dl, 100 + je .L4123 + jmp .L999 +.L4121: + mov DWORD [edi], movszx_insn + mov DWORD [edi+4], 48645 + jmp .L9186 +.L4076: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 41985 + jmp .L8695 +.L4088: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1090817 + jmp .L8695 +.L4079: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movsd_insn + mov DWORD [edi+4], 4 + jmp .L8695 +.L4082: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4236545 + jmp .L8695 +.L4085: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movss_insn + mov DWORD [edi+4], 3 + jmp .L9152 +.L4123: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], movsxd_insn + mov DWORD [edi+4], 1 + jmp .L9148 +.L4070: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L4149 + cmp dl, 100 + jne .L1005 +.L4149: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L4152 + cmp dl, 113 + jne .L1005 +.L4152: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movq2dq_insn + jmp .L9262 +.L4065: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + jg .L4157 + cmp dl, 72 + jg .L4158 + cmp dl, 68 + jne .L1005 + jmp .L4170 +.L4158: + cmp dl, 73 + jle .L4162 + cmp dl, 79 + jle .L1005 + cmp dl, 80 + jle .L4165 + jmp .L4166 +.L4157: + cmp dl, 105 + jg .L4168 + cmp dl, 100 + je .L4170 + cmp dl, 104 + jle .L1005 + jmp .L4162 +.L4168: + cmp dl, 111 + jle .L1005 + cmp dl, 112 + jle .L4165 + cmp dl, 113 + jle .L4166 + jmp .L1005 +.L4170: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L4177 + cmp dl, 113 + je .L4177 + jmp .L1005 +.L4162: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movnti_insn + mov DWORD [edi+4], 2 +.L8847: + mov DWORD [edi+8], 128 + jmp .L8696 +.L4165: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4182 + cmp dl, 68 + je .L4184 + cmp dl, 82 + jle .L1005 + jmp .L4186 +.L4182: + cmp dl, 100 + jg .L4188 + cmp dl, 99 + jle .L1005 + jmp .L4184 +.L4188: + cmp dl, 115 + je .L4186 + jmp .L1005 +.L4166: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movntq_insn + jmp .L9265 +.L4186: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movntps_insn + jmp .L9265 +.L4184: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movntpddq_insn + mov DWORD [edi+4], 11009 + jmp .L9151 +.L4177: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movntpddq_insn + mov DWORD [edi+4], 59137 + jmp .L9151 +.L4062: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 75 + je .L4205 + cmp dl, 107 + jne .L1005 +.L4205: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L4208 + cmp dl, 112 + jne .L1005 +.L4208: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4210 + cmp dl, 68 + je .L4212 + cmp dl, 82 + jle .L1005 + jmp .L4214 +.L4210: + cmp dl, 100 + jg .L4216 + cmp dl, 99 + jle .L1005 + jmp .L4212 +.L4216: + cmp dl, 115 + je .L4214 + jmp .L1005 +.L4212: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movmskpd_insn + jmp .L9262 +.L4214: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movmskps_insn + jmp .L9265 +.L4053: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L4227 + cmp dl, 112 + je .L4227 + jmp .L1005 +.L4055: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4229 + cmp dl, 68 + je .L4231 + cmp dl, 82 + jle .L1005 + jmp .L4233 +.L4229: + cmp dl, 100 + jg .L4235 + cmp dl, 99 + jle .L1005 + jmp .L4231 +.L4235: + cmp dl, 115 + je .L4233 + jmp .L1005 +.L4231: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movhlpd_insn + mov DWORD [edi+4], 4610 + jmp .L9151 +.L4233: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movhlps_insn + mov DWORD [edi+4], 4610 + jmp .L9152 +.L4227: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L4246 + cmp dl, 115 + jne .L1005 +.L4246: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movhllhps_insn + mov DWORD [edi+4], 5633 + jmp .L9152 +.L4043: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L4252 + cmp dl, 112 + je .L4252 + jmp .L1005 +.L4045: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4254 + cmp dl, 68 + je .L4256 + cmp dl, 82 + jle .L1005 + jmp .L4258 +.L4254: + cmp dl, 100 + jg .L4260 + cmp dl, 99 + jle .L1005 + jmp .L4256 +.L4260: + cmp dl, 115 + je .L4258 + jmp .L1005 +.L4256: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movhlpd_insn + mov DWORD [edi+4], 5634 + jmp .L9151 +.L4258: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movhlps_insn + mov DWORD [edi+4], 5634 + jmp .L9152 +.L4252: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L4271 + cmp dl, 115 + jne .L1005 +.L4271: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movhllhps_insn + mov DWORD [edi+4], 4609 + jmp .L9152 +.L4036: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L4276 + cmp dl, 50 + jg .L4277 + cmp dl, 49 + jle .L1005 + jmp .L4282 +.L4277: + cmp dl, 65 + je .L4281 + jmp .L1005 +.L4276: + cmp dl, 97 + jg .L4283 + cmp dl, 85 + jle .L4285 + cmp dl, 96 + jle .L1005 + jmp .L4281 +.L4283: + cmp dl, 117 + je .L4285 + jmp .L1005 +.L4282: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L4290 + cmp dl, 113 + je .L4290 + jmp .L1005 +.L4281: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movdqau_insn + mov DWORD [edi+4], 26114 + jmp .L9151 +.L4285: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movdqau_insn + mov DWORD [edi+4], 62210 + jmp .L9151 +.L4290: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movdq2q_insn + jmp .L9262 +.L4030: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4301 + cmp dl, 68 + je .L4303 + cmp dl, 82 + jle .L1005 + jmp .L4305 +.L4301: + cmp dl, 100 + jg .L4307 + cmp dl, 99 + jle .L1005 + jmp .L4303 +.L4307: + cmp dl, 115 + je .L4305 + jmp .L1005 +.L4303: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movaupd_insn + mov DWORD [edi+4], 10242 + jmp .L9151 +.L4305: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movaups_insn + mov DWORD [edi+4], 10242 + jmp .L9152 +.L3917: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + movsx eax, BYTE [ebx+2] + sub eax, 48 + or eax, 112 + jmp .L9201 +.L3913: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4318 + cmp dl, 80 + je .L4320 + cmp dl, 82 + jle .L1005 + jmp .L4322 +.L4318: + cmp dl, 112 + jg .L4324 + cmp dl, 111 + jle .L1005 + jmp .L4320 +.L4324: + cmp dl, 115 + je .L4322 + jmp .L1005 +.L4320: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4328 + cmp dl, 68 + je .L4330 + cmp dl, 82 + jle .L1005 + jmp .L4332 +.L4328: + cmp dl, 100 + jg .L4334 + cmp dl, 99 + jle .L1005 + jmp .L4330 +.L4334: + cmp dl, 115 + je .L4332 + jmp .L1005 +.L4322: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4338 + cmp dl, 68 + je .L4340 + cmp dl, 82 + jle .L1005 + jmp .L4342 +.L4338: + cmp dl, 100 + jg .L4343 + cmp dl, 99 + jle .L1005 + jmp .L4340 +.L4343: + cmp dl, 115 + jne .L1005 +.L4342: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15949057 + jmp .L9152 +.L4340: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15883521 + jmp .L9151 +.L4332: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 23809 + jmp .L9152 +.L4330: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6708481 + jmp .L9151 +.L3910: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L4360 + cmp dl, 110 + jne .L1005 +.L4360: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L4363 + cmp dl, 99 + jne .L1005 +.L4363: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L4366 + cmp dl, 101 + jne .L1005 +.L4366: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], threebyte_insn + mov DWORD [edi+4], 263122945 + jmp .L9024 +.L3901: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 75 + je .L4372 + cmp dl, 107 + je .L4372 + jmp .L1005 +.L3903: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4374 + cmp dl, 80 + je .L4376 + cmp dl, 82 + jle .L1005 + jmp .L4378 +.L4374: + cmp dl, 112 + jg .L4380 + cmp dl, 111 + jle .L1005 + jmp .L4376 +.L4380: + cmp dl, 115 + je .L4378 + jmp .L1005 +.L4376: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4384 + cmp dl, 68 + je .L4386 + cmp dl, 82 + jle .L1005 + jmp .L4388 +.L4384: + cmp dl, 100 + jg .L4390 + cmp dl, 99 + jle .L1005 + jmp .L4386 +.L4390: + cmp dl, 115 + je .L4388 + jmp .L1005 +.L4378: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4394 + cmp dl, 68 + je .L4396 + cmp dl, 82 + jle .L1005 + jmp .L4398 +.L4394: + cmp dl, 100 + jg .L4399 + cmp dl, 99 + jle .L1005 + jmp .L4396 +.L4399: + cmp dl, 115 + jne .L1005 +.L4398: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15949569 + jmp .L9152 +.L4396: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15884033 + jmp .L9151 +.L4388: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 24321 + jmp .L9152 +.L4386: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6708993 + jmp .L9151 +.L4372: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L4416 + cmp dl, 109 + jne .L1005 +.L4416: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L4419 + cmp dl, 111 + jne .L1005 +.L4419: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L4422 + cmp dl, 118 + jne .L1005 +.L4422: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + jg .L4424 + cmp dl, 68 + je .L4426 + cmp dl, 80 + jle .L1005 + jmp .L4428 +.L4424: + cmp dl, 100 + jg .L4430 + cmp dl, 99 + jle .L1005 + jmp .L4426 +.L4430: + cmp dl, 113 + je .L4428 + jmp .L1005 +.L4426: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L4435 + cmp dl, 113 + je .L4435 + jmp .L1005 +.L4428: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], maskmovq_insn +.L9240: + mov DWORD [edi+4], 1 +.L8825: + mov DWORD [edi+8], 8256 + jmp .L8696 +.L4435: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + je .L4441 + cmp dl, 117 + jne .L1005 +.L4441: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], maskmovdqu_insn +.L9262: + mov DWORD [edi+4], 1 + jmp .L9151 +.L1305: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4446 + cmp dl, 65 + je .L4448 + cmp dl, 82 + jle .L1005 + jmp .L4450 +.L4446: + cmp dl, 97 + jg .L4452 + cmp dl, 96 + jle .L1005 + jmp .L4448 +.L4452: + cmp dl, 115 + je .L4450 + jmp .L1005 +.L1308: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L4457 + cmp dl, 99 + je .L4457 + jmp .L1005 +.L1311: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 22 + jmp .L8699 +.L1314: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + jg .L4460 + cmp dl, 75 + jg .L4461 + test dl, dl + jg .L999 + jmp .L4468 +.L4461: + cmp dl, 76 + jle .L4465 + cmp dl, 85 + jle .L999 + jmp .L4467 +.L4460: + cmp dl, 108 + jg .L4469 + cmp dl, 107 + jle .L999 + jmp .L4465 +.L4469: + cmp dl, 118 + je .L4467 + jmp .L999 +.L4468: + mov DWORD [edi], 55 + jmp .L8699 +.L1317: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 18 + jmp .L8699 +.L1320: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 47 + jle .L1005 + cmp dl, 55 + jle .L4476 + jmp .L1005 +.L1323: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L4478 + push ebx + push DWORD LC16 + push esi + push DWORD 0 + call yasm__warning + add esp, 16 +.L4478: + mov DWORD [edi], 15875 + jmp .L8700 +.L1326: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 50 + jmp .L8699 +.L4476: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + movsx eax, BYTE [ebx+2] + sub eax, 48 + or eax, 160 + jmp .L9201 +.L4465: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 39 + jmp .L8699 +.L4467: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4483 + cmp dl, 79 + jg .L4484 + test dl, dl + jg .L999 + jmp .L4491 +.L4484: + cmp dl, 80 + jle .L4488 + cmp dl, 82 + jle .L999 + jmp .L4490 +.L4483: + cmp dl, 112 + jg .L4492 + cmp dl, 111 + jle .L999 + jmp .L4488 +.L4492: + cmp dl, 115 + je .L4490 + jmp .L999 +.L4491: + mov DWORD [edi], f6_insn + mov DWORD [edi+4], 1540 + jmp .L8695 +.L4488: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4498 + cmp dl, 68 + je .L4500 + cmp dl, 82 + jle .L1005 + jmp .L4502 +.L4498: + cmp dl, 100 + jg .L4504 + cmp dl, 99 + jle .L1005 + jmp .L4500 +.L4504: + cmp dl, 115 + je .L4502 + jmp .L1005 +.L4490: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4508 + cmp dl, 68 + je .L4510 + cmp dl, 82 + jle .L1005 + jmp .L4512 +.L4508: + cmp dl, 100 + jg .L4513 + cmp dl, 99 + jle .L1005 + jmp .L4510 +.L4513: + cmp dl, 115 + jne .L1005 +.L4512: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15949313 + jmp .L9152 +.L4510: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15883777 + jmp .L9151 +.L4502: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 24065 + jmp .L9152 +.L4500: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6708737 + jmp .L9151 +.L4457: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], incdec_insn + mov DWORD [edi+4], 83974 + jmp .L8695 +.L4448: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 9985 + jmp .L8695 +.L4450: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 12033 + jmp .L8695 +.L1263: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L4545 + cmp dl, 108 + je .L4545 + jmp .L1005 +.L1266: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L4548 + cmp dl, 119 + je .L4548 + jmp .L1005 +.L1269: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + jg .L4550 + cmp dl, 79 + je .L4552 + cmp dl, 80 + jle .L1005 + jmp .L4554 +.L4550: + cmp dl, 111 + jg .L4556 + cmp dl, 110 + jle .L1005 + jmp .L4552 +.L4556: + cmp dl, 113 + je .L4554 + jmp .L1005 +.L1272: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 21 + jmp .L8699 +.L1275: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L4561 + cmp dl, 69 + jg .L4562 + cmp dl, 66 + jg .L4563 + test dl, dl + jg .L999 + jmp .L4579 +.L4563: + cmp dl, 67 + jle .L4567 + cmp dl, 68 + jle .L4569 + jmp .L999 +.L4562: + cmp dl, 72 + jg .L4571 + cmp dl, 70 + jle .L4573 + jmp .L999 +.L4571: + cmp dl, 73 + jle .L4576 + cmp dl, 83 + jle .L999 + jmp .L4578 +.L4561: + cmp dl, 102 + jg .L4580 + cmp dl, 99 + jg .L4581 + cmp dl, 98 + jle .L999 + jmp .L4567 +.L4581: + cmp dl, 100 + jle .L4569 + cmp dl, 101 + jle .L999 + jmp .L4573 +.L4580: + cmp dl, 105 + jg .L4587 + cmp dl, 104 + jle .L999 + jmp .L4576 +.L4587: + cmp dl, 116 + je .L4578 + jmp .L999 +.L4579: + mov DWORD [edi], 17 + jmp .L8699 +.L1278: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L4591 + cmp dl, 67 + jg .L4592 + cmp dl, 66 + jle .L1005 + jmp .L4594 +.L4592: + cmp dl, 78 + jle .L1005 + cmp dl, 79 + jle .L4598 + jmp .L4599 +.L4591: + cmp dl, 110 + jg .L4601 + cmp dl, 99 + je .L4594 + jmp .L1005 +.L4601: + cmp dl, 111 + jle .L4598 + cmp dl, 112 + jle .L4599 + jmp .L1005 +.L1281: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L4607 + cmp dl, 109 + je .L4607 + jmp .L1005 +.L1284: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + je .L4610 + cmp dl, 117 + je .L4610 + jmp .L1005 +.L1287: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 49 + jg .L4612 + cmp dl, 48 + jmp .L8663 +.L4612: + cmp dl, 52 + jle .L4614 + cmp dl, 56 +.L8663: + je .L4614 + jmp .L1005 +.L1290: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 11777 + jmp .L8700 +.L1293: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L4620 + cmp dl, 116 + je .L4620 + jmp .L1005 +.L1296: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L4623 + cmp dl, 100 + je .L4623 + jmp .L1005 +.L1299: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 49 + jmp .L8699 +.L4623: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L4626 + test dl, dl + jle .L4628 + cmp dl, 68 + jle .L999 + jmp .L4630 +.L4626: + cmp dl, 101 + je .L4630 + jmp .L999 +.L4628: + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1087745 + jmp .L8695 +.L4630: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2136065 + jmp .L9186 +.L4620: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L4638 + cmp dl, 79 + jg .L4639 + cmp dl, 68 + jne .L1005 + jmp .L4651 +.L4639: + cmp dl, 80 + jle .L4643 + cmp dl, 82 + jle .L1005 + cmp dl, 83 + jle .L4646 + jmp .L4647 +.L4638: + cmp dl, 112 + jg .L4649 + cmp dl, 100 + je .L4651 + cmp dl, 111 + jle .L1005 + jmp .L4643 +.L4649: + cmp dl, 114 + jle .L1005 + cmp dl, 115 + jle .L4646 + cmp dl, 116 + jle .L4647 + jmp .L1005 +.L4651: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L4658 + cmp dl, 113 + je .L4658 + jmp .L1005 +.L4643: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4660 + cmp dl, 72 + jg .L4661 + cmp dl, 68 + jmp .L8662 +.L4661: + cmp dl, 73 + jle .L4666 + cmp dl, 82 + jle .L1005 + jmp .L4668 +.L4660: + cmp dl, 104 + jg .L4670 + cmp dl, 100 +.L8662: + je .L4663 + jmp .L1005 +.L4670: + cmp dl, 105 + jle .L4666 + cmp dl, 115 + je .L4668 + jmp .L1005 +.L4646: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4675 + cmp dl, 72 + jg .L4676 + cmp dl, 68 + jmp .L8661 +.L4676: + cmp dl, 73 + jle .L4681 + cmp dl, 82 + jle .L1005 + jmp .L4683 +.L4675: + cmp dl, 104 + jg .L4685 + cmp dl, 100 +.L8661: + je .L4678 + jmp .L1005 +.L4685: + cmp dl, 105 + jle .L4681 + cmp dl, 115 + je .L4683 + jmp .L1005 +.L4647: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4690 + cmp dl, 80 + je .L4692 + cmp dl, 82 + jle .L1005 + jmp .L4694 +.L4690: + cmp dl, 112 + jg .L4696 + cmp dl, 111 + jle .L1005 + jmp .L4692 +.L4696: + cmp dl, 115 + je .L4694 + jmp .L1005 +.L4692: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4700 + cmp dl, 68 + je .L4702 + cmp dl, 82 + jle .L1005 + jmp .L4704 +.L4700: + cmp dl, 100 + jg .L4706 + cmp dl, 99 + jle .L1005 + jmp .L4702 +.L4706: + cmp dl, 115 + je .L4704 + jmp .L1005 +.L4694: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4710 + cmp dl, 68 + je .L4712 + cmp dl, 82 + jle .L1005 + jmp .L4714 +.L4710: + cmp dl, 100 + jg .L4716 + cmp dl, 99 + jle .L1005 + jmp .L4712 +.L4716: + cmp dl, 115 + je .L4714 + jmp .L1005 +.L4712: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + je .L4721 + jmp .L1005 +.L4714: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + jne .L1005 + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L4724 + cmp dl, 115 + jne .L1005 +.L4724: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L4727 + cmp dl, 105 + jne .L1005 +.L4727: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15936513 + jmp .L9152 +.L4721: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L4733 + cmp dl, 115 + jne .L1005 +.L4733: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L4736 + cmp dl, 105 + jne .L1005 +.L4736: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15870977 + jmp .L9151 +.L4702: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + je .L4742 + jmp .L1005 +.L4704: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + jne .L1005 + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L4744 + cmp dl, 68 + je .L4746 + cmp dl, 79 + jle .L1005 + jmp .L4748 +.L4744: + cmp dl, 100 + jg .L4750 + cmp dl, 99 + jle .L1005 + jmp .L4746 +.L4750: + cmp dl, 112 + je .L4748 + jmp .L1005 +.L4746: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L4755 + cmp dl, 113 + je .L4755 + jmp .L1005 +.L4748: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L4758 + cmp dl, 105 + jne .L1005 +.L4758: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 11265 + jmp .L9152 +.L4755: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15948545 + jmp .L9151 +.L4742: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L4766 + cmp dl, 68 + je .L4768 + cmp dl, 79 + jle .L1005 + jmp .L4770 +.L4766: + cmp dl, 100 + jg .L4772 + cmp dl, 99 + jle .L1005 + jmp .L4768 +.L4772: + cmp dl, 112 + je .L4770 + jmp .L1005 +.L4768: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L4777 + cmp dl, 113 + je .L4777 + jmp .L1005 +.L4770: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L4780 + cmp dl, 105 + jne .L1005 +.L4780: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6695937 + jmp .L9151 +.L4777: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6743553 + jmp .L9151 +.L4681: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + je .L4789 + jmp .L1005 +.L4683: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + je .L4791 + jmp .L1005 +.L4678: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + jne .L1005 + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L4794 + cmp dl, 115 + jne .L1005 +.L4794: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4796 + cmp dl, 73 + je .L4798 + cmp dl, 82 + jle .L1005 + jmp .L4800 +.L4796: + cmp dl, 105 + jg .L4802 + cmp dl, 104 + jle .L1005 + jmp .L4798 +.L4802: + cmp dl, 115 + je .L4800 + jmp .L1005 +.L4798: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15871233 + jmp .L9151 +.L4800: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15882753 + jmp .L9151 +.L4791: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L4813 + cmp dl, 115 + jne .L1005 +.L4813: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + jg .L4815 + cmp dl, 68 + je .L4817 + cmp dl, 72 + jle .L1005 + jmp .L4819 +.L4815: + cmp dl, 100 + jg .L4821 + cmp dl, 99 + jle .L1005 + jmp .L4817 +.L4821: + cmp dl, 105 + je .L4819 + jmp .L1005 +.L4817: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15948289 + jmp .L9151 +.L4819: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15936769 + jmp .L9152 +.L4789: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L4832 + cmp dl, 115 + jne .L1005 +.L4832: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4834 + cmp dl, 68 + je .L4836 + cmp dl, 82 + jle .L1005 + jmp .L4838 +.L4834: + cmp dl, 100 + jg .L4840 + cmp dl, 99 + jle .L1005 + jmp .L4836 +.L4840: + cmp dl, 115 + je .L4838 + jmp .L1005 +.L4836: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15870465 + jmp .L9151 +.L4838: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15936001 + jmp .L9152 +.L4666: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + je .L4851 + jmp .L1005 +.L4668: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + je .L4853 + jmp .L1005 +.L4663: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + jne .L1005 + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L4855 + cmp dl, 68 + je .L4857 + cmp dl, 79 + jle .L1005 + jmp .L4859 +.L4855: + cmp dl, 100 + jg .L4861 + cmp dl, 99 + jle .L1005 + jmp .L4857 +.L4861: + cmp dl, 112 + je .L4859 + jmp .L1005 +.L4857: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L4866 + cmp dl, 113 + je .L4866 + jmp .L1005 +.L4859: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4868 + cmp dl, 73 + je .L4870 + cmp dl, 82 + jle .L1005 + jmp .L4872 +.L4868: + cmp dl, 105 + jg .L4874 + cmp dl, 104 + jle .L1005 + jmp .L4870 +.L4874: + cmp dl, 115 + je .L4872 + jmp .L1005 +.L4870: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6696193 + jmp .L9151 +.L4872: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6707713 + jmp .L9151 +.L4866: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15918593 + jmp .L9151 +.L4853: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L4887 + cmp dl, 68 + je .L4889 + cmp dl, 79 + jle .L1005 + jmp .L4891 +.L4887: + cmp dl, 100 + jg .L4892 + cmp dl, 99 + jle .L1005 + jmp .L4889 +.L4892: + cmp dl, 112 + jne .L1005 +.L4891: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + jg .L4896 + cmp dl, 68 + je .L4898 + cmp dl, 72 + jle .L1005 + jmp .L4900 +.L4896: + cmp dl, 100 + jg .L4902 + cmp dl, 99 + jle .L1005 + jmp .L4898 +.L4902: + cmp dl, 105 + je .L4900 + jmp .L1005 +.L4889: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L4907 + cmp dl, 113 + jne .L1005 +.L4907: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6707969 + jmp .L9151 +.L4898: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 23041 + jmp .L9151 +.L4900: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 11521 + jmp .L9152 +.L4851: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L4919 + cmp dl, 112 + jne .L1005 +.L4919: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4921 + cmp dl, 68 + je .L4923 + cmp dl, 82 + jle .L1005 + jmp .L4925 +.L4921: + cmp dl, 100 + jg .L4927 + cmp dl, 99 + jle .L1005 + jmp .L4923 +.L4927: + cmp dl, 115 + je .L4925 + jmp .L1005 +.L4923: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6695425 + jmp .L9151 +.L4925: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 10753 + jmp .L9152 +.L4658: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + jne .L1005 + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L4939 + cmp dl, 112 + jne .L1005 +.L4939: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4941 + cmp dl, 68 + je .L4943 + cmp dl, 82 + jle .L1005 + jmp .L4945 +.L4941: + cmp dl, 100 + jg .L4947 + cmp dl, 99 + jle .L1005 + jmp .L4943 +.L4947: + cmp dl, 115 + je .L4945 + jmp .L1005 +.L4943: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15984129 + jmp .L9151 +.L4945: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 23297 + jmp .L9151 +.L4614: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L4958 + cmp BYTE [ebx+2], 56 + je .L9215 +.L4958: + movsx eax, BYTE [ebx+2] + sub eax, 48 + or eax, 144 + jmp .L9201 +.L4610: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L4960 + cmp dl, 105 + jne .L1005 +.L4960: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L4963 + cmp dl, 100 + jne .L1005 +.L4963: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 1024513 + jmp .L8930 +.L4607: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L4969 + cmp dl, 105 + jne .L1005 +.L4969: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L4972 + cmp dl, 115 + jne .L1005 +.L4972: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4974 + cmp dl, 68 + je .L4976 + cmp dl, 82 + jle .L1005 + jmp .L4978 +.L4974: + cmp dl, 100 + jg .L4980 + cmp dl, 99 + jle .L1005 + jmp .L4976 +.L4980: + cmp dl, 115 + je .L4978 + jmp .L1005 +.L4976: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6696705 + jmp .L9151 +.L4978: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 12033 + jmp .L9152 +.L4594: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 62721 + jmp .L8695 +.L4599: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + jg .L4993 + cmp dl, 78 + jg .L4994 + cmp dl, 69 + jg .L4995 + test dl, dl + jle .L4997 + cmp dl, 68 + jle .L999 + jmp .L4999 +.L4995: + cmp dl, 76 + je .L5002 + cmp dl, 77 + jle .L999 + jmp .L5004 +.L4994: + cmp dl, 83 + jg .L5006 + cmp dl, 79 + jle .L5008 + cmp dl, 80 + jle .L5010 + cmp dl, 82 + jle .L999 + jmp .L5012 +.L5006: + cmp dl, 85 + je .L5015 + cmp dl, 87 + jle .L999 + jmp .L5017 +.L4993: + cmp dl, 111 + jg .L5019 + cmp dl, 107 + jg .L5020 + cmp dl, 101 + je .L4999 + jmp .L999 +.L5020: + cmp dl, 108 + jle .L5002 + cmp dl, 109 + jle .L999 + cmp dl, 110 + jle .L5004 + jmp .L5008 +.L5019: + cmp dl, 116 + jg .L5027 + cmp dl, 112 + jle .L5010 + cmp dl, 115 + je .L5012 + jmp .L999 +.L5027: + cmp dl, 117 + jle .L5015 + cmp dl, 120 + je .L5017 + jmp .L999 +.L4997: + mov DWORD [edi], arith_insn + mov DWORD [edi+4], 473111 + jmp .L8695 +.L4598: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L5036 + cmp dl, 118 + jne .L1005 +.L5036: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 57 + ja .L1005 + jmp DWORD [.L5073+eax*4] + section .rodata + align 4 + align 4 +.L5073: + dd .L5041 + dd .L5044 + dd .L5195 + dd .L1005 + dd .L5071 + dd .L1005 + dd .L5053 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5056 + dd .L1005 + dd .L5059 + dd .L5062 + dd .L5065 + dd .L1005 + dd .L1005 + dd .L5068 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5071 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5041 + dd .L5044 + dd .L5195 + dd .L1005 + dd .L5071 + dd .L1005 + dd .L5053 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5056 + dd .L1005 + dd .L5059 + dd .L5062 + dd .L5065 + dd .L1005 + dd .L1005 + dd .L5068 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5071 + section .text +.L5062: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 3 + jmp .L9010 +.L5059: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 57 + ja .L1005 + jmp DWORD [.L5109+eax*4] + section .rodata + align 4 + align 4 +.L5109: + dd .L5080 + dd .L5083 + dd .L5086 + dd .L1005 + dd .L5107 + dd .L1005 + dd .L5092 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5095 + dd .L1005 + dd .L1005 + dd .L5098 + dd .L5101 + dd .L1005 + dd .L1005 + dd .L5104 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5107 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5080 + dd .L5083 + dd .L5086 + dd .L1005 + dd .L5107 + dd .L1005 + dd .L5092 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5095 + dd .L1005 + dd .L1005 + dd .L5098 + dd .L5101 + dd .L1005 + dd .L1005 + dd .L5104 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5107 + section .text +.L5044: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L5110 + test dl, dl + jle .L9256 + cmp dl, 68 + jle .L999 + jmp .L5114 +.L5110: + cmp dl, 101 + je .L5114 + jmp .L999 +.L5112: +.L5047: +.L5041: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L5122 + test dl, dl + jle .L9255 + cmp dl, 68 + jle .L999 + jmp .L5086 +.L5122: + cmp dl, 101 + je .L5086 + jmp .L999 +.L5124: +.L5050: +.L5071: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 1027 + jmp .L9010 +.L5068: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 2051 + jmp .L9010 +.L5065: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + jg .L5140 + cmp dl, 68 + jg .L5141 + test dl, dl + jmp .L9268 +.L5141: + cmp dl, 69 + jle .L5145 + cmp dl, 78 + jle .L999 + jmp .L5101 +.L5140: + cmp dl, 101 + jg .L5149 + cmp dl, 100 + jle .L999 + jmp .L5145 +.L5149: + cmp dl, 111 + je .L5101 + jmp .L999 +.L5056: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L5155 + test dl, dl + jle .L9252 + cmp dl, 68 + jle .L999 + jmp .L5159 +.L5155: + cmp dl, 101 + je .L5159 + jmp .L999 +.L5157: +.L5053: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L5164 + test dl, dl + jle .L9251 + cmp dl, 68 + jle .L999 + jmp .L5168 +.L5164: + cmp dl, 101 + jne .L999 +.L5166: +.L5168: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + jmp .L5226 +.L5159: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + jmp .L5217 +.L5145: + inc ecx + cmp BYTE [ecx], 0 +.L9268: + jg .L999 + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 2563 + jmp .L9010 +.L5147: +.L5126: +.L5114: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + jmp .L5193 +.L5080: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L5191 + test dl, dl + jle .L5193 + cmp dl, 68 + jle .L999 + jmp .L5195 +.L5191: + cmp dl, 101 + je .L5195 + jmp .L999 +.L5193: + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 1539 + jmp .L9010 +.L5083: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L5200 + test dl, dl + jle .L9249 + cmp dl, 68 + jle .L999 + jmp .L5204 +.L5200: + cmp dl, 101 + je .L5204 + jmp .L999 +.L5202: +.L5086: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9249: + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 771 + jmp .L9010 +.L5089: +.L5092: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L5215 + test dl, dl + jle .L5217 + cmp dl, 68 + jle .L999 + jmp .L5219 +.L5215: + cmp dl, 101 + je .L5219 + jmp .L999 +.L5217: + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 3587 + jmp .L9010 +.L5095: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L5224 + test dl, dl + jle .L5226 + cmp dl, 68 + jle .L999 + jmp .L5228 +.L5224: + cmp dl, 101 + je .L5228 + jmp .L999 +.L5226: + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 3331 + jmp .L9010 +.L5098: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 259 + jmp .L9010 +.L5101: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 2819 + jmp .L9010 +.L5104: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 2307 + jmp .L9010 +.L5107: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 1283 + jmp .L9010 +.L5228: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9251: + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 3843 + jmp .L9010 +.L5219: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9252: + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 3075 + jmp .L9010 +.L5204: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9255: + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 1795 + jmp .L9010 +.L5195: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9256: + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 515 + jmp .L9010 +.L4999: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L5258 + cmp dl, 113 + je .L5258 + jmp .L1005 +.L5002: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L5260 + cmp dl, 69 + je .L5262 + cmp dl, 83 + jle .L1005 + jmp .L5264 +.L5260: + cmp dl, 101 + jg .L5266 + cmp dl, 100 + jle .L1005 + jmp .L5262 +.L5266: + cmp dl, 116 + je .L5264 + jmp .L1005 +.L5004: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + jg .L5270 + cmp dl, 69 + je .L5272 + cmp dl, 75 + jle .L1005 + jmp .L5274 +.L5270: + cmp dl, 101 + jg .L5276 + cmp dl, 100 + jle .L1005 + jmp .L5272 +.L5276: + cmp dl, 108 + je .L5274 + jmp .L1005 +.L5008: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L5281 + cmp dl, 114 + je .L5281 + jmp .L1005 +.L5010: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5283 + cmp dl, 68 + je .L5285 + cmp dl, 82 + jle .L1005 + jmp .L5287 +.L5283: + cmp dl, 100 + jg .L5289 + cmp dl, 99 + jle .L1005 + jmp .L5285 +.L5289: + cmp dl, 115 + je .L5287 + jmp .L1005 +.L5012: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 66 + cmp eax, 53 + ja .L1005 + jmp DWORD [.L5310+eax*4] + section .rodata + align 4 + align 4 +.L5310: + dd .L5296 + dd .L1005 + dd .L5299 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5302 + dd .L1005 + dd .L5305 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5308 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5296 + dd .L1005 + dd .L5299 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5302 + dd .L1005 + dd .L5305 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5308 + section .text +.L5015: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L5312 + cmp dl, 110 + je .L5312 + jmp .L1005 +.L5017: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L5315 + cmp dl, 99 + jne .L1005 +.L5315: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 72 + je .L5318 + cmp dl, 104 + jne .L1005 +.L5318: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 71 + je .L5321 + cmp dl, 103 + jne .L1005 +.L5321: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 52 + jg .L5323 + test dl, dl + jle .L5325 + cmp dl, 51 + jle .L999 + jmp .L5327 +.L5323: + cmp dl, 56 + je .L5330 + jmp .L999 +.L5325: + mov DWORD [edi], cmpxchgxadd_insn + mov DWORD [edi+4], 45060 +.L8930: + mov DWORD [edi+8], 8 + jmp .L8696 +.L5327: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 56 + je .L5334 + jmp .L1005 +.L5330: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L5336 + cmp dl, 98 + jne .L1005 +.L5336: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmpxchg8b_insn + mov DWORD [edi+4], 1 + jmp .L8963 +.L5334: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 54 + jne .L1005 + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmpxchgxadd_insn + mov DWORD [edi+4], 42500 + mov DWORD [edi+8], 2097160 + jmp .L8696 +.L5312: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L5346 + cmp dl, 111 + jne .L1005 +.L5346: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L5349 + cmp dl, 114 + jne .L1005 +.L5349: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L5352 + cmp dl, 100 + jne .L1005 +.L5352: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5354 + cmp dl, 80 + je .L5356 + cmp dl, 82 + jle .L1005 + jmp .L5358 +.L5354: + cmp dl, 112 + jg .L5360 + cmp dl, 111 + jle .L1005 + jmp .L5356 +.L5360: + cmp dl, 115 + je .L5358 + jmp .L1005 +.L5356: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5364 + cmp dl, 68 + je .L5366 + cmp dl, 82 + jle .L1005 + jmp .L5368 +.L5364: + cmp dl, 100 + jg .L5370 + cmp dl, 99 + jle .L1005 + jmp .L5366 +.L5370: + cmp dl, 115 + je .L5368 + jmp .L1005 +.L5358: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5374 + cmp dl, 68 + je .L5376 + cmp dl, 82 + jle .L1005 + jmp .L5378 +.L5374: + cmp dl, 100 + jg .L5380 + cmp dl, 99 + jle .L1005 + jmp .L5376 +.L5380: + cmp dl, 115 + je .L5378 + jmp .L1005 +.L5376: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 258561 + jmp .L9151 +.L5378: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 258817 + jmp .L9152 +.L5366: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 222721 + jmp .L9151 +.L5368: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpps_insn + jmp .L9264 +.L5296: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 42497 + jmp .L8695 +.L5308: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1091329 + jmp .L8695 +.L5299: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmpsd_insn + jmp .L9223 +.L5302: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4237057 + jmp .L9148 +.L5305: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssessimm_insn + mov DWORD [edi+4], 15974913 + jmp .L9152 +.L5287: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssepsimm_insn + mov DWORD [edi+4], 49665 + jmp .L9152 +.L5285: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssessimm_insn + mov DWORD [edi+4], 6734337 + jmp .L9151 +.L5281: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L5419 + cmp dl, 100 + jne .L1005 +.L5419: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5421 + cmp dl, 80 + je .L5423 + cmp dl, 82 + jle .L1005 + jmp .L5425 +.L5421: + cmp dl, 112 + jg .L5427 + cmp dl, 111 + jle .L1005 + jmp .L5423 +.L5427: + cmp dl, 115 + je .L5425 + jmp .L1005 +.L5423: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5431 + cmp dl, 68 + je .L5433 + cmp dl, 82 + jle .L1005 + jmp .L5435 +.L5431: + cmp dl, 100 + jg .L5437 + cmp dl, 99 + jle .L1005 + jmp .L5433 +.L5437: + cmp dl, 115 + je .L5435 + jmp .L1005 +.L5425: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5441 + cmp dl, 68 + je .L5443 + cmp dl, 82 + jle .L1005 + jmp .L5445 +.L5441: + cmp dl, 100 + jg .L5447 + cmp dl, 99 + jle .L1005 + jmp .L5443 +.L5447: + cmp dl, 115 + je .L5445 + jmp .L1005 +.L5443: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 520705 + jmp .L9151 +.L5445: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 520961 + jmp .L9152 +.L5433: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 484865 + jmp .L9151 +.L5435: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpps_insn + mov DWORD [edi+4], 1793 + jmp .L9152 +.L5272: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L5464 + cmp dl, 113 + je .L5464 + jmp .L1005 +.L5274: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L5466 + cmp dl, 69 + je .L5468 + cmp dl, 83 + jle .L1005 + jmp .L5470 +.L5466: + cmp dl, 101 + jg .L5472 + cmp dl, 100 + jle .L1005 + jmp .L5468 +.L5472: + cmp dl, 116 + je .L5470 + jmp .L1005 +.L5468: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5476 + cmp dl, 80 + je .L5478 + cmp dl, 82 + jle .L1005 + jmp .L5480 +.L5476: + cmp dl, 112 + jg .L5482 + cmp dl, 111 + jle .L1005 + jmp .L5478 +.L5482: + cmp dl, 115 + je .L5480 + jmp .L1005 +.L5470: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5486 + cmp dl, 80 + je .L5488 + cmp dl, 82 + jle .L1005 + jmp .L5490 +.L5486: + cmp dl, 112 + jg .L5492 + cmp dl, 111 + jle .L1005 + jmp .L5488 +.L5492: + cmp dl, 115 + je .L5490 + jmp .L1005 +.L5488: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5496 + cmp dl, 68 + je .L5498 + cmp dl, 82 + jle .L1005 + jmp .L5500 +.L5496: + cmp dl, 100 + jg .L5502 + cmp dl, 99 + jle .L1005 + jmp .L5498 +.L5502: + cmp dl, 115 + je .L5500 + jmp .L1005 +.L5490: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5506 + cmp dl, 68 + je .L5508 + cmp dl, 82 + jle .L1005 + jmp .L5510 +.L5506: + cmp dl, 100 + jg .L5512 + cmp dl, 99 + jle .L1005 + jmp .L5508 +.L5512: + cmp dl, 115 + je .L5510 + jmp .L1005 +.L5508: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 389633 + jmp .L9151 +.L5510: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 389889 + jmp .L9152 +.L5498: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 353793 + jmp .L9151 +.L5500: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpps_insn + mov DWORD [edi+4], 1281 + jmp .L9152 +.L5478: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5528 + cmp dl, 68 + je .L5530 + cmp dl, 82 + jle .L1005 + jmp .L5532 +.L5528: + cmp dl, 100 + jg .L5534 + cmp dl, 99 + jle .L1005 + jmp .L5530 +.L5534: + cmp dl, 115 + je .L5532 + jmp .L1005 +.L5480: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5538 + cmp dl, 68 + je .L5540 + cmp dl, 82 + jle .L1005 + jmp .L5542 +.L5538: + cmp dl, 100 + jg .L5544 + cmp dl, 99 + jle .L1005 + jmp .L5540 +.L5544: + cmp dl, 115 + je .L5542 + jmp .L1005 +.L5540: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 455169 + jmp .L9151 +.L5542: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 455425 + jmp .L9152 +.L5530: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 419329 + jmp .L9151 +.L5532: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpps_insn + mov DWORD [edi+4], 1537 + jmp .L9152 +.L5464: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5560 + cmp dl, 80 + je .L5562 + cmp dl, 82 + jle .L1005 + jmp .L5564 +.L5560: + cmp dl, 112 + jg .L5566 + cmp dl, 111 + jle .L1005 + jmp .L5562 +.L5566: + cmp dl, 115 + je .L5564 + jmp .L1005 +.L5562: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5570 + cmp dl, 68 + je .L5572 + cmp dl, 82 + jle .L1005 + jmp .L5574 +.L5570: + cmp dl, 100 + jg .L5576 + cmp dl, 99 + jle .L1005 + jmp .L5572 +.L5576: + cmp dl, 115 + je .L5574 + jmp .L1005 +.L5564: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5580 + cmp dl, 68 + je .L5582 + cmp dl, 82 + jle .L1005 + jmp .L5584 +.L5580: + cmp dl, 100 + jg .L5586 + cmp dl, 99 + jle .L1005 + jmp .L5582 +.L5586: + cmp dl, 115 + je .L5584 + jmp .L1005 +.L5582: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 324097 + jmp .L9151 +.L5584: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 324353 + jmp .L9152 +.L5572: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 288257 + jmp .L9151 +.L5574: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpps_insn + mov DWORD [edi+4], 1025 + jmp .L9152 +.L5262: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5602 + cmp dl, 80 + je .L5604 + cmp dl, 82 + jle .L1005 + jmp .L5606 +.L5602: + cmp dl, 112 + jg .L5608 + cmp dl, 111 + jle .L1005 + jmp .L5604 +.L5608: + cmp dl, 115 + je .L5606 + jmp .L1005 +.L5264: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5612 + cmp dl, 80 + je .L5614 + cmp dl, 82 + jle .L1005 + jmp .L5616 +.L5612: + cmp dl, 112 + jg .L5618 + cmp dl, 111 + jle .L1005 + jmp .L5614 +.L5618: + cmp dl, 115 + je .L5616 + jmp .L1005 +.L5614: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5622 + cmp dl, 68 + je .L5624 + cmp dl, 82 + jle .L1005 + jmp .L5626 +.L5622: + cmp dl, 100 + jg .L5628 + cmp dl, 99 + jle .L1005 + jmp .L5624 +.L5628: + cmp dl, 115 + je .L5626 + jmp .L1005 +.L5616: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5632 + cmp dl, 68 + je .L5634 + cmp dl, 82 + jle .L1005 + jmp .L5636 +.L5632: + cmp dl, 100 + jg .L5637 + cmp dl, 99 + jle .L1005 + jmp .L5634 +.L5637: + cmp dl, 115 + jne .L1005 +.L5636: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 127745 + jmp .L9152 +.L5634: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 127489 + jmp .L9151 +.L5626: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpps_insn + mov DWORD [edi+4], 257 + jmp .L9152 +.L5624: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 91649 + jmp .L9151 +.L5604: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5653 + cmp dl, 68 + je .L5655 + cmp dl, 82 + jle .L1005 + jmp .L5657 +.L5653: + cmp dl, 100 + jg .L5659 + cmp dl, 99 + jle .L1005 + jmp .L5655 +.L5659: + cmp dl, 115 + je .L5657 + jmp .L1005 +.L5606: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5663 + cmp dl, 68 + je .L5665 + cmp dl, 82 + jle .L1005 + jmp .L5667 +.L5663: + cmp dl, 100 + jg .L5668 + cmp dl, 99 + jle .L1005 + jmp .L5665 +.L5668: + cmp dl, 115 + jne .L1005 +.L5667: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 193281 + jmp .L9152 +.L5665: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 193025 + jmp .L9151 +.L5657: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpps_insn + jmp .L9263 +.L5655: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 157185 + jmp .L9151 +.L5258: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5684 + cmp dl, 80 + je .L5686 + cmp dl, 82 + jle .L1005 + jmp .L5688 +.L5684: + cmp dl, 112 + jg .L5690 + cmp dl, 111 + jle .L1005 + jmp .L5686 +.L5690: + cmp dl, 115 + je .L5688 + jmp .L1005 +.L5686: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5694 + cmp dl, 68 + je .L5696 + cmp dl, 82 + jle .L1005 + jmp .L5698 +.L5694: + cmp dl, 100 + jg .L5700 + cmp dl, 99 + jle .L1005 + jmp .L5696 +.L5700: + cmp dl, 115 + je .L5698 + jmp .L1005 +.L5688: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5704 + cmp dl, 68 + je .L5706 + cmp dl, 82 + jle .L1005 + jmp .L5708 +.L5704: + cmp dl, 100 + jg .L5709 + cmp dl, 99 + jle .L1005 + jmp .L5706 +.L5709: + cmp dl, 115 + jne .L1005 +.L5708: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 62209 + jmp .L9152 +.L5706: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 61953 + jmp .L9151 +.L5698: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpps_insn +.L9265: + mov DWORD [edi+4], 1 + jmp .L9152 +.L5696: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 26113 + jmp .L9151 +.L4567: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 63489 + jmp .L8695 +.L4569: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 64513 + jmp .L8695 +.L4576: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 64001 + jmp .L8695 +.L4578: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L5735 + cmp dl, 115 + je .L5735 + jmp .L1005 +.L4573: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L5738 + cmp dl, 108 + jne .L1005 +.L5738: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + je .L5741 + cmp dl, 117 + jne .L1005 +.L5741: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L5744 + cmp dl, 115 + jne .L1005 +.L5744: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 72 + je .L5747 + cmp dl, 104 + jne .L1005 +.L5747: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], clflush_insn + mov DWORD [edi+4], 1 + jmp .L9024 +.L5735: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 984577 + jmp .L9154 +.L4554: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L5755 + test dl, dl + jle .L5757 + cmp dl, 68 + jle .L999 + jmp .L5759 +.L5755: + cmp dl, 101 + je .L5759 + jmp .L999 +.L5757: + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2136321 + jmp .L9186 +.L4552: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4233473 + jmp .L9148 +.L5759: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4233217 + jmp .L9148 +.L4548: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1087489 + jmp .L8695 +.L4545: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L5776 + cmp dl, 108 + jne .L1005 +.L5776: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], call_insn + jmp .L9222 +.L1230: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 47 + jle .L1005 + cmp dl, 53 + jle .L5783 + jmp .L1005 +.L1233: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L5784 + cmp dl, 66 + jg .L5785 + test dl, dl + jle .L5787 + cmp dl, 65 + jle .L999 + jmp .L5789 +.L5785: + cmp dl, 68 + je .L5792 + cmp dl, 86 + jle .L999 + jmp .L5794 +.L5784: + cmp dl, 99 + jg .L5796 + cmp dl, 98 + je .L5789 + jmp .L999 +.L5796: + cmp dl, 100 + jle .L5792 + cmp dl, 119 + je .L5794 + jmp .L999 +.L5787: + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + movsx eax, BYTE [ebx+1] + sub eax, 48 + jmp .L9261 +.L1236: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L5803 + cmp dl, 120 + je .L5803 + jmp .L1005 +.L1239: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + jg .L5805 + cmp dl, 80 + je .L5807 + cmp dl, 87 + jle .L1005 + jmp .L5809 +.L5805: + cmp dl, 112 + jg .L5811 + cmp dl, 111 + jle .L1005 + jmp .L5807 +.L5811: + cmp dl, 120 + je .L5809 + jmp .L1005 +.L1242: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + jg .L5815 + cmp dl, 80 + jg .L5816 + cmp dl, 76 + je .L5818 + cmp dl, 79 + jmp .L8684 +.L5816: + cmp dl, 82 + je .L5823 + cmp dl, 87 + jle .L1005 + jmp .L5825 +.L5815: + cmp dl, 112 + jg .L5827 + cmp dl, 108 + je .L5818 + cmp dl, 111 +.L8684: + jle .L1005 + jmp .L5820 +.L5827: + cmp dl, 114 + jg .L5831 + cmp dl, 113 + jle .L1005 + jmp .L5823 +.L5831: + cmp dl, 120 + je .L5825 + jmp .L1005 +.L1245: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 73 + cmp eax, 47 + ja .L1005 + jmp DWORD [.L5855+eax*4] + section .rodata + align 4 + align 4 +.L5855: + dd .L5838 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5841 + dd .L1005 + dd .L1005 + dd .L5844 + dd .L1005 + dd .L1005 + dd .L5847 + dd .L5850 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5853 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5838 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5841 + dd .L1005 + dd .L1005 + dd .L5844 + dd .L1005 + dd .L1005 + dd .L5847 + dd .L5850 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5853 + section .text +.L1248: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L5856 + cmp dl, 80 + je .L5858 + cmp dl, 83 + jle .L1005 + jmp .L5860 +.L5856: + cmp dl, 112 + jg .L5862 + cmp dl, 111 + jle .L1005 + jmp .L5858 +.L5862: + cmp dl, 116 + je .L5860 + jmp .L1005 +.L1251: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L5867 + cmp dl, 112 + je .L5867 + jmp .L1005 +.L1254: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L5869 + cmp dl, 76 + je .L5871 + cmp dl, 81 + jle .L1005 + jmp .L5873 +.L5869: + cmp dl, 108 + jg .L5875 + cmp dl, 107 + jle .L1005 + jmp .L5871 +.L5875: + cmp dl, 114 + je .L5873 + jmp .L1005 +.L1257: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 68 + cmp eax, 48 + ja .L1005 + jmp DWORD [.L5902+eax*4] + section .rodata + align 4 + align 4 +.L5902: + dd .L5882 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5885 + dd .L1005 + dd .L1005 + dd .L5888 + dd .L5891 + dd .L1005 + dd .L1005 + dd .L5894 + dd .L5897 + dd .L1005 + dd .L1005 + dd .L5900 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5882 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5885 + dd .L1005 + dd .L1005 + dd .L5888 + dd .L5891 + dd .L1005 + dd .L1005 + dd .L5894 + dd .L5897 + dd .L1005 + dd .L1005 + dd .L5900 + section .text +.L5894: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 84 + jmp .L8699 +.L5885: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 86 + jmp .L8699 +.L5891: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 1026561 + mov DWORD [edi+8], 524304 + jmp .L8696 +.L5897: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L5911 + cmp dl, 114 + je .L5911 + jmp .L1005 +.L5882: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L5914 + cmp dl, 99 + je .L5914 + jmp .L1005 +.L5888: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L5917 + cmp dl, 100 + je .L5917 + jmp .L1005 +.L5900: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L5920 + cmp dl, 115 + jne .L1005 +.L5920: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixsmm_insn + mov DWORD [edi+4], 32001 + jmp .L9141 +.L5917: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L5926 + cmp dl, 116 + jne .L1005 +.L5926: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixsmm_insn + mov DWORD [edi+4], 31489 + jmp .L9141 +.L5914: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], rsdc_insn + jmp .L9257 +.L5911: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L5935 + cmp dl, 116 + jne .L1005 +.L5935: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5937 + cmp dl, 80 + je .L5939 + cmp dl, 82 + jle .L1005 + jmp .L5941 +.L5937: + cmp dl, 112 + jg .L5943 + cmp dl, 111 + jle .L1005 + jmp .L5939 +.L5943: + cmp dl, 115 + je .L5941 + jmp .L1005 +.L5939: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L5948 + cmp dl, 115 + je .L5948 + jmp .L1005 +.L5941: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L5951 + cmp dl, 115 + jne .L1005 +.L5951: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15946241 + jmp .L9152 +.L5948: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 20993 + jmp .L9152 +.L5871: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], shift_insn + jmp .L9221 +.L5873: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], shift_insn + jmp .L9220 +.L5867: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 192 + jmp .L8699 +.L5858: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + jg .L5967 + cmp dl, 69 + jg .L5968 + test dl, dl + jle .L5970 + cmp dl, 68 + jmp .L9273 +.L5968: + cmp dl, 78 + je .L5975 + cmp dl, 89 +.L9273: + jle .L999 + jmp .L5977 +.L5967: + cmp dl, 109 + jg .L5979 + cmp dl, 101 + jmp .L9275 +.L5979: + cmp dl, 110 + jle .L5975 + cmp dl, 122 +.L9275: + je .L5977 + jmp .L999 +.L5970: + mov DWORD [edi], 1 + mov DWORD [edi+4], 243 + jmp .L8701 +.L5860: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + jg .L5984 + cmp dl, 69 + jg .L5985 + test dl, dl + jmp .L9241 +.L5985: + cmp dl, 70 + jle .L5989 + cmp dl, 77 + jle .L999 + jmp .L5991 +.L5984: + cmp dl, 102 + jg .L5993 + cmp dl, 101 + jle .L999 + jmp .L5989 +.L5993: + cmp dl, 110 + je .L5991 + jmp .L999 +.L5989: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], retnf_insn + mov DWORD [edi+4], 51714 + jmp .L8695 +.L5991: + inc ecx + cmp BYTE [ecx], 0 +.L9241: + jg .L999 + mov DWORD [edi], retnf_insn + mov DWORD [edi+4], 49666 + jmp .L8695 +.L5972: +.L5975: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + jg .L6006 + cmp dl, 69 + je .L6010 + cmp dl, 89 + jmp .L9274 +.L6006: + cmp dl, 101 + jg .L6012 + cmp dl, 100 +.L9274: + jle .L1005 + jmp .L6010 +.L6012: + cmp dl, 122 + je .L6010 + jmp .L1005 +.L5977: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 1 + mov DWORD [edi+4], 244 + jmp .L8701 +.L6008: +.L6010: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 1 + mov DWORD [edi+4], 242 + jmp .L8701 +.L5853: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 82 + jmp .L8699 +.L5838: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 87 + jmp .L8699 +.L5850: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6024 + cmp dl, 115 + je .L6024 + jmp .L1005 +.L5841: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6027 + cmp dl, 115 + je .L6027 + jmp .L1005 +.L5844: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L6030 + cmp dl, 109 + je .L6030 + jmp .L1005 +.L5847: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 72 + je .L6033 + cmp dl, 104 + jne .L1005 +.L6033: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L6036 + cmp dl, 114 + jne .L1005 +.L6036: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 996865 +.L8712: + mov DWORD [edi+8], 655392 + jmp .L8696 +.L6030: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L6042 + cmp dl, 99 + jne .L1005 +.L6042: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 996097 + jmp .L9010 +.L6027: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L6048 + cmp dl, 114 + jne .L1005 +.L6048: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 995841 +.L8713: + mov DWORD [edi+8], 8388624 + jmp .L8696 +.L6024: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L6054 + cmp dl, 99 + jne .L1005 +.L6054: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 995585 +.L8963: + mov DWORD [edi+8], 16 + jmp .L8696 +.L5825: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 81 + jmp .L8699 +.L5818: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], shift_insn + jmp .L9218 +.L5823: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], shift_insn + mov DWORD [edi+4], 776 + jmp .L8695 +.L5820: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6067 + cmp dl, 80 + je .L6069 + cmp dl, 82 + jle .L1005 + jmp .L6071 +.L6067: + cmp dl, 112 + jg .L6073 + cmp dl, 111 + jle .L1005 + jmp .L6069 +.L6073: + cmp dl, 115 + je .L6071 + jmp .L1005 +.L6069: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6078 + cmp dl, 115 + je .L6078 + jmp .L1005 +.L6071: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6081 + cmp dl, 115 + jne .L1005 +.L6081: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15946497 + jmp .L9152 +.L6078: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 21249 + jmp .L9152 +.L5809: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 83 + jmp .L8699 +.L5807: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 85 + jmp .L8699 +.L5803: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 80 + jmp .L8699 +.L5792: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + movsx eax, BYTE [ebx+1] + sub eax, 48 + jmp .L9260 +.L5794: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + movsx eax, BYTE [ebx+1] + sub eax, 48 + jmp .L9259 +.L5789: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + movsx eax, BYTE [ebx+1] + sub eax, 48 + jmp .L9258 +.L5783: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L6101 + cmp dl, 66 + jg .L6102 + test dl, dl + jle .L6104 + cmp dl, 65 + jle .L999 + jmp .L6106 +.L6102: + cmp dl, 68 + je .L6109 + cmp dl, 86 + jle .L999 + jmp .L6111 +.L6101: + cmp dl, 99 + jg .L6113 + cmp dl, 98 + je .L6106 + jmp .L999 +.L6113: + cmp dl, 100 + jle .L6109 + cmp dl, 119 + je .L6111 + jmp .L999 +.L6104: + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + movsx eax, BYTE [ebx+2] +.L9269: + sub eax, 38 +.L9261: + or eax, 80 + jmp .L9201 +.L6106: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + movsx eax, BYTE [ebx+2] + sub eax, 38 +.L9258: + or eax, 16 + jmp .L9201 +.L6109: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + movsx eax, BYTE [ebx+2] + sub eax, 38 +.L9260: + or eax, 64 + jmp .L9201 +.L6111: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + movsx eax, BYTE [ebx+2] + sub eax, 38 +.L9259: + or eax, 48 + jmp .L9201 +.L1195: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L6125 + cmp dl, 72 + je .L6127 + cmp dl, 81 + jle .L1005 + jmp .L6129 +.L6125: + cmp dl, 104 + jg .L6131 + cmp dl, 103 + jle .L1005 + jmp .L6127 +.L6131: + cmp dl, 114 + je .L6129 + jmp .L1005 +.L1198: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6135 + cmp dl, 77 + je .L6137 + cmp dl, 82 + jle .L1005 + jmp .L6139 +.L6135: + cmp dl, 109 + jg .L6141 + cmp dl, 108 + jle .L1005 + jmp .L6137 +.L6141: + cmp dl, 115 + je .L6139 + jmp .L1005 +.L1201: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6145 + cmp dl, 65 + je .L6147 + cmp dl, 82 + jle .L1005 + jmp .L6149 +.L6145: + cmp dl, 97 + jg .L6151 + cmp dl, 96 + jle .L1005 + jmp .L6147 +.L6151: + cmp dl, 115 + je .L6149 + jmp .L1005 +.L1204: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6155 + cmp dl, 69 + je .L6157 + cmp dl, 82 + jle .L1005 + jmp .L6159 +.L6155: + cmp dl, 101 + jg .L6161 + cmp dl, 100 + jle .L1005 + jmp .L6157 +.L6161: + cmp dl, 115 + je .L6159 + jmp .L1005 +.L1207: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6165 + cmp dl, 68 + je .L6167 + cmp dl, 82 + jle .L1005 + jmp .L6169 +.L6165: + cmp dl, 100 + jg .L6171 + cmp dl, 99 + jle .L1005 + jmp .L6167 +.L6171: + cmp dl, 115 + je .L6169 + jmp .L1005 +.L1210: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L6176 + cmp dl, 100 + je .L6176 + jmp .L1005 +.L1213: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L6179 + cmp dl, 100 + je .L6179 + jmp .L1005 +.L1216: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6182 + cmp dl, 115 + je .L6182 + jmp .L1005 +.L1219: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + jg .L6184 + cmp dl, 66 + jg .L6185 + cmp dl, 65 + je .L6187 + jmp .L1005 +.L6185: + cmp dl, 67 + jle .L6190 + cmp dl, 68 + jle .L6192 + cmp dl, 78 + jle .L1005 + jmp .L6194 +.L6184: + cmp dl, 99 + jg .L6196 + cmp dl, 97 + je .L6187 + cmp dl, 98 + jle .L1005 + jmp .L6190 +.L6196: + cmp dl, 100 + jle .L6192 + cmp dl, 111 + je .L6194 + jmp .L1005 +.L1222: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6202 + cmp dl, 76 + je .L6204 + cmp dl, 82 + jle .L1005 + jmp .L6206 +.L6202: + cmp dl, 108 + jg .L6208 + cmp dl, 107 + jle .L1005 + jmp .L6204 +.L6208: + cmp dl, 115 + je .L6206 + jmp .L1005 +.L1225: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L6213 + cmp dl, 114 + jne .L1005 +.L6213: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], prot286_insn + mov DWORD [edi+4], 196609 + jmp .L9013 +.L6206: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], lfgss_insn + mov DWORD [edi+4], 46594 + jmp .L9186 +.L6204: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], bsfr_insn + mov DWORD [edi+4], 771 + jmp .L9031 +.L6190: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 75 + je .L6225 + cmp dl, 107 + je .L6225 + jmp .L1005 +.L6194: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L6228 + cmp dl, 112 + je .L6228 + jmp .L1005 +.L6192: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6231 + cmp dl, 115 + je .L6231 + jmp .L1005 +.L6187: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L6234 + cmp dl, 100 + jne .L1005 +.L6234: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L6237 + cmp dl, 97 + jne .L1005 +.L6237: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L6240 + cmp dl, 108 + jne .L1005 +.L6240: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L6243 + cmp dl, 108 + jne .L1005 +.L6243: + inc ecx + mov dl, BYTE [ecx] + test dl, dl + jle .L6246 + cmp dl, 50 + je .L6248 + jmp .L999 +.L6246: + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 984833 + jmp .L9016 +.L6248: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 56 + jne .L1005 + inc ecx + mov dl, BYTE [ecx] + cmp dl, 54 + jne .L1005 + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 984321 +.L8709: + mov DWORD [edi+8], 2097154 + jmp .L8696 +.L6231: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L6256 + cmp dl, 68 + jg .L6257 + cmp dl, 66 + je .L6259 + cmp dl, 67 + jmp .L8685 +.L6257: + cmp dl, 81 + je .L6264 + cmp dl, 86 + jle .L1005 + jmp .L6266 +.L6256: + cmp dl, 100 + jg .L6268 + cmp dl, 98 + je .L6259 + cmp dl, 99 +.L8685: + jle .L1005 + jmp .L6261 +.L6268: + cmp dl, 113 + jg .L6272 + cmp dl, 112 + jle .L1005 + jmp .L6264 +.L6272: + cmp dl, 119 + je .L6266 + jmp .L1005 +.L6259: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 44033 + jmp .L8695 +.L6266: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1092865 + jmp .L8695 +.L6261: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2141441 + jmp .L9186 +.L6264: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4238593 + jmp .L9148 +.L6228: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + jg .L6289 + cmp dl, 69 + jg .L6290 + test dl, dl + jle .L6292 + cmp dl, 68 + jmp .L9270 +.L6290: + cmp dl, 78 + je .L6297 + cmp dl, 89 +.L9270: + jle .L999 + jmp .L6294 +.L6289: + cmp dl, 109 + jg .L6301 + cmp dl, 101 + jmp .L9272 +.L6301: + cmp dl, 110 + jle .L6297 + cmp dl, 122 +.L9272: + je .L6294 + jmp .L999 +.L6292: + mov DWORD [edi], loop_insn +.L9218: + mov DWORD [edi+4], 520 + jmp .L8695 +.L6299: +.L6294: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], loop_insn +.L9220: + mov DWORD [edi+4], 264 + jmp .L8695 +.L6297: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + jg .L6314 + cmp dl, 69 + je .L6318 + cmp dl, 89 + jmp .L9271 +.L6314: + cmp dl, 101 + jg .L6320 + cmp dl, 100 +.L9271: + jle .L1005 + jmp .L6318 +.L6320: + cmp dl, 122 + jne .L1005 +.L6316: +.L6318: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], loop_insn +.L9221: + mov DWORD [edi+4], 8 + jmp .L8695 +.L6225: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 1 + mov DWORD [edi+4], 240 + jmp .L8701 +.L6182: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L6332 + cmp dl, 119 + jne .L1005 +.L6332: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], prot286_insn + mov DWORD [edi+4], 393473 + jmp .L9154 +.L6179: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L6338 + cmp dl, 116 + jne .L1005 +.L6338: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], prot286_insn + mov DWORD [edi+4], 131073 +.L9013: + mov DWORD [edi+8], 9437186 + jmp .L8696 +.L6176: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L6344 + cmp dl, 116 + jne .L1005 +.L6344: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 51314945 + jmp .L9154 +.L6169: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], lfgss_insn + mov DWORD [edi+4], 46338 + jmp .L9186 +.L6167: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L6353 + cmp dl, 116 + jne .L1005 +.L6353: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 34537729 + jmp .L9154 +.L6159: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], lfgss_insn + mov DWORD [edi+4], 46082 + jmp .L9186 +.L6157: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L6362 + cmp dl, 110 + jne .L1005 +.L6362: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L6365 + cmp dl, 99 + jne .L1005 +.L6365: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L6368 + cmp dl, 101 + jne .L1005 +.L6368: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], threebyte_insn + mov DWORD [edi+4], 263120897 + jmp .L9024 +.L6147: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + jg .L6373 + test dl, dl + jle .L6375 + cmp dl, 85 + jle .L999 + jmp .L6377 +.L6373: + cmp dl, 118 + je .L6377 + jmp .L999 +.L6375: + mov DWORD [edi], lea_insn + mov DWORD [edi+4], 3 + jmp .L8695 +.L6149: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], ldes_insn + mov DWORD [edi+4], 50178 + jmp .L8695 +.L6377: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L6389 + cmp dl, 101 + jne .L1005 +.L6389: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 51457 +.L8857: + mov DWORD [edi+8], 1 + jmp .L8696 +.L6139: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], ldes_insn + mov DWORD [edi+4], 50434 + jmp .L8695 +.L6137: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L6401 + cmp dl, 120 + jne .L1005 +.L6401: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L6404 + cmp dl, 99 + jne .L1005 +.L6404: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6407 + cmp dl, 115 + jne .L1005 +.L6407: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L6410 + cmp dl, 114 + jne .L1005 +.L6410: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ldstmxcsr_insn +.L9263: + mov DWORD [edi+4], 513 + jmp .L9152 +.L6127: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 70 + je .L6416 + cmp dl, 102 + je .L6416 + jmp .L1005 +.L6129: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], bsfr_insn + mov DWORD [edi+4], 515 + jmp .L9031 +.L6416: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 40705 + jmp .L8695 +.L1164: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 54 + je .L6428 + jmp .L1005 +.L1166: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + je .L6430 + jmp .L1005 +.L1168: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 52 + je .L6432 + jmp .L1005 +.L1171: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6433 + cmp dl, 68 + jg .L6434 + cmp dl, 65 + je .L6436 + cmp dl, 67 + jmp .L8686 +.L6434: + cmp dl, 77 + je .L6441 + cmp dl, 82 + jle .L1005 + jmp .L6443 +.L6433: + cmp dl, 100 + jg .L6445 + cmp dl, 97 + je .L6436 + cmp dl, 99 +.L8686: + jle .L1005 + jmp .L6438 +.L6445: + cmp dl, 109 + jg .L6449 + cmp dl, 108 + jle .L1005 + jmp .L6441 +.L6449: + cmp dl, 115 + je .L6443 + jmp .L1005 +.L1174: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + jg .L6453 + cmp dl, 66 + jle .L1005 + cmp dl, 67 + jle .L6456 + jmp .L6457 +.L6453: + cmp dl, 98 + jle .L1005 + cmp dl, 99 + jle .L6456 + cmp dl, 100 + jle .L6457 + jmp .L1005 +.L1177: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 20 + jmp .L8699 +.L1180: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 16 + jmp .L8699 +.L1183: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L6465 + cmp dl, 100 + je .L6465 + jmp .L1005 +.L1186: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L6468 + cmp dl, 112 + je .L6468 + jmp .L1005 +.L1189: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 48 + jmp .L8699 +.L6468: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L6472 + cmp dl, 108 + jne .L1005 +.L6472: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], arpl_insn + mov DWORD [edi+4], 1 + jmp .L9031 +.L6465: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L6480 + cmp dl, 77 + jg .L6481 + test dl, dl + jg .L999 + jmp .L6488 +.L6481: + cmp dl, 78 + jle .L6485 + cmp dl, 79 + jle .L999 + jmp .L6487 +.L6480: + cmp dl, 110 + jg .L6489 + cmp dl, 109 + jle .L999 + jmp .L6485 +.L6489: + cmp dl, 112 + je .L6487 + jmp .L999 +.L6488: + mov DWORD [edi], arith_insn + mov DWORD [edi+4], 270359 + jmp .L8695 +.L6485: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L6496 + cmp dl, 112 + je .L6496 + jmp .L1005 +.L6487: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6498 + cmp dl, 68 + je .L6500 + cmp dl, 82 + jle .L1005 + jmp .L6502 +.L6498: + cmp dl, 100 + jg .L6503 + cmp dl, 99 + jle .L1005 + jmp .L6500 +.L6503: + cmp dl, 115 + jne .L1005 +.L6502: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 21505 + jmp .L9152 +.L6500: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6706177 + jmp .L9151 +.L6496: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6513 + cmp dl, 68 + je .L6515 + cmp dl, 82 + jle .L1005 + jmp .L6517 +.L6513: + cmp dl, 100 + jg .L6519 + cmp dl, 99 + jle .L1005 + jmp .L6515 +.L6519: + cmp dl, 115 + je .L6517 + jmp .L1005 +.L6515: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6706433 + jmp .L9151 +.L6517: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 21761 + jmp .L9152 +.L6457: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6529 + cmp dl, 79 + jg .L6530 + test dl, dl + jg .L999 + jmp .L6537 +.L6530: + cmp dl, 80 + jle .L6534 + cmp dl, 82 + jle .L999 + jmp .L6536 +.L6529: + cmp dl, 112 + jg .L6538 + cmp dl, 111 + jle .L999 + jmp .L6534 +.L6538: + cmp dl, 115 + je .L6536 + jmp .L999 +.L6537: + mov DWORD [edi], arith_insn + mov DWORD [edi+4], 23 + jmp .L8695 +.L6456: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], arith_insn + mov DWORD [edi+4], 135191 + jmp .L8695 +.L6534: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6547 + cmp dl, 68 + je .L6549 + cmp dl, 82 + jle .L1005 + jmp .L6551 +.L6547: + cmp dl, 100 + jg .L6553 + cmp dl, 99 + jle .L1005 + jmp .L6549 +.L6553: + cmp dl, 115 + je .L6551 + jmp .L1005 +.L6536: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6557 + cmp dl, 68 + je .L6559 + cmp dl, 82 + jle .L1005 + jmp .L6561 +.L6557: + cmp dl, 100 + jg .L6562 + cmp dl, 99 + jle .L1005 + jmp .L6559 +.L6562: + cmp dl, 115 + jne .L1005 +.L6561: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15947777 + jmp .L9152 +.L6559: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15882241 + jmp .L9151 +.L6551: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 22529 + jmp .L9152 +.L6549: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6707201 + jmp .L9151 +.L6436: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 14081 + jmp .L8695 +.L6443: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 16129 + jmp .L8695 +.L6438: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], aadm_insn + mov DWORD [edi+4], 258 + jmp .L8695 +.L6441: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], aadm_insn +.L9223: + mov DWORD [edi+4], 2 + jmp .L8695 +.L6432: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9267 + mov DWORD [edi], 2 + jmp .L9244 +.L6430: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 2 + jmp .L9245 +.L6428: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L6606 + sub esp, 8 + push DWORD LC18 + push esi + call yasm__error + jmp .L8702 +.L6606: + mov DWORD [edi], 2 + jmp .L9246 +.L1147: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 54 + je .L6608 + jmp .L1005 +.L1150: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + je .L6610 + jmp .L1005 +.L1152: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 52 + je .L6612 + jmp .L1005 +.L1156: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L6613 + test dl, dl + jle .L6615 + cmp dl, 79 + jle .L999 + jmp .L6617 +.L6613: + cmp dl, 112 + je .L6617 + jmp .L999 +.L6615: + mov DWORD [edi], arith_insn + mov DWORD [edi+4], 67607 + jmp .L8695 +.L1158: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L6623 + cmp dl, 116 + jne .L1005 +.L6623: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6625 + test dl, dl + jle .L6627 + cmp dl, 82 + jle .L999 + jmp .L6629 +.L6625: + cmp dl, 115 + je .L6629 + jmp .L999 +.L6627: + mov DWORD [edi], out_insn +.L9225: + mov DWORD [edi+4], 6 + jmp .L8695 +.L6629: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L6634 + cmp dl, 67 + jg .L6635 + cmp dl, 66 + jmp .L8687 +.L6635: + cmp dl, 68 + jle .L6639 + cmp dl, 86 + jle .L1005 + jmp .L6641 +.L6634: + cmp dl, 99 + jg .L6643 + cmp dl, 98 +.L8687: + jne .L1005 + jmp .L6642 +.L6643: + cmp dl, 100 + jle .L6639 + cmp dl, 119 + je .L6641 + jmp .L1005 +.L6642: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 28161 + jmp .L8695 +.L6641: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1076993 + jmp .L8695 +.L6639: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2125569 + jmp .L9186 +.L6617: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6657 + cmp dl, 68 + je .L6659 + cmp dl, 82 + jle .L1005 + jmp .L6661 +.L6657: + cmp dl, 100 + jg .L6663 + cmp dl, 99 + jle .L1005 + jmp .L6659 +.L6663: + cmp dl, 115 + je .L6661 + jmp .L1005 +.L6659: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6706689 + jmp .L9151 +.L6661: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 22017 + jmp .L9152 +.L6612: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L6674 +.L9267: + push ebx + push DWORD LC17 + jmp .L8698 +.L6674: + mov DWORD [edi], 3 +.L9244: + mov DWORD [edi+4], 64 + jmp .L8701 +.L6610: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 3 +.L9245: + mov DWORD [edi+4], 32 + jmp .L8701 +.L6608: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 3 +.L9246: + mov DWORD [edi+4], 16 +.L8701: + mov eax, 2 + jmp .L926 +.L1132: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6678 + cmp dl, 115 + je .L6678 + jmp .L1005 +.L1135: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 4 + jmp .L8697 +.L1137: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 47 + jle .L1005 + cmp dl, 55 + jg .L1005 + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + movsx eax, BYTE [ebx+2] + sub eax, 48 + or eax, 176 + jmp .L9201 +.L6678: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L6685 + cmp dl, 116 + jne .L1005 +.L6685: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], test_insn +.L9222: + mov DWORD [edi+4], 20 + jmp .L8695 +.L1072: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L6691 + cmp dl, 120 + je .L6691 + jmp .L1005 +.L1075: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L6693 + cmp dl, 67 + jg .L6694 + cmp dl, 66 + jmp .L8660 +.L6694: + cmp dl, 68 + jle .L6699 + cmp dl, 81 + jle .L1005 + jmp .L6701 +.L6693: + cmp dl, 99 + jg .L6703 + cmp dl, 98 +.L8660: + je .L6696 + jmp .L1005 +.L6703: + cmp dl, 100 + jle .L6699 + cmp dl, 114 + je .L6701 + jmp .L1005 +.L1078: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6708 + cmp dl, 76 + je .L6710 + cmp dl, 82 + jle .L1005 + jmp .L6712 +.L6708: + cmp dl, 108 + jg .L6714 + cmp dl, 107 + jle .L1005 + jmp .L6710 +.L6714: + cmp dl, 115 + je .L6712 + jmp .L1005 +.L1081: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + jg .L6718 + cmp dl, 75 + jg .L6719 + cmp dl, 72 + je .L6721 + jmp .L1005 +.L6719: + cmp dl, 76 + jle .L6724 + cmp dl, 77 + jle .L6726 + cmp dl, 78 + jle .L1005 + jmp .L6728 +.L6718: + cmp dl, 108 + jg .L6730 + cmp dl, 104 + je .L6721 + cmp dl, 107 + jle .L1005 + jmp .L6724 +.L6730: + cmp dl, 109 + jle .L6726 + cmp dl, 111 + je .L6728 + jmp .L1005 +.L1084: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + jg .L6736 + cmp dl, 69 + je .L6738 + cmp dl, 72 + jle .L1005 + jmp .L6740 +.L6736: + cmp dl, 101 + jg .L6742 + cmp dl, 100 + jle .L1005 + jmp .L6738 +.L6742: + cmp dl, 105 + je .L6740 + jmp .L1005 +.L1087: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L6747 + cmp dl, 109 + je .L6747 + jmp .L1005 +.L1090: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L6750 + cmp dl, 114 + je .L6750 + jmp .L1005 +.L1093: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 50 + ja .L1005 + jmp DWORD [.L6775+eax*4] + section .rodata + align 4 + align 4 +.L6775: + dd .L6755 + dd .L1005 + dd .L6758 + dd .L6761 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L6764 + dd .L6767 + dd .L6770 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L6773 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L6755 + dd .L1005 + dd .L6758 + dd .L6761 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L6764 + dd .L6767 + dd .L6770 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L6773 + section .text +.L1096: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L6777 + cmp dl, 100 + je .L6777 + jmp .L1005 +.L1099: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + je .L6780 + cmp dl, 117 + je .L6780 + jmp .L1005 +.L1102: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6782 + cmp dl, 73 + jg .L6783 + cmp dl, 67 + je .L6785 + cmp dl, 72 + jmp .L8689 +.L6783: + cmp dl, 79 + je .L6790 + cmp dl, 82 + jle .L1005 + jmp .L6792 +.L6782: + cmp dl, 105 + jg .L6794 + cmp dl, 99 + je .L6785 + cmp dl, 104 +.L8689: + jle .L1005 + jmp .L6787 +.L6794: + cmp dl, 111 + jg .L6798 + cmp dl, 110 + jle .L1005 + jmp .L6790 +.L6798: + cmp dl, 115 + je .L6792 + jmp .L1005 +.L1105: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L6802 + cmp dl, 81 + jg .L6803 + cmp dl, 65 + jmp .L8659 +.L6803: + cmp dl, 82 + jle .L6808 + cmp dl, 83 + jle .L1005 + jmp .L6810 +.L6802: + cmp dl, 113 + jg .L6812 + cmp dl, 97 +.L8659: + je .L6805 + jmp .L1005 +.L6812: + cmp dl, 114 + jle .L6808 + cmp dl, 116 + je .L6810 + jmp .L1005 +.L1108: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6817 + cmp dl, 78 + je .L6819 + cmp dl, 82 + jle .L1005 + jmp .L6821 +.L6817: + cmp dl, 110 + jg .L6823 + cmp dl, 109 + jle .L1005 + jmp .L6819 +.L6823: + cmp dl, 115 + je .L6821 + jmp .L1005 +.L1111: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + jg .L6827 + cmp dl, 69 + jg .L6828 + cmp dl, 65 + jg .L6829 + test dl, dl + jle .L6831 + cmp dl, 64 + jle .L999 + jmp .L6833 +.L6829: + cmp dl, 67 + je .L6836 + cmp dl, 68 + jle .L999 + jmp .L6838 +.L6828: + cmp dl, 80 + jg .L6840 + cmp dl, 73 + je .L6842 + jmp .L999 +.L6840: + cmp dl, 81 + jle .L6845 + cmp dl, 83 + jle .L999 + cmp dl, 84 + jle .L6848 + jmp .L6849 +.L6827: + cmp dl, 104 + jg .L6851 + cmp dl, 98 + jg .L6852 + cmp dl, 97 + je .L6833 + jmp .L999 +.L6852: + cmp dl, 99 + jle .L6836 + cmp dl, 101 + je .L6838 + jmp .L999 +.L6851: + cmp dl, 113 + jg .L6858 + cmp dl, 105 + jle .L6842 + cmp dl, 112 + jle .L999 + jmp .L6845 +.L6858: + cmp dl, 115 + jle .L999 + cmp dl, 116 + jle .L6848 + cmp dl, 117 + jle .L6849 + jmp .L999 +.L6831: + mov DWORD [edi], 25604 + jmp .L8700 +.L1114: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6866 + cmp dl, 115 + je .L6866 + jmp .L1005 +.L1117: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L6869 + cmp dl, 99 + je .L6869 + jmp .L1005 +.L1120: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L6872 + cmp dl, 97 + je .L6872 + jmp .L1005 +.L1123: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L6874 + cmp dl, 67 + jg .L6875 + cmp dl, 65 + je .L6877 + cmp dl, 66 + jmp .L8688 +.L6875: + cmp dl, 81 + jle .L1005 + cmp dl, 82 + jle .L6883 + cmp dl, 83 + jle .L6885 + jmp .L6886 +.L6874: + cmp dl, 99 + jg .L6888 + cmp dl, 97 + je .L6877 + cmp dl, 98 +.L8688: + jle .L1005 + jmp .L6879 +.L6888: + cmp dl, 114 + jg .L6892 + cmp dl, 113 + jle .L1005 + jmp .L6883 +.L6892: + cmp dl, 115 + jle .L6885 + cmp dl, 116 + jle .L6886 + jmp .L1005 +.L1126: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L6898 + cmp dl, 108 + jne .L1005 +.L6898: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + jne .L1005 + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L6902 + cmp dl, 120 + jne .L1005 +.L6902: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L6904 + test dl, dl + jle .L6906 + cmp dl, 79 + jle .L999 + jmp .L6908 +.L6904: + cmp dl, 112 + je .L6908 + jmp .L999 +.L6906: + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14283009 + jmp .L9136 +.L6908: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 49 + jne .L1005 + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14285057 + jmp .L9136 +.L6879: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 72 + je .L6918 + cmp dl, 104 + je .L6918 + jmp .L1005 +.L6877: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L6921 + cmp dl, 109 + je .L6921 + jmp .L1005 +.L6886: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L6924 + cmp dl, 114 + je .L6924 + jmp .L1005 +.L6885: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L6927 + cmp dl, 97 + je .L6927 + jmp .L1005 +.L6883: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6930 + cmp dl, 115 + jne .L1005 +.L6930: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L6933 + cmp dl, 116 + jne .L1005 +.L6933: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L6936 + cmp dl, 111 + jne .L1005 +.L6936: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L6939 + cmp dl, 114 + jne .L1005 +.L6939: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 17804801 + jmp .L9130 +.L6927: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L6945 + cmp dl, 118 + jne .L1005 +.L6945: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L6948 + cmp dl, 101 + jne .L1005 +.L6948: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 1027585 + jmp .L9130 +.L6924: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L6954 + cmp dl, 97 + jne .L1005 +.L6954: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L6957 + cmp dl, 99 + jne .L1005 +.L6957: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L6960 + cmp dl, 116 + jne .L1005 +.L6960: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14283777 + jmp .L9136 +.L6921: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14279937 + jmp .L9136 +.L6918: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fxch_insn + mov DWORD [edi+4], 4 + jmp .L9136 +.L6872: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L6972 + cmp dl, 105 + jne .L1005 +.L6972: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L6975 + cmp dl, 116 + jne .L1005 +.L6975: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 39681 + jmp .L9136 +.L6869: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L6981 + cmp dl, 111 + jne .L1005 +.L6981: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L6984 + cmp dl, 109 + jne .L1005 +.L6984: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L6986 + cmp dl, 72 + jg .L6987 + test dl, dl + jg .L999 + jmp .L6994 +.L6987: + cmp dl, 73 + jle .L6991 + cmp dl, 79 + jle .L999 + jmp .L6993 +.L6986: + cmp dl, 105 + jg .L6995 + cmp dl, 104 + jle .L999 + jmp .L6991 +.L6995: + cmp dl, 112 + je .L6993 + jmp .L999 +.L6994: + mov DWORD [edi], fcom2_insn + mov DWORD [edi+4], 14540802 + jmp .L9078 +.L6991: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7001 + test dl, dl + jle .L7003 + cmp dl, 79 + jle .L999 + jmp .L7005 +.L7001: + cmp dl, 112 + je .L7005 + jmp .L999 +.L7003: + mov DWORD [edi], fcom2_insn + mov DWORD [edi+4], 14411778 + jmp .L9130 +.L6993: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7010 + test dl, dl + jle .L7012 + cmp dl, 79 + jle .L999 + jmp .L7014 +.L7010: + cmp dl, 112 + je .L7014 + jmp .L999 +.L7012: + mov DWORD [edi], fcom2_insn + mov DWORD [edi+4], 14542850 + jmp .L9078 +.L7014: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14346497 + jmp .L9078 +.L7005: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fcom2_insn + mov DWORD [edi+4], 14673922 + jmp .L9130 +.L6866: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7026 + cmp dl, 116 + jne .L1005 +.L7026: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14279681 + jmp .L9136 +.L6848: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L7031 + cmp dl, 68 + jg .L7032 + test dl, dl + jle .L7034 + cmp dl, 67 + je .L7036 + jmp .L999 +.L7032: + cmp dl, 79 + jg .L7038 + cmp dl, 69 + jle .L7040 + jmp .L999 +.L7038: + cmp dl, 80 + jle .L7043 + cmp dl, 82 + jle .L999 + jmp .L7045 +.L7031: + cmp dl, 101 + jg .L7047 + cmp dl, 99 + je .L7036 + cmp dl, 100 + jle .L999 + jmp .L7040 +.L7047: + cmp dl, 112 + jg .L7051 + cmp dl, 111 + jle .L999 + jmp .L7043 +.L7051: + cmp dl, 115 + je .L7045 + jmp .L999 +.L7034: + mov DWORD [edi], fst_insn + mov DWORD [edi+4], 3 + jmp .L9136 +.L6849: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L7058 + cmp dl, 98 + je .L7058 + jmp .L1005 +.L6845: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L7061 + cmp dl, 114 + je .L7061 + jmp .L1005 +.L6842: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L7064 + cmp dl, 110 + je .L7064 + jmp .L1005 +.L6836: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L7067 + cmp dl, 97 + je .L7067 + jmp .L1005 +.L6833: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L7070 + cmp dl, 118 + je .L7070 + jmp .L1005 +.L6838: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7073 + cmp dl, 116 + jne .L1005 +.L7073: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L7076 + cmp dl, 112 + jne .L1005 +.L7076: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L7079 + cmp dl, 109 + jne .L1005 +.L7079: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14410753 + mov DWORD [edi+8], 4198402 + jmp .L8696 +.L7070: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7085 + cmp dl, 101 + jne .L1005 +.L7085: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 110877953 + jmp .L9136 +.L7067: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L7091 + cmp dl, 108 + jne .L1005 +.L7091: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7094 + cmp dl, 101 + jne .L1005 +.L7094: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14286081 + jmp .L9136 +.L7064: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + jg .L7099 + test dl, dl + jle .L7101 + cmp dl, 66 + jle .L999 + jmp .L7103 +.L7099: + cmp dl, 99 + je .L7103 + jmp .L999 +.L7101: + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14286337 + jmp .L9078 +.L7103: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L7109 + cmp dl, 111 + jne .L1005 +.L7109: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L7112 + cmp dl, 115 + jne .L1005 +.L7112: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14285569 + jmp .L9078 +.L7061: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7118 + cmp dl, 116 + jne .L1005 +.L7118: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14285313 + jmp .L9136 +.L7058: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L7123 + cmp dl, 79 + jg .L7124 + test dl, dl + jg .L999 + jmp .L7131 +.L7124: + cmp dl, 80 + jle .L7128 + cmp dl, 81 + jle .L999 + jmp .L7130 +.L7123: + cmp dl, 112 + jg .L7132 + cmp dl, 111 + jle .L999 + jmp .L7128 +.L7132: + cmp dl, 114 + je .L7130 + jmp .L999 +.L7131: + mov DWORD [edi], farith_insn + mov DWORD [edi+4], 81848326 + jmp .L9136 +.L7128: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], farithp_insn + mov DWORD [edi+4], 59395 + jmp .L9136 +.L7130: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7141 + test dl, dl + jle .L7143 + cmp dl, 79 + jle .L999 + jmp .L7145 +.L7141: + cmp dl, 112 + je .L7145 + jmp .L999 +.L7143: + mov DWORD [edi], farith_insn + mov DWORD [edi+4], 99147782 + jmp .L9136 +.L7145: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], farithp_insn + mov DWORD [edi+4], 57347 + jmp .L9136 +.L7036: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L7154 + cmp dl, 119 + je .L7154 + jmp .L1005 +.L7040: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L7157 + cmp dl, 110 + je .L7157 + jmp .L1005 +.L7043: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fldstp_insn + mov DWORD [edi+4], 117692420 + jmp .L9136 +.L7045: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L7163 + cmp dl, 119 + jne .L1005 +.L7163: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fstsw_insn + jmp .L9247 +.L7157: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L7169 + cmp dl, 118 + jne .L1005 +.L7169: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 110876929 + jmp .L9136 +.L7154: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fstcw_insn + mov DWORD [edi+4], 1 + jmp .L9136 +.L6819: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L7178 + cmp dl, 100 + je .L7178 + jmp .L1005 +.L6821: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7181 + cmp dl, 116 + jne .L1005 +.L7181: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L7184 + cmp dl, 111 + jne .L1005 +.L7184: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L7187 + cmp dl, 114 + jne .L1005 +.L7187: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebytemem_insn + mov DWORD [edi+4], 318721 + jmp .L9136 +.L7178: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L7193 + cmp dl, 105 + jne .L1005 +.L7193: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L7196 + cmp dl, 110 + jne .L1005 +.L7196: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7199 + cmp dl, 116 + jne .L1005 +.L7199: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14285825 + jmp .L9136 +.L6810: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L7205 + cmp dl, 97 + je .L7205 + jmp .L1005 +.L6805: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7208 + cmp dl, 116 + je .L7208 + jmp .L1005 +.L6808: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7211 + cmp dl, 101 + jne .L1005 +.L7211: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L7214 + cmp dl, 109 + jne .L1005 +.L7214: + inc ecx + mov dl, BYTE [ecx] + test dl, dl + jle .L7217 + cmp dl, 49 + je .L7219 + jmp .L999 +.L7217: + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14284801 + jmp .L9136 +.L7219: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14284033 + jmp .L9078 +.L7208: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L7226 + cmp dl, 97 + jne .L1005 +.L7226: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L7229 + cmp dl, 110 + jne .L1005 +.L7229: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14283521 + jmp .L9136 +.L7205: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L7235 + cmp dl, 110 + jne .L1005 +.L7235: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14283265 + jmp .L9136 +.L6787: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L7241 + cmp dl, 110 + je .L7241 + jmp .L1005 +.L6792: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L7243 + cmp dl, 65 + je .L7245 + cmp dl, 83 + jle .L1005 + jmp .L7247 +.L7243: + cmp dl, 97 + jg .L7249 + cmp dl, 96 + jle .L1005 + jmp .L7245 +.L7249: + cmp dl, 116 + je .L7247 + jmp .L1005 +.L6785: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L7254 + cmp dl, 108 + je .L7254 + jmp .L1005 +.L6790: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L7257 + cmp dl, 112 + jne .L1005 +.L7257: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14274561 + jmp .L9136 +.L7254: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7263 + cmp dl, 101 + jne .L1005 +.L7263: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L7266 + cmp dl, 120 + jne .L1005 +.L7266: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14410241 + jmp .L9136 +.L7245: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L7272 + cmp dl, 118 + je .L7272 + jmp .L1005 +.L7247: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L7274 + cmp dl, 68 + jg .L7275 + cmp dl, 67 + jmp .L8690 +.L7275: + cmp dl, 69 + jle .L7279 + cmp dl, 82 + jle .L1005 + jmp .L7281 +.L7274: + cmp dl, 100 + jg .L7283 + cmp dl, 99 +.L8690: + jne .L1005 + jmp .L7282 +.L7283: + cmp dl, 101 + jle .L7279 + cmp dl, 115 + je .L7281 + jmp .L1005 +.L7282: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L7289 + cmp dl, 119 + je .L7289 + jmp .L1005 +.L7281: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L7292 + cmp dl, 119 + je .L7292 + jmp .L1005 +.L7279: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L7295 + cmp dl, 110 + jne .L1005 +.L7295: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L7298 + cmp dl, 118 + jne .L1005 +.L7298: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebytemem_insn + mov DWORD [edi+4], 448769 + jmp .L9136 +.L7292: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fnstsw_insn +.L9247: + mov DWORD [edi+4], 2 + jmp .L9136 +.L7289: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fldnstcw_insn + mov DWORD [edi+4], 1793 + jmp .L9136 +.L7272: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7310 + cmp dl, 101 + jne .L1005 +.L7310: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebytemem_insn + mov DWORD [edi+4], 449793 + jmp .L9136 +.L7241: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L7316 + cmp dl, 105 + jne .L1005 +.L7316: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7319 + cmp dl, 116 + jne .L1005 +.L7319: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14410497 + jmp .L9136 +.L6780: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L7325 + cmp dl, 108 + jne .L1005 +.L7325: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7327 + test dl, dl + jle .L7329 + cmp dl, 79 + jle .L999 + jmp .L7331 +.L7327: + cmp dl, 112 + je .L7331 + jmp .L999 +.L7329: + mov DWORD [edi], farith_insn + mov DWORD [edi+4], 29935622 + jmp .L9136 +.L7331: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], farithp_insn + mov DWORD [edi+4], 51203 + jmp .L9136 +.L6777: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 89 + jg .L7339 + cmp dl, 68 + jg .L7340 + cmp dl, 49 + jg .L7341 + test dl, dl + jle .L7343 + cmp dl, 48 + jle .L999 + jmp .L7345 +.L7341: + cmp dl, 67 + je .L7348 + jmp .L999 +.L7340: + cmp dl, 76 + jg .L7350 + cmp dl, 69 + jle .L7352 + cmp dl, 75 + jle .L999 + jmp .L7354 +.L7350: + cmp dl, 80 + je .L7357 + jmp .L999 +.L7339: + cmp dl, 107 + jg .L7359 + cmp dl, 99 + jg .L7360 + cmp dl, 90 + jle .L7362 + cmp dl, 98 + jle .L999 + jmp .L7348 +.L7360: + cmp dl, 101 + je .L7352 + jmp .L999 +.L7359: + cmp dl, 112 + jg .L7367 + cmp dl, 108 + jle .L7354 + cmp dl, 111 + jle .L999 + jmp .L7357 +.L7367: + cmp dl, 122 + je .L7362 + jmp .L999 +.L7343: + mov DWORD [edi], fldstp_insn + mov DWORD [edi+4], 83935236 + jmp .L9136 +.L7345: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14280705 + jmp .L9136 +.L7348: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L7378 + cmp dl, 119 + je .L7378 + jmp .L1005 +.L7352: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L7381 + cmp dl, 110 + je .L7381 + jmp .L1005 +.L7354: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + jg .L7383 + cmp dl, 50 + jg .L7384 + cmp dl, 49 + jle .L1005 + jmp .L7386 +.L7384: + cmp dl, 71 + je .L7389 + jmp .L1005 +.L7383: + cmp dl, 103 + jg .L7391 + cmp dl, 78 + jle .L7393 + cmp dl, 102 + jle .L1005 + jmp .L7389 +.L7391: + cmp dl, 110 + je .L7393 + jmp .L1005 +.L7357: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L7398 + cmp dl, 105 + je .L7398 + jmp .L1005 +.L7362: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14282241 + jmp .L9136 +.L7398: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14281473 + jmp .L9136 +.L7386: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L7406 + cmp dl, 69 + je .L7408 + cmp dl, 83 + jle .L1005 + jmp .L7410 +.L7406: + cmp dl, 101 + jg .L7412 + cmp dl, 100 + jle .L1005 + jmp .L7408 +.L7412: + cmp dl, 116 + je .L7410 + jmp .L1005 +.L7389: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + je .L7417 + jmp .L1005 +.L7393: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + jne .L1005 + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14281985 + jmp .L9136 +.L7417: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14281729 + jmp .L9136 +.L7408: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14281217 + jmp .L9136 +.L7410: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14280961 + jmp .L9136 +.L7381: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L7432 + cmp dl, 118 + jne .L1005 +.L7432: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebytemem_insn + mov DWORD [edi+4], 317697 + jmp .L9136 +.L7378: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fldnstcw_insn + mov DWORD [edi+4], 1281 + jmp .L9136 +.L6764: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L7441 + cmp dl, 100 + je .L7441 + jmp .L1005 +.L6773: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + jg .L7443 + cmp dl, 83 + jle .L1005 + cmp dl, 84 + jle .L7446 + jmp .L7447 +.L7443: + cmp dl, 115 + jle .L1005 + cmp dl, 116 + jle .L7446 + cmp dl, 117 + jle .L7447 + jmp .L1005 +.L6758: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L7453 + cmp dl, 111 + je .L7453 + jmp .L1005 +.L6755: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L7456 + cmp dl, 100 + je .L7456 + jmp .L1005 +.L6767: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + je .L7459 + cmp dl, 117 + je .L7459 + jmp .L1005 +.L6761: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L7462 + cmp dl, 105 + je .L7462 + jmp .L1005 +.L6770: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + jg .L7464 + cmp dl, 67 + je .L7466 + cmp dl, 72 + jle .L1005 + jmp .L7468 +.L7464: + cmp dl, 99 + jg .L7470 + cmp dl, 98 + jle .L1005 + jmp .L7466 +.L7470: + cmp dl, 105 + je .L7468 + jmp .L1005 +.L7466: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L7475 + cmp dl, 115 + je .L7475 + jmp .L1005 +.L7468: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7478 + cmp dl, 116 + jne .L1005 +.L7478: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], threebyte_insn + mov DWORD [edi+4], -1730419967 + jmp .L9136 +.L7475: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7484 + cmp dl, 116 + jne .L1005 +.L7484: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L7487 + cmp dl, 112 + jne .L1005 +.L7487: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14284545 + jmp .L9136 +.L7462: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L7493 + cmp dl, 118 + jne .L1005 +.L7493: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L7495 + test dl, dl + jle .L7497 + cmp dl, 81 + jle .L999 + jmp .L7499 +.L7495: + cmp dl, 114 + je .L7499 + jmp .L999 +.L7497: + mov DWORD [edi], fiarith_insn + mov DWORD [edi+4], 449026 + jmp .L9136 +.L7499: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fiarith_insn + mov DWORD [edi+4], 514562 + jmp .L9136 +.L7459: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L7508 + cmp dl, 108 + jne .L1005 +.L7508: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fiarith_insn + mov DWORD [edi+4], 121346 + jmp .L9136 +.L7456: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L7514 + cmp dl, 100 + jne .L1005 +.L7514: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fiarith_insn + mov DWORD [edi+4], 55810 + jmp .L9136 +.L7453: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L7520 + cmp dl, 109 + jne .L1005 +.L7520: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7522 + test dl, dl + jle .L7524 + cmp dl, 79 + jle .L999 + jmp .L7526 +.L7522: + cmp dl, 112 + je .L7526 + jmp .L999 +.L7524: + mov DWORD [edi], fiarith_insn + mov DWORD [edi+4], 186882 + jmp .L9136 +.L7526: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fiarith_insn + mov DWORD [edi+4], 252418 + jmp .L9136 +.L7446: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7534 + test dl, dl + jle .L7536 + cmp dl, 79 + jle .L999 + jmp .L7538 +.L7534: + cmp dl, 112 + je .L7538 + jmp .L999 +.L7536: + mov DWORD [edi], fiarith_insn + mov DWORD [edi+4], 187138 + jmp .L9136 +.L7447: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L7544 + cmp dl, 98 + jne .L1005 +.L7544: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L7546 + test dl, dl + jle .L7548 + cmp dl, 81 + jle .L999 + jmp .L7550 +.L7546: + cmp dl, 114 + je .L7550 + jmp .L999 +.L7548: + mov DWORD [edi], fiarith_insn + mov DWORD [edi+4], 317954 + jmp .L9136 +.L7550: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fiarith_insn + mov DWORD [edi+4], 383490 + jmp .L9136 +.L7538: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fildstp_insn + mov DWORD [edi+4], 459523 + jmp .L9136 +.L7441: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fildstp_insn + mov DWORD [edi+4], 327683 + jmp .L9136 +.L6750: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7565 + cmp dl, 101 + jne .L1005 +.L7565: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7568 + cmp dl, 101 + jne .L1005 +.L7568: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7570 + test dl, dl + jle .L7572 + cmp dl, 79 + jle .L999 + jmp .L7574 +.L7570: + cmp dl, 112 + je .L7574 + jmp .L999 +.L7572: + mov DWORD [edi], ffree_insn + mov DWORD [edi+4], 56577 + jmp .L9136 +.L7574: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ffree_insn + mov DWORD [edi+4], 57089 + mov DWORD [edi+8], 2101280 + jmp .L8696 +.L6747: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L7583 + cmp dl, 109 + jne .L1005 +.L7583: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L7586 + cmp dl, 115 + jne .L1005 +.L7586: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 986625 +.L8826: + mov DWORD [edi+8], 65536 + jmp .L8696 +.L6740: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L7592 + cmp dl, 118 + je .L7592 + jmp .L1005 +.L6738: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L7595 + cmp dl, 99 + jne .L1005 +.L7595: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L7598 + cmp dl, 115 + jne .L1005 +.L7598: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7601 + cmp dl, 116 + jne .L1005 +.L7601: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L7604 + cmp dl, 112 + jne .L1005 +.L7604: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14284289 + jmp .L9136 +.L7592: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L7609 + cmp dl, 79 + jg .L7610 + test dl, dl + jg .L999 + jmp .L7617 +.L7610: + cmp dl, 80 + jle .L7614 + cmp dl, 81 + jle .L999 + jmp .L7616 +.L7609: + cmp dl, 112 + jg .L7618 + cmp dl, 111 + jle .L999 + jmp .L7614 +.L7618: + cmp dl, 114 + je .L7616 + jmp .L999 +.L7617: + mov DWORD [edi], farith_insn + mov DWORD [edi+4], 116455430 + jmp .L9136 +.L7614: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], farithp_insn + mov DWORD [edi+4], 63491 + jmp .L9136 +.L7616: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7627 + test dl, dl + jle .L7629 + cmp dl, 79 + jle .L999 + jmp .L7631 +.L7627: + cmp dl, 112 + je .L7631 + jmp .L999 +.L7629: + mov DWORD [edi], farith_insn + mov DWORD [edi+4], 133754886 + jmp .L9136 +.L7631: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], farithp_insn + mov DWORD [edi+4], 61443 + jmp .L9136 +.L6728: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L7639 + cmp dl, 77 + je .L7641 + cmp dl, 82 + jle .L1005 + jmp .L7643 +.L7639: + cmp dl, 109 + jg .L7645 + cmp dl, 108 + jle .L1005 + jmp .L7641 +.L7645: + cmp dl, 115 + je .L7643 + jmp .L1005 +.L6721: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L7650 + cmp dl, 115 + je .L7650 + jmp .L1005 +.L6724: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7653 + cmp dl, 101 + je .L7653 + jmp .L1005 +.L6726: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L7656 + cmp dl, 111 + jne .L1005 +.L7656: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L7659 + cmp dl, 118 + jne .L1005 +.L7659: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + jg .L7661 + cmp dl, 69 + jg .L7662 + cmp dl, 66 + je .L7664 + cmp dl, 68 + jmp .L8691 +.L7662: + cmp dl, 78 + je .L7669 + cmp dl, 84 + jle .L1005 + jmp .L7671 +.L7661: + cmp dl, 101 + jg .L7673 + cmp dl, 98 + je .L7664 + cmp dl, 100 +.L8691: + jle .L1005 + jmp .L7666 +.L7673: + cmp dl, 110 + jg .L7677 + cmp dl, 109 + jle .L1005 + jmp .L7669 +.L7677: + cmp dl, 117 + je .L7671 + jmp .L1005 +.L7664: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L7681 + test dl, dl + jle .L7683 + cmp dl, 68 + jle .L999 + jmp .L7685 +.L7681: + cmp dl, 101 + je .L7685 + jmp .L999 +.L7683: + mov DWORD [edi], fcmovcc_insn + mov DWORD [edi+4], 14336001 + jmp .L9130 +.L7666: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fcmovcc_insn + mov DWORD [edi+4], 14338049 + jmp .L9130 +.L7669: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L7693 + cmp dl, 66 + je .L7695 + cmp dl, 68 + jle .L1005 + jmp .L7697 +.L7693: + cmp dl, 98 + jg .L7699 + cmp dl, 97 + jle .L1005 + jmp .L7695 +.L7699: + cmp dl, 101 + je .L7697 + jmp .L1005 +.L7671: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fcmovcc_insn + mov DWORD [edi+4], 14342145 + jmp .L9130 +.L7695: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L7706 + test dl, dl + jle .L7708 + cmp dl, 68 + jle .L999 + jmp .L7710 +.L7706: + cmp dl, 101 + je .L7710 + jmp .L999 +.L7708: + mov DWORD [edi], fcmovcc_insn + mov DWORD [edi+4], 14401537 + jmp .L9130 +.L7697: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fcmovcc_insn + mov DWORD [edi+4], 14403585 + jmp .L9130 +.L7710: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fcmovcc_insn + mov DWORD [edi+4], 14405633 + jmp .L9130 +.L7685: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fcmovcc_insn + mov DWORD [edi+4], 14340097 + jmp .L9130 +.L7653: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L7725 + cmp dl, 120 + jne .L1005 +.L7725: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], threebyte_insn + mov DWORD [edi+4], -1730420223 + jmp .L9136 +.L7650: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14278657 + jmp .L9136 +.L7641: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7733 + cmp dl, 72 + jg .L7734 + test dl, dl + jg .L999 + jmp .L7741 +.L7734: + cmp dl, 73 + jle .L7738 + cmp dl, 79 + jle .L999 + jmp .L7740 +.L7733: + cmp dl, 105 + jg .L7742 + cmp dl, 104 + jle .L999 + jmp .L7738 +.L7742: + cmp dl, 112 + je .L7740 + jmp .L999 +.L7741: + mov DWORD [edi], fcom_insn + mov DWORD [edi+4], 184324 + jmp .L9136 +.L7643: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14286593 +.L9078: + mov DWORD [edi+8], 4098 + jmp .L8696 +.L7740: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7751 + test dl, dl + jle .L7753 + cmp dl, 79 + jle .L999 + jmp .L7755 +.L7751: + cmp dl, 112 + je .L7755 + jmp .L999 +.L7753: + mov DWORD [edi], fcom_insn + mov DWORD [edi+4], 251908 + jmp .L9136 +.L7738: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7760 + test dl, dl + jle .L7762 + cmp dl, 79 + jle .L999 + jmp .L7764 +.L7760: + cmp dl, 112 + je .L7764 + jmp .L999 +.L7762: + mov DWORD [edi], fcom2_insn + mov DWORD [edi+4], 14413826 + jmp .L9130 +.L7764: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fcom2_insn + mov DWORD [edi+4], 14675970 +.L9130: + mov DWORD [edi+8], 4128 + jmp .L8696 +.L7755: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14604545 + jmp .L9136 +.L6710: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L7776 + cmp dl, 100 + je .L7776 + jmp .L1005 +.L6712: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7779 + cmp dl, 116 + jne .L1005 +.L7779: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L7782 + cmp dl, 112 + jne .L1005 +.L7782: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fbldstp_insn + mov DWORD [edi+4], 1537 + jmp .L9136 +.L7776: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fbldstp_insn + mov DWORD [edi+4], 1025 + jmp .L9136 +.L6701: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 3 + jmp .L8697 +.L6699: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L7792 + cmp dl, 100 + je .L7792 + jmp .L1005 +.L6696: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L7795 + cmp dl, 115 + jne .L1005 +.L7795: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14278913 + jmp .L9136 +.L7792: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7800 + test dl, dl + jle .L7802 + cmp dl, 79 + jle .L999 + jmp .L7804 +.L7800: + cmp dl, 112 + je .L7804 + jmp .L999 +.L7802: + mov DWORD [edi], farith_insn + mov DWORD [edi+4], 12632070 + jmp .L9136 +.L7804: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], farithp_insn + mov DWORD [edi+4], 49155 + jmp .L9136 +.L6691: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L7813 + cmp dl, 109 + jne .L1005 +.L7813: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 49 + jne .L1005 + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14282753 +.L9136: + mov DWORD [edi+8], 4096 + jmp .L8696 +.L1016: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L7819 + cmp dl, 75 + jg .L7820 + cmp dl, 72 + jmp .L8658 +.L7820: + cmp dl, 76 + jle .L7825 + cmp dl, 81 + jle .L1005 + jmp .L7827 +.L7819: + cmp dl, 107 + jg .L7829 + cmp dl, 104 +.L8658: + je .L7822 + jmp .L1005 +.L7829: + cmp dl, 108 + jle .L7825 + cmp dl, 114 + je .L7827 + jmp .L1005 +.L1019: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L7835 + cmp dl, 98 + je .L7835 + jmp .L1005 +.L1022: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L7838 + cmp dl, 97 + je .L7838 + jmp .L1005 +.L1025: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7841 + cmp dl, 116 + je .L7841 + jmp .L1005 +.L1028: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7844 + cmp dl, 101 + je .L7844 + jmp .L1005 +.L1031: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L7847 + cmp dl, 100 + je .L7847 + jmp .L1005 +.L1034: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 76 + cmp eax, 41 + ja .L1005 + jmp DWORD [.L7863+eax*4] + section .rodata + align 4 + align 4 +.L7863: + dd .L7852 + dd .L1005 + dd .L1005 + dd .L7855 + dd .L1005 + dd .L1005 + dd .L7858 + dd .L1005 + dd .L1005 + dd .L7861 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L7852 + dd .L1005 + dd .L1005 + dd .L7855 + dd .L1005 + dd .L1005 + dd .L7858 + dd .L1005 + dd .L1005 + dd .L7861 + section .text +.L1037: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + jg .L7864 + cmp dl, 67 + jg .L7865 + test dl, dl + jg .L999 + jmp .L7872 +.L7865: + cmp dl, 68 + jle .L7869 + cmp dl, 75 + jle .L999 + jmp .L7871 +.L7864: + cmp dl, 100 + jg .L7873 + cmp dl, 99 + jle .L999 + jmp .L7869 +.L7873: + cmp dl, 108 + je .L7871 + jmp .L999 +.L7872: + mov DWORD [edi], 54 + jmp .L8699 +.L1040: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L7878 + cmp dl, 100 + je .L7878 + jmp .L1005 +.L1043: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L7880 + cmp dl, 73 + je .L7882 + cmp dl, 82 + jle .L1005 + jmp .L7884 +.L7880: + cmp dl, 105 + jg .L7886 + cmp dl, 104 + jle .L1005 + jmp .L7882 +.L7886: + cmp dl, 115 + je .L7884 + jmp .L1005 +.L1046: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + jg .L7890 + test dl, dl + jle .L7892 + cmp dl, 75 + jle .L999 + jmp .L7894 +.L7890: + cmp dl, 108 + je .L7894 + jmp .L999 +.L7892: + mov DWORD [edi], 52 + jmp .L8699 +.L1049: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L7898 + cmp dl, 114 + je .L7898 + jmp .L1005 +.L1052: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L7901 + push ebx + push DWORD LC16 + push esi + push DWORD 0 + call yasm__warning + add esp, 16 +.L7901: + mov DWORD [edi], 13826 +.L8700: + mov eax, 4 + jmp .L926 +.L1055: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 48 + cmp eax, 66 + ja .L1005 + jmp DWORD [.L7931+eax*4] + section .rodata + align 4 + align 4 +.L7931: + dd .L7911 + dd .L7911 + dd .L7911 + dd .L7911 + dd .L7911 + dd .L7911 + dd .L7911 + dd .L7911 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L7914 + dd .L7917 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L7920 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L7923 + dd .L1005 + dd .L7926 + dd .L1005 + dd .L1005 + dd .L7929 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L7914 + dd .L7917 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L7920 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L7923 + dd .L1005 + dd .L7926 + dd .L1005 + dd .L1005 + dd .L7929 + section .text +.L1058: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L7933 + cmp dl, 98 + je .L7933 + jmp .L1005 +.L1061: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L7935 + cmp dl, 75 + jg .L7936 + cmp dl, 68 + jmp .L8657 +.L7936: + cmp dl, 76 + jle .L7941 + cmp dl, 83 + jle .L1005 + jmp .L7943 +.L7935: + cmp dl, 107 + jg .L7945 + cmp dl, 100 +.L8657: + je .L7938 + jmp .L1005 +.L7945: + cmp dl, 108 + jle .L7941 + cmp dl, 116 + je .L7943 + jmp .L1005 +.L1064: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L7951 + cmp dl, 97 + je .L7951 + jmp .L1005 +.L1067: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L7954 + cmp dl, 115 + jne .L1005 +.L7954: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L7956 + cmp dl, 68 + jg .L7957 + cmp dl, 67 + jmp .L8692 +.L7957: + cmp dl, 69 + jle .L7961 + cmp dl, 81 + jle .L1005 + jmp .L7963 +.L7956: + cmp dl, 100 + jg .L7965 + cmp dl, 99 +.L8692: + jne .L1005 + jmp .L7964 +.L7965: + cmp dl, 101 + jle .L7961 + cmp dl, 114 + je .L7963 + jmp .L1005 +.L7964: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L7971 + cmp dl, 97 + je .L7971 + jmp .L1005 +.L7961: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + jg .L7973 + cmp dl, 78 + je .L7975 + cmp dl, 87 + jle .L1005 + jmp .L7977 +.L7973: + cmp dl, 110 + jg .L7979 + cmp dl, 109 + jle .L1005 + jmp .L7975 +.L7979: + cmp dl, 120 + je .L7977 + jmp .L1005 +.L7963: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7984 + cmp dl, 101 + jne .L1005 +.L7984: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7987 + cmp dl, 116 + jne .L1005 +.L7987: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 984833 + mov DWORD [edi+8], 8650784 + jmp .L8696 +.L7975: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7993 + cmp dl, 116 + je .L7993 + jmp .L1005 +.L7977: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L7996 + cmp dl, 105 + jne .L1005 +.L7996: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7999 + cmp dl, 116 + jne .L1005 +.L7999: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 996609 + mov DWORD [edi+8], 8388640 + jmp .L8696 +.L7993: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L8008 + cmp dl, 101 + jne .L1005 +.L8008: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L8011 + cmp dl, 114 + jne .L1005 +.L8011: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 996353 +.L9010: + mov DWORD [edi+8], 32 + jmp .L8696 +.L7971: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L8020 + cmp dl, 108 + jne .L1005 +.L8020: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L8023 + cmp dl, 108 + jne .L1005 +.L8023: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 984321 + mov DWORD [edi+8], 262176 + jmp .L8696 +.L7951: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L8029 + cmp dl, 112 + jne .L1005 +.L8029: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 71 + je .L8032 + cmp dl, 103 + jne .L1005 +.L8032: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L8035 + cmp dl, 115 + jne .L1005 +.L8035: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], threebyte_insn + mov DWORD [edi+4], 251787265 + jmp .L9148 +.L7938: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L8042 + cmp dl, 99 + je .L8042 + jmp .L1005 +.L7941: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L8045 + cmp dl, 100 + je .L8045 + jmp .L1005 +.L7943: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L8048 + cmp dl, 115 + jne .L1005 +.L8048: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixsmm_insn + mov DWORD [edi+4], 31745 + jmp .L9141 +.L8045: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L8054 + cmp dl, 116 + jne .L1005 +.L8054: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixsmm_insn + mov DWORD [edi+4], 31233 + jmp .L9141 +.L8042: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], svdc_insn +.L9257: + mov DWORD [edi+4], 1 +.L9141: + mov DWORD [edi+8], 655368 + jmp .L8696 +.L7933: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L8062 + cmp dl, 79 + jg .L8063 + test dl, dl + jg .L999 + jmp .L8070 +.L8063: + cmp dl, 80 + jle .L8067 + cmp dl, 82 + jle .L999 + jmp .L8069 +.L8062: + cmp dl, 112 + jg .L8071 + cmp dl, 111 + jle .L999 + jmp .L8067 +.L8071: + cmp dl, 115 + je .L8069 + jmp .L999 +.L8070: + mov DWORD [edi], arith_insn + mov DWORD [edi+4], 337943 + jmp .L8695 +.L8067: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L8077 + cmp dl, 68 + je .L8079 + cmp dl, 82 + jle .L1005 + jmp .L8081 +.L8077: + cmp dl, 100 + jg .L8083 + cmp dl, 99 + jle .L1005 + jmp .L8079 +.L8083: + cmp dl, 115 + je .L8081 + jmp .L1005 +.L8069: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L8087 + cmp dl, 68 + je .L8089 + cmp dl, 82 + jle .L1005 + jmp .L8091 +.L8087: + cmp dl, 100 + jg .L8092 + cmp dl, 99 + jle .L1005 + jmp .L8089 +.L8092: + cmp dl, 115 + jne .L1005 +.L8091: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15948801 + jmp .L9152 +.L8089: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15883265 + jmp .L9151 +.L8081: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 23553 + jmp .L9152 +.L8079: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6708225 + jmp .L9151 +.L7911: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + movsx eax, BYTE [ebx+2] + sub eax, 48 + or eax, 96 +.L9201: + mov DWORD [edi], eax + jmp .L8699 +.L7914: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 63745 + jmp .L8695 +.L7917: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 64769 + jmp .L8695 +.L7920: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 64257 + jmp .L8695 +.L7926: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L8119 + cmp dl, 115 + je .L8119 + jmp .L1005 +.L7929: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], str_insn + mov DWORD [edi+4], 4 +.L9031: + mov DWORD [edi+8], 1048578 + jmp .L8696 +.L7923: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L8125 + cmp dl, 120 + jne .L1005 +.L8125: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L8128 + cmp dl, 99 + jne .L1005 +.L8128: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L8131 + cmp dl, 115 + jne .L1005 +.L8131: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L8134 + cmp dl, 114 + jne .L1005 +.L8134: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ldstmxcsr_insn +.L9264: + mov DWORD [edi+4], 769 + jmp .L9152 +.L8119: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L8139 + cmp dl, 68 + jg .L8140 + cmp dl, 66 + je .L8142 + cmp dl, 67 + jmp .L8693 +.L8140: + cmp dl, 81 + je .L8147 + cmp dl, 86 + jle .L1005 + jmp .L8149 +.L8139: + cmp dl, 100 + jg .L8151 + cmp dl, 98 + je .L8142 + cmp dl, 99 +.L8693: + jle .L1005 + jmp .L8144 +.L8151: + cmp dl, 113 + jg .L8155 + cmp dl, 112 + jle .L1005 + jmp .L8147 +.L8155: + cmp dl, 119 + je .L8149 + jmp .L1005 +.L8142: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 43521 + jmp .L8695 +.L8149: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1092353 + jmp .L8695 +.L8144: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2140929 + jmp .L9186 +.L8147: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4238081 + jmp .L9148 +.L7898: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L8173 + cmp dl, 116 + jne .L1005 +.L8173: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L8175 + cmp dl, 80 + je .L8177 + cmp dl, 82 + jle .L1005 + jmp .L8179 +.L8175: + cmp dl, 112 + jg .L8181 + cmp dl, 111 + jle .L1005 + jmp .L8177 +.L8181: + cmp dl, 115 + je .L8179 + jmp .L1005 +.L8177: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L8185 + cmp dl, 68 + je .L8187 + cmp dl, 82 + jle .L1005 + jmp .L8189 +.L8185: + cmp dl, 100 + jg .L8191 + cmp dl, 99 + jle .L1005 + jmp .L8187 +.L8191: + cmp dl, 115 + je .L8189 + jmp .L1005 +.L8179: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L8195 + cmp dl, 68 + je .L8197 + cmp dl, 82 + jle .L1005 + jmp .L8199 +.L8195: + cmp dl, 100 + jg .L8201 + cmp dl, 99 + jle .L1005 + jmp .L8197 +.L8201: + cmp dl, 115 + je .L8199 + jmp .L1005 +.L8197: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15880449 + jmp .L9151 +.L8199: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15945985 + jmp .L9152 +.L8187: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6705409 + jmp .L9151 +.L8189: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 20737 + jmp .L9152 +.L7894: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 36 + jmp .L8699 +.L7884: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L8220 + cmp dl, 119 + je .L8220 + jmp .L1005 +.L7882: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + jg .L8222 + test dl, dl + jle .L8224 + cmp dl, 77 + jle .L999 + jmp .L8226 +.L8222: + cmp dl, 110 + je .L8226 + jmp .L999 +.L8224: + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 61697 +.L9016: + mov DWORD [edi+8], 2097156 + jmp .L8696 +.L8226: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L8232 + cmp dl, 116 + jne .L1005 +.L8232: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + jg .L8234 + test dl, dl + jle .L8236 + cmp dl, 78 + jle .L999 + jmp .L8238 +.L8234: + cmp dl, 111 + je .L8238 + jmp .L999 +.L8236: + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 997377 + mov DWORD [edi+8], 131104 + jmp .L8696 +.L8238: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L8244 + cmp dl, 108 + jne .L1005 +.L8244: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L8247 + cmp dl, 100 + jne .L1005 +.L8247: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 1015297 + mov DWORD [edi+8], 4325384 + jmp .L8696 +.L8220: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sldtmsw_insn + mov DWORD [edi+4], 262406 + jmp .L9153 +.L7878: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L8256 + cmp dl, 116 + jne .L1005 +.L8256: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sldtmsw_insn + mov DWORD [edi+4], 6 +.L9153: + mov DWORD [edi+8], 2 + jmp .L8696 +.L7871: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L8262 +.L9215: + push ebx + push DWORD LC15 + jmp .L8698 +.L8262: + mov DWORD [edi], 38 +.L8699: + mov eax, 3 + jmp .L926 +.L7869: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L8264 + cmp dl, 116 + jne .L1005 +.L8264: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 17760513 + jmp .L9154 +.L7855: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L8270 + cmp dl, 114 + je .L8270 + jmp .L1005 +.L7852: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + jg .L8272 + test dl, dl + jle .L8603 + cmp dl, 67 + jle .L999 + jmp .L8276 +.L8272: + cmp dl, 100 + je .L8276 + jmp .L999 +.L8274: +.L7858: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + jg .L8281 + test dl, dl + jle .L8283 + cmp dl, 67 + jle .L999 + jmp .L8285 +.L8281: + cmp dl, 100 + je .L8285 + jmp .L999 +.L8283: + mov DWORD [edi], shift_insn + mov DWORD [edi+4], 1288 + jmp .L8695 +.L7861: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 70 + je .L8291 + cmp dl, 102 + jne .L1005 +.L8291: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L8294 + cmp dl, 112 + jne .L1005 +.L8294: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L8296 + cmp dl, 68 + je .L8298 + cmp dl, 82 + jle .L1005 + jmp .L8300 +.L8296: + cmp dl, 100 + jg .L8302 + cmp dl, 99 + jle .L1005 + jmp .L8298 +.L8302: + cmp dl, 115 + je .L8300 + jmp .L1005 +.L8298: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssessimm_insn + mov DWORD [edi+4], 6735361 +.L9151: + mov DWORD [edi+8], 32768 + jmp .L8696 +.L8300: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssepsimm_insn + mov DWORD [edi+4], 50689 +.L9152: + mov DWORD [edi+8], 16384 + jmp .L8696 +.L8285: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], shlrd_insn + mov DWORD [edi+4], 44038 + jmp .L9186 +.L8276: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], shlrd_insn + mov DWORD [edi+4], 41990 + jmp .L9186 +.L8270: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L8319 + cmp dl, 116 + jne .L1005 +.L8319: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 2 + jmp .L8697 +.L7847: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L8323 + cmp dl, 116 + jne .L1005 +.L8323: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 983297 +.L9154: + mov DWORD [edi+8], 8388610 + jmp .L8696 +.L7844: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L8329 + cmp dl, 110 + jne .L1005 +.L8329: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L8332 + cmp dl, 99 + jne .L1005 +.L8332: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L8335 + cmp dl, 101 + jne .L1005 +.L8335: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], threebyte_insn + mov DWORD [edi+4], 263124993 +.L9024: + mov DWORD [edi+8], 64 + jmp .L8696 +.L7841: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 57 + ja .L1005 + jmp DWORD [.L8375+eax*4] + section .rodata + align 4 + align 4 +.L8375: + dd .L8343 + dd .L8346 + dd .L8488 + dd .L1005 + dd .L8373 + dd .L1005 + dd .L8355 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8358 + dd .L1005 + dd .L8361 + dd .L8364 + dd .L8367 + dd .L1005 + dd .L1005 + dd .L8370 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8373 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8343 + dd .L8346 + dd .L8488 + dd .L1005 + dd .L8373 + dd .L1005 + dd .L8355 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8358 + dd .L1005 + dd .L8361 + dd .L8364 + dd .L8367 + dd .L1005 + dd .L1005 + dd .L8370 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8373 + section .text +.L8343: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L8376 + test dl, dl + jle .L9213 + cmp dl, 68 + jle .L999 + jmp .L8380 +.L8376: + cmp dl, 101 + je .L8380 + jmp .L999 +.L8378: +.L8346: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L8385 + test dl, dl + jle .L9212 + cmp dl, 68 + jle .L999 + jmp .L8389 +.L8385: + cmp dl, 101 + je .L8389 + jmp .L999 +.L8387: +.L8349: +.L8352: +.L8355: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L8400 + test dl, dl + jle .L9210 + cmp dl, 68 + jle .L999 + jmp .L8404 +.L8400: + cmp dl, 101 + je .L8404 + jmp .L999 +.L8402: +.L8358: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L8409 + test dl, dl + jle .L9209 + cmp dl, 68 + jle .L999 + jmp .L8413 +.L8409: + cmp dl, 101 + je .L8413 + jmp .L999 +.L8411: +.L8361: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 57 + ja .L1005 + jmp DWORD [.L8450+eax*4] + section .rodata + align 4 + align 4 +.L8450: + dd .L8421 + dd .L8424 + dd .L8380 + dd .L1005 + dd .L8448 + dd .L1005 + dd .L8433 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8436 + dd .L1005 + dd .L1005 + dd .L8439 + dd .L8442 + dd .L1005 + dd .L1005 + dd .L8445 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8448 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8421 + dd .L8424 + dd .L8380 + dd .L1005 + dd .L8448 + dd .L1005 + dd .L8433 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8436 + dd .L1005 + dd .L1005 + dd .L8439 + dd .L8442 + dd .L1005 + dd .L1005 + dd .L8445 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8448 + section .text +.L8364: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 1 + jmp .L9186 +.L8367: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + jg .L8454 + cmp dl, 68 + jg .L8455 + test dl, dl + jmp .L9266 +.L8455: + cmp dl, 69 + jle .L8459 + cmp dl, 78 + jle .L999 + jmp .L8442 +.L8454: + cmp dl, 101 + jg .L8463 + cmp dl, 100 + jle .L999 + jmp .L8459 +.L8463: + cmp dl, 111 + je .L8442 + jmp .L999 +.L8370: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 2049 + jmp .L9186 +.L8373: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 1025 + jmp .L9186 +.L8459: + inc ecx + cmp BYTE [ecx], 0 +.L9266: + jg .L999 + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 2561 + jmp .L9186 +.L8461: +.L8439: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 257 + jmp .L9186 +.L8421: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L8484 + test dl, dl + jle .L9206 + cmp dl, 68 + jle .L999 + jmp .L8488 +.L8484: + cmp dl, 101 + je .L8488 + jmp .L999 +.L8486: +.L8424: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L8493 + test dl, dl + jle .L9205 + cmp dl, 68 + jle .L999 + jmp .L8497 +.L8493: + cmp dl, 101 + je .L8497 + jmp .L999 +.L8495: +.L8427: +.L8430: +.L8448: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 1281 + jmp .L9186 +.L8445: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 2305 + jmp .L9186 +.L8442: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 2817 + jmp .L9186 +.L8433: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L8517 + test dl, dl + jle .L9203 + cmp dl, 68 + jle .L999 + jmp .L8521 +.L8517: + cmp dl, 101 + je .L8521 + jmp .L999 +.L8519: +.L8436: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L8526 + test dl, dl + jle .L9202 + cmp dl, 68 + jle .L999 + jmp .L8530 +.L8526: + cmp dl, 101 + jne .L999 +.L8528: +.L8530: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9210: + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 3841 + jmp .L9186 +.L8521: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9209: + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 3073 + jmp .L9186 +.L8497: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9213: + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 1793 + jmp .L9186 +.L8488: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9212: + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 513 + jmp .L9186 +.L8413: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9203: + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 3585 + jmp .L9186 +.L8404: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9202: + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 3329 + jmp .L9186 +.L8389: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9206: + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 1537 + jmp .L9186 +.L8380: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9205: + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 769 + jmp .L9186 +.L7838: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L8560 + cmp dl, 115 + jne .L1005 +.L8560: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L8562 + cmp dl, 68 + jg .L8563 + cmp dl, 66 + je .L8565 + cmp dl, 67 + jmp .L8694 +.L8563: + cmp dl, 81 + je .L8570 + cmp dl, 86 + jle .L1005 + jmp .L8572 +.L8562: + cmp dl, 100 + jg .L8574 + cmp dl, 98 + je .L8565 + cmp dl, 99 +.L8694: + jle .L1005 + jmp .L8567 +.L8574: + cmp dl, 113 + jg .L8578 + cmp dl, 112 + jle .L1005 + jmp .L8570 +.L8578: + cmp dl, 119 + je .L8572 + jmp .L1005 +.L8565: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 44545 + jmp .L8695 +.L8572: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1093377 + jmp .L8695 +.L8567: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2141953 +.L9186: + mov DWORD [edi+8], 4 + jmp .L8696 +.L8570: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L8592 +.L9214: + push ebx + push DWORD LC13 +.L8698: + push esi + push DWORD 0 + call yasm__warning +.L8702: + mov eax, 0 + jmp .L926 +.L8592: + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4239105 +.L9148: + mov DWORD [edi+8], 16779264 + jmp .L8696 +.L7835: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], arith_insn + mov DWORD [edi+4], 202775 + jmp .L8695 +.L7822: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 70 + je .L8599 + cmp dl, 102 + je .L8599 + jmp .L1005 +.L7825: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + jg .L8601 + test dl, dl + jle .L8603 + cmp dl, 66 + jle .L999 + jmp .L8605 +.L8601: + cmp dl, 99 + je .L8605 + jmp .L999 +.L8603: + mov DWORD [edi], shift_insn + mov DWORD [edi+4], 1032 + jmp .L8695 +.L7827: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], shift_insn + mov DWORD [edi+4], 1800 + jmp .L8695 +.L8605: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 54785 + mov DWORD [edi+8], 2097152 + jmp .L8696 +.L8599: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L8620 +.L9187: + sub esp, 4 + push ebx + push DWORD LC14 + push esi + call yasm__error + mov DWORD [edi], not64_insn + mov DWORD [edi+4], 1 + mov DWORD [edi+8], 33554432 + add esp, 16 + jmp .L8696 +.L8620: + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 40449 + jmp .L8695 +.L1003: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 71 + jg .L8625 + cmp dl, 65 + je .L8627 + cmp dl, 70 + jle .L1005 + jmp .L8629 +.L8625: + cmp dl, 97 + jg .L8631 + cmp dl, 96 + jle .L1005 + jmp .L8627 +.L8631: + cmp dl, 103 + je .L8629 + jmp .L1005 +.L1006: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L8635 + cmp dl, 80 + je .L8637 + cmp dl, 83 + jle .L1005 + jmp .L8639 +.L8635: + cmp dl, 112 + jg .L8640 + cmp dl, 111 + jle .L1005 + jmp .L8637 +.L8640: + cmp dl, 116 + jne .L1005 +.L8639: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], f6_insn + mov DWORD [edi+4], 516 + jmp .L8695 +.L8637: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 36865 + jmp .L8695 +.L8627: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L8651 + cmp dl, 114 + je .L8651 + jmp .L1005 +.L8629: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], f6_insn + mov DWORD [edi+4], 772 +.L8695: + mov DWORD [edi+8], 0 +.L8696: + mov eax, 1 + jmp .L926 +.L8651: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 1 +.L8697: + mov eax, 5 +.L926: + lea esp, [ebp-12] + pop ebx + pop esi + pop edi + leave + ret +.Lfe4: + ;.size yasm_x86__parse_check_id,.Lfe4-yasm_x86__parse_check_id + ;.ident "GCC: (GNU) 3.2.3" diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/x86id.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/x86id.errwarn new file mode 100644 index 0000000000..b83cc295c8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/x86id.errwarn @@ -0,0 +1,44 @@ +-:37: warning: Standard COFF does not support read-only data sections +-:6284: warning: Standard COFF does not support read-only data sections +-:6527: warning: Standard COFF does not support read-only data sections +-:6540: warning: Standard COFF does not support read-only data sections +-:6549: warning: Standard COFF does not support read-only data sections +-:6559: warning: Standard COFF does not support read-only data sections +-:6562: warning: Standard COFF does not support read-only data sections +-:6629: warning: Standard COFF does not support read-only data sections +-:7499: warning: Standard COFF does not support read-only data sections +-:7518: warning: Standard COFF does not support read-only data sections +-:7991: warning: Standard COFF does not support read-only data sections +-:9105: warning: Standard COFF does not support read-only data sections +-:9121: warning: Standard COFF does not support read-only data sections +-:9143: warning: Standard COFF does not support read-only data sections +-:9298: warning: Standard COFF does not support read-only data sections +-:9368: warning: Standard COFF does not support read-only data sections +-:9511: warning: Standard COFF does not support read-only data sections +-:9596: warning: Standard COFF does not support read-only data sections +-:9661: warning: Standard COFF does not support read-only data sections +-:9741: warning: Standard COFF does not support read-only data sections +-:9810: warning: Standard COFF does not support read-only data sections +-:9879: warning: Standard COFF does not support read-only data sections +-:9945: warning: Standard COFF does not support read-only data sections +-:10005: warning: Standard COFF does not support read-only data sections +-:10069: warning: Standard COFF does not support read-only data sections +-:10139: warning: Standard COFF does not support read-only data sections +-:10208: warning: Standard COFF does not support read-only data sections +-:10270: warning: Standard COFF does not support read-only data sections +-:10935: warning: Standard COFF does not support read-only data sections +-:11679: warning: Standard COFF does not support read-only data sections +-:11848: warning: Standard COFF does not support read-only data sections +-:12534: warning: Standard COFF does not support read-only data sections +-:14533: warning: Standard COFF does not support read-only data sections +-:15942: warning: Standard COFF does not support read-only data sections +-:18092: warning: Standard COFF does not support read-only data sections +-:18170: warning: Standard COFF does not support read-only data sections +-:18580: warning: Standard COFF does not support read-only data sections +-:19769: warning: Standard COFF does not support read-only data sections +-:19878: warning: Standard COFF does not support read-only data sections +-:21893: warning: Standard COFF does not support read-only data sections +-:24311: warning: Standard COFF does not support read-only data sections +-:24465: warning: Standard COFF does not support read-only data sections +-:25481: warning: Standard COFF does not support read-only data sections +-:25614: warning: Standard COFF does not support read-only data sections diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/x86id.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/x86id.hex new file mode 100644 index 0000000000..b75ec02aab --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/tests/x86id.hex @@ -0,0 +1,106010 @@ +4c +01 +03 +00 +00 +00 +00 +00 +e3 +99 +01 +00 +21 +00 +00 +00 +00 +00 +0c +01 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e9 +d3 +00 +00 +8c +00 +00 +00 +75 +d4 +00 +00 +00 +00 +00 +00 +2d +03 +00 +00 +20 +00 +00 +00 +2e +64 +61 +74 +61 +00 +00 +00 +e9 +d3 +00 +00 +e9 +d3 +00 +00 +04 +00 +00 +00 +37 +f4 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +30 +00 +2e +72 +6f +64 +61 +74 +61 +00 +ed +d3 +00 +00 +ed +d3 +00 +00 +24 +57 +00 +00 +3b +f4 +00 +00 +5f +4b +01 +00 +00 +00 +00 +00 +da +07 +00 +00 +40 +00 +60 +00 +55 +89 +e5 +57 +56 +53 +83 +ec +4c +8b +55 +08 +8b +42 +04 +0f +b6 +f0 +8b +1a +c1 +e8 +08 +89 +45 +c4 +8b +7d +20 +89 +7d +c8 +8b +45 +10 +8b +38 +83 +7f +04 +04 +74 +1b +83 +ec +04 +68 +8d +08 +01 +00 +68 +07 +06 +00 +00 +68 +a8 +08 +01 +00 +ff +15 +00 +00 +00 +00 +83 +c4 +10 +8b +55 +14 +8b +42 +10 +25 +00 +0e +00 +00 +3d +00 +06 +00 +00 +75 +54 +ff +75 +20 +83 +ec +08 +ff +77 +08 +e8 +9a +ff +ff +ff +89 +04 +24 +e8 +92 +ff +ff +ff +83 +c4 +0c +50 +83 +ec +08 +ff +75 +20 +6a +00 +83 +ec +04 +ff +77 +08 +e8 +7b +ff +ff +ff +83 +c4 +08 +50 +6a +19 +e8 +70 +ff +ff +ff +83 +c4 +14 +50 +e8 +67 +ff +ff +ff +83 +c4 +08 +50 +6a +1b +e8 +5c +ff +ff +ff +89 +45 +cc +83 +c4 +10 +eb +06 +8b +47 +08 +89 +45 +cc +83 +ec +0c +ff +75 +20 +6a +00 +ff +75 +1c +ff +75 +18 +68 +c4 +08 +01 +00 +e8 +36 +ff +ff +ff +89 +45 +d0 +c6 +45 +e0 +00 +83 +c4 +20 +8b +7d +14 +8b +47 +10 +25 +00 +0e +00 +00 +3d +00 +04 +00 +00 +74 +19 +3d +00 +04 +00 +00 +7f +09 +3d +00 +02 +00 +00 +74 +14 +eb +3c +3d +00 +06 +00 +00 +74 +14 +eb +33 +c7 +45 +d4 +03 +00 +00 +00 +eb +31 +c7 +45 +d4 +04 +00 +00 +00 +eb +28 +c7 +45 +d4 +05 +00 +00 +00 +8a +43 +09 +88 +45 +e0 +8a +43 +0a +88 +45 +e1 +8a +43 +0b +88 +45 +e2 +8a +43 +0c +88 +45 +e3 +eb +07 +c7 +45 +d4 +00 +00 +00 +00 +8b +55 +14 +8a +42 +08 +88 +45 +e5 +80 +7a +0e +01 +76 +26 +8b +52 +14 +89 +d0 +25 +00 +f0 +00 +00 +3d +00 +90 +00 +00 +75 +15 +89 +d0 +25 +e0 +00 +00 +00 +c1 +e8 +05 +8a +80 +85 +08 +01 +00 +88 +45 +e4 +eb +04 +c6 +45 +e4 +00 +8b +45 +14 +f6 +40 +05 +01 +74 +06 +8a +55 +c4 +88 +55 +e4 +c6 +45 +d8 +00 +c6 +45 +dc +00 +85 +f6 +0f +8e +14 +01 +00 +00 +8a +0d +00 +00 +00 +00 +8b +3d +e9 +d3 +00 +00 +89 +7d +b4 +8a +45 +e5 +88 +45 +c3 +8b +03 +89 +c2 +8b +7d +08 +0b +57 +08 +f7 +c2 +00 +00 +00 +01 +74 +09 +80 +f9 +40 +0f +85 +c8 +00 +00 +00 +f7 +c2 +00 +00 +00 +02 +74 +09 +80 +f9 +40 +0f +84 +b7 +00 +00 +00 +81 +e2 +ff +ff +ff +fc +8b +45 +b4 +21 +d0 +39 +d0 +0f +85 +a4 +00 +00 +00 +80 +7b +0e +00 +0f +84 +9a +00 +00 +00 +8b +53 +10 +89 +d0 +25 +00 +f0 +00 +00 +3d +00 +80 +00 +00 +0f +85 +85 +00 +00 +00 +8a +45 +c3 +38 +43 +08 +75 +7d +89 +d0 +25 +00 +0e +00 +00 +3d +00 +02 +00 +00 +74 +2d +3d +00 +04 +00 +00 +75 +68 +8a +43 +09 +88 +45 +d8 +8a +53 +0a +88 +55 +d9 +8a +43 +0b +88 +45 +da +8a +43 +0c +88 +45 +db +f6 +43 +04 +10 +74 +4a +03 +55 +c4 +88 +55 +d9 +eb +42 +8a +43 +09 +88 +45 +dc +8a +43 +0a +88 +45 +dd +8a +53 +0b +88 +55 +de +8a +43 +0c +88 +45 +df +f6 +43 +04 +04 +74 +06 +03 +55 +c4 +88 +55 +de +8b +43 +10 +25 +00 +00 +03 +00 +3d +00 +00 +03 +00 +75 +0f +c6 +45 +e0 +01 +0f +b6 +43 +09 +8a +44 +18 +0a +88 +45 +e1 +4e +83 +c3 +1c +85 +f6 +7e +14 +80 +7d +d8 +00 +0f +84 +0b +ff +ff +ff +80 +7d +dc +00 +0f +84 +01 +ff +ff +ff +83 +ec +0c +8d +45 +c8 +50 +e8 +4f +fd +ff +ff +8d +65 +f4 +5b +5e +5f +c9 +c3 +55 +89 +e5 +57 +56 +53 +83 +ec +4c +8b +55 +08 +8b +42 +04 +8b +1a +89 +c1 +c1 +e9 +08 +89 +4d +bc +c7 +45 +b8 +00 +00 +00 +00 +25 +ff +00 +00 +00 +89 +45 +c0 +0f +8e +0c +05 +00 +00 +c7 +45 +b0 +00 +00 +00 +00 +8b +03 +89 +c2 +8b +4d +08 +0b +51 +08 +f7 +c2 +00 +00 +00 +01 +74 +0d +80 +3d +00 +00 +00 +00 +40 +0f +85 +ce +04 +00 +00 +f7 +c2 +00 +00 +00 +02 +74 +0d +80 +3d +00 +00 +00 +00 +40 +0f +84 +b9 +04 +00 +00 +81 +e2 +ff +ff +ff +fc +89 +d0 +23 +05 +e9 +d3 +00 +00 +39 +d0 +0f +85 +a3 +04 +00 +00 +0f +b6 +43 +0e +39 +45 +0c +0f +85 +96 +04 +00 +00 +83 +7d +10 +00 +0f +84 +af +04 +00 +00 +c7 +45 +b4 +00 +00 +00 +00 +8b +45 +10 +8b +38 +85 +ff +0f +84 +72 +04 +00 +00 +0f +b6 +43 +0e +39 +45 +b4 +0f +8d +65 +04 +00 +00 +83 +7d +b0 +00 +0f +85 +61 +04 +00 +00 +8b +55 +b4 +8b +44 +93 +10 +83 +e0 +1f +83 +f8 +15 +0f +87 +29 +03 +00 +00 +ff +24 +85 +51 +0a +01 +00 +83 +7f +04 +04 +e9 +0e +03 +00 +00 +83 +7f +04 +03 +0f +84 +2a +03 +00 +00 +83 +7f +04 +01 +0f +85 +fc +02 +00 +00 +8b +47 +08 +83 +e0 +f0 +83 +f8 +30 +0f +84 +11 +03 +00 +00 +83 +f8 +30 +77 +11 +83 +f8 +10 +0f +84 +03 +03 +00 +00 +83 +f8 +20 +e9 +d5 +02 +00 +00 +83 +f8 +50 +0f +84 +f2 +02 +00 +00 +83 +f8 +50 +77 +08 +83 +f8 +40 +e9 +bf +02 +00 +00 +83 +f8 +60 +e9 +b7 +02 +00 +00 +83 +7f +04 +03 +e9 +ae +02 +00 +00 +83 +7f +04 +03 +0f +84 +ca +02 +00 +00 +83 +7f +04 +01 +0f +85 +9c +02 +00 +00 +8b +47 +08 +83 +e0 +f0 +83 +f8 +70 +0f +84 +b1 +02 +00 +00 +3d +80 +00 +00 +00 +e9 +81 +02 +00 +00 +83 +7f +04 +02 +e9 +78 +02 +00 +00 +83 +7f +04 +01 +0f +85 +70 +02 +00 +00 +8b +47 +08 +83 +e0 +f0 +3d +90 +00 +00 +00 +e9 +5e +02 +00 +00 +83 +7f +04 +01 +0f +85 +56 +02 +00 +00 +8b +47 +08 +83 +e0 +f0 +3d +a0 +00 +00 +00 +e9 +44 +02 +00 +00 +83 +7f +04 +01 +0f +85 +3c +02 +00 +00 +8b +47 +08 +83 +e0 +f0 +3d +b0 +00 +00 +00 +e9 +2a +02 +00 +00 +83 +7f +04 +01 +0f +85 +22 +02 +00 +00 +83 +7f +08 +60 +e9 +17 +02 +00 +00 +83 +7f +04 +01 +0f +85 +0f +02 +00 +00 +8b +4d +b4 +8b +44 +8b +10 +25 +e0 +00 +00 +00 +83 +f8 +20 +75 +10 +83 +7f +08 +10 +74 +0a +83 +7f +08 +20 +0f +85 +ee +01 +00 +00 +8b +55 +b4 +8b +44 +93 +10 +25 +e0 +00 +00 +00 +83 +f8 +40 +75 +0a +83 +7f +08 +30 +0f +85 +d3 +01 +00 +00 +8b +4d +b4 +8b +44 +8b +10 +25 +e0 +00 +00 +00 +83 +f8 +60 +75 +0a +83 +7f +08 +40 +0f +85 +b8 +01 +00 +00 +8b +55 +b4 +8b +44 +93 +10 +25 +e0 +00 +00 +00 +3d +80 +00 +00 +00 +0f +85 +c5 +01 +00 +00 +83 +7f +08 +50 +e9 +96 +01 +00 +00 +83 +7f +04 +01 +0f +85 +8e +01 +00 +00 +8b +4d +b4 +8b +44 +8b +10 +25 +e0 +00 +00 +00 +83 +f8 +20 +75 +10 +83 +7f +08 +11 +74 +0a +83 +7f +08 +21 +0f +85 +6d +01 +00 +00 +8b +55 +b4 +8b +44 +93 +10 +25 +e0 +00 +00 +00 +83 +f8 +40 +75 +0a +83 +7f +08 +31 +0f +85 +52 +01 +00 +00 +8b +4d +b4 +8b +44 +8b +10 +25 +e0 +00 +00 +00 +83 +f8 +60 +75 +0a +83 +7f +08 +41 +0f +85 +37 +01 +00 +00 +8b +55 +b4 +8b +44 +93 +10 +25 +e0 +00 +00 +00 +3d +80 +00 +00 +00 +0f +85 +44 +01 +00 +00 +83 +7f +08 +51 +e9 +15 +01 +00 +00 +83 +7f +04 +01 +0f +85 +0d +01 +00 +00 +8b +4d +b4 +8b +44 +8b +10 +25 +e0 +00 +00 +00 +83 +f8 +20 +75 +10 +83 +7f +08 +12 +74 +0a +83 +7f +08 +22 +0f +85 +ec +00 +00 +00 +8b +55 +b4 +8b +44 +93 +10 +25 +e0 +00 +00 +00 +83 +f8 +40 +75 +0a +83 +7f +08 +32 +0f +85 +d1 +00 +00 +00 +8b +4d +b4 +8b +44 +8b +10 +25 +e0 +00 +00 +00 +83 +f8 +60 +75 +0a +83 +7f +08 +42 +0f +85 +b6 +00 +00 +00 +8b +55 +b4 +8b +44 +93 +10 +25 +e0 +00 +00 +00 +3d +80 +00 +00 +00 +0f +85 +c3 +00 +00 +00 +83 +7f +08 +52 +e9 +94 +00 +00 +00 +83 +7f +04 +02 +0f +85 +8c +00 +00 +00 +8b +47 +08 +83 +e0 +0f +83 +f8 +01 +eb +7f +83 +7f +04 +02 +75 +7b +8b +47 +08 +83 +e0 +0f +83 +f8 +03 +eb +6e +83 +7f +04 +02 +75 +6a +f6 +47 +08 +0f +eb +62 +83 +7f +04 +02 +75 +5e +8b +47 +08 +83 +e0 +0f +83 +f8 +04 +eb +51 +83 +7f +04 +02 +75 +4d +8b +47 +08 +83 +e0 +0f +83 +f8 +05 +eb +40 +83 +7f +04 +02 +75 +3c +8b +47 +08 +83 +e0 +0f +83 +f8 +02 +eb +2f +83 +7f +04 +01 +75 +2b +81 +7f +08 +94 +00 +00 +00 +eb +20 +83 +7f +04 +03 +75 +1c +83 +ec +08 +6a +01 +ff +77 +08 +e8 +62 +f9 +ff +ff +89 +04 +24 +e8 +5a +f9 +ff +ff +83 +c4 +10 +85 +c0 +74 +24 +c7 +45 +b0 +01 +00 +00 +00 +eb +1b +83 +ec +04 +68 +ed +08 +01 +00 +68 +39 +07 +00 +00 +68 +a8 +08 +01 +00 +ff +15 +00 +00 +00 +00 +83 +c4 +10 +83 +7d +b0 +00 +0f +85 +00 +01 +00 +00 +8b +4d +b4 +8b +44 +8b +10 +25 +e0 +00 +00 +00 +c1 +e8 +05 +8b +34 +85 +cd +08 +01 +00 +83 +7f +04 +01 +75 +18 +83 +7f +10 +00 +75 +12 +83 +ec +0c +ff +77 +08 +e8 +f8 +f8 +ff +ff +83 +c4 +10 +39 +f0 +eb +1c +8b +45 +b4 +f6 +44 +83 +11 +01 +74 +0f +85 +f6 +74 +17 +39 +77 +10 +74 +12 +83 +7f +10 +00 +eb +03 +39 +77 +10 +74 +07 +c7 +45 +b0 +01 +00 +00 +00 +83 +7d +b0 +00 +0f +85 +9d +00 +00 +00 +8b +55 +b4 +8b +44 +93 +10 +25 +00 +0e +00 +00 +3d +00 +04 +00 +00 +74 +30 +3d +00 +04 +00 +00 +7f +0d +85 +c0 +74 +19 +3d +00 +02 +00 +00 +74 +18 +eb +37 +3d +00 +06 +00 +00 +74 +1b +3d +00 +08 +00 +00 +74 +1a +eb +27 +83 +7f +0c +00 +eb +16 +83 +7f +0c +01 +eb +10 +83 +7f +0c +02 +eb +0a +83 +7f +0c +03 +eb +04 +83 +7f +0c +04 +74 +24 +c7 +45 +b0 +01 +00 +00 +00 +eb +1b +83 +ec +04 +68 +02 +09 +01 +00 +68 +6b +07 +00 +00 +68 +a8 +08 +01 +00 +ff +15 +00 +00 +00 +00 +83 +c4 +10 +8b +3f +ff +45 +b4 +85 +ff +74 +15 +0f +b6 +43 +0e +39 +45 +b4 +7d +0c +83 +7d +b0 +00 +0f +84 +a7 +fb +ff +ff +eb +06 +83 +7d +b0 +00 +74 +23 +ff +4d +c0 +83 +c3 +1c +83 +7d +c0 +00 +7e +0c +83 +7d +b8 +00 +0f +84 +f6 +fa +ff +ff +eb +14 +83 +7d +b8 +00 +75 +0e +e9 +31 +04 +00 +00 +c7 +45 +b8 +01 +00 +00 +00 +eb +ec +8b +43 +04 +25 +00 +00 +00 +f0 +3d +00 +00 +00 +10 +74 +1a +3d +00 +00 +00 +10 +7f +0a +85 +c0 +0f +84 +88 +00 +00 +00 +eb +6b +3d +00 +00 +00 +20 +74 +52 +eb +62 +8b +43 +04 +25 +00 +00 +f0 +0f +c1 +e8 +14 +74 +07 +83 +f8 +01 +74 +0c +eb +1f +83 +ec +08 +68 +1f +09 +01 +00 +eb +08 +83 +ec +08 +68 +39 +09 +01 +00 +ff +75 +1c +e8 +a2 +f7 +ff +ff +e9 +d0 +04 +00 +00 +83 +ec +04 +68 +6d +09 +01 +00 +68 +8a +07 +00 +00 +68 +a8 +08 +01 +00 +ff +15 +00 +00 +00 +00 +e9 +b3 +04 +00 +00 +83 +ec +04 +68 +6d +09 +01 +00 +68 +91 +07 +00 +00 +e9 +0d +00 +00 +00 +83 +ec +04 +68 +8d +09 +01 +00 +68 +95 +07 +00 +00 +68 +a8 +08 +01 +00 +ff +15 +00 +00 +00 +00 +83 +c4 +10 +83 +7d +10 +00 +74 +2f +8b +43 +10 +25 +00 +f0 +00 +00 +3d +00 +80 +00 +00 +75 +20 +83 +ec +04 +ff +75 +1c +ff +75 +18 +ff +75 +14 +53 +ff +75 +10 +ff +75 +0c +ff +75 +08 +e8 +23 +f7 +ff +ff +e9 +fa +04 +00 +00 +8b +4d +1c +89 +4d +c8 +c7 +45 +cc +00 +00 +00 +00 +c7 +45 +d0 +00 +00 +00 +00 +8a +43 +08 +88 +45 +d4 +8a +43 +09 +88 +45 +d5 +8a +43 +0a +88 +45 +d6 +8a +43 +0b +88 +45 +d7 +8a +43 +0c +88 +45 +d8 +8a +43 +0d +88 +45 +d9 +80 +3d +00 +00 +00 +00 +40 +75 +0a +80 +7b +08 +40 +75 +04 +b0 +48 +eb +02 +b0 +00 +88 +45 +da +c6 +45 +db +00 +c6 +45 +dc +00 +c6 +45 +dd +00 +c6 +45 +de +00 +f6 +43 +04 +01 +74 +0a +8a +45 +bc +00 +45 +d8 +c1 +6d +bc +08 +f6 +43 +04 +02 +74 +04 +c1 +6d +bc +08 +f6 +43 +04 +04 +74 +0a +8a +55 +bc +00 +55 +d7 +c1 +6d +bc +08 +f6 +43 +04 +08 +74 +04 +c1 +6d +bc +08 +f6 +43 +04 +10 +74 +0a +8a +4d +bc +00 +4d +d6 +c1 +6d +bc +08 +f6 +43 +04 +20 +74 +0a +8a +45 +bc +00 +45 +d9 +c1 +6d +bc +08 +f6 +43 +04 +40 +74 +0a +8a +55 +bc +88 +55 +d4 +c1 +6d +bc +08 +80 +7b +04 +00 +79 +2f +ff +75 +1c +6a +00 +83 +ec +04 +0f +b6 +45 +bc +50 +e8 +42 +f6 +ff +ff +89 +04 +24 +e8 +3a +f6 +ff +ff +83 +c4 +08 +50 +6a +00 +e8 +2f +f6 +ff +ff +89 +45 +d0 +c6 +45 +db +01 +83 +c4 +10 +83 +7d +10 +00 +0f +84 +eb +03 +00 +00 +c7 +45 +b4 +00 +00 +00 +00 +8b +4d +10 +8b +39 +85 +ff +0f +84 +d7 +03 +00 +00 +0f +b6 +43 +0e +39 +45 +b4 +0f +8d +ca +03 +00 +00 +8b +55 +b4 +8b +44 +93 +10 +25 +00 +f0 +00 +00 +3d +00 +30 +00 +00 +0f +84 +90 +01 +00 +00 +3d +00 +30 +00 +00 +7f +2b +3d +00 +10 +00 +00 +0f +84 +98 +00 +00 +00 +3d +00 +10 +00 +00 +7f +09 +85 +c0 +74 +52 +e9 +10 +03 +00 +00 +3d +00 +20 +00 +00 +0f +84 +27 +01 +00 +00 +e9 +00 +03 +00 +00 +3d +00 +50 +00 +00 +0f +84 +fc +01 +00 +00 +3d +00 +50 +00 +00 +7f +10 +3d +00 +40 +00 +00 +0f +84 +81 +01 +00 +00 +e9 +de +02 +00 +00 +3d +00 +60 +00 +00 +0f +84 +24 +02 +00 +00 +3d +00 +70 +00 +00 +0f +84 +3f +02 +00 +00 +e9 +c3 +02 +00 +00 +8b +47 +04 +83 +f8 +03 +74 +13 +83 +f8 +03 +0f +86 +cd +02 +00 +00 +83 +f8 +04 +74 +15 +e9 +c3 +02 +00 +00 +83 +ec +0c +ff +77 +08 +e8 +4e +f5 +ff +ff +e9 +b0 +02 +00 +00 +83 +ec +0c +ff +77 +08 +e8 +3e +f5 +ff +ff +e9 +a0 +02 +00 +00 +8b +47 +04 +83 +f8 +02 +74 +37 +83 +f8 +02 +77 +0a +83 +f8 +01 +74 +14 +e9 +8c +02 +00 +00 +83 +f8 +03 +74 +3e +83 +f8 +04 +74 +60 +e9 +7d +02 +00 +00 +83 +ec +04 +0f +b6 +05 +00 +00 +00 +00 +50 +8d +45 +da +50 +ff +77 +08 +e8 +fc +f4 +ff +ff +eb +63 +83 +ec +04 +68 +8d +08 +01 +00 +68 +e9 +07 +00 +00 +68 +a8 +08 +01 +00 +ff +15 +00 +00 +00 +00 +83 +c4 +10 +8b +57 +08 +89 +55 +cc +8b +4d +b4 +8b +44 +8b +10 +83 +e0 +1f +83 +f8 +15 +0f +85 +30 +02 +00 +00 +83 +ec +0c +52 +e8 +bd +f4 +ff +ff +e9 +1f +02 +00 +00 +83 +ec +08 +8b +55 +b4 +8b +44 +93 +10 +25 +e0 +00 +00 +00 +c1 +e8 +05 +ff +34 +85 +cd +08 +01 +00 +ff +77 +08 +e8 +97 +f4 +ff +ff +89 +45 +cc +e9 +f6 +01 +00 +00 +83 +7f +04 +04 +75 +24 +8b +47 +08 +89 +45 +d0 +8b +4d +b4 +8b +44 +8b +10 +25 +e0 +00 +00 +00 +c1 +e8 +05 +8a +04 +85 +cd +08 +01 +00 +88 +45 +db +e9 +cf +01 +00 +00 +83 +ec +04 +68 +8d +08 +01 +00 +68 +fd +07 +00 +00 +e9 +af +01 +00 +00 +83 +7f +04 +04 +75 +28 +8b +47 +08 +89 +45 +d0 +8b +55 +b4 +8b +44 +93 +10 +25 +e0 +00 +00 +00 +c1 +e8 +05 +8a +04 +85 +cd +08 +01 +00 +88 +45 +db +c6 +45 +dc +01 +e9 +8f +01 +00 +00 +83 +ec +04 +68 +8d +08 +01 +00 +68 +06 +08 +00 +00 +e9 +6f +01 +00 +00 +83 +7f +04 +02 +75 +0e +8a +47 +08 +83 +e0 +07 +88 +45 +d9 +e9 +69 +01 +00 +00 +83 +7f +04 +01 +75 +3d +83 +ec +0c +6a +02 +0f +b6 +05 +00 +00 +00 +00 +50 +ff +77 +08 +8d +45 +d9 +50 +8d +45 +da +50 +e8 +dc +f3 +ff +ff +83 +c4 +20 +85 +c0 +0f +84 +3b +01 +00 +00 +83 +ec +08 +68 +cd +09 +01 +00 +ff +75 +1c +e8 +c1 +f3 +ff +ff +e9 +f2 +00 +00 +00 +83 +ec +04 +68 +8d +08 +01 +00 +68 +14 +08 +00 +00 +e9 +06 +01 +00 +00 +83 +7f +04 +01 +75 +32 +83 +ec +0c +6a +00 +0f +b6 +05 +00 +00 +00 +00 +50 +ff +77 +08 +8d +45 +c7 +50 +8d +45 +da +50 +e8 +87 +f3 +ff +ff +83 +c4 +20 +85 +c0 +75 +af +8a +45 +d6 +02 +45 +c7 +88 +45 +d6 +e9 +dc +00 +00 +00 +83 +ec +04 +68 +8d +08 +01 +00 +68 +22 +08 +00 +00 +e9 +bc +00 +00 +00 +83 +7f +04 +01 +75 +0e +8a +47 +08 +83 +e0 +07 +00 +45 +d7 +e9 +b6 +00 +00 +00 +83 +ec +04 +68 +8d +08 +01 +00 +68 +29 +08 +00 +00 +e9 +96 +00 +00 +00 +83 +7f +04 +01 +75 +74 +83 +ec +04 +0f +b6 +05 +00 +00 +00 +00 +50 +8d +75 +da +56 +ff +77 +08 +e8 +1d +f3 +ff +ff +89 +45 +cc +83 +c4 +10 +85 +c0 +74 +21 +83 +ec +0c +6a +02 +0f +b6 +05 +00 +00 +00 +00 +50 +ff +77 +08 +8d +45 +d9 +50 +56 +e8 +f9 +f2 +ff +ff +83 +c4 +20 +85 +c0 +74 +5c +83 +ec +08 +68 +cd +09 +01 +00 +ff +75 +1c +e8 +e2 +f2 +ff +ff +83 +c4 +10 +83 +7d +cc +00 +74 +0f +83 +ec +0c +ff +75 +cc +ff +15 +00 +00 +00 +00 +83 +c4 +10 +b8 +00 +00 +00 +00 +e9 +9c +00 +00 +00 +83 +ec +04 +68 +8d +08 +01 +00 +68 +3a +08 +00 +00 +eb +0d +83 +ec +04 +68 +f8 +09 +01 +00 +68 +3d +08 +00 +00 +68 +a8 +08 +01 +00 +ff +15 +00 +00 +00 +00 +83 +c4 +10 +8b +4d +b4 +8b +44 +8b +10 +25 +00 +00 +03 +00 +3d +00 +00 +01 +00 +74 +16 +3d +00 +00 +01 +00 +7f +06 +85 +c0 +74 +32 +eb +15 +3d +00 +00 +02 +00 +74 +08 +eb +0c +c6 +45 +dd +01 +eb +21 +c6 +45 +de +01 +eb +1b +83 +ec +04 +68 +2d +0a +01 +00 +68 +4b +08 +00 +00 +68 +a8 +08 +01 +00 +ff +15 +00 +00 +00 +00 +83 +c4 +10 +8b +3f +ff +45 +b4 +85 +ff +74 +0d +0f +b6 +43 +0e +39 +45 +b4 +0f +8c +36 +fc +ff +ff +83 +ec +0c +8d +45 +c8 +50 +e8 +24 +f2 +ff +ff +8d +65 +f4 +5b +5e +5f +c9 +c3 +55 +89 +e5 +53 +83 +ec +04 +8b +55 +08 +8b +5d +0c +0f +be +02 +83 +f8 +77 +0f +87 +18 +03 +00 +00 +ff +24 +85 +cd +0a +01 +00 +42 +8a +0a +80 +f9 +30 +0f +84 +1d +0f +00 +00 +e9 +03 +03 +00 +00 +42 +8a +0a +80 +f9 +40 +7f +29 +80 +f9 +33 +0f +8e +0f +0f +00 +00 +80 +f9 +34 +0f +8e +86 +00 +00 +00 +80 +f9 +35 +0f +8e +8e +00 +00 +00 +80 +f9 +36 +0f +8e +18 +01 +00 +00 +e9 +d2 +02 +00 +00 +80 +f9 +60 +7f +0e +80 +f9 +41 +0f +8e +50 +0e +00 +00 +80 +f9 +54 +eb +0c +80 +f9 +61 +0f +8e +42 +0e +00 +00 +80 +f9 +74 +0f +84 +43 +0e +00 +00 +e9 +a8 +02 +00 +00 +42 +8a +0a +80 +f9 +38 +0f +84 +f2 +0d +00 +00 +e9 +97 +02 +00 +00 +42 +8a +0a +80 +f9 +38 +0f +84 +bc +0d +00 +00 +e9 +86 +02 +00 +00 +42 +8a +0a +80 +f9 +43 +0f +8e +f8 +0d +00 +00 +80 +f9 +44 +0f +8e +3d +0d +00 +00 +80 +f9 +64 +0f +84 +34 +0d +00 +00 +e9 +63 +02 +00 +00 +42 +8a +0a +80 +f9 +38 +0f +84 +f1 +0c +00 +00 +e9 +52 +02 +00 +00 +42 +8a +0a +80 +f9 +38 +0f +84 +cf +0c +00 +00 +e9 +41 +02 +00 +00 +42 +8a +0a +80 +f9 +4f +7f +2a +80 +f9 +34 +0f +8e +fc +0b +00 +00 +80 +f9 +36 +7f +0e +80 +f9 +35 +0f +8e +8b +0a +00 +00 +e9 +54 +0a +00 +00 +80 +f9 +45 +0f +84 +96 +0a +00 +00 +e9 +0f +02 +00 +00 +80 +f9 +65 +7f +2a +80 +f9 +51 +7f +0e +80 +f9 +50 +0f +8e +34 +0c +00 +00 +e9 +f7 +01 +00 +00 +80 +f9 +52 +0f +8e +8a +0a +00 +00 +80 +f9 +64 +0f +8e +e5 +01 +00 +00 +e9 +62 +0a +00 +00 +80 +f9 +70 +7f +0e +80 +f9 +6f +0f +8e +d2 +01 +00 +00 +e9 +05 +0c +00 +00 +80 +f9 +72 +0f +84 +60 +0a +00 +00 +e9 +bf +01 +00 +00 +42 +8a +0a +80 +f9 +38 +0f +84 +de +09 +00 +00 +e9 +ae +01 +00 +00 +42 +8a +0a +80 +f9 +40 +7f +20 +80 +f9 +35 +0f +8e +9d +01 +00 +00 +80 +f9 +36 +0f +8e +3a +09 +00 +00 +80 +f9 +37 +0f +8e +4a +09 +00 +00 +e9 +86 +01 +00 +00 +80 +f9 +41 +0f +8e +4b +09 +00 +00 +80 +f9 +61 +0f +84 +42 +09 +00 +00 +e9 +6f +01 +00 +00 +42 +8a +0a +80 +f9 +49 +0f +84 +57 +08 +00 +00 +80 +f9 +69 +0f +84 +4e +08 +00 +00 +e9 +55 +01 +00 +00 +42 +8a +0a +80 +f9 +54 +7f +17 +80 +f9 +4d +0f +84 +7a +07 +00 +00 +80 +f9 +53 +0f +8e +3b +01 +00 +00 +e9 +86 +07 +00 +00 +80 +f9 +6d +7f +0e +80 +f9 +6c +0f +8e +28 +01 +00 +00 +e9 +59 +07 +00 +00 +80 +f9 +74 +0f +84 +6a +07 +00 +00 +e9 +15 +01 +00 +00 +42 +8a +0a +80 +f9 +53 +7f +2a +80 +f9 +4c +7f +0e +80 +f9 +4b +0f +8e +ff +00 +00 +00 +e9 +5c +06 +00 +00 +80 +f9 +4d +0f +8e +65 +06 +00 +00 +80 +f9 +52 +0f +8e +e8 +00 +00 +00 +e9 +69 +06 +00 +00 +80 +f9 +6d +7f +17 +80 +f9 +6b +0f +8e +d5 +00 +00 +00 +80 +f9 +6c +0f +8e +2e +06 +00 +00 +e9 +3b +06 +00 +00 +80 +f9 +73 +0f +84 +44 +06 +00 +00 +e9 +b9 +00 +00 +00 +42 +8a +0a +80 +f9 +41 +0f +84 +cf +05 +00 +00 +80 +f9 +61 +0f +84 +c6 +05 +00 +00 +e9 +9f +00 +00 +00 +42 +8a +0a +80 +f9 +50 +7f +17 +80 +f9 +42 +0f +84 +17 +05 +00 +00 +80 +f9 +4f +0f +8e +85 +00 +00 +00 +e9 +1b +05 +00 +00 +80 +f9 +62 +7f +0a +80 +f9 +61 +7e +76 +e9 +fa +04 +00 +00 +80 +f9 +70 +0f +84 +03 +05 +00 +00 +eb +66 +42 +8a +0a +80 +f9 +50 +0f +84 +b9 +04 +00 +00 +80 +f9 +70 +0f +84 +b0 +04 +00 +00 +eb +4f +42 +8a +0a +80 +f9 +4f +0f +84 +03 +01 +00 +00 +80 +f9 +6f +0f +84 +fa +00 +00 +00 +eb +38 +42 +8a +0a +80 +f9 +4d +0f +84 +c2 +00 +00 +00 +80 +f9 +6d +0f +84 +b9 +00 +00 +00 +eb +21 +42 +8a +0a +80 +f9 +59 +74 +6f +80 +f9 +79 +74 +6a +eb +12 +42 +8a +0a +80 +f9 +4e +74 +24 +80 +f9 +6e +74 +1f +eb +03 +42 +8a +0a +84 +c9 +7e +03 +eb +f7 +42 +52 +68 +ad +0a +01 +00 +53 +6a +00 +e8 +d3 +ee +ff +ff +e9 +55 +0c +00 +00 +42 +8a +0a +80 +f9 +44 +74 +05 +80 +f9 +64 +75 +d9 +42 +8a +0a +80 +f9 +4f +74 +05 +80 +f9 +6f +75 +cc +42 +8a +0a +80 +f9 +43 +74 +05 +80 +f9 +63 +75 +bf +42 +80 +3a +00 +7f +b6 +81 +0d +e9 +d3 +00 +00 +00 +00 +20 +00 +e9 +19 +0c +00 +00 +42 +8a +0a +80 +f9 +52 +74 +05 +80 +f9 +72 +75 +9d +42 +8a +0a +80 +f9 +49 +74 +05 +80 +f9 +69 +75 +90 +42 +8a +0a +80 +f9 +58 +74 +05 +80 +f9 +78 +75 +83 +42 +80 +3a +00 +0f +8f +76 +ff +ff +ff +81 +0d +e9 +d3 +00 +00 +00 +00 +02 +00 +e9 +d9 +0b +00 +00 +42 +8a +0a +80 +f9 +58 +74 +09 +80 +f9 +78 +0f +85 +59 +ff +ff +ff +42 +80 +3a +00 +0f +8f +4c +ff +ff +ff +81 +0d +e9 +d3 +00 +00 +00 +20 +00 +00 +e9 +af +0b +00 +00 +42 +8a +0a +0f +be +c1 +83 +e8 +33 +83 +f8 +42 +0f +87 +2e +ff +ff +ff +ff +24 +85 +ad +0c +01 +00 +42 +8a +0a +80 +f9 +50 +0f +84 +50 +03 +00 +00 +80 +f9 +70 +0f +84 +47 +03 +00 +00 +e9 +0d +ff +ff +ff +42 +8a +0a +80 +f9 +4d +0f +84 +0c +03 +00 +00 +80 +f9 +6d +0f +84 +03 +03 +00 +00 +e9 +f3 +fe +ff +ff +42 +8a +0a +80 +f9 +53 +7f +17 +80 +f9 +4d +0f +84 +78 +02 +00 +00 +80 +f9 +52 +0f +8e +d9 +fe +ff +ff +e9 +7c +02 +00 +00 +80 +f9 +6d +7f +0e +80 +f9 +6c +0f +8e +c6 +fe +ff +ff +e9 +57 +02 +00 +00 +80 +f9 +73 +0f +84 +60 +02 +00 +00 +e9 +b3 +fe +ff +ff +42 +8a +0a +80 +f9 +44 +0f +84 +f1 +01 +00 +00 +80 +f9 +64 +0f +84 +e8 +01 +00 +00 +e9 +99 +fe +ff +ff +42 +8a +0a +80 +f9 +59 +0f +84 +8b +01 +00 +00 +80 +f9 +79 +0f +84 +82 +01 +00 +00 +e9 +7f +fe +ff +ff +42 +8a +0a +80 +f9 +4d +0f +84 +47 +01 +00 +00 +80 +f9 +6d +0f +84 +3e +01 +00 +00 +e9 +65 +fe +ff +ff +42 +8a +0a +80 +f9 +52 +0f +84 +a7 +00 +00 +00 +80 +f9 +72 +0f +84 +9e +00 +00 +00 +e9 +4b +fe +ff +ff +42 +8a +0a +80 +f9 +4e +74 +45 +80 +f9 +6e +74 +40 +e9 +39 +fe +ff +ff +42 +8a +0a +80 +f9 +42 +74 +09 +80 +f9 +62 +0f +85 +28 +fe +ff +ff +42 +8a +0a +80 +f9 +53 +74 +09 +80 +f9 +73 +0f +85 +17 +fe +ff +ff +42 +80 +3a +00 +0f +8f +0a +fe +ff +ff +81 +25 +e9 +d3 +00 +00 +ff +ff +bf +ff +e9 +6d +0a +00 +00 +42 +8a +0a +80 +f9 +44 +74 +09 +80 +f9 +64 +0f +85 +ed +fd +ff +ff +42 +8a +0a +80 +f9 +4f +74 +09 +80 +f9 +6f +0f +85 +dc +fd +ff +ff +42 +8a +0a +80 +f9 +43 +74 +09 +80 +f9 +63 +0f +85 +cb +fd +ff +ff +42 +80 +3a +00 +0f +8f +be +fd +ff +ff +81 +25 +e9 +d3 +00 +00 +ff +ff +df +ff +e9 +21 +0a +00 +00 +42 +8a +0a +80 +f9 +4f +7f +10 +80 +f9 +49 +74 +36 +80 +f9 +4e +0f +8e +9c +fd +ff +ff +eb +19 +80 +f9 +69 +7f +0b +80 +f9 +68 +0f +8e +8c +fd +ff +ff +eb +1b +80 +f9 +6f +0f +85 +81 +fd +ff +ff +42 +8a +0a +80 +f9 +54 +74 +34 +80 +f9 +74 +74 +2f +e9 +6f +fd +ff +ff +42 +8a +0a +80 +f9 +56 +74 +09 +80 +f9 +76 +0f +85 +5e +fd +ff +ff +42 +80 +3a +00 +0f +8f +51 +fd +ff +ff +81 +25 +e9 +d3 +00 +00 +ff +ff +7f +ff +e9 +b4 +09 +00 +00 +42 +80 +3a +00 +0f +8f +38 +fd +ff +ff +81 +25 +e9 +d3 +00 +00 +ff +ff +ef +ff +e9 +9b +09 +00 +00 +42 +8a +0a +80 +f9 +44 +74 +09 +80 +f9 +64 +0f +85 +1b +fd +ff +ff +42 +80 +3a +00 +0f +8f +0e +fd +ff +ff +81 +25 +e9 +d3 +00 +00 +ff +ff +fb +ff +e9 +71 +09 +00 +00 +42 +8a +0a +80 +f9 +52 +74 +09 +80 +f9 +72 +0f +85 +f1 +fc +ff +ff +42 +8a +0a +80 +f9 +49 +74 +09 +80 +f9 +69 +0f +85 +e0 +fc +ff +ff +42 +8a +0a +80 +f9 +58 +74 +09 +80 +f9 +78 +0f +85 +cf +fc +ff +ff +42 +80 +3a +00 +0f +8f +c2 +fc +ff +ff +81 +25 +e9 +d3 +00 +00 +ff +ff +fd +ff +e9 +25 +09 +00 +00 +42 +8a +0a +80 +f9 +4e +74 +09 +80 +f9 +6e +0f +85 +a5 +fc +ff +ff +42 +8a +0a +80 +f9 +4f +74 +09 +80 +f9 +6f +0f +85 +94 +fc +ff +ff +42 +8a +0a +80 +f9 +57 +74 +09 +80 +f9 +77 +0f +85 +83 +fc +ff +ff +42 +80 +3a +00 +0f +8f +76 +fc +ff +ff +81 +25 +e9 +d3 +00 +00 +ff +ff +fe +ff +e9 +d9 +08 +00 +00 +42 +8a +0a +80 +f9 +4d +74 +54 +80 +f9 +6d +74 +4f +e9 +58 +fc +ff +ff +42 +8a +0a +80 +f9 +45 +74 +09 +80 +f9 +65 +0f +85 +47 +fc +ff +ff +42 +8a +0a +84 +c9 +7e +0a +80 +f9 +32 +74 +14 +e9 +33 +fc +ff +ff +81 +25 +e9 +d3 +00 +00 +ff +bf +ff +ff +e9 +96 +08 +00 +00 +42 +80 +3a +00 +0f +8f +1a +fc +ff +ff +81 +25 +e9 +d3 +00 +00 +ff +7f +ff +ff +e9 +7d +08 +00 +00 +42 +80 +3a +00 +0f +8f +01 +fc +ff +ff +81 +25 +e9 +d3 +00 +00 +ff +ff +f7 +ff +e9 +64 +08 +00 +00 +42 +8a +0a +80 +f9 +58 +74 +09 +80 +f9 +78 +0f +85 +e4 +fb +ff +ff +42 +80 +3a +00 +0f +8f +d7 +fb +ff +ff +81 +25 +e9 +d3 +00 +00 +ff +df +ff +ff +e9 +3a +08 +00 +00 +42 +8a +0a +80 +f9 +55 +74 +09 +80 +f9 +75 +0f +85 +ba +fb +ff +ff +42 +80 +3a +00 +0f +8f +ad +fb +ff +ff +81 +25 +e9 +d3 +00 +00 +ff +ef +ff +ff +e9 +10 +08 +00 +00 +42 +8a +0a +80 +f9 +55 +74 +09 +80 +f9 +75 +0f +85 +90 +fb +ff +ff +42 +80 +3a +00 +0f +8f +83 +fb +ff +ff +81 +0d +e9 +d3 +00 +00 +00 +10 +00 +00 +e9 +e6 +07 +00 +00 +42 +8a +0a +80 +f9 +53 +74 +78 +80 +f9 +73 +74 +73 +e9 +65 +fb +ff +ff +42 +8a +0a +80 +f9 +54 +74 +09 +80 +f9 +74 +0f +85 +54 +fb +ff +ff +42 +8a +0a +80 +f9 +45 +74 +09 +80 +f9 +65 +0f +85 +43 +fb +ff +ff +42 +8a +0a +80 +f9 +52 +74 +09 +80 +f9 +72 +0f +85 +32 +fb +ff +ff +42 +8a +0a +80 +f9 +4f +74 +09 +80 +f9 +6f +0f +85 +21 +fb +ff +ff +42 +8a +0a +80 +f9 +4e +74 +09 +80 +f9 +6e +0f +85 +10 +fb +ff +ff +42 +80 +3a +00 +0f +8f +03 +fb +ff +ff +c7 +05 +e9 +d3 +00 +00 +3f +7e +99 +00 +e9 +66 +07 +00 +00 +42 +80 +3a +00 +0f +8f +ea +fa +ff +ff +81 +0d +e9 +d3 +00 +00 +00 +00 +40 +00 +e9 +4d +07 +00 +00 +42 +8a +0a +80 +f9 +4d +74 +09 +80 +f9 +6d +0f +85 +cd +fa +ff +ff +42 +8a +0a +80 +f9 +4d +74 +09 +80 +f9 +6d +0f +85 +bc +fa +ff +ff +42 +8a +0a +80 +f9 +45 +74 +09 +80 +f9 +65 +0f +85 +ab +fa +ff +ff +42 +8a +0a +80 +f9 +52 +74 +93 +80 +f9 +72 +eb +88 +42 +8a +0a +80 +f9 +45 +74 +7f +80 +f9 +65 +74 +7a +e9 +8c +fa +ff +ff +42 +8a +0a +80 +f9 +4d +74 +54 +80 +f9 +6d +74 +4f +e9 +7a +fa +ff +ff +42 +8a +0a +80 +f9 +45 +74 +09 +80 +f9 +65 +0f +85 +69 +fa +ff +ff +42 +8a +0a +84 +c9 +7e +0a +80 +f9 +32 +74 +14 +e9 +55 +fa +ff +ff +81 +0d +e9 +d3 +00 +00 +00 +40 +00 +00 +e9 +b8 +06 +00 +00 +42 +80 +3a +00 +0f +8f +3c +fa +ff +ff +81 +0d +e9 +d3 +00 +00 +00 +80 +00 +00 +e9 +9f +06 +00 +00 +42 +80 +3a +00 +0f +8f +23 +fa +ff +ff +81 +0d +e9 +d3 +00 +00 +00 +00 +08 +00 +e9 +86 +06 +00 +00 +42 +8a +0a +80 +f9 +44 +74 +09 +80 +f9 +64 +0f +85 +06 +fa +ff +ff +42 +8a +0a +80 +f9 +47 +74 +09 +80 +f9 +67 +0f +85 +f5 +f9 +ff +ff +42 +8a +0a +80 +f9 +45 +74 +09 +80 +f9 +65 +0f +85 +e4 +f9 +ff +ff +42 +8a +0a +80 +f9 +48 +0f +84 +1f +f9 +ff +ff +80 +f9 +68 +0f +84 +16 +f9 +ff +ff +e9 +ca +f9 +ff +ff +42 +8a +0a +80 +f9 +44 +0f +84 +99 +00 +00 +00 +80 +f9 +64 +0f +84 +90 +00 +00 +00 +e9 +b0 +f9 +ff +ff +42 +8a +0a +80 +f9 +48 +74 +09 +80 +f9 +68 +0f +85 +9f +f9 +ff +ff +42 +8a +0a +80 +f9 +4c +74 +09 +80 +f9 +6c +0f +85 +8e +f9 +ff +ff +42 +8a +0a +80 +f9 +4f +74 +09 +80 +f9 +6f +0f +85 +7d +f9 +ff +ff +42 +8a +0a +80 +f9 +4e +74 +09 +80 +f9 +6e +0f +85 +6c +f9 +ff +ff +42 +8a +0a +80 +f9 +2d +7f +0f +84 +c9 +7e +15 +80 +f9 +2c +0f +8e +54 +f9 +ff +ff +eb +19 +80 +f9 +36 +74 +20 +e9 +48 +f9 +ff +ff +c7 +05 +e9 +d3 +00 +00 +3f +76 +99 +00 +e9 +ab +05 +00 +00 +42 +8a +0a +80 +f9 +36 +0f +85 +30 +f9 +ff +ff +42 +8a +0a +80 +f9 +34 +e9 +0f +fe +ff +ff +42 +80 +3a +00 +0f +8f +18 +f9 +ff +ff +81 +0d +e9 +d3 +00 +00 +00 +00 +04 +00 +e9 +7b +05 +00 +00 +42 +8a +0a +80 +f9 +4c +74 +09 +80 +f9 +6c +0f +85 +fb +f8 +ff +ff +42 +8a +0a +80 +f9 +4c +74 +09 +80 +f9 +6c +0f +85 +ea +f8 +ff +ff +42 +8a +0a +80 +f9 +49 +74 +09 +80 +f9 +69 +0f +85 +d9 +f8 +ff +ff +42 +8a +0a +80 +f9 +41 +74 +09 +80 +f9 +61 +0f +85 +c8 +f8 +ff +ff +42 +8a +0a +80 +f9 +4d +74 +09 +80 +f9 +6d +0f +85 +b7 +f8 +ff +ff +42 +8a +0a +80 +f9 +45 +74 +09 +80 +f9 +65 +0f +85 +a6 +f8 +ff +ff +42 +8a +0a +80 +f9 +54 +74 +09 +80 +f9 +74 +0f +85 +95 +f8 +ff +ff +42 +8a +0a +80 +f9 +54 +74 +09 +80 +f9 +74 +0f +85 +84 +f8 +ff +ff +42 +8a +0a +80 +f9 +45 +74 +09 +80 +f9 +65 +0f +85 +73 +f8 +ff +ff +42 +80 +3a +00 +0f +8f +66 +f8 +ff +ff +c7 +05 +e9 +d3 +00 +00 +ff +f0 +98 +00 +e9 +c9 +04 +00 +00 +42 +80 +3a +00 +0f +8f +4d +f8 +ff +ff +c7 +05 +e9 +d3 +00 +00 +3f +32 +99 +00 +e9 +b0 +04 +00 +00 +42 +80 +3a +00 +0f +8e +ec +fe +ff +ff +e9 +2f +f8 +ff +ff +42 +8a +0a +80 +f9 +54 +74 +09 +80 +f9 +74 +0f +85 +21 +f8 +ff +ff +42 +8a +0a +80 +f9 +4d +74 +09 +80 +f9 +6d +0f +85 +10 +f8 +ff +ff +42 +8a +0a +80 +f9 +41 +74 +09 +80 +f9 +61 +0f +85 +ff +f7 +ff +ff +42 +8a +0a +80 +f9 +49 +74 +09 +80 +f9 +69 +0f +85 +ee +f7 +ff +ff +42 +80 +3a +00 +0f +8f +e1 +f7 +ff +ff +c7 +05 +e9 +d3 +00 +00 +7f +70 +98 +00 +e9 +44 +04 +00 +00 +42 +8a +0a +80 +f9 +36 +0f +85 +c9 +f7 +ff +ff +42 +80 +3a +00 +0f +8f +bc +f7 +ff +ff +c7 +05 +e9 +d3 +00 +00 +3f +10 +98 +00 +e9 +1f +04 +00 +00 +42 +80 +3a +00 +0f +8f +a3 +f7 +ff +ff +c7 +05 +e9 +d3 +00 +00 +3f +30 +98 +00 +e9 +06 +04 +00 +00 +42 +80 +3a +00 +0f +8f +8a +f7 +ff +ff +c7 +05 +e9 +d3 +00 +00 +1f +10 +98 +00 +e9 +ed +03 +00 +00 +42 +8a +0a +80 +f9 +4e +0f +84 +94 +00 +00 +00 +80 +f9 +6e +0f +84 +8b +00 +00 +00 +e9 +64 +f7 +ff +ff +42 +8a +0a +80 +f9 +4f +7f +10 +80 +f9 +49 +74 +36 +80 +f9 +4e +0f +8e +4e +f7 +ff +ff +eb +19 +80 +f9 +69 +7f +0b +80 +f9 +68 +0f +8e +3e +f7 +ff +ff +eb +1b +80 +f9 +6f +0f +85 +33 +f7 +ff +ff +42 +8a +0a +80 +f9 +54 +74 +34 +80 +f9 +74 +74 +2f +e9 +21 +f7 +ff +ff +42 +8a +0a +80 +f9 +56 +74 +09 +80 +f9 +76 +0f +85 +10 +f7 +ff +ff +42 +80 +3a +00 +0f +8f +03 +f7 +ff +ff +81 +0d +e9 +d3 +00 +00 +00 +00 +80 +00 +e9 +66 +03 +00 +00 +42 +80 +3a +00 +0f +8f +ea +f6 +ff +ff +81 +0d +e9 +d3 +00 +00 +00 +00 +10 +00 +e9 +4d +03 +00 +00 +42 +8a +0a +80 +f9 +54 +74 +09 +80 +f9 +74 +0f +85 +cd +f6 +ff +ff +42 +8a +0a +80 +f9 +49 +74 +09 +80 +f9 +69 +0f +85 +bc +f6 +ff +ff +42 +8a +0a +80 +f9 +55 +74 +09 +80 +f9 +75 +0f +85 +ab +f6 +ff +ff +42 +8a +0a +80 +f9 +4d +74 +09 +80 +f9 +6d +0f +85 +9a +f6 +ff +ff +42 +8a +0a +80 +f9 +48 +7f +38 +80 +f9 +31 +7f +13 +84 +c9 +0f +8e +f8 +fe +ff +ff +80 +f9 +2d +0f +85 +79 +f6 +ff +ff +eb +3e +80 +f9 +32 +0f +8e +c1 +fe +ff +ff +80 +f9 +33 +0f +8e +7a +fe +ff +ff +80 +f9 +34 +0f +8e +ec +fd +ff +ff +e9 +57 +f6 +ff +ff +80 +f9 +68 +7f +0a +80 +f9 +49 +7e +55 +80 +f9 +50 +eb +08 +80 +f9 +69 +7e +4b +80 +f9 +70 +74 +79 +e9 +39 +f6 +ff +ff +42 +8a +0a +80 +f9 +34 +7f +20 +80 +f9 +31 +0f +8e +2b +f6 +ff +ff +80 +f9 +32 +0f +8e +72 +fe +ff +ff +80 +f9 +33 +0f +8e +2b +fe +ff +ff +e9 +a1 +fd +ff +ff +80 +f9 +49 +7f +0b +80 +f9 +48 +0f +8e +06 +f6 +ff +ff +eb +09 +80 +f9 +69 +0f +85 +fb +f5 +ff +ff +42 +8a +0a +80 +f9 +56 +7f +13 +80 +f9 +49 +74 +4b +80 +f9 +55 +0f +8e +e5 +f5 +ff +ff +e9 +6d +fd +ff +ff +80 +f9 +69 +7f +0b +80 +f9 +68 +0f +8e +d2 +f5 +ff +ff +eb +2d +80 +f9 +76 +e9 +4f +fd +ff +ff +42 +8a +0a +80 +f9 +52 +74 +09 +80 +f9 +72 +0f +85 +b7 +f5 +ff +ff +42 +8a +0a +80 +f9 +4f +0f +84 +e2 +fd +ff +ff +80 +f9 +6f +e9 +d4 +fd +ff +ff +42 +8a +0a +80 +f9 +49 +7f +16 +84 +c9 +0f +8e +ed +fd +ff +ff +80 +f9 +48 +0f +8e +87 +f5 +ff +ff +e9 +97 +fd +ff +ff +80 +f9 +69 +0f +84 +8e +fd +ff +ff +e9 +74 +f5 +ff +ff +42 +8a +0a +80 +f9 +36 +0f +84 +d4 +fd +ff +ff +e9 +66 +f5 +ff +ff +42 +8a +0a +80 +f9 +36 +0f +85 +5a +f5 +ff +ff +42 +80 +3a +00 +0f +8f +4d +f5 +ff +ff +c7 +05 +e9 +d3 +00 +00 +0f +10 +98 +00 +e9 +b0 +01 +00 +00 +42 +8a +0a +80 +f9 +36 +74 +51 +e9 +34 +f5 +ff +ff +42 +8a +0a +80 +f9 +4e +74 +09 +80 +f9 +6e +0f +85 +23 +f5 +ff +ff +42 +8a +0a +80 +f9 +4f +74 +09 +80 +f9 +6f +0f +85 +12 +f5 +ff +ff +42 +8a +0a +80 +f9 +57 +74 +09 +80 +f9 +77 +0f +85 +01 +f5 +ff +ff +42 +80 +3a +00 +0f +8f +f4 +f4 +ff +ff +81 +0d +e9 +d3 +00 +00 +00 +00 +01 +00 +e9 +57 +01 +00 +00 +42 +80 +3a +00 +0f +8f +db +f4 +ff +ff +c7 +05 +e9 +d3 +00 +00 +07 +00 +98 +00 +e9 +3e +01 +00 +00 +42 +8a +0a +80 +f9 +36 +0f +85 +c3 +f4 +ff +ff +42 +80 +3a +00 +0f +8f +b6 +f4 +ff +ff +c7 +05 +e9 +d3 +00 +00 +03 +00 +80 +00 +e9 +19 +01 +00 +00 +42 +8a +0a +80 +f9 +36 +0f +85 +9e +f4 +ff +ff +42 +80 +3a +00 +0f +8f +91 +f4 +ff +ff +c7 +05 +e9 +d3 +00 +00 +01 +00 +80 +00 +e9 +f4 +00 +00 +00 +42 +8a +0a +80 +f9 +38 +0f +84 +38 +ff +ff +ff +e9 +74 +f4 +ff +ff +42 +8a +0a +80 +f9 +2d +74 +6d +eb +6e +42 +8a +0a +80 +f9 +41 +74 +09 +80 +f9 +61 +0f +85 +59 +f4 +ff +ff +42 +8a +0a +80 +f9 +4e +74 +09 +80 +f9 +6e +0f +85 +48 +f4 +ff +ff +42 +8a +0a +80 +f9 +49 +74 +09 +80 +f9 +69 +0f +85 +37 +f4 +ff +ff +42 +8a +0a +80 +f9 +55 +74 +09 +80 +f9 +75 +0f +85 +26 +f4 +ff +ff +42 +8a +0a +80 +f9 +4d +74 +09 +80 +f9 +6d +0f +85 +15 +f4 +ff +ff +42 +80 +3a +00 +0f +8f +08 +f4 +ff +ff +c7 +05 +e9 +d3 +00 +00 +ff +f1 +98 +00 +eb +6e +42 +8a +0a +80 +f9 +36 +0f +85 +f3 +f3 +ff +ff +42 +8a +0a +80 +f9 +34 +eb +d0 +42 +8a +0a +80 +f9 +33 +7f +20 +80 +f9 +30 +0f +8e +da +f3 +ff +ff +80 +f9 +31 +0f +8e +29 +f1 +ff +ff +80 +f9 +32 +0f +8e +31 +f1 +ff +ff +e9 +3e +ff +ff +ff +80 +f9 +34 +0f +8e +57 +f1 +ff +ff +80 +f9 +38 +0f +85 +b1 +f3 +ff +ff +42 +8a +0a +80 +f9 +36 +0f +85 +a5 +f3 +ff +ff +42 +80 +3a +00 +0f +8f +98 +f3 +ff +ff +c7 +05 +e9 +d3 +00 +00 +00 +00 +80 +00 +8b +5d +fc +c9 +c3 +55 +89 +e5 +57 +56 +53 +83 +ec +0c +8b +7d +08 +8b +4d +0c +8b +75 +10 +89 +cb +0f +be +01 +83 +f8 +78 +0f +87 +38 +03 +00 +00 +ff +24 +85 +ed +0e +01 +00 +41 +8a +11 +80 +fa +4f +7f +17 +80 +fa +45 +0f +84 +35 +b5 +00 +00 +80 +fa +4e +0f +8e +1a +03 +00 +00 +e9 +60 +b5 +00 +00 +80 +fa +65 +7f +0e +80 +fa +64 +0f +8e +07 +03 +00 +00 +e9 +14 +b5 +00 +00 +80 +fa +6f +0f +84 +44 +b5 +00 +00 +e9 +f4 +02 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +38 +0f +87 +e2 +02 +00 +00 +ff +24 +85 +d1 +10 +01 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +32 +83 +f8 +47 +0f +87 +c9 +02 +00 +00 +ff +24 +85 +b5 +11 +01 +00 +41 +8a +11 +80 +fa +52 +7f +21 +80 +fa +4e +7f +05 +80 +fa +45 +eb +1f +80 +fa +4f +0f +8e +31 +84 +00 +00 +80 +fa +51 +0f +8e +9e +02 +00 +00 +e9 +38 +84 +00 +00 +80 +fa +6e +7f +0e +80 +fa +65 +0f +84 +03 +84 +00 +00 +e9 +86 +02 +00 +00 +80 +fa +6f +0f +8e +07 +84 +00 +00 +80 +fa +72 +0f +84 +13 +84 +00 +00 +e9 +6f +02 +00 +00 +41 +8a +11 +80 +fa +51 +7f +2a +80 +fa +32 +7f +0e +80 +fa +31 +0f +84 +ba +81 +00 +00 +e9 +54 +02 +00 +00 +80 +fa +33 +0f +8e +bd +81 +00 +00 +80 +fa +36 +0f +84 +c5 +81 +00 +00 +e9 +3d +02 +00 +00 +80 +fa +71 +7f +0e +80 +fa +52 +0f +8e +c3 +81 +00 +00 +80 +fa +55 +eb +0c +80 +fa +72 +0f +8e +b5 +81 +00 +00 +80 +fa +75 +0f +84 +e6 +81 +00 +00 +e9 +13 +02 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +31 +83 +f8 +47 +0f +87 +01 +02 +00 +00 +ff +24 +85 +d5 +12 +01 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +33 +0f +87 +e8 +01 +00 +00 +ff +24 +85 +f5 +13 +01 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +31 +83 +f8 +42 +0f +87 +cf +01 +00 +00 +ff +24 +85 +c5 +14 +01 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +37 +0f +87 +b6 +01 +00 +00 +ff +24 +85 +d1 +15 +01 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +37 +0f +87 +9d +01 +00 +00 +ff +24 +85 +b1 +16 +01 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +34 +0f +87 +84 +01 +00 +00 +ff +24 +85 +91 +17 +01 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +2e +0f +87 +6b +01 +00 +00 +ff +24 +85 +65 +18 +01 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +32 +0f +87 +52 +01 +00 +00 +ff +24 +85 +21 +19 +01 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +48 +83 +f8 +30 +0f +87 +39 +01 +00 +00 +ff +24 +85 +ed +19 +01 +00 +41 +8a +11 +80 +fa +53 +0f +84 +29 +34 +00 +00 +80 +fa +73 +0f +84 +20 +34 +00 +00 +e9 +18 +01 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +37 +0f +87 +06 +01 +00 +00 +ff +24 +85 +b1 +1a +01 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +42 +83 +f8 +30 +0f +87 +ed +00 +00 +00 +ff +24 +85 +91 +1b +01 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +39 +0f +87 +d4 +00 +00 +00 +ff +24 +85 +55 +1c +01 +00 +41 +8a +11 +80 +fa +4c +0f +84 +4d +05 +00 +00 +80 +fa +6c +0f +84 +44 +05 +00 +00 +e9 +b3 +00 +00 +00 +41 +8a +11 +80 +fa +45 +0f +84 +b8 +04 +00 +00 +80 +fa +65 +0f +84 +af +04 +00 +00 +e9 +99 +00 +00 +00 +41 +8a +11 +80 +fa +52 +7f +26 +80 +fa +41 +7f +0e +80 +fa +40 +0f +8e +83 +00 +00 +00 +e9 +30 +03 +00 +00 +80 +fa +42 +0f +8e +41 +03 +00 +00 +80 +fa +51 +7e +70 +e9 +51 +03 +00 +00 +80 +fa +62 +7f +13 +80 +fa +60 +7e +61 +80 +fa +61 +0f +8e +0a +03 +00 +00 +e9 +1f +03 +00 +00 +80 +fa +72 +0f +84 +30 +03 +00 +00 +eb +48 +41 +8a +11 +80 +fa +4e +7f +1b +80 +fa +44 +7f +0a +80 +fa +42 +7e +36 +80 +fa +43 +eb +19 +80 +fa +4c +7e +2c +80 +fa +4d +7e +69 +eb +7e +80 +fa +64 +7f +0c +80 +fa +62 +7e +1b +80 +fa +63 +7e +25 +eb +3a +80 +fa +6c +7e +0f +80 +fa +6d +7e +4c +80 +fa +6e +7e +5e +eb +03 +41 +8a +11 +b8 +00 +00 +00 +00 +84 +d2 +0f +8e +ed +b2 +00 +00 +eb +ee +41 +8a +11 +80 +fa +4f +0f +84 +fb +01 +00 +00 +80 +fa +6f +0f +84 +f2 +01 +00 +00 +eb +da +41 +8a +11 +80 +fa +30 +7e +d2 +80 +fa +31 +0f +8e +c3 +01 +00 +00 +80 +fa +32 +0f +8e +9e +01 +00 +00 +eb +be +41 +8a +11 +80 +fa +4f +0f +84 +63 +01 +00 +00 +80 +fa +6f +0f +84 +5a +01 +00 +00 +eb +a7 +41 +8a +11 +80 +fa +50 +74 +05 +80 +fa +70 +75 +9a +41 +8a +11 +80 +fa +43 +74 +05 +80 +fa +63 +75 +8d +41 +8a +11 +80 +fa +4b +74 +05 +80 +fa +6b +75 +80 +41 +8a +11 +80 +fa +4c +7f +10 +80 +fa +48 +74 +25 +80 +fa +4b +0f +8e +6a +ff +ff +ff +eb +34 +80 +fa +68 +7f +0b +80 +fa +67 +0f +8e +5a +ff +ff +ff +eb +0a +80 +fa +6c +74 +1f +e9 +4e +ff +ff +ff +41 +8a +11 +80 +fa +50 +0f +84 +89 +00 +00 +00 +80 +fa +70 +0f +84 +80 +00 +00 +00 +e9 +34 +ff +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +23 +ff +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +0d +ff +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +fd +fe +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +f1 +fe +ff +ff +41 +80 +39 +00 +0f +8f +e4 +fe +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +14 +66 +00 +e9 +40 +aa +00 +00 +41 +80 +39 +00 +0f +8f +c8 +fe +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +14 +00 +00 +e9 +47 +aa +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +a3 +fe +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +93 +fe +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +87 +fe +ff +ff +41 +80 +39 +00 +0f +8f +7a +fe +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +15 +66 +00 +e9 +d6 +a9 +00 +00 +41 +80 +39 +00 +0f +8f +5e +fe +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +15 +00 +00 +e9 +dd +a9 +00 +00 +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +3e +fe +ff +ff +41 +80 +39 +00 +0f +8f +31 +fe +ff +ff +c7 +07 +8d +07 +01 +00 +c7 +47 +04 +06 +00 +00 +00 +e9 +5e +a7 +00 +00 +41 +80 +39 +00 +0f +8f +15 +fe +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +0b +0f +00 +e9 +1f +a8 +00 +00 +41 +80 +39 +00 +0f +8f +f9 +fd +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +b9 +0f +00 +e9 +d5 +73 +00 +00 +41 +8a +11 +80 +fa +4d +74 +09 +80 +fa +6d +0f +85 +d9 +fd +ff +ff +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +c8 +fd +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +b7 +fd +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +a1 +fd +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +91 +fd +ff +ff +eb +25 +80 +fa +73 +0f +85 +86 +fd +ff +ff +41 +80 +39 +00 +0f +8f +79 +fd +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +2e +f3 +00 +e9 +f8 +a8 +00 +00 +41 +80 +39 +00 +0f +8f +5d +fd +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +2e +f2 +00 +e9 +b9 +a8 +00 +00 +41 +8a +11 +80 +fa +49 +0f +84 +26 +01 +00 +00 +80 +fa +69 +0f +84 +1d +01 +00 +00 +e9 +34 +fd +ff +ff +41 +8a +11 +80 +fa +49 +0f +84 +bd +00 +00 +00 +80 +fa +69 +0f +84 +b4 +00 +00 +00 +e9 +1a +fd +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +4d +74 +25 +80 +fa +52 +0f +8e +04 +fd +ff +ff +eb +2c +80 +fa +6d +7f +0b +80 +fa +6c +0f +8e +f4 +fc +ff +ff +eb +0a +80 +fa +73 +74 +17 +e9 +e8 +fc +ff +ff +41 +8a +11 +80 +fa +53 +74 +48 +80 +fa +73 +74 +43 +e9 +d6 +fc +ff +ff +41 +8a +11 +80 +fa +48 +74 +09 +80 +fa +68 +0f +85 +c5 +fc +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +b4 +fc +ff +ff +41 +80 +39 +00 +0f +8f +a7 +fc +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +37 +0f +00 +e9 +e1 +6b +00 +00 +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +87 +fc +ff +ff +41 +80 +39 +00 +0f +8f +7a +fc +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +30 +0f +00 +e9 +15 +6c +00 +00 +41 +8a +11 +80 +fa +4e +74 +09 +80 +fa +6e +0f +85 +5a +fc +ff +ff +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +49 +fc +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +38 +fc +ff +ff +41 +80 +39 +00 +0f +8f +2b +fc +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +09 +0f +00 +e9 +9f +08 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +0b +fc +ff +ff +41 +80 +39 +00 +0f +8f +fe +fb +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +9b +00 +00 +e9 +c6 +ae +00 +00 +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +de +fb +ff +ff +41 +8a +11 +80 +fa +57 +7f +10 +80 +fa +52 +74 +25 +80 +fa +56 +0f +8e +c8 +fb +ff +ff +eb +36 +80 +fa +72 +7f +0b +80 +fa +71 +0f +8e +b8 +fb +ff +ff +eb +0a +80 +fa +77 +74 +21 +e9 +ac +fb +ff +ff +41 +80 +39 +00 +0f +8f +9f +fb +ff +ff +c7 +07 +3d +f7 +00 +00 +c7 +47 +04 +01 +00 +04 +00 +e9 +fd +a1 +00 +00 +41 +80 +39 +00 +0f +8f +83 +fb +ff +ff +c7 +07 +3d +f7 +00 +00 +c7 +47 +04 +01 +00 +05 +00 +e9 +e1 +a1 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +63 +fb +ff +ff +41 +80 +39 +00 +0f +8f +56 +fb +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +f4 +00 +00 +c7 +47 +08 +00 +00 +80 +00 +e9 +1e +ae +00 +00 +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +97 +03 +00 +00 +80 +fa +44 +0f +8e +24 +fb +ff +ff +e9 +8b +04 +00 +00 +80 +fa +65 +0f +84 +82 +04 +00 +00 +e9 +11 +fb +ff +ff +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +87 +03 +00 +00 +80 +fa +44 +0f +8e +f8 +fa +ff +ff +e9 +43 +04 +00 +00 +80 +fa +65 +0f +84 +3a +04 +00 +00 +e9 +e5 +fa +ff +ff +41 +8a +11 +80 +fa +58 +7f +16 +84 +d2 +0f +8e +5b +03 +00 +00 +80 +fa +57 +0f +8e +cc +fa +ff +ff +e9 +ea +03 +00 +00 +80 +fa +78 +0f +84 +e1 +03 +00 +00 +e9 +b9 +fa +ff +ff +41 +8a +11 +80 +fa +43 +7f +16 +84 +d2 +0f +8e +47 +01 +00 +00 +80 +fa +42 +0f +8e +a0 +fa +ff +ff +e9 +80 +03 +00 +00 +80 +fa +63 +0f +84 +77 +03 +00 +00 +e9 +8d +fa +ff +ff +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +af +02 +00 +00 +80 +fa +44 +0f +8e +74 +fa +ff +ff +e9 +38 +03 +00 +00 +80 +fa +65 +0f +84 +2f +03 +00 +00 +e9 +61 +fa +ff +ff +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +9f +02 +00 +00 +80 +fa +44 +0f +8e +48 +fa +ff +ff +e9 +f0 +02 +00 +00 +80 +fa +65 +0f +84 +e7 +02 +00 +00 +e9 +35 +fa +ff +ff +41 +8a +11 +80 +fa +50 +0f +84 +c1 +02 +00 +00 +80 +fa +70 +0f +84 +b8 +02 +00 +00 +e9 +1e +fa +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +39 +0f +87 +0c +fa +ff +ff +ff +24 +85 +3d +1d +01 +00 +41 +80 +39 +00 +0f +8f +f8 +f9 +ff +ff +c7 +07 +0d +f3 +00 +00 +c7 +47 +04 +07 +00 +00 +00 +e9 +c0 +ac +00 +00 +41 +8a +11 +80 +fa +4f +7f +23 +80 +fa +44 +7f +07 +84 +d2 +e9 +d1 +00 +00 +00 +80 +fa +45 +0f +8e +c4 +00 +00 +00 +80 +fa +4e +0f +8e +c0 +f9 +ff +ff +e9 +7e +01 +00 +00 +80 +fa +65 +7f +0e +80 +fa +64 +0f +8e +ad +f9 +ff +ff +e9 +a3 +00 +00 +00 +80 +fa +6f +0f +84 +62 +01 +00 +00 +e9 +9a +f9 +ff +ff +41 +8a +11 +80 +fa +43 +74 +42 +80 +fa +63 +74 +3d +e9 +8b +f9 +ff +ff +41 +80 +39 +00 +0f +8f +7e +f9 +ff +ff +c7 +07 +0d +f3 +00 +00 +c7 +47 +04 +07 +08 +00 +00 +e9 +46 +ac +00 +00 +41 +80 +39 +00 +0f +8f +62 +f9 +ff +ff +c7 +07 +0d +f3 +00 +00 +c7 +47 +04 +07 +04 +00 +00 +e9 +2a +ac +00 +00 +41 +8a +11 +80 +fa +58 +74 +09 +80 +fa +78 +0f +85 +42 +f9 +ff +ff +41 +8a +11 +80 +fa +5a +74 +09 +80 +fa +7a +0f +85 +31 +f9 +ff +ff +41 +80 +39 +00 +0f +8f +24 +f9 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +fa +a9 +00 +00 +c7 +07 +ed +f3 +00 +00 +c7 +47 +04 +02 +40 +00 +00 +e9 +0d +aa +00 +00 +41 +80 +39 +00 +0f +8f +fb +f8 +ff +ff +c7 +07 +0d +f3 +00 +00 +c7 +47 +04 +07 +0a +00 +00 +e9 +c3 +ab +00 +00 +41 +80 +39 +00 +0f +8f +df +f8 +ff +ff +c7 +07 +0d +f3 +00 +00 +c7 +47 +04 +07 +01 +00 +00 +e9 +a7 +ab +00 +00 +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +17 +02 +00 +00 +80 +fa +44 +0f +8e +b4 +f8 +ff +ff +e9 +2b +01 +00 +00 +80 +fa +65 +0f +84 +22 +01 +00 +00 +e9 +a1 +f8 +ff +ff +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +07 +02 +00 +00 +80 +fa +44 +0f +8e +88 +f8 +ff +ff +e9 +e3 +00 +00 +00 +80 +fa +65 +0f +84 +da +00 +00 +00 +e9 +75 +f8 +ff +ff +41 +80 +39 +00 +0f +8f +6b +f8 +ff +ff +c7 +07 +0d +f3 +00 +00 +c7 +47 +04 +07 +05 +00 +00 +e9 +33 +ab +00 +00 +41 +80 +39 +00 +0f +8f +4f +f8 +ff +ff +c7 +07 +0d +f3 +00 +00 +c7 +47 +04 +07 +09 +00 +00 +e9 +17 +ab +00 +00 +41 +80 +39 +00 +0f +8f +33 +f8 +ff +ff +c7 +07 +0d +f3 +00 +00 +c7 +47 +04 +07 +0b +00 +00 +e9 +fb +aa +00 +00 +41 +8a +11 +80 +fa +45 +7f +13 +84 +d2 +0f +8e +c8 +00 +00 +00 +80 +fa +44 +0f +8e +08 +f8 +ff +ff +eb +4a +80 +fa +65 +74 +45 +e9 +fc +f7 +ff +ff +41 +8a +11 +80 +fa +45 +7f +13 +84 +d2 +0f +8e +bf +00 +00 +00 +80 +fa +44 +0f +8e +e3 +f7 +ff +ff +eb +09 +80 +fa +65 +0f +85 +d8 +f7 +ff +ff +41 +80 +39 +00 +0f +8f +ce +f7 +ff +ff +c7 +07 +0d +f3 +00 +00 +c7 +47 +04 +07 +0f +00 +00 +e9 +96 +aa +00 +00 +41 +80 +39 +00 +0f +8f +b2 +f7 +ff +ff +c7 +07 +0d +f3 +00 +00 +c7 +47 +04 +07 +0c +00 +00 +e9 +7a +aa +00 +00 +41 +80 +39 +00 +0f +8f +96 +f7 +ff +ff +c7 +07 +0d +f3 +00 +00 +c7 +47 +04 +07 +07 +00 +00 +e9 +5e +aa +00 +00 +41 +80 +39 +00 +0f +8f +7a +f7 +ff +ff +c7 +07 +0d +f3 +00 +00 +c7 +47 +04 +07 +02 +00 +00 +e9 +42 +aa +00 +00 +41 +80 +39 +00 +0f +8f +5e +f7 +ff +ff +c7 +07 +4d +f0 +00 +00 +e9 +0f +14 +00 +00 +41 +80 +39 +00 +0f +8f +49 +f7 +ff +ff +c7 +07 +0d +f3 +00 +00 +c7 +47 +04 +07 +0e +00 +00 +e9 +11 +aa +00 +00 +41 +80 +39 +00 +0f +8f +2d +f7 +ff +ff +c7 +07 +0d +f3 +00 +00 +c7 +47 +04 +07 +0d +00 +00 +e9 +f5 +a9 +00 +00 +41 +8a +11 +80 +fa +58 +74 +09 +80 +fa +78 +0f +85 +0d +f7 +ff +ff +41 +8a +11 +80 +fa +5a +74 +09 +80 +fa +7a +0f +85 +fc +f6 +ff +ff +41 +80 +39 +00 +0f +8f +ef +f6 +ff +ff +c7 +07 +ed +f3 +00 +00 +c7 +47 +04 +02 +20 +00 +00 +e9 +a1 +a7 +00 +00 +41 +8a +11 +80 +fa +5a +74 +09 +80 +fa +7a +0f +85 +cf +f6 +ff +ff +41 +80 +39 +00 +0f +8f +c2 +f6 +ff +ff +c7 +07 +ed +f3 +00 +00 +c7 +47 +04 +02 +10 +00 +00 +e9 +8a +a9 +00 +00 +41 +80 +39 +00 +0f +8f +a6 +f6 +ff +ff +c7 +07 +0d +f3 +00 +00 +c7 +47 +04 +07 +06 +00 +00 +e9 +6e +a9 +00 +00 +41 +80 +39 +00 +0f +8f +8a +f6 +ff +ff +c7 +07 +0d +f3 +00 +00 +c7 +47 +04 +07 +03 +00 +00 +e9 +52 +a9 +00 +00 +41 +8a +11 +80 +fa +54 +0f +84 +fe +03 +00 +00 +80 +fa +74 +0f +84 +f5 +03 +00 +00 +e9 +61 +f6 +ff +ff +41 +8a +11 +80 +fa +49 +0f +84 +b7 +03 +00 +00 +80 +fa +69 +0f +84 +ae +03 +00 +00 +e9 +47 +f6 +ff +ff +41 +8a +11 +80 +fa +55 +0f +84 +70 +03 +00 +00 +80 +fa +75 +0f +84 +67 +03 +00 +00 +e9 +2d +f6 +ff +ff +41 +8a +11 +80 +fa +56 +7f +37 +80 +fa +52 +7f +12 +84 +d2 +7e +61 +80 +fa +43 +0f +84 +42 +01 +00 +00 +e9 +0b +f6 +ff +ff +80 +fa +53 +0f +8e +50 +01 +00 +00 +80 +fa +54 +0f +8e +9a +01 +00 +00 +80 +fa +55 +0f +8e +f0 +f5 +ff +ff +e9 +ed +01 +00 +00 +80 +fa +73 +7f +17 +80 +fa +63 +0f +84 +0f +01 +00 +00 +80 +fa +72 +0f +8e +d4 +f5 +ff +ff +e9 +1d +01 +00 +00 +80 +fa +74 +0f +8e +67 +01 +00 +00 +80 +fa +76 +0f +84 +bf +01 +00 +00 +e9 +b8 +f5 +ff +ff +c7 +07 +8d +e1 +00 +00 +e9 +b6 +75 +00 +00 +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +9f +f5 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +8e +f5 +ff +ff +41 +8a +11 +80 +fa +57 +7f +24 +80 +fa +44 +7f +0f +84 +d2 +7e +39 +80 +fa +43 +0f +8e +71 +f5 +ff +ff +eb +5c +80 +fa +51 +74 +73 +80 +fa +56 +0f +8e +61 +f5 +ff +ff +eb +30 +80 +fa +70 +7f +0a +80 +fa +64 +74 +42 +e9 +50 +f5 +ff +ff +80 +fa +71 +7e +54 +80 +fa +77 +74 +17 +e9 +41 +f5 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +cf +00 +00 +e9 +09 +a8 +00 +00 +41 +80 +39 +00 +0f +8f +25 +f5 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +cf +10 +00 +e9 +ed +a7 +00 +00 +41 +80 +39 +00 +0f +8f +09 +f5 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +cf +20 +00 +e9 +bb +a5 +00 +00 +41 +80 +39 +00 +0f +8f +ed +f4 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +c3 +a5 +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +cf +40 +00 +e9 +d6 +a5 +00 +00 +41 +80 +39 +00 +0f +8f +c4 +f4 +ff +ff +c7 +07 +8d +e6 +00 +00 +c7 +47 +04 +06 +40 +00 +00 +e9 +8c +a7 +00 +00 +41 +8a +11 +80 +fa +57 +7f +21 +80 +fa +43 +7f +05 +80 +fa +42 +eb +1f +80 +fa +44 +0f +8e +97 +01 +00 +00 +80 +fa +56 +0f +8e +91 +f4 +ff +ff +e9 +a5 +01 +00 +00 +80 +fa +63 +7f +0e +80 +fa +62 +0f +84 +5f +01 +00 +00 +e9 +79 +f4 +ff +ff +80 +fa +64 +0f +8e +6d +01 +00 +00 +80 +fa +77 +0f +84 +80 +01 +00 +00 +e9 +62 +f4 +ff +ff +41 +8a +11 +80 +fa +33 +7f +26 +80 +fa +2f +7f +0a +84 +d2 +0f +8f +4a +f4 +ff +ff +eb +38 +80 +fa +30 +0f +8e +d1 +00 +00 +00 +80 +fa +32 +0f +8e +36 +f4 +ff +ff +e9 +f9 +00 +00 +00 +80 +fa +4f +7f +0e +80 +fa +4e +0f +8e +23 +f4 +ff +ff +e9 +bd +00 +00 +00 +80 +fa +6f +0f +84 +b4 +00 +00 +00 +e9 +10 +f4 +ff +ff +c7 +07 +41 +f6 +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +d8 +a6 +00 +00 +41 +8a +11 +80 +fa +4c +7f +10 +80 +fa +44 +74 +25 +80 +fa +4b +0f +8e +eb +f3 +ff +ff +eb +33 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +db +f3 +ff +ff +eb +0a +80 +fa +6c +74 +1e +e9 +cf +f3 +ff +ff +41 +80 +39 +00 +0f +8f +c2 +f3 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +08 +0f +00 +eb +39 +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +a5 +f3 +ff +ff +41 +8a +11 +80 +fa +47 +74 +09 +80 +fa +67 +0f +85 +94 +f3 +ff +ff +41 +80 +39 +00 +0f +8f +87 +f3 +ff +ff +c7 +07 +79 +d4 +00 +00 +c7 +47 +04 +01 +01 +0f +07 +c7 +47 +08 +08 +00 +80 +00 +e9 +4f +a6 +00 +00 +41 +8a +11 +80 +fa +33 +74 +2e +e9 +64 +f3 +ff +ff +41 +80 +39 +00 +0f +8f +57 +f3 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +22 +a5 +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +ce +00 +00 +e9 +12 +a6 +00 +00 +41 +80 +39 +00 +0f +8f +2e +f3 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +cc +00 +00 +e9 +f6 +a5 +00 +00 +41 +80 +39 +00 +0f +8f +12 +f3 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +6c +00 +00 +e9 +da +a5 +00 +00 +41 +80 +39 +00 +0f +8f +f6 +f2 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +6d +20 +00 +e9 +a8 +a3 +00 +00 +41 +80 +39 +00 +0f +8f +da +f2 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +6d +10 +00 +e9 +a2 +a5 +00 +00 +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +ba +f2 +ff +ff +41 +80 +39 +00 +0f +8f +ad +f2 +ff +ff +c7 +07 +4d +ea +00 +00 +c7 +47 +04 +13 +00 +00 +00 +e9 +75 +a5 +00 +00 +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +8d +f2 +ff +ff +41 +80 +39 +00 +0f +8f +80 +f2 +ff +ff +c7 +07 +4d +e7 +00 +00 +c7 +47 +04 +04 +07 +00 +00 +e9 +48 +a5 +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +60 +f2 +ff +ff +41 +80 +39 +00 +0f +8f +53 +f2 +ff +ff +c7 +07 +4d +07 +01 +00 +e9 +87 +2c +00 +00 +41 +8a +11 +80 +fa +56 +7f +3c +80 +fa +4d +7f +17 +80 +fa +42 +0f +8e +35 +f2 +ff +ff +80 +fa +43 +0f +8e +96 +1e +00 +00 +80 +fa +44 +eb +3a +80 +fa +4e +0f +8e +e2 +1e +00 +00 +80 +fa +54 +0f +8e +15 +f2 +ff +ff +80 +fa +55 +0f +8e +5c +1e +00 +00 +e9 +e5 +1e +00 +00 +80 +fa +6d +7f +20 +80 +fa +62 +0f +8e +f9 +f1 +ff +ff +80 +fa +63 +0f +8e +5a +1e +00 +00 +80 +fa +64 +0f +8e +91 +1e +00 +00 +e9 +e2 +f1 +ff +ff +80 +fa +74 +7f +0e +80 +fa +6e +0f +8e +98 +1e +00 +00 +e9 +cf +f1 +ff +ff +80 +fa +75 +0f +8e +16 +1e +00 +00 +80 +fa +76 +0f +8e +9b +1e +00 +00 +e9 +b8 +f1 +ff +ff +41 +8a +11 +80 +fa +49 +0f +84 +9c +1d +00 +00 +80 +fa +69 +0f +84 +93 +1d +00 +00 +e9 +9e +f1 +ff +ff +41 +8a +11 +80 +fa +58 +0f +84 +33 +1d +00 +00 +80 +fa +78 +0f +84 +2a +1d +00 +00 +e9 +84 +f1 +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +32 +83 +f8 +41 +0f +87 +72 +f1 +ff +ff +ff +24 +85 +25 +1e +01 +00 +41 +8a +11 +80 +fa +4d +7f +0e +80 +fa +32 +0f +84 +82 +16 +00 +00 +e9 +55 +f1 +ff +ff +80 +fa +4e +0f +8e +5a +16 +00 +00 +80 +fa +6e +0f +84 +51 +16 +00 +00 +e9 +3e +f1 +ff +ff +41 +8a +11 +80 +fa +56 +7f +46 +80 +fa +49 +7f +17 +80 +fa +41 +0f +84 +86 +0f +00 +00 +80 +fa +48 +0f +8e +1f +f1 +ff +ff +e9 +09 +10 +00 +00 +80 +fa +4f +7f +0e +80 +fa +4e +0f +8e +0c +f1 +ff +ff +e9 +10 +10 +00 +00 +80 +fa +54 +0f +8e +fe +f0 +ff +ff +80 +fa +55 +0f +8e +ca +0f +00 +00 +e9 +13 +10 +00 +00 +80 +fa +6e +7f +21 +80 +fa +61 +7f +0e +80 +fa +60 +0f +8e +dd +f0 +ff +ff +e9 +36 +0f +00 +00 +80 +fa +69 +0f +84 +be +0f +00 +00 +e9 +ca +f0 +ff +ff +80 +fa +74 +7f +0e +80 +fa +6f +0f +8e +c5 +0f +00 +00 +e9 +b7 +f0 +ff +ff +80 +fa +75 +0f +8e +83 +0f +00 +00 +80 +fa +76 +0f +8e +c8 +0f +00 +00 +e9 +a0 +f0 +ff +ff +41 +8a +11 +80 +fa +52 +7f +17 +80 +fa +50 +0f +84 +fa +0c +00 +00 +80 +fa +51 +0f +8e +86 +f0 +ff +ff +e9 +46 +0d +00 +00 +80 +fa +70 +7f +0e +80 +fa +6f +0f +8e +73 +f0 +ff +ff +e9 +d9 +0c +00 +00 +80 +fa +72 +0f +84 +2a +0d +00 +00 +e9 +60 +f0 +ff +ff +41 +8a +11 +80 +fa +45 +0f +84 +37 +0b +00 +00 +80 +fa +65 +0f +84 +2e +0b +00 +00 +e9 +46 +f0 +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +36 +0f +87 +34 +f0 +ff +ff +ff +24 +85 +2d +1f +01 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +4e +74 +7d +80 +fa +52 +0f +8e +17 +f0 +ff +ff +eb +58 +80 +fa +6e +7f +0b +80 +fa +6d +0f +8e +07 +f0 +ff +ff +eb +62 +80 +fa +73 +74 +43 +e9 +fb +ef +ff +ff +41 +8a +11 +80 +fa +4f +74 +09 +80 +fa +6f +0f +85 +ea +ef +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +d9 +ef +ff +ff +41 +80 +39 +00 +0f +8f +cc +ef +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +ef +00 +00 +e9 +9f +2e +00 +00 +41 +8a +11 +80 +fa +48 +0f +84 +db +02 +00 +00 +80 +fa +68 +0f +84 +d2 +02 +00 +00 +e9 +a3 +ef +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +92 +ef +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +81 +ef +ff +ff +41 +8a +11 +80 +fa +4b +74 +09 +80 +fa +6b +0f +85 +70 +ef +ff +ff +41 +8a +11 +80 +fa +4c +7f +13 +80 +fa +48 +74 +28 +80 +fa +4b +0f +8e +5a +ef +ff +ff +e9 +89 +00 +00 +00 +80 +fa +68 +7f +0b +80 +fa +67 +0f +8e +47 +ef +ff +ff +eb +0a +80 +fa +6c +74 +74 +e9 +3b +ef +ff +ff +41 +8a +11 +80 +fa +57 +7f +2a +80 +fa +44 +7f +0e +80 +fa +42 +0f +84 +7f +01 +00 +00 +80 +fa +43 +eb +28 +80 +fa +51 +0f +84 +9d +01 +00 +00 +80 +fa +56 +0f +8e +0e +ef +ff +ff +e9 +a1 +01 +00 +00 +80 +fa +64 +7f +17 +80 +fa +62 +0f +84 +55 +01 +00 +00 +80 +fa +63 +0f +8e +f2 +ee +ff +ff +e9 +61 +01 +00 +00 +80 +fa +71 +7f +0e +80 +fa +70 +0f +8e +df +ee +ff +ff +e9 +60 +01 +00 +00 +80 +fa +77 +0f +84 +69 +01 +00 +00 +e9 +cc +ee +ff +ff +41 +8a +11 +80 +fa +57 +7f +1f +80 +fa +44 +7f +0a +80 +fa +42 +74 +44 +80 +fa +43 +eb +1d +80 +fa +51 +74 +66 +80 +fa +56 +0f +8e +a7 +ee +ff +ff +eb +6d +80 +fa +64 +7f +10 +80 +fa +62 +74 +25 +80 +fa +63 +0f +8e +92 +ee +ff +ff +eb +34 +80 +fa +71 +7f +0b +80 +fa +70 +0f +8e +82 +ee +ff +ff +eb +36 +80 +fa +77 +74 +43 +e9 +76 +ee +ff +ff +41 +8a +11 +80 +fa +57 +0f +84 +a8 +00 +00 +00 +80 +fa +77 +0f +84 +9f +00 +00 +00 +e9 +5c +ee +ff +ff +41 +8a +11 +80 +fa +51 +74 +76 +80 +fa +71 +74 +71 +e9 +4a +ee +ff +ff +41 +8a +11 +80 +fa +44 +74 +37 +80 +fa +64 +74 +32 +e9 +38 +ee +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +27 +ee +ff +ff +41 +80 +39 +00 +0f +8f +1a +ee +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +61 +00 +00 +e9 +ed +2c +00 +00 +41 +8a +11 +80 +fa +51 +74 +09 +80 +fa +71 +0f +85 +fa +ed +ff +ff +41 +80 +39 +00 +0f +8f +ed +ed +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +6c +66 +00 +e9 +49 +99 +00 +00 +41 +80 +39 +00 +0f +8f +d1 +ed +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +62 +00 +00 +e9 +a4 +2c +00 +00 +41 +80 +39 +00 +0f +8f +b5 +ed +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +60 +00 +00 +e9 +88 +2c +00 +00 +41 +8a +11 +80 +fa +57 +0f +84 +a8 +00 +00 +00 +80 +fa +77 +0f +84 +9f +00 +00 +00 +e9 +8c +ed +ff +ff +41 +8a +11 +80 +fa +51 +74 +76 +80 +fa +71 +74 +71 +e9 +7a +ed +ff +ff +41 +8a +11 +80 +fa +44 +74 +37 +80 +fa +64 +74 +32 +e9 +68 +ed +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +57 +ed +ff +ff +41 +80 +39 +00 +0f +8f +4a +ed +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +69 +00 +00 +e9 +1d +2c +00 +00 +41 +8a +11 +80 +fa +51 +74 +09 +80 +fa +71 +0f +85 +2a +ed +ff +ff +41 +80 +39 +00 +0f +8f +1d +ed +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +6d +66 +00 +e9 +79 +98 +00 +00 +41 +80 +39 +00 +0f +8f +01 +ed +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +6a +00 +00 +e9 +d4 +2b +00 +00 +41 +80 +39 +00 +0f +8f +e5 +ec +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +68 +00 +00 +e9 +b8 +2b +00 +00 +41 +8a +11 +80 +fa +46 +7f +22 +80 +fa +40 +7f +0a +84 +d2 +0f +8f +be +ec +ff +ff +eb +31 +80 +fa +41 +7e +3e +80 +fa +45 +0f +8e +ae +ec +ff +ff +e9 +9e +00 +00 +00 +80 +fa +61 +7f +0b +80 +fa +60 +0f +8e +9b +ec +ff +ff +eb +20 +80 +fa +66 +0f +84 +85 +00 +00 +00 +e9 +8b +ec +ff +ff +c7 +07 +6d +da +00 +00 +c7 +47 +04 +1c +00 +00 +00 +e9 +53 +9f +00 +00 +41 +8a +11 +80 +fa +57 +7f +26 +80 +fa +43 +7f +0a +84 +d2 +0f +8f +64 +ec +ff +ff +eb +38 +80 +fa +44 +0f +8e +0b +01 +00 +00 +80 +fa +56 +0f +8e +50 +ec +ff +ff +e9 +26 +01 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +3d +ec +ff +ff +e9 +ea +00 +00 +00 +80 +fa +77 +0f +84 +0a +01 +00 +00 +e9 +2a +ec +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +f5 +9d +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +60 +00 +00 +e9 +72 +65 +00 +00 +41 +8a +11 +80 +fa +57 +7f +24 +80 +fa +44 +7f +0f +84 +d2 +7e +39 +80 +fa +43 +0f +8e +f1 +eb +ff +ff +eb +40 +80 +fa +51 +74 +57 +80 +fa +56 +0f +8e +e1 +eb +ff +ff +eb +75 +80 +fa +70 +7f +0a +80 +fa +64 +74 +26 +e9 +d0 +eb +ff +ff +80 +fa +71 +7e +38 +80 +fa +77 +74 +5c +e9 +c1 +eb +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +9c +00 +00 +e9 +89 +9e +00 +00 +41 +80 +39 +00 +0f +8f +a5 +eb +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +9c +20 +00 +e9 +57 +9c +00 +00 +41 +80 +39 +00 +0f +8f +89 +eb +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +5f +9c +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +9c +40 +00 +e9 +72 +9c +00 +00 +41 +80 +39 +00 +0f +8f +60 +eb +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +9c +10 +00 +e9 +28 +9e +00 +00 +41 +80 +39 +00 +0f +8f +44 +eb +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +0f +9d +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +60 +20 +00 +e9 +e9 +9b +00 +00 +41 +80 +39 +00 +0f +8f +1b +eb +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +e6 +9c +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +60 +10 +00 +e9 +63 +64 +00 +00 +41 +8a +11 +80 +fa +4c +0f +84 +10 +05 +00 +00 +80 +fa +6c +0f +84 +07 +05 +00 +00 +e9 +e5 +ea +ff +ff +41 +8a +11 +80 +fa +4c +7f +17 +80 +fa +41 +0f +84 +b3 +03 +00 +00 +80 +fa +4b +0f +8e +cb +ea +ff +ff +e9 +e5 +03 +00 +00 +80 +fa +61 +7f +0e +80 +fa +60 +0f +8e +b8 +ea +ff +ff +e9 +92 +03 +00 +00 +80 +fa +6c +0f +84 +c9 +03 +00 +00 +e9 +a5 +ea +ff +ff +41 +8a +11 +80 +fa +42 +0f +84 +bb +01 +00 +00 +80 +fa +62 +0f +84 +b2 +01 +00 +00 +e9 +8b +ea +ff +ff +41 +8a +11 +80 +fa +44 +0f +84 +63 +01 +00 +00 +80 +fa +64 +0f +84 +5a +01 +00 +00 +e9 +71 +ea +ff +ff +41 +8a +11 +80 +fa +55 +74 +59 +80 +fa +75 +74 +54 +e9 +5f +ea +ff +ff +41 +8a +11 +80 +fa +41 +74 +09 +80 +fa +61 +0f +85 +4e +ea +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +3d +ea +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +2c +ea +ff +ff +41 +80 +39 +00 +0f +8f +1f +ea +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +bb +00 +00 +e9 +a5 +15 +00 +00 +41 +8a +11 +80 +fa +46 +74 +09 +80 +fa +66 +0f +85 +ff +e9 +ff +ff +41 +8a +11 +80 +fa +57 +7f +1f +80 +fa +48 +7f +0a +80 +fa +44 +74 +44 +80 +fa +47 +eb +1d +80 +fa +4c +74 +68 +80 +fa +56 +0f +8e +da +e9 +ff +ff +eb +6f +80 +fa +68 +7f +10 +80 +fa +64 +74 +25 +80 +fa +67 +0f +8e +c5 +e9 +ff +ff +eb +36 +80 +fa +6c +7f +0b +80 +fa +6b +0f +8e +b5 +e9 +ff +ff +eb +38 +80 +fa +77 +74 +45 +e9 +a9 +e9 +ff +ff +41 +80 +39 +00 +0f +8f +9c +e9 +ff +ff +c7 +07 +89 +01 +01 +00 +c7 +47 +04 +01 +70 +66 +00 +e9 +f8 +94 +00 +00 +41 +8a +11 +80 +fa +57 +74 +4d +80 +fa +77 +74 +48 +e9 +7b +e9 +ff +ff +41 +8a +11 +80 +fa +57 +74 +1f +80 +fa +77 +74 +1a +e9 +69 +e9 +ff +ff +41 +80 +39 +00 +0f +8f +5c +e9 +ff +ff +c7 +07 +45 +04 +01 +00 +e9 +66 +31 +00 +00 +41 +80 +39 +00 +0f +8f +47 +e9 +ff +ff +c7 +07 +89 +01 +01 +00 +c7 +47 +04 +01 +70 +f2 +00 +e9 +a3 +94 +00 +00 +41 +80 +39 +00 +0f +8f +2b +e9 +ff +ff +c7 +07 +89 +01 +01 +00 +c7 +47 +04 +01 +70 +f3 +00 +e9 +87 +94 +00 +00 +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +0b +e9 +ff +ff +41 +8a +11 +80 +fa +57 +74 +09 +80 +fa +77 +0f +85 +fa +e8 +ff +ff +41 +80 +39 +00 +0f +8f +ed +e8 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +f6 +00 +00 +e9 +f7 +30 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +42 +83 +f8 +35 +0f +87 +cc +e8 +ff +ff +ff +24 +85 +09 +20 +01 +00 +41 +80 +39 +00 +0f +8f +b8 +e8 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +f8 +00 +00 +e9 +8b +27 +00 +00 +41 +80 +39 +00 +0f +8f +9c +e8 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +f9 +00 +00 +e9 +6f +27 +00 +00 +41 +80 +39 +00 +0f +8f +80 +e8 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +fa +00 +00 +e9 +53 +27 +00 +00 +41 +80 +39 +00 +0f +8f +64 +e8 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +fb +00 +00 +e9 +37 +27 +00 +00 +41 +8a +11 +80 +fa +57 +7f +21 +80 +fa +48 +7f +05 +80 +fa +42 +eb +1f +80 +fa +49 +0f +8e +cf +00 +00 +00 +80 +fa +56 +0f +8e +31 +e8 +ff +ff +e9 +d3 +00 +00 +00 +80 +fa +68 +7f +0e +80 +fa +62 +0f +84 +97 +00 +00 +00 +e9 +19 +e8 +ff +ff +80 +fa +69 +0f +8e +a5 +00 +00 +00 +80 +fa +77 +0f +84 +ae +00 +00 +00 +e9 +02 +e8 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +f1 +e7 +ff +ff +41 +8a +11 +80 +fa +57 +7f +10 +80 +fa +42 +74 +25 +80 +fa +56 +0f +8e +db +e7 +ff +ff +eb +36 +80 +fa +62 +7f +0b +80 +fa +61 +0f +8e +cb +e7 +ff +ff +eb +0a +80 +fa +77 +74 +21 +e9 +bf +e7 +ff +ff +41 +80 +39 +00 +0f +8f +b2 +e7 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +d8 +00 +00 +e9 +85 +26 +00 +00 +41 +80 +39 +00 +0f +8f +96 +e7 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +d9 +00 +00 +e9 +69 +26 +00 +00 +41 +80 +39 +00 +0f +8f +7a +e7 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +e8 +00 +00 +e9 +4d +26 +00 +00 +41 +8a +11 +80 +fa +57 +74 +26 +80 +fa +77 +74 +21 +e9 +59 +e7 +ff +ff +41 +80 +39 +00 +0f +8f +4c +e7 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +e9 +00 +00 +e9 +1f +26 +00 +00 +41 +80 +39 +00 +0f +8f +30 +e7 +ff +ff +c7 +07 +b5 +06 +01 +00 +c7 +47 +04 +01 +55 +00 +00 +e9 +25 +17 +00 +00 +41 +8a +11 +80 +fa +57 +7f +17 +80 +fa +44 +0f +84 +11 +01 +00 +00 +80 +fa +56 +0f +8e +07 +e7 +ff +ff +e9 +e7 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +f4 +e6 +ff +ff +e9 +f0 +00 +00 +00 +80 +fa +77 +0f +84 +cb +00 +00 +00 +e9 +e1 +e6 +ff +ff +41 +8a +11 +80 +fa +57 +7f +1a +80 +fa +50 +7f +05 +80 +fa +44 +eb +18 +80 +fa +51 +7e +77 +80 +fa +56 +0f +8e +c1 +e6 +ff +ff +eb +1d +80 +fa +70 +7f +0a +80 +fa +64 +74 +2f +e9 +b0 +e6 +ff +ff +80 +fa +71 +7e +58 +80 +fa +77 +0f +85 +a2 +e6 +ff +ff +41 +80 +39 +00 +0f +8f +95 +e6 +ff +ff +c7 +07 +8d +00 +01 +00 +c7 +47 +04 +04 +d1 +71 +02 +e9 +68 +25 +00 +00 +41 +8a +11 +80 +fa +51 +7f +0f +84 +d2 +7e +15 +80 +fa +50 +0f +8e +6e +e6 +ff +ff +eb +38 +80 +fa +71 +74 +33 +e9 +62 +e6 +ff +ff +c7 +07 +8d +00 +01 +00 +c7 +47 +04 +04 +d2 +72 +02 +e9 +35 +25 +00 +00 +41 +80 +39 +00 +0f +8f +46 +e6 +ff +ff +c7 +07 +8d +00 +01 +00 +c7 +47 +04 +04 +d3 +73 +02 +e9 +19 +25 +00 +00 +41 +80 +39 +00 +0f +8f +2a +e6 +ff +ff +c7 +07 +7d +06 +01 +00 +c7 +47 +04 +01 +03 +00 +00 +e9 +86 +91 +00 +00 +41 +80 +39 +00 +0f +8f +0e +e6 +ff +ff +c7 +07 +8d +00 +01 +00 +c7 +47 +04 +04 +e1 +71 +04 +e9 +e1 +24 +00 +00 +41 +80 +39 +00 +0f +8f +f2 +e5 +ff +ff +c7 +07 +8d +00 +01 +00 +c7 +47 +04 +04 +e2 +72 +04 +e9 +c5 +24 +00 +00 +41 +8a +11 +80 +fa +57 +7f +1a +80 +fa +50 +7f +05 +80 +fa +44 +eb +18 +80 +fa +51 +7e +77 +80 +fa +56 +0f +8e +c3 +e5 +ff +ff +eb +1d +80 +fa +70 +7f +0a +80 +fa +64 +74 +2f +e9 +b2 +e5 +ff +ff +80 +fa +71 +7e +58 +80 +fa +77 +0f +85 +a4 +e5 +ff +ff +41 +80 +39 +00 +0f +8f +97 +e5 +ff +ff +c7 +07 +8d +00 +01 +00 +c7 +47 +04 +04 +f1 +71 +06 +e9 +6a +24 +00 +00 +41 +8a +11 +80 +fa +51 +7f +0f +84 +d2 +7e +15 +80 +fa +50 +0f +8e +70 +e5 +ff +ff +eb +38 +80 +fa +71 +74 +33 +e9 +64 +e5 +ff +ff +c7 +07 +8d +00 +01 +00 +c7 +47 +04 +04 +f2 +72 +06 +e9 +37 +24 +00 +00 +41 +80 +39 +00 +0f +8f +48 +e5 +ff +ff +c7 +07 +8d +00 +01 +00 +c7 +47 +04 +04 +f3 +73 +06 +e9 +1b +24 +00 +00 +41 +80 +39 +00 +0f +8f +2c +e5 +ff +ff +c7 +07 +7d +06 +01 +00 +c7 +47 +04 +01 +07 +00 +00 +e9 +88 +90 +00 +00 +41 +8a +11 +80 +fa +46 +74 +09 +80 +fa +66 +0f +85 +0c +e5 +ff +ff +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +fb +e4 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +ea +e4 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +d9 +e4 +ff +ff +41 +8a +11 +80 +fa +48 +74 +09 +80 +fa +68 +0f +85 +c8 +e4 +ff +ff +41 +8a +11 +80 +fa +57 +7f +24 +80 +fa +4e +7f +0f +84 +d2 +7e +39 +80 +fa +4d +0f +8e +ab +e4 +ff +ff +eb +40 +80 +fa +54 +74 +55 +80 +fa +56 +0f +8e +9b +e4 +ff +ff +eb +6a +80 +fa +73 +7f +0a +80 +fa +6e +74 +26 +e9 +8a +e4 +ff +ff +80 +fa +74 +7e +36 +80 +fa +77 +74 +51 +e9 +7b +e4 +ff +ff +c7 +07 +79 +d4 +00 +00 +c7 +47 +04 +01 +0d +0f +00 +e9 +68 +7d +00 +00 +41 +8a +11 +80 +fa +54 +0f +84 +9e +00 +00 +00 +80 +fa +74 +0f +84 +95 +00 +00 +00 +e9 +52 +e4 +ff +ff +41 +8a +11 +80 +fa +2f +0f +8e +46 +e4 +ff +ff +80 +fa +30 +7e +2b +80 +fa +31 +7e +42 +80 +fa +32 +7e +59 +e9 +32 +e4 +ff +ff +41 +80 +39 +00 +0f +8f +25 +e4 +ff +ff +c7 +07 +79 +d4 +00 +00 +c7 +47 +04 +01 +0d +0f +01 +e9 +12 +7d +00 +00 +41 +80 +39 +00 +0f +8f +09 +e4 +ff +ff +c7 +07 +79 +d4 +00 +00 +c7 +47 +04 +01 +18 +0f +01 +e9 +70 +90 +00 +00 +41 +80 +39 +00 +0f +8f +ed +e3 +ff +ff +c7 +07 +79 +d4 +00 +00 +c7 +47 +04 +01 +18 +0f +02 +e9 +54 +90 +00 +00 +41 +80 +39 +00 +0f +8f +d1 +e3 +ff +ff +c7 +07 +79 +d4 +00 +00 +c7 +47 +04 +01 +18 +0f +03 +e9 +38 +90 +00 +00 +41 +8a +11 +80 +fa +41 +74 +09 +80 +fa +61 +0f +85 +b1 +e3 +ff +ff +41 +80 +39 +00 +0f +8f +a4 +e3 +ff +ff +c7 +07 +79 +d4 +00 +00 +c7 +47 +04 +01 +18 +0f +00 +e9 +0b +90 +00 +00 +41 +8a +11 +80 +fa +46 +7f +22 +80 +fa +40 +7f +0a +84 +d2 +0f +8f +7d +e3 +ff +ff +eb +31 +80 +fa +41 +7e +5a +80 +fa +45 +0f +8e +6d +e3 +ff +ff +e9 +ba +00 +00 +00 +80 +fa +61 +7f +0b +80 +fa +60 +0f +8e +5a +e3 +ff +ff +eb +3c +80 +fa +66 +0f +84 +a1 +00 +00 +00 +e9 +4a +e3 +ff +ff +c7 +07 +8d +dd +00 +00 +c7 +47 +04 +15 +00 +00 +00 +e9 +12 +96 +00 +00 +41 +80 +39 +00 +0f +8f +2e +e3 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +eb +00 +00 +e9 +01 +22 +00 +00 +41 +8a +11 +80 +fa +57 +7f +26 +80 +fa +43 +7f +0a +84 +d2 +0f +8f +07 +e3 +ff +ff +eb +38 +80 +fa +44 +0f +8e +0b +01 +00 +00 +80 +fa +56 +0f +8e +f3 +e2 +ff +ff +e9 +26 +01 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +e0 +e2 +ff +ff +e9 +ea +00 +00 +00 +80 +fa +77 +0f +84 +0a +01 +00 +00 +e9 +cd +e2 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +98 +94 +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +61 +00 +00 +e9 +15 +5c +00 +00 +41 +8a +11 +80 +fa +57 +7f +24 +80 +fa +44 +7f +0f +84 +d2 +7e +39 +80 +fa +43 +0f +8e +94 +e2 +ff +ff +eb +40 +80 +fa +51 +74 +73 +80 +fa +56 +0f +8e +84 +e2 +ff +ff +eb +4c +80 +fa +70 +7f +0a +80 +fa +64 +74 +26 +e9 +73 +e2 +ff +ff +80 +fa +71 +7e +54 +80 +fa +77 +74 +33 +e9 +64 +e2 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +9d +00 +00 +e9 +2c +95 +00 +00 +41 +80 +39 +00 +0f +8f +48 +e2 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +9d +20 +00 +e9 +fa +92 +00 +00 +41 +80 +39 +00 +0f +8f +2c +e2 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +9d +10 +00 +e9 +f4 +94 +00 +00 +41 +80 +39 +00 +0f +8f +10 +e2 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +e6 +92 +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +9d +40 +00 +e9 +f9 +92 +00 +00 +41 +80 +39 +00 +0f +8f +e7 +e1 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +b2 +93 +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +61 +20 +00 +e9 +8c +92 +00 +00 +41 +80 +39 +00 +0f +8f +be +e1 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +89 +93 +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +61 +10 +00 +e9 +06 +5b +00 +00 +41 +8a +11 +80 +fa +58 +7f +33 +80 +fa +44 +7f +17 +80 +fa +42 +0f +8e +8c +e1 +ff +ff +80 +fa +43 +0f +8e +0d +05 +00 +00 +e9 +22 +05 +00 +00 +80 +fa +47 +0f +84 +33 +05 +00 +00 +80 +fa +57 +0f +8e +6c +e1 +ff +ff +e9 +3f +05 +00 +00 +80 +fa +66 +7f +20 +80 +fa +62 +0f +8e +59 +e1 +ff +ff +80 +fa +63 +0f +8e +da +04 +00 +00 +80 +fa +64 +0f +8e +eb +04 +00 +00 +e9 +42 +e1 +ff +ff +80 +fa +67 +0f +8e +f7 +04 +00 +00 +80 +fa +78 +0f +84 +08 +05 +00 +00 +e9 +2b +e1 +ff +ff +41 +8a +11 +80 +fa +4c +0f +84 +88 +02 +00 +00 +80 +fa +6c +0f +84 +7f +02 +00 +00 +e9 +11 +e1 +ff +ff +41 +8a +11 +80 +fa +4e +0f +84 +e1 +01 +00 +00 +80 +fa +6e +0f +84 +d8 +01 +00 +00 +e9 +f7 +e0 +ff +ff +41 +8a +11 +80 +fa +56 +0f +84 +67 +01 +00 +00 +80 +fa +76 +0f +84 +5e +01 +00 +00 +e9 +dd +e0 +ff +ff +41 +8a +11 +80 +fa +5a +7f +1f +80 +fa +4c +7f +0a +80 +fa +47 +74 +44 +80 +fa +4b +eb +1d +80 +fa +4e +74 +66 +80 +fa +59 +0f +8e +b8 +e0 +ff +ff +eb +6d +80 +fa +6c +7f +10 +80 +fa +67 +74 +25 +80 +fa +6b +0f +8e +a3 +e0 +ff +ff +eb +34 +80 +fa +6e +7f +0b +80 +fa +6d +0f +8e +93 +e0 +ff +ff +eb +36 +80 +fa +7a +74 +43 +e9 +87 +e0 +ff +ff +41 +8a +11 +80 +fa +45 +0f +84 +b9 +00 +00 +00 +80 +fa +65 +0f +84 +b0 +00 +00 +00 +e9 +6d +e0 +ff +ff +41 +8a +11 +80 +fa +5a +74 +76 +80 +fa +7a +74 +71 +e9 +5b +e0 +ff +ff +41 +8a +11 +80 +fa +5a +74 +37 +80 +fa +7a +74 +32 +e9 +49 +e0 +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +38 +e0 +ff +ff +41 +80 +39 +00 +0f +8f +2b +e0 +ff +ff +c7 +07 +b5 +06 +01 +00 +c7 +47 +04 +01 +58 +00 +00 +e9 +20 +10 +00 +00 +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +0b +e0 +ff +ff +41 +80 +39 +00 +0f +8f +fe +df +ff +ff +c7 +07 +b5 +06 +01 +00 +c7 +47 +04 +01 +5a +00 +00 +e9 +f3 +0f +00 +00 +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +de +df +ff +ff +41 +80 +39 +00 +0f +8f +d1 +df +ff +ff +c7 +07 +b5 +06 +01 +00 +c7 +47 +04 +01 +5b +00 +00 +e9 +c6 +0f +00 +00 +41 +8a +11 +80 +fa +5a +74 +09 +80 +fa +7a +0f +85 +b1 +df +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +a0 +df +ff +ff +41 +80 +39 +00 +0f +8f +93 +df +ff +ff +c7 +07 +b5 +06 +01 +00 +c7 +47 +04 +01 +5c +00 +00 +e9 +88 +0f +00 +00 +41 +8a +11 +80 +fa +4d +74 +09 +80 +fa +6d +0f +85 +73 +df +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +62 +df +ff +ff +41 +8a +11 +80 +fa +4b +74 +09 +80 +fa +6b +0f +85 +51 +df +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +40 +df +ff +ff +41 +80 +39 +00 +0f +8f +33 +df +ff +ff +c7 +07 +0d +04 +01 +00 +c7 +47 +04 +02 +00 +00 +00 +e9 +b2 +8a +00 +00 +41 +8a +11 +80 +fa +55 +7f +10 +80 +fa +53 +74 +25 +80 +fa +54 +0f +8e +0e +df +ff +ff +eb +2c +80 +fa +73 +7f +0b +80 +fa +72 +0f +8e +fe +de +ff +ff +eb +0a +80 +fa +75 +74 +17 +e9 +f2 +de +ff +ff +41 +8a +11 +80 +fa +57 +74 +37 +80 +fa +77 +74 +32 +e9 +e0 +de +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +cf +de +ff +ff +41 +80 +39 +00 +0f +8f +c2 +de +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +da +00 +00 +e9 +cc +26 +00 +00 +41 +80 +39 +00 +0f +8f +a6 +de +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +ea +00 +00 +e9 +b0 +26 +00 +00 +41 +8a +11 +80 +fa +55 +7f +21 +80 +fa +4b +7f +05 +80 +fa +48 +eb +1f +80 +fa +4c +0f +8e +80 +00 +00 +00 +80 +fa +54 +0f +8e +73 +de +ff +ff +e9 +84 +00 +00 +00 +80 +fa +6b +7f +0b +80 +fa +68 +0f +85 +60 +de +ff +ff +eb +0f +80 +fa +6c +7e +5d +80 +fa +75 +74 +6a +e9 +4f +de +ff +ff +41 +8a +11 +80 +fa +57 +7f +21 +80 +fa +54 +7f +05 +80 +fa +52 +eb +1f +80 +fa +55 +0f +8e +dd +00 +00 +00 +80 +fa +56 +0f +8e +2b +de +ff +ff +e9 +e1 +00 +00 +00 +80 +fa +74 +7f +0e +80 +fa +72 +0f +84 +88 +00 +00 +00 +e9 +13 +de +ff +ff +80 +fa +75 +0f +8e +b3 +00 +00 +00 +80 +fa +77 +0f +84 +bc +00 +00 +00 +e9 +fc +dd +ff +ff +41 +8a +11 +80 +fa +57 +74 +48 +80 +fa +77 +74 +43 +e9 +ea +dd +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +d9 +dd +ff +ff +41 +8a +11 +80 +fa +51 +74 +09 +80 +fa +71 +0f +85 +c8 +dd +ff +ff +41 +80 +39 +00 +0f +8f +bb +dd +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +f4 +00 +00 +e9 +17 +89 +00 +00 +41 +80 +39 +00 +0f +8f +9f +dd +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +d5 +00 +00 +e9 +72 +1c +00 +00 +41 +8a +11 +80 +fa +57 +7f +14 +80 +fa +49 +0f +84 +a4 +00 +00 +00 +80 +fa +56 +0f +8e +76 +dd +ff +ff +eb +67 +80 +fa +69 +7f +0e +80 +fa +68 +0f +8e +66 +dd +ff +ff +e9 +86 +00 +00 +00 +80 +fa +77 +74 +4f +e9 +57 +dd +ff +ff +41 +8a +11 +80 +fa +57 +74 +26 +80 +fa +77 +74 +21 +e9 +45 +dd +ff +ff +41 +80 +39 +00 +0f +8f +38 +dd +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +e5 +00 +00 +e9 +0b +1c +00 +00 +41 +80 +39 +00 +0f +8f +1c +dd +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +e4 +00 +00 +e9 +26 +25 +00 +00 +41 +8a +11 +80 +fa +43 +7f +10 +80 +fa +41 +74 +52 +80 +fa +42 +0f +8e +f7 +dc +ff +ff +eb +63 +80 +fa +61 +7f +0b +80 +fa +60 +0f +8e +e7 +dc +ff +ff +eb +37 +80 +fa +63 +74 +4e +e9 +db +dc +ff +ff +41 +8a +11 +80 +fa +57 +74 +09 +80 +fa +77 +0f +85 +ca +dc +ff +ff +41 +80 +39 +00 +0f +8f +bd +dc +ff +ff +c7 +07 +b5 +06 +01 +00 +c7 +47 +04 +01 +5d +00 +00 +e9 +b2 +0c +00 +00 +41 +80 +39 +00 +0f +8f +a1 +dc +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +b7 +00 +00 +e9 +8e +75 +00 +00 +41 +80 +39 +00 +0f +8f +85 +dc +ff +ff +c7 +07 +b5 +06 +01 +00 +c7 +47 +04 +01 +59 +00 +00 +e9 +7a +0c +00 +00 +41 +8a +11 +80 +fa +48 +0f +84 +29 +01 +00 +00 +80 +fa +68 +0f +84 +20 +01 +00 +00 +e9 +5c +dc +ff +ff +41 +8a +11 +80 +fa +44 +0f +84 +d1 +00 +00 +00 +80 +fa +64 +0f +84 +c8 +00 +00 +00 +e9 +42 +dc +ff +ff +41 +8a +11 +80 +fa +57 +0f +84 +9b +00 +00 +00 +80 +fa +77 +0f +84 +92 +00 +00 +00 +e9 +28 +dc +ff +ff +41 +8a +11 +80 +fa +55 +7f +10 +80 +fa +53 +74 +25 +80 +fa +54 +0f +8e +12 +dc +ff +ff +eb +2c +80 +fa +73 +7f +0b +80 +fa +72 +0f +8e +02 +dc +ff +ff +eb +0a +80 +fa +75 +74 +17 +e9 +f6 +db +ff +ff +41 +8a +11 +80 +fa +57 +74 +37 +80 +fa +77 +74 +32 +e9 +e4 +db +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +d3 +db +ff +ff +41 +80 +39 +00 +0f +8f +c6 +db +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +de +00 +00 +e9 +d0 +23 +00 +00 +41 +80 +39 +00 +0f +8f +aa +db +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +ee +00 +00 +e9 +b4 +23 +00 +00 +41 +80 +39 +00 +0f +8f +8e +db +ff +ff +c7 +07 +b5 +06 +01 +00 +c7 +47 +04 +01 +52 +00 +00 +e9 +83 +0b +00 +00 +41 +8a +11 +80 +fa +57 +74 +09 +80 +fa +77 +0f +85 +6e +db +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +5d +db +ff +ff +41 +80 +39 +00 +0f +8f +50 +db +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +f5 +00 +00 +e9 +23 +1a +00 +00 +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +30 +db +ff +ff +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +1f +db +ff +ff +41 +8a +11 +80 +fa +57 +74 +09 +80 +fa +77 +0f +85 +0e +db +ff +ff +41 +80 +39 +00 +0f +8f +01 +db +ff +ff +c7 +07 +d1 +06 +01 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +f6 +0a +00 +00 +41 +8a +11 +80 +fa +53 +0f +84 +89 +00 +00 +00 +80 +fa +73 +0f +84 +80 +00 +00 +00 +e9 +d8 +da +ff +ff +41 +8a +11 +80 +fa +46 +74 +09 +80 +fa +66 +0f +85 +c7 +da +ff +ff +41 +8a +11 +80 +fa +57 +7f +10 +80 +fa +44 +74 +25 +80 +fa +56 +0f +8e +b1 +da +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +a1 +da +ff +ff +eb +0a +80 +fa +77 +74 +21 +e9 +95 +da +ff +ff +41 +80 +39 +00 +0f +8f +88 +da +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +0d +00 +00 +e9 +75 +73 +00 +00 +41 +80 +39 +00 +0f +8f +6c +da +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +0c +00 +00 +e9 +f2 +05 +00 +00 +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +4c +da +ff +ff +41 +8a +11 +80 +fa +57 +74 +09 +80 +fa +77 +0f +85 +3b +da +ff +ff +41 +80 +39 +00 +0f +8f +2e +da +ff +ff +c7 +07 +8d +03 +01 +00 +c7 +47 +04 +04 +00 +00 +00 +e9 +38 +22 +00 +00 +41 +8a +11 +80 +fa +49 +0f +84 +43 +05 +00 +00 +80 +fa +69 +0f +84 +3a +05 +00 +00 +e9 +05 +da +ff +ff +41 +8a +11 +80 +fa +44 +7f +17 +80 +fa +42 +0f +8e +f4 +d9 +ff +ff +80 +fa +43 +0f +8e +c0 +04 +00 +00 +e9 +cd +04 +00 +00 +80 +fa +62 +0f +8e +dd +d9 +ff +ff +80 +fa +63 +0f +8e +a9 +04 +00 +00 +80 +fa +64 +0f +8e +b2 +04 +00 +00 +e9 +c6 +d9 +ff +ff +41 +8a +11 +80 +fa +4d +0f +84 +b4 +03 +00 +00 +80 +fa +6d +0f +84 +ab +03 +00 +00 +e9 +ac +d9 +ff +ff +41 +8a +11 +80 +fa +55 +7f +21 +80 +fa +48 +7f +05 +80 +fa +41 +eb +1f +80 +fa +49 +0f +8e +14 +03 +00 +00 +80 +fa +54 +0f +8e +88 +d9 +ff +ff +e9 +18 +03 +00 +00 +80 +fa +68 +7f +0e +80 +fa +61 +0f +84 +e6 +02 +00 +00 +e9 +70 +d9 +ff +ff +80 +fa +69 +0f +8e +ea +02 +00 +00 +80 +fa +75 +0f +84 +f3 +02 +00 +00 +e9 +59 +d9 +ff +ff +41 +8a +11 +80 +fa +41 +0f +84 +80 +02 +00 +00 +80 +fa +61 +0f +84 +77 +02 +00 +00 +e9 +3f +d9 +ff +ff +41 +8a +11 +80 +fa +4e +0f +84 +17 +02 +00 +00 +80 +fa +6e +0f +84 +0e +02 +00 +00 +e9 +25 +d9 +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +43 +0f +84 +9d +00 +00 +00 +80 +fa +52 +0f +8e +0b +d9 +ff +ff +e9 +a9 +00 +00 +00 +80 +fa +63 +7f +0b +80 +fa +62 +0f +8e +f8 +d8 +ff +ff +eb +7f +80 +fa +73 +0f +84 +90 +00 +00 +00 +e9 +e8 +d8 +ff +ff +41 +8a +11 +80 +fa +55 +74 +09 +80 +fa +75 +0f +85 +d7 +d8 +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +c6 +d8 +ff +ff +41 +8a +11 +80 +fa +52 +7f +0f +84 +d2 +7e +15 +80 +fa +51 +0f +8e +ae +d8 +ff +ff +eb +1c +80 +fa +72 +74 +17 +e9 +a2 +d8 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +9a +00 +00 +e9 +8f +71 +00 +00 +41 +80 +39 +00 +0f +8f +86 +d8 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +aa +00 +00 +e9 +73 +71 +00 +00 +41 +8a +11 +80 +fa +50 +0f +84 +b8 +00 +00 +00 +80 +fa +70 +0f +84 +af +00 +00 +00 +e9 +5d +d8 +ff +ff +41 +8a +11 +80 +fa +51 +74 +09 +80 +fa +71 +0f +85 +4c +d8 +ff +ff +41 +8a +11 +80 +fa +52 +7f +10 +80 +fa +49 +74 +25 +80 +fa +51 +0f +8e +36 +d8 +ff +ff +eb +2c +80 +fa +69 +7f +0b +80 +fa +68 +0f +8e +26 +d8 +ff +ff +eb +0a +80 +fa +72 +74 +17 +e9 +1a +d8 +ff +ff +41 +8a +11 +80 +fa +54 +74 +37 +80 +fa +74 +74 +32 +e9 +08 +d8 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +f7 +d7 +ff +ff +41 +80 +39 +00 +0f +8f +ea +d7 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +97 +00 +00 +e9 +d7 +70 +00 +00 +41 +8a +11 +80 +fa +31 +0f +85 +cf +d7 +ff +ff +41 +80 +39 +00 +0f +8f +c2 +d7 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +a7 +00 +00 +e9 +af +70 +00 +00 +41 +8a +11 +80 +fa +49 +7f +0f +84 +d2 +7e +15 +80 +fa +48 +0f +8e +9b +d7 +ff +ff +eb +1c +80 +fa +69 +74 +17 +e9 +8f +d7 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +96 +00 +00 +e9 +7c +70 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +6f +d7 +ff +ff +41 +8a +11 +80 +fa +30 +0f +8e +63 +d7 +ff +ff +80 +fa +31 +7e +0a +80 +fa +32 +7e +21 +e9 +54 +d7 +ff +ff +41 +80 +39 +00 +0f +8f +47 +d7 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +a6 +00 +00 +e9 +34 +70 +00 +00 +41 +80 +39 +00 +0f +8f +2b +d7 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +b6 +00 +00 +e9 +18 +70 +00 +00 +41 +8a +11 +80 +fa +41 +74 +09 +80 +fa +61 +0f +85 +0b +d7 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +fa +d6 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +e9 +d6 +ff +ff +41 +80 +39 +00 +0f +8f +dc +d6 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +8e +00 +00 +e9 +62 +02 +00 +00 +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +bc +d6 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +ab +d6 +ff +ff +41 +80 +39 +00 +0f +8f +9e +d6 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +8a +00 +00 +e9 +24 +02 +00 +00 +41 +8a +11 +80 +fa +58 +74 +65 +80 +fa +78 +74 +60 +e9 +7d +d6 +ff +ff +41 +8a +11 +80 +fa +4e +74 +37 +80 +fa +6e +74 +32 +e9 +6b +d6 +ff +ff +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +5a +d6 +ff +ff +41 +80 +39 +00 +0f +8f +4d +d6 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +b4 +00 +00 +e9 +3a +6f +00 +00 +41 +80 +39 +00 +0f +8f +31 +d6 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +94 +00 +00 +e9 +1e +6f +00 +00 +41 +80 +39 +00 +0f +8f +15 +d6 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +a4 +00 +00 +e9 +02 +6f +00 +00 +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +f5 +d5 +ff +ff +41 +8a +11 +80 +fa +47 +7f +10 +80 +fa +45 +74 +25 +80 +fa +46 +0f +8e +df +d5 +ff +ff +eb +2c +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +cf +d5 +ff +ff +eb +0a +80 +fa +67 +74 +17 +e9 +c3 +d5 +ff +ff +41 +8a +11 +80 +fa +51 +74 +74 +80 +fa +71 +74 +6f +e9 +b1 +d5 +ff +ff +41 +8a +11 +80 +fa +54 +7f +10 +80 +fa +45 +74 +25 +80 +fa +53 +0f +8e +9b +d5 +ff +ff +eb +36 +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +8b +d5 +ff +ff +eb +0a +80 +fa +74 +74 +21 +e9 +7f +d5 +ff +ff +41 +80 +39 +00 +0f +8f +72 +d5 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +90 +00 +00 +e9 +5f +6e +00 +00 +41 +80 +39 +00 +0f +8f +56 +d5 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +a0 +00 +00 +e9 +43 +6e +00 +00 +41 +80 +39 +00 +0f +8f +3a +d5 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +b0 +00 +00 +e9 +27 +6e +00 +00 +41 +8a +11 +80 +fa +43 +74 +37 +80 +fa +63 +74 +32 +e9 +19 +d5 +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +08 +d5 +ff +ff +41 +80 +39 +00 +0f +8f +fb +d4 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +9e +00 +00 +e9 +e8 +6d +00 +00 +41 +80 +39 +00 +0f +8f +df +d4 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +ae +00 +00 +e9 +cc +6d +00 +00 +41 +8a +11 +80 +fa +57 +7f +10 +80 +fa +44 +74 +25 +80 +fa +56 +0f +8e +ba +d4 +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +aa +d4 +ff +ff +eb +0a +80 +fa +77 +74 +21 +e9 +9e +d4 +ff +ff +41 +80 +39 +00 +0f +8f +91 +d4 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +1d +00 +00 +e9 +7e +6d +00 +00 +41 +80 +39 +00 +0f +8f +75 +d4 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +1c +00 +00 +c7 +47 +08 +00 +04 +01 +00 +e9 +3d +87 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +4e +d4 +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +3d +d4 +ff +ff +41 +8a +11 +80 +fa +57 +74 +09 +80 +fa +77 +0f +85 +2c +d4 +ff +ff +41 +80 +39 +00 +0f +8f +1f +d4 +ff +ff +c7 +07 +4d +03 +01 +00 +c7 +47 +04 +02 +00 +00 +00 +e9 +29 +1c +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +ff +d3 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +ee +d3 +ff +ff +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +dd +d3 +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +cc +d3 +ff +ff +41 +80 +39 +00 +0f +8f +bf +d3 +ff +ff +c7 +07 +b5 +06 +01 +00 +c7 +47 +04 +01 +54 +00 +00 +e9 +b4 +03 +00 +00 +41 +8a +11 +80 +fa +53 +0f +84 +7a +06 +00 +00 +80 +fa +73 +0f +84 +71 +06 +00 +00 +e9 +96 +d3 +ff +ff +41 +8a +11 +80 +fa +4d +7f +17 +80 +fa +4b +0f +84 +95 +03 +00 +00 +80 +fa +4c +0f +8e +7c +d3 +ff +ff +e9 +c7 +03 +00 +00 +80 +fa +6b +7f +0e +80 +fa +6a +0f +8e +69 +d3 +ff +ff +e9 +74 +03 +00 +00 +80 +fa +6d +0f +84 +ab +03 +00 +00 +e9 +56 +d3 +ff +ff +41 +8a +11 +80 +fa +44 +0f +84 +96 +01 +00 +00 +80 +fa +64 +0f +84 +8d +01 +00 +00 +e9 +3c +d3 +ff +ff +41 +8a +11 +80 +fa +44 +0f +84 +2d +01 +00 +00 +80 +fa +64 +0f +84 +24 +01 +00 +00 +e9 +22 +d3 +ff +ff +41 +8a +11 +80 +fa +47 +7f +10 +80 +fa +45 +74 +25 +80 +fa +46 +0f +8e +0c +d3 +ff +ff +eb +34 +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +fc +d2 +ff +ff +eb +0a +80 +fa +67 +74 +1f +e9 +f0 +d2 +ff +ff +41 +8a +11 +80 +fa +42 +0f +84 +c5 +00 +00 +00 +80 +fa +62 +0f +84 +bc +00 +00 +00 +e9 +d6 +d2 +ff +ff +41 +8a +11 +80 +fa +57 +7f +1a +80 +fa +54 +7f +05 +80 +fa +42 +eb +18 +80 +fa +55 +7e +62 +80 +fa +56 +0f +8e +b6 +d2 +ff +ff +eb +3b +80 +fa +74 +7f +0b +80 +fa +62 +0f +85 +a6 +d2 +ff +ff +eb +0f +80 +fa +75 +7e +42 +80 +fa +77 +74 +21 +e9 +95 +d2 +ff +ff +41 +80 +39 +00 +0f +8f +88 +d2 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +e0 +00 +00 +e9 +92 +1a +00 +00 +41 +80 +39 +00 +0f +8f +6c +d2 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +e3 +00 +00 +e9 +76 +1a +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +4c +d2 +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +3b +d2 +ff +ff +41 +80 +39 +00 +0f +8f +2e +d2 +ff +ff +c7 +07 +99 +06 +01 +00 +c7 +47 +04 +01 +bf +00 +00 +e9 +1b +6b +00 +00 +41 +80 +39 +00 +0f +8f +12 +d2 +ff +ff +c7 +07 +b5 +06 +01 +00 +c7 +47 +04 +01 +50 +00 +00 +e9 +07 +02 +00 +00 +41 +8a +11 +80 +fa +4e +7f +0f +84 +d2 +7e +15 +80 +fa +4d +0f +8e +eb +d1 +ff +ff +eb +1c +80 +fa +6e +74 +17 +e9 +df +d1 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +db +00 +00 +e9 +b2 +10 +00 +00 +41 +80 +39 +00 +0f +8f +c3 +d1 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +df +00 +00 +e9 +96 +10 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +42 +83 +f8 +35 +0f +87 +a2 +d1 +ff +ff +ff +24 +85 +e1 +20 +01 +00 +41 +80 +39 +00 +0f +8f +8e +d1 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +fc +00 +00 +e9 +61 +10 +00 +00 +41 +80 +39 +00 +0f +8f +72 +d1 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +fd +00 +00 +e9 +45 +10 +00 +00 +41 +80 +39 +00 +0f +8f +56 +d1 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +fe +00 +00 +e9 +29 +10 +00 +00 +41 +80 +39 +00 +0f +8f +3a +d1 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +d4 +00 +00 +e9 +0d +10 +00 +00 +41 +8a +11 +80 +fa +57 +7f +21 +80 +fa +48 +7f +05 +80 +fa +42 +eb +1f +80 +fa +49 +0f +8e +cf +00 +00 +00 +80 +fa +56 +0f +8e +07 +d1 +ff +ff +e9 +d3 +00 +00 +00 +80 +fa +68 +7f +0e +80 +fa +62 +0f +84 +97 +00 +00 +00 +e9 +ef +d0 +ff +ff +80 +fa +69 +0f +8e +a5 +00 +00 +00 +80 +fa +77 +0f +84 +ae +00 +00 +00 +e9 +d8 +d0 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +c7 +d0 +ff +ff +41 +8a +11 +80 +fa +57 +7f +10 +80 +fa +42 +74 +25 +80 +fa +56 +0f +8e +b1 +d0 +ff +ff +eb +36 +80 +fa +62 +7f +0b +80 +fa +61 +0f +8e +a1 +d0 +ff +ff +eb +0a +80 +fa +77 +74 +21 +e9 +95 +d0 +ff +ff +41 +80 +39 +00 +0f +8f +88 +d0 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +dc +00 +00 +e9 +5b +0f +00 +00 +41 +80 +39 +00 +0f +8f +6c +d0 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +dd +00 +00 +e9 +3f +0f +00 +00 +41 +80 +39 +00 +0f +8f +50 +d0 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +ec +00 +00 +e9 +23 +0f +00 +00 +41 +8a +11 +80 +fa +57 +74 +26 +80 +fa +77 +74 +21 +e9 +2f +d0 +ff +ff +41 +80 +39 +00 +0f +8f +22 +d0 +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +ed +00 +00 +e9 +f5 +0e +00 +00 +41 +80 +39 +00 +0f +8f +06 +d0 +ff +ff +c7 +07 +b5 +06 +01 +00 +c7 +47 +04 +01 +51 +00 +00 +c7 +47 +08 +00 +20 +02 +00 +e9 +ce +82 +00 +00 +41 +8a +11 +80 +fa +55 +7f +17 +80 +fa +53 +0f +84 +c7 +01 +00 +00 +80 +fa +54 +0f +8e +d6 +cf +ff +ff +e9 +cb +01 +00 +00 +80 +fa +73 +7f +0e +80 +fa +72 +0f +8e +c3 +cf +ff +ff +e9 +a6 +01 +00 +00 +80 +fa +75 +0f +84 +af +01 +00 +00 +e9 +b0 +cf +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +9f +cf +ff +ff +41 +8a +11 +80 +fa +47 +7f +10 +80 +fa +45 +74 +25 +80 +fa +46 +0f +8e +89 +cf +ff +ff +eb +34 +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +79 +cf +ff +ff +eb +0a +80 +fa +67 +74 +1f +e9 +6d +cf +ff +ff +41 +8a +11 +80 +fa +51 +0f +84 +b4 +00 +00 +00 +80 +fa +71 +0f +84 +ab +00 +00 +00 +e9 +53 +cf +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +42 +cf +ff +ff +41 +8a +11 +80 +fa +57 +7f +1a +80 +fa +43 +7f +05 +80 +fa +42 +eb +18 +80 +fa +44 +7e +46 +80 +fa +56 +0f +8e +22 +cf +ff +ff +eb +57 +80 +fa +63 +7f +0b +80 +fa +62 +0f +85 +12 +cf +ff +ff +eb +0f +80 +fa +64 +7e +26 +80 +fa +77 +74 +3d +e9 +01 +cf +ff +ff +41 +80 +39 +00 +0f +8f +f4 +ce +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +64 +00 +00 +e9 +c7 +0d +00 +00 +41 +80 +39 +00 +0f +8f +d8 +ce +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +66 +00 +00 +e9 +ab +0d +00 +00 +41 +80 +39 +00 +0f +8f +bc +ce +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +65 +00 +00 +e9 +8f +0d +00 +00 +41 +8a +11 +80 +fa +57 +7f +1a +80 +fa +43 +7f +05 +80 +fa +42 +eb +18 +80 +fa +44 +7e +46 +80 +fa +56 +0f +8e +8d +ce +ff +ff +eb +57 +80 +fa +63 +7f +0b +80 +fa +62 +0f +85 +7d +ce +ff +ff +eb +0f +80 +fa +64 +7e +26 +80 +fa +77 +74 +3d +e9 +6c +ce +ff +ff +41 +80 +39 +00 +0f +8f +5f +ce +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +74 +00 +00 +e9 +32 +0d +00 +00 +41 +80 +39 +00 +0f +8f +43 +ce +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +76 +00 +00 +e9 +16 +0d +00 +00 +41 +80 +39 +00 +0f +8f +27 +ce +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +75 +00 +00 +e9 +fa +0c +00 +00 +41 +8a +11 +80 +fa +53 +74 +59 +80 +fa +73 +74 +54 +e9 +06 +ce +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +f5 +cd +ff +ff +41 +8a +11 +80 +fa +57 +74 +09 +80 +fa +77 +0f +85 +e4 +cd +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +d3 +cd +ff +ff +41 +80 +39 +00 +0f +8f +c6 +cd +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +67 +00 +00 +e9 +99 +0c +00 +00 +41 +8a +11 +80 +fa +57 +7f +10 +80 +fa +44 +74 +25 +80 +fa +56 +0f +8e +a1 +cd +ff +ff +eb +2c +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +91 +cd +ff +ff +eb +0a +80 +fa +77 +74 +17 +e9 +85 +cd +ff +ff +41 +8a +11 +80 +fa +57 +74 +37 +80 +fa +77 +74 +32 +e9 +73 +cd +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +62 +cd +ff +ff +41 +80 +39 +00 +0f +8f +55 +cd +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +63 +00 +00 +e9 +28 +0c +00 +00 +41 +80 +39 +00 +0f +8f +39 +cd +ff +ff +c7 +07 +4d +00 +01 +00 +c7 +47 +04 +02 +6b +00 +00 +e9 +0c +0c +00 +00 +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +19 +cd +ff +ff +41 +80 +39 +00 +0f +8f +0c +cd +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +90 +f3 +00 +e9 +6e +0e +00 +00 +41 +80 +39 +00 +0f +8f +f0 +cc +ff +ff +c7 +07 +05 +65 +00 +00 +e9 +06 +6e +00 +00 +41 +80 +39 +00 +0f +8f +db +cc +ff +ff +c7 +07 +17 +00 +00 +00 +e9 +1c +77 +00 +00 +41 +80 +39 +00 +0f +8f +c6 +cc +ff +ff +c7 +07 +13 +00 +00 +00 +e9 +07 +77 +00 +00 +41 +8a +11 +80 +fa +55 +0f +84 +f1 +01 +00 +00 +80 +fa +75 +0f +84 +e8 +01 +00 +00 +e9 +a4 +cc +ff +ff +41 +8a +11 +80 +fa +4c +7f +12 +84 +d2 +7e +1c +80 +fa +4b +0f +8e +8c +cc +ff +ff +e9 +a7 +01 +00 +00 +80 +fa +6c +0f +84 +9e +01 +00 +00 +e9 +79 +cc +ff +ff +c7 +07 +35 +00 +00 +00 +e9 +ba +76 +00 +00 +41 +8a +11 +80 +fa +57 +7f +21 +80 +fa +51 +7f +05 +80 +fa +46 +eb +1f +80 +fa +52 +0f +8e +19 +01 +00 +00 +80 +fa +56 +0f +8e +4d +cc +ff +ff +e9 +27 +01 +00 +00 +80 +fa +71 +7f +0e +80 +fa +66 +0f +84 +e1 +00 +00 +00 +e9 +35 +cc +ff +ff +80 +fa +72 +0f +8e +ef +00 +00 +00 +80 +fa +77 +0f +84 +02 +01 +00 +00 +e9 +1e +cc +ff +ff +41 +8a +11 +80 +fa +53 +7f +24 +80 +fa +43 +7f +0f +84 +d2 +7e +39 +80 +fa +42 +0f +8e +01 +cc +ff +ff +eb +55 +80 +fa +51 +0f +8e +f6 +cb +ff +ff +80 +fa +52 +7e +63 +eb +7d +80 +fa +71 +7f +0a +80 +fa +63 +74 +3b +e9 +e0 +cb +ff +ff +80 +fa +72 +7e +4d +80 +fa +73 +7e +64 +e9 +d1 +cb +ff +ff +c7 +07 +2d +f5 +00 +00 +c7 +47 +04 +06 +a3 +04 +00 +e9 +83 +7c +00 +00 +41 +80 +39 +00 +0f +8f +b5 +cb +ff +ff +c7 +07 +33 +00 +00 +00 +e9 +f6 +75 +00 +00 +41 +80 +39 +00 +0f +8f +a0 +cb +ff +ff +c7 +07 +2d +f5 +00 +00 +c7 +47 +04 +06 +bb +07 +00 +e9 +52 +7c +00 +00 +41 +80 +39 +00 +0f +8f +84 +cb +ff +ff +c7 +07 +2d +f5 +00 +00 +c7 +47 +04 +06 +b3 +06 +00 +e9 +36 +7c +00 +00 +41 +80 +39 +00 +0f +8f +68 +cb +ff +ff +c7 +07 +2d +f5 +00 +00 +c7 +47 +04 +06 +ab +05 +00 +e9 +1a +7c +00 +00 +41 +80 +39 +00 +0f +8f +4c +cb +ff +ff +c7 +07 +ed +f5 +00 +00 +c7 +47 +04 +03 +bc +00 +00 +e9 +fe +7b +00 +00 +41 +80 +39 +00 +0f +8f +30 +cb +ff +ff +c7 +07 +ed +f5 +00 +00 +c7 +47 +04 +03 +bd +00 +00 +e9 +e2 +7b +00 +00 +41 +8a +11 +80 +fa +41 +74 +09 +80 +fa +61 +0f +85 +10 +cb +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +ff +ca +ff +ff +41 +80 +39 +00 +0f +8f +f2 +ca +ff +ff +c7 +07 +0d +fd +00 +00 +c7 +47 +04 +02 +00 +00 +00 +e9 +04 +28 +00 +00 +41 +80 +39 +00 +0f +8f +d6 +ca +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +04 +75 +00 +00 +c7 +07 +25 +00 +00 +00 +e9 +0a +75 +00 +00 +41 +8a +11 +80 +fa +4e +74 +09 +80 +fa +6e +0f +85 +b0 +ca +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +9f +ca +ff +ff +41 +80 +39 +00 +0f +8f +92 +ca +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +5d +7c +00 +00 +c7 +07 +6d +f6 +00 +00 +c7 +47 +04 +02 +00 +00 +00 +e9 +da +43 +00 +00 +41 +8a +11 +80 +fa +58 +0f +84 +40 +02 +00 +00 +80 +fa +78 +0f +84 +37 +02 +00 +00 +e9 +5c +ca +ff +ff +41 +8a +11 +80 +fa +58 +7f +17 +80 +fa +50 +0f +84 +0c +02 +00 +00 +80 +fa +57 +0f +8e +42 +ca +ff +ff +e9 +e9 +01 +00 +00 +80 +fa +70 +7f +0e +80 +fa +6f +0f +8e +2f +ca +ff +ff +e9 +eb +01 +00 +00 +80 +fa +78 +0f +84 +cd +01 +00 +00 +e9 +1c +ca +ff +ff +41 +8a +11 +80 +fa +58 +0f +84 +a7 +01 +00 +00 +80 +fa +78 +0f +84 +9e +01 +00 +00 +e9 +02 +ca +ff +ff +41 +8a +11 +80 +fa +58 +7f +17 +80 +fa +49 +0f +84 +73 +01 +00 +00 +80 +fa +57 +0f +8e +e8 +c9 +ff +ff +e9 +50 +01 +00 +00 +80 +fa +69 +7f +0e +80 +fa +68 +0f +8e +d5 +c9 +ff +ff +e9 +52 +01 +00 +00 +80 +fa +78 +0f +84 +34 +01 +00 +00 +e9 +c2 +c9 +ff +ff +41 +8a +11 +80 +fa +4d +0f +84 +f6 +00 +00 +00 +80 +fa +6d +0f +84 +ed +00 +00 +00 +e9 +a8 +c9 +ff +ff +41 +8a +11 +80 +fa +54 +0f +84 +9e +00 +00 +00 +80 +fa +74 +0f +84 +95 +00 +00 +00 +e9 +8e +c9 +ff +ff +41 +8a +11 +80 +fa +50 +7f +1f +80 +fa +48 +7f +0a +84 +d2 +0f +8f +76 +c9 +ff +ff +eb +2a +80 +fa +49 +7e +5f +80 +fa +4f +0f +8e +66 +c9 +ff +ff +eb +3f +80 +fa +69 +7f +0b +80 +fa +68 +0f +8e +56 +c9 +ff +ff +eb +44 +80 +fa +70 +74 +2a +e9 +4a +c9 +ff +ff +80 +3d +00 +00 +00 +00 +40 +75 +11 +53 +68 +cd +0d +01 +00 +56 +6a +00 +e8 +4f +a8 +ff +ff +83 +c4 +10 +c7 +07 +00 +26 +00 +00 +e9 +46 +6a +00 +00 +41 +80 +39 +00 +0f +8f +1b +c9 +ff +ff +c7 +07 +44 +00 +00 +00 +e9 +5c +73 +00 +00 +41 +80 +39 +00 +0f +8f +06 +c9 +ff +ff +c7 +07 +46 +00 +00 +00 +e9 +47 +73 +00 +00 +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +ed +c8 +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +dc +c8 +ff +ff +41 +80 +39 +00 +0f +8f +cf +c8 +ff +ff +c7 +07 +e5 +f2 +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +24 +42 +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +af +c8 +ff +ff +41 +80 +39 +00 +0f +8f +a2 +c8 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +77 +0f +00 +e9 +75 +07 +00 +00 +41 +80 +39 +00 +0f +8f +86 +c8 +ff +ff +c7 +07 +42 +00 +00 +00 +e9 +c7 +72 +00 +00 +41 +80 +39 +00 +0f +8f +71 +c8 +ff +ff +c7 +07 +47 +00 +00 +00 +e9 +b2 +72 +00 +00 +41 +80 +39 +00 +0f +8f +5c +c8 +ff +ff +c7 +07 +41 +00 +00 +00 +e9 +9d +72 +00 +00 +41 +80 +39 +00 +0f +8f +47 +c8 +ff +ff +c7 +07 +43 +00 +00 +00 +e9 +88 +72 +00 +00 +41 +80 +39 +00 +0f +8f +32 +c8 +ff +ff +c7 +07 +45 +00 +00 +00 +e9 +73 +72 +00 +00 +41 +80 +39 +00 +0f +8f +1d +c8 +ff +ff +c7 +07 +40 +00 +00 +00 +e9 +5e +72 +00 +00 +41 +8a +11 +80 +fa +44 +0f +84 +58 +02 +00 +00 +80 +fa +64 +0f +84 +4f +02 +00 +00 +e9 +fb +c7 +ff +ff +41 +8a +11 +80 +fa +54 +0f +84 +0a +02 +00 +00 +80 +fa +74 +0f +84 +01 +02 +00 +00 +e9 +e1 +c7 +ff +ff +41 +8a +11 +80 +fa +48 +0f +84 +c3 +01 +00 +00 +80 +fa +68 +0f +84 +ba +01 +00 +00 +e9 +c7 +c7 +ff +ff +41 +8a +11 +80 +fa +41 +0f +84 +5a +01 +00 +00 +80 +fa +61 +0f +84 +51 +01 +00 +00 +e9 +ad +c7 +ff +ff +41 +8a +11 +80 +fa +4d +0f +84 +bb +00 +00 +00 +80 +fa +6d +0f +84 +b2 +00 +00 +00 +e9 +93 +c7 +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +82 +c7 +ff +ff +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +6a +c7 +ff +ff +eb +1c +80 +fa +70 +74 +17 +e9 +5e +c7 +ff +ff +c7 +07 +ed +e3 +00 +00 +c7 +47 +04 +17 +30 +06 +00 +e9 +26 +7a +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +39 +c7 +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +29 +c7 +ff +ff +eb +25 +80 +fa +73 +0f +85 +1e +c7 +ff +ff +41 +80 +39 +00 +0f +8f +11 +c7 +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +57 +00 +00 +e9 +90 +72 +00 +00 +41 +80 +39 +00 +0f +8f +f5 +c6 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +57 +66 +00 +e9 +51 +72 +00 +00 +41 +8a +11 +80 +fa +2f +0f +8e +da +c6 +ff +ff +80 +fa +31 +74 +3b +80 +fa +39 +0f +8f +cc +c6 +ff +ff +41 +80 +39 +00 +0f +8f +bf +c6 +ff +ff +80 +3d +00 +00 +00 +00 +40 +74 +0e +8a +43 +03 +83 +e8 +38 +3c +01 +0f +86 +e3 +70 +00 +00 +0f +be +43 +03 +83 +e8 +30 +0d +80 +00 +00 +00 +e9 +7b +6c +00 +00 +41 +8a +11 +84 +d2 +7e +d1 +80 +fa +2f +0f +8e +87 +c6 +ff +ff +80 +fa +35 +0f +8f +7e +c6 +ff +ff +41 +80 +39 +00 +0f +8f +74 +c6 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +a2 +70 +00 +00 +0f +be +43 +04 +e9 +58 +38 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +50 +c6 +ff +ff +41 +8a +11 +80 +fa +42 +7f +0f +84 +d2 +7e +15 +80 +fa +41 +0f +8e +38 +c6 +ff +ff +eb +1c +80 +fa +62 +74 +17 +e9 +2c +c6 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +d7 +00 +00 +e9 +f4 +78 +00 +00 +41 +80 +39 +00 +7e +e8 +e9 +0f +c6 +ff +ff +41 +8a +11 +80 +fa +47 +74 +09 +80 +fa +67 +0f +85 +01 +c6 +ff +ff +41 +80 +39 +00 +0f +8f +f4 +c5 +ff +ff +c7 +07 +ed +df +00 +00 +c7 +47 +04 +0e +00 +00 +00 +e9 +bc +78 +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +d4 +c5 +ff +ff +41 +80 +39 +00 +0f +8f +c7 +c5 +ff +ff +c7 +07 +4d +08 +01 +00 +c7 +47 +04 +02 +00 +00 +00 +c7 +47 +08 +04 +00 +60 +00 +e9 +8f +78 +00 +00 +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +a0 +c5 +ff +ff +41 +80 +39 +00 +0f +8f +93 +c5 +ff +ff +c7 +07 +4d +fd +00 +00 +c7 +47 +04 +04 +c0 +00 +00 +e9 +a5 +22 +00 +00 +41 +8a +11 +80 +fa +58 +7f +17 +80 +fa +53 +0f +84 +d5 +0b +00 +00 +80 +fa +57 +0f +8e +6a +c5 +ff +ff +e9 +e1 +0b +00 +00 +80 +fa +73 +7f +0e +80 +fa +72 +0f +8e +57 +c5 +ff +ff +e9 +b4 +0b +00 +00 +80 +fa +78 +0f +84 +c5 +0b +00 +00 +e9 +44 +c5 +ff +ff +41 +8a +11 +80 +fa +45 +0f +84 +4b +0b +00 +00 +80 +fa +65 +0f +84 +42 +0b +00 +00 +e9 +2a +c5 +ff +ff +41 +8a +11 +80 +fa +4e +0f +84 +22 +0a +00 +00 +80 +fa +6e +0f +84 +19 +0a +00 +00 +e9 +10 +c5 +ff +ff +41 +8a +11 +80 +fa +2f +0f +8e +04 +c5 +ff +ff +80 +fa +37 +0f +8e +e6 +09 +00 +00 +e9 +f6 +c4 +ff +ff +41 +8a +11 +80 +fa +56 +0f +84 +4f +01 +00 +00 +80 +fa +76 +0f +84 +46 +01 +00 +00 +e9 +dc +c4 +ff +ff +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +cb +c4 +ff +ff +41 +8a +11 +80 +fa +53 +7f +1f +80 +fa +4f +7f +0a +84 +d2 +0f +8f +b3 +c4 +ff +ff +eb +2a +80 +fa +50 +7e +37 +80 +fa +52 +0f +8e +a3 +c4 +ff +ff +eb +68 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +93 +c4 +ff +ff +eb +1c +80 +fa +73 +74 +53 +e9 +87 +c4 +ff +ff +c7 +07 +4d +e7 +00 +00 +c7 +47 +04 +04 +04 +00 +00 +e9 +4f +77 +00 +00 +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +b0 +00 +00 +00 +80 +fa +52 +0f +8e +5e +c4 +ff +ff +e9 +86 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +4b +c4 +ff +ff +e9 +8f +00 +00 +00 +80 +fa +73 +74 +6e +e9 +3c +c4 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +26 +c4 +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +16 +c4 +ff +ff +eb +25 +80 +fa +73 +0f +85 +0b +c4 +ff +ff +41 +80 +39 +00 +0f +8f +fe +c3 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +59 +f3 +00 +e9 +7d +6f +00 +00 +41 +80 +39 +00 +0f +8f +e2 +c3 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +59 +f2 +00 +e9 +3e +6f +00 +00 +41 +80 +39 +00 +0f +8f +c6 +c3 +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +59 +00 +00 +e9 +45 +6f +00 +00 +41 +80 +39 +00 +0f +8f +aa +c3 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +59 +66 +00 +e9 +06 +6f +00 +00 +41 +8a +11 +80 +fa +5a +0f +8f +9a +00 +00 +00 +80 +fa +4c +7f +45 +80 +fa +43 +7f +16 +84 +d2 +0f +8e +23 +01 +00 +00 +80 +fa +41 +0f +84 +2c +01 +00 +00 +e9 +6c +c3 +ff +ff +80 +fa +47 +7f +0e +80 +fa +44 +0f +8e +33 +01 +00 +00 +e9 +59 +c3 +ff +ff +80 +fa +48 +0f +8e +5f +01 +00 +00 +80 +fa +4b +0f +8e +47 +c3 +ff +ff +e9 +91 +01 +00 +00 +80 +fa +52 +7f +21 +80 +fa +4e +7f +0e +80 +fa +4d +0f +8e +be +01 +00 +00 +e9 +d3 +01 +00 +00 +80 +fa +51 +0f +84 +e4 +01 +00 +00 +e9 +1c +c3 +ff +ff +80 +fa +54 +7f +0e +80 +fa +53 +0f +8e +ff +01 +00 +00 +e9 +09 +c3 +ff +ff +80 +fa +55 +0f +8e +0a +02 +00 +00 +80 +fa +59 +0f +8e +f7 +c2 +ff +ff +e9 +0e +02 +00 +00 +80 +fa +6d +7f +46 +80 +fa +64 +7f +17 +80 +fa +61 +0f +84 +9a +00 +00 +00 +80 +fa +63 +0f +8e +d6 +c2 +ff +ff +e9 +a6 +00 +00 +00 +80 +fa +68 +7f +0e +80 +fa +67 +0f +8e +c3 +c2 +ff +ff +e9 +cd +00 +00 +00 +80 +fa +6b +0f +8e +b5 +c2 +ff +ff +80 +fa +6c +0f +8e +fb +00 +00 +00 +e9 +36 +01 +00 +00 +80 +fa +73 +7f +2a +80 +fa +70 +7f +0e +80 +fa +6e +0f +8e +3d +01 +00 +00 +e9 +8f +c2 +ff +ff +80 +fa +71 +0f +8e +49 +01 +00 +00 +80 +fa +72 +0f +8e +7d +c2 +ff +ff +e9 +69 +01 +00 +00 +80 +fa +75 +7f +0e +80 +fa +74 +0f +8e +6a +c2 +ff +ff +e9 +6f +01 +00 +00 +80 +fa +7a +0f +84 +78 +01 +00 +00 +e9 +57 +c2 +ff +ff +c7 +07 +ad +d4 +00 +00 +c7 +47 +04 +2d +00 +00 +00 +e9 +1f +75 +00 +00 +41 +8a +11 +80 +fa +50 +0f +84 +bd +06 +00 +00 +80 +fa +70 +0f +84 +b4 +06 +00 +00 +e9 +2e +c2 +ff +ff +41 +8a +11 +80 +fa +51 +7f +12 +84 +d2 +7e +1c +80 +fa +50 +0f +8e +16 +c2 +ff +ff +e9 +f5 +05 +00 +00 +80 +fa +71 +0f +84 +ec +05 +00 +00 +e9 +03 +c2 +ff +ff +c7 +07 +cd +fe +00 +00 +c7 +47 +04 +08 +00 +00 +00 +e9 +d6 +00 +00 +00 +41 +8a +11 +80 +fa +50 +7f +17 +80 +fa +4c +0f +84 +1b +05 +00 +00 +80 +fa +4f +0f +8e +da +c1 +ff +ff +e9 +1f +05 +00 +00 +80 +fa +6c +7f +0e +80 +fa +6b +0f +8e +c7 +c1 +ff +ff +e9 +fa +04 +00 +00 +80 +fa +70 +0f +84 +03 +05 +00 +00 +e9 +b4 +c1 +ff +ff +41 +8a +11 +80 +fa +50 +7f +17 +80 +fa +48 +0f +84 +32 +04 +00 +00 +80 +fa +4f +0f +8e +9a +c1 +ff +ff +e9 +36 +04 +00 +00 +80 +fa +68 +7f +0e +80 +fa +67 +0f +8e +87 +c1 +ff +ff +e9 +11 +04 +00 +00 +80 +fa +70 +0f +84 +1a +04 +00 +00 +e9 +74 +c1 +ff +ff +41 +8a +11 +80 +fa +53 +0f +84 +79 +03 +00 +00 +80 +fa +73 +0f +84 +70 +03 +00 +00 +e9 +5a +c1 +ff +ff +41 +8a +11 +80 +fa +54 +0f +84 +31 +02 +00 +00 +80 +fa +74 +0f +84 +28 +02 +00 +00 +e9 +40 +c1 +ff +ff +41 +8a +11 +84 +d2 +7e +0e +80 +fa +32 +0f +84 +dc +01 +00 +00 +e9 +28 +c1 +ff +ff +c7 +07 +ad +ff +00 +00 +c7 +47 +04 +05 +00 +00 +00 +c7 +47 +08 +00 +20 +00 +00 +e9 +f0 +73 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +42 +83 +f8 +36 +0f +87 +00 +c1 +ff +ff +ff +24 +85 +b9 +21 +01 +00 +41 +8a +11 +80 +fa +50 +74 +37 +80 +fa +70 +74 +32 +e9 +e7 +c0 +ff +ff +41 +8a +11 +80 +fa +58 +74 +09 +80 +fa +78 +0f +85 +d6 +c0 +ff +ff +41 +80 +39 +00 +0f +8f +c9 +c0 +ff +ff +c7 +07 +ad +d9 +00 +00 +c7 +47 +04 +05 +b6 +00 +00 +e9 +7b +71 +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +a4 +c0 +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +94 +c0 +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +88 +c0 +ff +ff +41 +80 +39 +00 +0f +8f +7b +c0 +ff +ff +c7 +07 +ad +04 +01 +00 +c7 +47 +04 +02 +10 +00 +00 +e9 +d7 +6b +00 +00 +41 +80 +39 +00 +0f +8f +5f +c0 +ff +ff +c7 +07 +ed +01 +01 +00 +c7 +47 +04 +02 +10 +00 +00 +e9 +de +6b +00 +00 +41 +8a +11 +80 +fa +44 +7f +12 +84 +d2 +7e +1c +80 +fa +43 +0f +8e +38 +c0 +ff +ff +e9 +b9 +00 +00 +00 +80 +fa +64 +0f +84 +b0 +00 +00 +00 +e9 +25 +c0 +ff +ff +c7 +07 +ad +d9 +00 +00 +c7 +47 +04 +05 +be +00 +00 +e9 +d7 +70 +00 +00 +41 +80 +39 +00 +0f +8f +09 +c0 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +a4 +00 +00 +e9 +d1 +72 +00 +00 +41 +80 +39 +00 +0f +8f +ed +bf +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +a5 +10 +00 +e9 +b5 +72 +00 +00 +41 +80 +39 +00 +0f +8f +d1 +bf +ff +ff +c7 +07 +6d +05 +01 +00 +c7 +47 +04 +04 +00 +00 +00 +e9 +99 +72 +00 +00 +41 +80 +39 +00 +0f +8f +b5 +bf +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +8b +70 +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +a5 +40 +00 +e9 +70 +72 +00 +00 +41 +80 +39 +00 +0f +8f +8c +bf +ff +ff +c7 +07 +ed +02 +01 +00 +c7 +47 +04 +03 +00 +00 +00 +e9 +0b +6b +00 +00 +41 +80 +39 +00 +0f +8f +70 +bf +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +46 +70 +00 +00 +c7 +07 +39 +da +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +59 +70 +00 +00 +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +43 +bf +ff +ff +41 +8a +11 +80 +fa +51 +74 +09 +80 +fa +71 +0f +85 +32 +bf +ff +ff +41 +80 +39 +00 +0f +8f +25 +bf +ff +ff +c7 +07 +61 +06 +01 +00 +e9 +63 +07 +00 +00 +41 +8a +11 +80 +fa +51 +7f +28 +80 +fa +48 +7f +0b +80 +fa +44 +0f +85 +07 +bf +ff +ff +eb +45 +80 +fa +49 +7e +5a +80 +fa +4f +0f +8e +f7 +be +ff +ff +80 +fa +50 +7e +6f +e9 +9c +00 +00 +00 +80 +fa +69 +7f +10 +80 +fa +64 +74 +23 +80 +fa +68 +0f +8e +da +be +ff +ff +eb +32 +80 +fa +6f +0f +8e +cf +be +ff +ff +80 +fa +70 +7e +47 +80 +fa +71 +7e +74 +e9 +c0 +be +ff +ff +41 +8a +11 +80 +fa +51 +0f +84 +a9 +00 +00 +00 +80 +fa +71 +0f +84 +a0 +00 +00 +00 +e9 +a6 +be +ff +ff +41 +80 +39 +00 +0f +8f +99 +be +ff +ff +c7 +07 +6d +fe +00 +00 +c7 +47 +04 +02 +00 +00 +00 +c7 +47 +08 +80 +00 +00 +00 +e9 +61 +71 +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +4f +80 +fa +52 +0f +8e +6d +be +ff +ff +eb +2f +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +5d +be +ff +ff +eb +34 +80 +fa +73 +74 +1a +e9 +51 +be +ff +ff +41 +80 +39 +00 +0f +8f +44 +be +ff +ff +c7 +07 +bd +02 +01 +00 +e9 +94 +25 +00 +00 +41 +80 +39 +00 +0f +8f +2f +be +ff +ff +c7 +07 +a1 +02 +01 +00 +e9 +7f +25 +00 +00 +41 +80 +39 +00 +0f +8f +1a +be +ff +ff +c7 +07 +41 +05 +01 +00 +c7 +47 +04 +01 +2b +00 +00 +e9 +76 +69 +00 +00 +41 +80 +39 +00 +0f +8f +fe +bd +ff +ff +c7 +07 +41 +05 +01 +00 +c7 +47 +04 +01 +e7 +00 +00 +e9 +5a +69 +00 +00 +41 +8a +11 +80 +fa +4b +74 +09 +80 +fa +6b +0f +85 +de +bd +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +cd +bd +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +b7 +bd +ff +ff +eb +2f +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +a7 +bd +ff +ff +eb +0a +80 +fa +73 +74 +1a +e9 +9b +bd +ff +ff +41 +80 +39 +00 +0f +8f +8e +bd +ff +ff +c7 +07 +25 +05 +01 +00 +e9 +cc +05 +00 +00 +41 +80 +39 +00 +0f +8f +79 +bd +ff +ff +c7 +07 +85 +02 +01 +00 +e9 +c9 +24 +00 +00 +41 +8a +11 +80 +fa +50 +74 +74 +80 +fa +70 +74 +6f +e9 +5f +bd +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +49 +bd +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +39 +bd +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +2d +bd +ff +ff +41 +80 +39 +00 +0f +8f +20 +bd +ff +ff +c7 +07 +ed +04 +01 +00 +c7 +47 +04 +02 +12 +00 +00 +e9 +7c +68 +00 +00 +41 +80 +39 +00 +0f +8f +04 +bd +ff +ff +c7 +07 +4d +02 +01 +00 +c7 +47 +04 +02 +12 +00 +00 +e9 +83 +68 +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +e4 +bc +ff +ff +41 +80 +39 +00 +0f +8f +d7 +bc +ff +ff +c7 +07 +25 +02 +01 +00 +c7 +47 +04 +01 +16 +00 +00 +e9 +56 +68 +00 +00 +41 +8a +11 +80 +fa +50 +74 +74 +80 +fa +70 +74 +6f +e9 +b6 +bc +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +a0 +bc +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +90 +bc +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +84 +bc +ff +ff +41 +80 +39 +00 +0f +8f +77 +bc +ff +ff +c7 +07 +ed +04 +01 +00 +c7 +47 +04 +02 +16 +00 +00 +e9 +d3 +67 +00 +00 +41 +80 +39 +00 +0f +8f +5b +bc +ff +ff +c7 +07 +4d +02 +01 +00 +c7 +47 +04 +02 +16 +00 +00 +e9 +da +67 +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +3b +bc +ff +ff +41 +80 +39 +00 +0f +8f +2e +bc +ff +ff +c7 +07 +25 +02 +01 +00 +c7 +47 +04 +01 +12 +00 +00 +e9 +ad +67 +00 +00 +41 +8a +11 +80 +fa +54 +7f +1a +80 +fa +32 +7f +0b +80 +fa +31 +0f +8e +09 +bc +ff +ff +eb +29 +80 +fa +41 +74 +36 +e9 +fd +bb +ff +ff +80 +fa +61 +7f +10 +80 +fa +55 +7e +43 +80 +fa +60 +0f +8e +ea +bb +ff +ff +eb +1c +80 +fa +75 +74 +33 +e9 +de +bb +ff +ff +41 +8a +11 +80 +fa +51 +74 +42 +80 +fa +71 +74 +3d +e9 +cc +bb +ff +ff +41 +80 +39 +00 +0f +8f +bf +bb +ff +ff +c7 +07 +0d +06 +01 +00 +c7 +47 +04 +02 +66 +00 +00 +e9 +1b +67 +00 +00 +41 +80 +39 +00 +0f +8f +a3 +bb +ff +ff +c7 +07 +0d +06 +01 +00 +c7 +47 +04 +02 +f3 +00 +00 +e9 +ff +66 +00 +00 +41 +80 +39 +00 +0f +8f +87 +bb +ff +ff +c7 +07 +45 +06 +01 +00 +e9 +c5 +03 +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +69 +bb +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +59 +bb +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +4d +bb +ff +ff +41 +80 +39 +00 +0f +8f +40 +bb +ff +ff +c7 +07 +ad +04 +01 +00 +c7 +47 +04 +02 +28 +00 +00 +e9 +9c +66 +00 +00 +41 +80 +39 +00 +0f +8f +24 +bb +ff +ff +c7 +07 +ed +01 +01 +00 +c7 +47 +04 +02 +28 +00 +00 +e9 +a3 +66 +00 +00 +41 +80 +39 +00 +0f +8f +08 +bb +ff +ff +0f +be +43 +02 +83 +e8 +30 +83 +c8 +70 +e9 +dd +60 +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +e6 +ba +ff +ff +eb +56 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +d6 +ba +ff +ff +eb +0a +80 +fa +73 +74 +41 +e9 +ca +ba +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +b0 +00 +00 +00 +80 +fa +52 +0f +8e +b0 +ba +ff +ff +e9 +86 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +9d +ba +ff +ff +e9 +8f +00 +00 +00 +80 +fa +73 +74 +6e +e9 +8e +ba +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +78 +ba +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +68 +ba +ff +ff +eb +25 +80 +fa +73 +0f +85 +5d +ba +ff +ff +41 +80 +39 +00 +0f +8f +50 +ba +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +5d +f3 +00 +e9 +cf +65 +00 +00 +41 +80 +39 +00 +0f +8f +34 +ba +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +5d +f2 +00 +e9 +90 +65 +00 +00 +41 +80 +39 +00 +0f +8f +18 +ba +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +5d +00 +00 +e9 +97 +65 +00 +00 +41 +80 +39 +00 +0f +8f +fc +b9 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +5d +66 +00 +e9 +58 +65 +00 +00 +41 +8a +11 +80 +fa +4e +74 +09 +80 +fa +6e +0f +85 +dc +b9 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +cb +b9 +ff +ff +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +ba +b9 +ff +ff +41 +80 +39 +00 +0f +8f +ad +b9 +ff +ff +c7 +07 +41 +d4 +00 +00 +c7 +47 +04 +01 +f0 +ae +0f +e9 +14 +66 +00 +00 +41 +8a +11 +80 +fa +4b +0f +84 +1d +01 +00 +00 +80 +fa +6b +0f +84 +14 +01 +00 +00 +e9 +84 +b9 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +6e +b9 +ff +ff +eb +56 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +5e +b9 +ff +ff +eb +0a +80 +fa +73 +74 +41 +e9 +52 +b9 +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +b0 +00 +00 +00 +80 +fa +52 +0f +8e +38 +b9 +ff +ff +e9 +86 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +25 +b9 +ff +ff +e9 +8f +00 +00 +00 +80 +fa +73 +74 +6e +e9 +16 +b9 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +00 +b9 +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +f0 +b8 +ff +ff +eb +25 +80 +fa +73 +0f +85 +e5 +b8 +ff +ff +41 +80 +39 +00 +0f +8f +d8 +b8 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +5f +f3 +00 +e9 +57 +64 +00 +00 +41 +80 +39 +00 +0f +8f +bc +b8 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +5f +f2 +00 +e9 +18 +64 +00 +00 +41 +80 +39 +00 +0f +8f +a0 +b8 +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +5f +00 +00 +e9 +1f +64 +00 +00 +41 +80 +39 +00 +0f +8f +84 +b8 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +5f +66 +00 +e9 +e0 +63 +00 +00 +41 +8a +11 +80 +fa +4d +74 +09 +80 +fa +6d +0f +85 +64 +b8 +ff +ff +41 +8a +11 +80 +fa +4f +74 +09 +80 +fa +6f +0f +85 +53 +b8 +ff +ff +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +42 +b8 +ff +ff +41 +8a +11 +80 +fa +51 +7f +10 +80 +fa +44 +74 +25 +80 +fa +50 +0f +8e +2c +b8 +ff +ff +eb +2c +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +1c +b8 +ff +ff +eb +0a +80 +fa +71 +74 +17 +e9 +10 +b8 +ff +ff +41 +8a +11 +80 +fa +51 +74 +2d +80 +fa +71 +74 +28 +e9 +fe +b7 +ff +ff +41 +80 +39 +00 +0f +8f +f1 +b7 +ff +ff +c7 +07 +c1 +01 +01 +00 +c7 +47 +04 +01 +00 +00 +00 +c7 +47 +08 +40 +20 +00 +00 +e9 +b9 +6a +00 +00 +41 +8a +11 +80 +fa +55 +74 +09 +80 +fa +75 +0f +85 +ca +b7 +ff +ff +41 +80 +39 +00 +0f +8f +bd +b7 +ff +ff +c7 +07 +dd +05 +01 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +19 +63 +00 +00 +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +41 +0f +84 +b0 +02 +00 +00 +80 +fa +52 +0f +8e +94 +b7 +ff +ff +e9 +cb +02 +00 +00 +80 +fa +61 +7f +0e +80 +fa +60 +0f +8e +81 +b7 +ff +ff +e9 +8f +02 +00 +00 +80 +fa +73 +0f +84 +af +02 +00 +00 +e9 +6e +b7 +ff +ff +41 +8a +11 +80 +fa +43 +0f +84 +59 +02 +00 +00 +80 +fa +63 +0f +84 +50 +02 +00 +00 +e9 +54 +b7 +ff +ff +41 +80 +39 +00 +0f +8f +47 +b7 +ff +ff +c7 +07 +16 +00 +00 +00 +e9 +88 +61 +00 +00 +41 +8a +11 +80 +fa +56 +7f +26 +80 +fa +4b +7f +0a +84 +d2 +0f +8f +27 +b7 +ff +ff +eb +38 +80 +fa +4c +0f +8e +c4 +00 +00 +00 +80 +fa +55 +0f +8e +13 +b7 +ff +ff +e9 +d8 +00 +00 +00 +80 +fa +6c +7f +0e +80 +fa +6b +0f +8e +00 +b7 +ff +ff +e9 +a3 +00 +00 +00 +80 +fa +76 +0f +84 +bc +00 +00 +00 +e9 +ed +b6 +ff +ff +c7 +07 +37 +00 +00 +00 +e9 +2e +61 +00 +00 +41 +80 +39 +00 +0f +8f +d8 +b6 +ff +ff +c7 +07 +12 +00 +00 +00 +e9 +19 +61 +00 +00 +41 +8a +11 +80 +fa +2f +0f +8e +c4 +b6 +ff +ff +80 +fa +37 +7e +49 +e9 +ba +b6 +ff +ff +41 +80 +39 +00 +0f +8f +ad +b6 +ff +ff +80 +3d +00 +00 +00 +00 +40 +75 +11 +53 +68 +cd +0d +01 +00 +56 +6a +00 +e8 +b2 +95 +ff +ff +83 +c4 +10 +c7 +07 +03 +3e +00 +00 +e9 +a9 +57 +00 +00 +41 +80 +39 +00 +0f +8f +7e +b6 +ff +ff +c7 +07 +32 +00 +00 +00 +e9 +bf +60 +00 +00 +41 +80 +39 +00 +0f +8f +69 +b6 +ff +ff +0f +be +43 +02 +83 +e8 +30 +0d +a0 +00 +00 +00 +e9 +3c +5c +00 +00 +41 +80 +39 +00 +0f +8f +4e +b6 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +7c +60 +00 +00 +c7 +07 +27 +00 +00 +00 +e9 +82 +60 +00 +00 +41 +8a +11 +80 +fa +53 +7f +1f +80 +fa +4f +7f +0a +84 +d2 +0f +8f +21 +b6 +ff +ff +eb +2a +80 +fa +50 +7e +37 +80 +fa +52 +0f +8e +11 +b6 +ff +ff +eb +68 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +01 +b6 +ff +ff +eb +1c +80 +fa +73 +74 +53 +e9 +f5 +b5 +ff +ff +c7 +07 +4d +e7 +00 +00 +c7 +47 +04 +04 +06 +00 +00 +e9 +bd +68 +00 +00 +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +b0 +00 +00 +00 +80 +fa +52 +0f +8e +cc +b5 +ff +ff +e9 +86 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +b9 +b5 +ff +ff +e9 +8f +00 +00 +00 +80 +fa +73 +74 +6e +e9 +aa +b5 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +94 +b5 +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +84 +b5 +ff +ff +eb +25 +80 +fa +73 +0f +85 +79 +b5 +ff +ff +41 +80 +39 +00 +0f +8f +6c +b5 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +5e +f3 +00 +e9 +eb +60 +00 +00 +41 +80 +39 +00 +0f +8f +50 +b5 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +5e +f2 +00 +e9 +ac +60 +00 +00 +41 +80 +39 +00 +0f +8f +34 +b5 +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +5e +00 +00 +e9 +b3 +60 +00 +00 +41 +80 +39 +00 +0f +8f +18 +b5 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +5e +66 +00 +e9 +74 +60 +00 +00 +41 +80 +39 +00 +0f +8f +fc +b4 +ff +ff +c7 +07 +8d +e6 +00 +00 +c7 +47 +04 +06 +48 +01 +00 +e9 +c4 +67 +00 +00 +41 +80 +39 +00 +0f +8f +e0 +b4 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +ab +66 +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +27 +00 +00 +e9 +9b +67 +00 +00 +41 +80 +39 +00 +0f +8f +b7 +b4 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +82 +66 +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +2f +00 +00 +e9 +72 +67 +00 +00 +41 +8a +11 +80 +fa +4c +0f +84 +92 +1d +00 +00 +80 +fa +6c +0f +84 +89 +1d +00 +00 +e9 +81 +b4 +ff +ff +41 +8a +11 +80 +fa +57 +0f +84 +5c +1d +00 +00 +80 +fa +77 +0f +84 +53 +1d +00 +00 +e9 +67 +b4 +ff +ff +41 +8a +11 +80 +fa +51 +7f +17 +80 +fa +4f +0f +84 +eb +1c +00 +00 +80 +fa +50 +0f +8e +4d +b4 +ff +ff +e9 +aa +1c +00 +00 +80 +fa +6f +7f +0e +80 +fa +6e +0f +8e +3a +b4 +ff +ff +e9 +ca +1c +00 +00 +80 +fa +71 +0f +84 +8e +1c +00 +00 +e9 +27 +b4 +ff +ff +41 +80 +39 +00 +0f +8f +1a +b4 +ff +ff +c7 +07 +15 +00 +00 +00 +e9 +5b +5e +00 +00 +41 +8a +11 +80 +fa +54 +7f +58 +80 +fa +45 +7f +29 +80 +fa +42 +7f +0d +84 +d2 +0f +8f +f5 +b3 +ff +ff +e9 +91 +00 +00 +00 +80 +fa +43 +0f +8e +6a +1b +00 +00 +80 +fa +44 +0f +8e +7d +1b +00 +00 +e9 +d9 +b3 +ff +ff +80 +fa +48 +7f +0e +80 +fa +46 +0f +8e +b4 +1b +00 +00 +e9 +c6 +b3 +ff +ff +80 +fa +49 +0f +8e +78 +1b +00 +00 +80 +fa +53 +0f +8e +b4 +b3 +ff +ff +e9 +86 +1b +00 +00 +80 +fa +66 +7f +2a +80 +fa +63 +7f +0e +80 +fa +62 +0f +8e +9c +b3 +ff +ff +e9 +1a +1b +00 +00 +80 +fa +64 +0f +8e +2d +1b +00 +00 +80 +fa +65 +0f +8e +85 +b3 +ff +ff +e9 +69 +1b +00 +00 +80 +fa +69 +7f +0e +80 +fa +68 +0f +8e +72 +b3 +ff +ff +e9 +28 +1b +00 +00 +80 +fa +74 +0f +84 +3b +1b +00 +00 +e9 +5f +b3 +ff +ff +c7 +07 +11 +00 +00 +00 +e9 +a0 +5d +00 +00 +41 +8a +11 +80 +fa +50 +7f +2a +80 +fa +43 +7f +0e +80 +fa +42 +0f +8e +41 +b3 +ff +ff +e9 +28 +0a +00 +00 +80 +fa +4e +0f +8e +33 +b3 +ff +ff +80 +fa +4f +0f +8e +2a +0b +00 +00 +e9 +2d +0a +00 +00 +80 +fa +6e +7f +0e +80 +fa +63 +0f +84 +03 +0a +00 +00 +e9 +12 +b3 +ff +ff +80 +fa +6f +0f +8e +09 +0b +00 +00 +80 +fa +70 +0f +8e +08 +0a +00 +00 +e9 +fb +b2 +ff +ff +41 +8a +11 +80 +fa +4d +0f +84 +4f +09 +00 +00 +80 +fa +6d +0f +84 +46 +09 +00 +00 +e9 +e1 +b2 +ff +ff +41 +8a +11 +80 +fa +55 +0f +84 +f7 +08 +00 +00 +80 +fa +75 +0f +84 +ee +08 +00 +00 +e9 +c7 +b2 +ff +ff +41 +8a +11 +80 +fa +31 +7f +05 +80 +fa +30 +eb +0c +80 +fa +34 +0f +8e +a5 +08 +00 +00 +80 +fa +38 +0f +84 +9c +08 +00 +00 +e9 +a3 +b2 +ff +ff +41 +80 +39 +00 +0f +8f +96 +b2 +ff +ff +c7 +07 +01 +2e +00 +00 +e9 +ac +53 +00 +00 +41 +8a +11 +80 +fa +54 +0f +84 +80 +00 +00 +00 +80 +fa +74 +74 +7b +e9 +78 +b2 +ff +ff +41 +8a +11 +80 +fa +44 +74 +1f +80 +fa +64 +74 +1a +e9 +66 +b2 +ff +ff +41 +80 +39 +00 +0f +8f +59 +b2 +ff +ff +c7 +07 +31 +00 +00 +00 +e9 +9a +5c +00 +00 +41 +8a +11 +80 +fa +45 +7f +0f +84 +d2 +7e +15 +80 +fa +44 +0f +8e +39 +b2 +ff +ff +eb +1c +80 +fa +65 +74 +17 +e9 +2d +b2 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +99 +10 +00 +e9 +f5 +64 +00 +00 +41 +80 +39 +00 +0f +8f +11 +b2 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +98 +20 +00 +e9 +c3 +62 +00 +00 +41 +8a +11 +80 +fa +54 +7f +2c +80 +fa +4f +7f +0b +80 +fa +44 +0f +85 +ec +b1 +ff +ff +eb +4d +80 +fa +50 +7e +62 +80 +fa +52 +0f +8e +dc +b1 +ff +ff +80 +fa +53 +0f +8e +a3 +00 +00 +00 +e9 +f1 +00 +00 +00 +80 +fa +70 +7f +10 +80 +fa +64 +74 +27 +80 +fa +6f +0f +8e +bb +b1 +ff +ff +eb +36 +80 +fa +72 +0f +8e +b0 +b1 +ff +ff +80 +fa +73 +7e +7b +80 +fa +74 +0f +8e +c5 +00 +00 +00 +e9 +9d +b1 +ff +ff +41 +8a +11 +80 +fa +51 +0f +84 +fe +06 +00 +00 +80 +fa +71 +0f +84 +f5 +06 +00 +00 +e9 +83 +b1 +ff +ff +41 +8a +11 +80 +fa +53 +7f +21 +80 +fa +48 +7f +05 +80 +fa +44 +eb +1f +80 +fa +49 +0f +8e +9a +04 +00 +00 +80 +fa +52 +0f +8e +5f +b1 +ff +ff +e9 +9d +04 +00 +00 +80 +fa +68 +7f +0e +80 +fa +64 +0f +84 +a0 +04 +00 +00 +e9 +47 +b1 +ff +ff +80 +fa +69 +0f +8e +70 +04 +00 +00 +80 +fa +73 +0f +84 +78 +04 +00 +00 +e9 +30 +b1 +ff +ff +41 +8a +11 +80 +fa +53 +7f +21 +80 +fa +48 +7f +05 +80 +fa +44 +eb +1f +80 +fa +49 +0f +8e +a8 +02 +00 +00 +80 +fa +52 +0f +8e +0c +b1 +ff +ff +e9 +ab +02 +00 +00 +80 +fa +68 +7f +0e +80 +fa +64 +0f +84 +ae +02 +00 +00 +e9 +f4 +b0 +ff +ff +80 +fa +69 +0f +8e +7e +02 +00 +00 +80 +fa +73 +0f +84 +86 +02 +00 +00 +e9 +dd +b0 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +c7 +b0 +ff +ff +eb +5a +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +b7 +b0 +ff +ff +eb +0a +80 +fa +73 +74 +45 +e9 +ab +b0 +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +f6 +00 +00 +00 +80 +fa +52 +0f +8e +91 +b0 +ff +ff +e9 +f9 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +7e +b0 +ff +ff +e9 +d5 +00 +00 +00 +80 +fa +73 +0f +84 +dd +00 +00 +00 +e9 +6b +b0 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +55 +b0 +ff +ff +eb +27 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +45 +b0 +ff +ff +eb +0a +80 +fa +73 +74 +12 +e9 +39 +b0 +ff +ff +41 +8a +11 +80 +fa +32 +74 +4f +e9 +2c +b0 +ff +ff +41 +8a +11 +80 +fa +32 +0f +85 +20 +b0 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +0f +b0 +ff +ff +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +fe +af +ff +ff +41 +80 +39 +00 +0f +8f +f1 +af +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +2c +f3 +00 +e9 +70 +5b +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +d1 +af +ff +ff +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +c0 +af +ff +ff +41 +80 +39 +00 +0f +8f +b3 +af +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +2c +f2 +00 +e9 +0f +5b +00 +00 +41 +8a +11 +80 +fa +32 +0f +84 +9e +00 +00 +00 +e9 +93 +af +ff +ff +41 +8a +11 +80 +fa +32 +0f +85 +87 +af +ff +ff +41 +8a +11 +80 +fa +50 +7f +10 +80 +fa +44 +74 +25 +80 +fa +4f +0f +8e +71 +af +ff +ff +eb +2c +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +61 +af +ff +ff +eb +0a +80 +fa +70 +74 +17 +e9 +55 +af +ff +ff +41 +8a +11 +80 +fa +51 +74 +37 +80 +fa +71 +74 +32 +e9 +43 +af +ff +ff +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +32 +af +ff +ff +41 +80 +39 +00 +0f +8f +25 +af +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +2c +00 +00 +e9 +a4 +5a +00 +00 +41 +80 +39 +00 +0f +8f +09 +af +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +5b +f3 +00 +e9 +65 +5a +00 +00 +41 +8a +11 +80 +fa +50 +7f +10 +80 +fa +44 +74 +25 +80 +fa +4f +0f +8e +e4 +ae +ff +ff +eb +2c +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +d4 +ae +ff +ff +eb +0a +80 +fa +70 +74 +17 +e9 +c8 +ae +ff +ff +41 +8a +11 +80 +fa +51 +74 +37 +80 +fa +71 +74 +32 +e9 +b6 +ae +ff +ff +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +a5 +ae +ff +ff +41 +80 +39 +00 +0f +8f +98 +ae +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +2c +66 +00 +e9 +f4 +59 +00 +00 +41 +80 +39 +00 +0f +8f +7c +ae +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +e6 +66 +00 +e9 +d8 +59 +00 +00 +41 +8a +11 +80 +fa +32 +0f +84 +18 +01 +00 +00 +e9 +5c +ae +ff +ff +41 +8a +11 +80 +fa +32 +0f +84 +8c +00 +00 +00 +e9 +4b +ae +ff +ff +41 +8a +11 +80 +fa +32 +0f +85 +3f +ae +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +2e +ae +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +49 +74 +25 +80 +fa +52 +0f +8e +18 +ae +ff +ff +eb +36 +80 +fa +69 +7f +0b +80 +fa +68 +0f +8e +08 +ae +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +fc +ad +ff +ff +41 +80 +39 +00 +0f +8f +ef +ad +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +2d +f2 +00 +e9 +4b +59 +00 +00 +41 +80 +39 +00 +0f +8f +d3 +ad +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +5a +f2 +00 +e9 +2f +59 +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +b3 +ad +ff +ff +41 +8a +11 +80 +fa +49 +7f +10 +80 +fa +44 +74 +25 +80 +fa +48 +0f +8e +9d +ad +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +8d +ad +ff +ff +eb +0a +80 +fa +69 +74 +21 +e9 +81 +ad +ff +ff +41 +80 +39 +00 +0f +8f +74 +ad +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +5a +f3 +00 +e9 +d0 +58 +00 +00 +41 +80 +39 +00 +0f +8f +58 +ad +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +2d +f3 +00 +e9 +d7 +58 +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +38 +ad +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +22 +ad +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +12 +ad +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +06 +ad +ff +ff +41 +80 +39 +00 +0f +8f +f9 +ac +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +2a +f2 +00 +e9 +55 +58 +00 +00 +41 +80 +39 +00 +0f +8f +dd +ac +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +2a +f3 +00 +e9 +5c +58 +00 +00 +41 +8a +11 +80 +fa +32 +0f +84 +b4 +01 +00 +00 +e9 +bd +ac +ff +ff +41 +8a +11 +80 +fa +32 +0f +84 +db +00 +00 +00 +e9 +ac +ac +ff +ff +41 +8a +11 +80 +fa +32 +0f +85 +a0 +ac +ff +ff +41 +8a +11 +80 +fa +50 +7f +10 +80 +fa +44 +74 +25 +80 +fa +4f +0f +8e +8a +ac +ff +ff +eb +2c +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +7a +ac +ff +ff +eb +0a +80 +fa +70 +74 +17 +e9 +6e +ac +ff +ff +41 +8a +11 +80 +fa +51 +74 +74 +80 +fa +71 +74 +6f +e9 +5c +ac +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +49 +74 +25 +80 +fa +52 +0f +8e +46 +ac +ff +ff +eb +36 +80 +fa +69 +7f +0b +80 +fa +68 +0f +8e +36 +ac +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +2a +ac +ff +ff +41 +80 +39 +00 +0f +8f +1d +ac +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +2d +66 +00 +e9 +79 +57 +00 +00 +41 +80 +39 +00 +0f +8f +01 +ac +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +5a +66 +00 +e9 +5d +57 +00 +00 +41 +80 +39 +00 +0f +8f +e5 +ab +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +e6 +f2 +00 +e9 +41 +57 +00 +00 +41 +8a +11 +80 +fa +50 +7f +10 +80 +fa +44 +74 +56 +80 +fa +4f +0f +8e +c0 +ab +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +b0 +ab +ff +ff +eb +3b +80 +fa +70 +0f +85 +a5 +ab +ff +ff +41 +8a +11 +80 +fa +49 +7f +10 +80 +fa +44 +74 +52 +80 +fa +48 +0f +8e +8f +ab +ff +ff +eb +63 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +7f +ab +ff +ff +eb +37 +80 +fa +69 +74 +4e +e9 +73 +ab +ff +ff +41 +8a +11 +80 +fa +51 +74 +09 +80 +fa +71 +0f +85 +62 +ab +ff +ff +41 +80 +39 +00 +0f +8f +55 +ab +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +5b +66 +00 +e9 +b1 +56 +00 +00 +41 +80 +39 +00 +0f +8f +39 +ab +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +5a +00 +00 +e9 +95 +56 +00 +00 +41 +80 +39 +00 +0f +8f +1d +ab +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +2d +00 +00 +e9 +9c +56 +00 +00 +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +fd +aa +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +e7 +aa +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +d7 +aa +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +cb +aa +ff +ff +41 +80 +39 +00 +0f +8f +be +aa +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +2a +66 +00 +e9 +1a +56 +00 +00 +41 +80 +39 +00 +0f +8f +a2 +aa +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +2a +00 +00 +e9 +21 +56 +00 +00 +41 +8a +11 +80 +fa +32 +0f +85 +87 +aa +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +76 +aa +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +60 +aa +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +50 +aa +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +44 +aa +ff +ff +41 +80 +39 +00 +0f +8f +37 +aa +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +e6 +f3 +00 +e9 +93 +55 +00 +00 +41 +80 +39 +00 +0f +8f +1b +aa +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +5b +00 +00 +e9 +77 +55 +00 +00 +41 +80 +39 +00 +0f +8f +ff +a9 +ff +ff +80 +3d +00 +00 +00 +00 +40 +74 +0a +80 +7b +02 +38 +0f +84 +27 +54 +00 +00 +0f +be +43 +02 +83 +e8 +30 +0d +90 +00 +00 +00 +e9 +bf +4f +00 +00 +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +cd +a9 +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +bc +a9 +ff +ff +41 +80 +39 +00 +0f +8f +af +a9 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +a2 +0f +00 +e9 +c1 +06 +00 +00 +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +8f +a9 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +7e +a9 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +68 +a9 +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +58 +a9 +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +4c +a9 +ff +ff +41 +80 +39 +00 +0f +8f +3f +a9 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +2f +66 +00 +e9 +9b +54 +00 +00 +41 +80 +39 +00 +0f +8f +23 +a9 +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +2f +00 +00 +e9 +a2 +54 +00 +00 +41 +80 +39 +00 +0f +8f +07 +a9 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +f5 +00 +00 +e9 +cf +5b +00 +00 +41 +8a +11 +80 +fa +58 +7f +73 +80 +fa +4e +7f +32 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +cc +00 +00 +00 +80 +fa +44 +0f +8e +d2 +a8 +ff +ff +e9 +69 +04 +00 +00 +80 +fa +4c +0f +84 +7a +04 +00 +00 +80 +fa +4d +0f +8e +bb +a8 +ff +ff +e9 +ac +04 +00 +00 +80 +fa +53 +7f +20 +80 +fa +4f +0f +8e +de +04 +00 +00 +80 +fa +50 +0f +8e +ef +04 +00 +00 +80 +fa +52 +0f +8e +96 +a8 +ff +ff +e9 +21 +05 +00 +00 +80 +fa +55 +0f +84 +31 +05 +00 +00 +80 +fa +57 +0f +8e +7f +a8 +ff +ff +e9 +3d +05 +00 +00 +80 +fa +6f +7f +33 +80 +fa +6b +7f +0e +80 +fa +65 +0f +84 +03 +04 +00 +00 +e9 +62 +a8 +ff +ff +80 +fa +6c +0f +8e +0f +04 +00 +00 +80 +fa +6d +0f +8e +50 +a8 +ff +ff +80 +fa +6e +0f +8e +3d +04 +00 +00 +e9 +78 +04 +00 +00 +80 +fa +74 +7f +17 +80 +fa +70 +0f +8e +84 +04 +00 +00 +80 +fa +73 +0f +84 +bb +04 +00 +00 +e9 +26 +a8 +ff +ff +80 +fa +75 +0f +8e +c6 +04 +00 +00 +80 +fa +78 +0f +84 +d7 +04 +00 +00 +e9 +0f +a8 +ff +ff +c7 +07 +ed +e3 +00 +00 +c7 +47 +04 +17 +38 +07 +00 +e9 +d7 +5a +00 +00 +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +ef +a7 +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +39 +0f +87 +dd +a7 +ff +ff +ff +24 +85 +95 +22 +01 +00 +41 +80 +39 +00 +0f +8f +c9 +a7 +ff +ff +c7 +07 +ed +fd +00 +00 +c7 +47 +04 +03 +00 +00 +00 +e9 +0f +4b +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +39 +0f +87 +a8 +a7 +ff +ff +ff +24 +85 +7d +23 +01 +00 +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +18 +03 +00 +00 +80 +fa +44 +0f +8e +85 +a7 +ff +ff +e9 +3e +01 +00 +00 +80 +fa +65 +0f +84 +35 +01 +00 +00 +e9 +72 +a7 +ff +ff +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +d0 +02 +00 +00 +80 +fa +44 +0f +8e +59 +a7 +ff +ff +e9 +80 +01 +00 +00 +80 +fa +65 +0f +84 +77 +01 +00 +00 +e9 +46 +a7 +ff +ff +41 +80 +39 +00 +0f +8f +3c +a7 +ff +ff +c7 +07 +ed +fd +00 +00 +c7 +47 +04 +03 +04 +00 +00 +e9 +82 +4a +00 +00 +41 +80 +39 +00 +0f +8f +20 +a7 +ff +ff +c7 +07 +ed +fd +00 +00 +c7 +47 +04 +03 +08 +00 +00 +e9 +66 +4a +00 +00 +41 +8a +11 +80 +fa +4f +7f +23 +80 +fa +44 +7f +07 +84 +d2 +e9 +a0 +00 +00 +00 +80 +fa +45 +0f +8e +93 +00 +00 +00 +80 +fa +4e +0f +8e +e8 +a6 +ff +ff +e9 +bb +01 +00 +00 +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +d5 +a6 +ff +ff +eb +75 +80 +fa +6f +0f +84 +a2 +01 +00 +00 +e9 +c5 +a6 +ff +ff +41 +8a +11 +80 +fa +45 +7f +13 +84 +d2 +0f +8e +07 +02 +00 +00 +80 +fa +44 +0f +8e +ac +a6 +ff +ff +eb +3d +80 +fa +65 +74 +38 +e9 +a0 +a6 +ff +ff +41 +8a +11 +80 +fa +45 +7f +13 +84 +d2 +0f +8e +c6 +01 +00 +00 +80 +fa +44 +0f +8e +87 +a6 +ff +ff +eb +09 +80 +fa +65 +0f +85 +7c +a6 +ff +ff +41 +80 +39 +00 +0f +8f +72 +a6 +ff +ff +e9 +17 +01 +00 +00 +41 +80 +39 +00 +0f +8f +63 +a6 +ff +ff +e9 +ce +00 +00 +00 +41 +80 +39 +00 +0f +8f +54 +a6 +ff +ff +c7 +07 +ed +fd +00 +00 +c7 +47 +04 +03 +0a +00 +00 +e9 +9a +49 +00 +00 +41 +80 +39 +00 +0f +8f +38 +a6 +ff +ff +eb +28 +41 +8a +11 +80 +fa +45 +7f +12 +84 +d2 +7e +1c +80 +fa +44 +0f +8e +21 +a6 +ff +ff +e9 +9c +01 +00 +00 +80 +fa +65 +0f +84 +93 +01 +00 +00 +e9 +0e +a6 +ff +ff +c7 +07 +ed +fd +00 +00 +c7 +47 +04 +03 +06 +00 +00 +e9 +54 +49 +00 +00 +41 +8a +11 +80 +fa +45 +7f +12 +84 +d2 +7e +26 +80 +fa +44 +0f +8e +e7 +a5 +ff +ff +e9 +46 +01 +00 +00 +80 +fa +65 +0f +84 +3d +01 +00 +00 +e9 +d4 +a5 +ff +ff +41 +80 +39 +00 +0f +8f +ca +a5 +ff +ff +c7 +07 +ed +fd +00 +00 +c7 +47 +04 +03 +03 +00 +00 +e9 +10 +49 +00 +00 +41 +8a +11 +80 +fa +45 +7f +12 +84 +d2 +7e +1c +80 +fa +44 +0f +8e +a3 +a5 +ff +ff +e9 +e6 +00 +00 +00 +80 +fa +65 +0f +84 +dd +00 +00 +00 +e9 +90 +a5 +ff +ff +c7 +07 +ed +fd +00 +00 +c7 +47 +04 +03 +0e +00 +00 +e9 +d6 +48 +00 +00 +41 +8a +11 +80 +fa +45 +7f +12 +84 +d2 +7e +1c +80 +fa +44 +0f +8e +69 +a5 +ff +ff +e9 +90 +00 +00 +00 +80 +fa +65 +0f +84 +87 +00 +00 +00 +e9 +56 +a5 +ff +ff +c7 +07 +ed +fd +00 +00 +c7 +47 +04 +03 +0d +00 +00 +e9 +9c +48 +00 +00 +41 +80 +39 +00 +0f +8f +3a +a5 +ff +ff +c7 +07 +ed +fd +00 +00 +c7 +47 +04 +03 +01 +00 +00 +e9 +80 +48 +00 +00 +41 +80 +39 +00 +0f +8f +1e +a5 +ff +ff +c7 +07 +ed +fd +00 +00 +c7 +47 +04 +03 +0b +00 +00 +e9 +64 +48 +00 +00 +41 +80 +39 +00 +0f +8f +02 +a5 +ff +ff +c7 +07 +ed +fd +00 +00 +c7 +47 +04 +03 +09 +00 +00 +e9 +48 +48 +00 +00 +41 +80 +39 +00 +0f +8f +e6 +a4 +ff +ff +c7 +07 +ed +fd +00 +00 +c7 +47 +04 +03 +05 +00 +00 +e9 +2c +48 +00 +00 +41 +80 +39 +00 +0f +8f +ca +a4 +ff +ff +c7 +07 +ed +fd +00 +00 +c7 +47 +04 +03 +0f +00 +00 +e9 +10 +48 +00 +00 +41 +80 +39 +00 +0f +8f +ae +a4 +ff +ff +c7 +07 +ed +fd +00 +00 +c7 +47 +04 +03 +0c +00 +00 +e9 +f4 +47 +00 +00 +41 +80 +39 +00 +0f +8f +92 +a4 +ff +ff +c7 +07 +ed +fd +00 +00 +c7 +47 +04 +03 +07 +00 +00 +e9 +d8 +47 +00 +00 +41 +80 +39 +00 +0f +8f +76 +a4 +ff +ff +c7 +07 +ed +fd +00 +00 +c7 +47 +04 +03 +02 +00 +00 +e9 +bc +47 +00 +00 +41 +8a +11 +80 +fa +51 +0f +84 +cc +0a +00 +00 +80 +fa +71 +0f +84 +c3 +0a +00 +00 +e9 +4d +a4 +ff +ff +41 +8a +11 +80 +fa +54 +7f +17 +80 +fa +45 +0f +84 +88 +08 +00 +00 +80 +fa +53 +0f +8e +33 +a4 +ff +ff +e9 +ba +08 +00 +00 +80 +fa +65 +7f +0e +80 +fa +64 +0f +8e +20 +a4 +ff +ff +e9 +67 +08 +00 +00 +80 +fa +74 +0f +84 +9e +08 +00 +00 +e9 +0d +a4 +ff +ff +41 +8a +11 +80 +fa +4c +7f +17 +80 +fa +45 +0f +84 +bb +04 +00 +00 +80 +fa +4b +0f +8e +f3 +a3 +ff +ff +e9 +c7 +04 +00 +00 +80 +fa +65 +7f +0e +80 +fa +64 +0f +8e +e0 +a3 +ff +ff +e9 +9a +04 +00 +00 +80 +fa +6c +0f +84 +ab +04 +00 +00 +e9 +cd +a3 +ff +ff +41 +8a +11 +80 +fa +52 +0f +84 +5e +03 +00 +00 +80 +fa +72 +0f +84 +55 +03 +00 +00 +e9 +b3 +a3 +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +23 +03 +00 +00 +80 +fa +52 +0f +8e +99 +a3 +ff +ff +e9 +f9 +02 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +86 +a3 +ff +ff +e9 +02 +03 +00 +00 +80 +fa +73 +0f +84 +dd +02 +00 +00 +e9 +73 +a3 +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +42 +83 +f8 +35 +0f +87 +61 +a3 +ff +ff +ff +24 +85 +65 +24 +01 +00 +41 +8a +11 +80 +fa +4e +0f +84 +e4 +00 +00 +00 +80 +fa +6e +0f +84 +db +00 +00 +00 +e9 +40 +a3 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +2f +a3 +ff +ff +41 +8a +11 +80 +fa +48 +74 +09 +80 +fa +68 +0f +85 +1e +a3 +ff +ff +41 +8a +11 +80 +fa +47 +74 +09 +80 +fa +67 +0f +85 +0d +a3 +ff +ff +41 +8a +11 +80 +fa +34 +7f +0f +84 +d2 +7e +15 +80 +fa +33 +0f +8e +f5 +a2 +ff +ff +eb +23 +80 +fa +38 +74 +2b +e9 +e9 +a2 +ff +ff +c7 +07 +4d +fd +00 +00 +c7 +47 +04 +04 +b0 +00 +00 +c7 +47 +08 +08 +00 +00 +00 +e9 +b1 +55 +00 +00 +41 +8a +11 +80 +fa +38 +74 +32 +e9 +c6 +a2 +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +b5 +a2 +ff +ff +41 +80 +39 +00 +0f +8f +a8 +a2 +ff +ff +c7 +07 +bd +fd +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +77 +12 +00 +00 +41 +8a +11 +80 +fa +36 +0f +85 +8d +a2 +ff +ff +41 +80 +39 +00 +0f +8f +80 +a2 +ff +ff +c7 +07 +4d +fd +00 +00 +c7 +47 +04 +04 +a6 +00 +00 +c7 +47 +08 +08 +00 +20 +00 +e9 +48 +55 +00 +00 +41 +8a +11 +80 +fa +4f +74 +09 +80 +fa +6f +0f +85 +59 +a2 +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +48 +a2 +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +37 +a2 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +21 +a2 +ff +ff +eb +57 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +11 +a2 +ff +ff +eb +0a +80 +fa +73 +74 +42 +e9 +05 +a2 +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +96 +00 +00 +00 +80 +fa +52 +0f +8e +eb +a1 +ff +ff +e9 +a4 +00 +00 +00 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +d8 +a1 +ff +ff +eb +78 +80 +fa +73 +0f +84 +8b +00 +00 +00 +e9 +c8 +a1 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +b2 +a1 +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +a2 +a1 +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +96 +a1 +ff +ff +41 +80 +39 +00 +0f +8f +89 +a1 +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +f2 +03 +00 +e9 +e5 +4c +00 +00 +41 +80 +39 +00 +0f +8f +6d +a1 +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +f3 +03 +00 +e9 +ec +4c +00 +00 +41 +80 +39 +00 +0f +8f +51 +a1 +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +66 +03 +00 +e9 +ad +4c +00 +00 +41 +80 +39 +00 +0f +8f +35 +a1 +ff +ff +c7 +07 +35 +01 +01 +00 +e9 +fa +47 +00 +00 +41 +80 +39 +00 +0f +8f +20 +a1 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +a6 +00 +00 +e9 +e8 +53 +00 +00 +41 +80 +39 +00 +0f +8f +04 +a1 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +a7 +10 +00 +e9 +cc +53 +00 +00 +41 +80 +39 +00 +0f +8f +e8 +a0 +ff +ff +c7 +07 +6d +04 +01 +00 +e9 +cd +1f +00 +00 +41 +80 +39 +00 +0f +8f +d3 +a0 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +a9 +51 +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +a7 +40 +00 +e9 +bc +51 +00 +00 +41 +80 +39 +00 +0f +8f +aa +a0 +ff +ff +c7 +07 +89 +01 +01 +00 +c7 +47 +04 +01 +c2 +f3 +00 +e9 +29 +4c +00 +00 +41 +80 +39 +00 +0f +8f +8e +a0 +ff +ff +c7 +07 +6d +01 +01 +00 +c7 +47 +04 +01 +c2 +00 +00 +e9 +0d +4c +00 +00 +41 +80 +39 +00 +0f +8f +72 +a0 +ff +ff +c7 +07 +89 +01 +01 +00 +c7 +47 +04 +01 +c2 +66 +00 +e9 +ce +4b +00 +00 +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +52 +a0 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +3c +a0 +ff +ff +eb +57 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +2c +a0 +ff +ff +eb +0a +80 +fa +73 +74 +42 +e9 +20 +a0 +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +96 +00 +00 +00 +80 +fa +52 +0f +8e +06 +a0 +ff +ff +e9 +a4 +00 +00 +00 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +f3 +9f +ff +ff +eb +78 +80 +fa +73 +0f +84 +8b +00 +00 +00 +e9 +e3 +9f +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +cd +9f +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +bd +9f +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +b1 +9f +ff +ff +41 +80 +39 +00 +0f +8f +a4 +9f +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +f2 +07 +00 +e9 +00 +4b +00 +00 +41 +80 +39 +00 +0f +8f +88 +9f +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +f3 +07 +00 +e9 +07 +4b +00 +00 +41 +80 +39 +00 +0f +8f +6c +9f +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +66 +07 +00 +e9 +c8 +4a +00 +00 +41 +80 +39 +00 +0f +8f +50 +9f +ff +ff +c7 +07 +35 +01 +01 +00 +c7 +47 +04 +01 +07 +00 +00 +e9 +cf +4a +00 +00 +41 +8a +11 +80 +fa +51 +0f +84 +70 +02 +00 +00 +80 +fa +71 +0f +84 +67 +02 +00 +00 +e9 +27 +9f +ff +ff +41 +8a +11 +80 +fa +54 +7f +10 +80 +fa +45 +74 +25 +80 +fa +53 +0f +8e +11 +9f +ff +ff +eb +5a +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +01 +9f +ff +ff +eb +0a +80 +fa +74 +74 +45 +e9 +f5 +9e +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +50 +0f +84 +40 +01 +00 +00 +80 +fa +52 +0f +8e +db +9e +ff +ff +e9 +6f +01 +00 +00 +80 +fa +70 +7f +0e +80 +fa +6f +0f +8e +c8 +9e +ff +ff +e9 +1f +01 +00 +00 +80 +fa +73 +0f +84 +53 +01 +00 +00 +e9 +b5 +9e +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +9f +9e +ff +ff +eb +57 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +8f +9e +ff +ff +eb +0a +80 +fa +73 +74 +42 +e9 +83 +9e +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +96 +00 +00 +00 +80 +fa +52 +0f +8e +69 +9e +ff +ff +e9 +a4 +00 +00 +00 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +56 +9e +ff +ff +eb +78 +80 +fa +73 +0f +84 +8b +00 +00 +00 +e9 +46 +9e +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +30 +9e +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +20 +9e +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +14 +9e +ff +ff +41 +80 +39 +00 +0f +8f +07 +9e +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +f2 +05 +00 +e9 +63 +49 +00 +00 +41 +80 +39 +00 +0f +8f +eb +9d +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +f3 +05 +00 +e9 +6a +49 +00 +00 +41 +80 +39 +00 +0f +8f +cf +9d +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +66 +05 +00 +e9 +2b +49 +00 +00 +41 +80 +39 +00 +0f +8f +b3 +9d +ff +ff +c7 +07 +35 +01 +01 +00 +c7 +47 +04 +01 +05 +00 +00 +e9 +32 +49 +00 +00 +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +96 +00 +00 +00 +80 +fa +52 +0f +8e +8a +9d +ff +ff +e9 +a4 +00 +00 +00 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +77 +9d +ff +ff +eb +78 +80 +fa +73 +0f +84 +8b +00 +00 +00 +e9 +67 +9d +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +51 +9d +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +41 +9d +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +35 +9d +ff +ff +41 +80 +39 +00 +0f +8f +28 +9d +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +f2 +06 +00 +e9 +84 +48 +00 +00 +41 +80 +39 +00 +0f +8f +0c +9d +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +f3 +06 +00 +e9 +8b +48 +00 +00 +41 +80 +39 +00 +0f +8f +f0 +9c +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +66 +06 +00 +e9 +4c +48 +00 +00 +41 +80 +39 +00 +0f +8f +d4 +9c +ff +ff +c7 +07 +35 +01 +01 +00 +c7 +47 +04 +01 +06 +00 +00 +e9 +53 +48 +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +af +9c +ff +ff +eb +57 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +9f +9c +ff +ff +eb +0a +80 +fa +73 +74 +42 +e9 +93 +9c +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +96 +00 +00 +00 +80 +fa +52 +0f +8e +79 +9c +ff +ff +e9 +a4 +00 +00 +00 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +66 +9c +ff +ff +eb +78 +80 +fa +73 +0f +84 +8b +00 +00 +00 +e9 +56 +9c +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +40 +9c +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +30 +9c +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +24 +9c +ff +ff +41 +80 +39 +00 +0f +8f +17 +9c +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +f2 +04 +00 +e9 +73 +47 +00 +00 +41 +80 +39 +00 +0f +8f +fb +9b +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +f3 +04 +00 +e9 +7a +47 +00 +00 +41 +80 +39 +00 +0f +8f +df +9b +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +66 +04 +00 +e9 +3b +47 +00 +00 +41 +80 +39 +00 +0f +8f +c3 +9b +ff +ff +c7 +07 +35 +01 +01 +00 +c7 +47 +04 +01 +04 +00 +00 +e9 +42 +47 +00 +00 +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +50 +0f +84 +3e +01 +00 +00 +80 +fa +52 +0f +8e +9a +9b +ff +ff +e9 +6c +01 +00 +00 +80 +fa +70 +7f +0e +80 +fa +6f +0f +8e +87 +9b +ff +ff +e9 +1d +01 +00 +00 +80 +fa +73 +0f +84 +50 +01 +00 +00 +e9 +74 +9b +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +5e +9b +ff +ff +eb +56 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +4e +9b +ff +ff +eb +0a +80 +fa +73 +74 +41 +e9 +42 +9b +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +b0 +00 +00 +00 +80 +fa +52 +0f +8e +28 +9b +ff +ff +e9 +86 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +15 +9b +ff +ff +e9 +8f +00 +00 +00 +80 +fa +73 +74 +6e +e9 +06 +9b +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +f0 +9a +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +e0 +9a +ff +ff +eb +25 +80 +fa +73 +0f +85 +d5 +9a +ff +ff +41 +80 +39 +00 +0f +8f +c8 +9a +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +f3 +01 +00 +e9 +47 +46 +00 +00 +41 +80 +39 +00 +0f +8f +ac +9a +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +f2 +01 +00 +e9 +08 +46 +00 +00 +41 +80 +39 +00 +0f +8f +90 +9a +ff +ff +c7 +07 +35 +01 +01 +00 +c7 +47 +04 +01 +01 +00 +00 +e9 +0f +46 +00 +00 +41 +80 +39 +00 +0f +8f +74 +9a +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +66 +01 +00 +e9 +d0 +45 +00 +00 +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +a9 +00 +00 +00 +80 +fa +52 +0f +8e +4b +9a +ff +ff +e9 +86 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +38 +9a +ff +ff +e9 +88 +00 +00 +00 +80 +fa +73 +74 +6e +e9 +29 +9a +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +13 +9a +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +03 +9a +ff +ff +eb +25 +80 +fa +73 +0f +85 +f8 +99 +ff +ff +41 +80 +39 +00 +0f +8f +eb +99 +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +f3 +02 +00 +e9 +6a +45 +00 +00 +41 +80 +39 +00 +0f +8f +cf +99 +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +f2 +02 +00 +e9 +2b +45 +00 +00 +41 +80 +39 +00 +0f +8f +b3 +99 +ff +ff +c7 +07 +35 +01 +01 +00 +e9 +98 +13 +00 +00 +41 +80 +39 +00 +0f +8f +9e +99 +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +66 +02 +00 +e9 +fa +44 +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +79 +99 +ff +ff +eb +56 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +69 +99 +ff +ff +eb +0a +80 +fa +73 +74 +41 +e9 +5d +99 +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +b0 +00 +00 +00 +80 +fa +52 +0f +8e +43 +99 +ff +ff +e9 +86 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +30 +99 +ff +ff +e9 +8f +00 +00 +00 +80 +fa +73 +74 +6e +e9 +21 +99 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +0b +99 +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +fb +98 +ff +ff +eb +25 +80 +fa +73 +0f +85 +f0 +98 +ff +ff +41 +80 +39 +00 +0f +8f +e3 +98 +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +f3 +00 +00 +e9 +62 +44 +00 +00 +41 +80 +39 +00 +0f +8f +c7 +98 +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +f2 +00 +00 +e9 +23 +44 +00 +00 +41 +80 +39 +00 +0f +8f +ab +98 +ff +ff +c7 +07 +35 +01 +01 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +2a +44 +00 +00 +41 +80 +39 +00 +0f +8f +8f +98 +ff +ff +c7 +07 +51 +01 +01 +00 +c7 +47 +04 +01 +66 +00 +00 +e9 +eb +43 +00 +00 +41 +80 +39 +00 +0f +8f +73 +98 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +f8 +00 +00 +e9 +3b +4b +00 +00 +41 +80 +39 +00 +0f +8f +57 +98 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +fc +00 +00 +e9 +1f +4b +00 +00 +41 +80 +39 +00 +0f +8f +3b +98 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +fa +00 +00 +e9 +03 +4b +00 +00 +41 +8a +11 +80 +fa +53 +74 +6a +80 +fa +73 +74 +65 +e9 +1a +98 +ff +ff +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +09 +98 +ff +ff +41 +8a +11 +80 +fa +55 +74 +09 +80 +fa +75 +0f +85 +f8 +97 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +e7 +97 +ff +ff +41 +8a +11 +80 +fa +48 +74 +09 +80 +fa +68 +0f +85 +d6 +97 +ff +ff +41 +80 +39 +00 +0f +8f +c9 +97 +ff +ff +c7 +07 +a5 +fe +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +30 +44 +00 +00 +41 +80 +39 +00 +0f +8f +ad +97 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +06 +0f +00 +e9 +be +43 +00 +00 +41 +8a +11 +80 +fa +45 +7f +0f +84 +d2 +7e +15 +80 +fa +44 +0f +8e +86 +97 +ff +ff +eb +45 +80 +fa +65 +74 +40 +e9 +7a +97 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +99 +20 +00 +e9 +2c +48 +00 +00 +41 +80 +39 +00 +0f +8f +5e +97 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +34 +48 +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +99 +40 +00 +e9 +47 +48 +00 +00 +41 +80 +39 +00 +0f +8f +35 +97 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +0b +48 +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +98 +40 +00 +e9 +1e +48 +00 +00 +41 +80 +39 +00 +0f +8f +0c +97 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +98 +10 +00 +e9 +d4 +49 +00 +00 +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +ec +96 +ff +ff +41 +80 +39 +00 +0f +8f +df +96 +ff +ff +c7 +07 +0d +ee +00 +00 +e9 +c7 +18 +00 +00 +41 +8a +11 +80 +fa +2f +0f +8e +cb +96 +ff +ff +80 +fa +35 +0f +8e +5b +08 +00 +00 +e9 +bd +96 +ff +ff +41 +8a +11 +80 +fa +57 +7f +2e +80 +fa +42 +7f +12 +84 +d2 +7e +4f +80 +fa +41 +0f +8e +a0 +96 +ff +ff +e9 +14 +08 +00 +00 +80 +fa +44 +0f +84 +c5 +07 +00 +00 +80 +fa +56 +0f +8e +89 +96 +ff +ff +e9 +da +07 +00 +00 +80 +fa +63 +7f +0e +80 +fa +62 +0f +84 +ef +07 +00 +00 +e9 +71 +96 +ff +ff +80 +fa +64 +0f +8e +9b +07 +00 +00 +80 +fa +77 +0f +84 +b5 +07 +00 +00 +e9 +5a +96 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +88 +40 +00 +00 +0f +be +43 +01 +83 +e8 +30 +e9 +3e +08 +00 +00 +41 +8a +11 +80 +fa +58 +0f +84 +46 +07 +00 +00 +80 +fa +78 +0f +84 +3d +07 +00 +00 +e9 +2a +96 +ff +ff +41 +8a +11 +80 +fa +58 +7f +17 +80 +fa +50 +0f +84 +05 +07 +00 +00 +80 +fa +57 +0f +8e +10 +96 +ff +ff +e9 +d5 +06 +00 +00 +80 +fa +70 +7f +0e +80 +fa +6f +0f +8e +fd +95 +ff +ff +e9 +e4 +06 +00 +00 +80 +fa +78 +0f +84 +b9 +06 +00 +00 +e9 +ea +95 +ff +ff +41 +8a +11 +80 +fa +58 +7f +2a +80 +fa +50 +7f +0e +80 +fa +4c +0f +84 +e0 +05 +00 +00 +80 +fa +4f +eb +28 +80 +fa +52 +0f +84 +e7 +05 +00 +00 +80 +fa +57 +0f +8e +bd +95 +ff +ff +e9 +a2 +05 +00 +00 +80 +fa +70 +7f +17 +80 +fa +6c +0f +84 +b6 +05 +00 +00 +80 +fa +6f +0f +8e +a1 +95 +ff +ff +e9 +d9 +05 +00 +00 +80 +fa +72 +7f +0e +80 +fa +71 +0f +8e +8e +95 +ff +ff +e9 +aa +05 +00 +00 +80 +fa +78 +0f +84 +6a +05 +00 +00 +e9 +7b +95 +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +49 +83 +f8 +2f +0f +87 +69 +95 +ff +ff +ff +24 +85 +3d +25 +01 +00 +41 +8a +11 +80 +fa +54 +7f +17 +80 +fa +50 +0f +84 +a0 +02 +00 +00 +80 +fa +53 +0f +8e +48 +95 +ff +ff +e9 +f2 +02 +00 +00 +80 +fa +70 +7f +0e +80 +fa +6f +0f +8e +35 +95 +ff +ff +e9 +7f +02 +00 +00 +80 +fa +74 +0f +84 +d6 +02 +00 +00 +e9 +22 +95 +ff +ff +41 +8a +11 +80 +fa +50 +0f +84 +43 +02 +00 +00 +80 +fa +70 +0f +84 +3a +02 +00 +00 +e9 +08 +95 +ff +ff +41 +8a +11 +80 +fa +52 +7f +17 +80 +fa +4c +0f +84 +fa +01 +00 +00 +80 +fa +51 +0f +8e +ee +94 +ff +ff +e9 +01 +02 +00 +00 +80 +fa +6c +7f +0e +80 +fa +6b +0f +8e +db +94 +ff +ff +e9 +d9 +01 +00 +00 +80 +fa +72 +0f +84 +e5 +01 +00 +00 +e9 +c8 +94 +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +44 +83 +f8 +30 +0f +87 +b6 +94 +ff +ff +ff +24 +85 +fd +25 +01 +00 +41 +80 +39 +00 +0f +8f +a2 +94 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +d0 +3e +00 +00 +c7 +07 +54 +00 +00 +00 +e9 +d6 +3e +00 +00 +41 +80 +39 +00 +0f +8f +80 +94 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +ae +3e +00 +00 +c7 +07 +56 +00 +00 +00 +e9 +b4 +3e +00 +00 +41 +80 +39 +00 +0f +8f +5e +94 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +aa +0f +00 +c7 +47 +08 +10 +00 +08 +00 +e9 +26 +47 +00 +00 +41 +8a +11 +80 +fa +52 +0f +84 +a1 +00 +00 +00 +80 +fa +72 +0f +84 +98 +00 +00 +00 +e9 +2e +94 +ff +ff +41 +8a +11 +80 +fa +43 +74 +76 +80 +fa +63 +74 +71 +e9 +1c +94 +ff +ff +41 +8a +11 +80 +fa +44 +74 +37 +80 +fa +64 +74 +32 +e9 +0a +94 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +f9 +93 +ff +ff +41 +80 +39 +00 +0f +8f +ec +93 +ff +ff +c7 +07 +09 +07 +01 +00 +c7 +47 +04 +01 +7d +00 +00 +e9 +6e +38 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +cc +93 +ff +ff +41 +80 +39 +00 +0f +8f +bf +93 +ff +ff +c7 +07 +09 +07 +01 +00 +c7 +47 +04 +01 +7b +00 +00 +e9 +41 +38 +00 +00 +41 +80 +39 +00 +0f +8f +a3 +93 +ff +ff +c7 +07 +ed +06 +01 +00 +e9 +25 +38 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +8a +93 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +74 +93 +ff +ff +eb +2c +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +64 +93 +ff +ff +eb +0a +80 +fa +73 +74 +17 +e9 +58 +93 +ff +ff +41 +8a +11 +80 +fa +53 +74 +37 +80 +fa +73 +74 +32 +e9 +46 +93 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +35 +93 +ff +ff +41 +80 +39 +00 +0f +8f +28 +93 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +52 +f3 +00 +e9 +a7 +3e +00 +00 +41 +80 +39 +00 +0f +8f +0c +93 +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +52 +00 +00 +e9 +8b +3e +00 +00 +41 +80 +39 +00 +0f +8f +f0 +92 +ff +ff +c7 +07 +6d +ec +00 +00 +e9 +5e +0a +00 +00 +41 +80 +39 +00 +0f +8f +db +92 +ff +ff +c7 +07 +6d +ec +00 +00 +e9 +02 +0a +00 +00 +41 +80 +39 +00 +0f +8f +c6 +92 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +f4 +3c +00 +00 +c7 +07 +c0 +00 +00 +00 +e9 +fa +3c +00 +00 +41 +8a +11 +80 +fa +5a +7f +25 +80 +fa +45 +7f +09 +84 +d2 +7e +3d +80 +fa +44 +eb +0c +80 +fa +4e +0f +84 +b4 +00 +00 +00 +80 +fa +59 +0f +8e +86 +92 +ff +ff +e9 +d2 +00 +00 +00 +80 +fa +6d +7f +05 +80 +fa +65 +eb +0c +80 +fa +6e +0f +8e +93 +00 +00 +00 +80 +fa +7a +0f +84 +b6 +00 +00 +00 +e9 +60 +92 +ff +ff +c7 +07 +01 +00 +00 +00 +c7 +47 +04 +f3 +00 +00 +00 +e9 +bf +13 +00 +00 +41 +8a +11 +80 +fa +4e +7f +19 +80 +fa +45 +7f +04 +84 +d2 +eb +4a +80 +fa +46 +7e +25 +80 +fa +4d +0f +8e +2f +92 +ff +ff +eb +36 +80 +fa +66 +7f +0b +80 +fa +65 +0f +8e +1f +92 +ff +ff +eb +0a +80 +fa +6e +74 +21 +e9 +13 +92 +ff +ff +41 +80 +39 +00 +0f +8f +09 +92 +ff +ff +c7 +07 +ad +f2 +00 +00 +c7 +47 +04 +02 +ca +00 +00 +e9 +d1 +44 +00 +00 +41 +80 +39 +00 +0f +8f +ed +91 +ff +ff +c7 +07 +ad +f2 +00 +00 +c7 +47 +04 +02 +c2 +00 +00 +e9 +b5 +44 +00 +00 +41 +8a +11 +80 +fa +5a +7f +0a +80 +fa +45 +74 +3b +80 +fa +59 +eb +08 +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +be +91 +ff +ff +eb +26 +80 +fa +7a +74 +21 +e9 +b2 +91 +ff +ff +41 +80 +39 +00 +0f +8f +a5 +91 +ff +ff +c7 +07 +01 +00 +00 +00 +c7 +47 +04 +f4 +00 +00 +00 +e9 +04 +13 +00 +00 +41 +80 +39 +00 +0f +8f +89 +91 +ff +ff +c7 +07 +01 +00 +00 +00 +c7 +47 +04 +f2 +00 +00 +00 +e9 +e8 +12 +00 +00 +41 +80 +39 +00 +0f +8f +6d +91 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +9b +3b +00 +00 +c7 +07 +52 +00 +00 +00 +e9 +a1 +3b +00 +00 +41 +80 +39 +00 +0f +8f +4b +91 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +79 +3b +00 +00 +c7 +07 +57 +00 +00 +00 +e9 +7f +3b +00 +00 +41 +8a +11 +80 +fa +53 +0f +84 +e0 +00 +00 +00 +80 +fa +73 +0f +84 +d7 +00 +00 +00 +e9 +1c +91 +ff +ff +41 +8a +11 +80 +fa +53 +0f +84 +92 +00 +00 +00 +80 +fa +73 +0f +84 +89 +00 +00 +00 +e9 +02 +91 +ff +ff +41 +8a +11 +80 +fa +4d +74 +4f +80 +fa +6d +74 +4a +e9 +f0 +90 +ff +ff +41 +8a +11 +80 +fa +48 +74 +09 +80 +fa +68 +0f +85 +df +90 +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +ce +90 +ff +ff +41 +80 +39 +00 +0f +8f +c1 +90 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +36 +0f +00 +c7 +47 +08 +20 +00 +0a +00 +e9 +89 +43 +00 +00 +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +9a +90 +ff +ff +41 +80 +39 +00 +0f +8f +8d +90 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +33 +0f +00 +e9 +d3 +33 +00 +00 +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +6d +90 +ff +ff +41 +80 +39 +00 +0f +8f +60 +90 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +32 +0f +00 +c7 +47 +08 +10 +00 +80 +00 +e9 +28 +43 +00 +00 +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +39 +90 +ff +ff +41 +80 +39 +00 +0f +8f +2c +90 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +31 +0f +00 +c7 +47 +08 +10 +00 +00 +00 +e9 +f4 +42 +00 +00 +41 +80 +39 +00 +0f +8f +09 +90 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +37 +3a +00 +00 +c7 +07 +51 +00 +00 +00 +e9 +3d +3a +00 +00 +41 +80 +39 +00 +0f +8f +e7 +8f +ff +ff +c7 +07 +6d +ec +00 +00 +e9 +f2 +06 +00 +00 +41 +80 +39 +00 +0f +8f +d2 +8f +ff +ff +c7 +07 +6d +ec +00 +00 +c7 +47 +04 +08 +03 +00 +00 +e9 +9a +42 +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +ad +8f +ff +ff +eb +2c +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +9d +8f +ff +ff +eb +0a +80 +fa +73 +74 +17 +e9 +91 +8f +ff +ff +41 +8a +11 +80 +fa +53 +74 +37 +80 +fa +73 +74 +32 +e9 +7f +8f +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +6e +8f +ff +ff +41 +80 +39 +00 +0f +8f +61 +8f +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +53 +f3 +00 +e9 +e0 +3a +00 +00 +41 +80 +39 +00 +0f +8f +45 +8f +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +53 +00 +00 +e9 +c4 +3a +00 +00 +41 +80 +39 +00 +0f +8f +29 +8f +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +57 +39 +00 +00 +c7 +07 +53 +00 +00 +00 +e9 +5d +39 +00 +00 +41 +80 +39 +00 +0f +8f +07 +8f +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +35 +39 +00 +00 +c7 +07 +55 +00 +00 +00 +e9 +3b +39 +00 +00 +41 +80 +39 +00 +0f +8f +e5 +8e +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +13 +39 +00 +00 +c7 +07 +50 +00 +00 +00 +e9 +19 +39 +00 +00 +41 +80 +39 +00 +0f +8f +c3 +8e +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +f1 +38 +00 +00 +0f +be +43 +01 +83 +e8 +30 +e9 +f3 +00 +00 +00 +41 +80 +39 +00 +0f +8f +a0 +8e +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +ce +38 +00 +00 +0f +be +43 +01 +83 +e8 +30 +e9 +f6 +00 +00 +00 +41 +80 +39 +00 +0f +8f +7d +8e +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +ab +38 +00 +00 +0f +be +43 +01 +83 +e8 +30 +e9 +87 +00 +00 +00 +41 +8a +11 +80 +fa +57 +7f +27 +80 +fa +42 +7f +0f +84 +d2 +7e +3c +80 +fa +41 +0f +8e +4a +8e +ff +ff +eb +4d +80 +fa +44 +74 +6e +80 +fa +56 +0f +8e +3a +8e +ff +ff +e9 +86 +00 +00 +00 +80 +fa +63 +7f +0a +80 +fa +62 +74 +30 +e9 +26 +8e +ff +ff +80 +fa +64 +7e +4c +80 +fa +77 +74 +6d +e9 +17 +8e +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +45 +38 +00 +00 +0f +be +43 +02 +83 +e8 +26 +83 +c8 +50 +e9 +df +33 +00 +00 +41 +80 +39 +00 +0f +8f +f1 +8d +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +1f +38 +00 +00 +0f +be +43 +02 +83 +e8 +26 +83 +c8 +10 +e9 +b9 +33 +00 +00 +41 +80 +39 +00 +0f +8f +cb +8d +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +f9 +37 +00 +00 +0f +be +43 +02 +83 +e8 +26 +83 +c8 +40 +e9 +93 +33 +00 +00 +41 +80 +39 +00 +0f +8f +a5 +8d +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +d3 +37 +00 +00 +0f +be +43 +02 +83 +e8 +26 +83 +c8 +30 +e9 +6d +33 +00 +00 +41 +8a +11 +80 +fa +52 +7f +17 +80 +fa +48 +0f +84 +74 +07 +00 +00 +80 +fa +51 +0f +8e +72 +8d +ff +ff +e9 +78 +07 +00 +00 +80 +fa +68 +7f +0e +80 +fa +67 +0f +8e +5f +8d +ff +ff +e9 +53 +07 +00 +00 +80 +fa +72 +0f +84 +5c +07 +00 +00 +e9 +4c +8d +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +4d +0f +84 +d4 +06 +00 +00 +80 +fa +52 +0f +8e +32 +8d +ff +ff +e9 +9d +06 +00 +00 +80 +fa +6d +7f +0e +80 +fa +6c +0f +8e +1f +8d +ff +ff +e9 +b3 +06 +00 +00 +80 +fa +73 +0f +84 +81 +06 +00 +00 +e9 +0c +8d +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +41 +0f +84 +db +05 +00 +00 +80 +fa +52 +0f +8e +f2 +8c +ff +ff +e9 +00 +06 +00 +00 +80 +fa +61 +7f +0e +80 +fa +60 +0f +8e +df +8c +ff +ff +e9 +ba +05 +00 +00 +80 +fa +73 +0f +84 +e4 +05 +00 +00 +e9 +cc +8c +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +45 +0f +84 +4c +05 +00 +00 +80 +fa +52 +0f +8e +b2 +8c +ff +ff +e9 +22 +05 +00 +00 +80 +fa +65 +7f +0e +80 +fa +64 +0f +8e +9f +8c +ff +ff +e9 +2b +05 +00 +00 +80 +fa +73 +0f +84 +06 +05 +00 +00 +e9 +8c +8c +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +c3 +04 +00 +00 +80 +fa +52 +0f +8e +72 +8c +ff +ff +e9 +99 +04 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +5f +8c +ff +ff +e9 +a2 +04 +00 +00 +80 +fa +73 +0f +84 +7d +04 +00 +00 +e9 +4c +8c +ff +ff +41 +8a +11 +80 +fa +44 +0f +84 +3f +04 +00 +00 +80 +fa +64 +0f +84 +36 +04 +00 +00 +e9 +32 +8c +ff +ff +41 +8a +11 +80 +fa +44 +0f +84 +f1 +03 +00 +00 +80 +fa +64 +0f +84 +e8 +03 +00 +00 +e9 +18 +8c +ff +ff +41 +8a +11 +80 +fa +53 +0f +84 +aa +03 +00 +00 +80 +fa +73 +0f +84 +a1 +03 +00 +00 +e9 +fe +8b +ff +ff +41 +8a +11 +80 +fa +4f +7f +33 +80 +fa +42 +7f +0e +80 +fa +41 +0f +84 +3d +01 +00 +00 +e9 +e3 +8b +ff +ff +80 +fa +43 +0f +8e +e1 +00 +00 +00 +80 +fa +44 +0f +8e +0c +01 +00 +00 +80 +fa +4e +0f +8e +c8 +8b +ff +ff +e9 +e4 +00 +00 +00 +80 +fa +63 +7f +17 +80 +fa +61 +0f +84 +0a +01 +00 +00 +80 +fa +62 +0f +8e +ac +8b +ff +ff +e9 +ae +00 +00 +00 +80 +fa +64 +0f +8e +d9 +00 +00 +00 +80 +fa +6f +0f +84 +b6 +00 +00 +00 +e9 +90 +8b +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +4c +74 +6e +80 +fa +52 +0f +8e +7a +8b +ff +ff +eb +47 +80 +fa +6c +7f +0b +80 +fa +6b +0f +8e +6a +8b +ff +ff +eb +53 +80 +fa +73 +74 +32 +e9 +5e +8b +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +4d +8b +ff +ff +41 +80 +39 +00 +0f +8f +40 +8b +ff +ff +c7 +07 +3d +f7 +00 +00 +c7 +47 +04 +01 +00 +03 +00 +e9 +24 +03 +00 +00 +41 +80 +39 +00 +0f +8f +24 +8b +ff +ff +c7 +07 +ad +e3 +00 +00 +c7 +47 +04 +02 +b6 +00 +00 +e9 +d6 +3b +00 +00 +41 +80 +39 +00 +0f +8f +08 +8b +ff +ff +c7 +07 +ed +f5 +00 +00 +c7 +47 +04 +03 +03 +00 +00 +e9 +66 +31 +00 +00 +41 +8a +11 +80 +fa +4b +0f +84 +6f +02 +00 +00 +80 +fa +6b +0f +84 +66 +02 +00 +00 +e9 +df +8a +ff +ff +41 +8a +11 +80 +fa +50 +0f +84 +a1 +01 +00 +00 +80 +fa +70 +0f +84 +98 +01 +00 +00 +e9 +c5 +8a +ff +ff +41 +8a +11 +80 +fa +53 +0f +84 +b0 +00 +00 +00 +80 +fa +73 +0f +84 +a7 +00 +00 +00 +e9 +ab +8a +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +9a +8a +ff +ff +41 +8a +11 +80 +fa +41 +74 +09 +80 +fa +61 +0f +85 +89 +8a +ff +ff +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +78 +8a +ff +ff +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +67 +8a +ff +ff +41 +8a +11 +84 +d2 +7e +0a +80 +fa +32 +74 +17 +e9 +53 +8a +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +07 +0f +00 +e9 +80 +33 +00 +00 +41 +8a +11 +80 +fa +38 +0f +85 +38 +8a +ff +ff +41 +8a +11 +80 +fa +36 +0f +85 +2c +8a +ff +ff +41 +80 +39 +00 +0f +8f +1f +8a +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +05 +0f +00 +c7 +47 +08 +02 +00 +20 +00 +e9 +e7 +3c +00 +00 +41 +8a +11 +80 +fa +57 +7f +23 +80 +fa +44 +7f +0a +80 +fa +42 +74 +48 +80 +fa +43 +eb +21 +80 +fa +51 +0f +84 +8e +00 +00 +00 +80 +fa +56 +0f +8e +e0 +89 +ff +ff +eb +4b +80 +fa +64 +7f +10 +80 +fa +62 +74 +25 +80 +fa +63 +0f +8e +cb +89 +ff +ff +eb +52 +80 +fa +71 +7f +0b +80 +fa +70 +0f +8e +bb +89 +ff +ff +eb +5e +80 +fa +77 +74 +21 +e9 +af +89 +ff +ff +41 +80 +39 +00 +0f +8f +a2 +89 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +ac +00 +00 +e9 +6a +3c +00 +00 +41 +80 +39 +00 +0f +8f +86 +89 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +ad +10 +00 +e9 +4e +3c +00 +00 +41 +80 +39 +00 +0f +8f +6a +89 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +ad +20 +00 +e9 +1c +3a +00 +00 +41 +80 +39 +00 +0f +8f +4e +89 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +24 +3a +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +ad +40 +00 +e9 +37 +3a +00 +00 +41 +8a +11 +80 +fa +5a +7f +1e +80 +fa +45 +7f +09 +84 +d2 +7e +2e +80 +fa +44 +eb +08 +80 +fa +4e +74 +52 +80 +fa +59 +0f +8e +0b +89 +ff +ff +eb +2b +80 +fa +6d +7f +05 +80 +fa +65 +eb +08 +80 +fa +6e +7e +38 +80 +fa +7a +74 +17 +e9 +f0 +88 +ff +ff +c7 +07 +2d +f4 +00 +00 +c7 +47 +04 +08 +02 +00 +00 +e9 +b8 +3b +00 +00 +41 +80 +39 +00 +0f +8f +d4 +88 +ff +ff +c7 +07 +2d +f4 +00 +00 +c7 +47 +04 +08 +01 +00 +00 +e9 +9c +3b +00 +00 +41 +8a +11 +80 +fa +5a +7f +0a +80 +fa +45 +74 +1e +80 +fa +59 +eb +08 +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +a5 +88 +ff +ff +eb +09 +80 +fa +7a +0f +85 +9a +88 +ff +ff +41 +80 +39 +00 +0f +8f +8d +88 +ff +ff +c7 +07 +2d +f4 +00 +00 +c7 +47 +04 +08 +00 +00 +00 +e9 +55 +3b +00 +00 +41 +80 +39 +00 +0f +8f +71 +88 +ff +ff +c7 +07 +01 +00 +00 +00 +c7 +47 +04 +f0 +00 +00 +00 +e9 +d0 +09 +00 +00 +41 +8a +11 +80 +fa +57 +74 +09 +80 +fa +77 +0f +85 +51 +88 +ff +ff +41 +80 +39 +00 +0f +8f +44 +88 +ff +ff +c7 +07 +3d +f7 +00 +00 +c7 +47 +04 +01 +01 +06 +00 +e9 +55 +34 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +24 +88 +ff +ff +41 +80 +39 +00 +0f +8f +17 +88 +ff +ff +c7 +07 +3d +f7 +00 +00 +c7 +47 +04 +01 +00 +02 +00 +c7 +47 +08 +02 +00 +90 +00 +e9 +df +3a +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +f0 +87 +ff +ff +41 +80 +39 +00 +0f +8f +e3 +87 +ff +ff +c7 +07 +79 +d4 +00 +00 +c7 +47 +04 +01 +01 +0f +03 +e9 +f4 +33 +00 +00 +41 +80 +39 +00 +0f +8f +c7 +87 +ff +ff +c7 +07 +ad +e3 +00 +00 +c7 +47 +04 +02 +b5 +00 +00 +e9 +79 +38 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +a7 +87 +ff +ff +41 +80 +39 +00 +0f +8f +9a +87 +ff +ff +c7 +07 +79 +d4 +00 +00 +c7 +47 +04 +01 +01 +0f +02 +e9 +ab +33 +00 +00 +41 +80 +39 +00 +0f +8f +7e +87 +ff +ff +c7 +07 +ad +e3 +00 +00 +c7 +47 +04 +02 +b4 +00 +00 +e9 +30 +38 +00 +00 +41 +8a +11 +80 +fa +4e +74 +09 +80 +fa +6e +0f +85 +5e +87 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +4d +87 +ff +ff +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +3c +87 +ff +ff +41 +80 +39 +00 +0f +8f +2f +87 +ff +ff +c7 +07 +41 +d4 +00 +00 +c7 +47 +04 +01 +e8 +ae +0f +e9 +96 +33 +00 +00 +41 +8a +11 +80 +fa +56 +7f +0f +84 +d2 +7e +15 +80 +fa +55 +0f +8e +08 +87 +ff +ff +eb +45 +80 +fa +76 +74 +40 +e9 +fc +86 +ff +ff +c7 +07 +0d +e3 +00 +00 +c7 +47 +04 +03 +00 +00 +00 +e9 +c4 +39 +00 +00 +41 +80 +39 +00 +0f +8f +e0 +86 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +ab +38 +00 +00 +c7 +07 +6d +e3 +00 +00 +c7 +47 +04 +02 +c4 +00 +00 +e9 +9b +39 +00 +00 +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +b3 +86 +ff +ff +41 +80 +39 +00 +0f +8f +a6 +86 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +c9 +00 +00 +c7 +47 +08 +01 +00 +00 +00 +e9 +6e +39 +00 +00 +41 +80 +39 +00 +0f +8f +83 +86 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +4e +38 +00 +00 +c7 +07 +6d +e3 +00 +00 +c7 +47 +04 +02 +c5 +00 +00 +e9 +3e +39 +00 +00 +41 +8a +11 +80 +fa +58 +74 +09 +80 +fa +78 +0f +85 +56 +86 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +45 +86 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +34 +86 +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +23 +86 +ff +ff +41 +80 +39 +00 +0f +8f +16 +86 +ff +ff +c7 +07 +a5 +01 +01 +00 +c7 +47 +04 +01 +02 +00 +00 +e9 +95 +31 +00 +00 +41 +8a +11 +80 +fa +46 +74 +26 +80 +fa +66 +74 +21 +e9 +f5 +85 +ff +ff +41 +80 +39 +00 +0f +8f +e8 +85 +ff +ff +c7 +07 +ed +f5 +00 +00 +c7 +47 +04 +03 +02 +00 +00 +e9 +46 +2c +00 +00 +41 +80 +39 +00 +0f +8f +cc +85 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +97 +37 +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +9f +00 +00 +e9 +87 +38 +00 +00 +41 +8a +11 +80 +fa +36 +0f +84 +d4 +04 +00 +00 +e9 +9f +85 +ff +ff +41 +8a +11 +80 +fa +32 +0f +84 +ae +04 +00 +00 +e9 +8e +85 +ff +ff +41 +8a +11 +80 +fa +34 +0f +84 +7b +04 +00 +00 +e9 +7d +85 +ff +ff +41 +8a +11 +80 +fa +53 +7f +2a +80 +fa +44 +7f +0e +80 +fa +41 +0f +84 +bc +03 +00 +00 +80 +fa +43 +eb +28 +80 +fa +4d +0f +84 +29 +04 +00 +00 +80 +fa +52 +0f +8e +50 +85 +ff +ff +e9 +c9 +03 +00 +00 +80 +fa +64 +7f +17 +80 +fa +61 +0f +84 +92 +03 +00 +00 +80 +fa +63 +0f +8e +34 +85 +ff +ff +e9 +d6 +03 +00 +00 +80 +fa +6d +7f +0e +80 +fa +6c +0f +8e +21 +85 +ff +ff +e9 +ec +03 +00 +00 +80 +fa +73 +0f +84 +91 +03 +00 +00 +e9 +0e +85 +ff +ff +41 +8a +11 +80 +fa +44 +7f +17 +80 +fa +42 +0f +8e +fd +84 +ff +ff +80 +fa +43 +0f +8e +50 +02 +00 +00 +e9 +f5 +01 +00 +00 +80 +fa +62 +0f +8e +e6 +84 +ff +ff +80 +fa +63 +0f +8e +39 +02 +00 +00 +80 +fa +64 +0f +8e +da +01 +00 +00 +e9 +cf +84 +ff +ff +41 +80 +39 +00 +0f +8f +c2 +84 +ff +ff +c7 +07 +14 +00 +00 +00 +e9 +03 +2f +00 +00 +41 +80 +39 +00 +0f +8f +ad +84 +ff +ff +c7 +07 +10 +00 +00 +00 +e9 +ee +2e +00 +00 +41 +8a +11 +80 +fa +44 +74 +6b +80 +fa +64 +74 +66 +e9 +93 +84 +ff +ff +41 +8a +11 +80 +fa +50 +74 +1f +80 +fa +70 +74 +1a +e9 +81 +84 +ff +ff +41 +80 +39 +00 +0f +8f +74 +84 +ff +ff +c7 +07 +30 +00 +00 +00 +e9 +b5 +2e +00 +00 +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +5b +84 +ff +ff +41 +80 +39 +00 +0f +8f +4e +84 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +19 +36 +00 +00 +c7 +07 +a5 +f6 +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +9f +2a +00 +00 +41 +8a +11 +80 +fa +50 +7f +1f +80 +fa +4d +7f +0a +84 +d2 +0f +8f +1a +84 +ff +ff +eb +2a +80 +fa +4e +7e +37 +80 +fa +4f +0f +8e +0a +84 +ff +ff +eb +3e +80 +fa +6e +7f +0b +80 +fa +6d +0f +8e +fa +83 +ff +ff +eb +1c +80 +fa +70 +74 +29 +e9 +ee +83 +ff +ff +c7 +07 +ed +e3 +00 +00 +c7 +47 +04 +17 +20 +04 +00 +e9 +b6 +36 +00 +00 +41 +8a +11 +80 +fa +50 +74 +73 +80 +fa +70 +74 +6e +e9 +cd +83 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +b7 +83 +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +a7 +83 +ff +ff +eb +25 +80 +fa +73 +0f +85 +9c +83 +ff +ff +41 +80 +39 +00 +0f +8f +8f +83 +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +54 +00 +00 +e9 +0e +2f +00 +00 +41 +80 +39 +00 +0f +8f +73 +83 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +54 +66 +00 +e9 +cf +2e +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +4e +83 +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +3e +83 +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +32 +83 +ff +ff +41 +80 +39 +00 +0f +8f +25 +83 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +55 +66 +00 +e9 +81 +2e +00 +00 +41 +80 +39 +00 +0f +8f +09 +83 +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +55 +00 +00 +e9 +88 +2e +00 +00 +41 +8a +11 +80 +fa +53 +7f +22 +80 +fa +4f +7f +0a +84 +d2 +0f +8f +e2 +82 +ff +ff +eb +2d +80 +fa +50 +7e +56 +80 +fa +52 +0f +8e +d2 +82 +ff +ff +e9 +84 +00 +00 +00 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +bf +82 +ff +ff +eb +38 +80 +fa +73 +74 +6f +e9 +b3 +82 +ff +ff +c7 +07 +ed +e3 +00 +00 +c7 +47 +04 +17 +00 +00 +00 +e9 +7b +35 +00 +00 +41 +80 +39 +00 +0f +8f +97 +82 +ff +ff +c7 +07 +ed +e3 +00 +00 +c7 +47 +04 +17 +10 +02 +00 +e9 +5f +35 +00 +00 +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +b0 +00 +00 +00 +80 +fa +52 +0f +8e +6e +82 +ff +ff +e9 +86 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +5b +82 +ff +ff +e9 +8f +00 +00 +00 +80 +fa +73 +74 +6e +e9 +4c +82 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +36 +82 +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +26 +82 +ff +ff +eb +25 +80 +fa +73 +0f +85 +1b +82 +ff +ff +41 +80 +39 +00 +0f +8f +0e +82 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +58 +f3 +00 +e9 +8d +2d +00 +00 +41 +80 +39 +00 +0f +8f +f2 +81 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +58 +f2 +00 +e9 +4e +2d +00 +00 +41 +80 +39 +00 +0f +8f +d6 +81 +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +58 +00 +00 +e9 +55 +2d +00 +00 +41 +80 +39 +00 +0f +8f +ba +81 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +58 +66 +00 +e9 +16 +2d +00 +00 +41 +80 +39 +00 +0f +8f +9e +81 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +69 +33 +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +37 +00 +00 +e9 +59 +34 +00 +00 +41 +80 +39 +00 +0f +8f +75 +81 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +40 +33 +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +3f +00 +00 +e9 +30 +34 +00 +00 +41 +80 +39 +00 +0f +8f +4c +81 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +17 +33 +00 +00 +c7 +07 +0d +ea +00 +00 +c7 +47 +04 +02 +01 +00 +00 +e9 +07 +34 +00 +00 +41 +80 +39 +00 +0f +8f +23 +81 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +ee +32 +00 +00 +c7 +07 +0d +ea +00 +00 +c7 +47 +04 +02 +00 +00 +00 +e9 +de +33 +00 +00 +41 +80 +39 +00 +0f +8f +fa +80 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +14 +02 +00 +00 +c7 +07 +02 +00 +00 +00 +e9 +1a +02 +00 +00 +41 +80 +39 +00 +0f +8f +d8 +80 +ff +ff +c7 +07 +02 +00 +00 +00 +e9 +1e +02 +00 +00 +41 +80 +39 +00 +0f +8f +c3 +80 +ff +ff +80 +3d +00 +00 +00 +00 +40 +75 +13 +83 +ec +08 +68 +0d +0e +01 +00 +56 +e8 +c8 +5f +ff +ff +e9 +98 +31 +00 +00 +c7 +07 +02 +00 +00 +00 +e9 +06 +02 +00 +00 +41 +8a +11 +80 +fa +36 +0f +84 +ea +01 +00 +00 +e9 +8e +80 +ff +ff +41 +8a +11 +80 +fa +32 +0f +84 +c0 +01 +00 +00 +e9 +7d +80 +ff +ff +41 +8a +11 +80 +fa +34 +0f +84 +82 +01 +00 +00 +e9 +6c +80 +ff +ff +41 +8a +11 +80 +fa +50 +7f +12 +84 +d2 +7e +1c +80 +fa +4f +0f +8e +54 +80 +ff +ff +e9 +f9 +00 +00 +00 +80 +fa +70 +0f +84 +f0 +00 +00 +00 +e9 +41 +80 +ff +ff +c7 +07 +ed +e3 +00 +00 +c7 +47 +04 +17 +08 +01 +00 +e9 +09 +33 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +21 +80 +ff +ff +41 +8a +11 +80 +fa +53 +7f +0f +84 +d2 +7e +15 +80 +fa +52 +0f +8e +09 +80 +ff +ff +eb +1c +80 +fa +73 +74 +17 +e9 +fd +7f +ff +ff +c7 +07 +4d +e2 +00 +00 +c7 +47 +04 +06 +00 +00 +00 +e9 +c5 +32 +00 +00 +41 +8a +11 +80 +fa +57 +7f +1a +80 +fa +43 +7f +05 +80 +fa +42 +eb +18 +80 +fa +44 +7e +62 +80 +fa +56 +0f +8e +ce +7f +ff +ff +eb +3b +80 +fa +63 +7f +0b +80 +fa +62 +0f +85 +be +7f +ff +ff +eb +0f +80 +fa +64 +7e +42 +80 +fa +77 +74 +21 +e9 +ad +7f +ff +ff +41 +80 +39 +00 +0f +8f +a0 +7f +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +6e +00 +00 +e9 +68 +32 +00 +00 +41 +80 +39 +00 +0f +8f +84 +7f +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +6f +10 +00 +e9 +4c +32 +00 +00 +41 +80 +39 +00 +0f +8f +68 +7f +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +6f +20 +00 +e9 +1a +30 +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +43 +7f +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +33 +7f +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +27 +7f +ff +ff +41 +80 +39 +00 +0f +8f +1a +7f +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +56 +66 +00 +e9 +76 +2a +00 +00 +41 +80 +39 +00 +0f +8f +fe +7e +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +56 +00 +00 +e9 +7d +2a +00 +00 +41 +80 +39 +00 +0f +8f +e2 +7e +ff +ff +80 +3d +00 +00 +00 +00 +40 +74 +0b +53 +68 +4d +0e +01 +00 +e9 +b7 +2f +00 +00 +c7 +07 +03 +00 +00 +00 +c7 +47 +04 +40 +00 +00 +00 +eb +30 +41 +80 +39 +00 +0f +8f +b5 +7e +ff +ff +c7 +07 +03 +00 +00 +00 +c7 +47 +04 +20 +00 +00 +00 +eb +17 +41 +80 +39 +00 +0f +8f +9c +7e +ff +ff +c7 +07 +03 +00 +00 +00 +c7 +47 +04 +10 +00 +00 +00 +b8 +02 +00 +00 +00 +e9 +82 +31 +00 +00 +41 +8a +11 +80 +fa +53 +74 +4f +80 +fa +73 +74 +4a +e9 +76 +7e +ff +ff +41 +80 +39 +00 +0f +8f +69 +7e +ff +ff +c7 +07 +04 +00 +00 +00 +e9 +56 +31 +00 +00 +41 +8a +11 +80 +fa +2f +0f +8e +55 +7e +ff +ff +80 +fa +37 +0f +8f +4c +7e +ff +ff +41 +80 +39 +00 +0f +8f +3f +7e +ff +ff +0f +be +43 +02 +83 +e8 +30 +0d +b0 +00 +00 +00 +e9 +12 +24 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +20 +7e +ff +ff +41 +80 +39 +00 +0f +8f +13 +7e +ff +ff +c7 +07 +cd +e7 +00 +00 +c7 +47 +04 +14 +00 +00 +00 +e9 +db +30 +00 +00 +41 +8a +11 +80 +fa +58 +0f +84 +bd +1c +00 +00 +80 +fa +78 +0f +84 +b4 +1c +00 +00 +e9 +ea +7d +ff +ff +41 +8a +11 +80 +fa +52 +7f +21 +80 +fa +43 +7f +05 +80 +fa +42 +eb +1f +80 +fa +44 +0f +8e +0f +1c +00 +00 +80 +fa +51 +0f +8e +c6 +7d +ff +ff +e9 +ec +1b +00 +00 +80 +fa +63 +7f +0e +80 +fa +62 +0f +84 +05 +1c +00 +00 +e9 +ae +7d +ff +ff +80 +fa +64 +0f +8e +e5 +1b +00 +00 +80 +fa +72 +0f +84 +c7 +1b +00 +00 +e9 +97 +7d +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +4c +0f +84 +45 +1b +00 +00 +80 +fa +52 +0f +8e +7d +7d +ff +ff +e9 +49 +1b +00 +00 +80 +fa +6c +7f +0e +80 +fa +6b +0f +8e +6a +7d +ff +ff +e9 +24 +1b +00 +00 +80 +fa +73 +0f +84 +2d +1b +00 +00 +e9 +57 +7d +ff +ff +41 +8a +11 +80 +fa +4f +7f +33 +80 +fa +4b +7f +0e +80 +fa +48 +0f +84 +b9 +17 +00 +00 +e9 +3c +7d +ff +ff +80 +fa +4c +0f +8e +c5 +17 +00 +00 +80 +fa +4d +0f +8e +d6 +17 +00 +00 +80 +fa +4e +0f +8e +21 +7d +ff +ff +e9 +54 +17 +00 +00 +80 +fa +6c +7f +17 +80 +fa +68 +0f +84 +86 +17 +00 +00 +80 +fa +6b +0f +8e +05 +7d +ff +ff +e9 +92 +17 +00 +00 +80 +fa +6d +0f +8e +a3 +17 +00 +00 +80 +fa +6f +0f +84 +26 +17 +00 +00 +e9 +e9 +7c +ff +ff +41 +8a +11 +80 +fa +49 +7f +17 +80 +fa +45 +0f +84 +f2 +15 +00 +00 +80 +fa +48 +0f +8e +cf +7c +ff +ff +e9 +d2 +15 +00 +00 +80 +fa +65 +7f +0e +80 +fa +64 +0f +8e +bc +7c +ff +ff +e9 +d1 +15 +00 +00 +80 +fa +69 +0f +84 +b6 +15 +00 +00 +e9 +a9 +7c +ff +ff +41 +8a +11 +80 +fa +4d +0f +84 +60 +15 +00 +00 +80 +fa +6d +0f +84 +57 +15 +00 +00 +e9 +8f +7c +ff +ff +41 +8a +11 +80 +fa +52 +0f +84 +ce +14 +00 +00 +80 +fa +72 +0f +84 +c5 +14 +00 +00 +e9 +75 +7c +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +32 +0f +87 +63 +7c +ff +ff +ff +24 +85 +c1 +26 +01 +00 +41 +8a +11 +80 +fa +44 +0f +84 +92 +0e +00 +00 +80 +fa +64 +0f +84 +89 +0e +00 +00 +e9 +42 +7c +ff +ff +41 +8a +11 +80 +fa +55 +0f +84 +18 +0e +00 +00 +80 +fa +75 +0f +84 +0f +0e +00 +00 +e9 +28 +7c +ff +ff +41 +8a +11 +80 +fa +53 +7f +2a +80 +fa +49 +7f +0e +80 +fa +43 +0f +84 +17 +0c +00 +00 +80 +fa +48 +eb +28 +80 +fa +4f +0f +84 +1b +0c +00 +00 +80 +fa +52 +0f +8e +fb +7b +ff +ff +e9 +bb +0b +00 +00 +80 +fa +69 +7f +17 +80 +fa +63 +0f +84 +ed +0b +00 +00 +80 +fa +68 +0f +8e +df +7b +ff +ff +e9 +85 +0b +00 +00 +80 +fa +6f +7f +0e +80 +fa +6e +0f +8e +cc +7b +ff +ff +e9 +de +0b +00 +00 +80 +fa +73 +0f +84 +83 +0b +00 +00 +e9 +b9 +7b +ff +ff +41 +8a +11 +80 +fa +54 +7f +21 +80 +fa +51 +7f +05 +80 +fa +41 +eb +1f +80 +fa +52 +0f +8e +7d +0a +00 +00 +80 +fa +53 +0f +8e +95 +7b +ff +ff +e9 +43 +0a +00 +00 +80 +fa +71 +7f +0e +80 +fa +61 +0f +84 +4f +0a +00 +00 +e9 +7d +7b +ff +ff +80 +fa +72 +0f +8e +53 +0a +00 +00 +80 +fa +74 +0f +84 +1e +0a +00 +00 +e9 +66 +7b +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +4e +0f +84 +58 +09 +00 +00 +80 +fa +52 +0f +8e +4c +7b +ff +ff +e9 +5c +09 +00 +00 +80 +fa +6e +7f +0e +80 +fa +6d +0f +8e +39 +7b +ff +ff +e9 +37 +09 +00 +00 +80 +fa +73 +0f +84 +40 +09 +00 +00 +e9 +26 +7b +ff +ff +41 +8a +11 +80 +fa +55 +7f +6a +80 +fa +45 +7f +32 +80 +fa +41 +7f +16 +84 +d2 +0f +8e +c3 +00 +00 +00 +80 +fa +40 +0f +8e +00 +7b +ff +ff +e9 +1b +06 +00 +00 +80 +fa +43 +0f +84 +f8 +05 +00 +00 +80 +fa +44 +0f +8e +e9 +7a +ff +ff +e9 +16 +06 +00 +00 +80 +fa +50 +7f +0e +80 +fa +49 +0f +84 +c2 +05 +00 +00 +e9 +d1 +7a +ff +ff +80 +fa +51 +0f +8e +9a +05 +00 +00 +80 +fa +53 +0f +8e +bf +7a +ff +ff +80 +fa +54 +0f +8e +d6 +04 +00 +00 +e9 +69 +05 +00 +00 +80 +fa +68 +7f +2a +80 +fa +62 +7f +0e +80 +fa +61 +0f +84 +be +05 +00 +00 +e9 +99 +7a +ff +ff +80 +fa +63 +0f +8e +96 +05 +00 +00 +80 +fa +65 +0f +84 +b9 +05 +00 +00 +e9 +82 +7a +ff +ff +80 +fa +71 +7f +17 +80 +fa +69 +0f +8e +60 +05 +00 +00 +80 +fa +70 +0f +8e +6b +7a +ff +ff +e9 +38 +05 +00 +00 +80 +fa +73 +0f +8e +5d +7a +ff +ff +80 +fa +74 +0f +8e +74 +04 +00 +00 +80 +fa +75 +0f +8e +03 +05 +00 +00 +e9 +46 +7a +ff +ff +c7 +07 +04 +64 +00 +00 +e9 +5c +1b +00 +00 +41 +8a +11 +80 +fa +53 +0f +84 +22 +04 +00 +00 +80 +fa +73 +0f +84 +19 +04 +00 +00 +e9 +24 +7a +ff +ff +41 +8a +11 +80 +fa +43 +0f +84 +f5 +02 +00 +00 +80 +fa +63 +0f +84 +ec +02 +00 +00 +e9 +0a +7a +ff +ff +41 +8a +11 +80 +fa +41 +0f +84 +9d +02 +00 +00 +80 +fa +61 +0f +84 +94 +02 +00 +00 +e9 +f0 +79 +ff +ff +41 +8a +11 +80 +fa +54 +7f +33 +80 +fa +43 +7f +0e +80 +fa +41 +0f +84 +0e +01 +00 +00 +80 +fa +42 +eb +31 +80 +fa +51 +0f +8e +cc +79 +ff +ff +80 +fa +52 +0f +8e +3d +01 +00 +00 +80 +fa +53 +0f +8e +22 +01 +00 +00 +e9 +03 +01 +00 +00 +80 +fa +63 +7f +17 +80 +fa +61 +0f +84 +db +00 +00 +00 +80 +fa +62 +0f +8e +9e +79 +ff +ff +e9 +b3 +00 +00 +00 +80 +fa +72 +7f +0e +80 +fa +71 +0f +8e +8b +79 +ff +ff +e9 +00 +01 +00 +00 +80 +fa +73 +0f +8e +e5 +00 +00 +00 +80 +fa +74 +0f +8e +c2 +00 +00 +00 +e9 +6f +79 +ff +ff +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +5e +79 +ff +ff +41 +8a +11 +80 +fa +32 +0f +85 +52 +79 +ff +ff +41 +8a +11 +80 +fa +58 +74 +09 +80 +fa +78 +0f +85 +41 +79 +ff +ff +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +29 +79 +ff +ff +eb +1c +80 +fa +70 +74 +17 +e9 +1d +79 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +f1 +d9 +00 +e9 +07 +18 +00 +00 +41 +8a +11 +80 +fa +31 +0f +85 +02 +79 +ff +ff +41 +80 +39 +00 +0f +8f +f5 +78 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +f9 +d9 +00 +e9 +df +17 +00 +00 +41 +8a +11 +80 +fa +48 +0f +84 +5d +01 +00 +00 +80 +fa +68 +0f +84 +54 +01 +00 +00 +e9 +cc +78 +ff +ff +41 +8a +11 +80 +fa +4d +0f +84 +27 +01 +00 +00 +80 +fa +6d +0f +84 +1e +01 +00 +00 +e9 +b2 +78 +ff +ff +41 +8a +11 +80 +fa +52 +0f +84 +be +00 +00 +00 +80 +fa +72 +0f +84 +b5 +00 +00 +00 +e9 +98 +78 +ff +ff +41 +8a +11 +80 +fa +41 +74 +6a +80 +fa +61 +74 +65 +e9 +86 +78 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +75 +78 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +64 +78 +ff +ff +41 +8a +11 +80 +fa +4f +74 +09 +80 +fa +6f +0f +85 +53 +78 +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +42 +78 +ff +ff +41 +80 +39 +00 +0f +8f +35 +78 +ff +ff +c7 +07 +79 +d4 +00 +00 +c7 +47 +04 +01 +ae +0f +01 +e9 +bd +15 +00 +00 +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +15 +78 +ff +ff +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +04 +78 +ff +ff +41 +80 +39 +00 +0f +8f +f7 +77 +ff +ff +c7 +07 +79 +d4 +00 +00 +c7 +47 +04 +01 +ae +0f +00 +e9 +7f +15 +00 +00 +41 +8a +11 +80 +fa +41 +74 +09 +80 +fa +61 +0f +85 +d7 +77 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +c6 +77 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +b5 +77 +ff +ff +41 +80 +39 +00 +0f +8f +a8 +77 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +f4 +d9 +00 +e9 +92 +16 +00 +00 +41 +80 +39 +00 +0f +8f +8c +77 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +e5 +d9 +00 +e9 +76 +16 +00 +00 +41 +80 +39 +00 +0f +8f +70 +77 +ff +ff +c7 +07 +8d +f9 +00 +00 +c7 +47 +04 +04 +00 +00 +00 +e9 +5a +16 +00 +00 +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +50 +77 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +3f +77 +ff +ff +41 +80 +39 +00 +0f +8f +32 +77 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +9b +00 +00 +e9 +1c +16 +00 +00 +41 +8a +11 +80 +fa +4f +74 +09 +80 +fa +6f +0f +85 +12 +77 +ff +ff +41 +8a +11 +80 +fa +4d +74 +09 +80 +fa +6d +0f +85 +01 +77 +ff +ff +41 +8a +11 +80 +fa +50 +7f +1f +80 +fa +48 +7f +0a +84 +d2 +0f +8f +e9 +76 +ff +ff +eb +2a +80 +fa +49 +7e +37 +80 +fa +4f +0f +8e +d9 +76 +ff +ff +eb +5f +80 +fa +69 +7f +0b +80 +fa +68 +0f +8e +c9 +76 +ff +ff +eb +1c +80 +fa +70 +74 +4a +e9 +bd +76 +ff +ff +c7 +07 +8d +fa +00 +00 +c7 +47 +04 +02 +e0 +dd +00 +e9 +bf +13 +00 +00 +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +96 +76 +ff +ff +eb +6b +80 +fa +70 +74 +66 +e9 +8a +76 +ff +ff +c7 +07 +8d +fa +00 +00 +c7 +47 +04 +02 +e8 +db +00 +e9 +12 +14 +00 +00 +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +63 +76 +ff +ff +eb +1c +80 +fa +70 +74 +17 +e9 +57 +76 +ff +ff +c7 +07 +8d +fa +00 +00 +c7 +47 +04 +02 +e8 +dd +00 +e9 +59 +13 +00 +00 +41 +80 +39 +00 +0f +8f +3b +76 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +e9 +da +00 +e9 +3d +13 +00 +00 +41 +80 +39 +00 +0f +8f +1f +76 +ff +ff +c7 +07 +8d +fa +00 +00 +c7 +47 +04 +02 +e8 +df +00 +e9 +a7 +13 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +ff +75 +ff +ff +41 +80 +39 +00 +0f +8f +f2 +75 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +e4 +d9 +00 +e9 +dc +14 +00 +00 +41 +8a +11 +80 +fa +53 +7f +41 +80 +fa +44 +7f +12 +84 +d2 +7e +75 +80 +fa +43 +0f +84 +15 +03 +00 +00 +e9 +c1 +75 +ff +ff +80 +fa +4f +7f +0e +80 +fa +45 +0f +8e +1c +03 +00 +00 +e9 +ae +75 +ff +ff +80 +fa +50 +0f +8e +20 +03 +00 +00 +80 +fa +52 +0f +8e +9c +75 +ff +ff +e9 +2e +03 +00 +00 +80 +fa +65 +7f +17 +80 +fa +63 +0f +84 +d8 +02 +00 +00 +80 +fa +64 +0f +8e +80 +75 +ff +ff +e9 +e4 +02 +00 +00 +80 +fa +70 +7f +0e +80 +fa +6f +0f +8e +6d +75 +ff +ff +e9 +e3 +02 +00 +00 +80 +fa +73 +0f +84 +f6 +02 +00 +00 +e9 +5a +75 +ff +ff +c7 +07 +2d +f9 +00 +00 +c7 +47 +04 +03 +00 +00 +00 +e9 +44 +14 +00 +00 +41 +8a +11 +80 +fa +42 +0f +84 +cd +01 +00 +00 +80 +fa +62 +0f +84 +c4 +01 +00 +00 +e9 +31 +75 +ff +ff +41 +8a +11 +80 +fa +52 +0f +84 +86 +01 +00 +00 +80 +fa +72 +0f +84 +7d +01 +00 +00 +e9 +17 +75 +ff +ff +41 +8a +11 +80 +fa +4e +0f +84 +fb +00 +00 +00 +80 +fa +6e +0f +84 +f2 +00 +00 +00 +e9 +fd +74 +ff +ff +41 +8a +11 +80 +fa +41 +0f +84 +a3 +00 +00 +00 +80 +fa +61 +0f +84 +9a +00 +00 +00 +e9 +e3 +74 +ff +ff +41 +8a +11 +80 +fa +56 +74 +60 +80 +fa +76 +74 +5b +e9 +d1 +74 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +c0 +74 +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +af +74 +ff +ff +41 +8a +11 +80 +fa +4d +74 +09 +80 +fa +6d +0f +85 +9e +74 +ff +ff +41 +80 +39 +00 +0f +8f +91 +74 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +e4 +db +00 +c7 +47 +08 +02 +10 +40 +00 +e9 +59 +27 +00 +00 +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +6a +74 +ff +ff +41 +80 +39 +00 +0f +8f +5d +74 +ff +ff +c7 +07 +79 +d4 +00 +00 +c7 +47 +04 +01 +dd +9b +06 +e9 +47 +13 +00 +00 +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +3d +74 +ff +ff +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +2c +74 +ff +ff +41 +80 +39 +00 +0f +8f +1f +74 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +fd +d9 +00 +e9 +09 +13 +00 +00 +41 +8a +11 +80 +fa +43 +7f +0f +84 +d2 +7e +15 +80 +fa +42 +0f +8e +f8 +73 +ff +ff +eb +1c +80 +fa +63 +74 +17 +e9 +ec +73 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +fe +d9 +00 +e9 +ee +10 +00 +00 +41 +8a +11 +80 +fa +4f +74 +09 +80 +fa +6f +0f +85 +cc +73 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +bb +73 +ff +ff +41 +80 +39 +00 +0f +8f +ae +73 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +fb +d9 +00 +e9 +b0 +10 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +8e +73 +ff +ff +41 +80 +39 +00 +0f +8f +81 +73 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +fa +d9 +00 +e9 +6b +12 +00 +00 +41 +8a +11 +80 +fa +52 +7f +1f +80 +fa +4f +7f +0a +84 +d2 +0f +8f +5a +73 +ff +ff +eb +2a +80 +fa +50 +7e +37 +80 +fa +51 +0f +8e +4a +73 +ff +ff +eb +48 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +3a +73 +ff +ff +eb +1c +80 +fa +72 +74 +33 +e9 +2e +73 +ff +ff +c7 +07 +cd +fa +00 +00 +c7 +47 +04 +06 +e8 +e0 +04 +e9 +18 +12 +00 +00 +41 +80 +39 +00 +0f +8f +12 +73 +ff +ff +c7 +07 +8d +fb +00 +00 +c7 +47 +04 +03 +e8 +00 +00 +e9 +fc +11 +00 +00 +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +eb +72 +ff +ff +eb +1c +80 +fa +70 +74 +17 +e9 +df +72 +ff +ff +c7 +07 +cd +fa +00 +00 +c7 +47 +04 +06 +e0 +e8 +05 +e9 +c9 +11 +00 +00 +41 +80 +39 +00 +0f +8f +c3 +72 +ff +ff +c7 +07 +8d +fb +00 +00 +c7 +47 +04 +03 +e0 +00 +00 +e9 +ad +11 +00 +00 +41 +8a +11 +80 +fa +57 +0f +84 +8f +00 +00 +00 +80 +fa +77 +0f +84 +86 +00 +00 +00 +e9 +9a +72 +ff +ff +41 +8a +11 +80 +fa +4e +74 +4c +80 +fa +6e +74 +47 +e9 +88 +72 +ff +ff +41 +80 +39 +00 +0f +8f +7b +72 +ff +ff +c7 +07 +2d +f8 +00 +00 +c7 +47 +04 +04 +d8 +03 +07 +e9 +65 +11 +00 +00 +41 +8a +11 +80 +fa +57 +74 +09 +80 +fa +77 +0f +85 +5b +72 +ff +ff +41 +80 +39 +00 +0f +8f +4e +72 +ff +ff +c7 +07 +ad +fc +00 +00 +e9 +95 +03 +00 +00 +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +35 +72 +ff +ff +41 +80 +39 +00 +0f +8f +28 +72 +ff +ff +c7 +07 +79 +d4 +00 +00 +c7 +47 +04 +01 +d9 +9b +06 +e9 +12 +11 +00 +00 +41 +80 +39 +00 +0f +8f +0c +72 +ff +ff +c7 +07 +41 +fc +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +f6 +10 +00 +00 +41 +8a +11 +80 +fa +44 +74 +59 +80 +fa +64 +74 +54 +e9 +eb +71 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +da +71 +ff +ff +41 +8a +11 +80 +fa +4f +74 +09 +80 +fa +6f +0f +85 +c9 +71 +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +b8 +71 +ff +ff +41 +80 +39 +00 +0f +8f +ab +71 +ff +ff +c7 +07 +5d +d4 +00 +00 +c7 +47 +04 +01 +dd +04 +00 +e9 +95 +10 +00 +00 +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +8b +71 +ff +ff +41 +8a +11 +80 +fa +4e +74 +09 +80 +fa +6e +0f +85 +7a +71 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +69 +71 +ff +ff +41 +80 +39 +00 +0f +8f +5c +71 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +fc +d9 +00 +e9 +46 +10 +00 +00 +41 +8a +11 +80 +fa +41 +0f +84 +bf +00 +00 +00 +80 +fa +61 +0f +84 +b6 +00 +00 +00 +e9 +33 +71 +ff +ff +41 +8a +11 +80 +fa +54 +74 +6b +80 +fa +74 +74 +66 +e9 +21 +71 +ff +ff +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +10 +71 +ff +ff +41 +8a +11 +80 +fa +4d +74 +09 +80 +fa +6d +0f +85 +ff +70 +ff +ff +41 +8a +11 +84 +d2 +7e +0a +80 +fa +31 +74 +17 +e9 +eb +70 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +f8 +d9 +00 +e9 +d5 +0f +00 +00 +41 +80 +39 +00 +0f +8f +cf +70 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +f5 +d9 +00 +e9 +d1 +0d +00 +00 +41 +8a +11 +80 +fa +41 +74 +09 +80 +fa +61 +0f +85 +af +70 +ff +ff +41 +8a +11 +80 +fa +4e +74 +09 +80 +fa +6e +0f +85 +9e +70 +ff +ff +41 +80 +39 +00 +0f +8f +91 +70 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +f3 +d9 +00 +e9 +7b +0f +00 +00 +41 +8a +11 +80 +fa +4e +74 +09 +80 +fa +6e +0f +85 +71 +70 +ff +ff +41 +80 +39 +00 +0f +8f +64 +70 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +f2 +d9 +00 +e9 +4e +0f +00 +00 +41 +8a +11 +80 +fa +4e +0f +84 +ed +01 +00 +00 +80 +fa +6e +0f +84 +e4 +01 +00 +00 +e9 +3b +70 +ff +ff +41 +8a +11 +80 +fa +54 +7f +17 +80 +fa +41 +0f +84 +ac +00 +00 +00 +80 +fa +53 +0f +8e +21 +70 +ff +ff +e9 +b8 +00 +00 +00 +80 +fa +61 +7f +0e +80 +fa +60 +0f +8e +0e +70 +ff +ff +e9 +8b +00 +00 +00 +80 +fa +74 +0f +84 +9c +00 +00 +00 +e9 +fb +6f +ff +ff +41 +8a +11 +80 +fa +4c +74 +37 +80 +fa +6c +74 +32 +e9 +e9 +6f +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +d8 +6f +ff +ff +41 +80 +39 +00 +0f +8f +cb +6f +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +d0 +d9 +00 +e9 +b5 +0e +00 +00 +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +ab +6f +ff +ff +41 +8a +11 +80 +fa +58 +74 +09 +80 +fa +78 +0f +85 +9a +6f +ff +ff +41 +80 +39 +00 +0f +8f +8d +6f +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +e2 +db +00 +e9 +77 +0e +00 +00 +41 +8a +11 +80 +fa +56 +0f +84 +e9 +00 +00 +00 +80 +fa +76 +0f +84 +e0 +00 +00 +00 +e9 +64 +6f +ff +ff +41 +8a +11 +80 +fa +53 +7f +1a +80 +fa +44 +7f +05 +80 +fa +43 +eb +18 +80 +fa +45 +7e +4e +80 +fa +52 +0f +8e +44 +6f +ff +ff +eb +31 +80 +fa +64 +7f +0b +80 +fa +63 +0f +85 +34 +6f +ff +ff +eb +0f +80 +fa +65 +7e +2e +80 +fa +73 +74 +17 +e9 +23 +6f +ff +ff +41 +8a +11 +80 +fa +57 +74 +76 +80 +fa +77 +74 +71 +e9 +11 +6f +ff +ff +41 +8a +11 +80 +fa +57 +74 +48 +80 +fa +77 +74 +43 +e9 +ff +6e +ff +ff +41 +8a +11 +80 +fa +4e +74 +09 +80 +fa +6e +0f +85 +ee +6e +ff +ff +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +dd +6e +ff +ff +41 +80 +39 +00 +0f +8f +d0 +6e +ff +ff +c7 +07 +5d +d4 +00 +00 +c7 +47 +04 +01 +d9 +06 +00 +e9 +ba +0d +00 +00 +41 +80 +39 +00 +0f +8f +b4 +6e +ff +ff +c7 +07 +6d +fc +00 +00 +c7 +47 +04 +02 +00 +00 +00 +e9 +9e +0d +00 +00 +41 +80 +39 +00 +0f +8f +98 +6e +ff +ff +c7 +07 +25 +fc +00 +00 +c7 +47 +04 +01 +07 +00 +00 +e9 +82 +0d +00 +00 +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +78 +6e +ff +ff +41 +80 +39 +00 +0f +8f +6b +6e +ff +ff +c7 +07 +5d +d4 +00 +00 +c7 +47 +04 +01 +dd +06 +00 +e9 +55 +0d +00 +00 +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +4b +6e +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +3a +6e +ff +ff +41 +80 +39 +00 +0f +8f +2d +6e +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +e3 +db +00 +e9 +17 +0d +00 +00 +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +0d +6e +ff +ff +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +f5 +6d +ff +ff +eb +1c +80 +fa +70 +74 +17 +e9 +e9 +6d +ff +ff +c7 +07 +cd +fa +00 +00 +c7 +47 +04 +06 +c8 +c8 +01 +e9 +d3 +0c +00 +00 +41 +80 +39 +00 +0f +8f +cd +6d +ff +ff +c7 +07 +8d +fb +00 +00 +c7 +47 +04 +03 +c8 +00 +00 +e9 +b7 +0c +00 +00 +41 +8a +11 +80 +fa +59 +7f +58 +80 +fa +44 +7f +29 +80 +fa +31 +7f +16 +84 +d2 +0f +8e +94 +00 +00 +00 +80 +fa +30 +0f +8e +98 +6d +ff +ff +e9 +98 +00 +00 +00 +80 +fa +43 +0f +84 +ab +00 +00 +00 +e9 +85 +6d +ff +ff +80 +fa +4c +7f +17 +80 +fa +45 +0f +8e +b2 +00 +00 +00 +80 +fa +4b +0f +8e +6e +6d +ff +ff +e9 +be +00 +00 +00 +80 +fa +50 +0f +84 +08 +01 +00 +00 +e9 +5b +6d +ff +ff +80 +fa +6b +7f +23 +80 +fa +63 +7f +14 +80 +fa +5a +0f +8e +02 +01 +00 +00 +80 +fa +62 +0f +8e +3f +6d +ff +ff +eb +5e +80 +fa +65 +74 +73 +e9 +33 +6d +ff +ff +80 +fa +70 +7f +13 +80 +fa +6c +7e +7e +80 +fa +6f +0f +8e +20 +6d +ff +ff +e9 +c3 +00 +00 +00 +80 +fa +7a +0f +84 +cc +00 +00 +00 +e9 +0d +6d +ff +ff +c7 +07 +2d +f8 +00 +00 +c7 +47 +04 +04 +c0 +00 +05 +e9 +f7 +0b +00 +00 +41 +80 +39 +00 +0f +8f +f1 +6c +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +e8 +d9 +00 +e9 +db +0b +00 +00 +41 +8a +11 +80 +fa +57 +0f +84 +b0 +01 +00 +00 +80 +fa +77 +0f +84 +a7 +01 +00 +00 +e9 +c8 +6c +ff +ff +41 +8a +11 +80 +fa +4e +0f +84 +69 +01 +00 +00 +80 +fa +6e +0f +84 +60 +01 +00 +00 +e9 +ae +6c +ff +ff +41 +8a +11 +80 +fa +4d +7f +21 +80 +fa +32 +7f +0e +80 +fa +31 +0f +8e +98 +6c +ff +ff +e9 +82 +00 +00 +00 +80 +fa +47 +0f +84 +ae +00 +00 +00 +e9 +85 +6c +ff +ff +80 +fa +67 +7f +17 +80 +fa +4e +0f +8e +a8 +00 +00 +00 +80 +fa +66 +0f +8e +6e +6c +ff +ff +e9 +8d +00 +00 +00 +80 +fa +6e +0f +84 +91 +00 +00 +00 +e9 +5b +6c +ff +ff +41 +8a +11 +80 +fa +49 +74 +26 +80 +fa +69 +74 +21 +e9 +49 +6c +ff +ff +41 +80 +39 +00 +0f +8f +3c +6c +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +ee +d9 +00 +e9 +26 +0b +00 +00 +41 +80 +39 +00 +0f +8f +20 +6c +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +eb +d9 +00 +e9 +0a +0b +00 +00 +41 +8a +11 +80 +fa +54 +7f +13 +80 +fa +45 +74 +79 +80 +fa +53 +0f +8e +fb +6b +ff +ff +e9 +87 +00 +00 +00 +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +e8 +6b +ff +ff +eb +5b +80 +fa +74 +74 +72 +e9 +dc +6b +ff +ff +41 +8a +11 +80 +fa +32 +74 +2d +e9 +cf +6b +ff +ff +41 +8a +11 +80 +fa +32 +0f +85 +c3 +6b +ff +ff +41 +80 +39 +00 +0f +8f +b6 +6b +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +ed +d9 +00 +e9 +a0 +0a +00 +00 +41 +80 +39 +00 +0f +8f +9a +6b +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +ec +d9 +00 +e9 +84 +0a +00 +00 +41 +80 +39 +00 +0f +8f +7e +6b +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +ea +d9 +00 +e9 +68 +0a +00 +00 +41 +80 +39 +00 +0f +8f +62 +6b +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +e9 +d9 +00 +e9 +4c +0a +00 +00 +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +42 +6b +ff +ff +41 +80 +39 +00 +0f +8f +35 +6b +ff +ff +c7 +07 +5d +d4 +00 +00 +c7 +47 +04 +01 +d9 +04 +00 +e9 +1f +0a +00 +00 +41 +80 +39 +00 +0f +8f +19 +6b +ff +ff +c7 +07 +25 +fc +00 +00 +c7 +47 +04 +01 +05 +00 +00 +e9 +03 +0a +00 +00 +41 +8a +11 +80 +fa +44 +0f +84 +2d +03 +00 +00 +80 +fa +64 +0f +84 +24 +03 +00 +00 +e9 +f0 +6a +ff +ff +41 +8a +11 +80 +fa +55 +7f +17 +80 +fa +53 +0f +8e +df +6a +ff +ff +80 +fa +54 +0f +8e +56 +02 +00 +00 +e9 +84 +02 +00 +00 +80 +fa +73 +0f +8e +c8 +6a +ff +ff +80 +fa +74 +0f +8e +3f +02 +00 +00 +80 +fa +75 +0f +8e +69 +02 +00 +00 +e9 +b1 +6a +ff +ff +41 +8a +11 +80 +fa +4f +0f +84 +c5 +01 +00 +00 +80 +fa +6f +0f +84 +bc +01 +00 +00 +e9 +97 +6a +ff +ff +41 +8a +11 +80 +fa +44 +0f +84 +7e +01 +00 +00 +80 +fa +64 +0f +84 +75 +01 +00 +00 +e9 +7d +6a +ff +ff +41 +8a +11 +80 +fa +55 +0f +84 +37 +01 +00 +00 +80 +fa +75 +0f +84 +2e +01 +00 +00 +e9 +63 +6a +ff +ff +41 +8a +11 +80 +fa +49 +0f +84 +bd +00 +00 +00 +80 +fa +69 +0f +84 +b4 +00 +00 +00 +e9 +49 +6a +ff +ff +41 +8a +11 +80 +fa +49 +7f +10 +80 +fa +43 +74 +25 +80 +fa +48 +0f +8e +33 +6a +ff +ff +eb +2c +80 +fa +63 +7f +0b +80 +fa +62 +0f +8e +23 +6a +ff +ff +eb +0a +80 +fa +69 +74 +17 +e9 +17 +6a +ff +ff +41 +8a +11 +80 +fa +53 +74 +37 +80 +fa +73 +74 +32 +e9 +05 +6a +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +f4 +69 +ff +ff +41 +80 +39 +00 +0f +8f +e7 +69 +ff +ff +c7 +07 +41 +d4 +00 +00 +c7 +47 +04 +01 +e3 +db +98 +e9 +d1 +08 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +c7 +69 +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +b6 +69 +ff +ff +41 +80 +39 +00 +0f +8f +a9 +69 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +f7 +d9 +00 +e9 +93 +08 +00 +00 +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +89 +69 +ff +ff +41 +8a +11 +80 +fa +52 +7f +0f +84 +d2 +7e +15 +80 +fa +51 +0f +8e +71 +69 +ff +ff +eb +1c +80 +fa +72 +74 +17 +e9 +65 +69 +ff +ff +c7 +07 +ed +fb +00 +00 +c7 +47 +04 +02 +da +06 +00 +e9 +4f +08 +00 +00 +41 +80 +39 +00 +0f +8f +49 +69 +ff +ff +c7 +07 +ed +fb +00 +00 +c7 +47 +04 +02 +da +07 +00 +e9 +33 +08 +00 +00 +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +29 +69 +ff +ff +41 +80 +39 +00 +0f +8f +1c +69 +ff +ff +c7 +07 +ed +fb +00 +00 +c7 +47 +04 +02 +da +01 +00 +e9 +06 +08 +00 +00 +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +fc +68 +ff +ff +41 +80 +39 +00 +0f +8f +ef +68 +ff +ff +c7 +07 +ed +fb +00 +00 +c7 +47 +04 +02 +da +00 +00 +e9 +d9 +07 +00 +00 +41 +8a +11 +80 +fa +4d +74 +09 +80 +fa +6d +0f +85 +cf +68 +ff +ff +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +b7 +68 +ff +ff +eb +1c +80 +fa +70 +74 +17 +e9 +ab +68 +ff +ff +c7 +07 +ed +fb +00 +00 +c7 +47 +04 +02 +da +02 +00 +e9 +95 +07 +00 +00 +41 +80 +39 +00 +0f +8f +8f +68 +ff +ff +c7 +07 +ed +fb +00 +00 +c7 +47 +04 +02 +da +03 +00 +e9 +79 +07 +00 +00 +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +68 +68 +ff +ff +eb +7c +80 +fa +70 +74 +77 +e9 +5c +68 +ff +ff +c7 +07 +ed +fb +00 +00 +c7 +47 +04 +02 +db +02 +00 +e9 +46 +07 +00 +00 +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +3c +68 +ff +ff +41 +8a +11 +80 +fa +52 +7f +0f +84 +d2 +7e +15 +80 +fa +51 +0f +8e +24 +68 +ff +ff +eb +1c +80 +fa +72 +74 +17 +e9 +18 +68 +ff +ff +c7 +07 +ed +fb +00 +00 +c7 +47 +04 +02 +da +04 +00 +e9 +02 +07 +00 +00 +41 +80 +39 +00 +0f +8f +fc +67 +ff +ff +c7 +07 +ed +fb +00 +00 +c7 +47 +04 +02 +da +05 +00 +e9 +e6 +06 +00 +00 +41 +80 +39 +00 +0f +8f +e0 +67 +ff +ff +c7 +07 +ad +f8 +00 +00 +c7 +47 +04 +03 +03 +07 +00 +e9 +ca +06 +00 +00 +41 +80 +39 +00 +0f +8f +c4 +67 +ff +ff +c7 +07 +ad +f8 +00 +00 +c7 +47 +04 +03 +00 +05 +00 +e9 +ae +06 +00 +00 +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +a4 +67 +ff +ff +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +93 +67 +ff +ff +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +7b +67 +ff +ff +eb +1c +80 +fa +70 +74 +17 +e9 +6f +67 +ff +ff +c7 +07 +e5 +fc +00 +00 +c7 +47 +04 +01 +dd +00 +00 +e9 +59 +06 +00 +00 +41 +80 +39 +00 +0f +8f +53 +67 +ff +ff +c7 +07 +e5 +fc +00 +00 +c7 +47 +04 +01 +df +00 +00 +c7 +47 +08 +20 +10 +20 +00 +e9 +1b +1a +00 +00 +41 +8a +11 +80 +fa +4d +74 +09 +80 +fa +6d +0f +85 +2c +67 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +1b +67 +ff +ff +41 +80 +39 +00 +0f +8f +0e +67 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +0e +0f +00 +c7 +47 +08 +00 +00 +01 +00 +e9 +d6 +19 +00 +00 +41 +8a +11 +80 +fa +56 +74 +6a +80 +fa +76 +74 +65 +e9 +e6 +66 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +d5 +66 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +c4 +66 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +b3 +66 +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +a2 +66 +ff +ff +41 +80 +39 +00 +0f +8f +95 +66 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +f6 +d9 +00 +e9 +7f +05 +00 +00 +41 +8a +11 +80 +fa +52 +7f +1f +80 +fa +4f +7f +0a +84 +d2 +0f +8f +6e +66 +ff +ff +eb +2a +80 +fa +50 +7e +37 +80 +fa +51 +0f +8e +5e +66 +ff +ff +eb +48 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +4e +66 +ff +ff +eb +1c +80 +fa +72 +74 +33 +e9 +42 +66 +ff +ff +c7 +07 +cd +fa +00 +00 +c7 +47 +04 +06 +f8 +f0 +06 +e9 +2c +05 +00 +00 +41 +80 +39 +00 +0f +8f +26 +66 +ff +ff +c7 +07 +8d +fb +00 +00 +c7 +47 +04 +03 +f8 +00 +00 +e9 +10 +05 +00 +00 +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +ff +65 +ff +ff +eb +1c +80 +fa +70 +74 +17 +e9 +f3 +65 +ff +ff +c7 +07 +cd +fa +00 +00 +c7 +47 +04 +06 +f0 +f8 +07 +e9 +dd +04 +00 +00 +41 +80 +39 +00 +0f +8f +d7 +65 +ff +ff +c7 +07 +8d +fb +00 +00 +c7 +47 +04 +03 +f0 +00 +00 +e9 +c1 +04 +00 +00 +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +4d +0f +84 +5a +02 +00 +00 +80 +fa +52 +0f +8e +ae +65 +ff +ff +e9 +a3 +02 +00 +00 +80 +fa +6d +7f +0e +80 +fa +6c +0f +8e +9b +65 +ff +ff +e9 +39 +02 +00 +00 +80 +fa +73 +0f +84 +87 +02 +00 +00 +e9 +88 +65 +ff +ff +41 +8a +11 +80 +fa +53 +0f +84 +03 +02 +00 +00 +80 +fa +73 +0f +84 +fa +01 +00 +00 +e9 +6e +65 +ff +ff +41 +8a +11 +80 +fa +45 +0f +84 +bc +01 +00 +00 +80 +fa +65 +0f +84 +b3 +01 +00 +00 +e9 +54 +65 +ff +ff +41 +8a +11 +80 +fa +4f +74 +09 +80 +fa +6f +0f +85 +43 +65 +ff +ff +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +32 +65 +ff +ff +41 +8a +11 +80 +fa +55 +7f +26 +80 +fa +45 +7f +0a +80 +fa +42 +74 +4f +80 +fa +44 +eb +24 +80 +fa +4e +0f +84 +97 +00 +00 +00 +80 +fa +54 +0f +8e +09 +65 +ff +ff +e9 +bb +00 +00 +00 +80 +fa +65 +7f +10 +80 +fa +62 +74 +29 +80 +fa +64 +0f +8e +f1 +64 +ff +ff +eb +58 +80 +fa +6e +7f +0b +80 +fa +6d +0f +8e +e1 +64 +ff +ff +eb +64 +80 +fa +75 +0f +84 +8d +00 +00 +00 +e9 +d1 +64 +ff +ff +41 +8a +11 +80 +fa +45 +7f +12 +84 +d2 +7e +1c +80 +fa +44 +0f +8e +b9 +64 +ff +ff +e9 +f5 +00 +00 +00 +80 +fa +65 +0f +84 +ec +00 +00 +00 +e9 +a6 +64 +ff +ff +c7 +07 +41 +fe +00 +00 +c7 +47 +04 +01 +c0 +da +00 +e9 +2e +02 +00 +00 +41 +80 +39 +00 +0f +8f +8a +64 +ff +ff +c7 +07 +41 +fe +00 +00 +c7 +47 +04 +01 +c8 +da +00 +e9 +12 +02 +00 +00 +41 +8a +11 +80 +fa +45 +7f +10 +80 +fa +42 +74 +41 +80 +fa +44 +0f +8e +65 +64 +ff +ff +eb +69 +80 +fa +62 +7f +0b +80 +fa +61 +0f +8e +55 +64 +ff +ff +eb +26 +80 +fa +65 +74 +54 +e9 +49 +64 +ff +ff +41 +80 +39 +00 +0f +8f +3c +64 +ff +ff +c7 +07 +41 +fe +00 +00 +c7 +47 +04 +01 +d8 +da +00 +e9 +c4 +01 +00 +00 +41 +8a +11 +80 +fa +45 +7f +0f +84 +d2 +7e +15 +80 +fa +44 +0f +8e +15 +64 +ff +ff +eb +38 +80 +fa +65 +74 +33 +e9 +09 +64 +ff +ff +c7 +07 +41 +fe +00 +00 +c7 +47 +04 +01 +c0 +db +00 +e9 +91 +01 +00 +00 +41 +80 +39 +00 +0f +8f +ed +63 +ff +ff +c7 +07 +41 +fe +00 +00 +c7 +47 +04 +01 +c8 +db +00 +e9 +75 +01 +00 +00 +41 +80 +39 +00 +0f +8f +d1 +63 +ff +ff +c7 +07 +41 +fe +00 +00 +c7 +47 +04 +01 +d0 +db +00 +e9 +59 +01 +00 +00 +41 +80 +39 +00 +0f +8f +b5 +63 +ff +ff +c7 +07 +41 +fe +00 +00 +c7 +47 +04 +01 +d0 +da +00 +e9 +3d +01 +00 +00 +41 +8a +11 +80 +fa +58 +74 +09 +80 +fa +78 +0f +85 +95 +63 +ff +ff +41 +80 +39 +00 +0f +8f +88 +63 +ff +ff +c7 +07 +41 +d4 +00 +00 +c7 +47 +04 +01 +e2 +db +98 +e9 +72 +02 +00 +00 +41 +80 +39 +00 +0f +8f +6c +63 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +e0 +d9 +00 +e9 +56 +02 +00 +00 +41 +8a +11 +80 +fa +50 +7f +23 +80 +fa +48 +7f +0a +84 +d2 +0f +8f +45 +63 +ff +ff +eb +2e +80 +fa +49 +0f +8e +8d +00 +00 +00 +80 +fa +4f +0f +8e +31 +63 +ff +ff +eb +4f +80 +fa +69 +7f +0b +80 +fa +68 +0f +8e +21 +63 +ff +ff +eb +72 +80 +fa +70 +74 +3a +e9 +15 +63 +ff +ff +c7 +07 +0d +fa +00 +00 +c7 +47 +04 +04 +d0 +02 +00 +e9 +ff +01 +00 +00 +41 +80 +39 +00 +0f +8f +f9 +62 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +ff +d9 +00 +c7 +47 +08 +02 +10 +00 +00 +e9 +c1 +15 +00 +00 +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +cb +62 +ff +ff +eb +6f +80 +fa +70 +74 +6a +e9 +bf +62 +ff +ff +c7 +07 +0d +fa +00 +00 +c7 +47 +04 +04 +d8 +03 +00 +e9 +a9 +01 +00 +00 +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +98 +62 +ff +ff +eb +19 +80 +fa +70 +74 +14 +e9 +8c +62 +ff +ff +c7 +07 +8d +fa +00 +00 +c7 +47 +04 +02 +f0 +db +00 +eb +17 +41 +80 +39 +00 +0f +8f +73 +62 +ff +ff +c7 +07 +8d +fa +00 +00 +c7 +47 +04 +02 +f0 +df +00 +c7 +47 +08 +20 +10 +00 +00 +e9 +3b +15 +00 +00 +41 +80 +39 +00 +0f +8f +50 +62 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +d9 +de +00 +e9 +3a +01 +00 +00 +41 +8a +11 +80 +fa +44 +74 +48 +80 +fa +64 +74 +43 +e9 +2f +62 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +1e +62 +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +0d +62 +ff +ff +41 +80 +39 +00 +0f +8f +00 +62 +ff +ff +c7 +07 +01 +f9 +00 +00 +c7 +47 +04 +01 +06 +00 +00 +e9 +ea +00 +00 +00 +41 +80 +39 +00 +0f +8f +e4 +61 +ff +ff +c7 +07 +01 +f9 +00 +00 +c7 +47 +04 +01 +04 +00 +00 +e9 +ce +00 +00 +00 +41 +80 +39 +00 +0f +8f +c8 +61 +ff +ff +c7 +07 +03 +00 +00 +00 +e9 +b5 +14 +00 +00 +41 +8a +11 +80 +fa +44 +74 +34 +80 +fa +64 +74 +2f +e9 +ae +61 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +9d +61 +ff +ff +41 +80 +39 +00 +0f +8f +90 +61 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +e1 +d9 +00 +eb +7d +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +6c +61 +ff +ff +eb +19 +80 +fa +70 +74 +14 +e9 +60 +61 +ff +ff +c7 +07 +cd +fa +00 +00 +c7 +47 +04 +06 +c0 +c0 +00 +eb +4d +41 +80 +39 +00 +0f +8f +47 +61 +ff +ff +c7 +07 +8d +fb +00 +00 +c7 +47 +04 +03 +c0 +00 +00 +eb +34 +41 +8a +11 +80 +fa +4d +74 +09 +80 +fa +6d +0f +85 +2a +61 +ff +ff +41 +8a +11 +80 +fa +31 +0f +85 +1e +61 +ff +ff +41 +80 +39 +00 +0f +8f +11 +61 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +f0 +d9 +00 +c7 +47 +08 +00 +10 +00 +00 +e9 +d9 +13 +00 +00 +41 +8a +11 +80 +fa +52 +7f +21 +80 +fa +4b +7f +05 +80 +fa +48 +eb +1f +80 +fa +4c +0f +8e +27 +12 +00 +00 +80 +fa +51 +0f +8e +d7 +60 +ff +ff +e9 +4c +12 +00 +00 +80 +fa +6b +7f +0e +80 +fa +68 +0f +84 +f1 +11 +00 +00 +e9 +bf +60 +ff +ff +80 +fa +6c +0f +8e +fd +11 +00 +00 +80 +fa +72 +0f +84 +27 +12 +00 +00 +e9 +a8 +60 +ff +ff +41 +8a +11 +80 +fa +42 +0f +84 +ad +11 +00 +00 +80 +fa +62 +0f +84 +a4 +11 +00 +00 +e9 +8e +60 +ff +ff +41 +8a +11 +80 +fa +41 +0f +84 +89 +10 +00 +00 +80 +fa +61 +0f +84 +80 +10 +00 +00 +e9 +74 +60 +ff +ff +41 +8a +11 +80 +fa +54 +0f +84 +ea +0c +00 +00 +80 +fa +74 +0f +84 +e1 +0c +00 +00 +e9 +5a +60 +ff +ff +41 +8a +11 +80 +fa +45 +0f +84 +7a +0c +00 +00 +80 +fa +65 +0f +84 +71 +0c +00 +00 +e9 +40 +60 +ff +ff +41 +8a +11 +80 +fa +44 +0f +84 +2c +0c +00 +00 +80 +fa +64 +0f +84 +23 +0c +00 +00 +e9 +26 +60 +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +4c +83 +f8 +29 +0f +87 +14 +60 +ff +ff +ff +24 +85 +8d +27 +01 +00 +41 +8a +11 +80 +fa +4c +7f +26 +80 +fa +43 +7f +0a +84 +d2 +0f +8f +f5 +5f +ff +ff +eb +38 +80 +fa +44 +0f +8e +40 +0a +00 +00 +80 +fa +4b +0f +8e +e1 +5f +ff +ff +e9 +04 +0a +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +ce +5f +ff +ff +e9 +1f +0a +00 +00 +80 +fa +6c +0f +84 +e8 +09 +00 +00 +e9 +bb +5f +ff +ff +c7 +07 +36 +00 +00 +00 +e9 +fc +09 +00 +00 +41 +8a +11 +80 +fa +44 +0f +84 +98 +09 +00 +00 +80 +fa +64 +0f +84 +8f +09 +00 +00 +e9 +99 +5f +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +49 +0f +84 +96 +08 +00 +00 +80 +fa +52 +0f +8e +7f +5f +ff +ff +e9 +6e +08 +00 +00 +80 +fa +69 +7f +0e +80 +fa +68 +0f +8e +6c +5f +ff +ff +e9 +75 +08 +00 +00 +80 +fa +73 +0f +84 +52 +08 +00 +00 +e9 +59 +5f +ff +ff +41 +8a +11 +80 +fa +4c +7f +12 +84 +d2 +7e +1c +80 +fa +4b +0f +8e +41 +5f +ff +ff +e9 +11 +08 +00 +00 +80 +fa +6c +0f +84 +08 +08 +00 +00 +e9 +2e +5f +ff +ff +c7 +07 +34 +00 +00 +00 +e9 +6f +09 +00 +00 +41 +8a +11 +80 +fa +52 +0f +84 +ca +06 +00 +00 +80 +fa +72 +0f +84 +c1 +06 +00 +00 +e9 +0c +5f +ff +ff +41 +80 +39 +00 +0f +8f +ff +5e +ff +ff +80 +3d +00 +00 +00 +00 +40 +75 +11 +53 +68 +cd +0d +01 +00 +56 +6a +00 +e8 +04 +3e +ff +ff +83 +c4 +10 +c7 +07 +02 +36 +00 +00 +b8 +04 +00 +00 +00 +e9 +d2 +11 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +30 +83 +f8 +42 +0f +87 +c6 +5e +ff +ff +ff +24 +85 +35 +28 +01 +00 +41 +8a +11 +80 +fa +42 +0f +84 +50 +03 +00 +00 +80 +fa +62 +0f +84 +47 +03 +00 +00 +e9 +a5 +5e +ff +ff +41 +8a +11 +80 +fa +54 +7f +21 +80 +fa +4b +7f +05 +80 +fa +44 +eb +1f +80 +fa +4c +0f +8e +9e +02 +00 +00 +80 +fa +53 +0f +8e +81 +5e +ff +ff +e9 +a2 +02 +00 +00 +80 +fa +6b +7f +0e +80 +fa +64 +0f +84 +70 +02 +00 +00 +e9 +69 +5e +ff +ff +80 +fa +6c +0f +8e +74 +02 +00 +00 +80 +fa +74 +0f +84 +7d +02 +00 +00 +e9 +52 +5e +ff +ff +41 +8a +11 +80 +fa +41 +0f +84 +ec +01 +00 +00 +80 +fa +61 +0f +84 +e3 +01 +00 +00 +e9 +38 +5e +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +27 +5e +ff +ff +41 +8a +11 +80 +fa +52 +7f +1a +80 +fa +44 +7f +05 +80 +fa +43 +eb +18 +80 +fa +45 +7e +44 +80 +fa +51 +0f +8e +07 +5e +ff +ff +eb +6b +80 +fa +64 +7f +0b +80 +fa +63 +0f +85 +f7 +5d +ff +ff +eb +0f +80 +fa +65 +7e +24 +80 +fa +72 +74 +51 +e9 +e6 +5d +ff +ff +41 +8a +11 +80 +fa +41 +0f +84 +3b +01 +00 +00 +80 +fa +61 +0f +84 +32 +01 +00 +00 +e9 +cc +5d +ff +ff +41 +8a +11 +80 +fa +58 +7f +10 +80 +fa +4e +74 +6a +80 +fa +57 +0f +8e +b6 +5d +ff +ff +eb +71 +80 +fa +6e +7f +0b +80 +fa +6d +0f +8e +a6 +5d +ff +ff +eb +4f +80 +fa +78 +74 +5c +e9 +9a +5d +ff +ff +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +89 +5d +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +78 +5d +ff +ff +41 +80 +39 +00 +0f +8f +6b +5d +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +07 +0f +00 +c7 +47 +08 +20 +00 +84 +00 +e9 +33 +10 +00 +00 +41 +8a +11 +80 +fa +54 +74 +5c +80 +fa +74 +74 +57 +e9 +43 +5d +ff +ff +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +32 +5d +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +21 +5d +ff +ff +41 +80 +39 +00 +0f +8f +14 +5d +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +df +0e +00 +00 +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +35 +0f +00 +c7 +47 +08 +20 +00 +80 +00 +e9 +cf +0f +00 +00 +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +e0 +5c +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +cf +5c +ff +ff +41 +80 +39 +00 +0f +8f +c2 +5c +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +8d +0e +00 +00 +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +34 +0f +00 +c7 +47 +08 +20 +00 +00 +00 +e9 +7d +0f +00 +00 +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +8e +5c +ff +ff +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +7d +5c +ff +ff +41 +80 +39 +00 +0f +8f +70 +5c +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +05 +0f +00 +c7 +47 +08 +20 +00 +04 +00 +e9 +38 +0f +00 +00 +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +49 +5c +ff +ff +41 +8a +11 +80 +fa +47 +74 +09 +80 +fa +67 +0f +85 +38 +5c +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +27 +5c +ff +ff +41 +80 +39 +00 +0f +8f +1a +5c +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +f0 +0c +00 +00 +c7 +07 +41 +d4 +00 +00 +c7 +47 +04 +01 +f8 +01 +0f +e9 +03 +0d +00 +00 +41 +8a +11 +80 +fa +43 +74 +70 +80 +fa +63 +74 +6b +e9 +ec +5b +ff +ff +41 +8a +11 +80 +fa +44 +74 +34 +80 +fa +64 +74 +2f +e9 +da +5b +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +c9 +5b +ff +ff +41 +80 +39 +00 +0f +8f +bc +5b +ff +ff +c7 +07 +09 +07 +01 +00 +c7 +47 +04 +01 +7c +00 +00 +eb +41 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +9f +5b +ff +ff +41 +80 +39 +00 +0f +8f +92 +5b +ff +ff +c7 +07 +09 +07 +01 +00 +c7 +47 +04 +01 +7a +00 +00 +eb +17 +41 +80 +39 +00 +0f +8f +79 +5b +ff +ff +c7 +07 +25 +07 +01 +00 +c7 +47 +04 +01 +00 +00 +00 +c7 +47 +08 +08 +00 +0a +00 +e9 +41 +0e +00 +00 +41 +8a +11 +80 +fa +53 +7f +1f +80 +fa +4f +7f +0a +84 +d2 +0f +8f +4b +5b +ff +ff +eb +2a +80 +fa +50 +7e +37 +80 +fa +52 +0f +8e +3b +5b +ff +ff +eb +68 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +2b +5b +ff +ff +eb +1c +80 +fa +73 +74 +53 +e9 +1f +5b +ff +ff +c7 +07 +ed +e3 +00 +00 +c7 +47 +04 +17 +28 +05 +00 +e9 +e7 +0d +00 +00 +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +b0 +00 +00 +00 +80 +fa +52 +0f +8e +f6 +5a +ff +ff +e9 +86 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +e3 +5a +ff +ff +e9 +8f +00 +00 +00 +80 +fa +73 +74 +6e +e9 +d4 +5a +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +be +5a +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +ae +5a +ff +ff +eb +25 +80 +fa +73 +0f +85 +a3 +5a +ff +ff +41 +80 +39 +00 +0f +8f +96 +5a +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +5c +f3 +00 +e9 +15 +06 +00 +00 +41 +80 +39 +00 +0f +8f +7a +5a +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +5c +f2 +00 +e9 +d6 +05 +00 +00 +41 +80 +39 +00 +0f +8f +5e +5a +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +5c +00 +00 +e9 +dd +05 +00 +00 +41 +80 +39 +00 +0f +8f +42 +5a +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +5c +66 +00 +e9 +9e +05 +00 +00 +41 +80 +39 +00 +0f +8f +26 +5a +ff +ff +0f +be +43 +02 +83 +e8 +30 +83 +c8 +60 +89 +07 +e9 +61 +04 +00 +00 +41 +80 +39 +00 +0f +8f +0b +5a +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +f9 +00 +00 +e9 +d3 +0c +00 +00 +41 +80 +39 +00 +0f +8f +ef +59 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +fd +00 +00 +e9 +b7 +0c +00 +00 +41 +80 +39 +00 +0f +8f +d3 +59 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +fb +00 +00 +e9 +9b +0c +00 +00 +41 +8a +11 +80 +fa +53 +0f +84 +91 +00 +00 +00 +80 +fa +73 +0f +84 +88 +00 +00 +00 +e9 +aa +59 +ff +ff +41 +80 +39 +00 +0f +8f +9d +59 +ff +ff +c7 +07 +cd +f6 +00 +00 +c7 +47 +04 +04 +00 +00 +00 +c7 +47 +08 +02 +00 +10 +00 +e9 +65 +0c +00 +00 +41 +8a +11 +80 +fa +58 +74 +09 +80 +fa +78 +0f +85 +76 +59 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +65 +59 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +54 +59 +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +43 +59 +ff +ff +41 +80 +39 +00 +0f +8f +36 +59 +ff +ff +c7 +07 +a5 +01 +01 +00 +c7 +47 +04 +01 +03 +00 +00 +e9 +b5 +04 +00 +00 +41 +8a +11 +80 +fa +57 +7f +23 +80 +fa +44 +7f +0a +80 +fa +42 +74 +48 +80 +fa +43 +eb +21 +80 +fa +51 +0f +84 +8e +00 +00 +00 +80 +fa +56 +0f +8e +fe +58 +ff +ff +eb +4b +80 +fa +64 +7f +10 +80 +fa +62 +74 +25 +80 +fa +63 +0f +8e +e9 +58 +ff +ff +eb +52 +80 +fa +71 +7f +0b +80 +fa +70 +0f +8e +d9 +58 +ff +ff +eb +5e +80 +fa +77 +74 +21 +e9 +cd +58 +ff +ff +41 +80 +39 +00 +0f +8f +c0 +58 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +aa +00 +00 +e9 +88 +0b +00 +00 +41 +80 +39 +00 +0f +8f +a4 +58 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +ab +10 +00 +e9 +6c +0b +00 +00 +41 +80 +39 +00 +0f +8f +88 +58 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +ab +20 +00 +e9 +3a +09 +00 +00 +41 +80 +39 +00 +0f +8f +6c +58 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +42 +09 +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +ab +40 +00 +e9 +55 +09 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +3f +58 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +29 +58 +ff +ff +eb +57 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +19 +58 +ff +ff +eb +0a +80 +fa +73 +74 +42 +e9 +0d +58 +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +96 +00 +00 +00 +80 +fa +52 +0f +8e +f3 +57 +ff +ff +e9 +a4 +00 +00 +00 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +e0 +57 +ff +ff +eb +78 +80 +fa +73 +0f +84 +8b +00 +00 +00 +e9 +d0 +57 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +ba +57 +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +aa +57 +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +9e +57 +ff +ff +41 +80 +39 +00 +0f +8f +91 +57 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +51 +f2 +00 +e9 +ed +02 +00 +00 +41 +80 +39 +00 +0f +8f +75 +57 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +51 +f3 +00 +e9 +f4 +02 +00 +00 +41 +80 +39 +00 +0f +8f +59 +57 +ff +ff +c7 +07 +19 +01 +01 +00 +c7 +47 +04 +01 +51 +66 +00 +e9 +b5 +02 +00 +00 +41 +80 +39 +00 +0f +8f +3d +57 +ff +ff +c7 +07 +fd +00 +01 +00 +c7 +47 +04 +01 +51 +00 +00 +e9 +bc +02 +00 +00 +41 +80 +39 +00 +0f +8f +21 +57 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +4f +01 +00 +00 +c7 +07 +24 +00 +00 +00 +e9 +55 +01 +00 +00 +41 +8a +11 +80 +fa +57 +0f +84 +d8 +00 +00 +00 +80 +fa +77 +0f +84 +cf +00 +00 +00 +e9 +f2 +56 +ff +ff +41 +8a +11 +80 +fa +4e +7f +0f +84 +d2 +7e +15 +80 +fa +4d +0f +8e +da +56 +ff +ff +eb +23 +80 +fa +6e +74 +1e +e9 +ce +56 +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +f1 +00 +00 +c7 +47 +08 +04 +00 +20 +00 +e9 +96 +09 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +a7 +56 +ff +ff +41 +8a +11 +80 +fa +4f +7f +0f +84 +d2 +7e +15 +80 +fa +4e +0f +8e +8f +56 +ff +ff +eb +23 +80 +fa +6f +74 +1e +e9 +83 +56 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +38 +0f +00 +c7 +47 +08 +20 +00 +02 +00 +e9 +4b +09 +00 +00 +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +5c +56 +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +4b +56 +ff +ff +41 +80 +39 +00 +0f +8f +3e +56 +ff +ff +c7 +07 +25 +d4 +00 +00 +c7 +47 +04 +01 +7e +0f +00 +c7 +47 +08 +08 +00 +42 +00 +e9 +06 +09 +00 +00 +41 +80 +39 +00 +0f +8f +1b +56 +ff +ff +c7 +07 +6d +f7 +00 +00 +c7 +47 +04 +06 +01 +04 +00 +eb +28 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +fe +55 +ff +ff +41 +80 +39 +00 +0f +8f +f1 +55 +ff +ff +c7 +07 +6d +f7 +00 +00 +c7 +47 +04 +06 +00 +00 +00 +c7 +47 +08 +02 +00 +00 +00 +e9 +b9 +08 +00 +00 +41 +80 +39 +00 +0f +8f +ce +55 +ff +ff +80 +3d +00 +00 +00 +00 +40 +74 +0b +53 +68 +6d +0e +01 +00 +e9 +a3 +06 +00 +00 +c7 +07 +26 +00 +00 +00 +b8 +03 +00 +00 +00 +e9 +a7 +08 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +9c +55 +ff +ff +41 +80 +39 +00 +0f +8f +8f +55 +ff +ff +c7 +07 +79 +d4 +00 +00 +c7 +47 +04 +01 +01 +0f +01 +e9 +a0 +01 +00 +00 +41 +8a +11 +80 +fa +52 +0f +84 +46 +01 +00 +00 +80 +fa +72 +0f +84 +3d +01 +00 +00 +e9 +66 +55 +ff +ff +41 +8a +11 +80 +fa +44 +7f +16 +84 +d2 +0f +8e +be +06 +00 +00 +80 +fa +43 +0f +8e +4a +55 +ff +ff +e9 +fe +00 +00 +00 +80 +fa +64 +0f +84 +f5 +00 +00 +00 +e9 +37 +55 +ff +ff +41 +8a +11 +80 +fa +44 +7f +12 +84 +d2 +7e +1c +80 +fa +43 +0f +8e +22 +55 +ff +ff +e9 +ba +00 +00 +00 +80 +fa +64 +0f +84 +b1 +00 +00 +00 +e9 +0f +55 +ff +ff +c7 +07 +6d +ec +00 +00 +c7 +47 +04 +08 +05 +00 +00 +e9 +d7 +07 +00 +00 +41 +8a +11 +80 +fa +46 +74 +09 +80 +fa +66 +0f +85 +ef +54 +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +de +54 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +c8 +54 +ff +ff +eb +3d +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +b8 +54 +ff +ff +eb +0a +80 +fa +73 +74 +28 +e9 +ac +54 +ff +ff +41 +80 +39 +00 +0f +8f +9f +54 +ff +ff +c7 +07 +89 +01 +01 +00 +c7 +47 +04 +01 +c6 +66 +00 +c7 +47 +08 +00 +80 +00 +00 +e9 +67 +07 +00 +00 +41 +80 +39 +00 +0f +8f +7c +54 +ff +ff +c7 +07 +6d +01 +01 +00 +c7 +47 +04 +01 +c6 +00 +00 +c7 +47 +08 +00 +40 +00 +00 +e9 +44 +07 +00 +00 +41 +80 +39 +00 +0f +8f +59 +54 +ff +ff +c7 +07 +4d +ed +00 +00 +c7 +47 +04 +06 +ac +00 +00 +e9 +0b +05 +00 +00 +41 +80 +39 +00 +0f +8f +3d +54 +ff +ff +c7 +07 +4d +ed +00 +00 +c7 +47 +04 +06 +a4 +00 +00 +e9 +ef +04 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +1d +54 +ff +ff +41 +80 +39 +00 +0f +8f +10 +54 +ff +ff +c7 +07 +02 +00 +00 +00 +e9 +fd +06 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +f7 +53 +ff +ff +41 +80 +39 +00 +0f +8f +ea +53 +ff +ff +c7 +07 +79 +d4 +00 +00 +c7 +47 +04 +01 +01 +0f +00 +c7 +47 +08 +02 +00 +80 +00 +e9 +b2 +06 +00 +00 +41 +8a +11 +80 +fa +4e +74 +09 +80 +fa +6e +0f +85 +c3 +53 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +b2 +53 +ff +ff +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +a1 +53 +ff +ff +41 +80 +39 +00 +0f +8f +94 +53 +ff +ff +c7 +07 +41 +d4 +00 +00 +c7 +47 +04 +01 +f8 +ae +0f +c7 +47 +08 +40 +00 +00 +00 +e9 +5c +06 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +39 +0f +87 +6c +53 +ff +ff +ff +24 +85 +41 +29 +01 +00 +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +be +02 +00 +00 +80 +fa +44 +0f +8e +49 +53 +ff +ff +e9 +32 +03 +00 +00 +80 +fa +65 +0f +84 +29 +03 +00 +00 +e9 +36 +53 +ff +ff +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +ae +02 +00 +00 +80 +fa +44 +0f +8e +1d +53 +ff +ff +e9 +ea +02 +00 +00 +80 +fa +65 +0f +84 +e1 +02 +00 +00 +e9 +0a +53 +ff +ff +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +2e +02 +00 +00 +80 +fa +44 +0f +8e +f1 +52 +ff +ff +e9 +a2 +02 +00 +00 +80 +fa +65 +0f +84 +99 +02 +00 +00 +e9 +de +52 +ff +ff +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +1e +02 +00 +00 +80 +fa +44 +0f +8e +c5 +52 +ff +ff +e9 +5a +02 +00 +00 +80 +fa +65 +0f +84 +51 +02 +00 +00 +e9 +b2 +52 +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +39 +0f +87 +a3 +52 +ff +ff +ff +24 +85 +29 +2a +01 +00 +41 +80 +39 +00 +0f +8f +8f +52 +ff +ff +c7 +07 +0d +f5 +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +41 +03 +00 +00 +41 +8a +11 +80 +fa +4f +7f +1c +80 +fa +44 +7f +04 +84 +d2 +eb +6d +80 +fa +45 +7e +64 +80 +fa +4e +0f +8e +5e +52 +ff +ff +e9 +1e +01 +00 +00 +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +4b +52 +ff +ff +eb +46 +80 +fa +6f +0f +84 +05 +01 +00 +00 +e9 +3b +52 +ff +ff +41 +80 +39 +00 +0f +8f +31 +52 +ff +ff +c7 +07 +0d +f5 +00 +00 +c7 +47 +04 +01 +08 +00 +00 +e9 +e3 +02 +00 +00 +41 +80 +39 +00 +0f +8f +15 +52 +ff +ff +c7 +07 +0d +f5 +00 +00 +c7 +47 +04 +01 +04 +00 +00 +e9 +c7 +02 +00 +00 +41 +80 +39 +00 +0f +8f +f9 +51 +ff +ff +c7 +07 +0d +f5 +00 +00 +c7 +47 +04 +01 +0a +00 +00 +e9 +ab +02 +00 +00 +41 +80 +39 +00 +0f +8f +dd +51 +ff +ff +c7 +07 +0d +f5 +00 +00 +c7 +47 +04 +01 +01 +00 +00 +e9 +8f +02 +00 +00 +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +97 +01 +00 +00 +80 +fa +44 +0f +8e +b2 +51 +ff +ff +e9 +2b +01 +00 +00 +80 +fa +65 +0f +84 +22 +01 +00 +00 +e9 +9f +51 +ff +ff +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +87 +01 +00 +00 +80 +fa +44 +0f +8e +86 +51 +ff +ff +e9 +e3 +00 +00 +00 +80 +fa +65 +0f +84 +da +00 +00 +00 +e9 +73 +51 +ff +ff +41 +80 +39 +00 +0f +8f +69 +51 +ff +ff +c7 +07 +0d +f5 +00 +00 +c7 +47 +04 +01 +05 +00 +00 +e9 +1b +02 +00 +00 +41 +80 +39 +00 +0f +8f +4d +51 +ff +ff +c7 +07 +0d +f5 +00 +00 +c7 +47 +04 +01 +09 +00 +00 +e9 +ff +01 +00 +00 +41 +80 +39 +00 +0f +8f +31 +51 +ff +ff +c7 +07 +0d +f5 +00 +00 +c7 +47 +04 +01 +0b +00 +00 +e9 +e3 +01 +00 +00 +41 +8a +11 +80 +fa +45 +7f +13 +84 +d2 +0f +8e +b3 +00 +00 +00 +80 +fa +44 +0f +8e +06 +51 +ff +ff +eb +4a +80 +fa +65 +74 +45 +e9 +fa +50 +ff +ff +41 +8a +11 +80 +fa +45 +7f +13 +84 +d2 +0f +8e +aa +00 +00 +00 +80 +fa +44 +0f +8e +e1 +50 +ff +ff +eb +09 +80 +fa +65 +0f +85 +d6 +50 +ff +ff +41 +80 +39 +00 +0f +8f +cc +50 +ff +ff +c7 +07 +0d +f5 +00 +00 +c7 +47 +04 +01 +0f +00 +00 +e9 +7e +01 +00 +00 +41 +80 +39 +00 +0f +8f +b0 +50 +ff +ff +c7 +07 +0d +f5 +00 +00 +c7 +47 +04 +01 +0c +00 +00 +e9 +62 +01 +00 +00 +41 +80 +39 +00 +0f +8f +94 +50 +ff +ff +c7 +07 +0d +f5 +00 +00 +c7 +47 +04 +01 +07 +00 +00 +e9 +46 +01 +00 +00 +41 +80 +39 +00 +0f +8f +78 +50 +ff +ff +c7 +07 +0d +f5 +00 +00 +c7 +47 +04 +01 +02 +00 +00 +e9 +2a +01 +00 +00 +41 +80 +39 +00 +0f +8f +5c +50 +ff +ff +c7 +07 +0d +f5 +00 +00 +c7 +47 +04 +01 +0e +00 +00 +e9 +0e +01 +00 +00 +41 +80 +39 +00 +0f +8f +40 +50 +ff +ff +c7 +07 +0d +f5 +00 +00 +c7 +47 +04 +01 +0d +00 +00 +e9 +f2 +00 +00 +00 +41 +80 +39 +00 +0f +8f +24 +50 +ff +ff +c7 +07 +0d +f5 +00 +00 +c7 +47 +04 +01 +06 +00 +00 +e9 +d6 +00 +00 +00 +41 +80 +39 +00 +0f +8f +08 +50 +ff +ff +c7 +07 +0d +f5 +00 +00 +c7 +47 +04 +01 +03 +00 +00 +e9 +ba +00 +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +e8 +4f +ff +ff +41 +8a +11 +80 +fa +57 +7f +23 +80 +fa +44 +7f +0a +80 +fa +42 +74 +48 +80 +fa +43 +eb +21 +80 +fa +51 +0f +84 +95 +00 +00 +00 +80 +fa +56 +0f +8e +bf +4f +ff +ff +eb +4b +80 +fa +64 +7f +10 +80 +fa +62 +74 +25 +80 +fa +63 +0f +8e +aa +4f +ff +ff +eb +52 +80 +fa +71 +7f +0b +80 +fa +70 +0f +8e +9a +4f +ff +ff +eb +65 +80 +fa +77 +74 +21 +e9 +8e +4f +ff +ff +41 +80 +39 +00 +0f +8f +81 +4f +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +ae +00 +00 +e9 +49 +02 +00 +00 +41 +80 +39 +00 +0f +8f +65 +4f +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +af +10 +00 +e9 +2d +02 +00 +00 +41 +80 +39 +00 +0f +8f +49 +4f +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +af +20 +00 +c7 +47 +08 +04 +00 +00 +00 +e9 +11 +02 +00 +00 +41 +80 +39 +00 +0f +8f +26 +4f +ff +ff +80 +3d +00 +00 +00 +00 +40 +74 +18 +53 +68 +ad +0e +01 +00 +56 +6a +00 +e8 +2b +2e +ff +ff +b8 +00 +00 +00 +00 +e9 +02 +02 +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +af +40 +00 +c7 +47 +08 +00 +08 +00 +01 +e9 +cd +01 +00 +00 +41 +80 +39 +00 +0f +8f +e2 +4e +ff +ff +c7 +07 +ed +e3 +00 +00 +c7 +47 +04 +17 +18 +03 +00 +e9 +aa +01 +00 +00 +41 +8a +11 +80 +fa +46 +0f +84 +89 +00 +00 +00 +80 +fa +66 +0f +84 +80 +00 +00 +00 +e9 +b9 +4e +ff +ff +41 +8a +11 +80 +fa +43 +7f +0f +84 +d2 +7e +15 +80 +fa +42 +0f +8e +a1 +4e +ff +ff +eb +38 +80 +fa +63 +74 +33 +e9 +95 +4e +ff +ff +c7 +07 +6d +ec +00 +00 +c7 +47 +04 +08 +04 +00 +00 +e9 +5d +01 +00 +00 +41 +80 +39 +00 +0f +8f +79 +4e +ff +ff +c7 +07 +6d +ec +00 +00 +c7 +47 +04 +08 +07 +00 +00 +e9 +41 +01 +00 +00 +41 +80 +39 +00 +0f +8f +5d +4e +ff +ff +80 +3d +00 +00 +00 +00 +40 +74 +2c +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +d6 +00 +00 +c7 +47 +08 +00 +00 +20 +00 +e9 +1c +01 +00 +00 +41 +80 +39 +00 +0f +8f +31 +4e +ff +ff +80 +3d +00 +00 +00 +00 +40 +75 +2b +83 +ec +04 +53 +68 +d2 +0e +01 +00 +56 +e8 +35 +2d +ff +ff +c7 +07 +ed +d3 +00 +00 +c7 +47 +04 +01 +00 +00 +00 +c7 +47 +08 +00 +00 +00 +02 +83 +c4 +10 +e9 +de +00 +00 +00 +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +9e +00 +00 +e9 +c5 +00 +00 +00 +41 +8a +11 +80 +fa +47 +7f +17 +80 +fa +41 +0f +84 +8b +00 +00 +00 +80 +fa +46 +0f +8e +d4 +4d +ff +ff +e9 +8f +00 +00 +00 +80 +fa +61 +7f +0b +80 +fa +60 +0f +8e +c1 +4d +ff +ff +eb +6d +80 +fa +67 +74 +7a +e9 +b5 +4d +ff +ff +41 +8a +11 +80 +fa +54 +7f +10 +80 +fa +50 +74 +3d +80 +fa +53 +0f +8e +9f +4d +ff +ff +eb +19 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +8f +4d +ff +ff +eb +22 +80 +fa +74 +0f +85 +84 +4d +ff +ff +41 +80 +39 +00 +0f +8f +77 +4d +ff +ff +c7 +07 +4d +e7 +00 +00 +c7 +47 +04 +04 +02 +00 +00 +eb +42 +41 +80 +39 +00 +0f +8f +5e +4d +ff +ff +c7 +07 +09 +d4 +00 +00 +c7 +47 +04 +01 +90 +00 +00 +eb +29 +41 +8a +11 +80 +fa +52 +74 +2f +80 +fa +72 +74 +2a +e9 +40 +4d +ff +ff +41 +80 +39 +00 +0f +8f +33 +4d +ff +ff +c7 +07 +4d +e7 +00 +00 +c7 +47 +04 +04 +03 +00 +00 +c7 +47 +08 +00 +00 +00 +00 +b8 +01 +00 +00 +00 +eb +15 +41 +80 +39 +00 +0f +8f +0e +4d +ff +ff +c7 +07 +01 +00 +00 +00 +b8 +05 +00 +00 +00 +8d +65 +f4 +5b +5e +5f +c9 +c3 +2f +00 +00 +00 +1c +00 +00 +00 +06 +00 +39 +00 +00 +00 +1c +00 +00 +00 +06 +00 +3f +00 +00 +00 +04 +00 +00 +00 +06 +00 +62 +00 +00 +00 +05 +00 +00 +00 +14 +00 +6a +00 +00 +00 +06 +00 +00 +00 +14 +00 +81 +00 +00 +00 +06 +00 +00 +00 +14 +00 +8c +00 +00 +00 +07 +00 +00 +00 +14 +00 +95 +00 +00 +00 +06 +00 +00 +00 +14 +00 +a0 +00 +00 +00 +07 +00 +00 +00 +14 +00 +c1 +00 +00 +00 +1c +00 +00 +00 +06 +00 +c6 +00 +00 +00 +08 +00 +00 +00 +14 +00 +65 +01 +00 +00 +1c +00 +00 +00 +06 +00 +93 +01 +00 +00 +09 +00 +00 +00 +06 +00 +99 +01 +00 +00 +1a +00 +00 +00 +06 +00 +ad +02 +00 +00 +0a +00 +00 +00 +14 +00 +02 +03 +00 +00 +09 +00 +00 +00 +06 +00 +17 +03 +00 +00 +09 +00 +00 +00 +06 +00 +2c +03 +00 +00 +1a +00 +00 +00 +06 +00 +90 +03 +00 +00 +1c +00 +00 +00 +06 +00 +9a +06 +00 +00 +0b +00 +00 +00 +14 +00 +a2 +06 +00 +00 +0c +00 +00 +00 +14 +00 +ba +06 +00 +00 +1c +00 +00 +00 +06 +00 +c4 +06 +00 +00 +1c +00 +00 +00 +06 +00 +ca +06 +00 +00 +04 +00 +00 +00 +06 +00 +ed +06 +00 +00 +1c +00 +00 +00 +06 +00 +04 +07 +00 +00 +0d +00 +00 +00 +14 +00 +a0 +07 +00 +00 +1c +00 +00 +00 +06 +00 +aa +07 +00 +00 +1c +00 +00 +00 +06 +00 +b0 +07 +00 +00 +04 +00 +00 +00 +06 +00 +48 +08 +00 +00 +1c +00 +00 +00 +06 +00 +52 +08 +00 +00 +1c +00 +00 +00 +06 +00 +5a +08 +00 +00 +0e +00 +00 +00 +14 +00 +67 +08 +00 +00 +1c +00 +00 +00 +06 +00 +71 +08 +00 +00 +1c +00 +00 +00 +06 +00 +77 +08 +00 +00 +04 +00 +00 +00 +06 +00 +84 +08 +00 +00 +1c +00 +00 +00 +06 +00 +96 +08 +00 +00 +1c +00 +00 +00 +06 +00 +a0 +08 +00 +00 +1c +00 +00 +00 +06 +00 +a6 +08 +00 +00 +04 +00 +00 +00 +06 +00 +1c +09 +00 +00 +09 +00 +00 +00 +06 +00 +ba +09 +00 +00 +0f +00 +00 +00 +14 +00 +c2 +09 +00 +00 +10 +00 +00 +00 +14 +00 +cd +09 +00 +00 +07 +00 +00 +00 +14 +00 +ae +0a +00 +00 +11 +00 +00 +00 +14 +00 +be +0a +00 +00 +12 +00 +00 +00 +14 +00 +f3 +0a +00 +00 +09 +00 +00 +00 +06 +00 +00 +0b +00 +00 +13 +00 +00 +00 +14 +00 +0a +0b +00 +00 +1c +00 +00 +00 +06 +00 +14 +0b +00 +00 +1c +00 +00 +00 +06 +00 +1a +0b +00 +00 +04 +00 +00 +00 +06 +00 +3f +0b +00 +00 +14 +00 +00 +00 +14 +00 +5d +0b +00 +00 +1c +00 +00 +00 +06 +00 +65 +0b +00 +00 +15 +00 +00 +00 +14 +00 +8f +0b +00 +00 +1c +00 +00 +00 +06 +00 +9f +0b +00 +00 +1c +00 +00 +00 +06 +00 +cb +0b +00 +00 +1c +00 +00 +00 +06 +00 +df +0b +00 +00 +1c +00 +00 +00 +06 +00 +0f +0c +00 +00 +09 +00 +00 +00 +06 +00 +20 +0c +00 +00 +16 +00 +00 +00 +14 +00 +33 +0c +00 +00 +1c +00 +00 +00 +06 +00 +3b +0c +00 +00 +0e +00 +00 +00 +14 +00 +48 +0c +00 +00 +1c +00 +00 +00 +06 +00 +64 +0c +00 +00 +09 +00 +00 +00 +06 +00 +75 +0c +00 +00 +16 +00 +00 +00 +14 +00 +92 +0c +00 +00 +1c +00 +00 +00 +06 +00 +b8 +0c +00 +00 +1c +00 +00 +00 +06 +00 +d2 +0c +00 +00 +09 +00 +00 +00 +06 +00 +df +0c +00 +00 +13 +00 +00 +00 +14 +00 +f5 +0c +00 +00 +09 +00 +00 +00 +06 +00 +03 +0d +00 +00 +16 +00 +00 +00 +14 +00 +12 +0d +00 +00 +1c +00 +00 +00 +06 +00 +1a +0d +00 +00 +0e +00 +00 +00 +14 +00 +2f +0d +00 +00 +17 +00 +00 +00 +06 +00 +44 +0d +00 +00 +1c +00 +00 +00 +06 +00 +53 +0d +00 +00 +1c +00 +00 +00 +06 +00 +5d +0d +00 +00 +1c +00 +00 +00 +06 +00 +63 +0d +00 +00 +04 +00 +00 +00 +06 +00 +a3 +0d +00 +00 +1c +00 +00 +00 +06 +00 +ad +0d +00 +00 +1c +00 +00 +00 +06 +00 +b3 +0d +00 +00 +04 +00 +00 +00 +06 +00 +d8 +0d +00 +00 +18 +00 +00 +00 +14 +00 +00 +0e +00 +00 +1c +00 +00 +00 +06 +00 +21 +11 +00 +00 +1c +00 +00 +00 +06 +00 +29 +11 +00 +00 +19 +00 +00 +00 +14 +00 +61 +11 +00 +00 +1a +00 +00 +00 +06 +00 +a1 +11 +00 +00 +1a +00 +00 +00 +06 +00 +cb +11 +00 +00 +1a +00 +00 +00 +06 +00 +ed +11 +00 +00 +1c +00 +00 +00 +06 +00 +0d +13 +00 +00 +1a +00 +00 +00 +06 +00 +59 +13 +00 +00 +1a +00 +00 +00 +06 +00 +c6 +13 +00 +00 +1a +00 +00 +00 +06 +00 +df +13 +00 +00 +1a +00 +00 +00 +06 +00 +09 +14 +00 +00 +1a +00 +00 +00 +06 +00 +55 +14 +00 +00 +1a +00 +00 +00 +06 +00 +a1 +14 +00 +00 +1a +00 +00 +00 +06 +00 +e4 +14 +00 +00 +1a +00 +00 +00 +06 +00 +fd +14 +00 +00 +1a +00 +00 +00 +06 +00 +16 +15 +00 +00 +1a +00 +00 +00 +06 +00 +40 +15 +00 +00 +1a +00 +00 +00 +06 +00 +6a +15 +00 +00 +1a +00 +00 +00 +06 +00 +94 +15 +00 +00 +1a +00 +00 +00 +06 +00 +14 +16 +00 +00 +1a +00 +00 +00 +06 +00 +2d +16 +00 +00 +1a +00 +00 +00 +06 +00 +c2 +16 +00 +00 +1a +00 +00 +00 +06 +00 +db +16 +00 +00 +1a +00 +00 +00 +06 +00 +f4 +16 +00 +00 +1a +00 +00 +00 +06 +00 +cf +17 +00 +00 +1a +00 +00 +00 +06 +00 +ff +17 +00 +00 +1a +00 +00 +00 +06 +00 +b1 +18 +00 +00 +1a +00 +00 +00 +06 +00 +ca +18 +00 +00 +1a +00 +00 +00 +06 +00 +36 +19 +00 +00 +1a +00 +00 +00 +06 +00 +5b +19 +00 +00 +1a +00 +00 +00 +06 +00 +74 +19 +00 +00 +1a +00 +00 +00 +06 +00 +8d +19 +00 +00 +1a +00 +00 +00 +06 +00 +14 +1a +00 +00 +1a +00 +00 +00 +06 +00 +2d +1a +00 +00 +1a +00 +00 +00 +06 +00 +ca +1b +00 +00 +1a +00 +00 +00 +06 +00 +23 +1c +00 +00 +1a +00 +00 +00 +06 +00 +3c +1c +00 +00 +1a +00 +00 +00 +06 +00 +61 +1c +00 +00 +1a +00 +00 +00 +06 +00 +86 +1c +00 +00 +1a +00 +00 +00 +06 +00 +0f +1d +00 +00 +1a +00 +00 +00 +06 +00 +7f +1d +00 +00 +1a +00 +00 +00 +06 +00 +af +1d +00 +00 +1c +00 +00 +00 +06 +00 +08 +1e +00 +00 +1c +00 +00 +00 +06 +00 +21 +1e +00 +00 +1c +00 +00 +00 +06 +00 +e9 +1e +00 +00 +1c +00 +00 +00 +06 +00 +02 +1f +00 +00 +1c +00 +00 +00 +06 +00 +1b +1f +00 +00 +1c +00 +00 +00 +06 +00 +34 +1f +00 +00 +1c +00 +00 +00 +06 +00 +4d +1f +00 +00 +1c +00 +00 +00 +06 +00 +66 +1f +00 +00 +1c +00 +00 +00 +06 +00 +7f +1f +00 +00 +1c +00 +00 +00 +06 +00 +98 +1f +00 +00 +1c +00 +00 +00 +06 +00 +b1 +1f +00 +00 +1c +00 +00 +00 +06 +00 +e4 +1f +00 +00 +1c +00 +00 +00 +06 +00 +fd +1f +00 +00 +1c +00 +00 +00 +06 +00 +16 +20 +00 +00 +1c +00 +00 +00 +06 +00 +02 +22 +00 +00 +1c +00 +00 +00 +06 +00 +1e +22 +00 +00 +1c +00 +00 +00 +06 +00 +6c +22 +00 +00 +1c +00 +00 +00 +06 +00 +88 +22 +00 +00 +1c +00 +00 +00 +06 +00 +b5 +22 +00 +00 +1c +00 +00 +00 +06 +00 +d1 +22 +00 +00 +1c +00 +00 +00 +06 +00 +ed +22 +00 +00 +1c +00 +00 +00 +06 +00 +6d +23 +00 +00 +1c +00 +00 +00 +06 +00 +89 +23 +00 +00 +1c +00 +00 +00 +06 +00 +3f +24 +00 +00 +1c +00 +00 +00 +06 +00 +6c +24 +00 +00 +1c +00 +00 +00 +06 +00 +bb +24 +00 +00 +1c +00 +00 +00 +06 +00 +e8 +24 +00 +00 +1c +00 +00 +00 +06 +00 +47 +25 +00 +00 +1c +00 +00 +00 +06 +00 +63 +25 +00 +00 +1c +00 +00 +00 +06 +00 +90 +25 +00 +00 +1c +00 +00 +00 +06 +00 +de +26 +00 +00 +1c +00 +00 +00 +06 +00 +ee +26 +00 +00 +1c +00 +00 +00 +06 +00 +68 +27 +00 +00 +1c +00 +00 +00 +06 +00 +84 +27 +00 +00 +1c +00 +00 +00 +06 +00 +c2 +27 +00 +00 +09 +00 +00 +00 +06 +00 +cf +27 +00 +00 +1c +00 +00 +00 +06 +00 +eb +27 +00 +00 +1c +00 +00 +00 +06 +00 +07 +28 +00 +00 +1c +00 +00 +00 +06 +00 +7b +28 +00 +00 +1c +00 +00 +00 +06 +00 +97 +28 +00 +00 +1c +00 +00 +00 +06 +00 +b3 +28 +00 +00 +1c +00 +00 +00 +06 +00 +18 +29 +00 +00 +1c +00 +00 +00 +06 +00 +34 +29 +00 +00 +1c +00 +00 +00 +06 +00 +50 +29 +00 +00 +1c +00 +00 +00 +06 +00 +6c +29 +00 +00 +1c +00 +00 +00 +06 +00 +88 +29 +00 +00 +1c +00 +00 +00 +06 +00 +9d +29 +00 +00 +1c +00 +00 +00 +06 +00 +b9 +29 +00 +00 +1c +00 +00 +00 +06 +00 +f7 +29 +00 +00 +1c +00 +00 +00 +06 +00 +24 +2a +00 +00 +1c +00 +00 +00 +06 +00 +40 +2a +00 +00 +1c +00 +00 +00 +06 +00 +5c +2a +00 +00 +1c +00 +00 +00 +06 +00 +2e +2b +00 +00 +1c +00 +00 +00 +06 +00 +a5 +2b +00 +00 +1c +00 +00 +00 +06 +00 +c1 +2b +00 +00 +1c +00 +00 +00 +06 +00 +dd +2b +00 +00 +1c +00 +00 +00 +06 +00 +f9 +2b +00 +00 +09 +00 +00 +00 +06 +00 +06 +2c +00 +00 +1c +00 +00 +00 +06 +00 +22 +2c +00 +00 +1c +00 +00 +00 +06 +00 +d6 +2c +00 +00 +1c +00 +00 +00 +06 +00 +24 +2d +00 +00 +1c +00 +00 +00 +06 +00 +5f +2d +00 +00 +1c +00 +00 +00 +06 +00 +8f +2d +00 +00 +09 +00 +00 +00 +06 +00 +9c +2d +00 +00 +1c +00 +00 +00 +06 +00 +b8 +2d +00 +00 +1c +00 +00 +00 +06 +00 +d4 +2d +00 +00 +1c +00 +00 +00 +06 +00 +f0 +2d +00 +00 +1c +00 +00 +00 +06 +00 +0c +2e +00 +00 +1c +00 +00 +00 +06 +00 +39 +2e +00 +00 +1c +00 +00 +00 +06 +00 +66 +2e +00 +00 +1c +00 +00 +00 +06 +00 +93 +2e +00 +00 +1c +00 +00 +00 +06 +00 +78 +2f +00 +00 +1c +00 +00 +00 +06 +00 +b6 +30 +00 +00 +1c +00 +00 +00 +06 +00 +1a +31 +00 +00 +1c +00 +00 +00 +06 +00 +cc +32 +00 +00 +1c +00 +00 +00 +06 +00 +f9 +32 +00 +00 +1c +00 +00 +00 +06 +00 +15 +33 +00 +00 +1c +00 +00 +00 +06 +00 +31 +33 +00 +00 +1c +00 +00 +00 +06 +00 +9c +33 +00 +00 +1c +00 +00 +00 +06 +00 +c9 +33 +00 +00 +1c +00 +00 +00 +06 +00 +e5 +33 +00 +00 +1c +00 +00 +00 +06 +00 +01 +34 +00 +00 +1c +00 +00 +00 +06 +00 +5b +34 +00 +00 +1c +00 +00 +00 +06 +00 +bc +34 +00 +00 +09 +00 +00 +00 +06 +00 +c9 +34 +00 +00 +1c +00 +00 +00 +06 +00 +25 +35 +00 +00 +1c +00 +00 +00 +06 +00 +41 +35 +00 +00 +1c +00 +00 +00 +06 +00 +5d +35 +00 +00 +09 +00 +00 +00 +06 +00 +6a +35 +00 +00 +1c +00 +00 +00 +06 +00 +86 +35 +00 +00 +1c +00 +00 +00 +06 +00 +a2 +35 +00 +00 +09 +00 +00 +00 +06 +00 +af +35 +00 +00 +1c +00 +00 +00 +06 +00 +cb +35 +00 +00 +09 +00 +00 +00 +06 +00 +d8 +35 +00 +00 +1c +00 +00 +00 +06 +00 +c7 +36 +00 +00 +1c +00 +00 +00 +06 +00 +4a +37 +00 +00 +1c +00 +00 +00 +06 +00 +8a +37 +00 +00 +1c +00 +00 +00 +06 +00 +9f +37 +00 +00 +1c +00 +00 +00 +06 +00 +bb +37 +00 +00 +1c +00 +00 +00 +06 +00 +f9 +37 +00 +00 +1c +00 +00 +00 +06 +00 +1e +38 +00 +00 +1c +00 +00 +00 +06 +00 +2e +38 +00 +00 +1c +00 +00 +00 +06 +00 +4a +38 +00 +00 +1c +00 +00 +00 +06 +00 +66 +38 +00 +00 +1c +00 +00 +00 +06 +00 +82 +38 +00 +00 +1c +00 +00 +00 +06 +00 +34 +39 +00 +00 +1c +00 +00 +00 +06 +00 +50 +39 +00 +00 +1c +00 +00 +00 +06 +00 +6c +39 +00 +00 +1c +00 +00 +00 +06 +00 +9a +39 +00 +00 +1c +00 +00 +00 +06 +00 +b6 +39 +00 +00 +1c +00 +00 +00 +06 +00 +51 +3a +00 +00 +1c +00 +00 +00 +06 +00 +84 +3a +00 +00 +1c +00 +00 +00 +06 +00 +a0 +3a +00 +00 +1c +00 +00 +00 +06 +00 +bc +3a +00 +00 +1c +00 +00 +00 +06 +00 +d8 +3a +00 +00 +1c +00 +00 +00 +06 +00 +f4 +3a +00 +00 +1c +00 +00 +00 +06 +00 +4f +3b +00 +00 +1c +00 +00 +00 +06 +00 +82 +3b +00 +00 +1c +00 +00 +00 +06 +00 +9e +3b +00 +00 +1c +00 +00 +00 +06 +00 +ba +3b +00 +00 +1c +00 +00 +00 +06 +00 +6b +3c +00 +00 +1c +00 +00 +00 +06 +00 +c1 +3c +00 +00 +1c +00 +00 +00 +06 +00 +dd +3c +00 +00 +1c +00 +00 +00 +06 +00 +f9 +3c +00 +00 +1c +00 +00 +00 +06 +00 +15 +3d +00 +00 +1c +00 +00 +00 +06 +00 +42 +3d +00 +00 +1c +00 +00 +00 +06 +00 +9c +3d +00 +00 +1c +00 +00 +00 +06 +00 +b8 +3d +00 +00 +1c +00 +00 +00 +06 +00 +19 +3e +00 +00 +09 +00 +00 +00 +06 +00 +26 +3e +00 +00 +1c +00 +00 +00 +06 +00 +82 +3e +00 +00 +1c +00 +00 +00 +06 +00 +9e +3e +00 +00 +1c +00 +00 +00 +06 +00 +ba +3e +00 +00 +1c +00 +00 +00 +06 +00 +d6 +3e +00 +00 +09 +00 +00 +00 +06 +00 +e3 +3e +00 +00 +1c +00 +00 +00 +06 +00 +ff +3e +00 +00 +09 +00 +00 +00 +06 +00 +0c +3f +00 +00 +1c +00 +00 +00 +06 +00 +28 +3f +00 +00 +09 +00 +00 +00 +06 +00 +35 +3f +00 +00 +1c +00 +00 +00 +06 +00 +bb +40 +00 +00 +1c +00 +00 +00 +06 +00 +e8 +40 +00 +00 +1c +00 +00 +00 +06 +00 +15 +41 +00 +00 +1c +00 +00 +00 +06 +00 +53 +41 +00 +00 +1c +00 +00 +00 +06 +00 +b3 +41 +00 +00 +1c +00 +00 +00 +06 +00 +24 +42 +00 +00 +1c +00 +00 +00 +06 +00 +40 +42 +00 +00 +1c +00 +00 +00 +06 +00 +2b +43 +00 +00 +1c +00 +00 +00 +06 +00 +47 +43 +00 +00 +1c +00 +00 +00 +06 +00 +ae +43 +00 +00 +1c +00 +00 +00 +06 +00 +ca +43 +00 +00 +1c +00 +00 +00 +06 +00 +29 +44 +00 +00 +1c +00 +00 +00 +06 +00 +45 +44 +00 +00 +1c +00 +00 +00 +06 +00 +61 +44 +00 +00 +1c +00 +00 +00 +06 +00 +20 +45 +00 +00 +1c +00 +00 +00 +06 +00 +3c +45 +00 +00 +1c +00 +00 +00 +06 +00 +58 +45 +00 +00 +1c +00 +00 +00 +06 +00 +96 +45 +00 +00 +1c +00 +00 +00 +06 +00 +e5 +45 +00 +00 +1c +00 +00 +00 +06 +00 +5e +46 +00 +00 +1c +00 +00 +00 +06 +00 +7a +46 +00 +00 +1c +00 +00 +00 +06 +00 +b8 +46 +00 +00 +1c +00 +00 +00 +06 +00 +44 +48 +00 +00 +1c +00 +00 +00 +06 +00 +60 +48 +00 +00 +1c +00 +00 +00 +06 +00 +fc +48 +00 +00 +1c +00 +00 +00 +06 +00 +24 +49 +00 +00 +1c +00 +00 +00 +06 +00 +57 +49 +00 +00 +1c +00 +00 +00 +06 +00 +9f +49 +00 +00 +1c +00 +00 +00 +06 +00 +bb +49 +00 +00 +1c +00 +00 +00 +06 +00 +0a +4a +00 +00 +1c +00 +00 +00 +06 +00 +48 +4a +00 +00 +1c +00 +00 +00 +06 +00 +99 +4a +00 +00 +1c +00 +00 +00 +06 +00 +b5 +4a +00 +00 +1c +00 +00 +00 +06 +00 +d1 +4a +00 +00 +1c +00 +00 +00 +06 +00 +74 +4b +00 +00 +1c +00 +00 +00 +06 +00 +90 +4b +00 +00 +1c +00 +00 +00 +06 +00 +ac +4b +00 +00 +1c +00 +00 +00 +06 +00 +eb +4b +00 +00 +1c +00 +00 +00 +06 +00 +07 +4c +00 +00 +1c +00 +00 +00 +06 +00 +55 +4c +00 +00 +1c +00 +00 +00 +06 +00 +71 +4c +00 +00 +1c +00 +00 +00 +06 +00 +c7 +4c +00 +00 +1c +00 +00 +00 +06 +00 +27 +4d +00 +00 +1c +00 +00 +00 +06 +00 +5e +4e +00 +00 +1c +00 +00 +00 +06 +00 +7a +4e +00 +00 +1c +00 +00 +00 +06 +00 +b8 +4e +00 +00 +1c +00 +00 +00 +06 +00 +d4 +4e +00 +00 +1c +00 +00 +00 +06 +00 +07 +4f +00 +00 +1c +00 +00 +00 +06 +00 +23 +4f +00 +00 +1c +00 +00 +00 +06 +00 +48 +4f +00 +00 +1c +00 +00 +00 +06 +00 +58 +4f +00 +00 +1c +00 +00 +00 +06 +00 +74 +4f +00 +00 +1c +00 +00 +00 +06 +00 +90 +4f +00 +00 +1c +00 +00 +00 +06 +00 +ac +4f +00 +00 +1c +00 +00 +00 +06 +00 +5e +50 +00 +00 +1c +00 +00 +00 +06 +00 +7a +50 +00 +00 +1c +00 +00 +00 +06 +00 +96 +50 +00 +00 +1c +00 +00 +00 +06 +00 +c4 +50 +00 +00 +1c +00 +00 +00 +06 +00 +e0 +50 +00 +00 +1c +00 +00 +00 +06 +00 +f2 +51 +00 +00 +1c +00 +00 +00 +06 +00 +0e +52 +00 +00 +1c +00 +00 +00 +06 +00 +2a +52 +00 +00 +1c +00 +00 +00 +06 +00 +87 +52 +00 +00 +1c +00 +00 +00 +06 +00 +a3 +52 +00 +00 +1c +00 +00 +00 +06 +00 +bf +52 +00 +00 +1c +00 +00 +00 +06 +00 +20 +53 +00 +00 +1c +00 +00 +00 +06 +00 +91 +53 +00 +00 +1c +00 +00 +00 +06 +00 +ad +53 +00 +00 +1c +00 +00 +00 +06 +00 +da +53 +00 +00 +1c +00 +00 +00 +06 +00 +15 +55 +00 +00 +1c +00 +00 +00 +06 +00 +46 +55 +00 +00 +1c +00 +00 +00 +06 +00 +62 +55 +00 +00 +1c +00 +00 +00 +06 +00 +7e +55 +00 +00 +1c +00 +00 +00 +06 +00 +9a +55 +00 +00 +1c +00 +00 +00 +06 +00 +b6 +55 +00 +00 +1c +00 +00 +00 +06 +00 +f4 +55 +00 +00 +1c +00 +00 +00 +06 +00 +10 +56 +00 +00 +09 +00 +00 +00 +06 +00 +54 +56 +00 +00 +09 +00 +00 +00 +06 +00 +61 +56 +00 +00 +1c +00 +00 +00 +06 +00 +9c +57 +00 +00 +09 +00 +00 +00 +06 +00 +a5 +57 +00 +00 +1c +00 +00 +00 +06 +00 +ad +57 +00 +00 +19 +00 +00 +00 +14 +00 +17 +58 +00 +00 +1c +00 +00 +00 +06 +00 +44 +58 +00 +00 +1c +00 +00 +00 +06 +00 +88 +59 +00 +00 +1c +00 +00 +00 +06 +00 +d5 +59 +00 +00 +1c +00 +00 +00 +06 +00 +f1 +59 +00 +00 +1c +00 +00 +00 +06 +00 +27 +5a +00 +00 +09 +00 +00 +00 +06 +00 +72 +5a +00 +00 +09 +00 +00 +00 +06 +00 +ba +5a +00 +00 +1c +00 +00 +00 +06 +00 +f2 +5a +00 +00 +1c +00 +00 +00 +06 +00 +1f +5b +00 +00 +1c +00 +00 +00 +06 +00 +53 +5b +00 +00 +1c +00 +00 +00 +06 +00 +5f +5c +00 +00 +1c +00 +00 +00 +06 +00 +e8 +5c +00 +00 +1c +00 +00 +00 +06 +00 +04 +5d +00 +00 +1c +00 +00 +00 +06 +00 +20 +5d +00 +00 +1c +00 +00 +00 +06 +00 +3c +5d +00 +00 +1c +00 +00 +00 +06 +00 +8f +5e +00 +00 +1c +00 +00 +00 +06 +00 +e3 +5e +00 +00 +1c +00 +00 +00 +06 +00 +be +5f +00 +00 +1c +00 +00 +00 +06 +00 +ea +5f +00 +00 +1c +00 +00 +00 +06 +00 +1d +60 +00 +00 +1c +00 +00 +00 +06 +00 +6b +60 +00 +00 +1c +00 +00 +00 +06 +00 +87 +60 +00 +00 +1c +00 +00 +00 +06 +00 +c1 +60 +00 +00 +1c +00 +00 +00 +06 +00 +dd +60 +00 +00 +1c +00 +00 +00 +06 +00 +f9 +60 +00 +00 +1c +00 +00 +00 +06 +00 +15 +61 +00 +00 +1c +00 +00 +00 +06 +00 +31 +61 +00 +00 +09 +00 +00 +00 +06 +00 +3e +61 +00 +00 +1c +00 +00 +00 +06 +00 +5a +61 +00 +00 +1c +00 +00 +00 +06 +00 +76 +61 +00 +00 +09 +00 +00 +00 +06 +00 +83 +61 +00 +00 +1c +00 +00 +00 +06 +00 +c1 +61 +00 +00 +1c +00 +00 +00 +06 +00 +4d +62 +00 +00 +1c +00 +00 +00 +06 +00 +a2 +62 +00 +00 +1c +00 +00 +00 +06 +00 +b7 +62 +00 +00 +1c +00 +00 +00 +06 +00 +cc +62 +00 +00 +1c +00 +00 +00 +06 +00 +e8 +62 +00 +00 +1c +00 +00 +00 +06 +00 +58 +63 +00 +00 +1c +00 +00 +00 +06 +00 +6d +63 +00 +00 +1c +00 +00 +00 +06 +00 +c6 +63 +00 +00 +1c +00 +00 +00 +06 +00 +e2 +63 +00 +00 +1c +00 +00 +00 +06 +00 +0f +64 +00 +00 +1c +00 +00 +00 +06 +00 +6f +64 +00 +00 +1c +00 +00 +00 +06 +00 +8b +64 +00 +00 +1c +00 +00 +00 +06 +00 +b8 +64 +00 +00 +1c +00 +00 +00 +06 +00 +27 +65 +00 +00 +1c +00 +00 +00 +06 +00 +43 +65 +00 +00 +1c +00 +00 +00 +06 +00 +5f +65 +00 +00 +1c +00 +00 +00 +06 +00 +a6 +65 +00 +00 +1c +00 +00 +00 +06 +00 +c2 +65 +00 +00 +1c +00 +00 +00 +06 +00 +96 +66 +00 +00 +1c +00 +00 +00 +06 +00 +b2 +66 +00 +00 +1c +00 +00 +00 +06 +00 +ce +66 +00 +00 +1c +00 +00 +00 +06 +00 +ea +66 +00 +00 +1c +00 +00 +00 +06 +00 +39 +67 +00 +00 +1c +00 +00 +00 +06 +00 +0e +68 +00 +00 +1c +00 +00 +00 +06 +00 +2a +68 +00 +00 +1c +00 +00 +00 +06 +00 +46 +68 +00 +00 +1c +00 +00 +00 +06 +00 +62 +68 +00 +00 +1c +00 +00 +00 +06 +00 +f5 +68 +00 +00 +1c +00 +00 +00 +06 +00 +29 +69 +00 +00 +1c +00 +00 +00 +06 +00 +39 +6a +00 +00 +09 +00 +00 +00 +06 +00 +42 +6a +00 +00 +1c +00 +00 +00 +06 +00 +4a +6a +00 +00 +19 +00 +00 +00 +14 +00 +98 +6a +00 +00 +09 +00 +00 +00 +06 +00 +f1 +6a +00 +00 +1c +00 +00 +00 +06 +00 +7a +6b +00 +00 +1c +00 +00 +00 +06 +00 +96 +6b +00 +00 +1c +00 +00 +00 +06 +00 +b2 +6b +00 +00 +1c +00 +00 +00 +06 +00 +ce +6b +00 +00 +1c +00 +00 +00 +06 +00 +ea +6b +00 +00 +1c +00 +00 +00 +06 +00 +06 +6c +00 +00 +09 +00 +00 +00 +06 +00 +13 +6c +00 +00 +1c +00 +00 +00 +06 +00 +2f +6c +00 +00 +09 +00 +00 +00 +06 +00 +3c +6c +00 +00 +1c +00 +00 +00 +06 +00 +b9 +6e +00 +00 +1c +00 +00 +00 +06 +00 +d5 +6e +00 +00 +1c +00 +00 +00 +06 +00 +f5 +70 +00 +00 +1c +00 +00 +00 +06 +00 +33 +71 +00 +00 +1c +00 +00 +00 +06 +00 +c1 +71 +00 +00 +1c +00 +00 +00 +06 +00 +dd +71 +00 +00 +1c +00 +00 +00 +06 +00 +4e +72 +00 +00 +1c +00 +00 +00 +06 +00 +6a +72 +00 +00 +1c +00 +00 +00 +06 +00 +f7 +72 +00 +00 +1c +00 +00 +00 +06 +00 +13 +73 +00 +00 +1c +00 +00 +00 +06 +00 +72 +73 +00 +00 +1c +00 +00 +00 +06 +00 +8e +73 +00 +00 +1c +00 +00 +00 +06 +00 +ed +73 +00 +00 +1c +00 +00 +00 +06 +00 +09 +74 +00 +00 +1c +00 +00 +00 +06 +00 +c9 +74 +00 +00 +1c +00 +00 +00 +06 +00 +e5 +74 +00 +00 +1c +00 +00 +00 +06 +00 +01 +75 +00 +00 +1c +00 +00 +00 +06 +00 +91 +75 +00 +00 +1c +00 +00 +00 +06 +00 +ad +75 +00 +00 +1c +00 +00 +00 +06 +00 +c9 +75 +00 +00 +1c +00 +00 +00 +06 +00 +28 +76 +00 +00 +1c +00 +00 +00 +06 +00 +44 +76 +00 +00 +1c +00 +00 +00 +06 +00 +af +76 +00 +00 +1c +00 +00 +00 +06 +00 +cb +76 +00 +00 +1c +00 +00 +00 +06 +00 +e7 +76 +00 +00 +09 +00 +00 +00 +06 +00 +37 +77 +00 +00 +1c +00 +00 +00 +06 +00 +a7 +77 +00 +00 +1c +00 +00 +00 +06 +00 +c3 +77 +00 +00 +1c +00 +00 +00 +06 +00 +df +77 +00 +00 +1c +00 +00 +00 +06 +00 +d7 +78 +00 +00 +1c +00 +00 +00 +06 +00 +0d +79 +00 +00 +1c +00 +00 +00 +06 +00 +1d +79 +00 +00 +1c +00 +00 +00 +06 +00 +42 +79 +00 +00 +1c +00 +00 +00 +06 +00 +aa +79 +00 +00 +1c +00 +00 +00 +06 +00 +c6 +79 +00 +00 +1c +00 +00 +00 +06 +00 +92 +7a +00 +00 +1c +00 +00 +00 +06 +00 +d8 +7a +00 +00 +1c +00 +00 +00 +06 +00 +1c +7b +00 +00 +1c +00 +00 +00 +06 +00 +56 +7b +00 +00 +1c +00 +00 +00 +06 +00 +90 +7b +00 +00 +1c +00 +00 +00 +06 +00 +ac +7b +00 +00 +1c +00 +00 +00 +06 +00 +c8 +7b +00 +00 +1c +00 +00 +00 +06 +00 +e4 +7b +00 +00 +1c +00 +00 +00 +06 +00 +00 +7c +00 +00 +1c +00 +00 +00 +06 +00 +1c +7c +00 +00 +1c +00 +00 +00 +06 +00 +38 +7c +00 +00 +1c +00 +00 +00 +06 +00 +54 +7c +00 +00 +1c +00 +00 +00 +06 +00 +70 +7c +00 +00 +1c +00 +00 +00 +06 +00 +89 +7d +00 +00 +1c +00 +00 +00 +06 +00 +fd +7d +00 +00 +1c +00 +00 +00 +06 +00 +3e +7e +00 +00 +1c +00 +00 +00 +06 +00 +66 +7e +00 +00 +1c +00 +00 +00 +06 +00 +5d +7f +00 +00 +1c +00 +00 +00 +06 +00 +79 +7f +00 +00 +1c +00 +00 +00 +06 +00 +95 +7f +00 +00 +1c +00 +00 +00 +06 +00 +b1 +7f +00 +00 +1c +00 +00 +00 +06 +00 +c6 +7f +00 +00 +1c +00 +00 +00 +06 +00 +e2 +7f +00 +00 +1c +00 +00 +00 +06 +00 +fe +7f +00 +00 +1c +00 +00 +00 +06 +00 +13 +80 +00 +00 +09 +00 +00 +00 +06 +00 +20 +80 +00 +00 +1c +00 +00 +00 +06 +00 +3c +80 +00 +00 +1c +00 +00 +00 +06 +00 +58 +80 +00 +00 +1c +00 +00 +00 +06 +00 +74 +80 +00 +00 +1c +00 +00 +00 +06 +00 +42 +81 +00 +00 +1c +00 +00 +00 +06 +00 +5e +81 +00 +00 +1c +00 +00 +00 +06 +00 +7a +81 +00 +00 +1c +00 +00 +00 +06 +00 +96 +81 +00 +00 +1c +00 +00 +00 +06 +00 +df +82 +00 +00 +1c +00 +00 +00 +06 +00 +fb +82 +00 +00 +1c +00 +00 +00 +06 +00 +17 +83 +00 +00 +1c +00 +00 +00 +06 +00 +33 +83 +00 +00 +1c +00 +00 +00 +06 +00 +be +83 +00 +00 +1c +00 +00 +00 +06 +00 +da +83 +00 +00 +1c +00 +00 +00 +06 +00 +f6 +83 +00 +00 +1c +00 +00 +00 +06 +00 +12 +84 +00 +00 +1c +00 +00 +00 +06 +00 +cf +84 +00 +00 +1c +00 +00 +00 +06 +00 +eb +84 +00 +00 +1c +00 +00 +00 +06 +00 +07 +85 +00 +00 +1c +00 +00 +00 +06 +00 +23 +85 +00 +00 +1c +00 +00 +00 +06 +00 +1e +86 +00 +00 +1c +00 +00 +00 +06 +00 +3a +86 +00 +00 +1c +00 +00 +00 +06 +00 +56 +86 +00 +00 +1c +00 +00 +00 +06 +00 +72 +86 +00 +00 +1c +00 +00 +00 +06 +00 +fb +86 +00 +00 +1c +00 +00 +00 +06 +00 +17 +87 +00 +00 +1c +00 +00 +00 +06 +00 +33 +87 +00 +00 +1c +00 +00 +00 +06 +00 +48 +87 +00 +00 +1c +00 +00 +00 +06 +00 +03 +88 +00 +00 +1c +00 +00 +00 +06 +00 +1f +88 +00 +00 +1c +00 +00 +00 +06 +00 +3b +88 +00 +00 +1c +00 +00 +00 +06 +00 +57 +88 +00 +00 +1c +00 +00 +00 +06 +00 +73 +88 +00 +00 +1c +00 +00 +00 +06 +00 +8f +88 +00 +00 +1c +00 +00 +00 +06 +00 +ab +88 +00 +00 +1c +00 +00 +00 +06 +00 +1d +89 +00 +00 +1c +00 +00 +00 +06 +00 +39 +89 +00 +00 +1c +00 +00 +00 +06 +00 +6c +89 +00 +00 +1c +00 +00 +00 +06 +00 +88 +89 +00 +00 +09 +00 +00 +00 +06 +00 +95 +89 +00 +00 +1c +00 +00 +00 +06 +00 +b1 +89 +00 +00 +09 +00 +00 +00 +06 +00 +be +89 +00 +00 +1c +00 +00 +00 +06 +00 +da +89 +00 +00 +1c +00 +00 +00 +06 +00 +07 +8a +00 +00 +1c +00 +00 +00 +06 +00 +8c +8a +00 +00 +09 +00 +00 +00 +06 +00 +81 +8b +00 +00 +1c +00 +00 +00 +06 +00 +34 +8c +00 +00 +1c +00 +00 +00 +06 +00 +44 +8c +00 +00 +09 +00 +00 +00 +06 +00 +66 +8c +00 +00 +09 +00 +00 +00 +06 +00 +88 +8c +00 +00 +1c +00 +00 +00 +06 +00 +fa +8c +00 +00 +1c +00 +00 +00 +06 +00 +27 +8d +00 +00 +1c +00 +00 +00 +06 +00 +43 +8d +00 +00 +1c +00 +00 +00 +06 +00 +be +8d +00 +00 +1c +00 +00 +00 +06 +00 +da +8d +00 +00 +1c +00 +00 +00 +06 +00 +f6 +8d +00 +00 +1c +00 +00 +00 +06 +00 +0b +8e +00 +00 +1c +00 +00 +00 +06 +00 +20 +8e +00 +00 +09 +00 +00 +00 +06 +00 +dd +8e +00 +00 +1c +00 +00 +00 +06 +00 +f9 +8e +00 +00 +1c +00 +00 +00 +06 +00 +79 +8f +00 +00 +09 +00 +00 +00 +06 +00 +9b +8f +00 +00 +09 +00 +00 +00 +06 +00 +25 +90 +00 +00 +1c +00 +00 +00 +06 +00 +59 +90 +00 +00 +1c +00 +00 +00 +06 +00 +86 +90 +00 +00 +1c +00 +00 +00 +06 +00 +ba +90 +00 +00 +1c +00 +00 +00 +06 +00 +dd +90 +00 +00 +09 +00 +00 +00 +06 +00 +ff +90 +00 +00 +1c +00 +00 +00 +06 +00 +14 +91 +00 +00 +1c +00 +00 +00 +06 +00 +85 +91 +00 +00 +1c +00 +00 +00 +06 +00 +a1 +91 +00 +00 +1c +00 +00 +00 +06 +00 +bd +91 +00 +00 +09 +00 +00 +00 +06 +00 +df +91 +00 +00 +09 +00 +00 +00 +06 +00 +01 +92 +00 +00 +09 +00 +00 +00 +06 +00 +23 +92 +00 +00 +09 +00 +00 +00 +06 +00 +46 +92 +00 +00 +09 +00 +00 +00 +06 +00 +69 +92 +00 +00 +09 +00 +00 +00 +06 +00 +cf +92 +00 +00 +09 +00 +00 +00 +06 +00 +f5 +92 +00 +00 +09 +00 +00 +00 +06 +00 +1b +93 +00 +00 +09 +00 +00 +00 +06 +00 +41 +93 +00 +00 +09 +00 +00 +00 +06 +00 +a6 +95 +00 +00 +1c +00 +00 +00 +06 +00 +c2 +95 +00 +00 +1c +00 +00 +00 +06 +00 +de +95 +00 +00 +1c +00 +00 +00 +06 +00 +93 +96 +00 +00 +1c +00 +00 +00 +06 +00 +c7 +96 +00 +00 +1c +00 +00 +00 +06 +00 +44 +97 +00 +00 +1c +00 +00 +00 +06 +00 +60 +97 +00 +00 +1c +00 +00 +00 +06 +00 +7c +97 +00 +00 +1c +00 +00 +00 +06 +00 +98 +97 +00 +00 +09 +00 +00 +00 +06 +00 +a5 +97 +00 +00 +1c +00 +00 +00 +06 +00 +f6 +97 +00 +00 +1c +00 +00 +00 +06 +00 +12 +98 +00 +00 +1c +00 +00 +00 +06 +00 +59 +98 +00 +00 +1c +00 +00 +00 +06 +00 +a2 +98 +00 +00 +1c +00 +00 +00 +06 +00 +cf +98 +00 +00 +1c +00 +00 +00 +06 +00 +03 +99 +00 +00 +1c +00 +00 +00 +06 +00 +1f +99 +00 +00 +1c +00 +00 +00 +06 +00 +4c +99 +00 +00 +1c +00 +00 +00 +06 +00 +68 +99 +00 +00 +1c +00 +00 +00 +06 +00 +b7 +99 +00 +00 +1c +00 +00 +00 +06 +00 +ea +99 +00 +00 +1c +00 +00 +00 +06 +00 +06 +9a +00 +00 +09 +00 +00 +00 +06 +00 +13 +9a +00 +00 +1c +00 +00 +00 +06 +00 +40 +9a +00 +00 +1c +00 +00 +00 +06 +00 +63 +9a +00 +00 +09 +00 +00 +00 +06 +00 +70 +9a +00 +00 +1c +00 +00 +00 +06 +00 +d0 +9a +00 +00 +1c +00 +00 +00 +06 +00 +fe +9a +00 +00 +1c +00 +00 +00 +06 +00 +1a +9b +00 +00 +09 +00 +00 +00 +06 +00 +27 +9b +00 +00 +1c +00 +00 +00 +06 +00 +98 +9c +00 +00 +09 +00 +00 +00 +06 +00 +a5 +9c +00 +00 +1c +00 +00 +00 +06 +00 +f8 +9c +00 +00 +1c +00 +00 +00 +06 +00 +57 +9d +00 +00 +1c +00 +00 +00 +06 +00 +73 +9d +00 +00 +1c +00 +00 +00 +06 +00 +c1 +9d +00 +00 +1c +00 +00 +00 +06 +00 +dd +9d +00 +00 +1c +00 +00 +00 +06 +00 +33 +9e +00 +00 +1c +00 +00 +00 +06 +00 +4f +9e +00 +00 +1c +00 +00 +00 +06 +00 +d8 +9e +00 +00 +1c +00 +00 +00 +06 +00 +f4 +9e +00 +00 +1c +00 +00 +00 +06 +00 +10 +9f +00 +00 +1c +00 +00 +00 +06 +00 +2c +9f +00 +00 +1c +00 +00 +00 +06 +00 +48 +9f +00 +00 +09 +00 +00 +00 +06 +00 +55 +9f +00 +00 +1c +00 +00 +00 +06 +00 +71 +9f +00 +00 +09 +00 +00 +00 +06 +00 +7e +9f +00 +00 +1c +00 +00 +00 +06 +00 +9a +9f +00 +00 +09 +00 +00 +00 +06 +00 +a7 +9f +00 +00 +1c +00 +00 +00 +06 +00 +c3 +9f +00 +00 +09 +00 +00 +00 +06 +00 +d0 +9f +00 +00 +1c +00 +00 +00 +06 +00 +ec +9f +00 +00 +09 +00 +00 +00 +06 +00 +23 +a0 +00 +00 +09 +00 +00 +00 +06 +00 +2e +a0 +00 +00 +1c +00 +00 +00 +06 +00 +34 +a0 +00 +00 +0e +00 +00 +00 +14 +00 +a5 +a0 +00 +00 +1c +00 +00 +00 +06 +00 +e9 +a0 +00 +00 +1c +00 +00 +00 +06 +00 +46 +a1 +00 +00 +1c +00 +00 +00 +06 +00 +62 +a1 +00 +00 +1c +00 +00 +00 +06 +00 +7e +a1 +00 +00 +1c +00 +00 +00 +06 +00 +cc +a1 +00 +00 +1c +00 +00 +00 +06 +00 +e8 +a1 +00 +00 +1c +00 +00 +00 +06 +00 +04 +a2 +00 +00 +09 +00 +00 +00 +06 +00 +0d +a2 +00 +00 +1c +00 +00 +00 +06 +00 +d3 +a2 +00 +00 +1c +00 +00 +00 +06 +00 +87 +a4 +00 +00 +1c +00 +00 +00 +06 +00 +c9 +a7 +00 +00 +1c +00 +00 +00 +06 +00 +f1 +a7 +00 +00 +1c +00 +00 +00 +06 +00 +b1 +a8 +00 +00 +1c +00 +00 +00 +06 +00 +ef +a8 +00 +00 +1c +00 +00 +00 +06 +00 +3e +a9 +00 +00 +1c +00 +00 +00 +06 +00 +5a +a9 +00 +00 +1c +00 +00 +00 +06 +00 +76 +a9 +00 +00 +1c +00 +00 +00 +06 +00 +b4 +a9 +00 +00 +1c +00 +00 +00 +06 +00 +29 +aa +00 +00 +1c +00 +00 +00 +06 +00 +5c +aa +00 +00 +1c +00 +00 +00 +06 +00 +8f +aa +00 +00 +1c +00 +00 +00 +06 +00 +ab +aa +00 +00 +1c +00 +00 +00 +06 +00 +c7 +aa +00 +00 +1c +00 +00 +00 +06 +00 +f4 +aa +00 +00 +1c +00 +00 +00 +06 +00 +8c +ab +00 +00 +1c +00 +00 +00 +06 +00 +55 +ac +00 +00 +1c +00 +00 +00 +06 +00 +89 +ac +00 +00 +1c +00 +00 +00 +06 +00 +c7 +ac +00 +00 +1c +00 +00 +00 +06 +00 +fa +ac +00 +00 +1c +00 +00 +00 +06 +00 +38 +ad +00 +00 +1c +00 +00 +00 +06 +00 +65 +ad +00 +00 +1c +00 +00 +00 +06 +00 +b8 +ad +00 +00 +1c +00 +00 +00 +06 +00 +d4 +ad +00 +00 +1c +00 +00 +00 +06 +00 +07 +ae +00 +00 +1c +00 +00 +00 +06 +00 +23 +ae +00 +00 +1c +00 +00 +00 +06 +00 +6b +ae +00 +00 +1c +00 +00 +00 +06 +00 +98 +ae +00 +00 +1c +00 +00 +00 +06 +00 +be +ae +00 +00 +1c +00 +00 +00 +06 +00 +da +ae +00 +00 +1c +00 +00 +00 +06 +00 +3b +af +00 +00 +1c +00 +00 +00 +06 +00 +8a +af +00 +00 +1c +00 +00 +00 +06 +00 +fb +af +00 +00 +1c +00 +00 +00 +06 +00 +17 +b0 +00 +00 +1c +00 +00 +00 +06 +00 +55 +b0 +00 +00 +1c +00 +00 +00 +06 +00 +82 +b0 +00 +00 +1c +00 +00 +00 +06 +00 +1b +b1 +00 +00 +1c +00 +00 +00 +06 +00 +59 +b1 +00 +00 +1c +00 +00 +00 +06 +00 +16 +b2 +00 +00 +1c +00 +00 +00 +06 +00 +32 +b2 +00 +00 +1c +00 +00 +00 +06 +00 +4e +b2 +00 +00 +1c +00 +00 +00 +06 +00 +7b +b2 +00 +00 +1c +00 +00 +00 +06 +00 +b9 +b2 +00 +00 +1c +00 +00 +00 +06 +00 +fd +b2 +00 +00 +1c +00 +00 +00 +06 +00 +19 +b3 +00 +00 +1c +00 +00 +00 +06 +00 +d9 +b3 +00 +00 +1c +00 +00 +00 +06 +00 +f5 +b3 +00 +00 +1c +00 +00 +00 +06 +00 +aa +b4 +00 +00 +1c +00 +00 +00 +06 +00 +c6 +b4 +00 +00 +1c +00 +00 +00 +06 +00 +30 +b5 +00 +00 +1c +00 +00 +00 +06 +00 +4c +b5 +00 +00 +1c +00 +00 +00 +06 +00 +68 +b5 +00 +00 +1c +00 +00 +00 +06 +00 +84 +b5 +00 +00 +1c +00 +00 +00 +06 +00 +b1 +b5 +00 +00 +1c +00 +00 +00 +06 +00 +cd +b5 +00 +00 +1c +00 +00 +00 +06 +00 +ff +b6 +00 +00 +1c +00 +00 +00 +06 +00 +3d +b7 +00 +00 +1c +00 +00 +00 +06 +00 +81 +b7 +00 +00 +1c +00 +00 +00 +06 +00 +9d +b7 +00 +00 +1c +00 +00 +00 +06 +00 +ca +b7 +00 +00 +1c +00 +00 +00 +06 +00 +f7 +b7 +00 +00 +1c +00 +00 +00 +06 +00 +3b +b8 +00 +00 +1c +00 +00 +00 +06 +00 +57 +b8 +00 +00 +1c +00 +00 +00 +06 +00 +8a +b8 +00 +00 +1c +00 +00 +00 +06 +00 +ce +b8 +00 +00 +1c +00 +00 +00 +06 +00 +ea +b8 +00 +00 +1c +00 +00 +00 +06 +00 +06 +b9 +00 +00 +1c +00 +00 +00 +06 +00 +22 +b9 +00 +00 +1c +00 +00 +00 +06 +00 +77 +b9 +00 +00 +1c +00 +00 +00 +06 +00 +93 +b9 +00 +00 +1c +00 +00 +00 +06 +00 +d8 +b9 +00 +00 +1c +00 +00 +00 +06 +00 +51 +ba +00 +00 +1c +00 +00 +00 +06 +00 +a4 +ba +00 +00 +1c +00 +00 +00 +06 +00 +c0 +ba +00 +00 +1c +00 +00 +00 +06 +00 +f3 +ba +00 +00 +1c +00 +00 +00 +06 +00 +0f +bb +00 +00 +1c +00 +00 +00 +06 +00 +40 +bc +00 +00 +1c +00 +00 +00 +06 +00 +5c +bc +00 +00 +1c +00 +00 +00 +06 +00 +aa +bc +00 +00 +1c +00 +00 +00 +06 +00 +dd +bc +00 +00 +1c +00 +00 +00 +06 +00 +f9 +bc +00 +00 +1c +00 +00 +00 +06 +00 +15 +bd +00 +00 +1c +00 +00 +00 +06 +00 +31 +bd +00 +00 +1c +00 +00 +00 +06 +00 +5e +bd +00 +00 +1c +00 +00 +00 +06 +00 +7a +bd +00 +00 +1c +00 +00 +00 +06 +00 +d1 +bd +00 +00 +1c +00 +00 +00 +06 +00 +ed +bd +00 +00 +1c +00 +00 +00 +06 +00 +27 +be +00 +00 +1c +00 +00 +00 +06 +00 +5a +be +00 +00 +1c +00 +00 +00 +06 +00 +73 +be +00 +00 +1c +00 +00 +00 +06 +00 +96 +be +00 +00 +1c +00 +00 +00 +06 +00 +e6 +be +00 +00 +1c +00 +00 +00 +06 +00 +02 +bf +00 +00 +1c +00 +00 +00 +06 +00 +56 +bf +00 +00 +1c +00 +00 +00 +06 +00 +86 +bf +00 +00 +1c +00 +00 +00 +06 +00 +9f +bf +00 +00 +1c +00 +00 +00 +06 +00 +d5 +bf +00 +00 +1c +00 +00 +00 +06 +00 +d6 +c0 +00 +00 +1c +00 +00 +00 +06 +00 +e7 +c1 +00 +00 +09 +00 +00 +00 +06 +00 +f0 +c1 +00 +00 +1c +00 +00 +00 +06 +00 +f8 +c1 +00 +00 +19 +00 +00 +00 +14 +00 +24 +c2 +00 +00 +1c +00 +00 +00 +06 +00 +7b +c3 +00 +00 +1c +00 +00 +00 +06 +00 +d2 +c3 +00 +00 +09 +00 +00 +00 +06 +00 +df +c3 +00 +00 +1c +00 +00 +00 +06 +00 +24 +c4 +00 +00 +09 +00 +00 +00 +06 +00 +31 +c4 +00 +00 +1c +00 +00 +00 +06 +00 +76 +c4 +00 +00 +1c +00 +00 +00 +06 +00 +cc +c4 +00 +00 +09 +00 +00 +00 +06 +00 +d9 +c4 +00 +00 +1c +00 +00 +00 +06 +00 +2a +c5 +00 +00 +1c +00 +00 +00 +06 +00 +54 +c5 +00 +00 +1c +00 +00 +00 +06 +00 +6d +c5 +00 +00 +1c +00 +00 +00 +06 +00 +c7 +c5 +00 +00 +1c +00 +00 +00 +06 +00 +50 +c6 +00 +00 +1c +00 +00 +00 +06 +00 +6c +c6 +00 +00 +1c +00 +00 +00 +06 +00 +88 +c6 +00 +00 +1c +00 +00 +00 +06 +00 +a4 +c6 +00 +00 +1c +00 +00 +00 +06 +00 +db +c6 +00 +00 +1c +00 +00 +00 +06 +00 +f7 +c6 +00 +00 +1c +00 +00 +00 +06 +00 +13 +c7 +00 +00 +1c +00 +00 +00 +06 +00 +49 +c7 +00 +00 +1c +00 +00 +00 +06 +00 +b0 +c7 +00 +00 +1c +00 +00 +00 +06 +00 +26 +c8 +00 +00 +1c +00 +00 +00 +06 +00 +42 +c8 +00 +00 +1c +00 +00 +00 +06 +00 +5e +c8 +00 +00 +1c +00 +00 +00 +06 +00 +7a +c8 +00 +00 +09 +00 +00 +00 +06 +00 +87 +c8 +00 +00 +1c +00 +00 +00 +06 +00 +55 +c9 +00 +00 +1c +00 +00 +00 +06 +00 +71 +c9 +00 +00 +1c +00 +00 +00 +06 +00 +8d +c9 +00 +00 +1c +00 +00 +00 +06 +00 +a9 +c9 +00 +00 +1c +00 +00 +00 +06 +00 +c5 +c9 +00 +00 +09 +00 +00 +00 +06 +00 +18 +ca +00 +00 +1c +00 +00 +00 +06 +00 +63 +ca +00 +00 +1c +00 +00 +00 +06 +00 +a8 +ca +00 +00 +1c +00 +00 +00 +06 +00 +cb +ca +00 +00 +1c +00 +00 +00 +06 +00 +f5 +ca +00 +00 +1c +00 +00 +00 +06 +00 +18 +cb +00 +00 +09 +00 +00 +00 +06 +00 +21 +cb +00 +00 +1c +00 +00 +00 +06 +00 +57 +cb +00 +00 +1c +00 +00 +00 +06 +00 +d7 +cb +00 +00 +1c +00 +00 +00 +06 +00 +47 +cc +00 +00 +1c +00 +00 +00 +06 +00 +6a +cc +00 +00 +1c +00 +00 +00 +06 +00 +8d +cc +00 +00 +1c +00 +00 +00 +06 +00 +a9 +cc +00 +00 +1c +00 +00 +00 +06 +00 +fc +cc +00 +00 +1c +00 +00 +00 +06 +00 +52 +cd +00 +00 +1c +00 +00 +00 +06 +00 +7e +cd +00 +00 +1c +00 +00 +00 +06 +00 +47 +ce +00 +00 +1c +00 +00 +00 +06 +00 +57 +ce +00 +00 +1c +00 +00 +00 +06 +00 +b5 +ce +00 +00 +1c +00 +00 +00 +06 +00 +d1 +ce +00 +00 +1c +00 +00 +00 +06 +00 +ed +ce +00 +00 +1c +00 +00 +00 +06 +00 +09 +cf +00 +00 +1c +00 +00 +00 +06 +00 +7d +cf +00 +00 +1c +00 +00 +00 +06 +00 +99 +cf +00 +00 +1c +00 +00 +00 +06 +00 +b5 +cf +00 +00 +1c +00 +00 +00 +06 +00 +1a +d0 +00 +00 +1c +00 +00 +00 +06 +00 +36 +d0 +00 +00 +1c +00 +00 +00 +06 +00 +52 +d0 +00 +00 +1c +00 +00 +00 +06 +00 +6e +d0 +00 +00 +1c +00 +00 +00 +06 +00 +8a +d0 +00 +00 +1c +00 +00 +00 +06 +00 +a6 +d0 +00 +00 +1c +00 +00 +00 +06 +00 +c2 +d0 +00 +00 +1c +00 +00 +00 +06 +00 +de +d0 +00 +00 +1c +00 +00 +00 +06 +00 +65 +d1 +00 +00 +1c +00 +00 +00 +06 +00 +81 +d1 +00 +00 +1c +00 +00 +00 +06 +00 +9d +d1 +00 +00 +1c +00 +00 +00 +06 +00 +c0 +d1 +00 +00 +09 +00 +00 +00 +06 +00 +c9 +d1 +00 +00 +1c +00 +00 +00 +06 +00 +d1 +d1 +00 +00 +19 +00 +00 +00 +14 +00 +e1 +d1 +00 +00 +1c +00 +00 +00 +06 +00 +04 +d2 +00 +00 +1c +00 +00 +00 +06 +00 +51 +d2 +00 +00 +1c +00 +00 +00 +06 +00 +6d +d2 +00 +00 +1c +00 +00 +00 +06 +00 +89 +d2 +00 +00 +09 +00 +00 +00 +06 +00 +92 +d2 +00 +00 +1c +00 +00 +00 +06 +00 +b5 +d2 +00 +00 +09 +00 +00 +00 +06 +00 +c1 +d2 +00 +00 +1c +00 +00 +00 +06 +00 +c7 +d2 +00 +00 +0e +00 +00 +00 +14 +00 +cd +d2 +00 +00 +1c +00 +00 +00 +06 +00 +e9 +d2 +00 +00 +1c +00 +00 +00 +06 +00 +6f +d3 +00 +00 +1c +00 +00 +00 +06 +00 +88 +d3 +00 +00 +1c +00 +00 +00 +06 +00 +b3 +d3 +00 +00 +1c +00 +00 +00 +06 +00 +ff +ff +ff +ff +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +15 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +00 +01 +00 +00 +00 +00 +01 +00 +02 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +02 +00 +00 +00 +00 +01 +00 +02 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +a0 +00 +00 +00 +02 +00 +2b +00 +00 +00 +35 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +a1 +00 +00 +00 +02 +00 +4b +00 +00 +00 +55 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +a1 +00 +00 +00 +02 +00 +6b +00 +00 +00 +75 +11 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +a1 +00 +00 +00 +02 +00 +8b +00 +00 +00 +95 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +a2 +00 +00 +00 +02 +00 +35 +11 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +a3 +00 +00 +00 +02 +00 +55 +11 +00 +00 +4b +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +a3 +00 +00 +00 +02 +00 +75 +11 +00 +00 +6b +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +a3 +00 +00 +00 +02 +00 +95 +11 +00 +00 +8b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +88 +00 +00 +00 +02 +00 +23 +11 +00 +00 +21 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +89 +00 +00 +00 +02 +00 +43 +11 +00 +00 +41 +40 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +89 +00 +00 +00 +02 +00 +63 +11 +00 +00 +61 +40 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +89 +00 +00 +00 +02 +00 +83 +11 +00 +00 +81 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +8a +00 +00 +00 +02 +00 +21 +40 +00 +00 +23 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +8b +00 +00 +00 +02 +00 +41 +40 +00 +00 +43 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +8b +00 +00 +00 +02 +00 +61 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +8b +00 +00 +00 +02 +00 +81 +40 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +8c +00 +00 +00 +02 +00 +42 +11 +00 +00 +46 +41 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +8c +00 +00 +00 +02 +00 +41 +10 +00 +00 +46 +41 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +8c +00 +00 +00 +02 +00 +61 +10 +00 +00 +46 +41 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +8c +00 +00 +00 +02 +00 +81 +10 +00 +00 +46 +41 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +8e +00 +00 +00 +02 +00 +46 +41 +00 +00 +43 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +01 +8e +00 +00 +00 +02 +00 +46 +41 +00 +00 +61 +10 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +01 +8e +00 +00 +00 +02 +00 +46 +41 +00 +00 +81 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +b0 +00 +00 +00 +02 +00 +21 +50 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +b8 +00 +00 +00 +02 +00 +41 +50 +00 +00 +40 +21 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +b8 +00 +00 +00 +02 +00 +61 +50 +00 +00 +60 +21 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +b8 +00 +00 +00 +02 +00 +81 +50 +00 +00 +80 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +c6 +00 +00 +00 +02 +00 +23 +11 +00 +00 +20 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +c7 +00 +00 +00 +02 +00 +43 +11 +00 +00 +40 +20 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +c7 +00 +00 +00 +02 +00 +63 +11 +00 +00 +60 +20 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +c7 +00 +00 +00 +02 +00 +83 +11 +00 +00 +60 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +c6 +00 +00 +00 +02 +00 +23 +10 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +c7 +00 +00 +00 +02 +00 +43 +10 +00 +00 +40 +21 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +c7 +00 +00 +00 +02 +00 +63 +10 +00 +00 +60 +21 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +c7 +00 +00 +00 +02 +00 +83 +10 +00 +00 +60 +21 +00 +00 +00 +00 +00 +00 +10 +00 +80 +02 +00 +00 +00 +00 +00 +02 +0f +22 +00 +00 +02 +00 +74 +40 +00 +00 +61 +10 +00 +00 +00 +00 +00 +00 +04 +00 +80 +02 +00 +00 +00 +00 +00 +02 +0f +22 +00 +00 +02 +00 +67 +40 +00 +00 +61 +10 +00 +00 +00 +00 +00 +00 +00 +08 +80 +01 +00 +00 +00 +00 +00 +02 +0f +22 +00 +00 +02 +00 +67 +40 +00 +00 +81 +10 +00 +00 +00 +00 +00 +00 +10 +00 +80 +02 +00 +00 +00 +00 +00 +02 +0f +20 +00 +00 +02 +00 +61 +10 +00 +00 +74 +40 +00 +00 +00 +00 +00 +00 +04 +00 +80 +02 +00 +00 +00 +00 +00 +02 +0f +20 +00 +00 +02 +00 +61 +10 +00 +00 +67 +40 +00 +00 +00 +00 +00 +00 +00 +08 +80 +01 +00 +00 +00 +00 +00 +02 +0f +20 +00 +00 +02 +00 +81 +10 +00 +00 +67 +40 +00 +00 +00 +00 +00 +00 +04 +00 +80 +02 +00 +00 +00 +00 +00 +02 +0f +23 +00 +00 +02 +00 +68 +40 +00 +00 +61 +10 +00 +00 +00 +00 +00 +00 +00 +08 +80 +01 +00 +00 +00 +00 +00 +02 +0f +23 +00 +00 +02 +00 +68 +40 +00 +00 +81 +10 +00 +00 +00 +00 +00 +00 +04 +00 +80 +02 +00 +00 +00 +00 +00 +02 +0f +21 +00 +00 +02 +00 +61 +10 +00 +00 +68 +40 +00 +00 +00 +00 +00 +00 +00 +08 +80 +01 +00 +00 +00 +00 +00 +02 +0f +21 +00 +00 +02 +00 +81 +10 +00 +00 +68 +40 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +02 +0f +00 +00 +00 +02 +00 +41 +40 +00 +00 +23 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +00 +00 +00 +02 +00 +61 +40 +00 +00 +23 +10 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +04 +00 +00 +00 +40 +02 +0f +00 +00 +00 +02 +00 +81 +40 +00 +00 +23 +10 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +01 +00 +00 +02 +00 +61 +40 +00 +00 +43 +10 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +04 +00 +00 +00 +40 +02 +0f +01 +00 +00 +02 +00 +81 +40 +00 +00 +43 +10 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +63 +00 +00 +00 +02 +00 +81 +40 +00 +00 +63 +10 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +50 +00 +00 +00 +01 +00 +41 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +00 +00 +00 +00 +20 +01 +50 +00 +00 +00 +01 +00 +61 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +01 +50 +00 +00 +00 +01 +00 +81 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ff +00 +00 +06 +01 +00 +43 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +00 +00 +00 +00 +20 +01 +ff +00 +00 +06 +01 +00 +63 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +01 +ff +00 +00 +06 +01 +00 +83 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +6a +00 +00 +00 +01 +00 +20 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +68 +00 +00 +00 +01 +00 +40 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +00 +00 +00 +00 +20 +01 +68 +00 +00 +00 +01 +00 +60 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +68 +00 +00 +00 +01 +00 +80 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +01 +0e +00 +00 +00 +01 +00 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +10 +01 +0e +00 +00 +00 +01 +00 +4e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +20 +01 +0e +00 +00 +00 +01 +00 +6e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +01 +16 +00 +00 +00 +01 +00 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +10 +01 +16 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +20 +01 +16 +00 +00 +00 +01 +00 +73 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +01 +1e +00 +00 +00 +01 +00 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +10 +01 +1e +00 +00 +00 +01 +00 +4f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +20 +01 +1e +00 +00 +00 +01 +00 +6f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +01 +06 +00 +00 +00 +01 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +10 +01 +06 +00 +00 +00 +01 +00 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +20 +01 +06 +00 +00 +00 +01 +00 +70 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +02 +0f +a0 +00 +00 +01 +00 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +10 +02 +0f +a0 +00 +00 +01 +00 +51 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +02 +0f +a0 +00 +00 +01 +00 +71 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +02 +0f +a8 +00 +00 +01 +00 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +10 +02 +0f +a8 +00 +00 +01 +00 +52 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +02 +0f +a8 +00 +00 +01 +00 +72 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +58 +00 +00 +00 +01 +00 +41 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +00 +00 +00 +00 +20 +01 +58 +00 +00 +00 +01 +00 +61 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +01 +58 +00 +00 +00 +01 +00 +81 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +8f +00 +00 +00 +01 +00 +43 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +00 +00 +00 +00 +20 +01 +8f +00 +00 +00 +01 +00 +63 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +01 +8f +00 +00 +00 +01 +00 +83 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +01 +17 +00 +00 +00 +01 +00 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +10 +01 +17 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +20 +01 +17 +00 +00 +00 +01 +00 +73 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +01 +1f +00 +00 +00 +01 +00 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +10 +01 +1f +00 +00 +00 +01 +00 +4f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +20 +01 +1f +00 +00 +00 +01 +00 +6f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +01 +07 +00 +00 +00 +01 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +10 +01 +07 +00 +00 +00 +01 +00 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +20 +01 +07 +00 +00 +00 +01 +00 +70 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +02 +0f +a1 +00 +00 +01 +00 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +10 +02 +0f +a1 +00 +00 +01 +00 +51 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +02 +0f +a1 +00 +00 +01 +00 +71 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +02 +0f +a9 +00 +00 +01 +00 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +10 +02 +0f +a9 +00 +00 +01 +00 +52 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +02 +0f +a9 +00 +00 +01 +00 +72 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +86 +00 +00 +00 +02 +00 +23 +11 +00 +00 +21 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +86 +00 +00 +00 +02 +00 +21 +40 +00 +00 +23 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +90 +00 +00 +00 +02 +00 +4b +00 +00 +00 +41 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +90 +00 +00 +00 +02 +00 +41 +50 +00 +00 +4b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +87 +00 +00 +00 +02 +00 +43 +11 +00 +00 +41 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +87 +00 +00 +00 +02 +00 +41 +40 +00 +00 +43 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +90 +00 +00 +00 +02 +00 +6b +00 +00 +00 +61 +50 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +90 +00 +00 +00 +02 +00 +61 +50 +00 +00 +6b +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +87 +00 +00 +00 +02 +00 +63 +11 +00 +00 +61 +40 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +87 +00 +00 +00 +02 +00 +61 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +90 +00 +00 +00 +02 +00 +8b +00 +00 +00 +81 +50 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +90 +00 +00 +00 +02 +00 +81 +50 +00 +00 +8b +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +87 +00 +00 +00 +02 +00 +83 +11 +00 +00 +81 +40 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +87 +00 +00 +00 +02 +00 +81 +40 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +e4 +00 +00 +00 +02 +00 +2b +00 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +e5 +00 +00 +00 +02 +00 +4b +00 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +e5 +00 +00 +00 +02 +00 +6b +00 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +ec +00 +00 +00 +02 +00 +2b +00 +00 +00 +4d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ed +00 +00 +00 +02 +00 +4b +00 +00 +00 +4d +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +ed +00 +00 +00 +02 +00 +6b +00 +00 +00 +4d +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +e6 +00 +00 +00 +02 +00 +20 +21 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +e7 +00 +00 +00 +02 +00 +20 +21 +00 +00 +4b +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +e7 +00 +00 +00 +02 +00 +20 +21 +00 +00 +6b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +ee +00 +00 +00 +02 +00 +4d +00 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ef +00 +00 +00 +02 +00 +4d +00 +00 +00 +4b +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +ef +00 +00 +00 +02 +00 +4d +00 +00 +00 +6b +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +8d +00 +00 +00 +02 +00 +41 +40 +00 +00 +42 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +8d +00 +00 +00 +02 +00 +61 +40 +00 +00 +62 +11 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +8d +00 +00 +00 +02 +00 +81 +40 +00 +00 +82 +11 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +02 +10 +00 +00 +00 +10 +01 +00 +00 +00 +00 +02 +00 +41 +40 +00 +00 +02 +10 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +10 +00 +00 +00 +20 +01 +00 +00 +00 +00 +02 +00 +61 +40 +00 +00 +02 +10 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +02 +0f +00 +00 +00 +02 +00 +41 +40 +00 +00 +02 +10 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +00 +00 +00 +02 +00 +61 +40 +00 +00 +02 +10 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +01 +04 +00 +00 +00 +02 +00 +2b +00 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +10 +01 +05 +00 +00 +00 +02 +00 +4b +00 +00 +00 +40 +21 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +20 +01 +05 +00 +00 +00 +02 +00 +6b +00 +00 +00 +60 +21 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +10 +00 +00 +00 +40 +01 +05 +00 +00 +00 +02 +00 +8b +00 +00 +00 +60 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +00 +01 +80 +00 +00 +00 +02 +00 +23 +10 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +00 +01 +80 +00 +00 +00 +02 +00 +23 +11 +00 +00 +20 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +10 +01 +83 +00 +00 +00 +02 +00 +43 +10 +00 +00 +20 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +10 +01 +81 +83 +00 +00 +02 +00 +43 +10 +00 +00 +40 +21 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +10 +01 +81 +00 +00 +00 +02 +00 +43 +11 +00 +00 +40 +20 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +22 +00 +00 +00 +20 +01 +83 +00 +00 +00 +02 +00 +63 +10 +00 +00 +20 +30 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +22 +00 +00 +00 +20 +01 +81 +83 +00 +00 +02 +00 +63 +10 +00 +00 +60 +21 +02 +00 +00 +00 +00 +00 +04 +00 +00 +00 +22 +00 +00 +00 +20 +01 +81 +00 +00 +00 +02 +00 +63 +11 +00 +00 +60 +20 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +22 +00 +00 +00 +40 +01 +83 +00 +00 +00 +02 +00 +83 +10 +00 +00 +20 +30 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +22 +00 +00 +00 +40 +01 +81 +83 +00 +00 +02 +00 +83 +10 +00 +00 +60 +21 +02 +00 +00 +00 +00 +00 +00 +08 +00 +01 +22 +00 +00 +00 +40 +01 +81 +00 +00 +00 +02 +00 +83 +11 +00 +00 +60 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +01 +00 +00 +00 +00 +02 +00 +23 +11 +00 +00 +21 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +10 +01 +01 +00 +00 +00 +02 +00 +43 +11 +00 +00 +41 +40 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +20 +01 +01 +00 +00 +00 +02 +00 +63 +11 +00 +00 +61 +40 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +10 +00 +00 +00 +40 +01 +01 +00 +00 +00 +02 +00 +83 +11 +00 +00 +81 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +01 +02 +00 +00 +00 +02 +00 +21 +40 +00 +00 +23 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +10 +01 +03 +00 +00 +00 +02 +00 +41 +40 +00 +00 +43 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +20 +01 +03 +00 +00 +00 +02 +00 +61 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +10 +00 +00 +00 +40 +01 +03 +00 +00 +00 +02 +00 +81 +40 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +0b +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +22 +00 +00 +00 +00 +01 +fe +00 +00 +00 +01 +00 +23 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +10 +00 +00 +00 +10 +01 +00 +00 +00 +00 +01 +00 +41 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +10 +01 +ff +00 +00 +00 +01 +00 +43 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +10 +00 +00 +00 +20 +01 +00 +00 +00 +00 +01 +00 +61 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +22 +00 +00 +00 +20 +01 +ff +00 +00 +00 +01 +00 +63 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +22 +00 +00 +00 +40 +01 +ff +00 +00 +00 +01 +00 +83 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +20 +00 +00 +00 +00 +01 +f6 +00 +00 +00 +01 +00 +23 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +10 +01 +f7 +00 +00 +00 +01 +00 +43 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +20 +00 +00 +00 +20 +01 +f7 +00 +00 +00 +01 +00 +63 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +20 +00 +00 +00 +40 +01 +f7 +00 +00 +00 +01 +00 +83 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +a8 +00 +00 +00 +02 +00 +2b +00 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +a9 +00 +00 +00 +02 +00 +4b +00 +00 +00 +40 +21 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +a9 +00 +00 +00 +02 +00 +6b +00 +00 +00 +60 +21 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +a9 +00 +00 +00 +02 +00 +8b +00 +00 +00 +60 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +f6 +00 +00 +00 +02 +00 +23 +10 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +f6 +00 +00 +00 +02 +00 +23 +11 +00 +00 +20 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +f7 +00 +00 +00 +02 +00 +43 +10 +00 +00 +40 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +f7 +00 +00 +00 +02 +00 +43 +11 +00 +00 +40 +20 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +f7 +00 +00 +00 +02 +00 +63 +10 +00 +00 +60 +21 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +f7 +00 +00 +00 +02 +00 +63 +11 +00 +00 +60 +20 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +f7 +00 +00 +00 +02 +00 +83 +10 +00 +00 +60 +21 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +f7 +00 +00 +00 +02 +00 +83 +11 +00 +00 +60 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +84 +00 +00 +00 +02 +00 +23 +11 +00 +00 +21 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +85 +00 +00 +00 +02 +00 +43 +11 +00 +00 +41 +40 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +85 +00 +00 +00 +02 +00 +63 +11 +00 +00 +61 +40 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +85 +00 +00 +00 +02 +00 +83 +11 +00 +00 +81 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +84 +00 +00 +00 +02 +00 +21 +40 +00 +00 +23 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +85 +00 +00 +00 +02 +00 +41 +40 +00 +00 +43 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +85 +00 +00 +00 +02 +00 +61 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +85 +00 +00 +00 +02 +00 +81 +40 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +10 +00 +00 +00 +00 +02 +d4 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +01 +d4 +00 +00 +00 +01 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +f6 +00 +00 +05 +01 +00 +23 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +f7 +00 +00 +05 +01 +00 +43 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +f7 +00 +00 +05 +01 +00 +63 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +f7 +00 +00 +05 +01 +00 +83 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +10 +02 +0f +af +00 +00 +02 +00 +41 +40 +00 +00 +43 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +02 +0f +af +00 +00 +02 +00 +61 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +02 +0f +af +00 +00 +02 +00 +81 +40 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +10 +01 +6b +00 +00 +00 +03 +00 +41 +40 +00 +00 +43 +11 +00 +00 +20 +30 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +6b +00 +00 +00 +03 +00 +61 +40 +00 +00 +63 +11 +00 +00 +20 +30 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +6b +00 +00 +00 +03 +00 +81 +40 +00 +00 +83 +11 +00 +00 +20 +30 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +10 +01 +6b +00 +00 +00 +02 +00 +41 +70 +00 +00 +20 +30 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +6b +00 +00 +00 +02 +00 +61 +70 +00 +00 +20 +30 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +6b +00 +00 +00 +02 +00 +81 +70 +00 +00 +20 +30 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +10 +01 +69 +6b +00 +00 +03 +00 +41 +40 +00 +00 +43 +11 +00 +00 +40 +31 +02 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +69 +6b +00 +00 +03 +00 +61 +40 +00 +00 +63 +11 +00 +00 +60 +31 +02 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +69 +6b +00 +00 +03 +00 +81 +40 +00 +00 +83 +11 +00 +00 +60 +31 +02 +00 +01 +00 +00 +00 +00 +00 +00 +00 +10 +01 +69 +6b +00 +00 +02 +00 +41 +70 +00 +00 +40 +31 +02 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +69 +6b +00 +00 +02 +00 +61 +70 +00 +00 +60 +31 +02 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +69 +6b +00 +00 +02 +00 +81 +70 +00 +00 +60 +31 +02 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +20 +00 +00 +00 +00 +01 +d2 +00 +00 +00 +02 +00 +23 +10 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +01 +c0 +d0 +00 +00 +02 +00 +23 +10 +00 +00 +20 +21 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +10 +01 +d3 +00 +00 +00 +02 +00 +43 +10 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +10 +01 +c1 +d1 +00 +00 +02 +00 +43 +10 +00 +00 +20 +21 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +20 +01 +d3 +00 +00 +00 +02 +00 +63 +10 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +20 +01 +c1 +d1 +00 +00 +02 +00 +63 +10 +00 +00 +20 +21 +01 +00 +00 +00 +00 +00 +00 +08 +00 +01 +20 +00 +00 +00 +40 +01 +d3 +00 +00 +00 +02 +00 +83 +10 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +20 +00 +00 +00 +40 +01 +c1 +d1 +00 +00 +02 +00 +83 +10 +00 +00 +20 +21 +01 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +02 +0f +00 +00 +00 +03 +00 +43 +11 +00 +00 +41 +40 +00 +00 +20 +21 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +02 +0f +01 +00 +00 +03 +00 +43 +11 +00 +00 +41 +40 +00 +00 +2c +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +00 +00 +00 +03 +00 +63 +11 +00 +00 +61 +40 +00 +00 +20 +21 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +01 +00 +00 +03 +00 +63 +11 +00 +00 +61 +40 +00 +00 +2c +00 +00 +00 +00 +08 +00 +01 +04 +00 +00 +00 +40 +02 +0f +00 +00 +00 +03 +00 +83 +11 +00 +00 +81 +40 +00 +00 +20 +21 +00 +00 +00 +08 +00 +01 +04 +00 +00 +00 +40 +02 +0f +01 +00 +00 +03 +00 +83 +11 +00 +00 +81 +40 +00 +00 +2c +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +01 +00 +40 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +01 +00 +60 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +e8 +9a +00 +00 +01 +00 +40 +82 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +e8 +9a +00 +00 +01 +00 +60 +82 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +e8 +9a +00 +00 +01 +00 +00 +82 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ff +00 +00 +02 +01 +00 +43 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +00 +00 +00 +00 +20 +01 +ff +00 +00 +02 +01 +00 +63 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +01 +ff +00 +00 +02 +01 +00 +83 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +ff +00 +00 +02 +01 +00 +02 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ff +00 +00 +02 +01 +00 +43 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +00 +00 +00 +00 +20 +01 +ff +00 +00 +02 +01 +00 +63 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +01 +ff +00 +00 +02 +01 +00 +83 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +ff +00 +00 +02 +01 +00 +02 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +9a +00 +00 +03 +01 +00 +40 +86 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +9a +00 +00 +03 +01 +00 +60 +86 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +9a +00 +00 +03 +01 +00 +00 +86 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ff +00 +00 +03 +01 +00 +42 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +ff +00 +00 +03 +01 +00 +62 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +ff +00 +00 +03 +01 +00 +02 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +01 +00 +40 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +00 +00 +00 +00 +01 +00 +60 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +eb +00 +00 +00 +01 +00 +00 +84 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +e9 +ea +00 +00 +01 +00 +40 +82 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +e9 +ea +00 +00 +01 +00 +60 +82 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +e9 +ea +00 +00 +01 +00 +00 +82 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ff +00 +00 +04 +01 +00 +43 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +00 +00 +00 +00 +20 +01 +ff +00 +00 +04 +01 +00 +63 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +01 +ff +00 +00 +04 +01 +00 +83 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +ff +00 +00 +04 +01 +00 +02 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ff +00 +00 +04 +01 +00 +43 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +00 +00 +00 +00 +20 +01 +ff +00 +00 +04 +01 +00 +63 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +01 +ff +00 +00 +04 +01 +00 +83 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +ff +00 +00 +04 +01 +00 +02 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ea +00 +00 +03 +01 +00 +40 +86 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +ea +00 +00 +03 +01 +00 +60 +86 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +ea +00 +00 +03 +01 +00 +00 +86 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ff +00 +00 +05 +01 +00 +42 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +ff +00 +00 +05 +01 +00 +62 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +ff +00 +00 +05 +01 +00 +02 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +01 +00 +00 +00 +00 +01 +00 +40 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +01 +c8 +00 +00 +00 +02 +00 +40 +11 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +01 +00 +40 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +01 +00 +60 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +01 +70 +00 +00 +00 +01 +00 +00 +84 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +02 +0f +80 +00 +00 +01 +00 +40 +82 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +80 +00 +00 +01 +00 +60 +82 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +00 +02 +0f +80 +00 +00 +01 +00 +00 +82 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +0b +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +e3 +00 +00 +00 +01 +00 +00 +84 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +80 +00 +00 +4c +90 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +80 +00 +00 +6c +90 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +80 +00 +00 +8c +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +10 +00 +00 +00 +00 +01 +e0 +00 +00 +00 +01 +00 +00 +84 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +01 +e0 +00 +00 +00 +02 +00 +00 +84 +00 +00 +4c +90 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +00 +01 +e0 +00 +00 +00 +02 +00 +00 +84 +00 +00 +6c +90 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +10 +00 +00 +00 +00 +01 +e0 +00 +00 +00 +02 +00 +00 +84 +00 +00 +8c +90 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +00 +02 +0f +90 +00 +02 +01 +00 +23 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8d +74 +26 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +02 +0f +00 +00 +00 +02 +00 +43 +11 +00 +00 +41 +40 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +00 +00 +00 +02 +00 +63 +11 +00 +00 +61 +40 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +04 +00 +00 +00 +40 +02 +0f +00 +00 +00 +02 +00 +83 +11 +00 +00 +81 +40 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +22 +00 +00 +00 +10 +02 +0f +ba +00 +00 +02 +00 +43 +10 +00 +00 +20 +20 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +22 +00 +00 +00 +20 +02 +0f +ba +00 +00 +02 +00 +63 +10 +00 +00 +20 +20 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +22 +00 +00 +00 +40 +02 +0f +ba +00 +00 +02 +00 +83 +10 +00 +00 +20 +20 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +02 +00 +00 +00 +04 +00 +00 +00 +10 +02 +0f +00 +00 +00 +02 +00 +41 +40 +00 +00 +43 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +00 +00 +00 +02 +00 +61 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +04 +00 +00 +00 +40 +02 +0f +00 +00 +00 +02 +00 +81 +40 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +cd +00 +00 +00 +01 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +01 +00 +00 +00 +00 +00 +00 +00 +10 +01 +62 +00 +00 +00 +02 +00 +41 +40 +00 +00 +42 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +62 +00 +00 +00 +02 +00 +61 +40 +00 +00 +62 +11 +00 +00 +00 +00 +00 +00 +02 +00 +10 +00 +00 +00 +00 +00 +00 +01 +63 +00 +00 +00 +02 +00 +43 +11 +00 +00 +41 +40 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +08 +00 +00 +00 +00 +00 +00 +10 +02 +0f +00 +00 +01 +01 +00 +41 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +20 +02 +0f +00 +00 +01 +01 +00 +61 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +02 +0f +00 +00 +01 +01 +00 +81 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +24 +00 +00 +00 +00 +02 +0f +00 +00 +00 +01 +00 +43 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +24 +00 +00 +00 +00 +02 +0f +00 +00 +00 +01 +00 +43 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +02 +00 +00 +00 +24 +00 +00 +00 +00 +02 +0f +00 +00 +00 +01 +00 +42 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +24 +00 +00 +00 +00 +02 +0f +00 +00 +00 +01 +00 +62 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +24 +00 +00 +00 +00 +02 +0f +00 +00 +00 +01 +00 +82 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +24 +00 +00 +00 +10 +02 +0f +00 +00 +00 +01 +00 +41 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +24 +00 +00 +00 +20 +02 +0f +00 +00 +00 +01 +00 +61 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +24 +00 +00 +00 +40 +02 +0f +00 +00 +00 +01 +00 +81 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +00 +10 +00 +00 +22 +00 +00 +00 +00 +01 +d9 +00 +00 +00 +01 +00 +62 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +22 +00 +00 +00 +00 +01 +dd +00 +00 +00 +01 +00 +82 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +2a +00 +00 +00 +00 +01 +db +00 +00 +00 +01 +00 +a2 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +04 +00 +00 +00 +00 +02 +d9 +00 +00 +00 +01 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +10 +00 +00 +20 +00 +00 +00 +00 +01 +df +00 +00 +00 +01 +00 +42 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +20 +00 +00 +00 +00 +01 +db +00 +00 +00 +01 +00 +62 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +22 +00 +00 +00 +00 +01 +df +00 +00 +00 +01 +00 +82 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +20 +00 +00 +00 +00 +01 +df +00 +00 +00 +01 +00 +a2 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +10 +00 +00 +00 +00 +00 +00 +00 +01 +d9 +00 +00 +02 +01 +00 +62 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +01 +dd +00 +00 +02 +01 +00 +82 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +02 +dd +d0 +00 +00 +01 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +10 +00 +00 +00 +00 +00 +00 +00 +02 +d9 +c8 +00 +00 +01 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +02 +d9 +c8 +00 +00 +02 +00 +aa +00 +00 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +02 +d9 +c8 +00 +00 +02 +00 +a1 +60 +00 +00 +aa +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +02 +d9 +c9 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +10 +00 +00 +22 +00 +00 +00 +00 +01 +d8 +00 +00 +00 +01 +00 +62 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +22 +00 +00 +00 +00 +01 +dc +00 +00 +00 +01 +00 +82 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +04 +00 +00 +00 +00 +02 +d8 +00 +00 +00 +01 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +04 +00 +00 +00 +00 +02 +d8 +00 +00 +00 +02 +00 +aa +00 +00 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +02 +10 +00 +00 +14 +00 +00 +00 +00 +02 +00 +00 +00 +00 +01 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +10 +00 +00 +14 +00 +00 +00 +00 +02 +00 +00 +00 +00 +02 +00 +aa +00 +00 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +00 +10 +00 +00 +2a +00 +00 +00 +00 +01 +d8 +00 +00 +00 +01 +00 +62 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +2a +00 +00 +00 +00 +01 +dc +00 +00 +00 +01 +00 +82 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +06 +00 +00 +00 +00 +02 +d8 +00 +00 +00 +01 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +06 +00 +00 +00 +00 +02 +d8 +00 +00 +00 +02 +00 +aa +00 +00 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +04 +00 +00 +00 +00 +02 +dc +00 +00 +00 +01 +00 +a1 +68 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +04 +00 +00 +00 +00 +02 +dc +00 +00 +00 +02 +00 +a1 +60 +00 +00 +aa +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +00 +10 +00 +00 +04 +00 +00 +00 +00 +02 +de +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +04 +00 +00 +00 +00 +02 +de +00 +00 +00 +01 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +04 +00 +00 +00 +00 +02 +de +00 +00 +00 +02 +00 +a1 +60 +00 +00 +aa +00 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +10 +00 +00 +30 +00 +00 +00 +00 +01 +04 +00 +00 +00 +01 +00 +42 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +30 +00 +00 +00 +00 +01 +00 +00 +00 +00 +01 +00 +62 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +20 +00 +00 +00 +00 +01 +d9 +00 +00 +00 +01 +00 +42 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +02 +9b +d9 +00 +07 +01 +00 +42 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +10 +00 +00 +00 +00 +00 +00 +00 +01 +dd +00 +00 +07 +01 +00 +42 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +02 +df +e0 +00 +00 +01 +00 +4b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +02 +9b +dd +00 +07 +01 +00 +42 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +03 +9b +df +e0 +00 +01 +00 +4b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +10 +00 +00 +00 +00 +02 +00 +c0 +00 +00 +01 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +08 +00 +00 +00 +00 +00 +00 +00 +20 +02 +0f +c8 +00 +00 +01 +00 +61 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +02 +0f +c8 +00 +00 +01 +00 +81 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +08 +00 +00 +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +02 +00 +23 +11 +00 +00 +21 +40 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +04 +00 +00 +00 +10 +02 +0f +01 +00 +00 +02 +00 +43 +11 +00 +00 +41 +40 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +01 +00 +00 +02 +00 +63 +11 +00 +00 +61 +40 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +04 +00 +00 +00 +40 +02 +0f +01 +00 +00 +02 +00 +83 +11 +00 +00 +81 +40 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +02 +0f +c7 +00 +01 +01 +00 +82 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +20 +00 +00 +00 +04 +00 +00 +00 +10 +02 +0f +40 +00 +00 +02 +00 +41 +40 +00 +00 +43 +11 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +40 +00 +00 +02 +00 +61 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +04 +00 +00 +00 +40 +02 +0f +40 +00 +00 +02 +00 +81 +40 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +20 +10 +00 +00 +14 +00 +00 +00 +00 +02 +00 +00 +00 +00 +02 +00 +aa +00 +00 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +80 +00 +00 +00 +00 +00 +00 +00 +00 +02 +0f +c3 +00 +00 +02 +00 +62 +11 +00 +00 +61 +40 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +02 +0f +c3 +00 +00 +02 +00 +82 +11 +00 +00 +81 +40 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +02 +0f +ae +00 +07 +01 +00 +22 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +6e +00 +00 +02 +00 +84 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +00 +28 +00 +01 +00 +00 +00 +00 +40 +02 +0f +6e +00 +00 +02 +00 +84 +40 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +7e +00 +00 +02 +00 +63 +11 +00 +00 +84 +40 +00 +00 +00 +00 +00 +00 +00 +28 +00 +01 +00 +00 +00 +00 +40 +02 +0f +7e +00 +00 +02 +00 +83 +11 +00 +00 +84 +40 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +66 +0f +6e +00 +02 +00 +c4 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +00 +88 +00 +01 +00 +00 +00 +00 +40 +03 +66 +0f +6e +00 +02 +00 +c4 +40 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +66 +0f +7e +00 +02 +00 +63 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +00 +88 +00 +01 +00 +00 +00 +00 +40 +03 +66 +0f +7e +00 +02 +00 +83 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +6f +00 +00 +02 +00 +84 +40 +00 +00 +85 +11 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +7f +00 +00 +02 +00 +85 +11 +00 +00 +84 +40 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +f3 +0f +7e +00 +02 +00 +c4 +40 +00 +00 +c4 +10 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +f3 +0f +7e +00 +02 +00 +c4 +40 +00 +00 +85 +11 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +66 +0f +d6 +00 +02 +00 +85 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +00 +20 +00 +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +02 +00 +84 +40 +00 +00 +85 +11 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +01 +00 +00 +00 +00 +03 +66 +0f +00 +00 +02 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +00 +20 +00 +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +02 +00 +84 +40 +00 +00 +85 +11 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +26 +00 +00 +00 +00 +02 +0f +00 +00 +00 +02 +00 +84 +10 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +01 +00 +00 +00 +00 +03 +66 +0f +00 +00 +02 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +23 +00 +00 +00 +00 +03 +66 +0f +00 +00 +02 +00 +c4 +10 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +02 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +11 +00 +00 +00 +00 +03 +00 +0f +00 +00 +02 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +80 +00 +00 +00 +00 +02 +0f +c2 +00 +00 +02 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +90 +00 +00 +00 +00 +03 +00 +0f +c2 +00 +02 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +03 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +20 +21 +00 +00 +00 +40 +00 +00 +11 +00 +00 +00 +00 +03 +00 +0f +00 +00 +03 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +20 +21 +00 +00 +00 +40 +00 +00 +20 +00 +00 +00 +00 +02 +0f +ae +00 +00 +01 +00 +62 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +f7 +00 +00 +02 +00 +84 +40 +00 +00 +84 +10 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +40 +00 +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +02 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +04 +00 +00 +00 +00 +02 +0f +01 +00 +00 +02 +00 +c5 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +02 +00 +c4 +40 +00 +00 +c4 +10 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +40 +00 +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +02 +00 +c4 +40 +00 +00 +82 +11 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +04 +00 +00 +00 +00 +02 +0f +01 +00 +00 +02 +00 +82 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +02 +0f +50 +00 +00 +02 +00 +61 +10 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +02 +0f +2b +00 +00 +02 +00 +c2 +11 +00 +00 +c1 +40 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +02 +0f +e7 +00 +00 +02 +00 +82 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +03 +f3 +0f +10 +00 +02 +00 +c4 +40 +00 +00 +c4 +10 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +03 +f3 +0f +10 +00 +02 +00 +c4 +40 +00 +00 +82 +11 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +03 +f3 +0f +11 +00 +02 +00 +82 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +40 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +c5 +00 +00 +03 +00 +61 +10 +00 +00 +84 +40 +00 +00 +20 +21 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +66 +0f +c5 +00 +03 +00 +61 +10 +00 +00 +c4 +40 +00 +00 +20 +21 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +40 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +c4 +00 +00 +03 +00 +84 +40 +00 +00 +61 +10 +00 +00 +20 +21 +00 +00 +40 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +c4 +00 +00 +03 +00 +84 +40 +00 +00 +43 +11 +00 +00 +20 +21 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +66 +0f +c4 +00 +03 +00 +c4 +40 +00 +00 +61 +10 +00 +00 +20 +21 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +66 +0f +c4 +00 +03 +00 +84 +40 +00 +00 +43 +11 +00 +00 +20 +21 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +40 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +d7 +00 +00 +02 +00 +61 +10 +00 +00 +84 +40 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +66 +0f +d7 +00 +02 +00 +61 +10 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +40 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +70 +00 +00 +03 +00 +84 +40 +00 +00 +85 +11 +00 +00 +20 +21 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +20 +01 +a7 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +f2 +0f +c2 +00 +03 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +20 +21 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +00 +80 +00 +00 +01 +00 +00 +00 +00 +03 +66 +0f +00 +00 +02 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +01 +00 +00 +00 +00 +03 +66 +0f +01 +00 +02 +00 +c5 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +00 +80 +00 +00 +01 +00 +00 +00 +00 +03 +66 +0f +00 +00 +02 +00 +c4 +40 +00 +00 +82 +11 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +01 +00 +00 +00 +00 +03 +66 +0f +01 +00 +02 +00 +82 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +66 +0f +50 +00 +02 +00 +61 +10 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +01 +00 +00 +00 +00 +03 +66 +0f +00 +00 +02 +00 +c2 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +20 +01 +a5 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +f2 +0f +10 +00 +02 +00 +c4 +40 +00 +00 +c4 +10 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +f2 +0f +10 +00 +02 +00 +c4 +40 +00 +00 +82 +11 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +f2 +0f +11 +00 +02 +00 +82 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +66 +0f +f7 +00 +02 +00 +c4 +40 +00 +00 +c4 +10 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +00 +80 +00 +00 +10 +00 +00 +00 +00 +03 +00 +0f +6f +00 +02 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +10 +00 +00 +00 +00 +03 +00 +0f +7f +00 +02 +00 +c5 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +f2 +0f +d6 +00 +02 +00 +84 +40 +00 +00 +c4 +10 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +f3 +0f +d6 +00 +02 +00 +c4 +40 +00 +00 +84 +10 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +20 +00 +00 +00 +00 +03 +66 +0f +73 +00 +02 +00 +c4 +10 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +80 +00 +00 +00 +00 +02 +0f +0f +00 +00 +02 +00 +84 +40 +00 +00 +85 +11 +00 +00 +00 +00 +00 +00 +00 +20 +02 +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +02 +00 +84 +40 +00 +00 +85 +11 +00 +00 +00 +00 +00 +00 +00 +20 +02 +00 +00 +00 +00 +00 +00 +02 +0f +5e +00 +00 +02 +00 +84 +40 +00 +00 +82 +11 +00 +00 +00 +00 +00 +00 +08 +00 +0a +00 +00 +00 +00 +00 +00 +02 +0f +79 +00 +00 +02 +00 +46 +40 +00 +00 +a2 +11 +00 +00 +00 +00 +00 +00 +08 +00 +0a +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +01 +00 +a2 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +0a +00 +00 +00 +00 +00 +00 +02 +0f +78 +00 +00 +02 +00 +a2 +11 +00 +00 +46 +40 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +04 +00 +60 +00 +00 +00 +00 +00 +10 +02 +0f +a7 +00 +00 +02 +00 +43 +11 +00 +00 +41 +40 +00 +00 +00 +00 +00 +00 +04 +00 +60 +00 +00 +00 +00 +00 +20 +02 +0f +a7 +00 +00 +02 +00 +63 +11 +00 +00 +61 +40 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +04 +00 +20 +00 +00 +00 +00 +00 +00 +02 +0f +10 +00 +00 +02 +00 +23 +11 +00 +00 +21 +40 +00 +00 +00 +00 +00 +00 +04 +00 +20 +00 +00 +00 +00 +00 +10 +02 +0f +11 +00 +00 +02 +00 +43 +11 +00 +00 +41 +40 +00 +00 +00 +00 +00 +00 +04 +00 +20 +00 +00 +00 +00 +00 +20 +02 +0f +11 +00 +00 +02 +00 +63 +11 +00 +00 +61 +40 +00 +00 +00 +00 +00 +00 +04 +00 +20 +00 +00 +00 +00 +00 +00 +02 +0f +12 +00 +00 +02 +00 +21 +40 +00 +00 +23 +11 +00 +00 +00 +00 +00 +00 +04 +00 +20 +00 +00 +00 +00 +00 +10 +02 +0f +13 +00 +00 +02 +00 +41 +40 +00 +00 +43 +11 +00 +00 +00 +00 +00 +00 +04 +00 +20 +00 +00 +00 +00 +00 +20 +02 +0f +13 +00 +00 +02 +00 +61 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +04 +00 +60 +00 +00 +00 +00 +00 +10 +02 +0f +a6 +00 +00 +02 +00 +41 +40 +00 +00 +42 +11 +00 +00 +00 +00 +00 +00 +04 +00 +60 +00 +00 +00 +00 +00 +20 +02 +0f +a6 +00 +00 +02 +00 +61 +40 +00 +00 +62 +11 +00 +00 +00 +00 +00 +00 +00 +08 +10 +20 +40 +50 +80 +00 +69 +6e +76 +61 +6c +69 +64 +20 +6f +70 +65 +72 +61 +6e +64 +20 +63 +6f +6e +76 +65 +72 +73 +69 +6f +6e +00 +2e +2f +6d +6f +64 +75 +6c +65 +73 +2f +61 +72 +63 +68 +2f +78 +38 +36 +2f +78 +38 +36 +69 +64 +2e +72 +65 +00 +24 +00 +8d +b4 +26 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +0a +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +69 +6e +76 +61 +6c +69 +64 +20 +6f +70 +65 +72 +61 +6e +64 +20 +74 +79 +70 +65 +00 +69 +6e +76 +61 +6c +69 +64 +20 +74 +61 +72 +67 +65 +74 +20 +6d +6f +64 +69 +66 +69 +65 +72 +20 +74 +79 +70 +65 +00 +6d +69 +73 +6d +61 +74 +63 +68 +20 +69 +6e +20 +6f +70 +65 +72 +61 +6e +64 +20 +73 +69 +7a +65 +73 +00 +6f +70 +65 +72 +61 +6e +64 +20 +73 +69 +7a +65 +20 +6e +6f +74 +20 +73 +70 +65 +63 +69 +66 +69 +65 +64 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +08 +90 +90 +90 +90 +90 +90 +90 +90 +75 +6e +72 +65 +63 +6f +67 +6e +69 +7a +65 +64 +20 +78 +38 +36 +20 +65 +78 +74 +20 +6d +6f +64 +20 +69 +6e +64 +65 +78 +00 +90 +75 +6e +72 +65 +63 +6f +67 +6e +69 +7a +65 +64 +20 +78 +38 +36 +20 +65 +78 +74 +65 +6e +64 +65 +64 +20 +6d +6f +64 +69 +66 +69 +65 +72 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +0c +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +69 +6e +76 +61 +6c +69 +64 +20 +63 +6f +6d +62 +69 +6e +61 +74 +69 +6f +6e +20 +6f +66 +20 +6f +70 +63 +6f +64 +65 +20 +61 +6e +64 +20 +6f +70 +65 +72 +61 +6e +64 +73 +00 +75 +6e +6b +6e +6f +77 +6e +20 +6f +70 +65 +72 +61 +6e +64 +20 +61 +63 +74 +69 +6f +6e +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +75 +6e +6b +6e +6f +77 +6e +20 +6f +70 +65 +72 +61 +6e +64 +20 +70 +6f +73 +74 +70 +6f +6e +65 +64 +20 +61 +63 +74 +69 +6f +6e +00 +8d +76 +00 +94 +03 +00 +00 +a7 +03 +00 +00 +f4 +03 +00 +00 +9d +03 +00 +00 +07 +04 +00 +00 +fd +03 +00 +00 +2a +04 +00 +00 +33 +04 +00 +00 +4d +04 +00 +00 +67 +04 +00 +00 +81 +04 +00 +00 +94 +04 +00 +00 +15 +05 +00 +00 +96 +05 +00 +00 +17 +06 +00 +00 +2c +06 +00 +00 +3d +06 +00 +00 +49 +06 +00 +00 +5a +06 +00 +00 +6b +06 +00 +00 +7c +06 +00 +00 +8b +06 +00 +00 +8d +74 +26 +00 +75 +6e +72 +65 +63 +6f +67 +6e +69 +7a +65 +64 +20 +43 +50 +55 +20 +69 +64 +65 +6e +74 +69 +66 +69 +65 +72 +20 +60 +73 +27 +00 +1e +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +70 +0e +00 +00 +81 +0e +00 +00 +92 +0e +00 +00 +b5 +0e +00 +00 +c6 +0e +00 +00 +59 +0f +00 +00 +15 +11 +00 +00 +04 +0e +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +c3 +0f +00 +00 +15 +11 +00 +00 +f7 +10 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +b2 +10 +00 +00 +15 +11 +00 +00 +5f +10 +00 +00 +15 +0e +00 +00 +15 +11 +00 +00 +6a +0f +00 +00 +15 +11 +00 +00 +e0 +10 +00 +00 +c9 +10 +00 +00 +79 +10 +00 +00 +d7 +0e +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +03 +10 +00 +00 +15 +11 +00 +00 +06 +11 +00 +00 +15 +11 +00 +00 +a9 +0f +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +c3 +0f +00 +00 +15 +11 +00 +00 +f7 +10 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +b2 +10 +00 +00 +15 +11 +00 +00 +5f +10 +00 +00 +15 +0e +00 +00 +15 +11 +00 +00 +6a +0f +00 +00 +15 +11 +00 +00 +e0 +10 +00 +00 +c9 +10 +00 +00 +79 +10 +00 +00 +d7 +0e +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +03 +10 +00 +00 +15 +11 +00 +00 +06 +11 +00 +00 +15 +11 +00 +00 +a9 +0f +00 +00 +65 +12 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +99 +12 +00 +00 +18 +11 +00 +00 +7f +12 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +f1 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +0b +12 +00 +00 +18 +11 +00 +00 +df +12 +00 +00 +b3 +12 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +25 +12 +00 +00 +18 +11 +00 +00 +cd +12 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +99 +12 +00 +00 +18 +11 +00 +00 +7f +12 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +f1 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +0b +12 +00 +00 +18 +11 +00 +00 +df +12 +00 +00 +b3 +12 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +25 +12 +00 +00 +18 +11 +00 +00 +cd +12 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +60 +73 +27 +20 +73 +65 +67 +6d +65 +6e +74 +20 +72 +65 +67 +69 +73 +74 +65 +72 +20 +69 +67 +6e +6f +72 +65 +64 +20 +69 +6e +20 +36 +34 +2d +62 +69 +74 +20 +6d +6f +64 +65 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +43 +61 +6e +6e +6f +74 +20 +6f +76 +65 +72 +72 +69 +64 +65 +20 +61 +64 +64 +72 +65 +73 +73 +20 +73 +69 +7a +65 +20 +74 +6f +20 +31 +36 +20 +62 +69 +74 +73 +20 +69 +6e +20 +36 +34 +2d +62 +69 +74 +20 +6d +6f +64 +65 +00 +eb +07 +90 +90 +90 +90 +90 +90 +90 +60 +73 +27 +20 +69 +73 +20 +61 +20 +70 +72 +65 +66 +69 +78 +20 +69 +6e +20 +36 +34 +2d +62 +69 +74 +20 +6d +6f +64 +65 +00 +90 +60 +73 +27 +20 +69 +73 +20 +61 +20 +72 +65 +67 +69 +73 +74 +65 +72 +20 +69 +6e +20 +36 +34 +2d +62 +69 +74 +20 +6d +6f +64 +65 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +60 +73 +27 +20 +69 +73 +20 +61 +6e +20 +69 +6e +73 +74 +72 +75 +63 +74 +69 +6f +6e +20 +69 +6e +20 +36 +34 +2d +62 +69 +74 +20 +6d +6f +64 +65 +00 +60 +73 +27 +20 +69 +6e +76 +61 +6c +69 +64 +20 +69 +6e +20 +36 +34 +2d +62 +69 +74 +20 +6d +6f +64 +65 +00 +d5 +d1 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +d4 +1e +00 +00 +9c +1f +00 +00 +1f +1f +00 +00 +38 +1f +00 +00 +83 +1f +00 +00 +0c +1e +00 +00 +b5 +1f +00 +00 +1a +20 +00 +00 +e8 +1f +00 +00 +01 +20 +00 +00 +e4 +20 +00 +00 +ed +1e +00 +00 +51 +1f +00 +00 +b3 +1d +00 +00 +78 +1e +00 +00 +cf +1f +00 +00 +e4 +20 +00 +00 +06 +1f +00 +00 +f3 +1d +00 +00 +25 +1e +00 +00 +9f +20 +00 +00 +34 +20 +00 +00 +4e +20 +00 +00 +6a +1f +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +d4 +1e +00 +00 +9c +1f +00 +00 +1f +1f +00 +00 +38 +1f +00 +00 +83 +1f +00 +00 +0c +1e +00 +00 +b5 +1f +00 +00 +1a +20 +00 +00 +e8 +1f +00 +00 +01 +20 +00 +00 +e4 +20 +00 +00 +ed +1e +00 +00 +51 +1f +00 +00 +b3 +1d +00 +00 +78 +1e +00 +00 +cf +1f +00 +00 +e4 +20 +00 +00 +06 +1f +00 +00 +f3 +1d +00 +00 +25 +1e +00 +00 +9f +20 +00 +00 +34 +20 +00 +00 +4e +20 +00 +00 +6a +1f +00 +00 +ec +bf +00 +00 +3f +c0 +00 +00 +59 +c0 +00 +00 +e7 +20 +00 +00 +73 +c0 +00 +00 +8d +c0 +00 +00 +a7 +c0 +00 +00 +c1 +c0 +00 +00 +da +c0 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +34 +c1 +00 +00 +4e +c1 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +8e +c1 +00 +00 +c1 +c1 +00 +00 +e7 +20 +00 +00 +db +c1 +00 +00 +0f +c2 +00 +00 +28 +c2 +00 +00 +42 +c2 +00 +00 +95 +c2 +00 +00 +e7 +20 +00 +00 +af +c2 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ec +bf +00 +00 +3f +c0 +00 +00 +59 +c0 +00 +00 +e7 +20 +00 +00 +73 +c0 +00 +00 +8d +c0 +00 +00 +a7 +c0 +00 +00 +c1 +c0 +00 +00 +da +c0 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +34 +c1 +00 +00 +4e +c1 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +8e +c1 +00 +00 +c1 +c1 +00 +00 +e7 +20 +00 +00 +db +c1 +00 +00 +0f +c2 +00 +00 +28 +c2 +00 +00 +42 +c2 +00 +00 +95 +c2 +00 +00 +e7 +20 +00 +00 +af +c2 +00 +00 +e3 +a2 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +fd +a2 +00 +00 +50 +a3 +00 +00 +90 +a3 +00 +00 +fe +a3 +00 +00 +3e +a4 +00 +00 +58 +a4 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +72 +a4 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +8b +a4 +00 +00 +a5 +a4 +00 +00 +bf +a4 +00 +00 +e7 +20 +00 +00 +2e +a5 +00 +00 +e7 +20 +00 +00 +81 +a5 +00 +00 +c1 +a5 +00 +00 +a9 +a6 +00 +00 +c3 +a6 +00 +00 +e7 +20 +00 +00 +dd +a6 +00 +00 +f7 +a6 +00 +00 +78 +a7 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +fd +a2 +00 +00 +50 +a3 +00 +00 +90 +a3 +00 +00 +fe +a3 +00 +00 +3e +a4 +00 +00 +58 +a4 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +72 +a4 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +8b +a4 +00 +00 +a5 +a4 +00 +00 +bf +a4 +00 +00 +e7 +20 +00 +00 +2e +a5 +00 +00 +e7 +20 +00 +00 +81 +a5 +00 +00 +c1 +a5 +00 +00 +a9 +a6 +00 +00 +c3 +a6 +00 +00 +e7 +20 +00 +00 +dd +a6 +00 +00 +f7 +a6 +00 +00 +78 +a7 +00 +00 +37 +9b +00 +00 +e7 +20 +00 +00 +48 +9b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +59 +9b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +6a +9b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d9 +9b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +18 +9c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +2d +9c +00 +00 +e7 +20 +00 +00 +42 +9c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +54 +9c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +66 +9c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +6a +9b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d9 +9b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +18 +9c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +2d +9c +00 +00 +e7 +20 +00 +00 +42 +9c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +54 +9c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +66 +9c +00 +00 +5b +93 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +9b +93 +00 +00 +db +93 +00 +00 +1b +94 +00 +00 +5b +94 +00 +00 +e7 +20 +00 +00 +9b +94 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +b5 +94 +00 +00 +cf +94 +00 +00 +e7 +20 +00 +00 +e9 +94 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +57 +95 +00 +00 +89 +95 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +5b +93 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +9b +93 +00 +00 +db +93 +00 +00 +1b +94 +00 +00 +5b +94 +00 +00 +e7 +20 +00 +00 +9b +94 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +b5 +94 +00 +00 +cf +94 +00 +00 +e7 +20 +00 +00 +e9 +94 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +57 +95 +00 +00 +89 +95 +00 +00 +10 +8a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +2a +8a +00 +00 +2a +8a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a3 +8a +00 +00 +bd +8a +00 +00 +fd +8a +00 +00 +6c +8b +00 +00 +85 +8b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +c5 +8b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +df +8b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +1f +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a3 +8a +00 +00 +bd +8a +00 +00 +fd +8a +00 +00 +6c +8b +00 +00 +85 +8b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +c5 +8b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +df +8b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +1f +8c +00 +00 +4c +6c +00 +00 +66 +6c +00 +00 +e7 +20 +00 +00 +80 +6c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +c0 +6c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d5 +6c +00 +00 +90 +6d +00 +00 +e7 +20 +00 +00 +ec +6d +00 +00 +06 +6e +00 +00 +e7 +20 +00 +00 +20 +6e +00 +00 +44 +6e +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +59 +6e +00 +00 +6f +6e +00 +00 +81 +6e +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +4c +6c +00 +00 +66 +6c +00 +00 +e7 +20 +00 +00 +80 +6c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +c0 +6c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d5 +6c +00 +00 +90 +6d +00 +00 +e7 +20 +00 +00 +ec +6d +00 +00 +06 +6e +00 +00 +e7 +20 +00 +00 +20 +6e +00 +00 +44 +6e +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +59 +6e +00 +00 +6f +6e +00 +00 +81 +6e +00 +00 +39 +69 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +79 +69 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +93 +69 +00 +00 +a8 +69 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +02 +6a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +17 +6a +00 +00 +2d +6a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +5c +6a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +39 +69 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +79 +69 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +93 +69 +00 +00 +a8 +69 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +02 +6a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +17 +6a +00 +00 +2d +6a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +5c +6a +00 +00 +63 +5b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a3 +5b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +bd +5b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d7 +5b +00 +00 +e7 +20 +00 +00 +f1 +5b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +0b +5c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +63 +5b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a3 +5b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +bd +5b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d7 +5b +00 +00 +e7 +20 +00 +00 +f1 +5b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +0b +5c +00 +00 +d2 +58 +00 +00 +ec +58 +00 +00 +06 +59 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +20 +59 +00 +00 +3a +59 +00 +00 +e7 +20 +00 +00 +54 +59 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d2 +58 +00 +00 +ec +58 +00 +00 +06 +59 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +20 +59 +00 +00 +3a +59 +00 +00 +e7 +20 +00 +00 +54 +59 +00 +00 +71 +56 +00 +00 +8b +56 +00 +00 +cb +56 +00 +00 +e5 +56 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +25 +57 +00 +00 +3f +57 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +59 +57 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +71 +56 +00 +00 +8b +56 +00 +00 +cb +56 +00 +00 +e5 +56 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +25 +57 +00 +00 +3f +57 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +59 +57 +00 +00 +ff +53 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +14 +54 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +29 +54 +00 +00 +43 +54 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +76 +54 +00 +00 +c9 +54 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +25 +55 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ff +53 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +14 +54 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +29 +54 +00 +00 +43 +54 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +76 +54 +00 +00 +c9 +54 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +25 +55 +00 +00 +9c +2e +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +2f +2f +00 +00 +49 +2f +00 +00 +63 +2f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +7c +2f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a9 +2f +00 +00 +e7 +20 +00 +00 +47 +30 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +87 +30 +00 +00 +a1 +30 +00 +00 +e7 +20 +00 +00 +ba +30 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ec +30 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +9c +2e +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +2f +2f +00 +00 +49 +2f +00 +00 +63 +2f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +7c +2f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a9 +2f +00 +00 +e7 +20 +00 +00 +47 +30 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +87 +30 +00 +00 +a1 +30 +00 +00 +e7 +20 +00 +00 +ba +30 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ec +30 +00 +00 +6c +2a +00 +00 +e7 +20 +00 +00 +86 +2a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a0 +2a +00 +00 +ba +2a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +37 +2b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +6c +2a +00 +00 +e7 +20 +00 +00 +86 +2a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a0 +2a +00 +00 +ba +2a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +37 +2b +00 +00 +a7 +25 +00 +00 +d3 +25 +00 +00 +ff +25 +00 +00 +e7 +20 +00 +00 +2b +26 +00 +00 +e7 +20 +00 +00 +57 +26 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +83 +26 +00 +00 +af +26 +00 +00 +c9 +26 +00 +00 +e2 +26 +00 +00 +fe +26 +00 +00 +e7 +20 +00 +00 +4a +27 +00 +00 +5c +27 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +78 +27 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a7 +25 +00 +00 +d3 +25 +00 +00 +ff +25 +00 +00 +e7 +20 +00 +00 +2b +26 +00 +00 +e7 +20 +00 +00 +57 +26 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +83 +26 +00 +00 +af +26 +00 +00 +c9 +26 +00 +00 +e2 +26 +00 +00 +fe +26 +00 +00 +e7 +20 +00 +00 +4a +27 +00 +00 +5c +27 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +78 +27 +00 +00 +17 +28 +00 +00 +43 +28 +00 +00 +50 +2a +00 +00 +e7 +20 +00 +00 +6f +28 +00 +00 +e7 +20 +00 +00 +c3 +28 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e8 +28 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +fb +27 +00 +00 +a7 +28 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +8b +28 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +6f +28 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +17 +28 +00 +00 +43 +28 +00 +00 +50 +2a +00 +00 +e7 +20 +00 +00 +6f +28 +00 +00 +e7 +20 +00 +00 +c3 +28 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e8 +28 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +fb +27 +00 +00 +a7 +28 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +8b +28 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +6f +28 +00 +00 +c8 +46 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e2 +46 +00 +00 +e7 +20 +00 +00 +21 +47 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +3b +47 +00 +00 +8e +47 +00 +00 +e7 +20 +00 +00 +a8 +47 +00 +00 +e7 +20 +00 +00 +c2 +47 +00 +00 +ff +47 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e2 +46 +00 +00 +e7 +20 +00 +00 +21 +47 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +3b +47 +00 +00 +8e +47 +00 +00 +e7 +20 +00 +00 +a8 +47 +00 +00 +e7 +20 +00 +00 +c2 +47 +00 +00 +ff +47 +00 +00 +5c +36 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +76 +36 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e8 +35 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +02 +36 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +42 +36 +00 +00 +e7 +20 +00 +00 +88 +36 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +5c +36 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +76 +36 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e8 +35 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +02 +36 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +42 +36 +00 +00 +e7 +20 +00 +00 +88 +36 +00 +00 +22 +38 +00 +00 +e7 +20 +00 +00 +5a +38 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +76 +38 +00 +00 +e7 +20 +00 +00 +92 +38 +00 +00 +e7 +20 +00 +00 +e5 +38 +00 +00 +e7 +20 +00 +00 +3e +38 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +22 +38 +00 +00 +e7 +20 +00 +00 +5a +38 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +76 +38 +00 +00 +e7 +20 +00 +00 +92 +38 +00 +00 +e7 +20 +00 +00 +e5 +38 +00 +00 +e7 +20 +00 +00 +3e +38 +00 +00 +4c +4f +00 +00 +e7 +20 +00 +00 +84 +4f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a0 +4f +00 +00 +e7 +20 +00 +00 +bc +4f +00 +00 +e7 +20 +00 +00 +0f +50 +00 +00 +e7 +20 +00 +00 +68 +4f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +4c +4f +00 +00 +e7 +20 +00 +00 +84 +4f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a0 +4f +00 +00 +e7 +20 +00 +00 +bc +4f +00 +00 +e7 +20 +00 +00 +0f +50 +00 +00 +e7 +20 +00 +00 +68 +4f +00 +00 +d1 +60 +00 +00 +e7 +20 +00 +00 +09 +61 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +25 +61 +00 +00 +e7 +20 +00 +00 +4e +61 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ed +60 +00 +00 +97 +60 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d1 +60 +00 +00 +e7 +20 +00 +00 +09 +61 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +25 +61 +00 +00 +e7 +20 +00 +00 +4e +61 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ed +60 +00 +00 +97 +60 +00 +00 +72 +79 +00 +00 +46 +79 +00 +00 +64 +7c +00 +00 +e7 +20 +00 +00 +9e +79 +00 +00 +e7 +20 +00 +00 +44 +7a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +1f +7a +00 +00 +e7 +20 +00 +00 +2d +79 +00 +00 +11 +79 +00 +00 +d6 +79 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ba +79 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +9e +79 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +72 +79 +00 +00 +46 +79 +00 +00 +64 +7c +00 +00 +e7 +20 +00 +00 +9e +79 +00 +00 +e7 +20 +00 +00 +44 +7a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +1f +7a +00 +00 +e7 +20 +00 +00 +2d +79 +00 +00 +11 +79 +00 +00 +d6 +79 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ba +79 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +9e +79 +00 +00 +ae +7a +00 +00 +e8 +7a +00 +00 +10 +7b +00 +00 +e7 +20 +00 +00 +f4 +7b +00 +00 +e7 +20 +00 +00 +2c +7b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +66 +7b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a0 +7b +00 +00 +bc +7b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d8 +7b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +f4 +7b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ae +7a +00 +00 +e8 +7a +00 +00 +10 +7b +00 +00 +e7 +20 +00 +00 +f4 +7b +00 +00 +e7 +20 +00 +00 +2c +7b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +66 +7b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a0 +7b +00 +00 +bc +7b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d8 +7b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +f4 +7b +00 +00 +ba +7f +00 +00 +e7 +20 +00 +00 +f2 +7f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +07 +80 +00 +00 +e7 +20 +00 +00 +30 +80 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d6 +7f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ba +7f +00 +00 +e7 +20 +00 +00 +f2 +7f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +07 +80 +00 +00 +e7 +20 +00 +00 +30 +80 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d6 +7f +00 +00 +8f +8f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +cb +8f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e5 +8f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +f7 +8f +00 +00 +b1 +8f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +6d +8f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +8f +8f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +cb +8f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e5 +8f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +f7 +8f +00 +00 +b1 +8f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +6d +8f +00 +00 +b9 +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +5a +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +cb +8c +00 +00 +7c +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +38 +8c +00 +00 +9f +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +dd +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +b9 +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +5a +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +cb +8c +00 +00 +7c +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +38 +8c +00 +00 +9f +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +dd +8c +00 +00 +50 +b6 +00 +00 +e7 +20 +00 +00 +36 +b6 +00 +00 +84 +b6 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +dd +b5 +00 +00 +6a +b6 +00 +00 +9e +b6 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +f7 +b5 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +50 +b6 +00 +00 +e7 +20 +00 +00 +36 +b6 +00 +00 +84 +b6 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +dd +b5 +00 +00 +6a +b6 +00 +00 +9e +b6 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +f7 +b5 +00 +00 +81 +cb +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +67 +cb +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ad +cb +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +cb +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +81 +cb +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +67 +cb +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ad +cb +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +cb +00 +00 +b4 +c6 +00 +00 +b4 +c6 +00 +00 +b4 +c6 +00 +00 +b4 +c6 +00 +00 +b4 +c6 +00 +00 +b4 +c6 +00 +00 +b4 +c6 +00 +00 +b4 +c6 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +cf +c6 +00 +00 +eb +c6 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +07 +c7 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +60 +c7 +00 +00 +e7 +20 +00 +00 +23 +c7 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +3d +c7 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +cf +c6 +00 +00 +eb +c6 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +07 +c7 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +60 +c7 +00 +00 +e7 +20 +00 +00 +23 +c7 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +3d +c7 +00 +00 +82 +cd +00 +00 +ae +cd +00 +00 +62 +d0 +00 +00 +e7 +20 +00 +00 +c5 +ce +00 +00 +e7 +20 +00 +00 +da +cd +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +06 +ce +00 +00 +e7 +20 +00 +00 +32 +ce +00 +00 +4b +ce +00 +00 +67 +ce +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a9 +ce +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +c5 +ce +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +82 +cd +00 +00 +ae +cd +00 +00 +62 +d0 +00 +00 +e7 +20 +00 +00 +c5 +ce +00 +00 +e7 +20 +00 +00 +da +cd +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +06 +ce +00 +00 +e7 +20 +00 +00 +32 +ce +00 +00 +4b +ce +00 +00 +67 +ce +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a9 +ce +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +c5 +ce +00 +00 +19 +cf +00 +00 +45 +cf +00 +00 +d2 +d0 +00 +00 +e7 +20 +00 +00 +71 +cf +00 +00 +e7 +20 +00 +00 +c5 +cf +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ea +cf +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +fd +ce +00 +00 +a9 +cf +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +8d +cf +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +71 +cf +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +19 +cf +00 +00 +45 +cf +00 +00 +d2 +d0 +00 +00 +e7 +20 +00 +00 +71 +cf +00 +00 +e7 +20 +00 +00 +c5 +cf +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ea +cf +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +fd +ce +00 +00 +a9 +cf +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +8d +cf +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +71 +cf +00 +00 +51 +0a +01 +00 +02 +00 +00 +00 +06 +00 +55 +0a +01 +00 +02 +00 +00 +00 +06 +00 +59 +0a +01 +00 +02 +00 +00 +00 +06 +00 +5d +0a +01 +00 +02 +00 +00 +00 +06 +00 +61 +0a +01 +00 +02 +00 +00 +00 +06 +00 +65 +0a +01 +00 +02 +00 +00 +00 +06 +00 +69 +0a +01 +00 +02 +00 +00 +00 +06 +00 +6d +0a +01 +00 +02 +00 +00 +00 +06 +00 +71 +0a +01 +00 +02 +00 +00 +00 +06 +00 +75 +0a +01 +00 +02 +00 +00 +00 +06 +00 +79 +0a +01 +00 +02 +00 +00 +00 +06 +00 +7d +0a +01 +00 +02 +00 +00 +00 +06 +00 +81 +0a +01 +00 +02 +00 +00 +00 +06 +00 +85 +0a +01 +00 +02 +00 +00 +00 +06 +00 +89 +0a +01 +00 +02 +00 +00 +00 +06 +00 +8d +0a +01 +00 +02 +00 +00 +00 +06 +00 +91 +0a +01 +00 +02 +00 +00 +00 +06 +00 +95 +0a +01 +00 +02 +00 +00 +00 +06 +00 +99 +0a +01 +00 +02 +00 +00 +00 +06 +00 +9d +0a +01 +00 +02 +00 +00 +00 +06 +00 +a1 +0a +01 +00 +02 +00 +00 +00 +06 +00 +a5 +0a +01 +00 +02 +00 +00 +00 +06 +00 +cd +0a +01 +00 +02 +00 +00 +00 +06 +00 +d1 +0a +01 +00 +02 +00 +00 +00 +06 +00 +d5 +0a +01 +00 +02 +00 +00 +00 +06 +00 +d9 +0a +01 +00 +02 +00 +00 +00 +06 +00 +dd +0a +01 +00 +02 +00 +00 +00 +06 +00 +e1 +0a +01 +00 +02 +00 +00 +00 +06 +00 +e5 +0a +01 +00 +02 +00 +00 +00 +06 +00 +e9 +0a +01 +00 +02 +00 +00 +00 +06 +00 +ed +0a +01 +00 +02 +00 +00 +00 +06 +00 +f1 +0a +01 +00 +02 +00 +00 +00 +06 +00 +f5 +0a +01 +00 +02 +00 +00 +00 +06 +00 +f9 +0a +01 +00 +02 +00 +00 +00 +06 +00 +fd +0a +01 +00 +02 +00 +00 +00 +06 +00 +01 +0b +01 +00 +02 +00 +00 +00 +06 +00 +05 +0b +01 +00 +02 +00 +00 +00 +06 +00 +09 +0b +01 +00 +02 +00 +00 +00 +06 +00 +0d +0b +01 +00 +02 +00 +00 +00 +06 +00 +11 +0b +01 +00 +02 +00 +00 +00 +06 +00 +15 +0b +01 +00 +02 +00 +00 +00 +06 +00 +19 +0b +01 +00 +02 +00 +00 +00 +06 +00 +1d +0b +01 +00 +02 +00 +00 +00 +06 +00 +21 +0b +01 +00 +02 +00 +00 +00 +06 +00 +25 +0b +01 +00 +02 +00 +00 +00 +06 +00 +29 +0b +01 +00 +02 +00 +00 +00 +06 +00 +2d +0b +01 +00 +02 +00 +00 +00 +06 +00 +31 +0b +01 +00 +02 +00 +00 +00 +06 +00 +35 +0b +01 +00 +02 +00 +00 +00 +06 +00 +39 +0b +01 +00 +02 +00 +00 +00 +06 +00 +3d +0b +01 +00 +02 +00 +00 +00 +06 +00 +41 +0b +01 +00 +02 +00 +00 +00 +06 +00 +45 +0b +01 +00 +02 +00 +00 +00 +06 +00 +49 +0b +01 +00 +02 +00 +00 +00 +06 +00 +4d +0b +01 +00 +02 +00 +00 +00 +06 +00 +51 +0b +01 +00 +02 +00 +00 +00 +06 +00 +55 +0b +01 +00 +02 +00 +00 +00 +06 +00 +59 +0b +01 +00 +02 +00 +00 +00 +06 +00 +5d +0b +01 +00 +02 +00 +00 +00 +06 +00 +61 +0b +01 +00 +02 +00 +00 +00 +06 +00 +65 +0b +01 +00 +02 +00 +00 +00 +06 +00 +69 +0b +01 +00 +02 +00 +00 +00 +06 +00 +6d +0b +01 +00 +02 +00 +00 +00 +06 +00 +71 +0b +01 +00 +02 +00 +00 +00 +06 +00 +75 +0b +01 +00 +02 +00 +00 +00 +06 +00 +79 +0b +01 +00 +02 +00 +00 +00 +06 +00 +7d +0b +01 +00 +02 +00 +00 +00 +06 +00 +81 +0b +01 +00 +02 +00 +00 +00 +06 +00 +85 +0b +01 +00 +02 +00 +00 +00 +06 +00 +89 +0b +01 +00 +02 +00 +00 +00 +06 +00 +8d +0b +01 +00 +02 +00 +00 +00 +06 +00 +91 +0b +01 +00 +02 +00 +00 +00 +06 +00 +95 +0b +01 +00 +02 +00 +00 +00 +06 +00 +99 +0b +01 +00 +02 +00 +00 +00 +06 +00 +9d +0b +01 +00 +02 +00 +00 +00 +06 +00 +a1 +0b +01 +00 +02 +00 +00 +00 +06 +00 +a5 +0b +01 +00 +02 +00 +00 +00 +06 +00 +a9 +0b +01 +00 +02 +00 +00 +00 +06 +00 +ad +0b +01 +00 +02 +00 +00 +00 +06 +00 +b1 +0b +01 +00 +02 +00 +00 +00 +06 +00 +b5 +0b +01 +00 +02 +00 +00 +00 +06 +00 +b9 +0b +01 +00 +02 +00 +00 +00 +06 +00 +bd +0b +01 +00 +02 +00 +00 +00 +06 +00 +c1 +0b +01 +00 +02 +00 +00 +00 +06 +00 +c5 +0b +01 +00 +02 +00 +00 +00 +06 +00 +c9 +0b +01 +00 +02 +00 +00 +00 +06 +00 +cd +0b +01 +00 +02 +00 +00 +00 +06 +00 +d1 +0b +01 +00 +02 +00 +00 +00 +06 +00 +d5 +0b +01 +00 +02 +00 +00 +00 +06 +00 +d9 +0b +01 +00 +02 +00 +00 +00 +06 +00 +dd +0b +01 +00 +02 +00 +00 +00 +06 +00 +e1 +0b +01 +00 +02 +00 +00 +00 +06 +00 +e5 +0b +01 +00 +02 +00 +00 +00 +06 +00 +e9 +0b +01 +00 +02 +00 +00 +00 +06 +00 +ed +0b +01 +00 +02 +00 +00 +00 +06 +00 +f1 +0b +01 +00 +02 +00 +00 +00 +06 +00 +f5 +0b +01 +00 +02 +00 +00 +00 +06 +00 +f9 +0b +01 +00 +02 +00 +00 +00 +06 +00 +fd +0b +01 +00 +02 +00 +00 +00 +06 +00 +01 +0c +01 +00 +02 +00 +00 +00 +06 +00 +05 +0c +01 +00 +02 +00 +00 +00 +06 +00 +09 +0c +01 +00 +02 +00 +00 +00 +06 +00 +0d +0c +01 +00 +02 +00 +00 +00 +06 +00 +11 +0c +01 +00 +02 +00 +00 +00 +06 +00 +15 +0c +01 +00 +02 +00 +00 +00 +06 +00 +19 +0c +01 +00 +02 +00 +00 +00 +06 +00 +1d +0c +01 +00 +02 +00 +00 +00 +06 +00 +21 +0c +01 +00 +02 +00 +00 +00 +06 +00 +25 +0c +01 +00 +02 +00 +00 +00 +06 +00 +29 +0c +01 +00 +02 +00 +00 +00 +06 +00 +2d +0c +01 +00 +02 +00 +00 +00 +06 +00 +31 +0c +01 +00 +02 +00 +00 +00 +06 +00 +35 +0c +01 +00 +02 +00 +00 +00 +06 +00 +39 +0c +01 +00 +02 +00 +00 +00 +06 +00 +3d +0c +01 +00 +02 +00 +00 +00 +06 +00 +41 +0c +01 +00 +02 +00 +00 +00 +06 +00 +45 +0c +01 +00 +02 +00 +00 +00 +06 +00 +49 +0c +01 +00 +02 +00 +00 +00 +06 +00 +4d +0c +01 +00 +02 +00 +00 +00 +06 +00 +51 +0c +01 +00 +02 +00 +00 +00 +06 +00 +55 +0c +01 +00 +02 +00 +00 +00 +06 +00 +59 +0c +01 +00 +02 +00 +00 +00 +06 +00 +5d +0c +01 +00 +02 +00 +00 +00 +06 +00 +61 +0c +01 +00 +02 +00 +00 +00 +06 +00 +65 +0c +01 +00 +02 +00 +00 +00 +06 +00 +69 +0c +01 +00 +02 +00 +00 +00 +06 +00 +6d +0c +01 +00 +02 +00 +00 +00 +06 +00 +71 +0c +01 +00 +02 +00 +00 +00 +06 +00 +75 +0c +01 +00 +02 +00 +00 +00 +06 +00 +79 +0c +01 +00 +02 +00 +00 +00 +06 +00 +7d +0c +01 +00 +02 +00 +00 +00 +06 +00 +81 +0c +01 +00 +02 +00 +00 +00 +06 +00 +85 +0c +01 +00 +02 +00 +00 +00 +06 +00 +89 +0c +01 +00 +02 +00 +00 +00 +06 +00 +8d +0c +01 +00 +02 +00 +00 +00 +06 +00 +91 +0c +01 +00 +02 +00 +00 +00 +06 +00 +95 +0c +01 +00 +02 +00 +00 +00 +06 +00 +99 +0c +01 +00 +02 +00 +00 +00 +06 +00 +9d +0c +01 +00 +02 +00 +00 +00 +06 +00 +a1 +0c +01 +00 +02 +00 +00 +00 +06 +00 +a5 +0c +01 +00 +02 +00 +00 +00 +06 +00 +a9 +0c +01 +00 +02 +00 +00 +00 +06 +00 +ad +0c +01 +00 +02 +00 +00 +00 +06 +00 +b1 +0c +01 +00 +02 +00 +00 +00 +06 +00 +b5 +0c +01 +00 +02 +00 +00 +00 +06 +00 +b9 +0c +01 +00 +02 +00 +00 +00 +06 +00 +bd +0c +01 +00 +02 +00 +00 +00 +06 +00 +c1 +0c +01 +00 +02 +00 +00 +00 +06 +00 +c5 +0c +01 +00 +02 +00 +00 +00 +06 +00 +c9 +0c +01 +00 +02 +00 +00 +00 +06 +00 +cd +0c +01 +00 +02 +00 +00 +00 +06 +00 +d1 +0c +01 +00 +02 +00 +00 +00 +06 +00 +d5 +0c +01 +00 +02 +00 +00 +00 +06 +00 +d9 +0c +01 +00 +02 +00 +00 +00 +06 +00 +dd +0c +01 +00 +02 +00 +00 +00 +06 +00 +e1 +0c +01 +00 +02 +00 +00 +00 +06 +00 +e5 +0c +01 +00 +02 +00 +00 +00 +06 +00 +e9 +0c +01 +00 +02 +00 +00 +00 +06 +00 +ed +0c +01 +00 +02 +00 +00 +00 +06 +00 +f1 +0c +01 +00 +02 +00 +00 +00 +06 +00 +f5 +0c +01 +00 +02 +00 +00 +00 +06 +00 +f9 +0c +01 +00 +02 +00 +00 +00 +06 +00 +fd +0c +01 +00 +02 +00 +00 +00 +06 +00 +01 +0d +01 +00 +02 +00 +00 +00 +06 +00 +05 +0d +01 +00 +02 +00 +00 +00 +06 +00 +09 +0d +01 +00 +02 +00 +00 +00 +06 +00 +0d +0d +01 +00 +02 +00 +00 +00 +06 +00 +11 +0d +01 +00 +02 +00 +00 +00 +06 +00 +15 +0d +01 +00 +02 +00 +00 +00 +06 +00 +19 +0d +01 +00 +02 +00 +00 +00 +06 +00 +1d +0d +01 +00 +02 +00 +00 +00 +06 +00 +21 +0d +01 +00 +02 +00 +00 +00 +06 +00 +25 +0d +01 +00 +02 +00 +00 +00 +06 +00 +29 +0d +01 +00 +02 +00 +00 +00 +06 +00 +2d +0d +01 +00 +02 +00 +00 +00 +06 +00 +31 +0d +01 +00 +02 +00 +00 +00 +06 +00 +35 +0d +01 +00 +02 +00 +00 +00 +06 +00 +39 +0d +01 +00 +02 +00 +00 +00 +06 +00 +3d +0d +01 +00 +02 +00 +00 +00 +06 +00 +41 +0d +01 +00 +02 +00 +00 +00 +06 +00 +45 +0d +01 +00 +02 +00 +00 +00 +06 +00 +49 +0d +01 +00 +02 +00 +00 +00 +06 +00 +4d +0d +01 +00 +02 +00 +00 +00 +06 +00 +51 +0d +01 +00 +02 +00 +00 +00 +06 +00 +55 +0d +01 +00 +02 +00 +00 +00 +06 +00 +59 +0d +01 +00 +02 +00 +00 +00 +06 +00 +5d +0d +01 +00 +02 +00 +00 +00 +06 +00 +61 +0d +01 +00 +02 +00 +00 +00 +06 +00 +65 +0d +01 +00 +02 +00 +00 +00 +06 +00 +69 +0d +01 +00 +02 +00 +00 +00 +06 +00 +6d +0d +01 +00 +02 +00 +00 +00 +06 +00 +71 +0d +01 +00 +02 +00 +00 +00 +06 +00 +75 +0d +01 +00 +02 +00 +00 +00 +06 +00 +79 +0d +01 +00 +02 +00 +00 +00 +06 +00 +7d +0d +01 +00 +02 +00 +00 +00 +06 +00 +81 +0d +01 +00 +02 +00 +00 +00 +06 +00 +85 +0d +01 +00 +02 +00 +00 +00 +06 +00 +89 +0d +01 +00 +02 +00 +00 +00 +06 +00 +8d +0d +01 +00 +02 +00 +00 +00 +06 +00 +91 +0d +01 +00 +02 +00 +00 +00 +06 +00 +95 +0d +01 +00 +02 +00 +00 +00 +06 +00 +99 +0d +01 +00 +02 +00 +00 +00 +06 +00 +9d +0d +01 +00 +02 +00 +00 +00 +06 +00 +a1 +0d +01 +00 +02 +00 +00 +00 +06 +00 +a5 +0d +01 +00 +02 +00 +00 +00 +06 +00 +a9 +0d +01 +00 +02 +00 +00 +00 +06 +00 +ad +0d +01 +00 +02 +00 +00 +00 +06 +00 +b1 +0d +01 +00 +02 +00 +00 +00 +06 +00 +b5 +0d +01 +00 +02 +00 +00 +00 +06 +00 +ed +0e +01 +00 +02 +00 +00 +00 +06 +00 +f1 +0e +01 +00 +02 +00 +00 +00 +06 +00 +f5 +0e +01 +00 +02 +00 +00 +00 +06 +00 +f9 +0e +01 +00 +02 +00 +00 +00 +06 +00 +fd +0e +01 +00 +02 +00 +00 +00 +06 +00 +01 +0f +01 +00 +02 +00 +00 +00 +06 +00 +05 +0f +01 +00 +02 +00 +00 +00 +06 +00 +09 +0f +01 +00 +02 +00 +00 +00 +06 +00 +0d +0f +01 +00 +02 +00 +00 +00 +06 +00 +11 +0f +01 +00 +02 +00 +00 +00 +06 +00 +15 +0f +01 +00 +02 +00 +00 +00 +06 +00 +19 +0f +01 +00 +02 +00 +00 +00 +06 +00 +1d +0f +01 +00 +02 +00 +00 +00 +06 +00 +21 +0f +01 +00 +02 +00 +00 +00 +06 +00 +25 +0f +01 +00 +02 +00 +00 +00 +06 +00 +29 +0f +01 +00 +02 +00 +00 +00 +06 +00 +2d +0f +01 +00 +02 +00 +00 +00 +06 +00 +31 +0f +01 +00 +02 +00 +00 +00 +06 +00 +35 +0f +01 +00 +02 +00 +00 +00 +06 +00 +39 +0f +01 +00 +02 +00 +00 +00 +06 +00 +3d +0f +01 +00 +02 +00 +00 +00 +06 +00 +41 +0f +01 +00 +02 +00 +00 +00 +06 +00 +45 +0f +01 +00 +02 +00 +00 +00 +06 +00 +49 +0f +01 +00 +02 +00 +00 +00 +06 +00 +4d +0f +01 +00 +02 +00 +00 +00 +06 +00 +51 +0f +01 +00 +02 +00 +00 +00 +06 +00 +55 +0f +01 +00 +02 +00 +00 +00 +06 +00 +59 +0f +01 +00 +02 +00 +00 +00 +06 +00 +5d +0f +01 +00 +02 +00 +00 +00 +06 +00 +61 +0f +01 +00 +02 +00 +00 +00 +06 +00 +65 +0f +01 +00 +02 +00 +00 +00 +06 +00 +69 +0f +01 +00 +02 +00 +00 +00 +06 +00 +6d +0f +01 +00 +02 +00 +00 +00 +06 +00 +71 +0f +01 +00 +02 +00 +00 +00 +06 +00 +75 +0f +01 +00 +02 +00 +00 +00 +06 +00 +79 +0f +01 +00 +02 +00 +00 +00 +06 +00 +7d +0f +01 +00 +02 +00 +00 +00 +06 +00 +81 +0f +01 +00 +02 +00 +00 +00 +06 +00 +85 +0f +01 +00 +02 +00 +00 +00 +06 +00 +89 +0f +01 +00 +02 +00 +00 +00 +06 +00 +8d +0f +01 +00 +02 +00 +00 +00 +06 +00 +91 +0f +01 +00 +02 +00 +00 +00 +06 +00 +95 +0f +01 +00 +02 +00 +00 +00 +06 +00 +99 +0f +01 +00 +02 +00 +00 +00 +06 +00 +9d +0f +01 +00 +02 +00 +00 +00 +06 +00 +a1 +0f +01 +00 +02 +00 +00 +00 +06 +00 +a5 +0f +01 +00 +02 +00 +00 +00 +06 +00 +a9 +0f +01 +00 +02 +00 +00 +00 +06 +00 +ad +0f +01 +00 +02 +00 +00 +00 +06 +00 +b1 +0f +01 +00 +02 +00 +00 +00 +06 +00 +b5 +0f +01 +00 +02 +00 +00 +00 +06 +00 +b9 +0f +01 +00 +02 +00 +00 +00 +06 +00 +bd +0f +01 +00 +02 +00 +00 +00 +06 +00 +c1 +0f +01 +00 +02 +00 +00 +00 +06 +00 +c5 +0f +01 +00 +02 +00 +00 +00 +06 +00 +c9 +0f +01 +00 +02 +00 +00 +00 +06 +00 +cd +0f +01 +00 +02 +00 +00 +00 +06 +00 +d1 +0f +01 +00 +02 +00 +00 +00 +06 +00 +d5 +0f +01 +00 +02 +00 +00 +00 +06 +00 +d9 +0f +01 +00 +02 +00 +00 +00 +06 +00 +dd +0f +01 +00 +02 +00 +00 +00 +06 +00 +e1 +0f +01 +00 +02 +00 +00 +00 +06 +00 +e5 +0f +01 +00 +02 +00 +00 +00 +06 +00 +e9 +0f +01 +00 +02 +00 +00 +00 +06 +00 +ed +0f +01 +00 +02 +00 +00 +00 +06 +00 +f1 +0f +01 +00 +02 +00 +00 +00 +06 +00 +f5 +0f +01 +00 +02 +00 +00 +00 +06 +00 +f9 +0f +01 +00 +02 +00 +00 +00 +06 +00 +fd +0f +01 +00 +02 +00 +00 +00 +06 +00 +01 +10 +01 +00 +02 +00 +00 +00 +06 +00 +05 +10 +01 +00 +02 +00 +00 +00 +06 +00 +09 +10 +01 +00 +02 +00 +00 +00 +06 +00 +0d +10 +01 +00 +02 +00 +00 +00 +06 +00 +11 +10 +01 +00 +02 +00 +00 +00 +06 +00 +15 +10 +01 +00 +02 +00 +00 +00 +06 +00 +19 +10 +01 +00 +02 +00 +00 +00 +06 +00 +1d +10 +01 +00 +02 +00 +00 +00 +06 +00 +21 +10 +01 +00 +02 +00 +00 +00 +06 +00 +25 +10 +01 +00 +02 +00 +00 +00 +06 +00 +29 +10 +01 +00 +02 +00 +00 +00 +06 +00 +2d +10 +01 +00 +02 +00 +00 +00 +06 +00 +31 +10 +01 +00 +02 +00 +00 +00 +06 +00 +35 +10 +01 +00 +02 +00 +00 +00 +06 +00 +39 +10 +01 +00 +02 +00 +00 +00 +06 +00 +3d +10 +01 +00 +02 +00 +00 +00 +06 +00 +41 +10 +01 +00 +02 +00 +00 +00 +06 +00 +45 +10 +01 +00 +02 +00 +00 +00 +06 +00 +49 +10 +01 +00 +02 +00 +00 +00 +06 +00 +4d +10 +01 +00 +02 +00 +00 +00 +06 +00 +51 +10 +01 +00 +02 +00 +00 +00 +06 +00 +55 +10 +01 +00 +02 +00 +00 +00 +06 +00 +59 +10 +01 +00 +02 +00 +00 +00 +06 +00 +5d +10 +01 +00 +02 +00 +00 +00 +06 +00 +61 +10 +01 +00 +02 +00 +00 +00 +06 +00 +65 +10 +01 +00 +02 +00 +00 +00 +06 +00 +69 +10 +01 +00 +02 +00 +00 +00 +06 +00 +6d +10 +01 +00 +02 +00 +00 +00 +06 +00 +71 +10 +01 +00 +02 +00 +00 +00 +06 +00 +75 +10 +01 +00 +02 +00 +00 +00 +06 +00 +79 +10 +01 +00 +02 +00 +00 +00 +06 +00 +7d +10 +01 +00 +02 +00 +00 +00 +06 +00 +81 +10 +01 +00 +02 +00 +00 +00 +06 +00 +85 +10 +01 +00 +02 +00 +00 +00 +06 +00 +89 +10 +01 +00 +02 +00 +00 +00 +06 +00 +8d +10 +01 +00 +02 +00 +00 +00 +06 +00 +91 +10 +01 +00 +02 +00 +00 +00 +06 +00 +95 +10 +01 +00 +02 +00 +00 +00 +06 +00 +99 +10 +01 +00 +02 +00 +00 +00 +06 +00 +9d +10 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +10 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +10 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +10 +01 +00 +02 +00 +00 +00 +06 +00 +ad +10 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +10 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +10 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +10 +01 +00 +02 +00 +00 +00 +06 +00 +bd +10 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +10 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +10 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +10 +01 +00 +02 +00 +00 +00 +06 +00 +cd +10 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +10 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +10 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +10 +01 +00 +02 +00 +00 +00 +06 +00 +dd +10 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +10 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +10 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +10 +01 +00 +02 +00 +00 +00 +06 +00 +ed +10 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +10 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +10 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +10 +01 +00 +02 +00 +00 +00 +06 +00 +fd +10 +01 +00 +02 +00 +00 +00 +06 +00 +01 +11 +01 +00 +02 +00 +00 +00 +06 +00 +05 +11 +01 +00 +02 +00 +00 +00 +06 +00 +09 +11 +01 +00 +02 +00 +00 +00 +06 +00 +0d +11 +01 +00 +02 +00 +00 +00 +06 +00 +11 +11 +01 +00 +02 +00 +00 +00 +06 +00 +15 +11 +01 +00 +02 +00 +00 +00 +06 +00 +19 +11 +01 +00 +02 +00 +00 +00 +06 +00 +1d +11 +01 +00 +02 +00 +00 +00 +06 +00 +21 +11 +01 +00 +02 +00 +00 +00 +06 +00 +25 +11 +01 +00 +02 +00 +00 +00 +06 +00 +29 +11 +01 +00 +02 +00 +00 +00 +06 +00 +2d +11 +01 +00 +02 +00 +00 +00 +06 +00 +31 +11 +01 +00 +02 +00 +00 +00 +06 +00 +35 +11 +01 +00 +02 +00 +00 +00 +06 +00 +39 +11 +01 +00 +02 +00 +00 +00 +06 +00 +3d +11 +01 +00 +02 +00 +00 +00 +06 +00 +41 +11 +01 +00 +02 +00 +00 +00 +06 +00 +45 +11 +01 +00 +02 +00 +00 +00 +06 +00 +49 +11 +01 +00 +02 +00 +00 +00 +06 +00 +4d +11 +01 +00 +02 +00 +00 +00 +06 +00 +51 +11 +01 +00 +02 +00 +00 +00 +06 +00 +55 +11 +01 +00 +02 +00 +00 +00 +06 +00 +59 +11 +01 +00 +02 +00 +00 +00 +06 +00 +5d +11 +01 +00 +02 +00 +00 +00 +06 +00 +61 +11 +01 +00 +02 +00 +00 +00 +06 +00 +65 +11 +01 +00 +02 +00 +00 +00 +06 +00 +69 +11 +01 +00 +02 +00 +00 +00 +06 +00 +6d +11 +01 +00 +02 +00 +00 +00 +06 +00 +71 +11 +01 +00 +02 +00 +00 +00 +06 +00 +75 +11 +01 +00 +02 +00 +00 +00 +06 +00 +79 +11 +01 +00 +02 +00 +00 +00 +06 +00 +7d +11 +01 +00 +02 +00 +00 +00 +06 +00 +81 +11 +01 +00 +02 +00 +00 +00 +06 +00 +85 +11 +01 +00 +02 +00 +00 +00 +06 +00 +89 +11 +01 +00 +02 +00 +00 +00 +06 +00 +8d +11 +01 +00 +02 +00 +00 +00 +06 +00 +91 +11 +01 +00 +02 +00 +00 +00 +06 +00 +95 +11 +01 +00 +02 +00 +00 +00 +06 +00 +99 +11 +01 +00 +02 +00 +00 +00 +06 +00 +9d +11 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +11 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +11 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +11 +01 +00 +02 +00 +00 +00 +06 +00 +ad +11 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +11 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +11 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +11 +01 +00 +02 +00 +00 +00 +06 +00 +bd +11 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +11 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +11 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +11 +01 +00 +02 +00 +00 +00 +06 +00 +cd +11 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +11 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +11 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +11 +01 +00 +02 +00 +00 +00 +06 +00 +dd +11 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +11 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +11 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +11 +01 +00 +02 +00 +00 +00 +06 +00 +ed +11 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +11 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +11 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +11 +01 +00 +02 +00 +00 +00 +06 +00 +fd +11 +01 +00 +02 +00 +00 +00 +06 +00 +01 +12 +01 +00 +02 +00 +00 +00 +06 +00 +05 +12 +01 +00 +02 +00 +00 +00 +06 +00 +09 +12 +01 +00 +02 +00 +00 +00 +06 +00 +0d +12 +01 +00 +02 +00 +00 +00 +06 +00 +11 +12 +01 +00 +02 +00 +00 +00 +06 +00 +15 +12 +01 +00 +02 +00 +00 +00 +06 +00 +19 +12 +01 +00 +02 +00 +00 +00 +06 +00 +1d +12 +01 +00 +02 +00 +00 +00 +06 +00 +21 +12 +01 +00 +02 +00 +00 +00 +06 +00 +25 +12 +01 +00 +02 +00 +00 +00 +06 +00 +29 +12 +01 +00 +02 +00 +00 +00 +06 +00 +2d +12 +01 +00 +02 +00 +00 +00 +06 +00 +31 +12 +01 +00 +02 +00 +00 +00 +06 +00 +35 +12 +01 +00 +02 +00 +00 +00 +06 +00 +39 +12 +01 +00 +02 +00 +00 +00 +06 +00 +3d +12 +01 +00 +02 +00 +00 +00 +06 +00 +41 +12 +01 +00 +02 +00 +00 +00 +06 +00 +45 +12 +01 +00 +02 +00 +00 +00 +06 +00 +49 +12 +01 +00 +02 +00 +00 +00 +06 +00 +4d +12 +01 +00 +02 +00 +00 +00 +06 +00 +51 +12 +01 +00 +02 +00 +00 +00 +06 +00 +55 +12 +01 +00 +02 +00 +00 +00 +06 +00 +59 +12 +01 +00 +02 +00 +00 +00 +06 +00 +5d +12 +01 +00 +02 +00 +00 +00 +06 +00 +61 +12 +01 +00 +02 +00 +00 +00 +06 +00 +65 +12 +01 +00 +02 +00 +00 +00 +06 +00 +69 +12 +01 +00 +02 +00 +00 +00 +06 +00 +6d +12 +01 +00 +02 +00 +00 +00 +06 +00 +71 +12 +01 +00 +02 +00 +00 +00 +06 +00 +75 +12 +01 +00 +02 +00 +00 +00 +06 +00 +79 +12 +01 +00 +02 +00 +00 +00 +06 +00 +7d +12 +01 +00 +02 +00 +00 +00 +06 +00 +81 +12 +01 +00 +02 +00 +00 +00 +06 +00 +85 +12 +01 +00 +02 +00 +00 +00 +06 +00 +89 +12 +01 +00 +02 +00 +00 +00 +06 +00 +8d +12 +01 +00 +02 +00 +00 +00 +06 +00 +91 +12 +01 +00 +02 +00 +00 +00 +06 +00 +95 +12 +01 +00 +02 +00 +00 +00 +06 +00 +99 +12 +01 +00 +02 +00 +00 +00 +06 +00 +9d +12 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +12 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +12 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +12 +01 +00 +02 +00 +00 +00 +06 +00 +ad +12 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +12 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +12 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +12 +01 +00 +02 +00 +00 +00 +06 +00 +bd +12 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +12 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +12 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +12 +01 +00 +02 +00 +00 +00 +06 +00 +cd +12 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +12 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +12 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +12 +01 +00 +02 +00 +00 +00 +06 +00 +dd +12 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +12 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +12 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +12 +01 +00 +02 +00 +00 +00 +06 +00 +ed +12 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +12 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +12 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +12 +01 +00 +02 +00 +00 +00 +06 +00 +fd +12 +01 +00 +02 +00 +00 +00 +06 +00 +01 +13 +01 +00 +02 +00 +00 +00 +06 +00 +05 +13 +01 +00 +02 +00 +00 +00 +06 +00 +09 +13 +01 +00 +02 +00 +00 +00 +06 +00 +0d +13 +01 +00 +02 +00 +00 +00 +06 +00 +11 +13 +01 +00 +02 +00 +00 +00 +06 +00 +15 +13 +01 +00 +02 +00 +00 +00 +06 +00 +19 +13 +01 +00 +02 +00 +00 +00 +06 +00 +1d +13 +01 +00 +02 +00 +00 +00 +06 +00 +21 +13 +01 +00 +02 +00 +00 +00 +06 +00 +25 +13 +01 +00 +02 +00 +00 +00 +06 +00 +29 +13 +01 +00 +02 +00 +00 +00 +06 +00 +2d +13 +01 +00 +02 +00 +00 +00 +06 +00 +31 +13 +01 +00 +02 +00 +00 +00 +06 +00 +35 +13 +01 +00 +02 +00 +00 +00 +06 +00 +39 +13 +01 +00 +02 +00 +00 +00 +06 +00 +3d +13 +01 +00 +02 +00 +00 +00 +06 +00 +41 +13 +01 +00 +02 +00 +00 +00 +06 +00 +45 +13 +01 +00 +02 +00 +00 +00 +06 +00 +49 +13 +01 +00 +02 +00 +00 +00 +06 +00 +4d +13 +01 +00 +02 +00 +00 +00 +06 +00 +51 +13 +01 +00 +02 +00 +00 +00 +06 +00 +55 +13 +01 +00 +02 +00 +00 +00 +06 +00 +59 +13 +01 +00 +02 +00 +00 +00 +06 +00 +5d +13 +01 +00 +02 +00 +00 +00 +06 +00 +61 +13 +01 +00 +02 +00 +00 +00 +06 +00 +65 +13 +01 +00 +02 +00 +00 +00 +06 +00 +69 +13 +01 +00 +02 +00 +00 +00 +06 +00 +6d +13 +01 +00 +02 +00 +00 +00 +06 +00 +71 +13 +01 +00 +02 +00 +00 +00 +06 +00 +75 +13 +01 +00 +02 +00 +00 +00 +06 +00 +79 +13 +01 +00 +02 +00 +00 +00 +06 +00 +7d +13 +01 +00 +02 +00 +00 +00 +06 +00 +81 +13 +01 +00 +02 +00 +00 +00 +06 +00 +85 +13 +01 +00 +02 +00 +00 +00 +06 +00 +89 +13 +01 +00 +02 +00 +00 +00 +06 +00 +8d +13 +01 +00 +02 +00 +00 +00 +06 +00 +91 +13 +01 +00 +02 +00 +00 +00 +06 +00 +95 +13 +01 +00 +02 +00 +00 +00 +06 +00 +99 +13 +01 +00 +02 +00 +00 +00 +06 +00 +9d +13 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +13 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +13 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +13 +01 +00 +02 +00 +00 +00 +06 +00 +ad +13 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +13 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +13 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +13 +01 +00 +02 +00 +00 +00 +06 +00 +bd +13 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +13 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +13 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +13 +01 +00 +02 +00 +00 +00 +06 +00 +cd +13 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +13 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +13 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +13 +01 +00 +02 +00 +00 +00 +06 +00 +dd +13 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +13 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +13 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +13 +01 +00 +02 +00 +00 +00 +06 +00 +ed +13 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +13 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +13 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +13 +01 +00 +02 +00 +00 +00 +06 +00 +fd +13 +01 +00 +02 +00 +00 +00 +06 +00 +01 +14 +01 +00 +02 +00 +00 +00 +06 +00 +05 +14 +01 +00 +02 +00 +00 +00 +06 +00 +09 +14 +01 +00 +02 +00 +00 +00 +06 +00 +0d +14 +01 +00 +02 +00 +00 +00 +06 +00 +11 +14 +01 +00 +02 +00 +00 +00 +06 +00 +15 +14 +01 +00 +02 +00 +00 +00 +06 +00 +19 +14 +01 +00 +02 +00 +00 +00 +06 +00 +1d +14 +01 +00 +02 +00 +00 +00 +06 +00 +21 +14 +01 +00 +02 +00 +00 +00 +06 +00 +25 +14 +01 +00 +02 +00 +00 +00 +06 +00 +29 +14 +01 +00 +02 +00 +00 +00 +06 +00 +2d +14 +01 +00 +02 +00 +00 +00 +06 +00 +31 +14 +01 +00 +02 +00 +00 +00 +06 +00 +35 +14 +01 +00 +02 +00 +00 +00 +06 +00 +39 +14 +01 +00 +02 +00 +00 +00 +06 +00 +3d +14 +01 +00 +02 +00 +00 +00 +06 +00 +41 +14 +01 +00 +02 +00 +00 +00 +06 +00 +45 +14 +01 +00 +02 +00 +00 +00 +06 +00 +49 +14 +01 +00 +02 +00 +00 +00 +06 +00 +4d +14 +01 +00 +02 +00 +00 +00 +06 +00 +51 +14 +01 +00 +02 +00 +00 +00 +06 +00 +55 +14 +01 +00 +02 +00 +00 +00 +06 +00 +59 +14 +01 +00 +02 +00 +00 +00 +06 +00 +5d +14 +01 +00 +02 +00 +00 +00 +06 +00 +61 +14 +01 +00 +02 +00 +00 +00 +06 +00 +65 +14 +01 +00 +02 +00 +00 +00 +06 +00 +69 +14 +01 +00 +02 +00 +00 +00 +06 +00 +6d +14 +01 +00 +02 +00 +00 +00 +06 +00 +71 +14 +01 +00 +02 +00 +00 +00 +06 +00 +75 +14 +01 +00 +02 +00 +00 +00 +06 +00 +79 +14 +01 +00 +02 +00 +00 +00 +06 +00 +7d +14 +01 +00 +02 +00 +00 +00 +06 +00 +81 +14 +01 +00 +02 +00 +00 +00 +06 +00 +85 +14 +01 +00 +02 +00 +00 +00 +06 +00 +89 +14 +01 +00 +02 +00 +00 +00 +06 +00 +8d +14 +01 +00 +02 +00 +00 +00 +06 +00 +91 +14 +01 +00 +02 +00 +00 +00 +06 +00 +95 +14 +01 +00 +02 +00 +00 +00 +06 +00 +99 +14 +01 +00 +02 +00 +00 +00 +06 +00 +9d +14 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +14 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +14 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +14 +01 +00 +02 +00 +00 +00 +06 +00 +ad +14 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +14 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +14 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +14 +01 +00 +02 +00 +00 +00 +06 +00 +bd +14 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +14 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +14 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +14 +01 +00 +02 +00 +00 +00 +06 +00 +cd +14 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +14 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +14 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +14 +01 +00 +02 +00 +00 +00 +06 +00 +dd +14 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +14 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +14 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +14 +01 +00 +02 +00 +00 +00 +06 +00 +ed +14 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +14 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +14 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +14 +01 +00 +02 +00 +00 +00 +06 +00 +fd +14 +01 +00 +02 +00 +00 +00 +06 +00 +01 +15 +01 +00 +02 +00 +00 +00 +06 +00 +05 +15 +01 +00 +02 +00 +00 +00 +06 +00 +09 +15 +01 +00 +02 +00 +00 +00 +06 +00 +0d +15 +01 +00 +02 +00 +00 +00 +06 +00 +11 +15 +01 +00 +02 +00 +00 +00 +06 +00 +15 +15 +01 +00 +02 +00 +00 +00 +06 +00 +19 +15 +01 +00 +02 +00 +00 +00 +06 +00 +1d +15 +01 +00 +02 +00 +00 +00 +06 +00 +21 +15 +01 +00 +02 +00 +00 +00 +06 +00 +25 +15 +01 +00 +02 +00 +00 +00 +06 +00 +29 +15 +01 +00 +02 +00 +00 +00 +06 +00 +2d +15 +01 +00 +02 +00 +00 +00 +06 +00 +31 +15 +01 +00 +02 +00 +00 +00 +06 +00 +35 +15 +01 +00 +02 +00 +00 +00 +06 +00 +39 +15 +01 +00 +02 +00 +00 +00 +06 +00 +3d +15 +01 +00 +02 +00 +00 +00 +06 +00 +41 +15 +01 +00 +02 +00 +00 +00 +06 +00 +45 +15 +01 +00 +02 +00 +00 +00 +06 +00 +49 +15 +01 +00 +02 +00 +00 +00 +06 +00 +4d +15 +01 +00 +02 +00 +00 +00 +06 +00 +51 +15 +01 +00 +02 +00 +00 +00 +06 +00 +55 +15 +01 +00 +02 +00 +00 +00 +06 +00 +59 +15 +01 +00 +02 +00 +00 +00 +06 +00 +5d +15 +01 +00 +02 +00 +00 +00 +06 +00 +61 +15 +01 +00 +02 +00 +00 +00 +06 +00 +65 +15 +01 +00 +02 +00 +00 +00 +06 +00 +69 +15 +01 +00 +02 +00 +00 +00 +06 +00 +6d +15 +01 +00 +02 +00 +00 +00 +06 +00 +71 +15 +01 +00 +02 +00 +00 +00 +06 +00 +75 +15 +01 +00 +02 +00 +00 +00 +06 +00 +79 +15 +01 +00 +02 +00 +00 +00 +06 +00 +7d +15 +01 +00 +02 +00 +00 +00 +06 +00 +81 +15 +01 +00 +02 +00 +00 +00 +06 +00 +85 +15 +01 +00 +02 +00 +00 +00 +06 +00 +89 +15 +01 +00 +02 +00 +00 +00 +06 +00 +8d +15 +01 +00 +02 +00 +00 +00 +06 +00 +91 +15 +01 +00 +02 +00 +00 +00 +06 +00 +95 +15 +01 +00 +02 +00 +00 +00 +06 +00 +99 +15 +01 +00 +02 +00 +00 +00 +06 +00 +9d +15 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +15 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +15 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +15 +01 +00 +02 +00 +00 +00 +06 +00 +ad +15 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +15 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +15 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +15 +01 +00 +02 +00 +00 +00 +06 +00 +bd +15 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +15 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +15 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +15 +01 +00 +02 +00 +00 +00 +06 +00 +cd +15 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +15 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +15 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +15 +01 +00 +02 +00 +00 +00 +06 +00 +dd +15 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +15 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +15 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +15 +01 +00 +02 +00 +00 +00 +06 +00 +ed +15 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +15 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +15 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +15 +01 +00 +02 +00 +00 +00 +06 +00 +fd +15 +01 +00 +02 +00 +00 +00 +06 +00 +01 +16 +01 +00 +02 +00 +00 +00 +06 +00 +05 +16 +01 +00 +02 +00 +00 +00 +06 +00 +09 +16 +01 +00 +02 +00 +00 +00 +06 +00 +0d +16 +01 +00 +02 +00 +00 +00 +06 +00 +11 +16 +01 +00 +02 +00 +00 +00 +06 +00 +15 +16 +01 +00 +02 +00 +00 +00 +06 +00 +19 +16 +01 +00 +02 +00 +00 +00 +06 +00 +1d +16 +01 +00 +02 +00 +00 +00 +06 +00 +21 +16 +01 +00 +02 +00 +00 +00 +06 +00 +25 +16 +01 +00 +02 +00 +00 +00 +06 +00 +29 +16 +01 +00 +02 +00 +00 +00 +06 +00 +2d +16 +01 +00 +02 +00 +00 +00 +06 +00 +31 +16 +01 +00 +02 +00 +00 +00 +06 +00 +35 +16 +01 +00 +02 +00 +00 +00 +06 +00 +39 +16 +01 +00 +02 +00 +00 +00 +06 +00 +3d +16 +01 +00 +02 +00 +00 +00 +06 +00 +41 +16 +01 +00 +02 +00 +00 +00 +06 +00 +45 +16 +01 +00 +02 +00 +00 +00 +06 +00 +49 +16 +01 +00 +02 +00 +00 +00 +06 +00 +4d +16 +01 +00 +02 +00 +00 +00 +06 +00 +51 +16 +01 +00 +02 +00 +00 +00 +06 +00 +55 +16 +01 +00 +02 +00 +00 +00 +06 +00 +59 +16 +01 +00 +02 +00 +00 +00 +06 +00 +5d +16 +01 +00 +02 +00 +00 +00 +06 +00 +61 +16 +01 +00 +02 +00 +00 +00 +06 +00 +65 +16 +01 +00 +02 +00 +00 +00 +06 +00 +69 +16 +01 +00 +02 +00 +00 +00 +06 +00 +6d +16 +01 +00 +02 +00 +00 +00 +06 +00 +71 +16 +01 +00 +02 +00 +00 +00 +06 +00 +75 +16 +01 +00 +02 +00 +00 +00 +06 +00 +79 +16 +01 +00 +02 +00 +00 +00 +06 +00 +7d +16 +01 +00 +02 +00 +00 +00 +06 +00 +81 +16 +01 +00 +02 +00 +00 +00 +06 +00 +85 +16 +01 +00 +02 +00 +00 +00 +06 +00 +89 +16 +01 +00 +02 +00 +00 +00 +06 +00 +8d +16 +01 +00 +02 +00 +00 +00 +06 +00 +91 +16 +01 +00 +02 +00 +00 +00 +06 +00 +95 +16 +01 +00 +02 +00 +00 +00 +06 +00 +99 +16 +01 +00 +02 +00 +00 +00 +06 +00 +9d +16 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +16 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +16 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +16 +01 +00 +02 +00 +00 +00 +06 +00 +ad +16 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +16 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +16 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +16 +01 +00 +02 +00 +00 +00 +06 +00 +bd +16 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +16 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +16 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +16 +01 +00 +02 +00 +00 +00 +06 +00 +cd +16 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +16 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +16 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +16 +01 +00 +02 +00 +00 +00 +06 +00 +dd +16 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +16 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +16 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +16 +01 +00 +02 +00 +00 +00 +06 +00 +ed +16 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +16 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +16 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +16 +01 +00 +02 +00 +00 +00 +06 +00 +fd +16 +01 +00 +02 +00 +00 +00 +06 +00 +01 +17 +01 +00 +02 +00 +00 +00 +06 +00 +05 +17 +01 +00 +02 +00 +00 +00 +06 +00 +09 +17 +01 +00 +02 +00 +00 +00 +06 +00 +0d +17 +01 +00 +02 +00 +00 +00 +06 +00 +11 +17 +01 +00 +02 +00 +00 +00 +06 +00 +15 +17 +01 +00 +02 +00 +00 +00 +06 +00 +19 +17 +01 +00 +02 +00 +00 +00 +06 +00 +1d +17 +01 +00 +02 +00 +00 +00 +06 +00 +21 +17 +01 +00 +02 +00 +00 +00 +06 +00 +25 +17 +01 +00 +02 +00 +00 +00 +06 +00 +29 +17 +01 +00 +02 +00 +00 +00 +06 +00 +2d +17 +01 +00 +02 +00 +00 +00 +06 +00 +31 +17 +01 +00 +02 +00 +00 +00 +06 +00 +35 +17 +01 +00 +02 +00 +00 +00 +06 +00 +39 +17 +01 +00 +02 +00 +00 +00 +06 +00 +3d +17 +01 +00 +02 +00 +00 +00 +06 +00 +41 +17 +01 +00 +02 +00 +00 +00 +06 +00 +45 +17 +01 +00 +02 +00 +00 +00 +06 +00 +49 +17 +01 +00 +02 +00 +00 +00 +06 +00 +4d +17 +01 +00 +02 +00 +00 +00 +06 +00 +51 +17 +01 +00 +02 +00 +00 +00 +06 +00 +55 +17 +01 +00 +02 +00 +00 +00 +06 +00 +59 +17 +01 +00 +02 +00 +00 +00 +06 +00 +5d +17 +01 +00 +02 +00 +00 +00 +06 +00 +61 +17 +01 +00 +02 +00 +00 +00 +06 +00 +65 +17 +01 +00 +02 +00 +00 +00 +06 +00 +69 +17 +01 +00 +02 +00 +00 +00 +06 +00 +6d +17 +01 +00 +02 +00 +00 +00 +06 +00 +71 +17 +01 +00 +02 +00 +00 +00 +06 +00 +75 +17 +01 +00 +02 +00 +00 +00 +06 +00 +79 +17 +01 +00 +02 +00 +00 +00 +06 +00 +7d +17 +01 +00 +02 +00 +00 +00 +06 +00 +81 +17 +01 +00 +02 +00 +00 +00 +06 +00 +85 +17 +01 +00 +02 +00 +00 +00 +06 +00 +89 +17 +01 +00 +02 +00 +00 +00 +06 +00 +8d +17 +01 +00 +02 +00 +00 +00 +06 +00 +91 +17 +01 +00 +02 +00 +00 +00 +06 +00 +95 +17 +01 +00 +02 +00 +00 +00 +06 +00 +99 +17 +01 +00 +02 +00 +00 +00 +06 +00 +9d +17 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +17 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +17 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +17 +01 +00 +02 +00 +00 +00 +06 +00 +ad +17 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +17 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +17 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +17 +01 +00 +02 +00 +00 +00 +06 +00 +bd +17 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +17 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +17 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +17 +01 +00 +02 +00 +00 +00 +06 +00 +cd +17 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +17 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +17 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +17 +01 +00 +02 +00 +00 +00 +06 +00 +dd +17 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +17 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +17 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +17 +01 +00 +02 +00 +00 +00 +06 +00 +ed +17 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +17 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +17 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +17 +01 +00 +02 +00 +00 +00 +06 +00 +fd +17 +01 +00 +02 +00 +00 +00 +06 +00 +01 +18 +01 +00 +02 +00 +00 +00 +06 +00 +05 +18 +01 +00 +02 +00 +00 +00 +06 +00 +09 +18 +01 +00 +02 +00 +00 +00 +06 +00 +0d +18 +01 +00 +02 +00 +00 +00 +06 +00 +11 +18 +01 +00 +02 +00 +00 +00 +06 +00 +15 +18 +01 +00 +02 +00 +00 +00 +06 +00 +19 +18 +01 +00 +02 +00 +00 +00 +06 +00 +1d +18 +01 +00 +02 +00 +00 +00 +06 +00 +21 +18 +01 +00 +02 +00 +00 +00 +06 +00 +25 +18 +01 +00 +02 +00 +00 +00 +06 +00 +29 +18 +01 +00 +02 +00 +00 +00 +06 +00 +2d +18 +01 +00 +02 +00 +00 +00 +06 +00 +31 +18 +01 +00 +02 +00 +00 +00 +06 +00 +35 +18 +01 +00 +02 +00 +00 +00 +06 +00 +39 +18 +01 +00 +02 +00 +00 +00 +06 +00 +3d +18 +01 +00 +02 +00 +00 +00 +06 +00 +41 +18 +01 +00 +02 +00 +00 +00 +06 +00 +45 +18 +01 +00 +02 +00 +00 +00 +06 +00 +49 +18 +01 +00 +02 +00 +00 +00 +06 +00 +4d +18 +01 +00 +02 +00 +00 +00 +06 +00 +51 +18 +01 +00 +02 +00 +00 +00 +06 +00 +55 +18 +01 +00 +02 +00 +00 +00 +06 +00 +59 +18 +01 +00 +02 +00 +00 +00 +06 +00 +5d +18 +01 +00 +02 +00 +00 +00 +06 +00 +61 +18 +01 +00 +02 +00 +00 +00 +06 +00 +65 +18 +01 +00 +02 +00 +00 +00 +06 +00 +69 +18 +01 +00 +02 +00 +00 +00 +06 +00 +6d +18 +01 +00 +02 +00 +00 +00 +06 +00 +71 +18 +01 +00 +02 +00 +00 +00 +06 +00 +75 +18 +01 +00 +02 +00 +00 +00 +06 +00 +79 +18 +01 +00 +02 +00 +00 +00 +06 +00 +7d +18 +01 +00 +02 +00 +00 +00 +06 +00 +81 +18 +01 +00 +02 +00 +00 +00 +06 +00 +85 +18 +01 +00 +02 +00 +00 +00 +06 +00 +89 +18 +01 +00 +02 +00 +00 +00 +06 +00 +8d +18 +01 +00 +02 +00 +00 +00 +06 +00 +91 +18 +01 +00 +02 +00 +00 +00 +06 +00 +95 +18 +01 +00 +02 +00 +00 +00 +06 +00 +99 +18 +01 +00 +02 +00 +00 +00 +06 +00 +9d +18 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +18 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +18 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +18 +01 +00 +02 +00 +00 +00 +06 +00 +ad +18 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +18 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +18 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +18 +01 +00 +02 +00 +00 +00 +06 +00 +bd +18 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +18 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +18 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +18 +01 +00 +02 +00 +00 +00 +06 +00 +cd +18 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +18 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +18 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +18 +01 +00 +02 +00 +00 +00 +06 +00 +dd +18 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +18 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +18 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +18 +01 +00 +02 +00 +00 +00 +06 +00 +ed +18 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +18 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +18 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +18 +01 +00 +02 +00 +00 +00 +06 +00 +fd +18 +01 +00 +02 +00 +00 +00 +06 +00 +01 +19 +01 +00 +02 +00 +00 +00 +06 +00 +05 +19 +01 +00 +02 +00 +00 +00 +06 +00 +09 +19 +01 +00 +02 +00 +00 +00 +06 +00 +0d +19 +01 +00 +02 +00 +00 +00 +06 +00 +11 +19 +01 +00 +02 +00 +00 +00 +06 +00 +15 +19 +01 +00 +02 +00 +00 +00 +06 +00 +19 +19 +01 +00 +02 +00 +00 +00 +06 +00 +1d +19 +01 +00 +02 +00 +00 +00 +06 +00 +21 +19 +01 +00 +02 +00 +00 +00 +06 +00 +25 +19 +01 +00 +02 +00 +00 +00 +06 +00 +29 +19 +01 +00 +02 +00 +00 +00 +06 +00 +2d +19 +01 +00 +02 +00 +00 +00 +06 +00 +31 +19 +01 +00 +02 +00 +00 +00 +06 +00 +35 +19 +01 +00 +02 +00 +00 +00 +06 +00 +39 +19 +01 +00 +02 +00 +00 +00 +06 +00 +3d +19 +01 +00 +02 +00 +00 +00 +06 +00 +41 +19 +01 +00 +02 +00 +00 +00 +06 +00 +45 +19 +01 +00 +02 +00 +00 +00 +06 +00 +49 +19 +01 +00 +02 +00 +00 +00 +06 +00 +4d +19 +01 +00 +02 +00 +00 +00 +06 +00 +51 +19 +01 +00 +02 +00 +00 +00 +06 +00 +55 +19 +01 +00 +02 +00 +00 +00 +06 +00 +59 +19 +01 +00 +02 +00 +00 +00 +06 +00 +5d +19 +01 +00 +02 +00 +00 +00 +06 +00 +61 +19 +01 +00 +02 +00 +00 +00 +06 +00 +65 +19 +01 +00 +02 +00 +00 +00 +06 +00 +69 +19 +01 +00 +02 +00 +00 +00 +06 +00 +6d +19 +01 +00 +02 +00 +00 +00 +06 +00 +71 +19 +01 +00 +02 +00 +00 +00 +06 +00 +75 +19 +01 +00 +02 +00 +00 +00 +06 +00 +79 +19 +01 +00 +02 +00 +00 +00 +06 +00 +7d +19 +01 +00 +02 +00 +00 +00 +06 +00 +81 +19 +01 +00 +02 +00 +00 +00 +06 +00 +85 +19 +01 +00 +02 +00 +00 +00 +06 +00 +89 +19 +01 +00 +02 +00 +00 +00 +06 +00 +8d +19 +01 +00 +02 +00 +00 +00 +06 +00 +91 +19 +01 +00 +02 +00 +00 +00 +06 +00 +95 +19 +01 +00 +02 +00 +00 +00 +06 +00 +99 +19 +01 +00 +02 +00 +00 +00 +06 +00 +9d +19 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +19 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +19 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +19 +01 +00 +02 +00 +00 +00 +06 +00 +ad +19 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +19 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +19 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +19 +01 +00 +02 +00 +00 +00 +06 +00 +bd +19 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +19 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +19 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +19 +01 +00 +02 +00 +00 +00 +06 +00 +cd +19 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +19 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +19 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +19 +01 +00 +02 +00 +00 +00 +06 +00 +dd +19 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +19 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +19 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +19 +01 +00 +02 +00 +00 +00 +06 +00 +ed +19 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +19 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +19 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +19 +01 +00 +02 +00 +00 +00 +06 +00 +fd +19 +01 +00 +02 +00 +00 +00 +06 +00 +01 +1a +01 +00 +02 +00 +00 +00 +06 +00 +05 +1a +01 +00 +02 +00 +00 +00 +06 +00 +09 +1a +01 +00 +02 +00 +00 +00 +06 +00 +0d +1a +01 +00 +02 +00 +00 +00 +06 +00 +11 +1a +01 +00 +02 +00 +00 +00 +06 +00 +15 +1a +01 +00 +02 +00 +00 +00 +06 +00 +19 +1a +01 +00 +02 +00 +00 +00 +06 +00 +1d +1a +01 +00 +02 +00 +00 +00 +06 +00 +21 +1a +01 +00 +02 +00 +00 +00 +06 +00 +25 +1a +01 +00 +02 +00 +00 +00 +06 +00 +29 +1a +01 +00 +02 +00 +00 +00 +06 +00 +2d +1a +01 +00 +02 +00 +00 +00 +06 +00 +31 +1a +01 +00 +02 +00 +00 +00 +06 +00 +35 +1a +01 +00 +02 +00 +00 +00 +06 +00 +39 +1a +01 +00 +02 +00 +00 +00 +06 +00 +3d +1a +01 +00 +02 +00 +00 +00 +06 +00 +41 +1a +01 +00 +02 +00 +00 +00 +06 +00 +45 +1a +01 +00 +02 +00 +00 +00 +06 +00 +49 +1a +01 +00 +02 +00 +00 +00 +06 +00 +4d +1a +01 +00 +02 +00 +00 +00 +06 +00 +51 +1a +01 +00 +02 +00 +00 +00 +06 +00 +55 +1a +01 +00 +02 +00 +00 +00 +06 +00 +59 +1a +01 +00 +02 +00 +00 +00 +06 +00 +5d +1a +01 +00 +02 +00 +00 +00 +06 +00 +61 +1a +01 +00 +02 +00 +00 +00 +06 +00 +65 +1a +01 +00 +02 +00 +00 +00 +06 +00 +69 +1a +01 +00 +02 +00 +00 +00 +06 +00 +6d +1a +01 +00 +02 +00 +00 +00 +06 +00 +71 +1a +01 +00 +02 +00 +00 +00 +06 +00 +75 +1a +01 +00 +02 +00 +00 +00 +06 +00 +79 +1a +01 +00 +02 +00 +00 +00 +06 +00 +7d +1a +01 +00 +02 +00 +00 +00 +06 +00 +81 +1a +01 +00 +02 +00 +00 +00 +06 +00 +85 +1a +01 +00 +02 +00 +00 +00 +06 +00 +89 +1a +01 +00 +02 +00 +00 +00 +06 +00 +8d +1a +01 +00 +02 +00 +00 +00 +06 +00 +91 +1a +01 +00 +02 +00 +00 +00 +06 +00 +95 +1a +01 +00 +02 +00 +00 +00 +06 +00 +99 +1a +01 +00 +02 +00 +00 +00 +06 +00 +9d +1a +01 +00 +02 +00 +00 +00 +06 +00 +a1 +1a +01 +00 +02 +00 +00 +00 +06 +00 +a5 +1a +01 +00 +02 +00 +00 +00 +06 +00 +a9 +1a +01 +00 +02 +00 +00 +00 +06 +00 +ad +1a +01 +00 +02 +00 +00 +00 +06 +00 +b1 +1a +01 +00 +02 +00 +00 +00 +06 +00 +b5 +1a +01 +00 +02 +00 +00 +00 +06 +00 +b9 +1a +01 +00 +02 +00 +00 +00 +06 +00 +bd +1a +01 +00 +02 +00 +00 +00 +06 +00 +c1 +1a +01 +00 +02 +00 +00 +00 +06 +00 +c5 +1a +01 +00 +02 +00 +00 +00 +06 +00 +c9 +1a +01 +00 +02 +00 +00 +00 +06 +00 +cd +1a +01 +00 +02 +00 +00 +00 +06 +00 +d1 +1a +01 +00 +02 +00 +00 +00 +06 +00 +d5 +1a +01 +00 +02 +00 +00 +00 +06 +00 +d9 +1a +01 +00 +02 +00 +00 +00 +06 +00 +dd +1a +01 +00 +02 +00 +00 +00 +06 +00 +e1 +1a +01 +00 +02 +00 +00 +00 +06 +00 +e5 +1a +01 +00 +02 +00 +00 +00 +06 +00 +e9 +1a +01 +00 +02 +00 +00 +00 +06 +00 +ed +1a +01 +00 +02 +00 +00 +00 +06 +00 +f1 +1a +01 +00 +02 +00 +00 +00 +06 +00 +f5 +1a +01 +00 +02 +00 +00 +00 +06 +00 +f9 +1a +01 +00 +02 +00 +00 +00 +06 +00 +fd +1a +01 +00 +02 +00 +00 +00 +06 +00 +01 +1b +01 +00 +02 +00 +00 +00 +06 +00 +05 +1b +01 +00 +02 +00 +00 +00 +06 +00 +09 +1b +01 +00 +02 +00 +00 +00 +06 +00 +0d +1b +01 +00 +02 +00 +00 +00 +06 +00 +11 +1b +01 +00 +02 +00 +00 +00 +06 +00 +15 +1b +01 +00 +02 +00 +00 +00 +06 +00 +19 +1b +01 +00 +02 +00 +00 +00 +06 +00 +1d +1b +01 +00 +02 +00 +00 +00 +06 +00 +21 +1b +01 +00 +02 +00 +00 +00 +06 +00 +25 +1b +01 +00 +02 +00 +00 +00 +06 +00 +29 +1b +01 +00 +02 +00 +00 +00 +06 +00 +2d +1b +01 +00 +02 +00 +00 +00 +06 +00 +31 +1b +01 +00 +02 +00 +00 +00 +06 +00 +35 +1b +01 +00 +02 +00 +00 +00 +06 +00 +39 +1b +01 +00 +02 +00 +00 +00 +06 +00 +3d +1b +01 +00 +02 +00 +00 +00 +06 +00 +41 +1b +01 +00 +02 +00 +00 +00 +06 +00 +45 +1b +01 +00 +02 +00 +00 +00 +06 +00 +49 +1b +01 +00 +02 +00 +00 +00 +06 +00 +4d +1b +01 +00 +02 +00 +00 +00 +06 +00 +51 +1b +01 +00 +02 +00 +00 +00 +06 +00 +55 +1b +01 +00 +02 +00 +00 +00 +06 +00 +59 +1b +01 +00 +02 +00 +00 +00 +06 +00 +5d +1b +01 +00 +02 +00 +00 +00 +06 +00 +61 +1b +01 +00 +02 +00 +00 +00 +06 +00 +65 +1b +01 +00 +02 +00 +00 +00 +06 +00 +69 +1b +01 +00 +02 +00 +00 +00 +06 +00 +6d +1b +01 +00 +02 +00 +00 +00 +06 +00 +71 +1b +01 +00 +02 +00 +00 +00 +06 +00 +75 +1b +01 +00 +02 +00 +00 +00 +06 +00 +79 +1b +01 +00 +02 +00 +00 +00 +06 +00 +7d +1b +01 +00 +02 +00 +00 +00 +06 +00 +81 +1b +01 +00 +02 +00 +00 +00 +06 +00 +85 +1b +01 +00 +02 +00 +00 +00 +06 +00 +89 +1b +01 +00 +02 +00 +00 +00 +06 +00 +8d +1b +01 +00 +02 +00 +00 +00 +06 +00 +91 +1b +01 +00 +02 +00 +00 +00 +06 +00 +95 +1b +01 +00 +02 +00 +00 +00 +06 +00 +99 +1b +01 +00 +02 +00 +00 +00 +06 +00 +9d +1b +01 +00 +02 +00 +00 +00 +06 +00 +a1 +1b +01 +00 +02 +00 +00 +00 +06 +00 +a5 +1b +01 +00 +02 +00 +00 +00 +06 +00 +a9 +1b +01 +00 +02 +00 +00 +00 +06 +00 +ad +1b +01 +00 +02 +00 +00 +00 +06 +00 +b1 +1b +01 +00 +02 +00 +00 +00 +06 +00 +b5 +1b +01 +00 +02 +00 +00 +00 +06 +00 +b9 +1b +01 +00 +02 +00 +00 +00 +06 +00 +bd +1b +01 +00 +02 +00 +00 +00 +06 +00 +c1 +1b +01 +00 +02 +00 +00 +00 +06 +00 +c5 +1b +01 +00 +02 +00 +00 +00 +06 +00 +c9 +1b +01 +00 +02 +00 +00 +00 +06 +00 +cd +1b +01 +00 +02 +00 +00 +00 +06 +00 +d1 +1b +01 +00 +02 +00 +00 +00 +06 +00 +d5 +1b +01 +00 +02 +00 +00 +00 +06 +00 +d9 +1b +01 +00 +02 +00 +00 +00 +06 +00 +dd +1b +01 +00 +02 +00 +00 +00 +06 +00 +e1 +1b +01 +00 +02 +00 +00 +00 +06 +00 +e5 +1b +01 +00 +02 +00 +00 +00 +06 +00 +e9 +1b +01 +00 +02 +00 +00 +00 +06 +00 +ed +1b +01 +00 +02 +00 +00 +00 +06 +00 +f1 +1b +01 +00 +02 +00 +00 +00 +06 +00 +f5 +1b +01 +00 +02 +00 +00 +00 +06 +00 +f9 +1b +01 +00 +02 +00 +00 +00 +06 +00 +fd +1b +01 +00 +02 +00 +00 +00 +06 +00 +01 +1c +01 +00 +02 +00 +00 +00 +06 +00 +05 +1c +01 +00 +02 +00 +00 +00 +06 +00 +09 +1c +01 +00 +02 +00 +00 +00 +06 +00 +0d +1c +01 +00 +02 +00 +00 +00 +06 +00 +11 +1c +01 +00 +02 +00 +00 +00 +06 +00 +15 +1c +01 +00 +02 +00 +00 +00 +06 +00 +19 +1c +01 +00 +02 +00 +00 +00 +06 +00 +1d +1c +01 +00 +02 +00 +00 +00 +06 +00 +21 +1c +01 +00 +02 +00 +00 +00 +06 +00 +25 +1c +01 +00 +02 +00 +00 +00 +06 +00 +29 +1c +01 +00 +02 +00 +00 +00 +06 +00 +2d +1c +01 +00 +02 +00 +00 +00 +06 +00 +31 +1c +01 +00 +02 +00 +00 +00 +06 +00 +35 +1c +01 +00 +02 +00 +00 +00 +06 +00 +39 +1c +01 +00 +02 +00 +00 +00 +06 +00 +3d +1c +01 +00 +02 +00 +00 +00 +06 +00 +41 +1c +01 +00 +02 +00 +00 +00 +06 +00 +45 +1c +01 +00 +02 +00 +00 +00 +06 +00 +49 +1c +01 +00 +02 +00 +00 +00 +06 +00 +4d +1c +01 +00 +02 +00 +00 +00 +06 +00 +51 +1c +01 +00 +02 +00 +00 +00 +06 +00 +55 +1c +01 +00 +02 +00 +00 +00 +06 +00 +59 +1c +01 +00 +02 +00 +00 +00 +06 +00 +5d +1c +01 +00 +02 +00 +00 +00 +06 +00 +61 +1c +01 +00 +02 +00 +00 +00 +06 +00 +65 +1c +01 +00 +02 +00 +00 +00 +06 +00 +69 +1c +01 +00 +02 +00 +00 +00 +06 +00 +6d +1c +01 +00 +02 +00 +00 +00 +06 +00 +71 +1c +01 +00 +02 +00 +00 +00 +06 +00 +75 +1c +01 +00 +02 +00 +00 +00 +06 +00 +79 +1c +01 +00 +02 +00 +00 +00 +06 +00 +7d +1c +01 +00 +02 +00 +00 +00 +06 +00 +81 +1c +01 +00 +02 +00 +00 +00 +06 +00 +85 +1c +01 +00 +02 +00 +00 +00 +06 +00 +89 +1c +01 +00 +02 +00 +00 +00 +06 +00 +8d +1c +01 +00 +02 +00 +00 +00 +06 +00 +91 +1c +01 +00 +02 +00 +00 +00 +06 +00 +95 +1c +01 +00 +02 +00 +00 +00 +06 +00 +99 +1c +01 +00 +02 +00 +00 +00 +06 +00 +9d +1c +01 +00 +02 +00 +00 +00 +06 +00 +a1 +1c +01 +00 +02 +00 +00 +00 +06 +00 +a5 +1c +01 +00 +02 +00 +00 +00 +06 +00 +a9 +1c +01 +00 +02 +00 +00 +00 +06 +00 +ad +1c +01 +00 +02 +00 +00 +00 +06 +00 +b1 +1c +01 +00 +02 +00 +00 +00 +06 +00 +b5 +1c +01 +00 +02 +00 +00 +00 +06 +00 +b9 +1c +01 +00 +02 +00 +00 +00 +06 +00 +bd +1c +01 +00 +02 +00 +00 +00 +06 +00 +c1 +1c +01 +00 +02 +00 +00 +00 +06 +00 +c5 +1c +01 +00 +02 +00 +00 +00 +06 +00 +c9 +1c +01 +00 +02 +00 +00 +00 +06 +00 +cd +1c +01 +00 +02 +00 +00 +00 +06 +00 +d1 +1c +01 +00 +02 +00 +00 +00 +06 +00 +d5 +1c +01 +00 +02 +00 +00 +00 +06 +00 +d9 +1c +01 +00 +02 +00 +00 +00 +06 +00 +dd +1c +01 +00 +02 +00 +00 +00 +06 +00 +e1 +1c +01 +00 +02 +00 +00 +00 +06 +00 +e5 +1c +01 +00 +02 +00 +00 +00 +06 +00 +e9 +1c +01 +00 +02 +00 +00 +00 +06 +00 +ed +1c +01 +00 +02 +00 +00 +00 +06 +00 +f1 +1c +01 +00 +02 +00 +00 +00 +06 +00 +f5 +1c +01 +00 +02 +00 +00 +00 +06 +00 +f9 +1c +01 +00 +02 +00 +00 +00 +06 +00 +fd +1c +01 +00 +02 +00 +00 +00 +06 +00 +01 +1d +01 +00 +02 +00 +00 +00 +06 +00 +05 +1d +01 +00 +02 +00 +00 +00 +06 +00 +09 +1d +01 +00 +02 +00 +00 +00 +06 +00 +0d +1d +01 +00 +02 +00 +00 +00 +06 +00 +11 +1d +01 +00 +02 +00 +00 +00 +06 +00 +15 +1d +01 +00 +02 +00 +00 +00 +06 +00 +19 +1d +01 +00 +02 +00 +00 +00 +06 +00 +1d +1d +01 +00 +02 +00 +00 +00 +06 +00 +21 +1d +01 +00 +02 +00 +00 +00 +06 +00 +25 +1d +01 +00 +02 +00 +00 +00 +06 +00 +29 +1d +01 +00 +02 +00 +00 +00 +06 +00 +2d +1d +01 +00 +02 +00 +00 +00 +06 +00 +31 +1d +01 +00 +02 +00 +00 +00 +06 +00 +35 +1d +01 +00 +02 +00 +00 +00 +06 +00 +39 +1d +01 +00 +02 +00 +00 +00 +06 +00 +3d +1d +01 +00 +02 +00 +00 +00 +06 +00 +41 +1d +01 +00 +02 +00 +00 +00 +06 +00 +45 +1d +01 +00 +02 +00 +00 +00 +06 +00 +49 +1d +01 +00 +02 +00 +00 +00 +06 +00 +4d +1d +01 +00 +02 +00 +00 +00 +06 +00 +51 +1d +01 +00 +02 +00 +00 +00 +06 +00 +55 +1d +01 +00 +02 +00 +00 +00 +06 +00 +59 +1d +01 +00 +02 +00 +00 +00 +06 +00 +5d +1d +01 +00 +02 +00 +00 +00 +06 +00 +61 +1d +01 +00 +02 +00 +00 +00 +06 +00 +65 +1d +01 +00 +02 +00 +00 +00 +06 +00 +69 +1d +01 +00 +02 +00 +00 +00 +06 +00 +6d +1d +01 +00 +02 +00 +00 +00 +06 +00 +71 +1d +01 +00 +02 +00 +00 +00 +06 +00 +75 +1d +01 +00 +02 +00 +00 +00 +06 +00 +79 +1d +01 +00 +02 +00 +00 +00 +06 +00 +7d +1d +01 +00 +02 +00 +00 +00 +06 +00 +81 +1d +01 +00 +02 +00 +00 +00 +06 +00 +85 +1d +01 +00 +02 +00 +00 +00 +06 +00 +89 +1d +01 +00 +02 +00 +00 +00 +06 +00 +8d +1d +01 +00 +02 +00 +00 +00 +06 +00 +91 +1d +01 +00 +02 +00 +00 +00 +06 +00 +95 +1d +01 +00 +02 +00 +00 +00 +06 +00 +99 +1d +01 +00 +02 +00 +00 +00 +06 +00 +9d +1d +01 +00 +02 +00 +00 +00 +06 +00 +a1 +1d +01 +00 +02 +00 +00 +00 +06 +00 +a5 +1d +01 +00 +02 +00 +00 +00 +06 +00 +a9 +1d +01 +00 +02 +00 +00 +00 +06 +00 +ad +1d +01 +00 +02 +00 +00 +00 +06 +00 +b1 +1d +01 +00 +02 +00 +00 +00 +06 +00 +b5 +1d +01 +00 +02 +00 +00 +00 +06 +00 +b9 +1d +01 +00 +02 +00 +00 +00 +06 +00 +bd +1d +01 +00 +02 +00 +00 +00 +06 +00 +c1 +1d +01 +00 +02 +00 +00 +00 +06 +00 +c5 +1d +01 +00 +02 +00 +00 +00 +06 +00 +c9 +1d +01 +00 +02 +00 +00 +00 +06 +00 +cd +1d +01 +00 +02 +00 +00 +00 +06 +00 +d1 +1d +01 +00 +02 +00 +00 +00 +06 +00 +d5 +1d +01 +00 +02 +00 +00 +00 +06 +00 +d9 +1d +01 +00 +02 +00 +00 +00 +06 +00 +dd +1d +01 +00 +02 +00 +00 +00 +06 +00 +e1 +1d +01 +00 +02 +00 +00 +00 +06 +00 +e5 +1d +01 +00 +02 +00 +00 +00 +06 +00 +e9 +1d +01 +00 +02 +00 +00 +00 +06 +00 +ed +1d +01 +00 +02 +00 +00 +00 +06 +00 +f1 +1d +01 +00 +02 +00 +00 +00 +06 +00 +f5 +1d +01 +00 +02 +00 +00 +00 +06 +00 +f9 +1d +01 +00 +02 +00 +00 +00 +06 +00 +fd +1d +01 +00 +02 +00 +00 +00 +06 +00 +01 +1e +01 +00 +02 +00 +00 +00 +06 +00 +05 +1e +01 +00 +02 +00 +00 +00 +06 +00 +09 +1e +01 +00 +02 +00 +00 +00 +06 +00 +0d +1e +01 +00 +02 +00 +00 +00 +06 +00 +11 +1e +01 +00 +02 +00 +00 +00 +06 +00 +15 +1e +01 +00 +02 +00 +00 +00 +06 +00 +19 +1e +01 +00 +02 +00 +00 +00 +06 +00 +1d +1e +01 +00 +02 +00 +00 +00 +06 +00 +21 +1e +01 +00 +02 +00 +00 +00 +06 +00 +25 +1e +01 +00 +02 +00 +00 +00 +06 +00 +29 +1e +01 +00 +02 +00 +00 +00 +06 +00 +2d +1e +01 +00 +02 +00 +00 +00 +06 +00 +31 +1e +01 +00 +02 +00 +00 +00 +06 +00 +35 +1e +01 +00 +02 +00 +00 +00 +06 +00 +39 +1e +01 +00 +02 +00 +00 +00 +06 +00 +3d +1e +01 +00 +02 +00 +00 +00 +06 +00 +41 +1e +01 +00 +02 +00 +00 +00 +06 +00 +45 +1e +01 +00 +02 +00 +00 +00 +06 +00 +49 +1e +01 +00 +02 +00 +00 +00 +06 +00 +4d +1e +01 +00 +02 +00 +00 +00 +06 +00 +51 +1e +01 +00 +02 +00 +00 +00 +06 +00 +55 +1e +01 +00 +02 +00 +00 +00 +06 +00 +59 +1e +01 +00 +02 +00 +00 +00 +06 +00 +5d +1e +01 +00 +02 +00 +00 +00 +06 +00 +61 +1e +01 +00 +02 +00 +00 +00 +06 +00 +65 +1e +01 +00 +02 +00 +00 +00 +06 +00 +69 +1e +01 +00 +02 +00 +00 +00 +06 +00 +6d +1e +01 +00 +02 +00 +00 +00 +06 +00 +71 +1e +01 +00 +02 +00 +00 +00 +06 +00 +75 +1e +01 +00 +02 +00 +00 +00 +06 +00 +79 +1e +01 +00 +02 +00 +00 +00 +06 +00 +7d +1e +01 +00 +02 +00 +00 +00 +06 +00 +81 +1e +01 +00 +02 +00 +00 +00 +06 +00 +85 +1e +01 +00 +02 +00 +00 +00 +06 +00 +89 +1e +01 +00 +02 +00 +00 +00 +06 +00 +8d +1e +01 +00 +02 +00 +00 +00 +06 +00 +91 +1e +01 +00 +02 +00 +00 +00 +06 +00 +95 +1e +01 +00 +02 +00 +00 +00 +06 +00 +99 +1e +01 +00 +02 +00 +00 +00 +06 +00 +9d +1e +01 +00 +02 +00 +00 +00 +06 +00 +a1 +1e +01 +00 +02 +00 +00 +00 +06 +00 +a5 +1e +01 +00 +02 +00 +00 +00 +06 +00 +a9 +1e +01 +00 +02 +00 +00 +00 +06 +00 +ad +1e +01 +00 +02 +00 +00 +00 +06 +00 +b1 +1e +01 +00 +02 +00 +00 +00 +06 +00 +b5 +1e +01 +00 +02 +00 +00 +00 +06 +00 +b9 +1e +01 +00 +02 +00 +00 +00 +06 +00 +bd +1e +01 +00 +02 +00 +00 +00 +06 +00 +c1 +1e +01 +00 +02 +00 +00 +00 +06 +00 +c5 +1e +01 +00 +02 +00 +00 +00 +06 +00 +c9 +1e +01 +00 +02 +00 +00 +00 +06 +00 +cd +1e +01 +00 +02 +00 +00 +00 +06 +00 +d1 +1e +01 +00 +02 +00 +00 +00 +06 +00 +d5 +1e +01 +00 +02 +00 +00 +00 +06 +00 +d9 +1e +01 +00 +02 +00 +00 +00 +06 +00 +dd +1e +01 +00 +02 +00 +00 +00 +06 +00 +e1 +1e +01 +00 +02 +00 +00 +00 +06 +00 +e5 +1e +01 +00 +02 +00 +00 +00 +06 +00 +e9 +1e +01 +00 +02 +00 +00 +00 +06 +00 +ed +1e +01 +00 +02 +00 +00 +00 +06 +00 +f1 +1e +01 +00 +02 +00 +00 +00 +06 +00 +f5 +1e +01 +00 +02 +00 +00 +00 +06 +00 +f9 +1e +01 +00 +02 +00 +00 +00 +06 +00 +fd +1e +01 +00 +02 +00 +00 +00 +06 +00 +01 +1f +01 +00 +02 +00 +00 +00 +06 +00 +05 +1f +01 +00 +02 +00 +00 +00 +06 +00 +09 +1f +01 +00 +02 +00 +00 +00 +06 +00 +0d +1f +01 +00 +02 +00 +00 +00 +06 +00 +11 +1f +01 +00 +02 +00 +00 +00 +06 +00 +15 +1f +01 +00 +02 +00 +00 +00 +06 +00 +19 +1f +01 +00 +02 +00 +00 +00 +06 +00 +1d +1f +01 +00 +02 +00 +00 +00 +06 +00 +21 +1f +01 +00 +02 +00 +00 +00 +06 +00 +25 +1f +01 +00 +02 +00 +00 +00 +06 +00 +29 +1f +01 +00 +02 +00 +00 +00 +06 +00 +2d +1f +01 +00 +02 +00 +00 +00 +06 +00 +31 +1f +01 +00 +02 +00 +00 +00 +06 +00 +35 +1f +01 +00 +02 +00 +00 +00 +06 +00 +39 +1f +01 +00 +02 +00 +00 +00 +06 +00 +3d +1f +01 +00 +02 +00 +00 +00 +06 +00 +41 +1f +01 +00 +02 +00 +00 +00 +06 +00 +45 +1f +01 +00 +02 +00 +00 +00 +06 +00 +49 +1f +01 +00 +02 +00 +00 +00 +06 +00 +4d +1f +01 +00 +02 +00 +00 +00 +06 +00 +51 +1f +01 +00 +02 +00 +00 +00 +06 +00 +55 +1f +01 +00 +02 +00 +00 +00 +06 +00 +59 +1f +01 +00 +02 +00 +00 +00 +06 +00 +5d +1f +01 +00 +02 +00 +00 +00 +06 +00 +61 +1f +01 +00 +02 +00 +00 +00 +06 +00 +65 +1f +01 +00 +02 +00 +00 +00 +06 +00 +69 +1f +01 +00 +02 +00 +00 +00 +06 +00 +6d +1f +01 +00 +02 +00 +00 +00 +06 +00 +71 +1f +01 +00 +02 +00 +00 +00 +06 +00 +75 +1f +01 +00 +02 +00 +00 +00 +06 +00 +79 +1f +01 +00 +02 +00 +00 +00 +06 +00 +7d +1f +01 +00 +02 +00 +00 +00 +06 +00 +81 +1f +01 +00 +02 +00 +00 +00 +06 +00 +85 +1f +01 +00 +02 +00 +00 +00 +06 +00 +89 +1f +01 +00 +02 +00 +00 +00 +06 +00 +8d +1f +01 +00 +02 +00 +00 +00 +06 +00 +91 +1f +01 +00 +02 +00 +00 +00 +06 +00 +95 +1f +01 +00 +02 +00 +00 +00 +06 +00 +99 +1f +01 +00 +02 +00 +00 +00 +06 +00 +9d +1f +01 +00 +02 +00 +00 +00 +06 +00 +a1 +1f +01 +00 +02 +00 +00 +00 +06 +00 +a5 +1f +01 +00 +02 +00 +00 +00 +06 +00 +a9 +1f +01 +00 +02 +00 +00 +00 +06 +00 +ad +1f +01 +00 +02 +00 +00 +00 +06 +00 +b1 +1f +01 +00 +02 +00 +00 +00 +06 +00 +b5 +1f +01 +00 +02 +00 +00 +00 +06 +00 +b9 +1f +01 +00 +02 +00 +00 +00 +06 +00 +bd +1f +01 +00 +02 +00 +00 +00 +06 +00 +c1 +1f +01 +00 +02 +00 +00 +00 +06 +00 +c5 +1f +01 +00 +02 +00 +00 +00 +06 +00 +c9 +1f +01 +00 +02 +00 +00 +00 +06 +00 +cd +1f +01 +00 +02 +00 +00 +00 +06 +00 +d1 +1f +01 +00 +02 +00 +00 +00 +06 +00 +d5 +1f +01 +00 +02 +00 +00 +00 +06 +00 +d9 +1f +01 +00 +02 +00 +00 +00 +06 +00 +dd +1f +01 +00 +02 +00 +00 +00 +06 +00 +e1 +1f +01 +00 +02 +00 +00 +00 +06 +00 +e5 +1f +01 +00 +02 +00 +00 +00 +06 +00 +e9 +1f +01 +00 +02 +00 +00 +00 +06 +00 +ed +1f +01 +00 +02 +00 +00 +00 +06 +00 +f1 +1f +01 +00 +02 +00 +00 +00 +06 +00 +f5 +1f +01 +00 +02 +00 +00 +00 +06 +00 +f9 +1f +01 +00 +02 +00 +00 +00 +06 +00 +fd +1f +01 +00 +02 +00 +00 +00 +06 +00 +01 +20 +01 +00 +02 +00 +00 +00 +06 +00 +05 +20 +01 +00 +02 +00 +00 +00 +06 +00 +09 +20 +01 +00 +02 +00 +00 +00 +06 +00 +0d +20 +01 +00 +02 +00 +00 +00 +06 +00 +11 +20 +01 +00 +02 +00 +00 +00 +06 +00 +15 +20 +01 +00 +02 +00 +00 +00 +06 +00 +19 +20 +01 +00 +02 +00 +00 +00 +06 +00 +1d +20 +01 +00 +02 +00 +00 +00 +06 +00 +21 +20 +01 +00 +02 +00 +00 +00 +06 +00 +25 +20 +01 +00 +02 +00 +00 +00 +06 +00 +29 +20 +01 +00 +02 +00 +00 +00 +06 +00 +2d +20 +01 +00 +02 +00 +00 +00 +06 +00 +31 +20 +01 +00 +02 +00 +00 +00 +06 +00 +35 +20 +01 +00 +02 +00 +00 +00 +06 +00 +39 +20 +01 +00 +02 +00 +00 +00 +06 +00 +3d +20 +01 +00 +02 +00 +00 +00 +06 +00 +41 +20 +01 +00 +02 +00 +00 +00 +06 +00 +45 +20 +01 +00 +02 +00 +00 +00 +06 +00 +49 +20 +01 +00 +02 +00 +00 +00 +06 +00 +4d +20 +01 +00 +02 +00 +00 +00 +06 +00 +51 +20 +01 +00 +02 +00 +00 +00 +06 +00 +55 +20 +01 +00 +02 +00 +00 +00 +06 +00 +59 +20 +01 +00 +02 +00 +00 +00 +06 +00 +5d +20 +01 +00 +02 +00 +00 +00 +06 +00 +61 +20 +01 +00 +02 +00 +00 +00 +06 +00 +65 +20 +01 +00 +02 +00 +00 +00 +06 +00 +69 +20 +01 +00 +02 +00 +00 +00 +06 +00 +6d +20 +01 +00 +02 +00 +00 +00 +06 +00 +71 +20 +01 +00 +02 +00 +00 +00 +06 +00 +75 +20 +01 +00 +02 +00 +00 +00 +06 +00 +79 +20 +01 +00 +02 +00 +00 +00 +06 +00 +7d +20 +01 +00 +02 +00 +00 +00 +06 +00 +81 +20 +01 +00 +02 +00 +00 +00 +06 +00 +85 +20 +01 +00 +02 +00 +00 +00 +06 +00 +89 +20 +01 +00 +02 +00 +00 +00 +06 +00 +8d +20 +01 +00 +02 +00 +00 +00 +06 +00 +91 +20 +01 +00 +02 +00 +00 +00 +06 +00 +95 +20 +01 +00 +02 +00 +00 +00 +06 +00 +99 +20 +01 +00 +02 +00 +00 +00 +06 +00 +9d +20 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +20 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +20 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +20 +01 +00 +02 +00 +00 +00 +06 +00 +ad +20 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +20 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +20 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +20 +01 +00 +02 +00 +00 +00 +06 +00 +bd +20 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +20 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +20 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +20 +01 +00 +02 +00 +00 +00 +06 +00 +cd +20 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +20 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +20 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +20 +01 +00 +02 +00 +00 +00 +06 +00 +dd +20 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +20 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +20 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +20 +01 +00 +02 +00 +00 +00 +06 +00 +ed +20 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +20 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +20 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +20 +01 +00 +02 +00 +00 +00 +06 +00 +fd +20 +01 +00 +02 +00 +00 +00 +06 +00 +01 +21 +01 +00 +02 +00 +00 +00 +06 +00 +05 +21 +01 +00 +02 +00 +00 +00 +06 +00 +09 +21 +01 +00 +02 +00 +00 +00 +06 +00 +0d +21 +01 +00 +02 +00 +00 +00 +06 +00 +11 +21 +01 +00 +02 +00 +00 +00 +06 +00 +15 +21 +01 +00 +02 +00 +00 +00 +06 +00 +19 +21 +01 +00 +02 +00 +00 +00 +06 +00 +1d +21 +01 +00 +02 +00 +00 +00 +06 +00 +21 +21 +01 +00 +02 +00 +00 +00 +06 +00 +25 +21 +01 +00 +02 +00 +00 +00 +06 +00 +29 +21 +01 +00 +02 +00 +00 +00 +06 +00 +2d +21 +01 +00 +02 +00 +00 +00 +06 +00 +31 +21 +01 +00 +02 +00 +00 +00 +06 +00 +35 +21 +01 +00 +02 +00 +00 +00 +06 +00 +39 +21 +01 +00 +02 +00 +00 +00 +06 +00 +3d +21 +01 +00 +02 +00 +00 +00 +06 +00 +41 +21 +01 +00 +02 +00 +00 +00 +06 +00 +45 +21 +01 +00 +02 +00 +00 +00 +06 +00 +49 +21 +01 +00 +02 +00 +00 +00 +06 +00 +4d +21 +01 +00 +02 +00 +00 +00 +06 +00 +51 +21 +01 +00 +02 +00 +00 +00 +06 +00 +55 +21 +01 +00 +02 +00 +00 +00 +06 +00 +59 +21 +01 +00 +02 +00 +00 +00 +06 +00 +5d +21 +01 +00 +02 +00 +00 +00 +06 +00 +61 +21 +01 +00 +02 +00 +00 +00 +06 +00 +65 +21 +01 +00 +02 +00 +00 +00 +06 +00 +69 +21 +01 +00 +02 +00 +00 +00 +06 +00 +6d +21 +01 +00 +02 +00 +00 +00 +06 +00 +71 +21 +01 +00 +02 +00 +00 +00 +06 +00 +75 +21 +01 +00 +02 +00 +00 +00 +06 +00 +79 +21 +01 +00 +02 +00 +00 +00 +06 +00 +7d +21 +01 +00 +02 +00 +00 +00 +06 +00 +81 +21 +01 +00 +02 +00 +00 +00 +06 +00 +85 +21 +01 +00 +02 +00 +00 +00 +06 +00 +89 +21 +01 +00 +02 +00 +00 +00 +06 +00 +8d +21 +01 +00 +02 +00 +00 +00 +06 +00 +91 +21 +01 +00 +02 +00 +00 +00 +06 +00 +95 +21 +01 +00 +02 +00 +00 +00 +06 +00 +99 +21 +01 +00 +02 +00 +00 +00 +06 +00 +9d +21 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +21 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +21 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +21 +01 +00 +02 +00 +00 +00 +06 +00 +ad +21 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +21 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +21 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +21 +01 +00 +02 +00 +00 +00 +06 +00 +bd +21 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +21 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +21 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +21 +01 +00 +02 +00 +00 +00 +06 +00 +cd +21 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +21 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +21 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +21 +01 +00 +02 +00 +00 +00 +06 +00 +dd +21 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +21 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +21 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +21 +01 +00 +02 +00 +00 +00 +06 +00 +ed +21 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +21 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +21 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +21 +01 +00 +02 +00 +00 +00 +06 +00 +fd +21 +01 +00 +02 +00 +00 +00 +06 +00 +01 +22 +01 +00 +02 +00 +00 +00 +06 +00 +05 +22 +01 +00 +02 +00 +00 +00 +06 +00 +09 +22 +01 +00 +02 +00 +00 +00 +06 +00 +0d +22 +01 +00 +02 +00 +00 +00 +06 +00 +11 +22 +01 +00 +02 +00 +00 +00 +06 +00 +15 +22 +01 +00 +02 +00 +00 +00 +06 +00 +19 +22 +01 +00 +02 +00 +00 +00 +06 +00 +1d +22 +01 +00 +02 +00 +00 +00 +06 +00 +21 +22 +01 +00 +02 +00 +00 +00 +06 +00 +25 +22 +01 +00 +02 +00 +00 +00 +06 +00 +29 +22 +01 +00 +02 +00 +00 +00 +06 +00 +2d +22 +01 +00 +02 +00 +00 +00 +06 +00 +31 +22 +01 +00 +02 +00 +00 +00 +06 +00 +35 +22 +01 +00 +02 +00 +00 +00 +06 +00 +39 +22 +01 +00 +02 +00 +00 +00 +06 +00 +3d +22 +01 +00 +02 +00 +00 +00 +06 +00 +41 +22 +01 +00 +02 +00 +00 +00 +06 +00 +45 +22 +01 +00 +02 +00 +00 +00 +06 +00 +49 +22 +01 +00 +02 +00 +00 +00 +06 +00 +4d +22 +01 +00 +02 +00 +00 +00 +06 +00 +51 +22 +01 +00 +02 +00 +00 +00 +06 +00 +55 +22 +01 +00 +02 +00 +00 +00 +06 +00 +59 +22 +01 +00 +02 +00 +00 +00 +06 +00 +5d +22 +01 +00 +02 +00 +00 +00 +06 +00 +61 +22 +01 +00 +02 +00 +00 +00 +06 +00 +65 +22 +01 +00 +02 +00 +00 +00 +06 +00 +69 +22 +01 +00 +02 +00 +00 +00 +06 +00 +6d +22 +01 +00 +02 +00 +00 +00 +06 +00 +71 +22 +01 +00 +02 +00 +00 +00 +06 +00 +75 +22 +01 +00 +02 +00 +00 +00 +06 +00 +79 +22 +01 +00 +02 +00 +00 +00 +06 +00 +7d +22 +01 +00 +02 +00 +00 +00 +06 +00 +81 +22 +01 +00 +02 +00 +00 +00 +06 +00 +85 +22 +01 +00 +02 +00 +00 +00 +06 +00 +89 +22 +01 +00 +02 +00 +00 +00 +06 +00 +8d +22 +01 +00 +02 +00 +00 +00 +06 +00 +91 +22 +01 +00 +02 +00 +00 +00 +06 +00 +95 +22 +01 +00 +02 +00 +00 +00 +06 +00 +99 +22 +01 +00 +02 +00 +00 +00 +06 +00 +9d +22 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +22 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +22 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +22 +01 +00 +02 +00 +00 +00 +06 +00 +ad +22 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +22 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +22 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +22 +01 +00 +02 +00 +00 +00 +06 +00 +bd +22 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +22 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +22 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +22 +01 +00 +02 +00 +00 +00 +06 +00 +cd +22 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +22 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +22 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +22 +01 +00 +02 +00 +00 +00 +06 +00 +dd +22 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +22 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +22 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +22 +01 +00 +02 +00 +00 +00 +06 +00 +ed +22 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +22 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +22 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +22 +01 +00 +02 +00 +00 +00 +06 +00 +fd +22 +01 +00 +02 +00 +00 +00 +06 +00 +01 +23 +01 +00 +02 +00 +00 +00 +06 +00 +05 +23 +01 +00 +02 +00 +00 +00 +06 +00 +09 +23 +01 +00 +02 +00 +00 +00 +06 +00 +0d +23 +01 +00 +02 +00 +00 +00 +06 +00 +11 +23 +01 +00 +02 +00 +00 +00 +06 +00 +15 +23 +01 +00 +02 +00 +00 +00 +06 +00 +19 +23 +01 +00 +02 +00 +00 +00 +06 +00 +1d +23 +01 +00 +02 +00 +00 +00 +06 +00 +21 +23 +01 +00 +02 +00 +00 +00 +06 +00 +25 +23 +01 +00 +02 +00 +00 +00 +06 +00 +29 +23 +01 +00 +02 +00 +00 +00 +06 +00 +2d +23 +01 +00 +02 +00 +00 +00 +06 +00 +31 +23 +01 +00 +02 +00 +00 +00 +06 +00 +35 +23 +01 +00 +02 +00 +00 +00 +06 +00 +39 +23 +01 +00 +02 +00 +00 +00 +06 +00 +3d +23 +01 +00 +02 +00 +00 +00 +06 +00 +41 +23 +01 +00 +02 +00 +00 +00 +06 +00 +45 +23 +01 +00 +02 +00 +00 +00 +06 +00 +49 +23 +01 +00 +02 +00 +00 +00 +06 +00 +4d +23 +01 +00 +02 +00 +00 +00 +06 +00 +51 +23 +01 +00 +02 +00 +00 +00 +06 +00 +55 +23 +01 +00 +02 +00 +00 +00 +06 +00 +59 +23 +01 +00 +02 +00 +00 +00 +06 +00 +5d +23 +01 +00 +02 +00 +00 +00 +06 +00 +61 +23 +01 +00 +02 +00 +00 +00 +06 +00 +65 +23 +01 +00 +02 +00 +00 +00 +06 +00 +69 +23 +01 +00 +02 +00 +00 +00 +06 +00 +6d +23 +01 +00 +02 +00 +00 +00 +06 +00 +71 +23 +01 +00 +02 +00 +00 +00 +06 +00 +75 +23 +01 +00 +02 +00 +00 +00 +06 +00 +79 +23 +01 +00 +02 +00 +00 +00 +06 +00 +7d +23 +01 +00 +02 +00 +00 +00 +06 +00 +81 +23 +01 +00 +02 +00 +00 +00 +06 +00 +85 +23 +01 +00 +02 +00 +00 +00 +06 +00 +89 +23 +01 +00 +02 +00 +00 +00 +06 +00 +8d +23 +01 +00 +02 +00 +00 +00 +06 +00 +91 +23 +01 +00 +02 +00 +00 +00 +06 +00 +95 +23 +01 +00 +02 +00 +00 +00 +06 +00 +99 +23 +01 +00 +02 +00 +00 +00 +06 +00 +9d +23 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +23 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +23 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +23 +01 +00 +02 +00 +00 +00 +06 +00 +ad +23 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +23 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +23 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +23 +01 +00 +02 +00 +00 +00 +06 +00 +bd +23 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +23 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +23 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +23 +01 +00 +02 +00 +00 +00 +06 +00 +cd +23 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +23 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +23 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +23 +01 +00 +02 +00 +00 +00 +06 +00 +dd +23 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +23 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +23 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +23 +01 +00 +02 +00 +00 +00 +06 +00 +ed +23 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +23 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +23 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +23 +01 +00 +02 +00 +00 +00 +06 +00 +fd +23 +01 +00 +02 +00 +00 +00 +06 +00 +01 +24 +01 +00 +02 +00 +00 +00 +06 +00 +05 +24 +01 +00 +02 +00 +00 +00 +06 +00 +09 +24 +01 +00 +02 +00 +00 +00 +06 +00 +0d +24 +01 +00 +02 +00 +00 +00 +06 +00 +11 +24 +01 +00 +02 +00 +00 +00 +06 +00 +15 +24 +01 +00 +02 +00 +00 +00 +06 +00 +19 +24 +01 +00 +02 +00 +00 +00 +06 +00 +1d +24 +01 +00 +02 +00 +00 +00 +06 +00 +21 +24 +01 +00 +02 +00 +00 +00 +06 +00 +25 +24 +01 +00 +02 +00 +00 +00 +06 +00 +29 +24 +01 +00 +02 +00 +00 +00 +06 +00 +2d +24 +01 +00 +02 +00 +00 +00 +06 +00 +31 +24 +01 +00 +02 +00 +00 +00 +06 +00 +35 +24 +01 +00 +02 +00 +00 +00 +06 +00 +39 +24 +01 +00 +02 +00 +00 +00 +06 +00 +3d +24 +01 +00 +02 +00 +00 +00 +06 +00 +41 +24 +01 +00 +02 +00 +00 +00 +06 +00 +45 +24 +01 +00 +02 +00 +00 +00 +06 +00 +49 +24 +01 +00 +02 +00 +00 +00 +06 +00 +4d +24 +01 +00 +02 +00 +00 +00 +06 +00 +51 +24 +01 +00 +02 +00 +00 +00 +06 +00 +55 +24 +01 +00 +02 +00 +00 +00 +06 +00 +59 +24 +01 +00 +02 +00 +00 +00 +06 +00 +5d +24 +01 +00 +02 +00 +00 +00 +06 +00 +61 +24 +01 +00 +02 +00 +00 +00 +06 +00 +65 +24 +01 +00 +02 +00 +00 +00 +06 +00 +69 +24 +01 +00 +02 +00 +00 +00 +06 +00 +6d +24 +01 +00 +02 +00 +00 +00 +06 +00 +71 +24 +01 +00 +02 +00 +00 +00 +06 +00 +75 +24 +01 +00 +02 +00 +00 +00 +06 +00 +79 +24 +01 +00 +02 +00 +00 +00 +06 +00 +7d +24 +01 +00 +02 +00 +00 +00 +06 +00 +81 +24 +01 +00 +02 +00 +00 +00 +06 +00 +85 +24 +01 +00 +02 +00 +00 +00 +06 +00 +89 +24 +01 +00 +02 +00 +00 +00 +06 +00 +8d +24 +01 +00 +02 +00 +00 +00 +06 +00 +91 +24 +01 +00 +02 +00 +00 +00 +06 +00 +95 +24 +01 +00 +02 +00 +00 +00 +06 +00 +99 +24 +01 +00 +02 +00 +00 +00 +06 +00 +9d +24 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +24 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +24 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +24 +01 +00 +02 +00 +00 +00 +06 +00 +ad +24 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +24 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +24 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +24 +01 +00 +02 +00 +00 +00 +06 +00 +bd +24 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +24 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +24 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +24 +01 +00 +02 +00 +00 +00 +06 +00 +cd +24 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +24 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +24 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +24 +01 +00 +02 +00 +00 +00 +06 +00 +dd +24 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +24 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +24 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +24 +01 +00 +02 +00 +00 +00 +06 +00 +ed +24 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +24 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +24 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +24 +01 +00 +02 +00 +00 +00 +06 +00 +fd +24 +01 +00 +02 +00 +00 +00 +06 +00 +01 +25 +01 +00 +02 +00 +00 +00 +06 +00 +05 +25 +01 +00 +02 +00 +00 +00 +06 +00 +09 +25 +01 +00 +02 +00 +00 +00 +06 +00 +0d +25 +01 +00 +02 +00 +00 +00 +06 +00 +11 +25 +01 +00 +02 +00 +00 +00 +06 +00 +15 +25 +01 +00 +02 +00 +00 +00 +06 +00 +19 +25 +01 +00 +02 +00 +00 +00 +06 +00 +1d +25 +01 +00 +02 +00 +00 +00 +06 +00 +21 +25 +01 +00 +02 +00 +00 +00 +06 +00 +25 +25 +01 +00 +02 +00 +00 +00 +06 +00 +29 +25 +01 +00 +02 +00 +00 +00 +06 +00 +2d +25 +01 +00 +02 +00 +00 +00 +06 +00 +31 +25 +01 +00 +02 +00 +00 +00 +06 +00 +35 +25 +01 +00 +02 +00 +00 +00 +06 +00 +39 +25 +01 +00 +02 +00 +00 +00 +06 +00 +3d +25 +01 +00 +02 +00 +00 +00 +06 +00 +41 +25 +01 +00 +02 +00 +00 +00 +06 +00 +45 +25 +01 +00 +02 +00 +00 +00 +06 +00 +49 +25 +01 +00 +02 +00 +00 +00 +06 +00 +4d +25 +01 +00 +02 +00 +00 +00 +06 +00 +51 +25 +01 +00 +02 +00 +00 +00 +06 +00 +55 +25 +01 +00 +02 +00 +00 +00 +06 +00 +59 +25 +01 +00 +02 +00 +00 +00 +06 +00 +5d +25 +01 +00 +02 +00 +00 +00 +06 +00 +61 +25 +01 +00 +02 +00 +00 +00 +06 +00 +65 +25 +01 +00 +02 +00 +00 +00 +06 +00 +69 +25 +01 +00 +02 +00 +00 +00 +06 +00 +6d +25 +01 +00 +02 +00 +00 +00 +06 +00 +71 +25 +01 +00 +02 +00 +00 +00 +06 +00 +75 +25 +01 +00 +02 +00 +00 +00 +06 +00 +79 +25 +01 +00 +02 +00 +00 +00 +06 +00 +7d +25 +01 +00 +02 +00 +00 +00 +06 +00 +81 +25 +01 +00 +02 +00 +00 +00 +06 +00 +85 +25 +01 +00 +02 +00 +00 +00 +06 +00 +89 +25 +01 +00 +02 +00 +00 +00 +06 +00 +8d +25 +01 +00 +02 +00 +00 +00 +06 +00 +91 +25 +01 +00 +02 +00 +00 +00 +06 +00 +95 +25 +01 +00 +02 +00 +00 +00 +06 +00 +99 +25 +01 +00 +02 +00 +00 +00 +06 +00 +9d +25 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +25 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +25 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +25 +01 +00 +02 +00 +00 +00 +06 +00 +ad +25 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +25 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +25 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +25 +01 +00 +02 +00 +00 +00 +06 +00 +bd +25 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +25 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +25 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +25 +01 +00 +02 +00 +00 +00 +06 +00 +cd +25 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +25 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +25 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +25 +01 +00 +02 +00 +00 +00 +06 +00 +dd +25 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +25 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +25 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +25 +01 +00 +02 +00 +00 +00 +06 +00 +ed +25 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +25 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +25 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +25 +01 +00 +02 +00 +00 +00 +06 +00 +fd +25 +01 +00 +02 +00 +00 +00 +06 +00 +01 +26 +01 +00 +02 +00 +00 +00 +06 +00 +05 +26 +01 +00 +02 +00 +00 +00 +06 +00 +09 +26 +01 +00 +02 +00 +00 +00 +06 +00 +0d +26 +01 +00 +02 +00 +00 +00 +06 +00 +11 +26 +01 +00 +02 +00 +00 +00 +06 +00 +15 +26 +01 +00 +02 +00 +00 +00 +06 +00 +19 +26 +01 +00 +02 +00 +00 +00 +06 +00 +1d +26 +01 +00 +02 +00 +00 +00 +06 +00 +21 +26 +01 +00 +02 +00 +00 +00 +06 +00 +25 +26 +01 +00 +02 +00 +00 +00 +06 +00 +29 +26 +01 +00 +02 +00 +00 +00 +06 +00 +2d +26 +01 +00 +02 +00 +00 +00 +06 +00 +31 +26 +01 +00 +02 +00 +00 +00 +06 +00 +35 +26 +01 +00 +02 +00 +00 +00 +06 +00 +39 +26 +01 +00 +02 +00 +00 +00 +06 +00 +3d +26 +01 +00 +02 +00 +00 +00 +06 +00 +41 +26 +01 +00 +02 +00 +00 +00 +06 +00 +45 +26 +01 +00 +02 +00 +00 +00 +06 +00 +49 +26 +01 +00 +02 +00 +00 +00 +06 +00 +4d +26 +01 +00 +02 +00 +00 +00 +06 +00 +51 +26 +01 +00 +02 +00 +00 +00 +06 +00 +55 +26 +01 +00 +02 +00 +00 +00 +06 +00 +59 +26 +01 +00 +02 +00 +00 +00 +06 +00 +5d +26 +01 +00 +02 +00 +00 +00 +06 +00 +61 +26 +01 +00 +02 +00 +00 +00 +06 +00 +65 +26 +01 +00 +02 +00 +00 +00 +06 +00 +69 +26 +01 +00 +02 +00 +00 +00 +06 +00 +6d +26 +01 +00 +02 +00 +00 +00 +06 +00 +71 +26 +01 +00 +02 +00 +00 +00 +06 +00 +75 +26 +01 +00 +02 +00 +00 +00 +06 +00 +79 +26 +01 +00 +02 +00 +00 +00 +06 +00 +7d +26 +01 +00 +02 +00 +00 +00 +06 +00 +81 +26 +01 +00 +02 +00 +00 +00 +06 +00 +85 +26 +01 +00 +02 +00 +00 +00 +06 +00 +89 +26 +01 +00 +02 +00 +00 +00 +06 +00 +8d +26 +01 +00 +02 +00 +00 +00 +06 +00 +91 +26 +01 +00 +02 +00 +00 +00 +06 +00 +95 +26 +01 +00 +02 +00 +00 +00 +06 +00 +99 +26 +01 +00 +02 +00 +00 +00 +06 +00 +9d +26 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +26 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +26 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +26 +01 +00 +02 +00 +00 +00 +06 +00 +ad +26 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +26 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +26 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +26 +01 +00 +02 +00 +00 +00 +06 +00 +bd +26 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +26 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +26 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +26 +01 +00 +02 +00 +00 +00 +06 +00 +cd +26 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +26 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +26 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +26 +01 +00 +02 +00 +00 +00 +06 +00 +dd +26 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +26 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +26 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +26 +01 +00 +02 +00 +00 +00 +06 +00 +ed +26 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +26 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +26 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +26 +01 +00 +02 +00 +00 +00 +06 +00 +fd +26 +01 +00 +02 +00 +00 +00 +06 +00 +01 +27 +01 +00 +02 +00 +00 +00 +06 +00 +05 +27 +01 +00 +02 +00 +00 +00 +06 +00 +09 +27 +01 +00 +02 +00 +00 +00 +06 +00 +0d +27 +01 +00 +02 +00 +00 +00 +06 +00 +11 +27 +01 +00 +02 +00 +00 +00 +06 +00 +15 +27 +01 +00 +02 +00 +00 +00 +06 +00 +19 +27 +01 +00 +02 +00 +00 +00 +06 +00 +1d +27 +01 +00 +02 +00 +00 +00 +06 +00 +21 +27 +01 +00 +02 +00 +00 +00 +06 +00 +25 +27 +01 +00 +02 +00 +00 +00 +06 +00 +29 +27 +01 +00 +02 +00 +00 +00 +06 +00 +2d +27 +01 +00 +02 +00 +00 +00 +06 +00 +31 +27 +01 +00 +02 +00 +00 +00 +06 +00 +35 +27 +01 +00 +02 +00 +00 +00 +06 +00 +39 +27 +01 +00 +02 +00 +00 +00 +06 +00 +3d +27 +01 +00 +02 +00 +00 +00 +06 +00 +41 +27 +01 +00 +02 +00 +00 +00 +06 +00 +45 +27 +01 +00 +02 +00 +00 +00 +06 +00 +49 +27 +01 +00 +02 +00 +00 +00 +06 +00 +4d +27 +01 +00 +02 +00 +00 +00 +06 +00 +51 +27 +01 +00 +02 +00 +00 +00 +06 +00 +55 +27 +01 +00 +02 +00 +00 +00 +06 +00 +59 +27 +01 +00 +02 +00 +00 +00 +06 +00 +5d +27 +01 +00 +02 +00 +00 +00 +06 +00 +61 +27 +01 +00 +02 +00 +00 +00 +06 +00 +65 +27 +01 +00 +02 +00 +00 +00 +06 +00 +69 +27 +01 +00 +02 +00 +00 +00 +06 +00 +6d +27 +01 +00 +02 +00 +00 +00 +06 +00 +71 +27 +01 +00 +02 +00 +00 +00 +06 +00 +75 +27 +01 +00 +02 +00 +00 +00 +06 +00 +79 +27 +01 +00 +02 +00 +00 +00 +06 +00 +7d +27 +01 +00 +02 +00 +00 +00 +06 +00 +81 +27 +01 +00 +02 +00 +00 +00 +06 +00 +85 +27 +01 +00 +02 +00 +00 +00 +06 +00 +89 +27 +01 +00 +02 +00 +00 +00 +06 +00 +8d +27 +01 +00 +02 +00 +00 +00 +06 +00 +91 +27 +01 +00 +02 +00 +00 +00 +06 +00 +95 +27 +01 +00 +02 +00 +00 +00 +06 +00 +99 +27 +01 +00 +02 +00 +00 +00 +06 +00 +9d +27 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +27 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +27 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +27 +01 +00 +02 +00 +00 +00 +06 +00 +ad +27 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +27 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +27 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +27 +01 +00 +02 +00 +00 +00 +06 +00 +bd +27 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +27 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +27 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +27 +01 +00 +02 +00 +00 +00 +06 +00 +cd +27 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +27 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +27 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +27 +01 +00 +02 +00 +00 +00 +06 +00 +dd +27 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +27 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +27 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +27 +01 +00 +02 +00 +00 +00 +06 +00 +ed +27 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +27 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +27 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +27 +01 +00 +02 +00 +00 +00 +06 +00 +fd +27 +01 +00 +02 +00 +00 +00 +06 +00 +01 +28 +01 +00 +02 +00 +00 +00 +06 +00 +05 +28 +01 +00 +02 +00 +00 +00 +06 +00 +09 +28 +01 +00 +02 +00 +00 +00 +06 +00 +0d +28 +01 +00 +02 +00 +00 +00 +06 +00 +11 +28 +01 +00 +02 +00 +00 +00 +06 +00 +15 +28 +01 +00 +02 +00 +00 +00 +06 +00 +19 +28 +01 +00 +02 +00 +00 +00 +06 +00 +1d +28 +01 +00 +02 +00 +00 +00 +06 +00 +21 +28 +01 +00 +02 +00 +00 +00 +06 +00 +25 +28 +01 +00 +02 +00 +00 +00 +06 +00 +29 +28 +01 +00 +02 +00 +00 +00 +06 +00 +2d +28 +01 +00 +02 +00 +00 +00 +06 +00 +31 +28 +01 +00 +02 +00 +00 +00 +06 +00 +35 +28 +01 +00 +02 +00 +00 +00 +06 +00 +39 +28 +01 +00 +02 +00 +00 +00 +06 +00 +3d +28 +01 +00 +02 +00 +00 +00 +06 +00 +41 +28 +01 +00 +02 +00 +00 +00 +06 +00 +45 +28 +01 +00 +02 +00 +00 +00 +06 +00 +49 +28 +01 +00 +02 +00 +00 +00 +06 +00 +4d +28 +01 +00 +02 +00 +00 +00 +06 +00 +51 +28 +01 +00 +02 +00 +00 +00 +06 +00 +55 +28 +01 +00 +02 +00 +00 +00 +06 +00 +59 +28 +01 +00 +02 +00 +00 +00 +06 +00 +5d +28 +01 +00 +02 +00 +00 +00 +06 +00 +61 +28 +01 +00 +02 +00 +00 +00 +06 +00 +65 +28 +01 +00 +02 +00 +00 +00 +06 +00 +69 +28 +01 +00 +02 +00 +00 +00 +06 +00 +6d +28 +01 +00 +02 +00 +00 +00 +06 +00 +71 +28 +01 +00 +02 +00 +00 +00 +06 +00 +75 +28 +01 +00 +02 +00 +00 +00 +06 +00 +79 +28 +01 +00 +02 +00 +00 +00 +06 +00 +7d +28 +01 +00 +02 +00 +00 +00 +06 +00 +81 +28 +01 +00 +02 +00 +00 +00 +06 +00 +85 +28 +01 +00 +02 +00 +00 +00 +06 +00 +89 +28 +01 +00 +02 +00 +00 +00 +06 +00 +8d +28 +01 +00 +02 +00 +00 +00 +06 +00 +91 +28 +01 +00 +02 +00 +00 +00 +06 +00 +95 +28 +01 +00 +02 +00 +00 +00 +06 +00 +99 +28 +01 +00 +02 +00 +00 +00 +06 +00 +9d +28 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +28 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +28 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +28 +01 +00 +02 +00 +00 +00 +06 +00 +ad +28 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +28 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +28 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +28 +01 +00 +02 +00 +00 +00 +06 +00 +bd +28 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +28 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +28 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +28 +01 +00 +02 +00 +00 +00 +06 +00 +cd +28 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +28 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +28 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +28 +01 +00 +02 +00 +00 +00 +06 +00 +dd +28 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +28 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +28 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +28 +01 +00 +02 +00 +00 +00 +06 +00 +ed +28 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +28 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +28 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +28 +01 +00 +02 +00 +00 +00 +06 +00 +fd +28 +01 +00 +02 +00 +00 +00 +06 +00 +01 +29 +01 +00 +02 +00 +00 +00 +06 +00 +05 +29 +01 +00 +02 +00 +00 +00 +06 +00 +09 +29 +01 +00 +02 +00 +00 +00 +06 +00 +0d +29 +01 +00 +02 +00 +00 +00 +06 +00 +11 +29 +01 +00 +02 +00 +00 +00 +06 +00 +15 +29 +01 +00 +02 +00 +00 +00 +06 +00 +19 +29 +01 +00 +02 +00 +00 +00 +06 +00 +1d +29 +01 +00 +02 +00 +00 +00 +06 +00 +21 +29 +01 +00 +02 +00 +00 +00 +06 +00 +25 +29 +01 +00 +02 +00 +00 +00 +06 +00 +29 +29 +01 +00 +02 +00 +00 +00 +06 +00 +2d +29 +01 +00 +02 +00 +00 +00 +06 +00 +31 +29 +01 +00 +02 +00 +00 +00 +06 +00 +35 +29 +01 +00 +02 +00 +00 +00 +06 +00 +39 +29 +01 +00 +02 +00 +00 +00 +06 +00 +3d +29 +01 +00 +02 +00 +00 +00 +06 +00 +41 +29 +01 +00 +02 +00 +00 +00 +06 +00 +45 +29 +01 +00 +02 +00 +00 +00 +06 +00 +49 +29 +01 +00 +02 +00 +00 +00 +06 +00 +4d +29 +01 +00 +02 +00 +00 +00 +06 +00 +51 +29 +01 +00 +02 +00 +00 +00 +06 +00 +55 +29 +01 +00 +02 +00 +00 +00 +06 +00 +59 +29 +01 +00 +02 +00 +00 +00 +06 +00 +5d +29 +01 +00 +02 +00 +00 +00 +06 +00 +61 +29 +01 +00 +02 +00 +00 +00 +06 +00 +65 +29 +01 +00 +02 +00 +00 +00 +06 +00 +69 +29 +01 +00 +02 +00 +00 +00 +06 +00 +6d +29 +01 +00 +02 +00 +00 +00 +06 +00 +71 +29 +01 +00 +02 +00 +00 +00 +06 +00 +75 +29 +01 +00 +02 +00 +00 +00 +06 +00 +79 +29 +01 +00 +02 +00 +00 +00 +06 +00 +7d +29 +01 +00 +02 +00 +00 +00 +06 +00 +81 +29 +01 +00 +02 +00 +00 +00 +06 +00 +85 +29 +01 +00 +02 +00 +00 +00 +06 +00 +89 +29 +01 +00 +02 +00 +00 +00 +06 +00 +8d +29 +01 +00 +02 +00 +00 +00 +06 +00 +91 +29 +01 +00 +02 +00 +00 +00 +06 +00 +95 +29 +01 +00 +02 +00 +00 +00 +06 +00 +99 +29 +01 +00 +02 +00 +00 +00 +06 +00 +9d +29 +01 +00 +02 +00 +00 +00 +06 +00 +a1 +29 +01 +00 +02 +00 +00 +00 +06 +00 +a5 +29 +01 +00 +02 +00 +00 +00 +06 +00 +a9 +29 +01 +00 +02 +00 +00 +00 +06 +00 +ad +29 +01 +00 +02 +00 +00 +00 +06 +00 +b1 +29 +01 +00 +02 +00 +00 +00 +06 +00 +b5 +29 +01 +00 +02 +00 +00 +00 +06 +00 +b9 +29 +01 +00 +02 +00 +00 +00 +06 +00 +bd +29 +01 +00 +02 +00 +00 +00 +06 +00 +c1 +29 +01 +00 +02 +00 +00 +00 +06 +00 +c5 +29 +01 +00 +02 +00 +00 +00 +06 +00 +c9 +29 +01 +00 +02 +00 +00 +00 +06 +00 +cd +29 +01 +00 +02 +00 +00 +00 +06 +00 +d1 +29 +01 +00 +02 +00 +00 +00 +06 +00 +d5 +29 +01 +00 +02 +00 +00 +00 +06 +00 +d9 +29 +01 +00 +02 +00 +00 +00 +06 +00 +dd +29 +01 +00 +02 +00 +00 +00 +06 +00 +e1 +29 +01 +00 +02 +00 +00 +00 +06 +00 +e5 +29 +01 +00 +02 +00 +00 +00 +06 +00 +e9 +29 +01 +00 +02 +00 +00 +00 +06 +00 +ed +29 +01 +00 +02 +00 +00 +00 +06 +00 +f1 +29 +01 +00 +02 +00 +00 +00 +06 +00 +f5 +29 +01 +00 +02 +00 +00 +00 +06 +00 +f9 +29 +01 +00 +02 +00 +00 +00 +06 +00 +fd +29 +01 +00 +02 +00 +00 +00 +06 +00 +01 +2a +01 +00 +02 +00 +00 +00 +06 +00 +05 +2a +01 +00 +02 +00 +00 +00 +06 +00 +09 +2a +01 +00 +02 +00 +00 +00 +06 +00 +0d +2a +01 +00 +02 +00 +00 +00 +06 +00 +11 +2a +01 +00 +02 +00 +00 +00 +06 +00 +15 +2a +01 +00 +02 +00 +00 +00 +06 +00 +19 +2a +01 +00 +02 +00 +00 +00 +06 +00 +1d +2a +01 +00 +02 +00 +00 +00 +06 +00 +21 +2a +01 +00 +02 +00 +00 +00 +06 +00 +25 +2a +01 +00 +02 +00 +00 +00 +06 +00 +29 +2a +01 +00 +02 +00 +00 +00 +06 +00 +2d +2a +01 +00 +02 +00 +00 +00 +06 +00 +31 +2a +01 +00 +02 +00 +00 +00 +06 +00 +35 +2a +01 +00 +02 +00 +00 +00 +06 +00 +39 +2a +01 +00 +02 +00 +00 +00 +06 +00 +3d +2a +01 +00 +02 +00 +00 +00 +06 +00 +41 +2a +01 +00 +02 +00 +00 +00 +06 +00 +45 +2a +01 +00 +02 +00 +00 +00 +06 +00 +49 +2a +01 +00 +02 +00 +00 +00 +06 +00 +4d +2a +01 +00 +02 +00 +00 +00 +06 +00 +51 +2a +01 +00 +02 +00 +00 +00 +06 +00 +55 +2a +01 +00 +02 +00 +00 +00 +06 +00 +59 +2a +01 +00 +02 +00 +00 +00 +06 +00 +5d +2a +01 +00 +02 +00 +00 +00 +06 +00 +61 +2a +01 +00 +02 +00 +00 +00 +06 +00 +65 +2a +01 +00 +02 +00 +00 +00 +06 +00 +69 +2a +01 +00 +02 +00 +00 +00 +06 +00 +6d +2a +01 +00 +02 +00 +00 +00 +06 +00 +71 +2a +01 +00 +02 +00 +00 +00 +06 +00 +75 +2a +01 +00 +02 +00 +00 +00 +06 +00 +79 +2a +01 +00 +02 +00 +00 +00 +06 +00 +7d +2a +01 +00 +02 +00 +00 +00 +06 +00 +81 +2a +01 +00 +02 +00 +00 +00 +06 +00 +85 +2a +01 +00 +02 +00 +00 +00 +06 +00 +89 +2a +01 +00 +02 +00 +00 +00 +06 +00 +8d +2a +01 +00 +02 +00 +00 +00 +06 +00 +91 +2a +01 +00 +02 +00 +00 +00 +06 +00 +95 +2a +01 +00 +02 +00 +00 +00 +06 +00 +99 +2a +01 +00 +02 +00 +00 +00 +06 +00 +9d +2a +01 +00 +02 +00 +00 +00 +06 +00 +a1 +2a +01 +00 +02 +00 +00 +00 +06 +00 +a5 +2a +01 +00 +02 +00 +00 +00 +06 +00 +a9 +2a +01 +00 +02 +00 +00 +00 +06 +00 +ad +2a +01 +00 +02 +00 +00 +00 +06 +00 +b1 +2a +01 +00 +02 +00 +00 +00 +06 +00 +b5 +2a +01 +00 +02 +00 +00 +00 +06 +00 +b9 +2a +01 +00 +02 +00 +00 +00 +06 +00 +bd +2a +01 +00 +02 +00 +00 +00 +06 +00 +c1 +2a +01 +00 +02 +00 +00 +00 +06 +00 +c5 +2a +01 +00 +02 +00 +00 +00 +06 +00 +c9 +2a +01 +00 +02 +00 +00 +00 +06 +00 +cd +2a +01 +00 +02 +00 +00 +00 +06 +00 +d1 +2a +01 +00 +02 +00 +00 +00 +06 +00 +d5 +2a +01 +00 +02 +00 +00 +00 +06 +00 +d9 +2a +01 +00 +02 +00 +00 +00 +06 +00 +dd +2a +01 +00 +02 +00 +00 +00 +06 +00 +e1 +2a +01 +00 +02 +00 +00 +00 +06 +00 +e5 +2a +01 +00 +02 +00 +00 +00 +06 +00 +e9 +2a +01 +00 +02 +00 +00 +00 +06 +00 +ed +2a +01 +00 +02 +00 +00 +00 +06 +00 +f1 +2a +01 +00 +02 +00 +00 +00 +06 +00 +f5 +2a +01 +00 +02 +00 +00 +00 +06 +00 +f9 +2a +01 +00 +02 +00 +00 +00 +06 +00 +fd +2a +01 +00 +02 +00 +00 +00 +06 +00 +01 +2b +01 +00 +02 +00 +00 +00 +06 +00 +05 +2b +01 +00 +02 +00 +00 +00 +06 +00 +09 +2b +01 +00 +02 +00 +00 +00 +06 +00 +0d +2b +01 +00 +02 +00 +00 +00 +06 +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +e9 +d3 +00 +00 +2d +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +19 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +28 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +37 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +45 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +5e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +75 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +8a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +9b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +af +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +c6 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +d2 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +e7 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +f5 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +04 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +15 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +2a +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +44 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +59 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +74 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +7f +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +95 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +2e +64 +61 +74 +61 +00 +00 +00 +e9 +d3 +00 +00 +02 +00 +00 +00 +03 +01 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +72 +6f +64 +61 +74 +61 +00 +ed +d3 +00 +00 +03 +00 +00 +00 +03 +01 +24 +57 +00 +00 +da +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a3 +01 +00 +00 +b9 +02 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +b8 +01 +00 +00 +e4 +0d +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +cc +01 +00 +00 +8c +1d +00 +00 +01 +00 +00 +00 +02 +00 +e5 +01 +00 +00 +79 +61 +73 +6d +5f +69 +6e +74 +65 +72 +6e +61 +6c +5f +65 +72 +72 +6f +72 +5f +00 +79 +61 +73 +6d +5f +65 +78 +70 +72 +5f +63 +6f +70 +79 +00 +79 +61 +73 +6d +5f +65 +78 +70 +72 +5f +65 +78 +70 +72 +00 +79 +61 +73 +6d +5f +65 +78 +70 +72 +5f +6e +65 +77 +00 +79 +61 +73 +6d +5f +73 +79 +6d +72 +65 +63 +5f +64 +65 +66 +69 +6e +65 +5f +6c +61 +62 +65 +6c +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +4c +54 +58 +5f +6d +6f +64 +65 +5f +62 +69 +74 +73 +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +62 +63 +5f +6e +65 +77 +5f +6a +6d +70 +00 +79 +61 +73 +6d +5f +65 +61 +5f +67 +65 +74 +5f +64 +69 +73 +70 +00 +79 +61 +73 +6d +5f +65 +78 +70 +72 +5f +5f +63 +6f +6e +74 +61 +69 +6e +73 +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +67 +65 +74 +5f +72 +65 +67 +5f +73 +69 +7a +65 +00 +79 +61 +73 +6d +5f +5f +65 +72 +72 +6f +72 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +6e +65 +77 +5f +75 +69 +6e +74 +00 +79 +61 +73 +6d +5f +65 +78 +70 +72 +5f +69 +6e +74 +00 +79 +61 +73 +6d +5f +65 +61 +5f +64 +65 +6c +65 +74 +65 +00 +79 +61 +73 +6d +5f +65 +78 +70 +72 +5f +64 +65 +6c +65 +74 +65 +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +65 +61 +5f +6e +65 +77 +5f +72 +65 +67 +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +65 +61 +5f +73 +65 +74 +5f +64 +69 +73 +70 +6f +6e +6c +79 +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +65 +61 +5f +6e +65 +77 +5f +69 +6d +6d +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +73 +65 +74 +5f +72 +65 +78 +5f +66 +72 +6f +6d +5f +72 +65 +67 +00 +79 +61 +73 +6d +5f +78 +66 +72 +65 +65 +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +62 +63 +5f +6e +65 +77 +5f +69 +6e +73 +6e +00 +79 +61 +73 +6d +5f +5f +77 +61 +72 +6e +69 +6e +67 +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +70 +61 +72 +73 +65 +5f +69 +6e +73 +6e +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +70 +61 +72 +73 +65 +5f +63 +70 +75 +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +70 +61 +72 +73 +65 +5f +63 +68 +65 +63 +6b +5f +69 +64 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/win64-except.c b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/win64-except.c new file mode 100644 index 0000000000..8c8ecbbc49 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/win64-except.c @@ -0,0 +1,559 @@ +/* + * Win64 structured exception handling support + * + * Copyright (C) 2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "coff-objfmt.h" + + +#define UNW_FLAG_EHANDLER 0x01 +#define UNW_FLAG_UHANDLER 0x02 +#define UNW_FLAG_CHAININFO 0x04 + +/* Bytecode callback function prototypes */ +static void win64_uwinfo_bc_destroy(void *contents); +static void win64_uwinfo_bc_print(const void *contents, FILE *f, + int indent_level); +static void win64_uwinfo_bc_finalize(yasm_bytecode *bc, + yasm_bytecode *prev_bc); +static int win64_uwinfo_bc_calc_len + (yasm_bytecode *bc, yasm_bc_add_span_func add_span, void *add_span_data); +static int win64_uwinfo_bc_expand(yasm_bytecode *bc, int span, long old_val, + long new_val, /*@out@*/ long *neg_thres, + /*@out@*/ long *pos_thres); +static int win64_uwinfo_bc_tobytes + (yasm_bytecode *bc, unsigned char **bufp, unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +static void win64_uwcode_bc_destroy(void *contents); +static void win64_uwcode_bc_print(const void *contents, FILE *f, + int indent_level); +static void win64_uwcode_bc_finalize(yasm_bytecode *bc, + yasm_bytecode *prev_bc); +static int win64_uwcode_bc_calc_len + (yasm_bytecode *bc, yasm_bc_add_span_func add_span, void *add_span_data); +static int win64_uwcode_bc_expand(yasm_bytecode *bc, int span, long old_val, + long new_val, /*@out@*/ long *neg_thres, + /*@out@*/ long *pos_thres); +static int win64_uwcode_bc_tobytes + (yasm_bytecode *bc, unsigned char **bufp, unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + /*@null@*/ yasm_output_reloc_func output_reloc); + +/* Bytecode callback structures */ +static const yasm_bytecode_callback win64_uwinfo_bc_callback = { + win64_uwinfo_bc_destroy, + win64_uwinfo_bc_print, + win64_uwinfo_bc_finalize, + NULL, + win64_uwinfo_bc_calc_len, + win64_uwinfo_bc_expand, + win64_uwinfo_bc_tobytes, + 0 +}; + +static const yasm_bytecode_callback win64_uwcode_bc_callback = { + win64_uwcode_bc_destroy, + win64_uwcode_bc_print, + win64_uwcode_bc_finalize, + NULL, + win64_uwcode_bc_calc_len, + win64_uwcode_bc_expand, + win64_uwcode_bc_tobytes, + 0 +}; + + +coff_unwind_info * +yasm_win64__uwinfo_create(void) +{ + coff_unwind_info *info = yasm_xmalloc(sizeof(coff_unwind_info)); + info->proc = NULL; + info->prolog = NULL; + info->ehandler = NULL; + info->framereg = 0; + /* Frameoff is really a 4-bit value, scaled by 16 */ + yasm_value_initialize(&info->frameoff, NULL, 8); + SLIST_INIT(&info->codes); + yasm_value_initialize(&info->prolog_size, NULL, 8); + yasm_value_initialize(&info->codes_count, NULL, 8); + return info; +} + +void +yasm_win64__uwinfo_destroy(coff_unwind_info *info) +{ + coff_unwind_code *code; + + yasm_value_delete(&info->frameoff); + yasm_value_delete(&info->prolog_size); + yasm_value_delete(&info->codes_count); + + while (!SLIST_EMPTY(&info->codes)) { + code = SLIST_FIRST(&info->codes); + SLIST_REMOVE_HEAD(&info->codes, link); + yasm_value_delete(&code->off); + yasm_xfree(code); + } + yasm_xfree(info); +} + +void +yasm_win64__unwind_generate(yasm_section *xdata, coff_unwind_info *info, + unsigned long line) +{ + yasm_bytecode *infobc, *codebc = NULL; + coff_unwind_code *code; + + /* 4-byte align the start of unwind info */ + yasm_section_bcs_append(xdata, yasm_bc_create_align( + yasm_expr_create_ident(yasm_expr_int(yasm_intnum_create_uint(4)), + line), + NULL, NULL, NULL, line)); + + /* Prolog size = end of prolog - start of procedure */ + yasm_value_initialize(&info->prolog_size, + yasm_expr_create(YASM_EXPR_SUB, yasm_expr_sym(info->prolog), + yasm_expr_sym(info->proc), line), + 8); + + /* Unwind info */ + infobc = yasm_bc_create_common(&win64_uwinfo_bc_callback, info, line); + yasm_section_bcs_append(xdata, infobc); + + /* Code array */ + SLIST_FOREACH(code, &info->codes, link) { + codebc = yasm_bc_create_common(&win64_uwcode_bc_callback, code, + yasm_symrec_get_def_line(code->loc)); + yasm_section_bcs_append(xdata, codebc); + } + + /* Avoid double-free (by code destroy and uwinfo destroy). */ + SLIST_INIT(&info->codes); + + /* Number of codes = (Last code - end of info) >> 1 */ + if (!codebc) { + yasm_value_initialize(&info->codes_count, + yasm_expr_create_ident(yasm_expr_int(yasm_intnum_create_uint(0)), + line), + 8); + } else { + yasm_value_initialize(&info->codes_count, + yasm_expr_create(YASM_EXPR_SHR, yasm_expr_expr( + yasm_expr_create(YASM_EXPR_SUB, yasm_expr_precbc(codebc), + yasm_expr_precbc(infobc), line)), + yasm_expr_int(yasm_intnum_create_uint(1)), line), + 8); + } + + /* 4-byte align */ + yasm_section_bcs_append(xdata, yasm_bc_create_align( + yasm_expr_create_ident(yasm_expr_int(yasm_intnum_create_uint(4)), + line), + NULL, NULL, NULL, line)); + + /* Exception handler, if present. Use data bytecode. */ + if (info->ehandler) { + yasm_datavalhead dvs; + + yasm_dvs_initialize(&dvs); + yasm_dvs_append(&dvs, yasm_dv_create_expr( + yasm_expr_create_ident(yasm_expr_sym(info->ehandler), line))); + yasm_section_bcs_append(xdata, + yasm_bc_create_data(&dvs, 4, 0, NULL, line)); + } +} + +static void +win64_uwinfo_bc_destroy(void *contents) +{ + yasm_win64__uwinfo_destroy((coff_unwind_info *)contents); +} + +static void +win64_uwinfo_bc_print(const void *contents, FILE *f, int indent_level) +{ + /* TODO */ +} + +static void +win64_uwinfo_bc_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc) +{ + coff_unwind_info *info = (coff_unwind_info *)bc->contents; + + if (yasm_value_finalize(&info->prolog_size, prev_bc)) + yasm_internal_error(N_("prolog size expression too complex")); + + if (yasm_value_finalize(&info->codes_count, prev_bc)) + yasm_internal_error(N_("codes count expression too complex")); + + if (yasm_value_finalize(&info->frameoff, prev_bc)) + yasm_error_set(YASM_ERROR_VALUE, + N_("frame offset expression too complex")); +} + +static int +win64_uwinfo_bc_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + coff_unwind_info *info = (coff_unwind_info *)bc->contents; + /*@only@*/ /*@null@*/ yasm_intnum *intn; + long intv; + + /* Want to make sure prolog size and codes count doesn't exceed + * byte-size, and scaled frame offset doesn't exceed 4 bits. + */ + add_span(add_span_data, bc, 1, &info->prolog_size, 0, 255); + add_span(add_span_data, bc, 2, &info->codes_count, 0, 255); + + intn = yasm_value_get_intnum(&info->frameoff, bc, 0); + if (intn) { + intv = yasm_intnum_get_int(intn); + if (intv < 0 || intv > 240) + yasm_error_set(YASM_ERROR_VALUE, + N_("frame offset of %ld bytes, must be between 0 and 240"), + intv); + else if ((intv & 0xF) != 0) + yasm_error_set(YASM_ERROR_VALUE, + N_("frame offset of %ld is not a multiple of 16"), intv); + yasm_intnum_destroy(intn); + } else + add_span(add_span_data, bc, 3, &info->frameoff, 0, 240); + + bc->len += 4; + return 0; +} + +static int +win64_uwinfo_bc_expand(yasm_bytecode *bc, int span, long old_val, long new_val, + /*@out@*/ long *neg_thres, /*@out@*/ long *pos_thres) +{ + coff_unwind_info *info = (coff_unwind_info *)bc->contents; + switch (span) { + case 1: + yasm_error_set_xref(yasm_symrec_get_def_line(info->prolog), + N_("prologue ended here")); + yasm_error_set(YASM_ERROR_VALUE, + N_("prologue %ld bytes, must be <256"), new_val); + return -1; + case 2: + yasm_error_set(YASM_ERROR_VALUE, + N_("%ld unwind codes, maximum of 255"), new_val); + return -1; + case 3: + yasm_error_set(YASM_ERROR_VALUE, + N_("frame offset of %ld bytes, must be between 0 and 240"), + new_val); + return -1; + default: + yasm_internal_error(N_("unrecognized span id")); + } + return 0; +} + +static int +win64_uwinfo_bc_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + yasm_output_reloc_func output_reloc) +{ + coff_unwind_info *info = (coff_unwind_info *)bc->contents; + unsigned char *buf = *bufp; + /*@only@*/ /*@null@*/ yasm_intnum *frameoff; + long intv; + + /* Version and flags */ + if (info->ehandler) + YASM_WRITE_8(buf, 1 | (UNW_FLAG_EHANDLER << 3)); + else + YASM_WRITE_8(buf, 1); + + /* Size of prolog */ + output_value(&info->prolog_size, buf, 1, (unsigned long)(buf-bufstart), + bc, 1, d); + buf += 1; + + /* Count of codes */ + output_value(&info->codes_count, buf, 1, (unsigned long)(buf-bufstart), + bc, 1, d); + buf += 1; + + /* Frame register and offset */ + frameoff = yasm_value_get_intnum(&info->frameoff, bc, 1); + if (!frameoff) { + yasm_error_set(YASM_ERROR_VALUE, + N_("frame offset expression too complex")); + return 1; + } + intv = yasm_intnum_get_int(frameoff); + if (intv < 0 || intv > 240) + yasm_error_set(YASM_ERROR_VALUE, + N_("frame offset of %ld bytes, must be between 0 and 240"), intv); + else if ((intv & 0xF) != 0) + yasm_error_set(YASM_ERROR_VALUE, + N_("frame offset of %ld is not a multiple of 16"), intv); + + YASM_WRITE_8(buf, ((unsigned long)intv & 0xF0) | (info->framereg & 0x0F)); + yasm_intnum_destroy(frameoff); + + *bufp = buf; + return 0; +} + +static void +win64_uwcode_bc_destroy(void *contents) +{ + coff_unwind_code *code = (coff_unwind_code *)contents; + yasm_value_delete(&code->off); + yasm_xfree(contents); +} + +static void +win64_uwcode_bc_print(const void *contents, FILE *f, int indent_level) +{ + /* TODO */ +} + +static void +win64_uwcode_bc_finalize(yasm_bytecode *bc, yasm_bytecode *prev_bc) +{ + coff_unwind_code *code = (coff_unwind_code *)bc->contents; + if (yasm_value_finalize(&code->off, prev_bc)) + yasm_error_set(YASM_ERROR_VALUE, N_("offset expression too complex")); +} + +static int +win64_uwcode_bc_calc_len(yasm_bytecode *bc, yasm_bc_add_span_func add_span, + void *add_span_data) +{ + coff_unwind_code *code = (coff_unwind_code *)bc->contents; + int span = 0; + /*@only@*/ /*@null@*/ yasm_intnum *intn; + long intv; + long low, high, mask; + + bc->len += 2; /* Prolog offset, code, and info */ + + switch (code->opcode) { + case UWOP_PUSH_NONVOL: + case UWOP_SET_FPREG: + case UWOP_PUSH_MACHFRAME: + /* always 1 node */ + return 0; + case UWOP_ALLOC_SMALL: + case UWOP_ALLOC_LARGE: + /* Start with smallest, then work our way up as necessary */ + code->opcode = UWOP_ALLOC_SMALL; + code->info = 0; + span = 1; low = 8; high = 128; mask = 0x7; + break; + case UWOP_SAVE_NONVOL: + case UWOP_SAVE_NONVOL_FAR: + /* Start with smallest, then work our way up as necessary */ + code->opcode = UWOP_SAVE_NONVOL; + bc->len += 2; /* Scaled offset */ + span = 2; + low = 0; + high = 8*64*1024-8; /* 16-bit field, *8 scaling */ + mask = 0x7; + break; + case UWOP_SAVE_XMM128: + case UWOP_SAVE_XMM128_FAR: + /* Start with smallest, then work our way up as necessary */ + code->opcode = UWOP_SAVE_XMM128; + bc->len += 2; /* Scaled offset */ + span = 3; + low = 0; + high = 16*64*1024-16; /* 16-bit field, *16 scaling */ + mask = 0xF; + break; + default: + yasm_internal_error(N_("unrecognied unwind opcode")); + /*@unreached@*/ + return 0; + } + + intn = yasm_value_get_intnum(&code->off, bc, 0); + if (intn) { + intv = yasm_intnum_get_int(intn); + if (intv > high) { + /* Expand it ourselves here if we can and we're already larger */ + if (win64_uwcode_bc_expand(bc, span, intv, intv, &low, &high) > 0) + add_span(add_span_data, bc, span, &code->off, low, high); + } + if (intv < low) + yasm_error_set(YASM_ERROR_VALUE, + N_("negative offset not allowed")); + if ((intv & mask) != 0) + yasm_error_set(YASM_ERROR_VALUE, + N_("offset of %ld is not a multiple of %ld"), intv, mask+1); + yasm_intnum_destroy(intn); + } else + add_span(add_span_data, bc, span, &code->off, low, high); + return 0; +} + +static int +win64_uwcode_bc_expand(yasm_bytecode *bc, int span, long old_val, long new_val, + /*@out@*/ long *neg_thres, /*@out@*/ long *pos_thres) +{ + coff_unwind_code *code = (coff_unwind_code *)bc->contents; + + if (new_val < 0) { + yasm_error_set(YASM_ERROR_VALUE, N_("negative offset not allowed")); + return -1; + } + + if (span == 1) { + /* 3 stages: SMALL, LARGE and info=0, LARGE and info=1 */ + if (code->opcode == UWOP_ALLOC_LARGE && code->info == 1) + yasm_internal_error(N_("expansion on already largest alloc")); + + if (code->opcode == UWOP_ALLOC_SMALL && new_val > 128) { + /* Overflowed small size */ + code->opcode = UWOP_ALLOC_LARGE; + bc->len += 2; + } + if (new_val <= 8*64*1024-8) { + /* Still can grow one more size */ + *pos_thres = 8*64*1024-8; + return 1; + } + /* We're into the largest size */ + code->info = 1; + bc->len += 2; + } else if (code->opcode == UWOP_SAVE_NONVOL && span == 2) { + code->opcode = UWOP_SAVE_NONVOL_FAR; + bc->len += 2; + } else if (code->opcode == UWOP_SAVE_XMM128 && span == 3) { + code->opcode = UWOP_SAVE_XMM128_FAR; + bc->len += 2; + } + return 0; +} + +static int +win64_uwcode_bc_tobytes(yasm_bytecode *bc, unsigned char **bufp, + unsigned char *bufstart, void *d, + yasm_output_value_func output_value, + yasm_output_reloc_func output_reloc) +{ + coff_unwind_code *code = (coff_unwind_code *)bc->contents; + unsigned char *buf = *bufp; + yasm_value val; + unsigned int size; + int shift; + long intv, low, high, mask; + yasm_intnum *intn; + + /* Offset in prolog */ + yasm_value_initialize(&val, + yasm_expr_create(YASM_EXPR_SUB, yasm_expr_sym(code->loc), + yasm_expr_sym(code->proc), bc->line), + 8); + output_value(&val, buf, 1, (unsigned long)(buf-bufstart), bc, 1, d); + buf += 1; + yasm_value_delete(&val); + + /* Offset value */ + switch (code->opcode) { + case UWOP_PUSH_NONVOL: + case UWOP_SET_FPREG: + case UWOP_PUSH_MACHFRAME: + /* just 1 node, no offset; write opcode and info and we're done */ + YASM_WRITE_8(buf, (code->info << 4) | (code->opcode & 0xF)); + *bufp = buf; + return 0; + case UWOP_ALLOC_SMALL: + /* 1 node, but offset stored in info */ + size = 0; low = 8; high = 128; shift = 3; mask = 0x7; + break; + case UWOP_ALLOC_LARGE: + if (code->info == 0) { + size = 2; low = 136; high = 8*64*1024-8; shift = 3; + } else { + size = 4; low = high = 0; shift = 0; + } + mask = 0x7; + break; + case UWOP_SAVE_NONVOL: + size = 2; low = 0; high = 8*64*1024-8; shift = 3; mask = 0x7; + break; + case UWOP_SAVE_XMM128: + size = 2; low = 0; high = 16*64*1024-16; shift = 4; mask = 0xF; + break; + case UWOP_SAVE_NONVOL_FAR: + size = 4; low = high = 0; shift = 0; mask = 0x7; + break; + case UWOP_SAVE_XMM128_FAR: + size = 4; low = high = 0; shift = 0; mask = 0xF; + break; + default: + yasm_internal_error(N_("unrecognied unwind opcode")); + /*@unreached@*/ + return 1; + } + + /* Check for overflow */ + intn = yasm_value_get_intnum(&code->off, bc, 1); + if (!intn) { + yasm_error_set(YASM_ERROR_VALUE, N_("offset expression too complex")); + return 1; + } + intv = yasm_intnum_get_int(intn); + if (size != 4 && (intv < low || intv > high)) { + yasm_error_set(YASM_ERROR_VALUE, + N_("offset of %ld bytes, must be between %ld and %ld"), + intv, low, high); + return 1; + } + if ((intv & mask) != 0) { + yasm_error_set(YASM_ERROR_VALUE, + N_("offset of %ld is not a multiple of %ld"), + intv, mask+1); + return 1; + } + + /* Stored value in info instead of extra code space */ + if (size == 0) + code->info = (yasm_intnum_get_uint(intn) >> shift)-1; + + /* Opcode and info */ + YASM_WRITE_8(buf, (code->info << 4) | (code->opcode & 0xF)); + + if (size != 0) { + yasm_intnum_get_sized(intn, buf, size, size*8, -shift, 0, 1); + buf += size; + } + + yasm_intnum_destroy(intn); + + *bufp = buf; + return 0; +} diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/win64-gas.mac b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/win64-gas.mac new file mode 100644 index 0000000000..c8c36fbc45 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/win64-gas.mac @@ -0,0 +1,73 @@ +%imacro export 1+.nolist +.export %1 +%endmacro + +; Raw exception handling operations +%imacro proc_frame 1+.nolist +%1: +.proc_frame %1 +%endmacro + +%imacro endproc_frame 0.nolist +.endproc_frame +%endmacro + +; Complex (macro) exception handling operations +; Mimics many macros provided by MASM's macamd64.inc +%imacro push_reg 1 +pushq %1 +.pushreg %1 +%endmacro + +%imacro rex_push_reg 1 +.byte 0x48 +pushq %1 +.pushreg %1 +%endmacro + +%imacro push_eflags 0 +pushfq +.allocstack 8 +%endmacro + +%imacro rex_push_eflags 0 +.byte 0x48 +pushfq +.allocstack 8 +%endmacro + +%imacro alloc_stack 1 +subq $%1, %rsp +.allocstack %1 +%endmacro + +%imacro save_reg 2 +movq %1, %2(%rsp) +.savereg %1 %2 +%endmacro + +%imacro save_xmm128 2 +movdqa %1, %2(%rsp) +.savexmm128 %1, %2 +%endmacro + +%imacro push_frame 0-1.nolist +.pushframe %1 +%endmacro + +%imacro set_frame 1-2 +%if %0==1 +movq %rsp, %1 +%else +leaq %2(%rsp), %1 +%endif +.setframe %1, %2 +%endmacro + +%imacro end_prolog 0.nolist +.endprolog +%endmacro + +%imacro end_prologue 0.nolist +.endprolog +%endmacro diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/win64-nasm.mac b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/win64-nasm.mac new file mode 100644 index 0000000000..13954b8903 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/coff/win64-nasm.mac @@ -0,0 +1,106 @@ +%imacro export 1+.nolist +[export %1] +%endmacro + +; Raw exception handling operations +%imacro proc_frame 1+.nolist +%1: +[proc_frame %1] +%endmacro + +; Disable these as they're too closely named to the macroized ones. +; MASM needs a preceding . to use these, so it seems reasonable for +; us to similarly require the []. +; +;%imacro pushreg 1.nolist +;[pushreg %1] +;%endmacro +; +;%imacro setframe 1-2.nolist +;[setframe %1 %2] +;%endmacro +; +;%imacro allocstack 1.nolist +;[allocstack %1] +;%endmacro +; +;%imacro savereg 2.nolist +;[savereg %1 %2] +;%endmacro +; +;%imacro savexmm128 2.nolist +;[savexmm128 %1 %2] +;%endmacro +; +;%imacro pushframe 0-1.nolist +;[pushframe %1] +;%endmacro +; +;%imacro endprolog 0.nolist +;[endprolog] +;%endmacro +; + +%imacro endproc_frame 0.nolist +[endproc_frame] +%endmacro + +; Complex (macro) exception handling operations +; Mimics many macros provided by MASM's macamd64.inc +%imacro push_reg 1 +push %1 +[pushreg %1] +%endmacro + +%imacro rex_push_reg 1 +db 0x48 +push %1 +[pushreg %1] +%endmacro + +%imacro push_eflags 0 +pushfq +[allocstack 8] +%endmacro + +%imacro rex_push_eflags 0 +db 0x48 +pushfq +[allocstack 8] +%endmacro + +%imacro alloc_stack 1 +sub rsp, %1 +[allocstack %1] +%endmacro + +%imacro save_reg 2 +mov [rsp+%2], %1 +[savereg %1 %2] +%endmacro + +%imacro save_xmm128 2 +movdqa [rsp+%2], %1 +[savexmm128 %1 %2] +%endmacro + +%imacro push_frame 0-1.nolist +[pushframe %1] +%endmacro + +%imacro set_frame 1-2 +%if %0==1 +mov %1, rsp +%else +lea %1, [rsp+%2] +%endif +[setframe %1 %2] +%endmacro + +%imacro end_prolog 0.nolist +[endprolog] +%endmacro + +%imacro end_prologue 0.nolist +[endprolog] +%endmacro diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/dbg/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/objfmts/dbg/CMakeLists.txt new file mode 100644 index 0000000000..ba5193fac7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/dbg/CMakeLists.txt @@ -0,0 +1,3 @@ +YASM_ADD_MODULE(objfmt_dbg + objfmts/dbg/dbg-objfmt.c + ) diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/dbg/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/dbg/Makefile.inc new file mode 100644 index 0000000000..cfc9b75ba3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/dbg/Makefile.inc @@ -0,0 +1,3 @@ +libyasm_a_SOURCES += modules/objfmts/dbg/dbg-objfmt.c + +YASM_MODULES += objfmt_dbg diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/dbg/dbg-objfmt.c b/third-party/yasm/yasm-1.3.0/modules/objfmts/dbg/dbg-objfmt.c new file mode 100644 index 0000000000..bdf403c762 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/dbg/dbg-objfmt.c @@ -0,0 +1,183 @@ +/* + * Debugging object format (used to debug object format module interface) + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + + +typedef struct yasm_objfmt_dbg { + yasm_objfmt_base objfmt; /* base structure */ + + FILE *dbgfile; +} yasm_objfmt_dbg; + +yasm_objfmt_module yasm_dbg_LTX_objfmt; + + +static yasm_objfmt * +dbg_objfmt_create(yasm_object *object) +{ + yasm_objfmt_dbg *objfmt_dbg = yasm_xmalloc(sizeof(yasm_objfmt_dbg)); + + objfmt_dbg->objfmt.module = &yasm_dbg_LTX_objfmt; + + objfmt_dbg->dbgfile = tmpfile(); + if (!objfmt_dbg->dbgfile) { + fprintf(stderr, N_("could not open temporary file")); + return 0; + } + fprintf(objfmt_dbg->dbgfile, "create()\n"); + return (yasm_objfmt *)objfmt_dbg; +} + +static void +dbg_objfmt_output(yasm_object *object, FILE *f, int all_syms, + yasm_errwarns *errwarns) +{ + yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; + char buf[1024]; + size_t i; + + /* Copy temp file to real output file */ + rewind(objfmt_dbg->dbgfile); + while ((i = fread(buf, 1, 1024, objfmt_dbg->dbgfile))) { + if (fwrite(buf, 1, i, f) != i) + break; + } + + /* Reassign objfmt debug file to output file */ + fclose(objfmt_dbg->dbgfile); + objfmt_dbg->dbgfile = f; + + fprintf(objfmt_dbg->dbgfile, "output(f, object->\n"); + yasm_object_print(object, objfmt_dbg->dbgfile, 1); + fprintf(objfmt_dbg->dbgfile, "%d)\n", all_syms); + fprintf(objfmt_dbg->dbgfile, " Symbol Table:\n"); + yasm_symtab_print(object->symtab, objfmt_dbg->dbgfile, 1); +} + +static void +dbg_objfmt_destroy(yasm_objfmt *objfmt) +{ + yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)objfmt; + fprintf(objfmt_dbg->dbgfile, "destroy()\n"); + yasm_xfree(objfmt); +} + +static void +dbg_objfmt_init_new_section(yasm_section *sect, unsigned long line) +{ + yasm_object *object = yasm_section_get_object(sect); + yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; + fprintf(objfmt_dbg->dbgfile, "init_new_section(\"%s\", %lu)\n", + yasm_section_get_name(sect), line); + yasm_symtab_define_label(object->symtab, ".text", + yasm_section_bcs_first(sect), 1, 0); +} + +static yasm_section * +dbg_objfmt_add_default_section(yasm_object *object) +{ + yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; + yasm_section *retval; + int isnew; + + fprintf(objfmt_dbg->dbgfile, "add_default_section()\n"); + retval = yasm_object_get_general(object, ".text", 0, 0, 0, &isnew, 0); + if (isnew) { + yasm_section_set_default(retval, 1); + } + return retval; +} + +static /*@observer@*/ /*@null@*/ yasm_section * +dbg_objfmt_section_switch(yasm_object *object, yasm_valparamhead *valparams, + /*@unused@*/ /*@null@*/ + yasm_valparamhead *objext_valparams, + unsigned long line) +{ + yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; + yasm_valparam *vp; + yasm_section *retval; + int isnew; + + fprintf(objfmt_dbg->dbgfile, "section_switch(headp, "); + yasm_vps_print(valparams, objfmt_dbg->dbgfile); + fprintf(objfmt_dbg->dbgfile, ", "); + yasm_vps_print(objext_valparams, objfmt_dbg->dbgfile); + fprintf(objfmt_dbg->dbgfile, ", %lu), returning ", line); + + vp = yasm_vps_first(valparams); + if (!yasm_vp_string(vp)) { + fprintf(objfmt_dbg->dbgfile, "NULL\n"); + return NULL; + } + retval = yasm_object_get_general(object, yasm_vp_string(vp), 0, 0, 0, + &isnew, line); + if (isnew) { + fprintf(objfmt_dbg->dbgfile, "(new) "); + } + yasm_section_set_default(retval, 0); + fprintf(objfmt_dbg->dbgfile, "\"%s\" section\n", vp->val); + return retval; +} + +static /*@observer@*/ /*@null@*/ yasm_symrec * +dbg_objfmt_get_special_sym(yasm_object *object, const char *name, + const char *parser) +{ + yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; + fprintf(objfmt_dbg->dbgfile, "get_special_sym(object, \"%s\", \"%s\")\n", + name, parser); + return NULL; +} + +/* Define valid debug formats to use with this object format */ +static const char *dbg_objfmt_dbgfmt_keywords[] = { + "null", + NULL +}; + +/* Define objfmt structure -- see objfmt.h for details */ +yasm_objfmt_module yasm_dbg_LTX_objfmt = { + "Trace of all info passed to object format module", + "dbg", + "dbg", + 32, + 0, + dbg_objfmt_dbgfmt_keywords, + "null", + NULL, /* no directives */ + NULL, /* no standard macros */ + dbg_objfmt_create, + dbg_objfmt_output, + dbg_objfmt_destroy, + dbg_objfmt_add_default_section, + dbg_objfmt_init_new_section, + dbg_objfmt_section_switch, + dbg_objfmt_get_special_sym +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/CMakeLists.txt new file mode 100644 index 0000000000..444e9a8b16 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/CMakeLists.txt @@ -0,0 +1,10 @@ +YASM_ADD_MODULE(objfmt_elf + objfmts/elf/elf.c + objfmts/elf/elf-objfmt.c + objfmts/elf/elf-x86-x86.c + objfmts/elf/elf-x86-amd64.c + objfmts/elf/elf-x86-x32.c + ) +list(APPEND YASM_MODULES objfmt_elf32) +list(APPEND YASM_MODULES objfmt_elf64) +list(APPEND YASM_MODULES objfmt_elfx32) diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/Makefile.inc new file mode 100644 index 0000000000..5465765784 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/Makefile.inc @@ -0,0 +1,13 @@ +libyasm_a_SOURCES += modules/objfmts/elf/elf.c +libyasm_a_SOURCES += modules/objfmts/elf/elf.h +libyasm_a_SOURCES += modules/objfmts/elf/elf-objfmt.c +libyasm_a_SOURCES += modules/objfmts/elf/elf-machine.h +libyasm_a_SOURCES += modules/objfmts/elf/elf-x86-x86.c +libyasm_a_SOURCES += modules/objfmts/elf/elf-x86-amd64.c +libyasm_a_SOURCES += modules/objfmts/elf/elf-x86-x32.c + +YASM_MODULES += objfmt_elf objfmt_elf32 objfmt_elf64 objfmt_elfx32 + +EXTRA_DIST += modules/objfmts/elf/tests/Makefile.inc + +include modules/objfmts/elf/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-machine.h b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-machine.h new file mode 100644 index 0000000000..ea6cb4ec94 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-machine.h @@ -0,0 +1,108 @@ +/* + * ELF object machine specific format helpers + * + * Copyright (C) 2004-2007 Michael Urman + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + */ + +#ifndef ELF_MACHINE_H_INCLUDED +#define ELF_MACHINE_H_INCLUDED + +#define YASM_WRITE_32I_L(p, i) do {\ + assert(yasm_intnum_check_size(i, 32, 0, 2)); \ + yasm_intnum_get_sized(i, p, 4, 32, 0, 0, 0); \ + p += 4; } while (0) + +#define YASM_WRITE_64I_L(p, i) do {\ + assert(yasm_intnum_check_size(i, 64, 0, 2)); \ + yasm_intnum_get_sized(i, p, 8, 64, 0, 0, 0); \ + p += 8; } while (0) + +#define YASM_WRITE_64C_L(p, hi, lo) do {\ + YASM_WRITE_32_L(p, lo); \ + YASM_WRITE_32_L(p, hi); } while (0) + +#define YASM_WRITE_64Z_L(p, i) YASM_WRITE_64C_L(p, 0, i) + +typedef int(*func_accepts_reloc)(size_t val, yasm_symrec *wrt); +typedef void(*func_write_symtab_entry)(unsigned char *bufp, + elf_symtab_entry *entry, + yasm_intnum *value_intn, + yasm_intnum *size_intn); +typedef void(*func_write_secthead)(unsigned char *bufp, elf_secthead *shead); +typedef void(*func_write_secthead_rel)(unsigned char *bufp, + elf_secthead *shead, + elf_section_index symtab_idx, + elf_section_index sindex); + +typedef void(*func_handle_reloc_addend)(yasm_intnum *intn, + elf_reloc_entry *reloc, + unsigned long offset); +typedef unsigned int(*func_map_reloc_info_to_type)(elf_reloc_entry *reloc); +typedef void(*func_write_reloc)(unsigned char *bufp, + elf_reloc_entry *reloc, + unsigned int r_type, + unsigned int r_sym); +typedef void (*func_write_proghead)(unsigned char **bufpp, + elf_offset secthead_addr, + unsigned long secthead_count, + elf_section_index shstrtab_index); + +enum { + ELF_SSYM_SYM_RELATIVE = 1 << 0, + ELF_SSYM_CURPOS_ADJUST = 1 << 1, + ELF_SSYM_THREAD_LOCAL = 1 << 2 +}; + +typedef struct { + const char *name; /* should be something like ..name */ + const int sym_rel; /* symbol or section-relative? */ + const unsigned int reloc; /* relocation type */ + const unsigned int size; /* legal data size */ +} elf_machine_ssym; + +struct elf_machine_handler { + const char *arch; + const char *machine; + const char *reloc_section_prefix; + const unsigned long symtab_entry_size; + const unsigned long symtab_entry_align; + const unsigned long reloc_entry_size; + const unsigned long secthead_size; + const unsigned long proghead_size; + func_accepts_reloc accepts_reloc; + func_write_symtab_entry write_symtab_entry; + func_write_secthead write_secthead; + func_write_secthead_rel write_secthead_rel; + func_handle_reloc_addend handle_reloc_addend; + func_map_reloc_info_to_type map_reloc_info_to_type; + func_write_reloc write_reloc; + func_write_proghead write_proghead; + + elf_machine_ssym *ssyms; /* array of "special" syms */ + const size_t num_ssyms; /* size of array */ + + const int bits; /* usually 32 or 64 */ +}; + +#endif /* ELF_MACHINE_H_INCLUDED */ diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-objfmt.c b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-objfmt.c new file mode 100644 index 0000000000..0c3a142639 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-objfmt.c @@ -0,0 +1,1393 @@ +/* + * ELF object format + * + * Copyright (C) 2003-2007 Michael Urman + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +/* Notes + * + * elf-objfmt uses the "linking" view of an ELF file: + * ELF header, an optional program header table, several sections, + * and a section header table + * + * The ELF header tells us some overall program information, + * where to find the PHT (if it exists) with phnum and phentsize, + * and where to find the SHT with shnum and shentsize + * + * The PHT doesn't seem to be generated by NASM for elftest.asm + * + * The SHT + * + * Each Section is spatially disjoint, and has exactly one SHT entry. + */ + +#include + +#include "elf.h" +#include "elf-machine.h" + +typedef struct yasm_objfmt_elf { + yasm_objfmt_base objfmt; /* base structure */ + + elf_symtab_head* elf_symtab; /* symbol table of indexed syms */ + elf_strtab_head* shstrtab; /* section name strtab */ + elf_strtab_head* strtab; /* strtab entries */ + + elf_strtab_entry *file_strtab_entry;/* .file symbol associated string */ + yasm_symrec *dotdotsym; /* ..sym symbol */ +} yasm_objfmt_elf; + +typedef struct { + yasm_objfmt_elf *objfmt_elf; + yasm_errwarns *errwarns; + FILE *f; + elf_secthead *shead; + yasm_section *sect; + yasm_object *object; + unsigned long sindex; + yasm_symrec *GOT_sym; +} elf_objfmt_output_info; + +typedef struct { + yasm_object *object; + yasm_objfmt_elf *objfmt_elf; + yasm_errwarns *errwarns; + int local_names; +} build_symtab_info; + +yasm_objfmt_module yasm_elf_LTX_objfmt; +yasm_objfmt_module yasm_elf32_LTX_objfmt; +yasm_objfmt_module yasm_elf64_LTX_objfmt; +yasm_objfmt_module yasm_elfx32_LTX_objfmt; + + +static elf_symtab_entry * +elf_objfmt_symtab_append(yasm_objfmt_elf *objfmt_elf, yasm_symrec *sym, + elf_section_index sectidx, elf_symbol_binding bind, + elf_symbol_type type, elf_symbol_vis vis, + yasm_expr *size, elf_address *value, + yasm_object *object) +{ + elf_symtab_entry *entry = yasm_symrec_get_data(sym, &elf_symrec_data); + + if (!entry) { + /*@only@*/ char *symname = yasm_symrec_get_global_name(sym, object); + elf_strtab_entry *name = + elf_strtab_append_str(objfmt_elf->strtab, symname); + yasm_xfree(symname); + entry = elf_symtab_entry_create(name, sym); + yasm_symrec_add_data(sym, &elf_symrec_data, entry); + } + + /* Only append to table if not already appended */ + if (!elf_sym_in_table(entry)) + elf_symtab_append_entry(objfmt_elf->elf_symtab, entry); + + elf_symtab_set_nonzero(entry, NULL, sectidx, bind, type, size, value); + elf_sym_set_visibility(entry, vis); + + return entry; +} + +static elf_symtab_entry * +build_extern(yasm_objfmt_elf *objfmt_elf, yasm_symrec *sym, yasm_object *object) +{ + yasm_valparamhead *objext_valparams = + yasm_symrec_get_objext_valparams(sym); + + if (objext_valparams) { + yasm_valparam *vp = yasm_vps_first(objext_valparams); + for (; vp; vp = yasm_vps_next(vp)) { + if (yasm_vp_string(vp)) + yasm_error_set(YASM_ERROR_TYPE, + N_("unrecognized symbol type `%s'"), + yasm_vp_string(vp)); + } + } + + return elf_objfmt_symtab_append(objfmt_elf, sym, SHN_UNDEF, STB_GLOBAL, 0, + STV_DEFAULT, NULL, NULL, object); +} + +struct elf_build_global_data { + yasm_expr *size; + unsigned long type; /* elf_symbol_type */ + elf_symbol_vis vis; + unsigned int vis_overrides; +}; + +static int +elf_global_helper_valparam(void *obj, yasm_valparam *vp, unsigned long line, + void *d) + +{ + struct elf_build_global_data *data = (struct elf_build_global_data *)d; + const char *s; + + if (!vp->val && (s = yasm_vp_id(vp))) { + yasm_error_set(YASM_ERROR_TYPE, N_("unrecognized symbol type `%s'"), + s); + return -1; + } else if (!vp->val && vp->type == YASM_PARAM_EXPR && !data->size) { + data->size = yasm_expr_copy(vp->param.e); + return 0; + } else + return yasm_dir_helper_valparam_warn(obj, vp, line, d); +} + +static int +elf_global_helper_vis(void *obj, yasm_valparam *vp, unsigned long line, + void *d, uintptr_t vis) +{ + struct elf_build_global_data *data = (struct elf_build_global_data *)d; + data->vis = vis; + data->vis_overrides++; + return 0; +} + + +static elf_symtab_entry * +build_global(yasm_objfmt_elf *objfmt_elf, yasm_symrec *sym, yasm_object *object) +{ + yasm_valparamhead *objext_valparams = + yasm_symrec_get_objext_valparams(sym); + + struct elf_build_global_data data; + + static const yasm_dir_help help[] = { + { "function", 0, yasm_dir_helper_flag_set, + offsetof(struct elf_build_global_data, type), STT_FUNC }, + { "data", 0, yasm_dir_helper_flag_set, + offsetof(struct elf_build_global_data, type), STT_OBJECT }, + { "object", 0, yasm_dir_helper_flag_set, + offsetof(struct elf_build_global_data, type), STT_OBJECT }, + { "internal", 0, elf_global_helper_vis, 0, STV_INTERNAL }, + { "hidden", 0, elf_global_helper_vis, 0, STV_HIDDEN }, + { "protected", 0, elf_global_helper_vis, 0, STV_PROTECTED }, + }; + + data.size = NULL; + data.type = 0; + data.vis = STV_DEFAULT; + data.vis_overrides = 0; + + if (objext_valparams) + yasm_dir_helper(sym, yasm_vps_first(objext_valparams), + yasm_symrec_get_decl_line(sym), help, NELEMS(help), + &data, elf_global_helper_valparam); + + if (data.vis_overrides > 1) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("More than one symbol visibility provided; using last")); + } + + return elf_objfmt_symtab_append(objfmt_elf, sym, SHN_UNDEF, STB_GLOBAL, + data.type, data.vis, data.size, NULL, + object); +} + +static /*@null@*/ elf_symtab_entry * +build_common(yasm_objfmt_elf *objfmt_elf, yasm_symrec *sym, yasm_object *object) +{ + yasm_expr **size = yasm_symrec_get_common_size(sym); + yasm_valparamhead *objext_valparams = + yasm_symrec_get_objext_valparams(sym); + unsigned long addralign = 0; + + if (objext_valparams) { + yasm_valparam *vp = yasm_vps_first(objext_valparams); + for (; vp; vp = yasm_vps_next(vp)) { + if (!vp->val) { + /*@only@*/ /*@null@*/ yasm_expr *align_expr; + /*@dependent@*/ /*@null@*/ const yasm_intnum *align_intn; + + if (!(align_expr = yasm_vp_expr(vp, object->symtab, + yasm_symrec_get_def_line(sym))) + || !(align_intn = yasm_expr_get_intnum(&align_expr, 0))) { + yasm_error_set(YASM_ERROR_VALUE, + N_("alignment constraint is not an integer")); + if (align_expr) + yasm_expr_destroy(align_expr); + return NULL; + } + addralign = yasm_intnum_get_uint(align_intn); + yasm_expr_destroy(align_expr); + + /* Alignments must be a power of two. */ + if (!is_exp2(addralign)) { + yasm_error_set(YASM_ERROR_VALUE, + N_("alignment constraint is not a power of two")); + return NULL; + } + } else + yasm_warn_set(YASM_WARN_GENERAL, + N_("Unrecognized qualifier `%s'"), vp->val); + } + } + + return elf_objfmt_symtab_append(objfmt_elf, sym, SHN_COMMON, STB_GLOBAL, + 0, STV_DEFAULT, *size, &addralign, object); +} + +static int +elf_objfmt_build_symtab(yasm_symrec *sym, /*@null@*/ void *d) +{ + build_symtab_info *info = (build_symtab_info *)d; + yasm_sym_vis vis = yasm_symrec_get_visibility(sym); + yasm_sym_status status = yasm_symrec_get_status(sym); + elf_symtab_entry *entry = yasm_symrec_get_data(sym, &elf_symrec_data); + elf_address value=0; + yasm_section *sect=NULL; + yasm_bytecode *precbc=NULL; + + assert(info != NULL); + + if (vis & YASM_SYM_EXTERN) { + entry = build_extern(info->objfmt_elf, sym, info->object); + yasm_errwarn_propagate(info->errwarns, + yasm_symrec_get_decl_line(sym)); + return 0; + } + + if (vis & YASM_SYM_COMMON) { + entry = build_common(info->objfmt_elf, sym, info->object); + yasm_errwarn_propagate(info->errwarns, + yasm_symrec_get_decl_line(sym)); + /* If the COMMON variable was actually defined, fall through. */ + if (!(status & YASM_SYM_DEFINED)) + return 0; + } + + /* Ignore any undefined at this point. */ + if (!(status & YASM_SYM_DEFINED)) + return 0; + + if (!yasm_symrec_get_label(sym, &precbc)) { + if (!yasm_symrec_get_equ(sym) && !yasm_symrec_is_abs(sym)) + return 0; + precbc = NULL; + } + + if (precbc) + sect = yasm_bc_get_section(precbc); + + if (entry && elf_sym_in_table(entry)) + ; + else if (vis & YASM_SYM_GLOBAL) { + entry = build_global(info->objfmt_elf, sym, info->object); + yasm_errwarn_propagate(info->errwarns, yasm_symrec_get_decl_line(sym)); + } else { + int is_sect = 0; + + /* Locals (except when debugging) do not need to be + * in the symbol table, unless they're a section. + */ + if (sect && + strcmp(yasm_symrec_get_name(sym), yasm_section_get_name(sect))==0) + is_sect = 1; +#if 0 + /* FIXME: to enable this we must have handling in place for special + * symbols. + */ + if (!info->local_names && !is_sect) + return 0; +#else + if (yasm_symrec_get_equ(sym) && !yasm_symrec_is_abs(sym)) + return 0; +#endif + entry = yasm_symrec_get_data(sym, &elf_symrec_data); + if (!entry) { + /*@only@*/ char *symname = + yasm_symrec_get_global_name(sym, info->object); + elf_strtab_entry *name = !info->local_names || is_sect ? NULL : + elf_strtab_append_str(info->objfmt_elf->strtab, symname); + yasm_xfree(symname); + entry = elf_symtab_entry_create(name, sym); + yasm_symrec_add_data(sym, &elf_symrec_data, entry); + } + + if (!elf_sym_in_table(entry)) + elf_symtab_insert_local_sym(info->objfmt_elf->elf_symtab, entry); + + elf_symtab_set_nonzero(entry, sect, 0, STB_LOCAL, + is_sect ? STT_SECTION : 0, NULL, 0); + + if (is_sect) + return 0; + } + + if (precbc) + value = yasm_bc_next_offset(precbc); + elf_symtab_set_nonzero(entry, sect, 0, 0, 0, NULL, &value); + + return 0; +} + +static yasm_objfmt * +elf_objfmt_create_common(yasm_object *object, yasm_objfmt_module *module, + int bits_pref, + const elf_machine_handler **elf_march_out) +{ + yasm_objfmt_elf *objfmt_elf = yasm_xmalloc(sizeof(yasm_objfmt_elf)); + yasm_symrec *filesym; + elf_symtab_entry *entry; + const elf_machine_handler *elf_march; + + objfmt_elf->objfmt.module = module; + elf_march = elf_set_arch(object->arch, object->symtab, bits_pref); + if (!elf_march) { + yasm_xfree(objfmt_elf); + return NULL; + } + if (elf_march_out) + *elf_march_out = elf_march; + + objfmt_elf->shstrtab = elf_strtab_create(); + objfmt_elf->strtab = elf_strtab_create(); + objfmt_elf->elf_symtab = elf_symtab_create(); + + /* FIXME: misuse of NULL bytecode here; it works, but only barely. */ + filesym = yasm_symtab_define_label(object->symtab, ".file", NULL, 0, 0); + /* Put in current input filename; we'll replace it in output() */ + objfmt_elf->file_strtab_entry = + elf_strtab_append_str(objfmt_elf->strtab, object->src_filename); + entry = elf_symtab_entry_create(objfmt_elf->file_strtab_entry, filesym); + yasm_symrec_add_data(filesym, &elf_symrec_data, entry); + elf_symtab_set_nonzero(entry, NULL, SHN_ABS, STB_LOCAL, STT_FILE, NULL, + NULL); + elf_symtab_append_entry(objfmt_elf->elf_symtab, entry); + + /* FIXME: misuse of NULL bytecode */ + objfmt_elf->dotdotsym = + yasm_symtab_define_label(object->symtab, "..sym", NULL, 0, 0); + + return (yasm_objfmt *)objfmt_elf; +} + +static yasm_objfmt * +elf_objfmt_create(yasm_object *object) +{ + const elf_machine_handler *elf_march; + yasm_objfmt *objfmt; + yasm_objfmt_elf *objfmt_elf; + + objfmt = elf_objfmt_create_common(object, &yasm_elf_LTX_objfmt, 0, + &elf_march); + if (objfmt) { + objfmt_elf = (yasm_objfmt_elf *)objfmt; + /* Figure out which bitness of object format to use */ + if (strcmp (elf_march->machine, "x32") == 0) + objfmt_elf->objfmt.module = &yasm_elfx32_LTX_objfmt; + else if (elf_march->bits == 32) + objfmt_elf->objfmt.module = &yasm_elf32_LTX_objfmt; + else if (elf_march->bits == 64) + objfmt_elf->objfmt.module = &yasm_elf64_LTX_objfmt; + } + return objfmt; +} + +static yasm_objfmt * +elf32_objfmt_create(yasm_object *object) +{ + return elf_objfmt_create_common(object, &yasm_elf32_LTX_objfmt, 32, NULL); +} + +static yasm_objfmt * +elf64_objfmt_create(yasm_object *object) +{ + return elf_objfmt_create_common(object, &yasm_elf64_LTX_objfmt, 64, NULL); +} + +static yasm_objfmt * +elfx32_objfmt_create(yasm_object *object) +{ + return elf_objfmt_create_common(object, &yasm_elfx32_LTX_objfmt, 32, NULL); +} + +static long +elf_objfmt_output_align(FILE *f, unsigned int align) +{ + long pos; + unsigned long delta; + if (!is_exp2(align)) + yasm_internal_error("requested alignment not a power of two"); + + pos = ftell(f); + if (pos == -1) { + yasm_error_set(YASM_ERROR_IO, + N_("could not get file position on output file")); + return -1; + } + delta = align - (pos & (align-1)); + if (delta != align) { + pos += delta; + if (fseek(f, pos, SEEK_SET) < 0) { + yasm_error_set(YASM_ERROR_IO, + N_("could not set file position on output file")); + return -1; + } + } + return pos; +} + +static int +elf_objfmt_output_reloc(yasm_symrec *sym, yasm_bytecode *bc, + unsigned char *buf, unsigned int destsize, + unsigned int valsize, int warn, void *d) +{ + elf_reloc_entry *reloc; + elf_objfmt_output_info *info = d; + yasm_intnum *zero; + int retval; + + reloc = elf_reloc_entry_create(sym, NULL, + yasm_intnum_create_uint(bc->offset), 0, valsize, 0); + if (reloc == NULL) { + yasm_error_set(YASM_ERROR_TYPE, N_("elf: invalid relocation size")); + return 1; + } + /* allocate .rel[a] sections on a need-basis */ + elf_secthead_append_reloc(info->sect, info->shead, reloc); + + zero = yasm_intnum_create_uint(0); + elf_handle_reloc_addend(zero, reloc, 0); + retval = yasm_arch_intnum_tobytes(info->object->arch, zero, buf, destsize, + valsize, 0, bc, warn); + yasm_intnum_destroy(zero); + return retval; +} + +static int +elf_objfmt_output_value(yasm_value *value, unsigned char *buf, + unsigned int destsize, unsigned long offset, + yasm_bytecode *bc, int warn, /*@null@*/ void *d) +{ + /*@null@*/ elf_objfmt_output_info *info = (elf_objfmt_output_info *)d; + /*@dependent@*/ /*@null@*/ yasm_intnum *intn; + unsigned long intn_val; + /*@null@*/ elf_reloc_entry *reloc = NULL; + int retval; + unsigned int valsize = value->size; + + if (info == NULL) + yasm_internal_error("null info struct"); + + if (value->abs) + value->abs = yasm_expr_simplify(value->abs, 1); + + /* Try to output constant and PC-relative section-local first. + * Note this does NOT output any value with a SEG, WRT, external, + * cross-section, or non-PC-relative reference (those are handled below). + */ + switch (yasm_value_output_basic(value, buf, destsize, bc, warn, + info->object->arch)) { + case -1: + return 1; + case 0: + break; + default: + return 0; + } + + /* Handle other expressions, with relocation if necessary */ + if (value->seg_of || value->section_rel || value->rshift > 0) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("elf: relocation too complex")); + return 1; + } + + intn_val = 0; + if (value->rel) { + yasm_sym_vis vis = yasm_symrec_get_visibility(value->rel); + /*@dependent@*/ /*@null@*/ yasm_symrec *sym = value->rel; + /*@dependent@*/ /*@null@*/ yasm_symrec *wrt = value->wrt; + + if (wrt == info->objfmt_elf->dotdotsym) + wrt = NULL; + else if (wrt && elf_is_wrt_sym_relative(wrt)) + ; + else if (wrt && elf_is_wrt_pos_adjusted(wrt)) + intn_val = offset + bc->offset; + else if (vis == YASM_SYM_LOCAL) { + yasm_bytecode *sym_precbc; + /* Local symbols need relocation to their section's start, and + * add in the offset of the bytecode (within the target section) + * into the abs portion. + * + * This is only done if the symbol is relocated against the + * section instead of the symbol itself. + */ + if (yasm_symrec_get_label(sym, &sym_precbc)) { + /* Relocate to section start */ + yasm_section *sym_sect = yasm_bc_get_section(sym_precbc); + /*@null@*/ elf_secthead *sym_shead; + sym_shead = yasm_section_get_data(sym_sect, &elf_section_data); + assert(sym_shead != NULL); + sym = elf_secthead_get_sym(sym_shead); + + intn_val = yasm_bc_next_offset(sym_precbc); + } + } + + /* For PC-relative, need to add offset of expression within bc. */ + if (value->curpos_rel) + intn_val += offset; + + /* Check for _GLOBAL_OFFSET_TABLE_ symbol reference */ + reloc = elf_reloc_entry_create(sym, wrt, + yasm_intnum_create_uint(bc->offset + offset), value->curpos_rel, + valsize, sym == info->GOT_sym); + if (reloc == NULL) { + yasm_error_set(YASM_ERROR_TYPE, + N_("elf: invalid relocation (WRT or size)")); + return 1; + } + /* allocate .rel[a] sections on a need-basis */ + elf_secthead_append_reloc(info->sect, info->shead, reloc); + } + + intn = yasm_intnum_create_uint(intn_val); + + if (value->abs) { + yasm_intnum *intn2 = yasm_expr_get_intnum(&value->abs, 0); + if (!intn2) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("elf: relocation too complex")); + yasm_intnum_destroy(intn); + return 1; + } + yasm_intnum_calc(intn, YASM_EXPR_ADD, intn2); + } + + if (reloc) + elf_handle_reloc_addend(intn, reloc, offset); + retval = yasm_arch_intnum_tobytes(info->object->arch, intn, buf, destsize, + valsize, 0, bc, warn); + yasm_intnum_destroy(intn); + return retval; +} + +static int +elf_objfmt_output_bytecode(yasm_bytecode *bc, /*@null@*/ void *d) +{ + /*@null@*/ elf_objfmt_output_info *info = (elf_objfmt_output_info *)d; + unsigned char buf[256]; + /*@null@*/ /*@only@*/ unsigned char *bigbuf; + unsigned long size = 256; + int gap; + + if (info == NULL) + yasm_internal_error("null info struct"); + + bigbuf = yasm_bc_tobytes(bc, buf, &size, &gap, info, + elf_objfmt_output_value, elf_objfmt_output_reloc); + + /* Don't bother doing anything else if size ended up being 0. */ + if (size == 0) { + if (bigbuf) + yasm_xfree(bigbuf); + return 0; + } + else { + yasm_intnum *bcsize = yasm_intnum_create_uint(size); + elf_secthead_add_size(info->shead, bcsize); + yasm_intnum_destroy(bcsize); + } + + /* Warn that gaps are converted to 0 and write out the 0's. */ + if (gap) { + unsigned long left; + yasm_warn_set(YASM_WARN_UNINIT_CONTENTS, + N_("uninitialized space declared in code/data section: zeroing")); + /* Write out in chunks */ + memset(buf, 0, 256); + left = size; + while (left > 256) { + fwrite(buf, 256, 1, info->f); + left -= 256; + } + fwrite(buf, left, 1, info->f); + } else { + /* Output buf (or bigbuf if non-NULL) to file */ + fwrite(bigbuf ? bigbuf : buf, (size_t)size, 1, info->f); + } + + /* If bigbuf was allocated, free it */ + if (bigbuf) + yasm_xfree(bigbuf); + + return 0; +} + +static int +elf_objfmt_output_section(yasm_section *sect, /*@null@*/ void *d) +{ + /*@null@*/ elf_objfmt_output_info *info = (elf_objfmt_output_info *)d; + /*@dependent@*/ /*@null@*/ elf_secthead *shead; + long pos; + char *relname; + const char *sectname; + + if (info == NULL) + yasm_internal_error("null info struct"); + shead = yasm_section_get_data(sect, &elf_section_data); + if (shead == NULL) + yasm_internal_error("no associated data"); + + if (elf_secthead_get_align(shead) == 0) + elf_secthead_set_align(shead, yasm_section_get_align(sect)); + + /* don't output header-only sections */ + if ((elf_secthead_get_type(shead) & SHT_NOBITS) == SHT_NOBITS) + { + yasm_bytecode *last = yasm_section_bcs_last(sect); + if (last) { + yasm_intnum *sectsize; + sectsize = yasm_intnum_create_uint(yasm_bc_next_offset(last)); + elf_secthead_add_size(shead, sectsize); + yasm_intnum_destroy(sectsize); + } + elf_secthead_set_index(shead, ++info->sindex); + return 0; + } + + if ((pos = ftell(info->f)) == -1) { + yasm_error_set(YASM_ERROR_IO, + N_("couldn't read position on output stream")); + yasm_errwarn_propagate(info->errwarns, 0); + } + pos = elf_secthead_set_file_offset(shead, pos); + if (fseek(info->f, pos, SEEK_SET) < 0) { + yasm_error_set(YASM_ERROR_IO, N_("couldn't seek on output stream")); + yasm_errwarn_propagate(info->errwarns, 0); + } + + info->sect = sect; + info->shead = shead; + yasm_section_bcs_traverse(sect, info->errwarns, info, + elf_objfmt_output_bytecode); + + elf_secthead_set_index(shead, ++info->sindex); + + /* No relocations to output? Go on to next section */ + if (elf_secthead_write_relocs_to_file(info->f, sect, shead, + info->errwarns) == 0) + return 0; + elf_secthead_set_rel_index(shead, ++info->sindex); + + /* name the relocation section .rel[a].foo */ + sectname = yasm_section_get_name(sect); + relname = elf_secthead_name_reloc_section(sectname); + elf_secthead_set_rel_name(shead, + elf_strtab_append_str(info->objfmt_elf->shstrtab, relname)); + yasm_xfree(relname); + + return 0; +} + +static int +elf_objfmt_output_secthead(yasm_section *sect, /*@null@*/ void *d) +{ + /*@null@*/ elf_objfmt_output_info *info = (elf_objfmt_output_info *)d; + /*@dependent@*/ /*@null@*/ elf_secthead *shead; + + if (info == NULL) + yasm_internal_error("null info struct"); + shead = yasm_section_get_data(sect, &elf_section_data); + if (shead == NULL) + yasm_internal_error("no section header attached to section"); + + if(elf_secthead_write_to_file(info->f, shead, info->sindex+1)) + info->sindex++; + + /* output strtab headers here? */ + + /* relocation entries for .foo are stored in section .rel[a].foo */ + if(elf_secthead_write_rel_to_file(info->f, 3, sect, shead, + info->sindex+1)) + info->sindex++; + + return 0; +} + +static void +elf_objfmt_output(yasm_object *object, FILE *f, int all_syms, + yasm_errwarns *errwarns) +{ + yasm_objfmt_elf *objfmt_elf = (yasm_objfmt_elf *)object->objfmt; + elf_objfmt_output_info info; + build_symtab_info buildsym_info; + long pos; + unsigned long elf_shead_addr; + elf_secthead *esdn; + unsigned long elf_strtab_offset, elf_shstrtab_offset, elf_symtab_offset; + unsigned long elf_strtab_size, elf_shstrtab_size, elf_symtab_size; + elf_strtab_entry *elf_strtab_name, *elf_shstrtab_name, *elf_symtab_name; + unsigned long elf_symtab_nlocal; + + info.object = object; + info.objfmt_elf = objfmt_elf; + info.errwarns = errwarns; + info.f = f; + info.GOT_sym = yasm_symtab_get(object->symtab, "_GLOBAL_OFFSET_TABLE_"); + + /* Update filename strtab */ + elf_strtab_entry_set_str(objfmt_elf->file_strtab_entry, + object->src_filename); + + /* Allocate space for Ehdr by seeking forward */ + if (fseek(f, (long)(elf_proghead_get_size()), SEEK_SET) < 0) { + yasm_error_set(YASM_ERROR_IO, N_("could not seek on output file")); + yasm_errwarn_propagate(errwarns, 0); + return; + } + + /* add all (local) syms to symtab because relocation needs a symtab index + * if all_syms, register them by name. if not, use strtab entry 0 */ + buildsym_info.object = object; + buildsym_info.objfmt_elf = objfmt_elf; + buildsym_info.errwarns = errwarns; + buildsym_info.local_names = all_syms; + yasm_symtab_traverse(object->symtab, &buildsym_info, + elf_objfmt_build_symtab); + elf_symtab_nlocal = elf_symtab_assign_indices(objfmt_elf->elf_symtab); + + /* output known sections - includes reloc sections which aren't in yasm's + * list. Assign indices as we go. */ + info.sindex = 3; + if (yasm_object_sections_traverse(object, &info, + elf_objfmt_output_section)) + return; + + /* add final sections to the shstrtab */ + elf_strtab_name = elf_strtab_append_str(objfmt_elf->shstrtab, ".strtab"); + elf_symtab_name = elf_strtab_append_str(objfmt_elf->shstrtab, ".symtab"); + elf_shstrtab_name = elf_strtab_append_str(objfmt_elf->shstrtab, + ".shstrtab"); + + /* output .shstrtab */ + if ((pos = elf_objfmt_output_align(f, 4)) == -1) { + yasm_errwarn_propagate(errwarns, 0); + return; + } + elf_shstrtab_offset = (unsigned long) pos; + elf_shstrtab_size = elf_strtab_output_to_file(f, objfmt_elf->shstrtab); + + /* output .strtab */ + if ((pos = elf_objfmt_output_align(f, 4)) == -1) { + yasm_errwarn_propagate(errwarns, 0); + return; + } + elf_strtab_offset = (unsigned long) pos; + elf_strtab_size = elf_strtab_output_to_file(f, objfmt_elf->strtab); + + /* output .symtab - last section so all others have indexes */ + if ((pos = elf_objfmt_output_align(f, 4)) == -1) { + yasm_errwarn_propagate(errwarns, 0); + return; + } + elf_symtab_offset = (unsigned long) pos; + elf_symtab_size = elf_symtab_write_to_file(f, objfmt_elf->elf_symtab, + errwarns); + + /* output section header table */ + if ((pos = elf_objfmt_output_align(f, 16)) == -1) { + yasm_errwarn_propagate(errwarns, 0); + return; + } + elf_shead_addr = (unsigned long) pos; + + /* stabs debugging support */ + if (strcmp(yasm_dbgfmt_keyword(object->dbgfmt), "stabs")==0) { + yasm_section *stabsect = yasm_object_find_general(object, ".stab"); + yasm_section *stabstrsect = + yasm_object_find_general(object, ".stabstr"); + if (stabsect && stabstrsect) { + elf_secthead *stab = + yasm_section_get_data(stabsect, &elf_section_data); + elf_secthead *stabstr = + yasm_section_get_data(stabstrsect, &elf_section_data); + if (stab && stabstr) { + elf_secthead_set_link(stab, elf_secthead_get_index(stabstr)); + } + else + yasm_internal_error(N_("missing .stab or .stabstr section/data")); + } + } + + /* output dummy section header - 0 */ + info.sindex = 0; + + esdn = elf_secthead_create(NULL, SHT_NULL, 0, 0, 0); + elf_secthead_set_index(esdn, 0); + elf_secthead_write_to_file(f, esdn, 0); + elf_secthead_destroy(esdn); + + esdn = elf_secthead_create(elf_shstrtab_name, SHT_STRTAB, 0, + elf_shstrtab_offset, elf_shstrtab_size); + elf_secthead_set_index(esdn, 1); + elf_secthead_write_to_file(f, esdn, 1); + elf_secthead_destroy(esdn); + + esdn = elf_secthead_create(elf_strtab_name, SHT_STRTAB, 0, + elf_strtab_offset, elf_strtab_size); + elf_secthead_set_index(esdn, 2); + elf_secthead_write_to_file(f, esdn, 2); + elf_secthead_destroy(esdn); + + esdn = elf_secthead_create(elf_symtab_name, SHT_SYMTAB, 0, + elf_symtab_offset, elf_symtab_size); + elf_secthead_set_index(esdn, 3); + elf_secthead_set_info(esdn, elf_symtab_nlocal); + elf_secthead_set_link(esdn, 2); /* for .strtab, which is index 2 */ + elf_secthead_write_to_file(f, esdn, 3); + elf_secthead_destroy(esdn); + + info.sindex = 3; + /* output remaining section headers */ + yasm_object_sections_traverse(object, &info, elf_objfmt_output_secthead); + + /* output Ehdr */ + if (fseek(f, 0, SEEK_SET) < 0) { + yasm_error_set(YASM_ERROR_IO, N_("could not seek on output file")); + yasm_errwarn_propagate(errwarns, 0); + return; + } + + elf_proghead_write_to_file(f, elf_shead_addr, info.sindex+1, 1); +} + +static void +elf_objfmt_destroy(yasm_objfmt *objfmt) +{ + yasm_objfmt_elf *objfmt_elf = (yasm_objfmt_elf *)objfmt; + elf_symtab_destroy(objfmt_elf->elf_symtab); + elf_strtab_destroy(objfmt_elf->shstrtab); + elf_strtab_destroy(objfmt_elf->strtab); + yasm_xfree(objfmt); +} + +static void +elf_objfmt_init_new_section(yasm_section *sect, unsigned long line) +{ + yasm_object *object = yasm_section_get_object(sect); + const char *sectname = yasm_section_get_name(sect); + yasm_objfmt_elf *objfmt_elf = (yasm_objfmt_elf *)object->objfmt; + elf_secthead *esd; + yasm_symrec *sym; + elf_strtab_entry *name = elf_strtab_append_str(objfmt_elf->shstrtab, + sectname); + + elf_section_type type=SHT_PROGBITS; + elf_size entsize=0; + + if (yasm__strcasecmp(sectname, ".stab")==0) { + entsize = 12; + } else if (yasm__strcasecmp(sectname, ".stabstr")==0) { + type = SHT_STRTAB; + } + + esd = elf_secthead_create(name, type, 0, 0, 0); + elf_secthead_set_entsize(esd, entsize); + yasm_section_add_data(sect, &elf_section_data, esd); + sym = yasm_symtab_define_label(object->symtab, sectname, + yasm_section_bcs_first(sect), 1, line); + + elf_secthead_set_sym(esd, sym); +} + +static yasm_section * +elf_objfmt_add_default_section(yasm_object *object) +{ + yasm_section *retval; + int isnew; + + retval = yasm_object_get_general(object, ".text", 16, 1, 0, &isnew, 0); + if (isnew) + { + elf_secthead *esd = yasm_section_get_data(retval, &elf_section_data); + elf_secthead_set_typeflags(esd, SHT_PROGBITS, + SHF_ALLOC + SHF_EXECINSTR); + yasm_section_set_default(retval, 1); + } + return retval; +} + +struct elf_section_switch_data { + /*@only@*/ /*@null@*/ yasm_intnum *align_intn; + unsigned long flags; + unsigned long type; + int gasflags; + int stdsect; +}; + +/* GAS-style flags */ +static int +elf_helper_gasflags(void *obj, yasm_valparam *vp, unsigned long line, void *d, + /*@unused@*/ uintptr_t arg) +{ + struct elf_section_switch_data *data = (struct elf_section_switch_data *)d; + const char *s = yasm_vp_string(vp); + size_t i; + + if (!s) { + yasm_error_set(YASM_ERROR_VALUE, + N_("non-string section attribute")); + return -1; + } + + if (data->stdsect && strlen(s) == 0) { + data->gasflags = 1; + return 0; + } + + data->flags = 0; + for (i=0; iflags |= SHF_ALLOC; + break; + case 'w': + data->flags |= SHF_WRITE; + break; + case 'x': + data->flags |= SHF_EXECINSTR; + break; + case 'M': + data->flags |= SHF_MERGE; + break; + case 'S': + data->flags |= SHF_STRINGS; + break; + case 'G': + data->flags |= SHF_GROUP; + break; + case 'T': + data->flags |= SHF_TLS; + break; + default: + yasm_warn_set(YASM_WARN_GENERAL, + N_("unrecognized section attribute: `%c'"), + s[i]); + } + } + + data->gasflags = 1; + return 0; +} + +static /*@observer@*/ /*@null@*/ yasm_section * +elf_objfmt_section_switch(yasm_object *object, yasm_valparamhead *valparams, + /*@null@*/ yasm_valparamhead *objext_valparams, + unsigned long line) +{ + yasm_valparam *vp; + yasm_section *retval; + int isnew; + unsigned long align = 4; + int flags_override = 0; + const char *sectname; + int resonly = 0; + + struct elf_section_switch_data data; + + static const yasm_dir_help help[] = { + { "alloc", 0, yasm_dir_helper_flag_or, + offsetof(struct elf_section_switch_data, flags), SHF_ALLOC }, + { "exec", 0, yasm_dir_helper_flag_or, + offsetof(struct elf_section_switch_data, flags), SHF_EXECINSTR }, + { "write", 0, yasm_dir_helper_flag_or, + offsetof(struct elf_section_switch_data, flags), SHF_WRITE }, + { "tls", 0, yasm_dir_helper_flag_or, + offsetof(struct elf_section_switch_data, flags), SHF_TLS }, + { "progbits", 0, yasm_dir_helper_flag_set, + offsetof(struct elf_section_switch_data, type), SHT_PROGBITS }, + { "noalloc", 0, yasm_dir_helper_flag_and, + offsetof(struct elf_section_switch_data, flags), SHF_ALLOC }, + { "noexec", 0, yasm_dir_helper_flag_and, + offsetof(struct elf_section_switch_data, flags), SHF_EXECINSTR }, + { "nowrite", 0, yasm_dir_helper_flag_and, + offsetof(struct elf_section_switch_data, flags), SHF_WRITE }, + { "notls", 0, yasm_dir_helper_flag_and, + offsetof(struct elf_section_switch_data, flags), SHF_TLS }, + { "noprogbits", 0, yasm_dir_helper_flag_set, + offsetof(struct elf_section_switch_data, type), SHT_NOBITS }, + { "nobits", 0, yasm_dir_helper_flag_set, + offsetof(struct elf_section_switch_data, type), SHT_NOBITS }, + { "gasflags", 1, elf_helper_gasflags, 0, 0 }, + { "align", 1, yasm_dir_helper_intn, + offsetof(struct elf_section_switch_data, align_intn), 0 } + }; + /*@only@*/ /*@null@*/ yasm_expr *merge_expr = NULL; + /*@dependent@*/ /*@null@*/ const yasm_intnum *merge_intn = NULL; + elf_secthead *esd; + + data.align_intn = NULL; + data.flags = SHF_ALLOC; + data.type = SHT_PROGBITS; + data.gasflags = 0; + data.stdsect = 1; + + vp = yasm_vps_first(valparams); + sectname = yasm_vp_string(vp); + if (!sectname) + return NULL; + vp = yasm_vps_next(vp); + + if (strcmp(sectname, ".bss") == 0) { + data.type = SHT_NOBITS; + data.flags = SHF_ALLOC + SHF_WRITE; + resonly = 1; + } else if (strcmp(sectname, ".data") == 0) { + data.type = SHT_PROGBITS; + data.flags = SHF_ALLOC + SHF_WRITE; + } else if (strcmp(sectname, ".tdata") == 0) { + data.type = SHT_PROGBITS; + data.flags = SHF_ALLOC + SHF_WRITE + SHF_TLS; + } else if (strcmp(sectname, ".rodata") == 0) { + data.type = SHT_PROGBITS; + data.flags = SHF_ALLOC; + } else if (strcmp(sectname, ".text") == 0) { + align = 16; + data.type = SHT_PROGBITS; + data.flags = SHF_ALLOC + SHF_EXECINSTR; + } else if (strcmp(sectname, ".comment") == 0) { + align = 0; + data.type = SHT_PROGBITS; + data.flags = 0; + } else { + /* Default to code */ + align = 1; + data.stdsect = 0; + } + + flags_override = yasm_dir_helper(object, vp, line, help, NELEMS(help), + &data, yasm_dir_helper_valparam_warn); + if (flags_override < 0) + return NULL; /* error occurred */ + + if (data.align_intn) { + align = yasm_intnum_get_uint(data.align_intn); + yasm_intnum_destroy(data.align_intn); + + /* Alignments must be a power of two. */ + if (!is_exp2(align)) { + yasm_error_set(YASM_ERROR_VALUE, + N_("argument to `%s' is not a power of two"), + "align"); + return NULL; + } + } + + /* Handle merge entity size */ + if (data.flags & SHF_MERGE) { + if (objext_valparams && (vp = yasm_vps_first(objext_valparams)) + && !vp->val) { + if (!(merge_expr = yasm_vp_expr(vp, object->symtab, line)) || + !(merge_intn = yasm_expr_get_intnum(&merge_expr, 0))) + yasm_warn_set(YASM_WARN_GENERAL, + N_("invalid merge entity size")); + } else { + yasm_warn_set(YASM_WARN_GENERAL, + N_("entity size for SHF_MERGE not specified")); + data.flags &= ~SHF_MERGE; + } + } + + retval = yasm_object_get_general(object, sectname, align, + (data.flags & SHF_EXECINSTR) != 0, + resonly, &isnew, line); + + esd = yasm_section_get_data(retval, &elf_section_data); + + if (isnew || yasm_section_is_default(retval)) { + yasm_section_set_default(retval, 0); + elf_secthead_set_typeflags(esd, data.type, data.flags); + if (merge_intn) + elf_secthead_set_entsize(esd, yasm_intnum_get_uint(merge_intn)); + yasm_section_set_align(retval, align, line); + } else if (flags_override && !data.gasflags) + yasm_warn_set(YASM_WARN_GENERAL, + N_("section flags ignored on section redeclaration")); + if (merge_expr) + yasm_expr_destroy(merge_expr); + return retval; +} + +static /*@observer@*/ /*@null@*/ yasm_symrec * +elf_objfmt_get_special_sym(yasm_object *object, const char *name, + const char *parser) +{ + if (yasm__strcasecmp(name, "sym") == 0) { + yasm_objfmt_elf *objfmt_elf = (yasm_objfmt_elf *)object->objfmt; + return objfmt_elf->dotdotsym; + } + return elf_get_special_sym(name, parser); +} + +static void +dir_type(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_objfmt_elf *objfmt_elf = (yasm_objfmt_elf *)object->objfmt; + yasm_valparam *vp = yasm_vps_first(valparams); + const char *symname = yasm_vp_id(vp); + /* Get symbol elf data */ + yasm_symrec *sym = yasm_symtab_use(object->symtab, symname, line); + elf_symtab_entry *entry = yasm_symrec_get_data(sym, &elf_symrec_data); + /*@null@*/ const char *type; + + /* Create entry if necessary */ + if (!entry) { + entry = elf_symtab_entry_create( + elf_strtab_append_str(objfmt_elf->strtab, symname), sym); + yasm_symrec_add_data(sym, &elf_symrec_data, entry); + } + + /* Pull new type from param */ + vp = yasm_vps_next(vp); + if (vp && !vp->val && (type = yasm_vp_id(vp))) { + if (yasm__strcasecmp(type, "function") == 0) + elf_sym_set_type(entry, STT_FUNC); + else if (yasm__strcasecmp(type, "object") == 0) + elf_sym_set_type(entry, STT_OBJECT); + else if (yasm__strcasecmp(type, "tls_object") == 0) + elf_sym_set_type(entry, STT_TLS); + else if (yasm__strcasecmp(type, "notype") == 0) + elf_sym_set_type(entry, STT_NOTYPE); + else + yasm_warn_set(YASM_WARN_GENERAL, + N_("unrecognized symbol type `%s'"), type); + } else + yasm_error_set(YASM_ERROR_SYNTAX, N_("no type specified")); +} + +static void +dir_size(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_objfmt_elf *objfmt_elf = (yasm_objfmt_elf *)object->objfmt; + yasm_valparam *vp = yasm_vps_first(valparams); + const char *symname = yasm_vp_id(vp); + /* Get symbol elf data */ + yasm_symrec *sym = yasm_symtab_use(object->symtab, symname, line); + elf_symtab_entry *entry = yasm_symrec_get_data(sym, &elf_symrec_data); + /*@only@*/ /*@null@*/ yasm_expr *size; + + /* Create entry if necessary */ + if (!entry) { + entry = elf_symtab_entry_create( + elf_strtab_append_str(objfmt_elf->strtab, symname), sym); + yasm_symrec_add_data(sym, &elf_symrec_data, entry); + } + + /* Pull new size from param */ + vp = yasm_vps_next(vp); + if (vp && !vp->val && (size = yasm_vp_expr(vp, object->symtab, line))) + elf_sym_set_size(entry, size); + else + yasm_error_set(YASM_ERROR_SYNTAX, N_("no size specified")); +} + +static void +dir_weak(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_objfmt_elf *objfmt_elf = (yasm_objfmt_elf *)object->objfmt; + yasm_valparam *vp = yasm_vps_first(valparams); + const char *symname = yasm_vp_id(vp); + yasm_symrec *sym = yasm_symtab_declare(object->symtab, symname, + YASM_SYM_GLOBAL, line); + elf_objfmt_symtab_append(objfmt_elf, sym, SHN_UNDEF, STB_WEAK, 0, + STV_DEFAULT, NULL, NULL, object); +} + +static void +dir_ident(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_valparamhead sect_vps; + yasm_datavalhead dvs; + yasm_section *comment; + yasm_valparam *vp; + yasm_valparam *vp2; + + /* Accept, but do nothing with empty ident */ + if (!valparams) + return; + vp = yasm_vps_first(valparams); + if (!vp) + return; + + /* Put ident data into .comment section */ + yasm_vps_initialize(§_vps); + vp2 = yasm_vp_create_string(NULL, yasm__xstrdup(".comment")); + yasm_vps_append(§_vps, vp2); + comment = elf_objfmt_section_switch(object, §_vps, NULL, line); + yasm_vps_delete(§_vps); + + /* To match GAS output, if the comment section is empty, put an + * initial 0 byte in the section. + */ + if (yasm_section_bcs_first(comment) == yasm_section_bcs_last(comment)) { + yasm_dvs_initialize(&dvs); + yasm_dvs_append(&dvs, yasm_dv_create_expr( + yasm_expr_create_ident( + yasm_expr_int(yasm_intnum_create_uint(0)), line))); + yasm_section_bcs_append(comment, + yasm_bc_create_data(&dvs, 1, 0, object->arch, line)); + } + + yasm_dvs_initialize(&dvs); + do { + const char *s = yasm_vp_string(vp); + if (!s) { + yasm_error_set(YASM_ERROR_VALUE, + N_(".comment requires string parameters")); + yasm_dvs_delete(&dvs); + return; + } + yasm_dvs_append(&dvs, + yasm_dv_create_string(yasm__xstrdup(s), strlen(s))); + } while ((vp = yasm_vps_next(vp))); + + yasm_section_bcs_append(comment, + yasm_bc_create_data(&dvs, 1, 1, object->arch, line)); +} + +/* Define valid debug formats to use with this object format */ +static const char *elf_objfmt_dbgfmt_keywords[] = { + "null", + "stabs", + "dwarf2", + NULL +}; + +static const yasm_directive elf_objfmt_directives[] = { + { ".type", "gas", dir_type, YASM_DIR_ID_REQUIRED }, + { ".size", "gas", dir_size, YASM_DIR_ID_REQUIRED }, + { ".weak", "gas", dir_weak, YASM_DIR_ID_REQUIRED }, + { ".ident", "gas", dir_ident, YASM_DIR_ANY }, + { "type", "nasm", dir_type, YASM_DIR_ID_REQUIRED }, + { "size", "nasm", dir_size, YASM_DIR_ID_REQUIRED }, + { "weak", "nasm", dir_weak, YASM_DIR_ID_REQUIRED }, + { "ident", "nasm", dir_ident, YASM_DIR_ANY }, + { NULL, NULL, NULL, 0 } +}; + +static const char *elf_nasm_stdmac[] = { + "%imacro type 1+.nolist", + "[type %1]", + "%endmacro", + "%imacro size 1+.nolist", + "[size %1]", + "%endmacro", + "%imacro weak 1+.nolist", + "[weak %1]", + "%endmacro", + NULL +}; + +static const yasm_stdmac elf_objfmt_stdmacs[] = { + { "nasm", "nasm", elf_nasm_stdmac }, + { NULL, NULL, NULL } +}; + +/* Define objfmt structure -- see objfmt.h for details */ +yasm_objfmt_module yasm_elf_LTX_objfmt = { + "ELF", + "elf", + "o", + 32, + 0, + elf_objfmt_dbgfmt_keywords, + "null", + elf_objfmt_directives, + elf_objfmt_stdmacs, + elf_objfmt_create, + elf_objfmt_output, + elf_objfmt_destroy, + elf_objfmt_add_default_section, + elf_objfmt_init_new_section, + elf_objfmt_section_switch, + elf_objfmt_get_special_sym +}; + +yasm_objfmt_module yasm_elf32_LTX_objfmt = { + "ELF (32-bit)", + "elf32", + "o", + 32, + 0, + elf_objfmt_dbgfmt_keywords, + "null", + elf_objfmt_directives, + elf_objfmt_stdmacs, + elf32_objfmt_create, + elf_objfmt_output, + elf_objfmt_destroy, + elf_objfmt_add_default_section, + elf_objfmt_init_new_section, + elf_objfmt_section_switch, + elf_objfmt_get_special_sym +}; + +yasm_objfmt_module yasm_elf64_LTX_objfmt = { + "ELF (64-bit)", + "elf64", + "o", + 64, + 0, + elf_objfmt_dbgfmt_keywords, + "null", + elf_objfmt_directives, + elf_objfmt_stdmacs, + elf64_objfmt_create, + elf_objfmt_output, + elf_objfmt_destroy, + elf_objfmt_add_default_section, + elf_objfmt_init_new_section, + elf_objfmt_section_switch, + elf_objfmt_get_special_sym +}; + +yasm_objfmt_module yasm_elfx32_LTX_objfmt = { + "ELF (x32)", + "elfx32", + "o", + 64, + 0, + elf_objfmt_dbgfmt_keywords, + "null", + elf_objfmt_directives, + elf_objfmt_stdmacs, + elfx32_objfmt_create, + elf_objfmt_output, + elf_objfmt_destroy, + elf_objfmt_add_default_section, + elf_objfmt_init_new_section, + elf_objfmt_section_switch, + elf_objfmt_get_special_sym +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-x86-amd64.c b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-x86-amd64.c new file mode 100644 index 0000000000..3ba376af03 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-x86-amd64.c @@ -0,0 +1,256 @@ +/* + * ELF object format helpers - x86:amd64 + * + * Copyright (C) 2004-2007 Michael Urman + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include +#define YASM_OBJFMT_ELF_INTERNAL +#include "elf.h" +#include "elf-machine.h" + +static elf_machine_ssym elf_x86_amd64_ssyms[] = { + {"pltoff", ELF_SSYM_SYM_RELATIVE, R_X86_64_PLTOFF64, 64}, + {"plt", ELF_SSYM_SYM_RELATIVE, R_X86_64_PLT32, 32}, + {"gotplt", ELF_SSYM_SYM_RELATIVE, R_X86_64_GOTPLT64, 64}, + {"gotoff", ELF_SSYM_SYM_RELATIVE, R_X86_64_GOTOFF64, 64}, + {"gotpcrel", ELF_SSYM_SYM_RELATIVE, R_X86_64_GOTPCREL, 32}, + {"tlsgd", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_X86_64_TLSGD, 32}, + {"tlsld", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_X86_64_TLSLD, 32}, + {"gottpoff", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_X86_64_GOTTPOFF, 32}, + {"tpoff", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_X86_64_TPOFF32, 32}, + {"dtpoff", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_X86_64_DTPOFF32, 32}, + {"got", ELF_SSYM_SYM_RELATIVE, R_X86_64_GOT32, 32}, + {"tlsdesc", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_X86_64_GOTPC32_TLSDESC, 32}, + {"tlscall", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_X86_64_TLSDESC_CALL, 32} +}; + +static int +elf_x86_amd64_accepts_reloc(size_t val, yasm_symrec *wrt) +{ + if (wrt) { + const elf_machine_ssym *ssym = (elf_machine_ssym *) + yasm_symrec_get_data(wrt, &elf_ssym_symrec_data); + if (!ssym || val != ssym->size) + return 0; + return 1; + } + return (val&(val-1)) ? 0 : ((val & (8|16|32|64)) != 0); +} + +static void +elf_x86_amd64_write_symtab_entry(unsigned char *bufp, + elf_symtab_entry *entry, + yasm_intnum *value_intn, + yasm_intnum *size_intn) +{ + YASM_WRITE_32_L(bufp, entry->name ? entry->name->index : 0); + YASM_WRITE_8(bufp, ELF64_ST_INFO(entry->bind, entry->type)); + YASM_WRITE_8(bufp, ELF64_ST_OTHER(entry->vis)); + if (entry->sect) { + elf_secthead *shead = + yasm_section_get_data(entry->sect, &elf_section_data); + if (!shead) + yasm_internal_error(N_("symbol references section without data")); + YASM_WRITE_16_L(bufp, shead->index); + } else { + YASM_WRITE_16_L(bufp, entry->index); + } + YASM_WRITE_64I_L(bufp, value_intn); + YASM_WRITE_64I_L(bufp, size_intn); +} + +static void +elf_x86_amd64_write_secthead(unsigned char *bufp, elf_secthead *shead) +{ + YASM_WRITE_32_L(bufp, shead->name ? shead->name->index : 0); + YASM_WRITE_32_L(bufp, shead->type); + YASM_WRITE_64Z_L(bufp, shead->flags); + YASM_WRITE_64Z_L(bufp, 0); /* vmem address */ + YASM_WRITE_64Z_L(bufp, shead->offset); + YASM_WRITE_64I_L(bufp, shead->size); + + YASM_WRITE_32_L(bufp, shead->link); + YASM_WRITE_32_L(bufp, shead->info); + + YASM_WRITE_64Z_L(bufp, shead->align); + YASM_WRITE_64Z_L(bufp, shead->entsize); +} + +static void +elf_x86_amd64_write_secthead_rel(unsigned char *bufp, + elf_secthead *shead, + elf_section_index symtab_idx, + elf_section_index sindex) +{ + yasm_intnum *nreloc; + yasm_intnum *relocsize; + + YASM_WRITE_32_L(bufp, shead->rel_name ? shead->rel_name->index : 0); + YASM_WRITE_32_L(bufp, SHT_RELA); + YASM_WRITE_64Z_L(bufp, 0); + YASM_WRITE_64Z_L(bufp, 0); + YASM_WRITE_64Z_L(bufp, shead->rel_offset); + + nreloc = yasm_intnum_create_uint(shead->nreloc); + relocsize = yasm_intnum_create_uint(RELOC64A_SIZE); + yasm_intnum_calc(relocsize, YASM_EXPR_MUL, nreloc); + YASM_WRITE_64I_L(bufp, relocsize); /* size */ + yasm_intnum_destroy(nreloc); + yasm_intnum_destroy(relocsize); + + YASM_WRITE_32_L(bufp, symtab_idx); /* link: symtab index */ + YASM_WRITE_32_L(bufp, shead->index); /* info: relocated's index */ + YASM_WRITE_64Z_L(bufp, RELOC64_ALIGN); /* align */ + YASM_WRITE_64Z_L(bufp, RELOC64A_SIZE); /* entity size */ +} + +static void +elf_x86_amd64_handle_reloc_addend(yasm_intnum *intn, + elf_reloc_entry *reloc, + unsigned long offset) +{ + /* .rela: copy value out as addend, replace original with 0 */ + reloc->addend = yasm_intnum_copy(intn); + yasm_intnum_zero(intn); +} + +static unsigned int +elf_x86_amd64_map_reloc_info_to_type(elf_reloc_entry *reloc) +{ + if (reloc->wrt) { + const elf_machine_ssym *ssym = (elf_machine_ssym *) + yasm_symrec_get_data(reloc->wrt, &elf_ssym_symrec_data); + if (!ssym || reloc->valsize != ssym->size) + yasm_internal_error(N_("Unsupported WRT")); + + /* Force TLS type; this is required by the linker. */ + if (ssym->sym_rel & ELF_SSYM_THREAD_LOCAL) { + elf_symtab_entry *esym; + + esym = yasm_symrec_get_data(reloc->reloc.sym, &elf_symrec_data); + if (esym) + esym->type = STT_TLS; + } + /* Map PC-relative GOT to appropriate relocation */ + if (reloc->rtype_rel && ssym->reloc == R_X86_64_GOT32) + return (unsigned char) R_X86_64_GOTPCREL; + return (unsigned char) ssym->reloc; + } else if (reloc->is_GOT_sym && reloc->valsize == 32) { + return (unsigned char) R_X86_64_GOTPC32; + } else if (reloc->is_GOT_sym && reloc->valsize == 64) { + return (unsigned char) R_X86_64_GOTPC64; + } else if (reloc->rtype_rel) { + switch (reloc->valsize) { + case 8: return (unsigned char) R_X86_64_PC8; + case 16: return (unsigned char) R_X86_64_PC16; + case 32: return (unsigned char) R_X86_64_PC32; + case 64: return (unsigned char) R_X86_64_PC64; + default: yasm_internal_error(N_("Unsupported relocation size")); + } + } else { + switch (reloc->valsize) { + case 8: return (unsigned char) R_X86_64_8; + case 16: return (unsigned char) R_X86_64_16; + case 32: return (unsigned char) R_X86_64_32; + case 64: return (unsigned char) R_X86_64_64; + default: yasm_internal_error(N_("Unsupported relocation size")); + } + } + return 0; +} + +static void +elf_x86_amd64_write_reloc(unsigned char *bufp, elf_reloc_entry *reloc, + unsigned int r_type, unsigned int r_sym) +{ + YASM_WRITE_64I_L(bufp, reloc->reloc.addr); + /*YASM_WRITE_64_L(bufp, ELF64_R_INFO(r_sym, r_type));*/ + YASM_WRITE_64C_L(bufp, r_sym, r_type); + if (reloc->addend) + YASM_WRITE_64I_L(bufp, reloc->addend); + else { + YASM_WRITE_32_L(bufp, 0); + YASM_WRITE_32_L(bufp, 0); + } +} + +static void +elf_x86_amd64_write_proghead(unsigned char **bufpp, + elf_offset secthead_addr, + unsigned long secthead_count, + elf_section_index shstrtab_index) +{ + unsigned char *bufp = *bufpp; + unsigned char *buf = bufp-4; + YASM_WRITE_8(bufp, ELFCLASS64); /* elf class */ + YASM_WRITE_8(bufp, ELFDATA2LSB); /* data encoding :: MSB? */ + YASM_WRITE_8(bufp, EV_CURRENT); /* elf version */ + YASM_WRITE_8(bufp, ELFOSABI_SYSV); /* os/abi */ + YASM_WRITE_8(bufp, 0); /* SYSV v3 ABI=0 */ + while (bufp-buf < EI_NIDENT) /* e_ident padding */ + YASM_WRITE_8(bufp, 0); + + YASM_WRITE_16_L(bufp, ET_REL); /* e_type - object file */ + YASM_WRITE_16_L(bufp, EM_X86_64); /* e_machine - or others */ + YASM_WRITE_32_L(bufp, EV_CURRENT); /* elf version */ + YASM_WRITE_64Z_L(bufp, 0); /* e_entry */ + YASM_WRITE_64Z_L(bufp, 0); /* e_phoff */ + YASM_WRITE_64Z_L(bufp, secthead_addr); /* e_shoff secthead off */ + + YASM_WRITE_32_L(bufp, 0); /* e_flags */ + YASM_WRITE_16_L(bufp, EHDR64_SIZE); /* e_ehsize */ + YASM_WRITE_16_L(bufp, 0); /* e_phentsize */ + YASM_WRITE_16_L(bufp, 0); /* e_phnum */ + YASM_WRITE_16_L(bufp, SHDR64_SIZE); /* e_shentsize */ + YASM_WRITE_16_L(bufp, secthead_count); /* e_shnum */ + YASM_WRITE_16_L(bufp, shstrtab_index); /* e_shstrndx */ + *bufpp = bufp; +} + +const elf_machine_handler +elf_machine_handler_x86_amd64 = { + "x86", "amd64", ".rela", + SYMTAB64_SIZE, SYMTAB64_ALIGN, RELOC64A_SIZE, SHDR64_SIZE, EHDR64_SIZE, + elf_x86_amd64_accepts_reloc, + elf_x86_amd64_write_symtab_entry, + elf_x86_amd64_write_secthead, + elf_x86_amd64_write_secthead_rel, + elf_x86_amd64_handle_reloc_addend, + elf_x86_amd64_map_reloc_info_to_type, + elf_x86_amd64_write_reloc, + elf_x86_amd64_write_proghead, + elf_x86_amd64_ssyms, + sizeof(elf_x86_amd64_ssyms)/sizeof(elf_x86_amd64_ssyms[0]), + 64 +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-x86-x32.c b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-x86-x32.c new file mode 100644 index 0000000000..40a25a12a7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-x86-x32.c @@ -0,0 +1,251 @@ +/* + * ELF object format helpers - x86:x32 + * + * Copyright (C) 2012 Michael Urman and H.J. Lu + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include +#define YASM_OBJFMT_ELF_INTERNAL +#include "elf.h" +#include "elf-machine.h" + +static elf_machine_ssym elf_x86_x32_ssyms[] = { + {"plt", ELF_SSYM_SYM_RELATIVE, R_X86_64_PLT32, 32}, + {"gotpcrel", ELF_SSYM_SYM_RELATIVE, R_X86_64_GOTPCREL, 32}, + {"tlsgd", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_X86_64_TLSGD, 32}, + {"tlsld", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_X86_64_TLSLD, 32}, + {"gottpoff", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_X86_64_GOTTPOFF, 32}, + {"tpoff", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_X86_64_TPOFF32, 32}, + {"dtpoff", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_X86_64_DTPOFF32, 32}, + {"got", ELF_SSYM_SYM_RELATIVE, R_X86_64_GOT32, 32}, + {"tlsdesc", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_X86_64_GOTPC32_TLSDESC, 32}, + {"tlscall", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_X86_64_TLSDESC_CALL, 32} +}; + +static int +elf_x86_x32_accepts_reloc(size_t val, yasm_symrec *wrt) +{ + if (wrt) { + const elf_machine_ssym *ssym = (elf_machine_ssym *) + yasm_symrec_get_data(wrt, &elf_ssym_symrec_data); + if (!ssym || val != ssym->size) + return 0; + return 1; + } + return (val&(val-1)) ? 0 : ((val & (8|16|32)) != 0); +} + +static void +elf_x86_x32_write_symtab_entry(unsigned char *bufp, + elf_symtab_entry *entry, + yasm_intnum *value_intn, + yasm_intnum *size_intn) +{ + YASM_WRITE_32_L(bufp, entry->name ? entry->name->index : 0); + YASM_WRITE_32I_L(bufp, value_intn); + YASM_WRITE_32I_L(bufp, size_intn); + + YASM_WRITE_8(bufp, ELF32_ST_INFO(entry->bind, entry->type)); + YASM_WRITE_8(bufp, ELF32_ST_OTHER(entry->vis)); + if (entry->sect) { + elf_secthead *shead = + yasm_section_get_data(entry->sect, &elf_section_data); + if (!shead) + yasm_internal_error(N_("symbol references section without data")); + YASM_WRITE_16_L(bufp, shead->index); + } else { + YASM_WRITE_16_L(bufp, entry->index); + } +} + +static void +elf_x86_x32_write_secthead(unsigned char *bufp, elf_secthead *shead) +{ + YASM_WRITE_32_L(bufp, shead->name ? shead->name->index : 0); + YASM_WRITE_32_L(bufp, shead->type); + YASM_WRITE_32_L(bufp, shead->flags); + YASM_WRITE_32_L(bufp, 0); /* vmem address */ + YASM_WRITE_32_L(bufp, shead->offset); + YASM_WRITE_32I_L(bufp, shead->size); + + YASM_WRITE_32_L(bufp, shead->link); + YASM_WRITE_32_L(bufp, shead->info); + + YASM_WRITE_32_L(bufp, shead->align); + YASM_WRITE_32_L(bufp, shead->entsize); +} + +static void +elf_x86_x32_write_secthead_rel(unsigned char *bufp, + elf_secthead *shead, + elf_section_index symtab_idx, + elf_section_index sindex) +{ + yasm_intnum *nreloc; + yasm_intnum *relocsize; + + YASM_WRITE_32_L(bufp, shead->rel_name ? shead->rel_name->index : 0); + YASM_WRITE_32_L(bufp, SHT_RELA); + YASM_WRITE_32_L(bufp, 0); + YASM_WRITE_32_L(bufp, 0); + YASM_WRITE_32_L(bufp, shead->rel_offset); + + nreloc = yasm_intnum_create_uint(shead->nreloc); + relocsize = yasm_intnum_create_uint(RELOC32A_SIZE); + yasm_intnum_calc(relocsize, YASM_EXPR_MUL, nreloc); + YASM_WRITE_32I_L(bufp, relocsize); /* size */ + yasm_intnum_destroy(nreloc); + yasm_intnum_destroy(relocsize); + + YASM_WRITE_32_L(bufp, symtab_idx); /* link: symtab index */ + YASM_WRITE_32_L(bufp, shead->index); /* info: relocated's index */ + YASM_WRITE_32_L(bufp, RELOC32_ALIGN); /* align */ + YASM_WRITE_32_L(bufp, RELOC32A_SIZE); /* entity size */ +} + +static void +elf_x86_x32_handle_reloc_addend(yasm_intnum *intn, + elf_reloc_entry *reloc, + unsigned long offset) +{ + /* .rela: copy value out as addend, replace original with 0 */ + reloc->addend = yasm_intnum_copy(intn); + yasm_intnum_zero(intn); +} + +static unsigned int +elf_x86_x32_map_reloc_info_to_type(elf_reloc_entry *reloc) +{ + if (reloc->wrt) { + const elf_machine_ssym *ssym = (elf_machine_ssym *) + yasm_symrec_get_data(reloc->wrt, &elf_ssym_symrec_data); + if (!ssym || reloc->valsize != ssym->size) + yasm_internal_error(N_("Unsupported WRT")); + + /* Force TLS type; this is required by the linker. */ + if (ssym->sym_rel & ELF_SSYM_THREAD_LOCAL) { + elf_symtab_entry *esym; + + esym = yasm_symrec_get_data(reloc->reloc.sym, &elf_symrec_data); + if (esym) + esym->type = STT_TLS; + } + /* Map PC-relative GOT to appropriate relocation */ + if (reloc->rtype_rel && ssym->reloc == R_X86_64_GOT32) + return (unsigned char) R_X86_64_GOTPCREL; + return (unsigned char) ssym->reloc; + } else if (reloc->is_GOT_sym && reloc->valsize == 32) { + return (unsigned char) R_X86_64_GOTPC32; + } else if (reloc->is_GOT_sym && reloc->valsize == 64) { + yasm_internal_error(N_("Unsupported relocation size")); + } else if (reloc->rtype_rel) { + switch (reloc->valsize) { + case 8: return (unsigned char) R_X86_64_PC8; + case 16: return (unsigned char) R_X86_64_PC16; + case 32: return (unsigned char) R_X86_64_PC32; + default: yasm_internal_error(N_("Unsupported relocation size")); + } + } else { + switch (reloc->valsize) { + case 8: return (unsigned char) R_X86_64_8; + case 16: return (unsigned char) R_X86_64_16; + case 32: return (unsigned char) R_X86_64_32; + case 64: return (unsigned char) R_X86_64_64; + default: yasm_internal_error(N_("Unsupported relocation size")); + } + } + return 0; +} + +static void +elf_x86_x32_write_reloc(unsigned char *bufp, elf_reloc_entry *reloc, + unsigned int r_type, unsigned int r_sym) +{ + YASM_WRITE_32I_L(bufp, reloc->reloc.addr); + YASM_WRITE_32_L(bufp, ELF32_R_INFO((unsigned long)r_sym, (unsigned char)r_type)); + if (reloc->addend) + YASM_WRITE_32I_L(bufp, reloc->addend); + else { + YASM_WRITE_32_L(bufp, 0); + } +} + +static void +elf_x86_x32_write_proghead(unsigned char **bufpp, + elf_offset secthead_addr, + unsigned long secthead_count, + elf_section_index shstrtab_index) +{ + unsigned char *bufp = *bufpp; + unsigned char *buf = bufp-4; + YASM_WRITE_8(bufp, ELFCLASS32); /* elf class */ + YASM_WRITE_8(bufp, ELFDATA2LSB); /* data encoding :: MSB? */ + YASM_WRITE_8(bufp, EV_CURRENT); /* elf version */ + YASM_WRITE_8(bufp, ELFOSABI_SYSV); /* os/abi */ + YASM_WRITE_8(bufp, 0); /* SYSV v3 ABI=0 */ + while (bufp-buf < EI_NIDENT) /* e_ident padding */ + YASM_WRITE_8(bufp, 0); + + YASM_WRITE_16_L(bufp, ET_REL); /* e_type - object file */ + YASM_WRITE_16_L(bufp, EM_X86_64); /* e_machine - or others */ + YASM_WRITE_32_L(bufp, EV_CURRENT); /* elf version */ + YASM_WRITE_32_L(bufp, 0); /* e_entry */ + YASM_WRITE_32_L(bufp, 0); /* e_phoff */ + YASM_WRITE_32_L(bufp, secthead_addr); /* e_shoff secthead off */ + + YASM_WRITE_32_L(bufp, 0); /* e_flags */ + YASM_WRITE_16_L(bufp, EHDR32_SIZE); /* e_ehsize */ + YASM_WRITE_16_L(bufp, 0); /* e_phentsize */ + YASM_WRITE_16_L(bufp, 0); /* e_phnum */ + YASM_WRITE_16_L(bufp, SHDR32_SIZE); /* e_shentsize */ + YASM_WRITE_16_L(bufp, secthead_count); /* e_shnum */ + YASM_WRITE_16_L(bufp, shstrtab_index); /* e_shstrndx */ + *bufpp = bufp; +} + +const elf_machine_handler +elf_machine_handler_x86_x32 = { + "x86", "x32", ".rela", + SYMTAB32_SIZE, SYMTAB32_ALIGN, RELOC32A_SIZE, SHDR32_SIZE, EHDR32_SIZE, + elf_x86_x32_accepts_reloc, + elf_x86_x32_write_symtab_entry, + elf_x86_x32_write_secthead, + elf_x86_x32_write_secthead_rel, + elf_x86_x32_handle_reloc_addend, + elf_x86_x32_map_reloc_info_to_type, + elf_x86_x32_write_reloc, + elf_x86_x32_write_proghead, + elf_x86_x32_ssyms, + sizeof(elf_x86_x32_ssyms)/sizeof(elf_x86_x32_ssyms[0]), + 32 +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-x86-x86.c b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-x86-x86.c new file mode 100644 index 0000000000..d79ec6eabd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf-x86-x86.c @@ -0,0 +1,242 @@ +/* + * ELF object format helpers - x86:x86 + * + * Copyright (C) 2004-2007 Michael Urman + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include +#define YASM_OBJFMT_ELF_INTERNAL +#include "elf.h" +#include "elf-machine.h" + +static elf_machine_ssym elf_x86_x86_ssyms[] = { + {"plt", ELF_SSYM_SYM_RELATIVE, R_386_PLT32, 32}, + {"gotoff", 0, R_386_GOTOFF, 32}, + /* special one for NASM */ + {"gotpc", ELF_SSYM_CURPOS_ADJUST, R_386_GOTPC, 32}, + {"tlsgd", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_386_TLS_GD, 32}, + {"tlsldm", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_386_TLS_LDM, 32}, + {"gottpoff", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_386_TLS_IE_32, 32}, + {"tpoff", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_386_TLS_LE_32, 32}, + {"ntpoff", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_386_TLS_LE, 32}, + {"dtpoff", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_386_TLS_LDO_32, 32}, + {"gotntpoff", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_386_TLS_GOTIE, 32}, + {"indntpoff", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_386_TLS_IE, 32}, + {"got", ELF_SSYM_SYM_RELATIVE, R_386_GOT32, 32}, + {"tlsdesc", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_386_TLS_GOTDESC, 32}, + {"tlscall", ELF_SSYM_SYM_RELATIVE|ELF_SSYM_THREAD_LOCAL, + R_386_TLS_DESC_CALL, 32} +}; + +static int +elf_x86_x86_accepts_reloc(size_t val, yasm_symrec *wrt) +{ + if (wrt) { + const elf_machine_ssym *ssym = (elf_machine_ssym *) + yasm_symrec_get_data(wrt, &elf_ssym_symrec_data); + if (!ssym || val != ssym->size) + return 0; + return 1; + } + return (val&(val-1)) ? 0 : ((val & (8|16|32)) != 0); +} + +static void +elf_x86_x86_write_symtab_entry(unsigned char *bufp, + elf_symtab_entry *entry, + yasm_intnum *value_intn, + yasm_intnum *size_intn) +{ + YASM_WRITE_32_L(bufp, entry->name ? entry->name->index : 0); + YASM_WRITE_32I_L(bufp, value_intn); + YASM_WRITE_32I_L(bufp, size_intn); + + YASM_WRITE_8(bufp, ELF32_ST_INFO(entry->bind, entry->type)); + YASM_WRITE_8(bufp, ELF32_ST_OTHER(entry->vis)); + if (entry->sect) { + elf_secthead *shead = + yasm_section_get_data(entry->sect, &elf_section_data); + if (!shead) + yasm_internal_error(N_("symbol references section without data")); + YASM_WRITE_16_L(bufp, shead->index); + } else { + YASM_WRITE_16_L(bufp, entry->index); + } +} + +static void +elf_x86_x86_write_secthead(unsigned char *bufp, elf_secthead *shead) +{ + YASM_WRITE_32_L(bufp, shead->name ? shead->name->index : 0); + YASM_WRITE_32_L(bufp, shead->type); + YASM_WRITE_32_L(bufp, shead->flags); + YASM_WRITE_32_L(bufp, 0); /* vmem address */ + + YASM_WRITE_32_L(bufp, shead->offset); + YASM_WRITE_32I_L(bufp, shead->size); + YASM_WRITE_32_L(bufp, shead->link); + YASM_WRITE_32_L(bufp, shead->info); + + YASM_WRITE_32_L(bufp, shead->align); + YASM_WRITE_32_L(bufp, shead->entsize); + +} + +static void +elf_x86_x86_write_secthead_rel(unsigned char *bufp, + elf_secthead *shead, + elf_section_index symtab_idx, + elf_section_index sindex) +{ + YASM_WRITE_32_L(bufp, shead->rel_name ? shead->rel_name->index : 0); + YASM_WRITE_32_L(bufp, SHT_REL); + YASM_WRITE_32_L(bufp, 0); + YASM_WRITE_32_L(bufp, 0); + + YASM_WRITE_32_L(bufp, shead->rel_offset); + YASM_WRITE_32_L(bufp, RELOC32_SIZE * shead->nreloc);/* size */ + YASM_WRITE_32_L(bufp, symtab_idx); /* link: symtab index */ + YASM_WRITE_32_L(bufp, shead->index); /* info: relocated's index */ + + YASM_WRITE_32_L(bufp, RELOC32_ALIGN); /* align */ + YASM_WRITE_32_L(bufp, RELOC32_SIZE); /* entity size */ +} + +static void +elf_x86_x86_handle_reloc_addend(yasm_intnum *intn, + elf_reloc_entry *reloc, + unsigned long offset) +{ + if (!reloc->wrt && reloc->is_GOT_sym && reloc->valsize == 32 && offset != 0) + { + yasm_intnum *off_intn = yasm_intnum_create_uint(offset); + yasm_intnum_calc(intn, YASM_EXPR_ADD, off_intn); + yasm_intnum_destroy(off_intn); + } + return; /* .rel: Leave addend in intn */ +} + +static unsigned int +elf_x86_x86_map_reloc_info_to_type(elf_reloc_entry *reloc) +{ + if (reloc->wrt) { + const elf_machine_ssym *ssym = (elf_machine_ssym *) + yasm_symrec_get_data(reloc->wrt, &elf_ssym_symrec_data); + if (!ssym || reloc->valsize != ssym->size) + yasm_internal_error(N_("Unsupported WRT")); + + /* Force TLS type; this is required by the linker. */ + if (ssym->sym_rel & ELF_SSYM_THREAD_LOCAL) { + elf_symtab_entry *esym; + + esym = yasm_symrec_get_data(reloc->reloc.sym, &elf_symrec_data); + if (esym) + esym->type = STT_TLS; + } + return (unsigned char) ssym->reloc; + } else if (reloc->is_GOT_sym && reloc->valsize == 32) { + return (unsigned char) R_386_GOTPC; + } else if (reloc->rtype_rel) { + switch (reloc->valsize) { + case 8: return (unsigned char) R_386_PC8; + case 16: return (unsigned char) R_386_PC16; + case 32: return (unsigned char) R_386_PC32; + default: yasm_internal_error(N_("Unsupported relocation size")); + } + } else { + switch (reloc->valsize) { + case 8: return (unsigned char) R_386_8; + case 16: return (unsigned char) R_386_16; + case 32: return (unsigned char) R_386_32; + default: yasm_internal_error(N_("Unsupported relocation size")); + } + } + return 0; +} + +static void +elf_x86_x86_write_reloc(unsigned char *bufp, elf_reloc_entry *reloc, + unsigned int r_type, unsigned int r_sym) +{ + YASM_WRITE_32I_L(bufp, reloc->reloc.addr); + YASM_WRITE_32_L(bufp, ELF32_R_INFO((unsigned long)r_sym, (unsigned char)r_type)); +} + +static void +elf_x86_x86_write_proghead(unsigned char **bufpp, + elf_offset secthead_addr, + unsigned long secthead_count, + elf_section_index shstrtab_index) +{ + unsigned char *bufp = *bufpp; + unsigned char *buf = bufp-4; + YASM_WRITE_8(bufp, ELFCLASS32); /* elf class */ + YASM_WRITE_8(bufp, ELFDATA2LSB); /* data encoding :: MSB? */ + YASM_WRITE_8(bufp, EV_CURRENT); /* elf version */ + while (bufp-buf < EI_NIDENT) /* e_ident padding */ + YASM_WRITE_8(bufp, 0); + + YASM_WRITE_16_L(bufp, ET_REL); /* e_type - object file */ + YASM_WRITE_16_L(bufp, EM_386); /* e_machine - or others */ + YASM_WRITE_32_L(bufp, EV_CURRENT); /* elf version */ + YASM_WRITE_32_L(bufp, 0); /* e_entry exection startaddr */ + YASM_WRITE_32_L(bufp, 0); /* e_phoff program header off */ + YASM_WRITE_32_L(bufp, secthead_addr); /* e_shoff section header off */ + YASM_WRITE_32_L(bufp, 0); /* e_flags also by arch */ + YASM_WRITE_16_L(bufp, EHDR32_SIZE); /* e_ehsize */ + YASM_WRITE_16_L(bufp, 0); /* e_phentsize */ + YASM_WRITE_16_L(bufp, 0); /* e_phnum */ + YASM_WRITE_16_L(bufp, SHDR32_SIZE); /* e_shentsize */ + YASM_WRITE_16_L(bufp, secthead_count); /* e_shnum */ + YASM_WRITE_16_L(bufp, shstrtab_index); /* e_shstrndx */ + *bufpp = bufp; +} + +const elf_machine_handler +elf_machine_handler_x86_x86 = { + "x86", "x86", ".rel", + SYMTAB32_SIZE, SYMTAB32_ALIGN, RELOC32_SIZE, SHDR32_SIZE, EHDR32_SIZE, + elf_x86_x86_accepts_reloc, + elf_x86_x86_write_symtab_entry, + elf_x86_x86_write_secthead, + elf_x86_x86_write_secthead_rel, + elf_x86_x86_handle_reloc_addend, + elf_x86_x86_map_reloc_info_to_type, + elf_x86_x86_write_reloc, + elf_x86_x86_write_proghead, + elf_x86_x86_ssyms, + sizeof(elf_x86_x86_ssyms)/sizeof(elf_x86_x86_ssyms[0]), + 32 +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf.c b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf.c new file mode 100644 index 0000000000..2486bba8df --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf.c @@ -0,0 +1,960 @@ +/* + * ELF object format helpers + * + * Copyright (C) 2003-2007 Michael Urman + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include +#define YASM_OBJFMT_ELF_INTERNAL +#include "elf.h" +#include "elf-machine.h" + +static void elf_section_data_destroy(void *data); +static void elf_secthead_print(void *data, FILE *f, int indent_level); + +const yasm_assoc_data_callback elf_section_data = { + elf_section_data_destroy, + elf_secthead_print +}; + +static void elf_symrec_data_destroy(/*@only@*/ void *d); +static void elf_symtab_entry_print(void *data, FILE *f, int indent_level); +static void elf_ssym_symtab_entry_print(void *data, FILE *f, int indent_level); + +const yasm_assoc_data_callback elf_symrec_data = { + elf_symrec_data_destroy, + elf_symtab_entry_print +}; + +const yasm_assoc_data_callback elf_ssym_symrec_data = { + elf_symrec_data_destroy, + elf_ssym_symtab_entry_print +}; + +extern elf_machine_handler + elf_machine_handler_x86_x86, + elf_machine_handler_x86_amd64, + elf_machine_handler_x86_x32; + +static const elf_machine_handler *elf_machine_handlers[] = +{ + &elf_machine_handler_x86_x86, + &elf_machine_handler_x86_amd64, + &elf_machine_handler_x86_x32, + NULL +}; +static const elf_machine_handler elf_null_machine = {0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0}; +static elf_machine_handler const *elf_march = &elf_null_machine; +static yasm_symrec **elf_ssyms; + +const elf_machine_handler * +elf_set_arch(yasm_arch *arch, yasm_symtab *symtab, int bits_pref) +{ + const char *machine = yasm_arch_get_machine(arch); + int i; + + for (i=0, elf_march = elf_machine_handlers[0]; + elf_march != NULL; + elf_march = elf_machine_handlers[++i]) + { + if (yasm__strcasecmp(yasm_arch_keyword(arch), elf_march->arch)==0) { + if (yasm__strcasecmp(machine, elf_march->machine)==0) { + if (bits_pref == 0 || bits_pref == elf_march->bits) + break; + } else if (bits_pref == elf_march->bits + && yasm__strcasecmp(machine, "amd64") == 0 + && yasm__strcasecmp(elf_march->machine, "x32") == 0) + break; + } + } + + if (elf_march && elf_march->num_ssyms > 0) + { + /* Allocate "special" syms */ + elf_ssyms = + yasm_xmalloc(elf_march->num_ssyms * sizeof(yasm_symrec *)); + for (i=0; (unsigned int)inum_ssyms; i++) + { + /* FIXME: misuse of NULL bytecode */ + elf_ssyms[i] = yasm_symtab_define_label(symtab, + elf_march->ssyms[i].name, + NULL, 0, 0); + yasm_symrec_add_data(elf_ssyms[i], &elf_ssym_symrec_data, + (void*)&elf_march->ssyms[i]); + } + } + + return elf_march; +} + +yasm_symrec * +elf_get_special_sym(const char *name, const char *parser) +{ + int i; + for (i=0; (unsigned int)inum_ssyms; i++) { + if (yasm__strcasecmp(name, elf_march->ssyms[i].name) == 0) + return elf_ssyms[i]; + } + return NULL; +} + +/* reloc functions */ +int elf_ssym_has_flag(yasm_symrec *wrt, int flag); + +int +elf_is_wrt_sym_relative(yasm_symrec *wrt) +{ + return elf_ssym_has_flag(wrt, ELF_SSYM_SYM_RELATIVE); +} + +int +elf_is_wrt_pos_adjusted(yasm_symrec *wrt) +{ + return elf_ssym_has_flag(wrt, ELF_SSYM_CURPOS_ADJUST); +} + +int +elf_ssym_has_flag(yasm_symrec *wrt, int flag) +{ + int i; + for (i=0; (unsigned int)inum_ssyms; i++) { + if (elf_ssyms[i] == wrt) + return (elf_march->ssyms[i].sym_rel & flag) != 0; + } + return 0; +} + +/* takes ownership of addr */ +elf_reloc_entry * +elf_reloc_entry_create(yasm_symrec *sym, + yasm_symrec *wrt, + yasm_intnum *addr, + int rel, + size_t valsize, + int is_GOT_sym) +{ + elf_reloc_entry *entry; + + if (!elf_march->accepts_reloc) + yasm_internal_error(N_("Unsupported machine for ELF output")); + + if (!elf_march->accepts_reloc(valsize, wrt)) + { + if (addr) + yasm_intnum_destroy(addr); + return NULL; + } + + if (sym == NULL) + yasm_internal_error("sym is null"); + + entry = yasm_xmalloc(sizeof(elf_reloc_entry)); + entry->reloc.sym = sym; + entry->reloc.addr = addr; + entry->rtype_rel = rel; + entry->valsize = valsize; + entry->addend = NULL; + entry->wrt = wrt; + entry->is_GOT_sym = is_GOT_sym; + + return entry; +} + +void +elf_reloc_entry_destroy(void *entry) +{ + if (((elf_reloc_entry*)entry)->addend) + yasm_intnum_destroy(((elf_reloc_entry*)entry)->addend); + yasm_xfree(entry); +} + +/* strtab functions */ +elf_strtab_entry * +elf_strtab_entry_create(const char *str) +{ + elf_strtab_entry *entry = yasm_xmalloc(sizeof(elf_strtab_entry)); + entry->str = yasm__xstrdup(str); + entry->index = 0; + return entry; +} + +void +elf_strtab_entry_set_str(elf_strtab_entry *entry, const char *str) +{ + elf_strtab_entry *last; + if (entry->str) + yasm_xfree(entry->str); + entry->str = yasm__xstrdup(str); + + /* Update all following indices since string length probably changes */ + last = entry; + entry = STAILQ_NEXT(last, qlink); + while (entry) { + entry->index = last->index + (unsigned long)strlen(last->str) + 1; + last = entry; + entry = STAILQ_NEXT(last, qlink); + } +} + +elf_strtab_head * +elf_strtab_create() +{ + elf_strtab_head *strtab = yasm_xmalloc(sizeof(elf_strtab_head)); + elf_strtab_entry *entry = yasm_xmalloc(sizeof(elf_strtab_entry)); + + STAILQ_INIT(strtab); + entry->index = 0; + entry->str = yasm__xstrdup(""); + + STAILQ_INSERT_TAIL(strtab, entry, qlink); + return strtab; +} + +elf_strtab_entry * +elf_strtab_append_str(elf_strtab_head *strtab, const char *str) +{ + elf_strtab_entry *last, *entry; + + if (strtab == NULL) + yasm_internal_error("strtab is null"); + if (STAILQ_EMPTY(strtab)) + yasm_internal_error("strtab is missing initial dummy entry"); + + last = STAILQ_LAST(strtab, elf_strtab_entry, qlink); + + entry = elf_strtab_entry_create(str); + entry->index = last->index + (unsigned long)strlen(last->str) + 1; + + STAILQ_INSERT_TAIL(strtab, entry, qlink); + return entry; +} + +void +elf_strtab_destroy(elf_strtab_head *strtab) +{ + elf_strtab_entry *s1, *s2; + + if (strtab == NULL) + yasm_internal_error("strtab is null"); + if (STAILQ_EMPTY(strtab)) + yasm_internal_error("strtab is missing initial dummy entry"); + + s1 = STAILQ_FIRST(strtab); + while (s1 != NULL) { + s2 = STAILQ_NEXT(s1, qlink); + yasm_xfree(s1->str); + yasm_xfree(s1); + s1 = s2; + } + yasm_xfree(strtab); +} + +unsigned long +elf_strtab_output_to_file(FILE *f, elf_strtab_head *strtab) +{ + unsigned long size = 0; + elf_strtab_entry *entry; + + if (strtab == NULL) + yasm_internal_error("strtab is null"); + + /* consider optimizing tables here */ + STAILQ_FOREACH(entry, strtab, qlink) { + size_t len = 1 + strlen(entry->str); + fwrite(entry->str, len, 1, f); + size += (unsigned long)len; + } + return size; +} + + + +/* symtab functions */ +elf_symtab_entry * +elf_symtab_entry_create(elf_strtab_entry *name, + yasm_symrec *sym) +{ + elf_symtab_entry *entry = yasm_xmalloc(sizeof(elf_symtab_entry)); + entry->in_table = 0; + entry->sym = sym; + entry->sect = NULL; + entry->name = name; + entry->value = 0; + + entry->xsize = NULL; + entry->size = 0; + entry->index = 0; + entry->bind = 0; + entry->type = STT_NOTYPE; + entry->vis = STV_DEFAULT; + + return entry; +} + +static void +elf_symtab_entry_destroy(elf_symtab_entry *entry) +{ + if (entry == NULL) + yasm_internal_error("symtab entry is null"); + + yasm_xfree(entry); +} + +static void +elf_symrec_data_destroy(void *data) +{ + /* do nothing, as this stuff is in the symtab anyway... this speaks of bad + * design/use or this stuff, i fear */ + + /* watch for double-free here ... */ + /*elf_symtab_entry_destroy((elf_symtab_entry *)data);*/ +} + +static void +elf_symtab_entry_print(void *data, FILE *f, int indent_level) +{ + elf_symtab_entry *entry = data; + if (entry == NULL) + yasm_internal_error("symtab entry is null"); + + fprintf(f, "%*sbind=", indent_level, ""); + switch (entry->bind) { + case STB_LOCAL: fprintf(f, "local\n"); break; + case STB_GLOBAL: fprintf(f, "global\n"); break; + case STB_WEAK: fprintf(f, "weak\n"); break; + default: fprintf(f, "undef\n"); break; + } + fprintf(f, "%*stype=", indent_level, ""); + switch (entry->type) { + case STT_NOTYPE: fprintf(f, "notype\n"); break; + case STT_OBJECT: fprintf(f, "object\n"); break; + case STT_FUNC: fprintf(f, "func\n"); break; + case STT_SECTION: fprintf(f, "section\n");break; + case STT_FILE: fprintf(f, "file\n"); break; + default: fprintf(f, "undef\n"); break; + } + fprintf(f, "%*ssize=", indent_level, ""); + if (entry->xsize) + yasm_expr_print(entry->xsize, f); + else + fprintf(f, "%ld", entry->size); + fprintf(f, "\n"); +} + +static void +elf_ssym_symtab_entry_print(void *data, FILE *f, int indent_level) +{ + /* TODO */ +} + +elf_symtab_head * +elf_symtab_create() +{ + elf_symtab_head *symtab = yasm_xmalloc(sizeof(elf_symtab_head)); + elf_symtab_entry *entry = yasm_xmalloc(sizeof(elf_symtab_entry)); + + STAILQ_INIT(symtab); + entry->in_table = 1; + entry->sym = NULL; + entry->sect = NULL; + entry->name = NULL; + entry->value = 0; + entry->xsize = NULL; + entry->size = 0; + entry->index = SHN_UNDEF; + entry->bind = STB_LOCAL; + entry->type = STT_NOTYPE; + entry->vis = STV_DEFAULT; + entry->symindex = 0; + STAILQ_INSERT_TAIL(symtab, entry, qlink); + return symtab; +} + +void +elf_symtab_append_entry(elf_symtab_head *symtab, elf_symtab_entry *entry) +{ + if (symtab == NULL) + yasm_internal_error("symtab is null"); + if (entry == NULL) + yasm_internal_error("symtab entry is null"); + if (STAILQ_EMPTY(symtab)) + yasm_internal_error(N_("symtab is missing initial dummy entry")); + + STAILQ_INSERT_TAIL(symtab, entry, qlink); + entry->in_table = 1; +} + +void +elf_symtab_insert_local_sym(elf_symtab_head *symtab, elf_symtab_entry *entry) +{ + elf_symtab_entry *after = STAILQ_FIRST(symtab); + elf_symtab_entry *before = NULL; + + while (after && (after->bind == STB_LOCAL)) { + before = after; + if (before->type == STT_FILE) break; + after = STAILQ_NEXT(after, qlink); + } + STAILQ_INSERT_AFTER(symtab, before, entry, qlink); + entry->in_table = 1; +} + +void +elf_symtab_destroy(elf_symtab_head *symtab) +{ + elf_symtab_entry *s1, *s2; + + if (symtab == NULL) + yasm_internal_error("symtab is null"); + if (STAILQ_EMPTY(symtab)) + yasm_internal_error(N_("symtab is missing initial dummy entry")); + + s1 = STAILQ_FIRST(symtab); + while (s1 != NULL) { + s2 = STAILQ_NEXT(s1, qlink); + elf_symtab_entry_destroy(s1); + s1 = s2; + } + yasm_xfree(symtab); +} + +unsigned long +elf_symtab_assign_indices(elf_symtab_head *symtab) +{ + elf_symtab_entry *entry, *prev=NULL; + unsigned long last_local=0; + + if (symtab == NULL) + yasm_internal_error("symtab is null"); + if (STAILQ_EMPTY(symtab)) + yasm_internal_error(N_("symtab is missing initial dummy entry")); + + STAILQ_FOREACH(entry, symtab, qlink) { + if (prev) + entry->symindex = prev->symindex + 1; + if (entry->bind == STB_LOCAL) + last_local = entry->symindex; + prev = entry; + } + return last_local + 1; +} + +unsigned long +elf_symtab_write_to_file(FILE *f, elf_symtab_head *symtab, + yasm_errwarns *errwarns) +{ + unsigned char buf[SYMTAB_MAXSIZE], *bufp; + elf_symtab_entry *entry; + unsigned long size = 0; + + if (!symtab) + yasm_internal_error(N_("symtab is null")); + + STAILQ_FOREACH(entry, symtab, qlink) { + + yasm_intnum *size_intn=NULL, *value_intn=NULL; + bufp = buf; + + /* get size (if specified); expr overrides stored integer */ + if (entry->xsize) { + size_intn = yasm_intnum_copy( + yasm_expr_get_intnum(&entry->xsize, 1)); + if (!size_intn) { + yasm_error_set(YASM_ERROR_VALUE, + N_("size specifier not an integer expression")); + yasm_errwarn_propagate(errwarns, entry->xsize->line); + } + } + else + size_intn = yasm_intnum_create_uint(entry->size); + + /* get EQU value for constants */ + if (entry->sym) { + const yasm_expr *equ_expr_c; + equ_expr_c = yasm_symrec_get_equ(entry->sym); + + if (equ_expr_c != NULL) { + const yasm_intnum *equ_intn; + yasm_expr *equ_expr = yasm_expr_copy(equ_expr_c); + equ_intn = yasm_expr_get_intnum(&equ_expr, 1); + + if (equ_intn == NULL) { + yasm_error_set(YASM_ERROR_VALUE, + N_("EQU value not an integer expression")); + yasm_errwarn_propagate(errwarns, equ_expr->line); + } else + value_intn = yasm_intnum_copy(equ_intn); + entry->index = SHN_ABS; + yasm_expr_destroy(equ_expr); + } + } + if (value_intn == NULL) + value_intn = yasm_intnum_create_uint(entry->value); + + /* If symbol is in a TLS section, force its type to TLS. */ + if (entry->sym) { + yasm_bytecode *precbc; + yasm_section *sect; + elf_secthead *shead; + if (yasm_symrec_get_label(entry->sym, &precbc) && + (sect = yasm_bc_get_section(precbc)) && + (shead = yasm_section_get_data(sect, &elf_section_data)) && + shead->flags & SHF_TLS) { + entry->type = STT_TLS; + } + } + + if (!elf_march->write_symtab_entry || !elf_march->symtab_entry_size) + yasm_internal_error(N_("Unsupported machine for ELF output")); + elf_march->write_symtab_entry(bufp, entry, value_intn, size_intn); + fwrite(buf, elf_march->symtab_entry_size, 1, f); + size += elf_march->symtab_entry_size; + + yasm_intnum_destroy(size_intn); + yasm_intnum_destroy(value_intn); + } + return size; +} + +void elf_symtab_set_nonzero(elf_symtab_entry *entry, + yasm_section *sect, + elf_section_index sectidx, + elf_symbol_binding bind, + elf_symbol_type type, + yasm_expr *xsize, + elf_address *value) +{ + if (!entry) + yasm_internal_error("NULL entry"); + if (sect) entry->sect = sect; + if (sectidx) entry->index = sectidx; + if (bind) entry->bind = bind; + if (type) entry->type = type; + if (xsize) entry->xsize = xsize; + if (value) entry->value = *value; +} + +void +elf_sym_set_visibility(elf_symtab_entry *entry, + elf_symbol_vis vis) +{ + entry->vis = ELF_ST_VISIBILITY(vis); +} + +void +elf_sym_set_type(elf_symtab_entry *entry, + elf_symbol_type type) +{ + entry->type = type; +} + +void +elf_sym_set_size(elf_symtab_entry *entry, + struct yasm_expr *size) +{ + if (entry->xsize) + yasm_expr_destroy(entry->xsize); + entry->xsize = size; +} + +int +elf_sym_in_table(elf_symtab_entry *entry) +{ + return entry->in_table; +} + +elf_secthead * +elf_secthead_create(elf_strtab_entry *name, + elf_section_type type, + elf_section_flags flags, + elf_address offset, + elf_size size) +{ + elf_secthead *esd = yasm_xmalloc(sizeof(elf_secthead)); + + esd->type = type; + esd->flags = flags; + esd->offset = offset; + esd->size = yasm_intnum_create_uint(size); + esd->link = 0; + esd->info = 0; + esd->align = 0; + esd->entsize = 0; + esd->index = 0; + + esd->sym = NULL; + esd->name = name; + esd->index = 0; + esd->rel_name = NULL; + esd->rel_index = 0; + esd->rel_offset = 0; + esd->nreloc = 0; + + if (name && (strcmp(name->str, ".symtab") == 0)) { + if (!elf_march->symtab_entry_size || !elf_march->symtab_entry_align) + yasm_internal_error(N_("unsupported ELF format")); + esd->entsize = elf_march->symtab_entry_size; + esd->align = elf_march->symtab_entry_align; + } + + return esd; +} + +void +elf_secthead_destroy(elf_secthead *shead) +{ + if (shead == NULL) + yasm_internal_error(N_("shead is null")); + + yasm_intnum_destroy(shead->size); + + yasm_xfree(shead); +} + +static void +elf_section_data_destroy(void *data) +{ + elf_secthead_destroy((elf_secthead *)data); +} + +static void +elf_secthead_print(void *data, FILE *f, int indent_level) +{ + elf_secthead *sect = data; + fprintf(f, "%*sname=%s\n", indent_level, "", + sect->name ? sect->name->str : ""); + fprintf(f, "%*ssym=\n", indent_level, ""); + yasm_symrec_print(sect->sym, f, indent_level+1); + fprintf(f, "%*sindex=0x%x\n", indent_level, "", sect->index); + fprintf(f, "%*sflags=", indent_level, ""); + if (sect->flags & SHF_WRITE) + fprintf(f, "WRITE "); + if (sect->flags & SHF_ALLOC) + fprintf(f, "ALLOC "); + if (sect->flags & SHF_EXECINSTR) + fprintf(f, "EXEC "); + /*if (sect->flags & SHF_MASKPROC) + fprintf(f, "PROC-SPECIFIC"); */ + fprintf(f, "%*soffset=0x%lx\n", indent_level, "", sect->offset); + fprintf(f, "%*ssize=0x%lx\n", indent_level, "", + yasm_intnum_get_uint(sect->size)); + fprintf(f, "%*slink=0x%x\n", indent_level, "", sect->link); + fprintf(f, "%*salign=%lu\n", indent_level, "", sect->align); + fprintf(f, "%*snreloc=%ld\n", indent_level, "", sect->nreloc); +} + +unsigned long +elf_secthead_write_to_file(FILE *f, elf_secthead *shead, + elf_section_index sindex) +{ + unsigned char buf[SHDR_MAXSIZE], *bufp = buf; + shead->index = sindex; + + if (shead == NULL) + yasm_internal_error("shead is null"); + + if (!elf_march->write_secthead || !elf_march->secthead_size) + yasm_internal_error(N_("Unsupported machine for ELF output")); + elf_march->write_secthead(bufp, shead); + if (fwrite(buf, elf_march->secthead_size, 1, f)) + return elf_march->secthead_size; + yasm_internal_error(N_("Failed to write an elf section header")); + return 0; +} + +void +elf_secthead_append_reloc(yasm_section *sect, elf_secthead *shead, + elf_reloc_entry *reloc) +{ + if (sect == NULL) + yasm_internal_error("sect is null"); + if (shead == NULL) + yasm_internal_error("shead is null"); + if (reloc == NULL) + yasm_internal_error("reloc is null"); + + shead->nreloc++; + yasm_section_add_reloc(sect, (yasm_reloc *)reloc, elf_reloc_entry_destroy); +} + +char * +elf_secthead_name_reloc_section(const char *basesect) +{ + if (!elf_march->reloc_section_prefix) + { + yasm_internal_error(N_("Unsupported machine for ELF output")); + return NULL; + } + else + { + size_t prepend_length = strlen(elf_march->reloc_section_prefix); + char *sectname = yasm_xmalloc(prepend_length + strlen(basesect) + 1); + strcpy(sectname, elf_march->reloc_section_prefix); + strcat(sectname, basesect); + return sectname; + } +} + +void +elf_handle_reloc_addend(yasm_intnum *intn, + elf_reloc_entry *reloc, + unsigned long offset) +{ + if (!elf_march->handle_reloc_addend) + yasm_internal_error(N_("Unsupported machine for ELF output")); + elf_march->handle_reloc_addend(intn, reloc, offset); +} + +unsigned long +elf_secthead_write_rel_to_file(FILE *f, elf_section_index symtab_idx, + yasm_section *sect, elf_secthead *shead, + elf_section_index sindex) +{ + unsigned char buf[SHDR_MAXSIZE], *bufp = buf; + + if (shead == NULL) + yasm_internal_error("shead is null"); + + if (!yasm_section_relocs_first(sect)) + return 0; /* no relocations, no .rel.* section header */ + + shead->rel_index = sindex; + + if (!elf_march->write_secthead_rel || !elf_march->secthead_size) + yasm_internal_error(N_("Unsupported machine for ELF output")); + elf_march->write_secthead_rel(bufp, shead, symtab_idx, sindex); + if (fwrite(buf, elf_march->secthead_size, 1, f)) + return elf_march->secthead_size; + yasm_internal_error(N_("Failed to write an elf section header")); + return 0; +} + +unsigned long +elf_secthead_write_relocs_to_file(FILE *f, yasm_section *sect, + elf_secthead *shead, yasm_errwarns *errwarns) +{ + elf_reloc_entry *reloc; + unsigned char buf[RELOC_MAXSIZE], *bufp; + unsigned long size = 0; + long pos; + + if (shead == NULL) + yasm_internal_error("shead is null"); + + reloc = (elf_reloc_entry *)yasm_section_relocs_first(sect); + if (!reloc) + return 0; + + /* first align section to multiple of 4 */ + pos = ftell(f); + if (pos == -1) { + yasm_error_set(YASM_ERROR_IO, + N_("couldn't read position on output stream")); + yasm_errwarn_propagate(errwarns, 0); + } + pos = (pos + 3) & ~3; + if (fseek(f, pos, SEEK_SET) < 0) { + yasm_error_set(YASM_ERROR_IO, N_("couldn't seek on output stream")); + yasm_errwarn_propagate(errwarns, 0); + } + shead->rel_offset = (unsigned long)pos; + + + while (reloc) { + unsigned int r_type=0, r_sym; + elf_symtab_entry *esym; + + esym = yasm_symrec_get_data(reloc->reloc.sym, &elf_symrec_data); + if (esym) + r_sym = esym->symindex; + else + r_sym = STN_UNDEF; + + if (!elf_march->map_reloc_info_to_type) + yasm_internal_error(N_("Unsupported arch/machine for elf output")); + r_type = elf_march->map_reloc_info_to_type(reloc); + + bufp = buf; + if (!elf_march->write_reloc || !elf_march->reloc_entry_size) + yasm_internal_error(N_("Unsupported arch/machine for elf output")); + elf_march->write_reloc(bufp, reloc, r_type, r_sym); + fwrite(buf, elf_march->reloc_entry_size, 1, f); + size += elf_march->reloc_entry_size; + + reloc = (elf_reloc_entry *) + yasm_section_reloc_next((yasm_reloc *)reloc); + } + return size; +} + +elf_section_type +elf_secthead_get_type(elf_secthead *shead) +{ + return shead->type; +} + +void +elf_secthead_set_typeflags(elf_secthead *shead, elf_section_type type, + elf_section_flags flags) +{ + shead->type = type; + shead->flags = flags; +} + +int +elf_secthead_is_empty(elf_secthead *shead) +{ + return yasm_intnum_is_zero(shead->size); +} + +yasm_symrec * +elf_secthead_get_sym(elf_secthead *shead) +{ + return shead->sym; +} + +elf_section_index +elf_secthead_get_index(elf_secthead *shead) +{ + return shead->index; +} + +unsigned long +elf_secthead_get_align(const elf_secthead *shead) +{ + return shead->align; +} + +unsigned long +elf_secthead_set_align(elf_secthead *shead, unsigned long align) +{ + return shead->align = align; +} + +elf_section_info +elf_secthead_set_info(elf_secthead *shead, elf_section_info info) +{ + return shead->info = info; +} + +elf_section_index +elf_secthead_set_index(elf_secthead *shead, elf_section_index sectidx) +{ + return shead->index = sectidx; +} + +elf_section_index +elf_secthead_set_link(elf_secthead *shead, elf_section_index link) +{ + return shead->link = link; +} + +elf_section_index +elf_secthead_set_rel_index(elf_secthead *shead, elf_section_index sectidx) +{ + return shead->rel_index = sectidx; +} + +elf_strtab_entry * +elf_secthead_set_rel_name(elf_secthead *shead, elf_strtab_entry *entry) +{ + return shead->rel_name = entry; +} + +elf_size +elf_secthead_set_entsize(elf_secthead *shead, elf_size size) +{ + return shead->entsize = size; +} + +yasm_symrec * +elf_secthead_set_sym(elf_secthead *shead, yasm_symrec *sym) +{ + return shead->sym = sym; +} + +void +elf_secthead_add_size(elf_secthead *shead, yasm_intnum *size) +{ + if (size) { + yasm_intnum_calc(shead->size, YASM_EXPR_ADD, size); + } +} + +long +elf_secthead_set_file_offset(elf_secthead *shead, long pos) +{ + unsigned long align = shead->align; + + if (align == 0 || align == 1) { + shead->offset = (unsigned long)pos; + return pos; + } + else if (align & (align - 1)) + yasm_internal_error( + N_("alignment %d for section `%s' is not a power of 2")); + /*, align, sect->name->str);*/ + + shead->offset = (unsigned long)((pos + align - 1) & ~(align - 1)); + return (long)shead->offset; +} + +unsigned long +elf_proghead_get_size(void) +{ + if (!elf_march->proghead_size) + yasm_internal_error(N_("Unsupported ELF format for output")); + return elf_march->proghead_size; +} + +unsigned long +elf_proghead_write_to_file(FILE *f, + elf_offset secthead_addr, + unsigned long secthead_count, + elf_section_index shstrtab_index) +{ + unsigned char buf[EHDR_MAXSIZE], *bufp = buf; + + YASM_WRITE_8(bufp, ELFMAG0); /* ELF magic number */ + YASM_WRITE_8(bufp, ELFMAG1); + YASM_WRITE_8(bufp, ELFMAG2); + YASM_WRITE_8(bufp, ELFMAG3); + + if (!elf_march->write_proghead || !elf_march->proghead_size) + yasm_internal_error(N_("Unsupported ELF format for output")); + elf_march->write_proghead(&bufp, secthead_addr, secthead_count, shstrtab_index); + + if (((unsigned)(bufp - buf)) != elf_march->proghead_size) + yasm_internal_error(N_("ELF program header is not proper length")); + + if (fwrite(buf, elf_march->proghead_size, 1, f)) + return elf_march->proghead_size; + + yasm_internal_error(N_("Failed to write ELF program header")); + return 0; +} diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf.h b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf.h new file mode 100644 index 0000000000..fce629ae45 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/elf.h @@ -0,0 +1,532 @@ +/* + * ELF object format helpers + * + * Copyright (C) 2003-2007 Michael Urman + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + */ + +#ifndef ELF_H_INCLUDED +#define ELF_H_INCLUDED + +typedef struct elf_reloc_entry elf_reloc_entry; +typedef struct elf_reloc_head elf_reloc_head; +typedef struct elf_secthead elf_secthead; +typedef struct elf_strtab_entry elf_strtab_entry; +typedef struct elf_strtab_head elf_strtab_head; +typedef struct elf_symtab_entry elf_symtab_entry; +typedef struct elf_symtab_head elf_symtab_head; + +typedef struct elf_machine_handler elf_machine_handler; + +typedef unsigned long elf_address; +typedef unsigned long elf_offset; +typedef unsigned long elf_size; +typedef unsigned long elf_section_info; + +typedef enum { + ET_NONE = 0, + ET_REL = 1, /* Relocatable */ + ET_EXEC = 2, /* Executable */ + ET_DYN = 3, /* Shared object */ + ET_CORE = 4, /* Core */ + ET_LOOS = 0xfe00, /* Environment specific */ + ET_HIOS = 0xfeff, + ET_LOPROC = 0xff00, /* Processor specific */ + ET_HIPROC = 0xffff +} elf_file_type; + +typedef enum { + EM_NONE = 0, + EM_M32 = 1, /* AT&T WE 32100 */ + EM_SPARC = 2, /* SPARC */ + EM_386 = 3, /* Intel 80386 */ + EM_68K = 4, /* Motorola 68000 */ + EM_88K = 5, /* Motorola 88000 */ + EM_860 = 7, /* Intel 80860 */ + EM_MIPS = 8, /* MIPS RS3000 */ + + EM_S370 = 9, /* IBM System/370 */ + EM_MIPS_RS4_BE = 10, /* MIPS R4000 Big-Endian (dep)*/ + EM_PARISC = 15, /* HPPA */ + EM_SPARC32PLUS = 18, /* SPARC v8plus */ + EM_PPC = 20, /* PowerPC 32-bit */ + EM_PPC64 = 21, /* PowerPC 64-bit */ + EM_ARM = 40, /* ARM */ + EM_SPARCV9 = 43, /* SPARC v9 64-bit */ + EM_IA_64 = 50, /* Intel IA-64 */ + EM_X86_64 = 62, /* AMD x86-64 */ + EM_ALPHA = 0x9026 /* Alpha (no ABI) */ +} elf_machine; + +typedef enum { + ELFMAG0 = 0x7f, + ELFMAG1 = 0x45, + ELFMAG2 = 0x4c, + ELFMAG3 = 0x46 +} elf_magic; + +typedef enum { + EV_NONE = 0, /* invalid */ + EV_CURRENT = 1 /* current */ +} elf_version; + +typedef enum { + EI_MAG0 = 0, /* File id */ + EI_MAG1 = 1, + EI_MAG2 = 2, + EI_MAG3 = 3, + EI_CLASS = 4, /* File class */ + EI_DATA = 5, /* Data encoding */ + EI_VERSION = 6, /* File version */ + EI_OSABI = 7, /* OS and ABI */ + EI_ABIVERSION = 8, /* version of ABI */ + + EI_PAD = 9, /* Pad to end; start here */ + EI_NIDENT = 16 /* Sizeof e_ident[] */ +} elf_identification_index; + +typedef enum { + ELFOSABI_SYSV = 0, /* System V ABI */ + ELFOSABI_HPUX = 1, /* HP-UX os */ + ELFOSABI_STANDALONE = 255 /* Standalone / embedded app */ +} elf_osabi_index; + +typedef enum { + ELFCLASSNONE = 0, /* invalid */ + ELFCLASS32 = 1, /* 32-bit */ + ELFCLASS64 = 2 /* 64-bit */ +} elf_class; + +typedef enum { + ELFDATANONE = 0, + ELFDATA2LSB = 1, + ELFDATA2MSB = 2 +} elf_data_encoding; + +/* elf section types - index of semantics */ +typedef enum { + SHT_NULL = 0, /* inactive section - no associated data */ + SHT_PROGBITS = 1, /* defined by program for its own meaning */ + SHT_SYMTAB = 2, /* symbol table (primarily) for linking */ + SHT_STRTAB = 3, /* string table - symbols need names */ + SHT_RELA = 4, /* relocation entries w/ explicit addends */ + SHT_HASH = 5, /* symbol hash table - for dynamic linking */ + SHT_DYNAMIC = 6, /* information for dynamic linking */ + SHT_NOTE = 7, /* extra data marking the file somehow */ + SHT_NOBITS = 8, /* no stored data, but occupies runtime space */ + SHT_REL = 9, /* relocations entries w/o explicit addends */ + SHT_SHLIB = 10, /* reserved; unspecified semantics */ + SHT_DYNSYM = 11, /* like symtab, but more for dynamic linking */ + + SHT_LOOS = 0x60000000, /* reserved for environment specific use */ + SHT_HIOS = 0x6fffffff, + SHT_LOPROC = 0x70000000, /* reserved for processor specific semantics */ + SHT_HIPROC = 0x7fffffff/*, + SHT_LOUSER = 0x80000000,*/ /* reserved for applications; safe */ + /*SHT_HIUSER = 0xffffffff*/ +} elf_section_type; + +/* elf section flags - bitfield of attributes */ +typedef enum { + SHF_WRITE = 0x1, /* data should be writable at runtime */ + SHF_ALLOC = 0x2, /* occupies memory at runtime */ + SHF_EXECINSTR = 0x4, /* contains machine instructions */ + SHF_MERGE = 0x10, /* data can be merged */ + SHF_STRINGS = 0x20, /* contains 0-terminated strings */ + SHF_GROUP = 0x200, /* member of a section group */ + SHF_TLS = 0x400, /* thread local storage */ + SHF_MASKOS = 0x0f000000/*,*//* environment specific use */ + /*SHF_MASKPROC = 0xf0000000*/ /* bits reserved for processor specific needs */ +} elf_section_flags; + +/* elf section index - just the special ones */ +typedef enum { + SHN_UNDEF = 0, /* undefined symbol; requires other global */ + SHN_LORESERVE = 0xff00, /* reserved for various semantics */ + SHN_LOPROC = 0xff00, /* reserved for processor specific semantics */ + SHN_HIPROC = 0xff1f, + SHN_LOOS = 0xff20, /* reserved for environment specific use */ + SHN_HIOS = 0xff3f, + SHN_ABS = 0xfff1, /* associated symbols don't change on reloc */ + SHN_COMMON = 0xfff2, /* associated symbols refer to unallocated */ + SHN_HIRESERVE = 0xffff +} elf_section_index; + +/* elf symbol binding - index of visibility/behavior */ +typedef enum { + STB_LOCAL = 0, /* invisible outside defining file */ + STB_GLOBAL = 1, /* visible to all combined object files */ + STB_WEAK = 2, /* global but lower precedence */ + + STB_LOOS = 10, /* Environment specific use */ + STB_HIOS = 12, + STB_LOPROC = 13, /* reserved for processor specific semantics */ + STB_HIPROC = 15 +} elf_symbol_binding; + +/* elf symbol type - index of classifications */ +typedef enum { + STT_NOTYPE = 0, /* type not specified */ + STT_OBJECT = 1, /* data object such as a variable, array, etc */ + STT_FUNC = 2, /* a function or executable code */ + STT_SECTION = 3, /* a section: often for relocation, STB_LOCAL */ + STT_FILE = 4, /* often source filename: STB_LOCAL, SHN_ABS */ + STT_COMMON = 5, /* Uninitialized common block. */ + STT_TLS = 6, /* TLS object. */ + STT_NUM = 7, + + STT_LOOS = 10, /* Environment specific use */ + STT_HIOS = 12, + STT_LOPROC = 13, /* reserved for processor specific semantics */ + STT_HIPROC = 15 +} elf_symbol_type; + +typedef enum { + STN_UNDEF = 0 +} elf_symbol_index; + +/* elf symbol visibility - lower two bits of OTHER field */ +typedef enum { + STV_DEFAULT = 0, /* Default symbol visibility rules */ + STV_INTERNAL = 1, /* Processor specific hidden class */ + STV_HIDDEN = 2, /* Sym unavailable in other modules */ + STV_PROTECTED = 3 /* Not preemptable, not exported */ +} elf_symbol_vis; + + +/* internal only object definitions */ +#ifdef YASM_OBJFMT_ELF_INTERNAL + +#define ELF_VISIBILITY_MASK 0x03 +#define ELF_ST_VISIBILITY(v) ((v) & ELF_VISIBILITY_MASK) + +#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf)) +#define ELF32_R_INFO(s,t) (((s)<<8)+(unsigned char)(t)) +#define ELF32_ST_OTHER(vis) ELF_ST_VISIBILITY(vis) + +#define ELF64_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf)) +#define ELF64_R_INFO(s,t) (((s)<<32) + ((t) & 0xffffffffL)) +#define ELF64_ST_OTHER(vis) ELF_ST_VISIBILITY(vis) + +#define EHDR32_SIZE 52 +#define EHDR64_SIZE 64 +#define EHDR_MAXSIZE 64 + +#define SHDR32_SIZE 40 +#define SHDR64_SIZE 64 +#define SHDR_MAXSIZE 64 + +#define SYMTAB32_SIZE 16 +#define SYMTAB64_SIZE 24 +#define SYMTAB_MAXSIZE 24 + +#define SYMTAB32_ALIGN 4 +#define SYMTAB64_ALIGN 8 + +#define RELOC32_SIZE 8 +#define RELOC32A_SIZE 12 +#define RELOC64_SIZE 16 +#define RELOC64A_SIZE 24 +#define RELOC_MAXSIZE 24 + +#define RELOC32_ALIGN 4 +#define RELOC64_ALIGN 8 + + +/* elf relocation type - index of semantics + * + * A = Addend (r_addend for RELA, value at location for REL) + * B = Base address + * G = Offset into global offset table (GOT) + * GOT = Address of the global offset table (GOT) + * L = Location of procedure linkage table (PLT) + * P = Location of location being relocated (r_offset) + * S = Value of symbol + */ +typedef enum { + R_386_NONE = 0, /* none */ + R_386_32 = 1, /* word32, S + A */ + R_386_PC32 = 2, /* word32, S + A - P */ + R_386_GOT32 = 3, /* word32, G + A - P */ + R_386_PLT32 = 4, /* word32, L + A - P */ + R_386_COPY = 5, /* none */ + R_386_GLOB_DAT = 6, /* word32, S */ + R_386_JMP_SLOT = 7, /* word32, S */ + R_386_RELATIVE = 8, /* word32, B + A */ + R_386_GOTOFF = 9, /* word32, S + A - GOT */ + R_386_GOTPC = 10, /* word32, GOT + A - P */ + R_386_TLS_TPOFF = 14, /* Negative offset in static TLS block (GNU + version) */ + R_386_TLS_IE = 15, /* Absolute address of GOT entry for negative + static TLS block offset */ + R_386_TLS_GOTIE = 16, /* GOT entry for negative static TLS block + offset */ + R_386_TLS_LE = 17, /* Negative offset relative to static TLS + (GNU version) */ + R_386_TLS_GD = 18, /* Direct 32 bit for GNU version of GD TLS */ + R_386_TLS_LDM = 19, /* Direct 32 bit for GNU version of LD TLS + in LE code */ + R_386_16 = 20, /* word16, S + A (GNU extension) */ + R_386_PC16 = 21, /* word16, S + A - P (GNU extension) */ + R_386_8 = 22, /* word8, S + A (GNU extension) */ + R_386_PC8 = 23, /* word8, S + A - P (GNU extension) */ + R_386_TLS_GD_32 = 24, /* Direct 32 bit for GD TLS */ + R_386_TLS_GD_PUSH = 25, /* Tag for pushl in GD TLS code */ + R_386_TLS_GD_CALL = 26, /* Relocation for call to */ + R_386_TLS_GD_POP = 27, /* Tag for popl in GD TLS code */ + R_386_TLS_LDM_32 = 28, /* Direct 32 bit for local dynamic code */ + R_386_TLS_LDM_PUSH = 29, /* Tag for pushl in LDM TLS code */ + R_386_TLS_LDM_CALL = 30, /* Relocation for call to */ + R_386_TLS_LDM_POP = 31, /* Tag for popl in LDM TLS code */ + R_386_TLS_LDO_32 = 32, /* Offset relative to TLS block */ + R_386_TLS_IE_32 = 33, /* GOT entry for static TLS block */ + R_386_TLS_LE_32 = 34, /* Offset relative to static TLS block */ + R_386_TLS_DTPMOD32 = 35, /* ID of module containing symbol */ + R_386_TLS_DTPOFF32 = 36, /* Offset in TLS block */ + R_386_TLS_TPOFF32 = 37, /* Offset in static TLS block */ + R_386_TLS_GOTDESC = 39, + R_386_TLS_DESC_CALL = 40, + R_386_TLS_DESC = 41 +} elf_386_relocation_type; + +typedef enum { + R_X86_64_NONE = 0, /* none */ + R_X86_64_64 = 1, /* word64, S + A */ + R_X86_64_PC32 = 2, /* word32, S + A - P */ + R_X86_64_GOT32 = 3, /* word32, G + A */ + R_X86_64_PLT32 = 4, /* word32, L + A - P */ + R_X86_64_COPY = 5, /* none */ + R_X86_64_GLOB_DAT = 6, /* word64, S, set GOT entry to data address */ + R_X86_64_JMP_SLOT = 7, /* word64, S, set GOT entry to code address */ + R_X86_64_RELATIVE = 8, /* word64, B + A */ + R_X86_64_GOTPCREL = 9, /* word32, G + GOT + A - P */ + R_X86_64_32 = 10, /* word32 (zero extend), S + A */ + R_X86_64_32S = 11, /* word32 (sign extend), S + A */ + R_X86_64_16 = 12, /* word16, S + A */ + R_X86_64_PC16 = 13, /* word16, S + A - P */ + R_X86_64_8 = 14, /* word8, S + A */ + R_X86_64_PC8 = 15, /* word8, S + A - P */ + R_X86_64_DPTMOD64 = 16, /* word64, ID of module containing symbol */ + R_X86_64_DTPOFF64 = 17, /* word64, offset in TLS block */ + R_X86_64_TPOFF64 = 18, /* word64, offset in initial TLS block */ + R_X86_64_TLSGD = 19, /* word32, PC-rel offset to GD GOT block */ + R_X86_64_TLSLD = 20, /* word32, PC-rel offset to LD GOT block */ + R_X86_64_DTPOFF32 = 21, /* word32, offset to TLS block */ + R_X86_64_GOTTPOFF = 22, /* word32, PC-rel offset to IE GOT entry */ + R_X86_64_TPOFF32 = 23, /* word32, offset in initial TLS block */ + R_X86_64_PC64 = 24, /* word64, PC relative */ + R_X86_64_GOTOFF64 = 25, /* word64, offset to GOT */ + R_X86_64_GOTPC32 = 26, /* word32, signed pc relative to GOT */ + R_X86_64_GOT64 = 27, /* word64, GOT entry offset */ + R_X86_64_GOTPCREL64 = 28, /* word64, signed pc relative to GOT entry */ + R_X86_64_GOTPC64 = 29, /* word64, signed pc relative to GOT */ + R_X86_64_GOTPLT64 = 30, /* like GOT64, but indicates PLT entry needed */ + R_X86_64_PLTOFF64 = 31, /* word64, GOT relative offset to PLT entry */ + R_X86_64_GOTPC32_TLSDESC = 34, /* GOT offset for TLS descriptor */ + R_X86_64_TLSDESC_CALL = 35, /* Marker for call through TLS descriptor */ + R_X86_64_TLSDESC = 36 /* TLS descriptor */ +} elf_x86_64_relocation_type; + +struct elf_secthead { + elf_section_type type; + elf_section_flags flags; + elf_address offset; + yasm_intnum *size; + elf_section_index link; + elf_section_info info; /* see note ESD1 */ + unsigned long align; + elf_size entsize; + + yasm_symrec *sym; + elf_strtab_entry *name; + elf_section_index index; + + elf_strtab_entry *rel_name; + elf_section_index rel_index; + elf_address rel_offset; + unsigned long nreloc; +}; + +/* Note ESD1: + * for section types SHT_REL, SHT_RELA: + * link -> index of associated symbol table + * info -> index of relocated section + * for section types SHT_SYMTAB, SHT_DYNSYM: + * link -> index of associated string table + * info -> 1+index of last "local symbol" (bind == STB_LOCAL) + * (for section type SHT_DNAMIC: + * link -> index of string table + * info -> 0 ) + * (for section type SHT_HASH: + * link -> index of symbol table to which hash applies + * info -> 0 ) + * for all others: + * link -> SHN_UNDEF + * info -> 0 + */ + +struct elf_reloc_entry { + yasm_reloc reloc; + int rtype_rel; + size_t valsize; + yasm_intnum *addend; + /*@null@*/ yasm_symrec *wrt; + int is_GOT_sym; +}; + +STAILQ_HEAD(elf_strtab_head, elf_strtab_entry); +struct elf_strtab_entry { + STAILQ_ENTRY(elf_strtab_entry) qlink; + unsigned long index; + char *str; +}; + +STAILQ_HEAD(elf_symtab_head, elf_symtab_entry); +struct elf_symtab_entry { + STAILQ_ENTRY(elf_symtab_entry) qlink; + int in_table; + yasm_symrec *sym; + yasm_section *sect; + elf_strtab_entry *name; + elf_address value; + /*@dependent@*/ yasm_expr *xsize; + elf_size size; + elf_section_index index; + elf_symbol_binding bind; + elf_symbol_type type; + elf_symbol_vis vis; + elf_symbol_index symindex; +}; + +#endif /* defined(YASM_OBJFMT_ELF_INTERNAL) */ + +extern const yasm_assoc_data_callback elf_section_data; +extern const yasm_assoc_data_callback elf_symrec_data; +extern const yasm_assoc_data_callback elf_ssym_symrec_data; + + +const elf_machine_handler *elf_set_arch(struct yasm_arch *arch, + yasm_symtab *symtab, + int bits_pref); + +yasm_symrec *elf_get_special_sym(const char *name, const char *parser); + +/* reloc functions */ +int elf_is_wrt_sym_relative(yasm_symrec *wrt); +int elf_is_wrt_pos_adjusted(yasm_symrec *wrt); +elf_reloc_entry *elf_reloc_entry_create(yasm_symrec *sym, + /*@null@*/ yasm_symrec *wrt, + yasm_intnum *addr, + int rel, + size_t valsize, + int is_GOT_sym); +void elf_reloc_entry_destroy(void *entry); + +/* strtab functions */ +elf_strtab_entry *elf_strtab_entry_create(const char *str); +void elf_strtab_entry_set_str(elf_strtab_entry *entry, const char *str); +elf_strtab_head *elf_strtab_create(void); +elf_strtab_entry *elf_strtab_append_str(elf_strtab_head *head, const char *str); +void elf_strtab_destroy(elf_strtab_head *head); +unsigned long elf_strtab_output_to_file(FILE *f, elf_strtab_head *head); + +/* symtab functions */ +elf_symtab_entry *elf_symtab_entry_create(elf_strtab_entry *name, + struct yasm_symrec *sym); +elf_symtab_head *elf_symtab_create(void); +void elf_symtab_append_entry(elf_symtab_head *symtab, elf_symtab_entry *entry); +void elf_symtab_insert_local_sym(elf_symtab_head *symtab, + elf_symtab_entry *entry); +void elf_symtab_destroy(elf_symtab_head *head); +unsigned long elf_symtab_assign_indices(elf_symtab_head *symtab); +unsigned long elf_symtab_write_to_file(FILE *f, elf_symtab_head *symtab, + yasm_errwarns *errwarns); +void elf_symtab_set_nonzero(elf_symtab_entry *entry, + struct yasm_section *sect, + elf_section_index sectidx, + elf_symbol_binding bind, + elf_symbol_type type, + struct yasm_expr *size, + elf_address *value); +void elf_sym_set_visibility(elf_symtab_entry *entry, + elf_symbol_vis vis); +void elf_sym_set_type(elf_symtab_entry *entry, elf_symbol_type type); +void elf_sym_set_size(elf_symtab_entry *entry, struct yasm_expr *size); +int elf_sym_in_table(elf_symtab_entry *entry); + +/* section header functions */ +elf_secthead *elf_secthead_create(elf_strtab_entry *name, + elf_section_type type, + elf_section_flags flags, + elf_address offset, + elf_size size); +void elf_secthead_destroy(elf_secthead *esd); +unsigned long elf_secthead_write_to_file(FILE *f, elf_secthead *esd, + elf_section_index sindex); +void elf_secthead_append_reloc(yasm_section *sect, elf_secthead *shead, + elf_reloc_entry *reloc); +elf_section_type elf_secthead_get_type(elf_secthead *shead); +void elf_secthead_set_typeflags(elf_secthead *shead, elf_section_type type, + elf_section_flags flags); +int elf_secthead_is_empty(elf_secthead *shead); +struct yasm_symrec *elf_secthead_get_sym(elf_secthead *shead); +unsigned long elf_secthead_get_align(const elf_secthead *shead); +unsigned long elf_secthead_set_align(elf_secthead *shead, unsigned long align); +elf_section_index elf_secthead_get_index(elf_secthead *shead); +elf_section_info elf_secthead_set_info(elf_secthead *shead, + elf_section_info info); +elf_section_index elf_secthead_set_index(elf_secthead *shead, + elf_section_index sectidx); +elf_section_index elf_secthead_set_link(elf_secthead *shead, + elf_section_index link); +elf_section_index elf_secthead_set_rel_index(elf_secthead *shead, + elf_section_index sectidx); +elf_strtab_entry *elf_secthead_set_rel_name(elf_secthead *shead, + elf_strtab_entry *entry); +elf_size elf_secthead_set_entsize(elf_secthead *shead, elf_size size); +struct yasm_symrec *elf_secthead_set_sym(elf_secthead *shead, + struct yasm_symrec *sym); +void elf_secthead_add_size(elf_secthead *shead, yasm_intnum *size); +char *elf_secthead_name_reloc_section(const char *basesect); +void elf_handle_reloc_addend(yasm_intnum *intn, + elf_reloc_entry *reloc, + unsigned long offset); +unsigned long elf_secthead_write_rel_to_file(FILE *f, elf_section_index symtab, + yasm_section *sect, + elf_secthead *esd, + elf_section_index sindex); +unsigned long elf_secthead_write_relocs_to_file(FILE *f, yasm_section *sect, + elf_secthead *shead, + yasm_errwarns *errwarns); +long elf_secthead_set_file_offset(elf_secthead *shead, long pos); + +/* program header function */ +unsigned long +elf_proghead_get_size(void); +unsigned long +elf_proghead_write_to_file(FILE *f, + elf_offset secthead_addr, + unsigned long secthead_count, + elf_section_index shstrtab_index); + +#endif /* ELF_H_INCLUDED */ diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/Makefile.inc new file mode 100644 index 0000000000..0980329cf7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/Makefile.inc @@ -0,0 +1,59 @@ +TESTS += modules/objfmts/elf/tests/elf_test.sh + +EXTRA_DIST += modules/objfmts/elf/tests/elf_test.sh +EXTRA_DIST += modules/objfmts/elf/tests/curpos.asm +EXTRA_DIST += modules/objfmts/elf/tests/curpos.hex +EXTRA_DIST += modules/objfmts/elf/tests/curpos-err.asm +EXTRA_DIST += modules/objfmts/elf/tests/curpos-err.errwarn +EXTRA_DIST += modules/objfmts/elf/tests/elf-overdef.asm +EXTRA_DIST += modules/objfmts/elf/tests/elf-overdef.hex +EXTRA_DIST += modules/objfmts/elf/tests/elf-x86id.asm +EXTRA_DIST += modules/objfmts/elf/tests/elf-x86id.hex +EXTRA_DIST += modules/objfmts/elf/tests/elfabssect.asm +EXTRA_DIST += modules/objfmts/elf/tests/elfabssect.hex +EXTRA_DIST += modules/objfmts/elf/tests/elfcond.asm +EXTRA_DIST += modules/objfmts/elf/tests/elfcond.hex +EXTRA_DIST += modules/objfmts/elf/tests/elfequabs.asm +EXTRA_DIST += modules/objfmts/elf/tests/elfequabs.hex +EXTRA_DIST += modules/objfmts/elf/tests/elfglobal.asm +EXTRA_DIST += modules/objfmts/elf/tests/elfglobal.hex +EXTRA_DIST += modules/objfmts/elf/tests/elfglobext.asm +EXTRA_DIST += modules/objfmts/elf/tests/elfglobext.hex +EXTRA_DIST += modules/objfmts/elf/tests/elfglobext2.asm +EXTRA_DIST += modules/objfmts/elf/tests/elfglobext2.hex +EXTRA_DIST += modules/objfmts/elf/tests/elfmanysym.asm +EXTRA_DIST += modules/objfmts/elf/tests/elfmanysym.hex +EXTRA_DIST += modules/objfmts/elf/tests/elfreloc.asm +EXTRA_DIST += modules/objfmts/elf/tests/elfreloc.hex +EXTRA_DIST += modules/objfmts/elf/tests/elfreloc-ext.asm +EXTRA_DIST += modules/objfmts/elf/tests/elfreloc-ext.hex +EXTRA_DIST += modules/objfmts/elf/tests/elfsectalign.asm +EXTRA_DIST += modules/objfmts/elf/tests/elfsectalign.hex +EXTRA_DIST += modules/objfmts/elf/tests/elfso.asm +EXTRA_DIST += modules/objfmts/elf/tests/elfso.hex +EXTRA_DIST += modules/objfmts/elf/tests/elftest.c +EXTRA_DIST += modules/objfmts/elf/tests/elftest.asm +EXTRA_DIST += modules/objfmts/elf/tests/elftest.hex +EXTRA_DIST += modules/objfmts/elf/tests/elftimes.asm +EXTRA_DIST += modules/objfmts/elf/tests/elftimes.hex +EXTRA_DIST += modules/objfmts/elf/tests/elftypesize.asm +EXTRA_DIST += modules/objfmts/elf/tests/elftypesize.hex +EXTRA_DIST += modules/objfmts/elf/tests/elfvisibility.asm +EXTRA_DIST += modules/objfmts/elf/tests/elfvisibility.errwarn +EXTRA_DIST += modules/objfmts/elf/tests/elfvisibility.hex +EXTRA_DIST += modules/objfmts/elf/tests/nasm-sectname.asm +EXTRA_DIST += modules/objfmts/elf/tests/nasm-sectname.hex +EXTRA_DIST += modules/objfmts/elf/tests/nasm-forceident.asm +EXTRA_DIST += modules/objfmts/elf/tests/nasm-forceident.hex + +EXTRA_DIST += modules/objfmts/elf/tests/amd64/Makefile.inc +EXTRA_DIST += modules/objfmts/elf/tests/x32/Makefile.inc +EXTRA_DIST += modules/objfmts/elf/tests/gas32/Makefile.inc +EXTRA_DIST += modules/objfmts/elf/tests/gas64/Makefile.inc +EXTRA_DIST += modules/objfmts/elf/tests/gasx32/Makefile.inc + +include modules/objfmts/elf/tests/amd64/Makefile.inc +include modules/objfmts/elf/tests/x32/Makefile.inc +include modules/objfmts/elf/tests/gas32/Makefile.inc +include modules/objfmts/elf/tests/gas64/Makefile.inc +include modules/objfmts/elf/tests/gasx32/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/Makefile.inc new file mode 100644 index 0000000000..deb54bc0e9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/Makefile.inc @@ -0,0 +1,11 @@ +TESTS += modules/objfmts/elf/tests/amd64/elf_amd64_test.sh + +EXTRA_DIST += modules/objfmts/elf/tests/amd64/elf_amd64_test.sh +EXTRA_DIST += modules/objfmts/elf/tests/amd64/elf-rip.asm +EXTRA_DIST += modules/objfmts/elf/tests/amd64/elf-rip.hex +EXTRA_DIST += modules/objfmts/elf/tests/amd64/elfso64.asm +EXTRA_DIST += modules/objfmts/elf/tests/amd64/elfso64.hex +EXTRA_DIST += modules/objfmts/elf/tests/amd64/gotpcrel.asm +EXTRA_DIST += modules/objfmts/elf/tests/amd64/gotpcrel.hex +EXTRA_DIST += modules/objfmts/elf/tests/amd64/multiplefixup.asm +EXTRA_DIST += modules/objfmts/elf/tests/amd64/multiplefixup.hex diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elf-rip.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elf-rip.asm new file mode 100644 index 0000000000..5f10f09665 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elf-rip.asm @@ -0,0 +1,7 @@ +[bits 64] +[extern sym] +mov eax, [rip] +mov eax, [rip+2] +mov eax, [rip+sym] +mov eax, [sym wrt rip] +call sym diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elf-rip.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elf-rip.hex new file mode 100644 index 0000000000..4294742114 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elf-rip.hex @@ -0,0 +1,704 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +06 +00 +01 +00 +8b +05 +00 +00 +00 +00 +8b +05 +02 +00 +00 +00 +8b +05 +00 +00 +00 +00 +8b +05 +00 +00 +00 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +19 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +00 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +73 +79 +6d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a8 +00 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d4 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1a +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +dc +00 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +1d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elf_amd64_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elf_amd64_test.sh new file mode 100755 index 0000000000..1f48a32a1d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elf_amd64_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh elf_amd64_test modules/objfmts/elf/tests/amd64 "elf-amd64 objfmt" "-m amd64 -f elf" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elfso64.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elfso64.asm new file mode 100644 index 0000000000..931c7ffe15 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elfso64.asm @@ -0,0 +1,90 @@ +; This code is UNTESTED, and almost certainly DOES NOT WORK! +; Do NOT use this as an example of how to write AMD64 shared libraries! +; This code is simply to test the AMD64 ELF WRT relocations. + +; This file should test the following: +; [1] Define and export a global text-section symbol +; [2] Define and export a global data-section symbol +; [3] Define and export a global BSS-section symbol +; [4] Define a non-global text-section symbol +; [5] Define a non-global data-section symbol +; [6] Define a non-global BSS-section symbol +; [7] Define a COMMON symbol +; [8] Define a NASM local label +; [9] Reference a NASM local label +; [10] Import an external symbol +; [11] Make a PC-relative call to an external symbol +; [12] Reference a text-section symbol in the text section +; [13] Reference a data-section symbol in the text section +; [14] Reference a BSS-section symbol in the text section +; [15] Reference a text-section symbol in the data section +; [16] Reference a data-section symbol in the data section +; [17] Reference a BSS-section symbol in the data section + + [BITS 64] + [GLOBAL lrotate:function] ; [1] + [GLOBAL greet:function] ; [1] + [GLOBAL asmstr:data asmstr.end-asmstr] ; [2] + [GLOBAL textptr:data 4] ; [2] + [GLOBAL selfptr:data 4] ; [2] + [GLOBAL integer:data 4] ; [3] + [EXTERN printf] ; [10] + [COMMON commvar 4:4] ; [7] + [EXTERN _GLOBAL_OFFSET_TABLE_] + + [SECTION .text] + +; prototype: long lrotate(long x, int num); +lrotate: ; [1] + push rbp + mov rbp,rsp + mov rax,[rbp+8] + mov rcx,[rbp+12] +.label rol rax,1 ; [4] [8] + loop .label ; [9] [12] + mov rsp,rbp + pop rbp + ret + +; prototype: void greet(void); +greet push rbx ; we'll use RBX for GOT, so save it + mov rbx,[integer wrt ..gotpcrel wrt rip] + mov rax,[rbx] ; [14] + inc rax + mov rbx,[_GLOBAL_OFFSET_TABLE_ wrt ..gotpcrel wrt rip] + mov [rbx+localint wrt ..got],eax ; [14] + mov rax,[rbx+commvar wrt ..got] + push qword [rax] + mov rax,[rbx+localptr wrt ..got] ; [13] + push qword [rax] + mov rax,[rbx+integer wrt ..got] ; [1] [14] + push qword [rax] + lea rax,[rbx+printfstr wrt ..got] + push rax ; [13] + call printf wrt ..plt ; [11] + add rsp,16 + pop rbx + ret + + [SECTION .data] + +; a string +asmstr db 'hello, world', 0 ; [2] +.end + +; a string for Printf +printfstr db "integer==%d, localint==%d, commvar=%d" + db 10, 0 + +; some pointers +localptr dd localint ; [5] [17] +textptr dd greet wrt ..sym ; [15] +selfptr dd selfptr wrt ..sym ; [16] + + [SECTION .bss] + +; an integer +integer resd 1 ; [3] + +; a local integer +localint resd 1 ; [6] diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elfso64.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elfso64.hex new file mode 100644 index 0000000000..61f07b74d6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/elfso64.hex @@ -0,0 +1,1680 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +09 +00 +01 +00 +55 +48 +89 +e5 +48 +8b +45 +08 +48 +8b +4d +0c +48 +d1 +c0 +e2 +fb +48 +89 +ec +5d +c3 +53 +48 +8b +1d +00 +00 +00 +00 +48 +8b +03 +48 +ff +c0 +48 +8b +1d +00 +00 +00 +00 +89 +83 +00 +00 +00 +00 +48 +8b +83 +00 +00 +00 +00 +ff +30 +48 +8b +83 +00 +00 +00 +00 +ff +30 +48 +8b +83 +00 +00 +00 +00 +ff +30 +48 +8d +83 +00 +00 +00 +00 +50 +e8 +00 +00 +00 +00 +48 +83 +c4 +10 +5b +c3 +00 +1a +00 +00 +00 +00 +00 +00 +00 +09 +00 +00 +00 +0f +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +27 +00 +00 +00 +00 +00 +00 +00 +09 +00 +00 +00 +12 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +2d +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3d +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +46 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4f +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +55 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +68 +65 +6c +6c +6f +2c +20 +77 +6f +72 +6c +64 +00 +69 +6e +74 +65 +67 +65 +72 +3d +3d +25 +64 +2c +20 +6c +6f +63 +61 +6c +69 +6e +74 +3d +3d +25 +64 +2c +20 +63 +6f +6d +6d +76 +61 +72 +3d +25 +64 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +38 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3c +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +61 +74 +61 +00 +2e +62 +73 +73 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +61 +2e +64 +61 +74 +61 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +2d +00 +6c +72 +6f +74 +61 +74 +65 +00 +67 +72 +65 +65 +74 +00 +61 +73 +6d +73 +74 +72 +00 +74 +65 +78 +74 +70 +74 +72 +00 +73 +65 +6c +66 +70 +74 +72 +00 +69 +6e +74 +65 +67 +65 +72 +00 +70 +72 +69 +6e +74 +66 +00 +63 +6f +6d +6d +76 +61 +72 +00 +5f +47 +4c +4f +42 +41 +4c +5f +4f +46 +46 +53 +45 +54 +5f +54 +41 +42 +4c +45 +5f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +34 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +12 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0b +00 +00 +00 +12 +00 +04 +00 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +11 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +11 +00 +06 +00 +38 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +11 +00 +06 +00 +3c +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +11 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +37 +00 +00 +00 +10 +00 +f2 +ff +04 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +3f +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +38 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e8 +01 +00 +00 +00 +00 +00 +00 +42 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2c +02 +00 +00 +00 +00 +00 +00 +55 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +02 +00 +00 +00 +00 +00 +00 +c8 +01 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +0a +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +5f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +00 +00 +00 +00 +00 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +01 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1d +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +01 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +06 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +08 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/gotpcrel.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/gotpcrel.asm new file mode 100644 index 0000000000..c3d1238329 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/gotpcrel.asm @@ -0,0 +1,6 @@ +var: +mov rax, [var wrt ..got] +mov rax, [var wrt ..gotpcrel] ; should be error/warning? +mov rax, [rel var wrt ..got] ; automatic promotion to GOTPCREL +mov rax, [rel var wrt ..gotpcrel] + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/gotpcrel.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/gotpcrel.hex new file mode 100644 index 0000000000..1ad942448a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/gotpcrel.hex @@ -0,0 +1,720 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +06 +00 +01 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +8b +05 +00 +00 +00 +00 +48 +8b +05 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +00 +00 +00 +00 +09 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +09 +00 +00 +00 +02 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +1a +00 +00 +00 +00 +00 +00 +00 +09 +00 +00 +00 +02 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +00 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ec +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1a +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f0 +00 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/multiplefixup.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/multiplefixup.asm new file mode 100644 index 0000000000..ec253cbb97 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/multiplefixup.asm @@ -0,0 +1,8 @@ +[section .data] +foobar: + dq 42 +[section .text] +foo: + times 4 mov rax, [rel foobar] + times 4 mov rax, [foobar] + times 4 jmp foo diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/multiplefixup.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/multiplefixup.hex new file mode 100644 index 0000000000..16565ff504 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/amd64/multiplefixup.hex @@ -0,0 +1,992 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +07 +00 +01 +00 +48 +8b +05 +00 +00 +00 +00 +48 +8b +05 +00 +00 +00 +00 +48 +8b +05 +00 +00 +00 +00 +48 +8b +05 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +eb +c2 +eb +c0 +eb +be +eb +bc +03 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +0a +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +11 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +18 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +20 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +38 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2a +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +61 +74 +61 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4c +01 +00 +00 +00 +00 +00 +00 +32 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +01 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +01 +00 +00 +00 +00 +00 +00 +90 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +06 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +44 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +00 +00 +00 +00 +00 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +01 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/curpos-err.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/curpos-err.asm new file mode 100644 index 0000000000..d6f632c9c0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/curpos-err.asm @@ -0,0 +1,27 @@ +global bar +global foo + +section .bar +bar: +dd foo-$ +dd baz-$ +call foo +call baz +foo: + +section .data +baz: +dd foo-$ +dd $-foo ; illegal +dd baz-$ +dd $-baz +dd foo+4-$ ; with constant +dd $-baz+foo+4-$ ; both local and cross-segment (legal) +dd baz+foo+4-$-$ ; ditto, slightly different +dd (bar-$)+(foo-$) ; illegal (too many cross-segment) +dd baz-$+baz-$ ; two from same segment + +section .text +mov dword [foo-$], 5 +mov eax, foo-$ +call foo diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/curpos-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/curpos-err.errwarn new file mode 100644 index 0000000000..efe6b09308 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/curpos-err.errwarn @@ -0,0 +1,2 @@ +-:15: error: data expression too complex +-:21: error: data expression too complex diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/curpos.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/curpos.asm new file mode 100644 index 0000000000..4599e9cbb7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/curpos.asm @@ -0,0 +1,27 @@ +global bar +global foo + +section .bar +bar: +dd foo-$ +dd baz-$ +call foo +call baz +foo: + +section .data +baz: +dd foo-$ +;dd $-foo ; illegal +dd baz-$ +dd $-baz +dd foo+4-$ ; with constant +dd $-baz+foo+4-$ ; both local and cross-segment (legal) +dd baz+foo+4-$-$ ; ditto, slightly different +;dd (bar-$)+(foo-$) ; illegal (too many cross-segment) +dd baz-$+baz-$ ; two from same segment + +section .text +mov dword [foo-$], 5 +mov eax, foo-$ +call foo diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/curpos.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/curpos.hex new file mode 100644 index 0000000000..d14b84d0e1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/curpos.hex @@ -0,0 +1,832 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +0a +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c7 +05 +02 +00 +00 +00 +05 +00 +00 +00 +b8 +01 +00 +00 +00 +e8 +fc +ff +ff +ff +02 +00 +00 +00 +02 +07 +00 +00 +0b +00 +00 +00 +02 +07 +00 +00 +10 +00 +00 +00 +02 +07 +00 +00 +12 +00 +00 +00 +00 +00 +00 +00 +e8 +05 +00 +00 +00 +e8 +fc +ff +ff +ff +00 +00 +04 +00 +00 +00 +02 +02 +00 +00 +0e +00 +00 +00 +02 +02 +00 +00 +00 +00 +00 +00 +fc +ff +ff +ff +08 +00 +00 +00 +04 +00 +00 +00 +14 +00 +00 +00 +f0 +ff +ff +ff +d0 +ff +ff +ff +00 +00 +00 +00 +02 +07 +00 +00 +0c +00 +00 +00 +02 +07 +00 +00 +10 +00 +00 +00 +02 +07 +00 +00 +14 +00 +00 +00 +02 +07 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +62 +61 +72 +00 +2e +64 +61 +74 +61 +00 +2e +72 +65 +6c +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +2e +62 +61 +72 +00 +2e +72 +65 +6c +2e +64 +61 +74 +61 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +62 +61 +72 +00 +66 +6f +6f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +06 +00 +07 +00 +00 +00 +12 +00 +00 +00 +00 +00 +00 +00 +10 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3f +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cc +00 +00 +00 +49 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2f +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +01 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +37 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +24 +01 +00 +00 +80 +00 +00 +00 +02 +00 +00 +00 +06 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +54 +00 +00 +00 +18 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +6c +00 +00 +00 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +1c +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +10 +00 +00 +00 +03 +00 +00 +00 +06 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +0c +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +90 +00 +00 +00 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +25 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ac +00 +00 +00 +20 +00 +00 +00 +03 +00 +00 +00 +08 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf-overdef.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf-overdef.asm new file mode 100644 index 0000000000..e42d1f485c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf-overdef.asm @@ -0,0 +1,2 @@ +section .text align=64 + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf-overdef.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf-overdef.hex new file mode 100644 index 0000000000..30b8ed4ec5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf-overdef.hex @@ -0,0 +1,360 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +64 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +68 +00 +00 +00 +30 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf-x86id.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf-x86id.asm new file mode 100644 index 0000000000..04b4a0397f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf-x86id.asm @@ -0,0 +1,26132 @@ +; Generated from x86id.c by GCC 3.2.3 with -O -S -I. -masm=intel. +; Many changes made to make nasm-syntax compatible. + + ;.file "x86id.c" +;#APP + ;.ident "$Id$" +;#NO_APP +[extern yasm_internal_error_] +[extern yasm_expr_copy] +[extern yasm_expr_expr] +[extern yasm_expr_new] +[extern yasm_symrec_define_label] +[extern yasm_x86_LTX_mode_bits] +[extern yasm_x86__bc_new_jmp] +[extern yasm_ea_get_disp] +[extern yasm_expr__contains] +[extern yasm_x86__get_reg_size] +[extern yasm__error] +[extern yasm_intnum_new_uint] +[extern yasm_expr_int] +[extern yasm_ea_delete] +[extern yasm_expr_delete] +[extern yasm_x86__ea_new_reg] +[extern yasm_x86__ea_set_disponly] +[extern yasm_x86__ea_new_imm] +[extern yasm_x86__set_rex_from_reg] +[extern yasm_xfree] +[extern yasm_x86__bc_new_insn] +[extern yasm__warning] + + [section .data] + [align 4] + ;.type cpu_enabled,@object + ;.size cpu_enabled,4 +cpu_enabled: + dd -1 + [section .rodata] + [align 4] + ;.type not64_insn,@object + ;.size not64_insn,28 +not64_insn: + dd 33554432 + dd 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + [align 4] + ;.type onebyte_insn,@object + ;.size onebyte_insn,28 +onebyte_insn: + dd 0 + dd 80 + db 0 + db 1 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + [align 4] + ;.type twobyte_insn,@object + ;.size twobyte_insn,28 +twobyte_insn: + dd 0 + dd 20 + db 0 + db 2 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + [align 4] + ;.type threebyte_insn,@object + ;.size threebyte_insn,28 +threebyte_insn: + dd 0 + dd 21 + db 0 + db 3 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + [align 4] + ;.type onebytemem_insn,@object + ;.size onebytemem_insn,28 +onebytemem_insn: + dd 0 + dd 48 + db 0 + db 1 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4098 + dd 0 + dd 0 + [align 4] + ;.type twobytemem_insn,@object + ;.size twobytemem_insn,28 +twobytemem_insn: + dd 0 + dd 52 + db 0 + db 2 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4098 + dd 0 + dd 0 + [align 32] + ;.type mov_insn,@object + ;.size mov_insn,1260 +mov_insn: + dd 0 + dd 0 + db 0 + db 1 + db -96 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 43 + dd 4405 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -95 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 75 + dd 4437 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -95 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 107 + dd 4469 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -95 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 139 + dd 4501 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -94 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4405 + dd 43 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -93 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4437 + dd 75 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -93 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4469 + dd 107 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -93 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4501 + dd 139 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -120 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4387 + dd 16417 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -119 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 16449 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -119 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 16481 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -119 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 16513 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -118 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16417 + dd 4387 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -117 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4419 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -117 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4451 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -117 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4483 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -116 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4418 + dd 16710 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -116 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4161 + dd 16710 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -116 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4193 + dd 16710 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -116 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4225 + dd 16710 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -114 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16710 + dd 4419 + dd 0 + dd 4 + dd 0 + db 0 + db 1 + db -114 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16710 + dd 4193 + dd 0 + dd 16779264 + dd 0 + db 0 + db 1 + db -114 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16710 + dd 4225 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -80 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 20513 + dd 8480 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -72 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 20545 + dd 8512 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -72 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 20577 + dd 8544 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -72 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 20609 + dd 8576 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -58 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4387 + dd 8224 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -57 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 8256 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -57 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 8288 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -57 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 8288 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -58 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4131 + dd 8480 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -57 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4163 + dd 8512 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -57 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4195 + dd 8544 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -57 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4227 + dd 8544 + dd 0 + dd 41943056 + dd 0 + db 0 + db 2 + db 15 + db 34 + db 0 + db 0 + db 2 + db 0 + dd 16500 + dd 4193 + dd 0 + dd 41943044 + dd 0 + db 0 + db 2 + db 15 + db 34 + db 0 + db 0 + db 2 + db 0 + dd 16487 + dd 4193 + dd 0 + dd 25167872 + dd 0 + db 0 + db 2 + db 15 + db 34 + db 0 + db 0 + db 2 + db 0 + dd 16487 + dd 4225 + dd 0 + dd 41943056 + dd 0 + db 0 + db 2 + db 15 + db 32 + db 0 + db 0 + db 2 + db 0 + dd 4193 + dd 16500 + dd 0 + dd 41943044 + dd 0 + db 0 + db 2 + db 15 + db 32 + db 0 + db 0 + db 2 + db 0 + dd 4193 + dd 16487 + dd 0 + dd 25167872 + dd 0 + db 0 + db 2 + db 15 + db 32 + db 0 + db 0 + db 2 + db 0 + dd 4225 + dd 16487 + dd 0 + dd 41943044 + dd 0 + db 0 + db 2 + db 15 + db 35 + db 0 + db 0 + db 2 + db 0 + dd 16488 + dd 4193 + dd 0 + dd 25167872 + dd 0 + db 0 + db 2 + db 15 + db 35 + db 0 + db 0 + db 2 + db 0 + dd 16488 + dd 4225 + dd 0 + dd 41943044 + dd 0 + db 0 + db 2 + db 15 + db 33 + db 0 + db 0 + db 2 + db 0 + dd 4193 + dd 16488 + dd 0 + dd 25167872 + dd 0 + db 0 + db 2 + db 15 + db 33 + db 0 + db 0 + db 2 + db 0 + dd 4225 + dd 16488 + dd 0 + [align 32] + ;.type movszx_insn,@object + ;.size movszx_insn,140 +movszx_insn: + dd 4 + dd 4 + db 16 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4387 + dd 0 + dd 4 + dd 4 + db 32 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4131 + dd 0 + dd 16779264 + dd 4 + db 64 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4131 + dd 0 + dd 4 + dd 4 + db 32 + db 2 + db 15 + db 1 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4163 + dd 0 + dd 16779264 + dd 4 + db 64 + db 2 + db 15 + db 1 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4163 + dd 0 + [align 4] + ;.type movsxd_insn,@object + ;.size movsxd_insn,28 +movsxd_insn: + dd 16779264 + dd 0 + db 64 + db 1 + db 99 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4195 + dd 0 + [align 32] + ;.type push_insn,@object + ;.size push_insn,784 +push_insn: + dd 0 + dd 0 + db 16 + db 1 + db 80 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 20545 + dd 0 + dd 0 + dd 33554436 + dd 0 + db 32 + db 1 + db 80 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 20577 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 0 + db 1 + db 80 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 20609 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -1 + db 0 + db 0 + db 6 + db 1 + db 0 + dd 4163 + dd 0 + dd 0 + dd 33554436 + dd 0 + db 32 + db 1 + db -1 + db 0 + db 0 + db 6 + db 1 + db 0 + dd 4195 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 6 + db 1 + db 0 + dd 4227 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db 106 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 8224 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db 104 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 8256 + dd 0 + dd 0 + dd 33554436 + dd 0 + db 32 + db 1 + db 104 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 8288 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db 104 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 8320 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 0 + db 1 + db 14 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 14 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 16 + db 1 + db 14 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 78 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 32 + db 1 + db 14 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 110 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 0 + db 1 + db 22 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 19 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 16 + db 1 + db 22 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 83 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 32 + db 1 + db 22 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 115 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 0 + db 1 + db 30 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 15 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 16 + db 1 + db 30 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 79 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 32 + db 1 + db 30 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 111 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 0 + db 1 + db 6 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 16 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 16 + db 1 + db 6 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 80 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 32 + db 1 + db 6 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 112 + dd 0 + dd 0 + dd 4 + dd 0 + db 0 + db 2 + db 15 + db -96 + db 0 + db 0 + db 1 + db 0 + dd 17 + dd 0 + dd 0 + dd 4 + dd 0 + db 16 + db 2 + db 15 + db -96 + db 0 + db 0 + db 1 + db 0 + dd 81 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 2 + db 15 + db -96 + db 0 + db 0 + db 1 + db 0 + dd 113 + dd 0 + dd 0 + dd 4 + dd 0 + db 0 + db 2 + db 15 + db -88 + db 0 + db 0 + db 1 + db 0 + dd 18 + dd 0 + dd 0 + dd 4 + dd 0 + db 16 + db 2 + db 15 + db -88 + db 0 + db 0 + db 1 + db 0 + dd 82 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 2 + db 15 + db -88 + db 0 + db 0 + db 1 + db 0 + dd 114 + dd 0 + dd 0 + [align 32] + ;.type pop_insn,@object + ;.size pop_insn,588 +pop_insn: + dd 0 + dd 0 + db 16 + db 1 + db 88 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 20545 + dd 0 + dd 0 + dd 33554436 + dd 0 + db 32 + db 1 + db 88 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 20577 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 0 + db 1 + db 88 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 20609 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -113 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4163 + dd 0 + dd 0 + dd 33554436 + dd 0 + db 32 + db 1 + db -113 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4195 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 0 + db 1 + db -113 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4227 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 0 + db 1 + db 23 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 19 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 16 + db 1 + db 23 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 83 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 32 + db 1 + db 23 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 115 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 0 + db 1 + db 31 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 15 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 16 + db 1 + db 31 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 79 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 32 + db 1 + db 31 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 111 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 0 + db 1 + db 7 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 16 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 16 + db 1 + db 7 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 80 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 32 + db 1 + db 7 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 112 + dd 0 + dd 0 + dd 4 + dd 0 + db 0 + db 2 + db 15 + db -95 + db 0 + db 0 + db 1 + db 0 + dd 17 + dd 0 + dd 0 + dd 4 + dd 0 + db 16 + db 2 + db 15 + db -95 + db 0 + db 0 + db 1 + db 0 + dd 81 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 2 + db 15 + db -95 + db 0 + db 0 + db 1 + db 0 + dd 113 + dd 0 + dd 0 + dd 4 + dd 0 + db 0 + db 2 + db 15 + db -87 + db 0 + db 0 + db 1 + db 0 + dd 18 + dd 0 + dd 0 + dd 4 + dd 0 + db 16 + db 2 + db 15 + db -87 + db 0 + db 0 + db 1 + db 0 + dd 82 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 2 + db 15 + db -87 + db 0 + db 0 + db 1 + db 0 + dd 114 + dd 0 + dd 0 + [align 32] + ;.type xchg_insn,@object + ;.size xchg_insn,392 +xchg_insn: + dd 0 + dd 0 + db 0 + db 1 + db -122 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4387 + dd 16417 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -122 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16417 + dd 4387 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -112 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 75 + dd 20545 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -112 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 20545 + dd 75 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -121 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 16449 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -121 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4419 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -112 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 107 + dd 20577 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -112 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 20577 + dd 107 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -121 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 16481 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -121 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4451 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -112 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 139 + dd 20609 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -112 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 20609 + dd 139 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -121 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 16513 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -121 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4483 + dd 0 + [align 32] + ;.type in_insn,@object + ;.size in_insn,168 +in_insn: + dd 0 + dd 0 + db 0 + db 1 + db -28 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 43 + dd 8480 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -27 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 75 + dd 8480 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -27 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 107 + dd 8480 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -20 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 43 + dd 77 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -19 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 75 + dd 77 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -19 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 107 + dd 77 + dd 0 + [align 32] + ;.type out_insn,@object + ;.size out_insn,168 +out_insn: + dd 0 + dd 0 + db 0 + db 1 + db -26 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 8480 + dd 43 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -25 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 8480 + dd 75 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -25 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 8480 + dd 107 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -18 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 77 + dd 43 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -17 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 77 + dd 75 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -17 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 77 + dd 107 + dd 0 + [align 32] + ;.type lea_insn,@object + ;.size lea_insn,84 +lea_insn: + dd 0 + dd 0 + db 16 + db 1 + db -115 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4418 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -115 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4450 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -115 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4482 + dd 0 + [align 32] + ;.type ldes_insn,@object + ;.size ldes_insn,56 +ldes_insn: + dd 33554432 + dd 16 + db 16 + db 1 + db 0 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4098 + dd 0 + dd 33554436 + dd 16 + db 32 + db 1 + db 0 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4098 + dd 0 + [align 32] + ;.type lfgss_insn,@object + ;.size lfgss_insn,56 +lfgss_insn: + dd 4 + dd 4 + db 16 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4098 + dd 0 + dd 4 + dd 4 + db 32 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4098 + dd 0 + [align 32] + ;.type arith_insn,@object + ;.size arith_insn,644 +arith_insn: + dd 0 + dd 16 + db 0 + db 1 + db 4 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 43 + dd 8480 + dd 0 + dd 0 + dd 16 + db 16 + db 1 + db 5 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 75 + dd 8512 + dd 0 + dd 4 + dd 16 + db 32 + db 1 + db 5 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 107 + dd 8544 + dd 0 + dd 16779264 + dd 16 + db 64 + db 1 + db 5 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 139 + dd 8544 + dd 0 + dd 0 + dd 34 + db 0 + db 1 + db -128 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4131 + dd 8480 + dd 0 + dd 0 + dd 34 + db 0 + db 1 + db -128 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4387 + dd 8224 + dd 0 + dd 0 + dd 34 + db 16 + db 1 + db -125 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4163 + dd 12320 + dd 0 + dd 0 + dd 34 + db 16 + db 1 + db -127 + db -125 + db 0 + db 0 + db 2 + db 0 + dd 4163 + dd 139584 + dd 0 + dd 0 + dd 34 + db 16 + db 1 + db -127 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 8256 + dd 0 + dd 4 + dd 34 + db 32 + db 1 + db -125 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4195 + dd 12320 + dd 0 + dd 4 + dd 34 + db 32 + db 1 + db -127 + db -125 + db 0 + db 0 + db 2 + db 0 + dd 4195 + dd 139616 + dd 0 + dd 4 + dd 34 + db 32 + db 1 + db -127 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 8288 + dd 0 + dd 16779264 + dd 34 + db 64 + db 1 + db -125 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4227 + dd 12320 + dd 0 + dd 16779264 + dd 34 + db 64 + db 1 + db -127 + db -125 + db 0 + db 0 + db 2 + db 0 + dd 4227 + dd 139616 + dd 0 + dd 16779264 + dd 34 + db 64 + db 1 + db -127 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 8288 + dd 0 + dd 0 + dd 16 + db 0 + db 1 + db 0 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4387 + dd 16417 + dd 0 + dd 0 + dd 16 + db 16 + db 1 + db 1 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 16449 + dd 0 + dd 4 + dd 16 + db 32 + db 1 + db 1 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 16481 + dd 0 + dd 16779264 + dd 16 + db 64 + db 1 + db 1 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 16513 + dd 0 + dd 0 + dd 16 + db 0 + db 1 + db 2 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16417 + dd 4387 + dd 0 + dd 0 + dd 16 + db 16 + db 1 + db 3 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4419 + dd 0 + dd 4 + dd 16 + db 32 + db 1 + db 3 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4451 + dd 0 + dd 16779264 + dd 16 + db 64 + db 1 + db 3 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4483 + dd 0 + [align 32] + ;.type incdec_insn,@object + ;.size incdec_insn,168 +incdec_insn: + dd 0 + dd 34 + db 0 + db 1 + db -2 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4131 + dd 0 + dd 0 + dd 33554432 + dd 16 + db 16 + db 1 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 20545 + dd 0 + dd 0 + dd 0 + dd 34 + db 16 + db 1 + db -1 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4163 + dd 0 + dd 0 + dd 33554436 + dd 16 + db 32 + db 1 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 20577 + dd 0 + dd 0 + dd 4 + dd 34 + db 32 + db 1 + db -1 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4195 + dd 0 + dd 0 + dd 16779264 + dd 34 + db 64 + db 1 + db -1 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4227 + dd 0 + dd 0 + [align 32] + ;.type f6_insn,@object + ;.size f6_insn,112 +f6_insn: + dd 0 + dd 32 + db 0 + db 1 + db -10 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4131 + dd 0 + dd 0 + dd 0 + dd 32 + db 16 + db 1 + db -9 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4163 + dd 0 + dd 0 + dd 4 + dd 32 + db 32 + db 1 + db -9 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4195 + dd 0 + dd 0 + dd 16779264 + dd 32 + db 64 + db 1 + db -9 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4227 + dd 0 + dd 0 + [align 32] + ;.type test_insn,@object + ;.size test_insn,560 +test_insn: + dd 0 + dd 0 + db 0 + db 1 + db -88 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 43 + dd 8480 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -87 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 75 + dd 8512 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -87 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 107 + dd 8544 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -87 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 139 + dd 8544 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -10 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4131 + dd 8480 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -10 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4387 + dd 8224 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -9 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4163 + dd 8512 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -9 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 8256 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -9 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4195 + dd 8544 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -9 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 8288 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -9 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4227 + dd 8544 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -9 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 8288 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -124 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4387 + dd 16417 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -123 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 16449 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -123 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 16481 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -123 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 16513 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -124 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16417 + dd 4387 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -123 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4419 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -123 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4451 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -123 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4483 + dd 0 + [align 32] + ;.type aadm_insn,@object + ;.size aadm_insn,56 +aadm_insn: + dd 0 + dd 16 + db 0 + db 2 + db -44 + db 10 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 16 + db 0 + db 1 + db -44 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 8480 + dd 0 + dd 0 + [align 32] + ;.type imul_insn,@object + ;.size imul_insn,532 +imul_insn: + dd 0 + dd 0 + db 0 + db 1 + db -10 + db 0 + db 0 + db 5 + db 1 + db 0 + dd 4131 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -9 + db 0 + db 0 + db 5 + db 1 + db 0 + dd 4163 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -9 + db 0 + db 0 + db 5 + db 1 + db 0 + dd 4195 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db -9 + db 0 + db 0 + db 5 + db 1 + db 0 + dd 4227 + dd 0 + dd 0 + dd 4 + dd 0 + db 16 + db 2 + db 15 + db -81 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4419 + dd 0 + dd 4 + dd 0 + db 32 + db 2 + db 15 + db -81 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4451 + dd 0 + dd 16779264 + dd 0 + db 64 + db 2 + db 15 + db -81 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4483 + dd 0 + dd 1 + dd 0 + db 16 + db 1 + db 107 + db 0 + db 0 + db 0 + db 3 + db 0 + dd 16449 + dd 4419 + dd 12320 + dd 4 + dd 0 + db 32 + db 1 + db 107 + db 0 + db 0 + db 0 + db 3 + db 0 + dd 16481 + dd 4451 + dd 12320 + dd 16779264 + dd 0 + db 64 + db 1 + db 107 + db 0 + db 0 + db 0 + db 3 + db 0 + dd 16513 + dd 4483 + dd 12320 + dd 1 + dd 0 + db 16 + db 1 + db 107 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 28737 + dd 12320 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db 107 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 28769 + dd 12320 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db 107 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 28801 + dd 12320 + dd 0 + dd 1 + dd 0 + db 16 + db 1 + db 105 + db 107 + db 0 + db 0 + db 3 + db 0 + dd 16449 + dd 4419 + dd 143680 + dd 4 + dd 0 + db 32 + db 1 + db 105 + db 107 + db 0 + db 0 + db 3 + db 0 + dd 16481 + dd 4451 + dd 143712 + dd 16779264 + dd 0 + db 64 + db 1 + db 105 + db 107 + db 0 + db 0 + db 3 + db 0 + dd 16513 + dd 4483 + dd 143712 + dd 1 + dd 0 + db 16 + db 1 + db 105 + db 107 + db 0 + db 0 + db 2 + db 0 + dd 28737 + dd 143680 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db 105 + db 107 + db 0 + db 0 + db 2 + db 0 + dd 28769 + dd 143712 + dd 0 + dd 16779264 + dd 0 + db 64 + db 1 + db 105 + db 107 + db 0 + db 0 + db 2 + db 0 + dd 28801 + dd 143712 + dd 0 + [align 32] + ;.type shift_insn,@object + ;.size shift_insn,224 +shift_insn: + dd 0 + dd 32 + db 0 + db 1 + db -46 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4131 + dd 44 + dd 0 + dd 0 + dd 32 + db 0 + db 1 + db -64 + db -48 + db 0 + db 0 + db 2 + db 0 + dd 4131 + dd 74016 + dd 0 + dd 0 + dd 32 + db 16 + db 1 + db -45 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4163 + dd 44 + dd 0 + dd 0 + dd 32 + db 16 + db 1 + db -63 + db -47 + db 0 + db 0 + db 2 + db 0 + dd 4163 + dd 74016 + dd 0 + dd 0 + dd 32 + db 32 + db 1 + db -45 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4195 + dd 44 + dd 0 + dd 0 + dd 32 + db 32 + db 1 + db -63 + db -47 + db 0 + db 0 + db 2 + db 0 + dd 4195 + dd 74016 + dd 0 + dd 16779264 + dd 32 + db 64 + db 1 + db -45 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4227 + dd 44 + dd 0 + dd 16779264 + dd 32 + db 64 + db 1 + db -63 + db -47 + db 0 + db 0 + db 2 + db 0 + dd 4227 + dd 74016 + dd 0 + [align 32] + ;.type shlrd_insn,@object + ;.size shlrd_insn,168 +shlrd_insn: + dd 4 + dd 4 + db 16 + db 2 + db 15 + db 0 + db 0 + db 0 + db 3 + db 0 + dd 4419 + dd 16449 + dd 8480 + dd 4 + dd 4 + db 16 + db 2 + db 15 + db 1 + db 0 + db 0 + db 3 + db 0 + dd 4419 + dd 16449 + dd 44 + dd 4 + dd 4 + db 32 + db 2 + db 15 + db 0 + db 0 + db 0 + db 3 + db 0 + dd 4451 + dd 16481 + dd 8480 + dd 4 + dd 4 + db 32 + db 2 + db 15 + db 1 + db 0 + db 0 + db 3 + db 0 + dd 4451 + dd 16481 + dd 44 + dd 16779264 + dd 4 + db 64 + db 2 + db 15 + db 0 + db 0 + db 0 + db 3 + db 0 + dd 4483 + dd 16513 + dd 8480 + dd 16779264 + dd 4 + db 64 + db 2 + db 15 + db 1 + db 0 + db 0 + db 3 + db 0 + dd 4483 + dd 16513 + dd 44 + [align 32] + ;.type call_insn,@object + ;.size call_insn,560 +call_insn: + dd 0 + dd 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32768 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32832 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32864 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -24 + db -102 + db 0 + db 0 + db 1 + db 0 + dd 229952 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -24 + db -102 + db 0 + db 0 + db 1 + db 0 + dd 229984 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -24 + db -102 + db 0 + db 0 + db 1 + db 0 + dd 229888 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -1 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4163 + dd 0 + dd 0 + dd 33554436 + dd 0 + db 32 + db 1 + db -1 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4195 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4227 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4098 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -1 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4675 + dd 0 + dd 0 + dd 33554436 + dd 0 + db 32 + db 1 + db -1 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4707 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4739 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4610 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -102 + db 0 + db 0 + db 3 + db 1 + db 0 + dd 34368 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -102 + db 0 + db 0 + db 3 + db 1 + db 0 + dd 34400 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -102 + db 0 + db 0 + db 3 + db 1 + db 0 + dd 34304 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -1 + db 0 + db 0 + db 3 + db 1 + db 0 + dd 5698 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -1 + db 0 + db 0 + db 3 + db 1 + db 0 + dd 5730 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 3 + db 1 + db 0 + dd 5634 + dd 0 + dd 0 + [align 32] + ;.type jmp_insn,@object + ;.size jmp_insn,588 +jmp_insn: + dd 0 + dd 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32768 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32832 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32864 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -21 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 33792 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -23 + db -22 + db 0 + db 0 + db 1 + db 0 + dd 229952 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -23 + db -22 + db 0 + db 0 + db 1 + db 0 + dd 229984 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -23 + db -22 + db 0 + db 0 + db 1 + db 0 + dd 229888 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -1 + db 0 + db 0 + db 4 + db 1 + db 0 + dd 4163 + dd 0 + dd 0 + dd 33554436 + dd 0 + db 32 + db 1 + db -1 + db 0 + db 0 + db 4 + db 1 + db 0 + dd 4195 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 4 + db 1 + db 0 + dd 4227 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 4 + db 1 + db 0 + dd 4098 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -1 + db 0 + db 0 + db 4 + db 1 + db 0 + dd 4675 + dd 0 + dd 0 + dd 33554436 + dd 0 + db 32 + db 1 + db -1 + db 0 + db 0 + db 4 + db 1 + db 0 + dd 4707 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 4 + db 1 + db 0 + dd 4739 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 4 + db 1 + db 0 + dd 4610 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -22 + db 0 + db 0 + db 3 + db 1 + db 0 + dd 34368 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -22 + db 0 + db 0 + db 3 + db 1 + db 0 + dd 34400 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -22 + db 0 + db 0 + db 3 + db 1 + db 0 + dd 34304 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 1 + db -1 + db 0 + db 0 + db 5 + db 1 + db 0 + dd 5698 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db -1 + db 0 + db 0 + db 5 + db 1 + db 0 + dd 5730 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 1 + db -1 + db 0 + db 0 + db 5 + db 1 + db 0 + dd 5634 + dd 0 + dd 0 + [align 32] + ;.type retnf_insn,@object + ;.size retnf_insn,56 +retnf_insn: + dd 0 + dd 16 + db 0 + db 1 + db 1 + db 0 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 16 + db 0 + db 1 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 8512 + dd 0 + dd 0 + [align 4] + ;.type enter_insn,@object + ;.size enter_insn,28 +enter_insn: + dd 1 + dd 0 + db 0 + db 1 + db -56 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4416 + dd 8480 + dd 0 + [align 32] + ;.type jcc_insn,@object + ;.size jcc_insn,196 +jcc_insn: + dd 0 + dd 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32768 + dd 0 + dd 0 + dd 0 + dd 0 + db 16 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32832 + dd 0 + dd 0 + dd 4 + dd 0 + db 32 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32864 + dd 0 + dd 0 + dd 0 + dd 16 + db 0 + db 1 + db 112 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 33792 + dd 0 + dd 0 + dd 4 + dd 4 + db 16 + db 2 + db 15 + db -128 + db 0 + db 0 + db 1 + db 0 + dd 33344 + dd 0 + dd 0 + dd 4 + dd 4 + db 32 + db 2 + db 15 + db -128 + db 0 + db 0 + db 1 + db 0 + dd 33376 + dd 0 + dd 0 + dd 4 + dd 4 + db 0 + db 2 + db 15 + db -128 + db 0 + db 0 + db 1 + db 0 + dd 33280 + dd 0 + dd 0 + [align 32] + ;.type jcxz_insn,@object + ;.size jcxz_insn,56 +jcxz_insn: + dd 0 + dd 256 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32768 + dd 0 + dd 0 + dd 0 + dd 256 + db 0 + db 1 + db -29 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 33792 + dd 0 + dd 0 + [align 32] + ;.type loop_insn,@object + ;.size loop_insn,224 +loop_insn: + dd 0 + dd 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 32768 + dd 0 + dd 0 + dd 33554432 + dd 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 32768 + dd 36940 + dd 0 + dd 4 + dd 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 32768 + dd 36972 + dd 0 + dd 16779264 + dd 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 32768 + dd 37004 + dd 0 + dd 33554432 + dd 16 + db 0 + db 1 + db -32 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 33792 + dd 0 + dd 0 + dd 0 + dd 16 + db 0 + db 1 + db -32 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 33792 + dd 36940 + dd 0 + dd 4 + dd 16 + db 0 + db 1 + db -32 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 33792 + dd 36972 + dd 0 + dd 16779264 + dd 16 + db 0 + db 1 + db -32 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 33792 + dd 37004 + dd 0 + [align 4] + ;.type setcc_insn,@object + ;.size setcc_insn,28 +setcc_insn: + dd 4 + dd 4 + db 0 + db 2 + db 15 + db -112 + db 0 + db 2 + db 1 + db 0 + dd 4387 + dd 0 + dd 0 + [align 32] + ;.type bittest_insn,@object + ;.size bittest_insn,168 +bittest_insn: + dd 4 + dd 4 + db 16 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 16449 + dd 0 + dd 4 + dd 4 + db 32 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 16481 + dd 0 + dd 16779264 + dd 4 + db 64 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 16513 + dd 0 + dd 4 + dd 34 + db 16 + db 2 + db 15 + db -70 + db 0 + db 0 + db 2 + db 0 + dd 4163 + dd 8224 + dd 0 + dd 4 + dd 34 + db 32 + db 2 + db 15 + db -70 + db 0 + db 0 + db 2 + db 0 + dd 4195 + dd 8224 + dd 0 + dd 16779264 + dd 34 + db 64 + db 2 + db 15 + db -70 + db 0 + db 0 + db 2 + db 0 + dd 4227 + dd 8224 + dd 0 + [align 32] + ;.type bsfr_insn,@object + ;.size bsfr_insn,84 +bsfr_insn: + dd 2 + dd 4 + db 16 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4419 + dd 0 + dd 4 + dd 4 + db 32 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4451 + dd 0 + dd 16779264 + dd 4 + db 64 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4483 + dd 0 + [align 4] + ;.type int_insn,@object + ;.size int_insn,28 +int_insn: + dd 0 + dd 0 + db 0 + db 1 + db -51 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 8480 + dd 0 + dd 0 + [align 32] + ;.type bound_insn,@object + ;.size bound_insn,56 +bound_insn: + dd 1 + dd 0 + db 16 + db 1 + db 98 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4418 + dd 0 + dd 4 + dd 0 + db 32 + db 1 + db 98 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4450 + dd 0 + [align 4] + ;.type arpl_insn,@object + ;.size arpl_insn,28 +arpl_insn: + dd 1048578 + dd 0 + db 0 + db 1 + db 99 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 16449 + dd 0 + [align 32] + ;.type str_insn,@object + ;.size str_insn,112 +str_insn: + dd 2048 + dd 0 + db 16 + db 2 + db 15 + db 0 + db 0 + db 1 + db 1 + db 0 + dd 4161 + dd 0 + dd 0 + dd 2048 + dd 0 + db 32 + db 2 + db 15 + db 0 + db 0 + db 1 + db 1 + db 0 + dd 4193 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 64 + db 2 + db 15 + db 0 + db 0 + db 1 + db 1 + db 0 + dd 4225 + dd 0 + dd 0 + dd 2 + dd 36 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4419 + dd 0 + dd 0 + [align 4] + ;.type prot286_insn,@object + ;.size prot286_insn,28 +prot286_insn: + dd 2 + dd 36 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4419 + dd 0 + dd 0 + [align 32] + ;.type sldtmsw_insn,@object + ;.size sldtmsw_insn,168 +sldtmsw_insn: + dd 2 + dd 36 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4418 + dd 0 + dd 0 + dd 4 + dd 36 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4450 + dd 0 + dd 0 + dd 16779264 + dd 36 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4482 + dd 0 + dd 0 + dd 2 + dd 36 + db 16 + db 2 + db 15 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4161 + dd 0 + dd 0 + dd 4 + dd 36 + db 32 + db 2 + db 15 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4193 + dd 0 + dd 0 + dd 16779264 + dd 36 + db 64 + db 2 + db 15 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4225 + dd 0 + dd 0 + [align 32] + ;.type fldstp_insn,@object + ;.size fldstp_insn,112 +fldstp_insn: + dd 4096 + dd 34 + db 0 + db 1 + db -39 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4194 + dd 0 + dd 0 + dd 4096 + dd 34 + db 0 + db 1 + db -35 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4226 + dd 0 + dd 0 + dd 4096 + dd 42 + db 0 + db 1 + db -37 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4258 + dd 0 + dd 0 + dd 4096 + dd 4 + db 0 + db 2 + db -39 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 24737 + dd 0 + dd 0 + [align 32] + ;.type fildstp_insn,@object + ;.size fildstp_insn,84 +fildstp_insn: + dd 4096 + dd 32 + db 0 + db 1 + db -33 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4162 + dd 0 + dd 0 + dd 4096 + dd 32 + db 0 + db 1 + db -37 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4194 + dd 0 + dd 0 + dd 4096 + dd 34 + db 0 + db 1 + db -33 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4226 + dd 0 + dd 0 + [align 4] + ;.type fbldstp_insn,@object + ;.size fbldstp_insn,28 +fbldstp_insn: + dd 4096 + dd 32 + db 0 + db 1 + db -33 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4514 + dd 0 + dd 0 + [align 32] + ;.type fst_insn,@object + ;.size fst_insn,84 +fst_insn: + dd 4096 + dd 0 + db 0 + db 1 + db -39 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4194 + dd 0 + dd 0 + dd 4096 + dd 0 + db 0 + db 1 + db -35 + db 0 + db 0 + db 2 + db 1 + db 0 + dd 4226 + dd 0 + dd 0 + dd 4096 + dd 0 + db 0 + db 2 + db -35 + db -48 + db 0 + db 0 + db 1 + db 0 + dd 24737 + dd 0 + dd 0 + [align 32] + ;.type fxch_insn,@object + ;.size fxch_insn,112 +fxch_insn: + dd 4096 + dd 0 + db 0 + db 2 + db -39 + db -56 + db 0 + db 0 + db 1 + db 0 + dd 24737 + dd 0 + dd 0 + dd 4096 + dd 0 + db 0 + db 2 + db -39 + db -56 + db 0 + db 0 + db 2 + db 0 + dd 170 + dd 24737 + dd 0 + dd 4096 + dd 0 + db 0 + db 2 + db -39 + db -56 + db 0 + db 0 + db 2 + db 0 + dd 24737 + dd 170 + dd 0 + dd 4096 + dd 0 + db 0 + db 2 + db -39 + db -55 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + [align 32] + ;.type fcom_insn,@object + ;.size fcom_insn,112 +fcom_insn: + dd 4096 + dd 34 + db 0 + db 1 + db -40 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4194 + dd 0 + dd 0 + dd 4096 + dd 34 + db 0 + db 1 + db -36 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4226 + dd 0 + dd 0 + dd 4096 + dd 4 + db 0 + db 2 + db -40 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 24737 + dd 0 + dd 0 + dd 4096 + dd 4 + db 0 + db 2 + db -40 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 170 + dd 24737 + dd 0 + [align 32] + ;.type fcom2_insn,@object + ;.size fcom2_insn,56 +fcom2_insn: + dd 4098 + dd 20 + db 0 + db 2 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 24737 + dd 0 + dd 0 + dd 4098 + dd 20 + db 0 + db 2 + db 0 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 170 + dd 24737 + dd 0 + [align 32] + ;.type farith_insn,@object + ;.size farith_insn,168 +farith_insn: + dd 4096 + dd 42 + db 0 + db 1 + db -40 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4194 + dd 0 + dd 0 + dd 4096 + dd 42 + db 0 + db 1 + db -36 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4226 + dd 0 + dd 0 + dd 4096 + dd 6 + db 0 + db 2 + db -40 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 24737 + dd 0 + dd 0 + dd 4096 + dd 6 + db 0 + db 2 + db -40 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 170 + dd 24737 + dd 0 + dd 4096 + dd 4 + db 0 + db 2 + db -36 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 26785 + dd 0 + dd 0 + dd 4096 + dd 4 + db 0 + db 2 + db -36 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 24737 + dd 170 + dd 0 + [align 32] + ;.type farithp_insn,@object + ;.size farithp_insn,84 +farithp_insn: + dd 4096 + dd 4 + db 0 + db 2 + db -34 + db 1 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + dd 4096 + dd 4 + db 0 + db 2 + db -34 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 24737 + dd 0 + dd 0 + dd 4096 + dd 4 + db 0 + db 2 + db -34 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 24737 + dd 170 + dd 0 + [align 32] + ;.type fiarith_insn,@object + ;.size fiarith_insn,56 +fiarith_insn: + dd 4096 + dd 48 + db 0 + db 1 + db 4 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4162 + dd 0 + dd 0 + dd 4096 + dd 48 + db 0 + db 1 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4194 + dd 0 + dd 0 + [align 4] + ;.type fldnstcw_insn,@object + ;.size fldnstcw_insn,28 +fldnstcw_insn: + dd 4096 + dd 32 + db 0 + db 1 + db -39 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4418 + dd 0 + dd 0 + [align 4] + ;.type fstcw_insn,@object + ;.size fstcw_insn,28 +fstcw_insn: + dd 4096 + dd 0 + db 0 + db 2 + db -101 + db -39 + db 0 + db 7 + db 1 + db 0 + dd 4418 + dd 0 + dd 0 + [align 32] + ;.type fnstsw_insn,@object + ;.size fnstsw_insn,56 +fnstsw_insn: + dd 4096 + dd 0 + db 0 + db 1 + db -35 + db 0 + db 0 + db 7 + db 1 + db 0 + dd 4418 + dd 0 + dd 0 + dd 4096 + dd 0 + db 0 + db 2 + db -33 + db -32 + db 0 + db 0 + db 1 + db 0 + dd 75 + dd 0 + dd 0 + [align 32] + ;.type fstsw_insn,@object + ;.size fstsw_insn,56 +fstsw_insn: + dd 4096 + dd 0 + db 0 + db 2 + db -101 + db -35 + db 0 + db 7 + db 1 + db 0 + dd 4418 + dd 0 + dd 0 + dd 4096 + dd 0 + db 0 + db 3 + db -101 + db -33 + db -32 + db 0 + db 1 + db 0 + dd 75 + dd 0 + dd 0 + [align 4] + ;.type ffree_insn,@object + ;.size ffree_insn,28 +ffree_insn: + dd 4096 + dd 16 + db 0 + db 2 + db 0 + db -64 + db 0 + db 0 + db 1 + db 0 + dd 24737 + dd 0 + dd 0 + [align 32] + ;.type bswap_insn,@object + ;.size bswap_insn,56 +bswap_insn: + dd 8 + dd 0 + db 32 + db 2 + db 15 + db -56 + db 0 + db 0 + db 1 + db 0 + dd 24673 + dd 0 + dd 0 + dd 16779264 + dd 0 + db 64 + db 2 + db 15 + db -56 + db 0 + db 0 + db 1 + db 0 + dd 24705 + dd 0 + dd 0 + [align 32] + ;.type cmpxchgxadd_insn,@object + ;.size cmpxchgxadd_insn,112 +cmpxchgxadd_insn: + dd 8 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4387 + dd 16417 + dd 0 + dd 8 + dd 4 + db 16 + db 2 + db 15 + db 1 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 16449 + dd 0 + dd 8 + dd 4 + db 32 + db 2 + db 15 + db 1 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 16481 + dd 0 + dd 16779264 + dd 4 + db 64 + db 2 + db 15 + db 1 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 16513 + dd 0 + [align 4] + ;.type cmpxchg8b_insn,@object + ;.size cmpxchg8b_insn,28 +cmpxchg8b_insn: + dd 16 + dd 0 + db 0 + db 2 + db 15 + db -57 + db 0 + db 1 + db 1 + db 0 + dd 4482 + dd 0 + dd 0 + [align 32] + ;.type cmovcc_insn,@object + ;.size cmovcc_insn,84 +cmovcc_insn: + dd 32 + dd 4 + db 16 + db 2 + db 15 + db 64 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4419 + dd 0 + dd 32 + dd 4 + db 32 + db 2 + db 15 + db 64 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4451 + dd 0 + dd 16779264 + dd 4 + db 64 + db 2 + db 15 + db 64 + db 0 + db 0 + db 2 + db 0 + dd 16513 + dd 4483 + dd 0 + [align 4] + ;.type fcmovcc_insn,@object + ;.size fcmovcc_insn,28 +fcmovcc_insn: + dd 4128 + dd 20 + db 0 + db 2 + db 0 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 170 + dd 24737 + dd 0 + [align 32] + ;.type movnti_insn,@object + ;.size movnti_insn,56 +movnti_insn: + dd 128 + dd 0 + db 0 + db 2 + db 15 + db -61 + db 0 + db 0 + db 2 + db 0 + dd 4450 + dd 16481 + dd 0 + dd 16779264 + dd 0 + db 64 + db 2 + db 15 + db -61 + db 0 + db 0 + db 2 + db 0 + dd 4482 + dd 16513 + dd 0 + [align 4] + ;.type clflush_insn,@object + ;.size clflush_insn,28 +clflush_insn: + dd 64 + dd 0 + db 0 + db 2 + db 15 + db -82 + db 0 + db 7 + db 1 + db 0 + dd 4386 + dd 0 + dd 0 + [align 32] + ;.type movd_insn,@object + ;.size movd_insn,224 +movd_insn: + dd 8192 + dd 0 + db 0 + db 2 + db 15 + db 110 + db 0 + db 0 + db 2 + db 0 + dd 16516 + dd 4451 + dd 0 + dd 16787456 + dd 0 + db 64 + db 2 + db 15 + db 110 + db 0 + db 0 + db 2 + db 0 + dd 16516 + dd 4483 + dd 0 + dd 8192 + dd 0 + db 0 + db 2 + db 15 + db 126 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 16516 + dd 0 + dd 16787456 + dd 0 + db 64 + db 2 + db 15 + db 126 + db 0 + db 0 + db 2 + db 0 + dd 4483 + dd 16516 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db 102 + db 15 + db 110 + db 0 + db 2 + db 0 + dd 16580 + dd 4451 + dd 0 + dd 16812032 + dd 0 + db 64 + db 3 + db 102 + db 15 + db 110 + db 0 + db 2 + db 0 + dd 16580 + dd 4483 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db 102 + db 15 + db 126 + db 0 + db 2 + db 0 + dd 4451 + dd 16580 + dd 0 + dd 16812032 + dd 0 + db 64 + db 3 + db 102 + db 15 + db 126 + db 0 + db 2 + db 0 + dd 4483 + dd 16580 + dd 0 + [align 32] + ;.type movq_insn,@object + ;.size movq_insn,140 +movq_insn: + dd 8192 + dd 0 + db 0 + db 2 + db 15 + db 111 + db 0 + db 0 + db 2 + db 0 + dd 16516 + dd 4485 + dd 0 + dd 8192 + dd 0 + db 0 + db 2 + db 15 + db 127 + db 0 + db 0 + db 2 + db 0 + dd 4485 + dd 16516 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db -13 + db 15 + db 126 + db 0 + db 2 + db 0 + dd 16580 + dd 4292 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db -13 + db 15 + db 126 + db 0 + db 2 + db 0 + dd 16580 + dd 4485 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db 102 + db 15 + db -42 + db 0 + db 2 + db 0 + dd 4485 + dd 16580 + dd 0 + [align 32] + ;.type mmxsse2_insn,@object + ;.size mmxsse2_insn,56 +mmxsse2_insn: + dd 8192 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16516 + dd 4485 + dd 0 + dd 32768 + dd 1 + db 0 + db 3 + db 102 + db 15 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4549 + dd 0 + [align 32] + ;.type pshift_insn,@object + ;.size pshift_insn,112 +pshift_insn: + dd 8192 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16516 + dd 4485 + dd 0 + dd 8192 + dd 38 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 4228 + dd 8480 + dd 0 + dd 32768 + dd 1 + db 0 + db 3 + db 102 + db 15 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4549 + dd 0 + dd 32768 + dd 35 + db 0 + db 3 + db 102 + db 15 + db 0 + db 0 + db 2 + db 0 + dd 4292 + dd 8480 + dd 0 + [align 4] + ;.type sseps_insn,@object + ;.size sseps_insn,28 +sseps_insn: + dd 16384 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4549 + dd 0 + [align 4] + ;.type ssess_insn,@object + ;.size ssess_insn,28 +ssess_insn: + dd 16384 + dd 17 + db 0 + db 3 + db 0 + db 15 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4549 + dd 0 + [align 4] + ;.type ssecmpps_insn,@object + ;.size ssecmpps_insn,28 +ssecmpps_insn: + dd 16384 + dd 128 + db 0 + db 2 + db 15 + db -62 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4549 + dd 0 + [align 4] + ;.type ssecmpss_insn,@object + ;.size ssecmpss_insn,28 +ssecmpss_insn: + dd 16384 + dd 144 + db 0 + db 3 + db 0 + db 15 + db -62 + db 0 + db 2 + db 0 + dd 16580 + dd 4549 + dd 0 + [align 4] + ;.type ssepsimm_insn,@object + ;.size ssepsimm_insn,28 +ssepsimm_insn: + dd 16384 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 3 + db 0 + dd 16580 + dd 4549 + dd 8480 + [align 4] + ;.type ssessimm_insn,@object + ;.size ssessimm_insn,28 +ssessimm_insn: + dd 16384 + dd 17 + db 0 + db 3 + db 0 + db 15 + db 0 + db 0 + db 3 + db 0 + dd 16580 + dd 4549 + dd 8480 + [align 4] + ;.type ldstmxcsr_insn,@object + ;.size ldstmxcsr_insn,28 +ldstmxcsr_insn: + dd 16384 + dd 32 + db 0 + db 2 + db 15 + db -82 + db 0 + db 0 + db 1 + db 0 + dd 4450 + dd 0 + dd 0 + [align 4] + ;.type maskmovq_insn,@object + ;.size maskmovq_insn,28 +maskmovq_insn: + dd 8256 + dd 0 + db 0 + db 2 + db 15 + db -9 + db 0 + db 0 + db 2 + db 0 + dd 16516 + dd 4228 + dd 0 + [align 32] + ;.type movaups_insn,@object + ;.size movaups_insn,56 +movaups_insn: + dd 16384 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4549 + dd 0 + dd 16384 + dd 4 + db 0 + db 2 + db 15 + db 1 + db 0 + db 0 + db 2 + db 0 + dd 4549 + dd 16580 + dd 0 + [align 4] + ;.type movhllhps_insn,@object + ;.size movhllhps_insn,28 +movhllhps_insn: + dd 16384 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4292 + dd 0 + [align 32] + ;.type movhlps_insn,@object + ;.size movhlps_insn,56 +movhlps_insn: + dd 16384 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4482 + dd 0 + dd 16384 + dd 4 + db 0 + db 2 + db 15 + db 1 + db 0 + db 0 + db 2 + db 0 + dd 4482 + dd 16580 + dd 0 + [align 4] + ;.type movmskps_insn,@object + ;.size movmskps_insn,28 +movmskps_insn: + dd 16384 + dd 0 + db 0 + db 2 + db 15 + db 80 + db 0 + db 0 + db 2 + db 0 + dd 4193 + dd 16580 + dd 0 + [align 4] + ;.type movntps_insn,@object + ;.size movntps_insn,28 +movntps_insn: + dd 16384 + dd 0 + db 0 + db 2 + db 15 + db 43 + db 0 + db 0 + db 2 + db 0 + dd 4546 + dd 16577 + dd 0 + [align 4] + ;.type movntq_insn,@object + ;.size movntq_insn,28 +movntq_insn: + dd 16384 + dd 0 + db 0 + db 2 + db 15 + db -25 + db 0 + db 0 + db 2 + db 0 + dd 4482 + dd 16580 + dd 0 + [align 32] + ;.type movss_insn,@object + ;.size movss_insn,84 +movss_insn: + dd 16384 + dd 0 + db 0 + db 3 + db -13 + db 15 + db 16 + db 0 + db 2 + db 0 + dd 16580 + dd 4292 + dd 0 + dd 16384 + dd 0 + db 0 + db 3 + db -13 + db 15 + db 16 + db 0 + db 2 + db 0 + dd 16580 + dd 4482 + dd 0 + dd 16384 + dd 0 + db 0 + db 3 + db -13 + db 15 + db 17 + db 0 + db 2 + db 0 + dd 4482 + dd 16580 + dd 0 + [align 32] + ;.type pextrw_insn,@object + ;.size pextrw_insn,56 +pextrw_insn: + dd 8256 + dd 0 + db 0 + db 2 + db 15 + db -59 + db 0 + db 0 + db 3 + db 0 + dd 4193 + dd 16516 + dd 8480 + dd 32768 + dd 0 + db 0 + db 3 + db 102 + db 15 + db -59 + db 0 + db 3 + db 0 + dd 4193 + dd 16580 + dd 8480 + [align 32] + ;.type pinsrw_insn,@object + ;.size pinsrw_insn,112 +pinsrw_insn: + dd 8256 + dd 0 + db 0 + db 2 + db 15 + db -60 + db 0 + db 0 + db 3 + db 0 + dd 16516 + dd 4193 + dd 8480 + dd 8256 + dd 0 + db 0 + db 2 + db 15 + db -60 + db 0 + db 0 + db 3 + db 0 + dd 16516 + dd 4419 + dd 8480 + dd 32768 + dd 0 + db 0 + db 3 + db 102 + db 15 + db -60 + db 0 + db 3 + db 0 + dd 16580 + dd 4193 + dd 8480 + dd 32768 + dd 0 + db 0 + db 3 + db 102 + db 15 + db -60 + db 0 + db 3 + db 0 + dd 16516 + dd 4419 + dd 8480 + [align 32] + ;.type pmovmskb_insn,@object + ;.size pmovmskb_insn,56 +pmovmskb_insn: + dd 8256 + dd 0 + db 0 + db 2 + db 15 + db -41 + db 0 + db 0 + db 2 + db 0 + dd 4193 + dd 16516 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db 102 + db 15 + db -41 + db 0 + db 2 + db 0 + dd 4193 + dd 16580 + dd 0 + [align 4] + ;.type pshufw_insn,@object + ;.size pshufw_insn,28 +pshufw_insn: + dd 8256 + dd 0 + db 0 + db 2 + db 15 + db 112 + db 0 + db 0 + db 3 + db 0 + dd 16516 + dd 4485 + dd 8480 + [align 32] + ;.type cmpsd_insn,@object + ;.size cmpsd_insn,56 +cmpsd_insn: + dd 0 + dd 0 + db 32 + db 1 + db -89 + db 0 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db -14 + db 15 + db -62 + db 0 + db 3 + db 0 + dd 16580 + dd 4549 + dd 8480 + [align 32] + ;.type movaupd_insn,@object + ;.size movaupd_insn,56 +movaupd_insn: + dd 32768 + dd 1 + db 0 + db 3 + db 102 + db 15 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4549 + dd 0 + dd 32768 + dd 1 + db 0 + db 3 + db 102 + db 15 + db 1 + db 0 + db 2 + db 0 + dd 4549 + dd 16580 + dd 0 + [align 32] + ;.type movhlpd_insn,@object + ;.size movhlpd_insn,56 +movhlpd_insn: + dd 32768 + dd 1 + db 0 + db 3 + db 102 + db 15 + db 0 + db 0 + db 2 + db 0 + dd 16580 + dd 4482 + dd 0 + dd 32768 + dd 1 + db 0 + db 3 + db 102 + db 15 + db 1 + db 0 + db 2 + db 0 + dd 4482 + dd 16580 + dd 0 + [align 4] + ;.type movmskpd_insn,@object + ;.size movmskpd_insn,28 +movmskpd_insn: + dd 32768 + dd 0 + db 0 + db 3 + db 102 + db 15 + db 80 + db 0 + db 2 + db 0 + dd 4193 + dd 16580 + dd 0 + [align 4] + ;.type movntpddq_insn,@object + ;.size movntpddq_insn,28 +movntpddq_insn: + dd 32768 + dd 1 + db 0 + db 3 + db 102 + db 15 + db 0 + db 0 + db 2 + db 0 + dd 4546 + dd 16580 + dd 0 + [align 32] + ;.type movsd_insn,@object + ;.size movsd_insn,112 +movsd_insn: + dd 0 + dd 0 + db 32 + db 1 + db -91 + db 0 + db 0 + db 0 + db 0 + db 0 + dd 0 + dd 0 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db -14 + db 15 + db 16 + db 0 + db 2 + db 0 + dd 16580 + dd 4292 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db -14 + db 15 + db 16 + db 0 + db 2 + db 0 + dd 16580 + dd 4482 + dd 0 + dd 32768 + dd 0 + db 0 + db 3 + db -14 + db 15 + db 17 + db 0 + db 2 + db 0 + dd 4482 + dd 16580 + dd 0 + [align 4] + ;.type maskmovdqu_insn,@object + ;.size maskmovdqu_insn,28 +maskmovdqu_insn: + dd 32768 + dd 0 + db 0 + db 3 + db 102 + db 15 + db -9 + db 0 + db 2 + db 0 + dd 16580 + dd 4292 + dd 0 + [align 32] + ;.type movdqau_insn,@object + ;.size movdqau_insn,56 +movdqau_insn: + dd 32768 + dd 16 + db 0 + db 3 + db 0 + db 15 + db 111 + db 0 + db 2 + db 0 + dd 16580 + dd 4549 + dd 0 + dd 32768 + dd 16 + db 0 + db 3 + db 0 + db 15 + db 127 + db 0 + db 2 + db 0 + dd 4549 + dd 16580 + dd 0 + [align 4] + ;.type movdq2q_insn,@object + ;.size movdq2q_insn,28 +movdq2q_insn: + dd 32768 + dd 0 + db 0 + db 3 + db -14 + db 15 + db -42 + db 0 + db 2 + db 0 + dd 16516 + dd 4292 + dd 0 + [align 4] + ;.type movq2dq_insn,@object + ;.size movq2dq_insn,28 +movq2dq_insn: + dd 32768 + dd 0 + db 0 + db 3 + db -13 + db 15 + db -42 + db 0 + db 2 + db 0 + dd 16580 + dd 4228 + dd 0 + [align 4] + ;.type pslrldq_insn,@object + ;.size pslrldq_insn,28 +pslrldq_insn: + dd 32768 + dd 32 + db 0 + db 3 + db 102 + db 15 + db 115 + db 0 + db 2 + db 0 + dd 4292 + dd 8480 + dd 0 + [align 4] + ;.type now3d_insn,@object + ;.size now3d_insn,28 +now3d_insn: + dd 65536 + dd 128 + db 0 + db 2 + db 15 + db 15 + db 0 + db 0 + db 2 + db 0 + dd 16516 + dd 4485 + dd 0 + [align 4] + ;.type cyrixmmx_insn,@object + ;.size cyrixmmx_insn,28 +cyrixmmx_insn: + dd 139264 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 2 + db 0 + dd 16516 + dd 4485 + dd 0 + [align 4] + ;.type pmachriw_insn,@object + ;.size pmachriw_insn,28 +pmachriw_insn: + dd 139264 + dd 0 + db 0 + db 2 + db 15 + db 94 + db 0 + db 0 + db 2 + db 0 + dd 16516 + dd 4482 + dd 0 + [align 4] + ;.type rsdc_insn,@object + ;.size rsdc_insn,28 +rsdc_insn: + dd 655368 + dd 0 + db 0 + db 2 + db 15 + db 121 + db 0 + db 0 + db 2 + db 0 + dd 16454 + dd 4514 + dd 0 + [align 4] + ;.type cyrixsmm_insn,@object + ;.size cyrixsmm_insn,28 +cyrixsmm_insn: + dd 655368 + dd 4 + db 0 + db 2 + db 15 + db 0 + db 0 + db 0 + db 1 + db 0 + dd 4514 + dd 0 + dd 0 + [align 4] + ;.type svdc_insn,@object + ;.size svdc_insn,28 +svdc_insn: + dd 655368 + dd 0 + db 0 + db 2 + db 15 + db 120 + db 0 + db 0 + db 2 + db 0 + dd 4514 + dd 16454 + dd 0 + [align 32] + ;.type ibts_insn,@object + ;.size ibts_insn,56 +ibts_insn: + dd 6291460 + dd 0 + db 16 + db 2 + db 15 + db -89 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 16449 + dd 0 + dd 6291460 + dd 0 + db 32 + db 2 + db 15 + db -89 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 16481 + dd 0 + [align 32] + ;.type umov_insn,@object + ;.size umov_insn,168 +umov_insn: + dd 2097156 + dd 0 + db 0 + db 2 + db 15 + db 16 + db 0 + db 0 + db 2 + db 0 + dd 4387 + dd 16417 + dd 0 + dd 2097156 + dd 0 + db 16 + db 2 + db 15 + db 17 + db 0 + db 0 + db 2 + db 0 + dd 4419 + dd 16449 + dd 0 + dd 2097156 + dd 0 + db 32 + db 2 + db 15 + db 17 + db 0 + db 0 + db 2 + db 0 + dd 4451 + dd 16481 + dd 0 + dd 2097156 + dd 0 + db 0 + db 2 + db 15 + db 18 + db 0 + db 0 + db 2 + db 0 + dd 16417 + dd 4387 + dd 0 + dd 2097156 + dd 0 + db 16 + db 2 + db 15 + db 19 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4419 + dd 0 + dd 2097156 + dd 0 + db 32 + db 2 + db 15 + db 19 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4451 + dd 0 + [align 32] + ;.type xbts_insn,@object + ;.size xbts_insn,56 +xbts_insn: + dd 6291460 + dd 0 + db 16 + db 2 + db 15 + db -90 + db 0 + db 0 + db 2 + db 0 + dd 16449 + dd 4418 + dd 0 + dd 6291460 + dd 0 + db 32 + db 2 + db 15 + db -90 + db 0 + db 0 + db 2 + db 0 + dd 16481 + dd 4450 + dd 0 + ;.type size_lookup.0,@object + ;.size size_lookup.0,8 +size_lookup.0: + db 0 + db 8 + db 16 + db 32 + db 64 + db 80 + db -128 + db 0 + [section .rodata];.str1.1,"aMS",@progbits,1 +LC0: + db "invalid operand conversion", 0 +LC1: + db "./modules/arch/x86/x86id.re", 0 +LC2: + db "$", 0 + [section .text] + ;.type x86_new_jmp,@function +x86_new_jmp: + push ebp + mov ebp, esp + push edi + push esi + push ebx + sub esp, 76 + mov edx, DWORD [ebp+8] + mov eax, DWORD [edx+4] + movzx esi, al + mov ebx, DWORD [edx] + shr eax, 8 + mov DWORD [ebp-60], eax + mov edi, DWORD [ebp+32] + mov DWORD [ebp-56], edi + mov eax, DWORD [ebp+16] + mov edi, DWORD [eax] + cmp DWORD [edi+4], 4 + je .L2 + sub esp, 4 + push DWORD LC0 + push DWORD 1543 + push DWORD LC1 + call [DWORD yasm_internal_error_] + add esp, 16 +.L2: + mov edx, DWORD [ebp+20] + mov eax, DWORD [edx+16] + and eax, 3584 + cmp eax, 1536 + jne .L3 + push DWORD [ebp+32] + sub esp, 8 + push DWORD [edi+8] + call yasm_expr_copy + mov DWORD [esp], eax + call yasm_expr_expr + add esp, 12 + push eax + sub esp, 8 + push DWORD [ebp+32] + push DWORD 0 + sub esp, 4 + push DWORD [edi+8] + call yasm_expr_expr + add esp, 8 + push eax + push DWORD 25 + call yasm_expr_new + add esp, 20 + push eax + call yasm_expr_expr + add esp, 8 + push eax + push DWORD 27 + call yasm_expr_new + mov DWORD [ebp-52], eax + add esp, 16 + jmp .L4 +.L3: + mov eax, DWORD [edi+8] + mov DWORD [ebp-52], eax +.L4: + sub esp, 12 + push DWORD [ebp+32] + push DWORD 0 + push DWORD [ebp+28] + push DWORD [ebp+24] + push DWORD LC2 + call yasm_symrec_define_label + mov DWORD [ebp-48], eax + mov BYTE [ebp-32], 0 + add esp, 32 + mov edi, DWORD [ebp+20] + mov eax, DWORD [edi+16] + and eax, 3584 + cmp eax, 1024 + je .L6 + cmp eax, 1024 + jg .L11 + cmp eax, 512 + je .L7 + jmp .L9 +.L11: + cmp eax, 1536 + je .L8 + jmp .L9 +.L6: + mov DWORD [ebp-44], 3 + jmp .L5 +.L7: + mov DWORD [ebp-44], 4 + jmp .L5 +.L8: + mov DWORD [ebp-44], 5 + mov al, BYTE [ebx+9] + mov BYTE [ebp-32], al + mov al, BYTE [ebx+10] + mov BYTE [ebp-31], al + mov al, BYTE [ebx+11] + mov BYTE [ebp-30], al + mov al, BYTE [ebx+12] + mov BYTE [ebp-29], al + jmp .L5 +.L9: + mov DWORD [ebp-44], 0 +.L5: + mov edx, DWORD [ebp+20] + mov al, BYTE [edx+8] + mov BYTE [ebp-27], al + cmp BYTE [edx+14], 1 + jbe .L12 + mov edx, DWORD [edx+20] + mov eax, edx + and eax, 61440 + cmp eax, 36864 + jne .L12 + mov eax, edx + and eax, 224 + shr eax, 5 + mov al, BYTE [size_lookup.0+eax] + mov BYTE [ebp-28], al + jmp .L13 +.L12: + mov BYTE [ebp-28], 0 +.L13: + mov eax, DWORD [ebp+20] + test BYTE [eax+5], 1 + je .L14 + mov dl, BYTE [ebp-60] + mov BYTE [ebp-28], dl +.L14: + mov BYTE [ebp-40], 0 + mov BYTE [ebp-36], 0 + test esi, esi + jle .L16 + mov cl, BYTE [yasm_x86_LTX_mode_bits] + mov edi, DWORD [cpu_enabled] + mov DWORD [ebp-76], edi + mov al, BYTE [ebp-27] + mov BYTE [ebp-61], al +.L34: + mov eax, DWORD [ebx] + mov edx, eax + mov edi, DWORD [ebp+8] + or edx, DWORD [edi+8] + test edx, 16777216 + je .L20 + cmp cl, 64 + jne .L17 +.L20: + test edx, 33554432 + je .L21 + cmp cl, 64 + je .L17 +.L21: + and edx, -50331649 + mov eax, DWORD [ebp-76] + and eax, edx + cmp eax, edx + jne .L17 + cmp BYTE [ebx+14], 0 + je .L17 + mov edx, DWORD [ebx+16] + mov eax, edx + and eax, 61440 + cmp eax, 32768 + jne .L17 + mov al, BYTE [ebp-61] + cmp BYTE [ebx+8], al + jne .L17 + mov eax, edx + and eax, 3584 + cmp eax, 512 + je .L29 + cmp eax, 1024 + jne .L17 + mov al, BYTE [ebx+9] + mov BYTE [ebp-40], al + mov dl, BYTE [ebx+10] + mov BYTE [ebp-39], dl + mov al, BYTE [ebx+11] + mov BYTE [ebp-38], al + mov al, BYTE [ebx+12] + mov BYTE [ebp-37], al + test BYTE [ebx+4], 16 + je .L17 + add edx, DWORD [ebp-60] + mov BYTE [ebp-39], dl + jmp .L17 +.L29: + mov al, BYTE [ebx+9] + mov BYTE [ebp-36], al + mov al, BYTE [ebx+10] + mov BYTE [ebp-35], al + mov dl, BYTE [ebx+11] + mov BYTE [ebp-34], dl + mov al, BYTE [ebx+12] + mov BYTE [ebp-33], al + test BYTE [ebx+4], 4 + je .L30 + add edx, DWORD [ebp-60] + mov BYTE [ebp-34], dl +.L30: + mov eax, DWORD [ebx+16] + and eax, 196608 + cmp eax, 196608 + jne .L17 + mov BYTE [ebp-32], 1 + movzx eax, BYTE [ebx+9] + mov al, BYTE [eax+10+ebx] + mov BYTE [ebp-31], al +.L17: + dec esi + add ebx, 28 + test esi, esi + jle .L16 + cmp BYTE [ebp-40], 0 + je .L34 + cmp BYTE [ebp-36], 0 + je .L34 +.L16: + sub esp, 12 + lea eax, [ebp-56] + push eax + call yasm_x86__bc_new_jmp + lea esp, [ebp-12] + pop ebx + pop esi + pop edi + leave + ret +.Lfe1: + ;.size x86_new_jmp,.Lfe1-x86_new_jmp + [section .rodata] + [align 32] + ;.type size_lookup.1,@object + ;.size size_lookup.1,32 +size_lookup.1: + dd 0 + dd 1 + dd 2 + dd 4 + dd 8 + dd 10 + dd 16 + dd 0 + [section .rodata];.str1.1 +LC3: + db "invalid operand type", 0 +LC4: + db "invalid target modifier type", 0 +LC6: + db "mismatch in operand sizes", 0 +LC7: + db "operand size not specified", 0 + [section .rodata];.str1.32,"aMS",@progbits,1 + [align 32] +LC8: + db "unrecognized x86 ext mod index", 0 + [align 32] +LC9: + db "unrecognized x86 extended modifier", 0 + [align 32] +LC5: + db "invalid combination of opcode and operands", 0 + [section .rodata];.str1.1 +LC10: + db "unknown operand action", 0 + [section .rodata];.str1.32 + [align 32] +LC11: + db "unknown operand postponed action", 0 + [section .text] +[global yasm_x86__parse_insn] + ;.type yasm_x86__parse_insn,@function +yasm_x86__parse_insn: + push ebp + mov ebp, esp + push edi + push esi + push ebx + sub esp, 76 + mov edx, DWORD [ebp+8] + mov eax, DWORD [edx+4] + mov ebx, DWORD [edx] + mov ecx, eax + shr ecx, 8 + mov DWORD [ebp-68], ecx + mov DWORD [ebp-72], 0 + and eax, 255 + mov DWORD [ebp-64], eax + jle .L38 +.L166: + mov DWORD [ebp-80], 0 + mov eax, DWORD [ebx] + mov edx, eax + mov ecx, DWORD [ebp+8] + or edx, DWORD [ecx+8] + test edx, 16777216 + je .L42 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L39 +.L42: + test edx, 33554432 + je .L43 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L39 +.L43: + and edx, -50331649 + mov eax, edx + and eax, DWORD [cpu_enabled] + cmp eax, edx + jne .L39 + movzx eax, BYTE [ebx+14] + cmp DWORD [ebp+12], eax + jne .L39 + cmp DWORD [ebp+16], 0 + je .L261 + mov DWORD [ebp-76], 0 + mov eax, DWORD [ebp+16] + mov edi, DWORD [eax] + test edi, edi + je .L48 + movzx eax, BYTE [ebx+14] + cmp DWORD [ebp-76], eax + jge .L48 + cmp DWORD [ebp-80], 0 + jne .L39 +.L164: + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 31 + cmp eax, 21 + ja .L139 + jmp DWORD [.L140+eax*4] + [section .rodata] + [align 4] + [align 4] +.L140: + dd .L53 + dd .L57 + dd .L71 + dd .L55 + dd .L75 + dd .L73 + dd .L83 + dd .L85 + dd .L88 + dd .L91 + dd .L94 + dd .L97 + dd .L103 + dd .L109 + dd .L115 + dd .L118 + dd .L121 + dd .L124 + dd .L127 + dd .L130 + dd .L133 + dd .L136 + [section .text] +.L53: + cmp DWORD [edi+4], 4 + jmp .L273 +.L55: + cmp DWORD [edi+4], 3 + je .L52 +.L57: + cmp DWORD [edi+4], 1 + jne .L138 + mov eax, DWORD [edi+8] + and eax, -16 + cmp eax, 48 + je .L52 + cmp eax, 48 + ja .L69 + cmp eax, 16 + je .L52 + cmp eax, 32 + jmp .L273 +.L69: + cmp eax, 80 + je .L52 + cmp eax, 80 + ja .L70 + cmp eax, 64 + jmp .L273 +.L70: + cmp eax, 96 + jmp .L273 +.L71: + cmp DWORD [edi+4], 3 + jmp .L273 +.L73: + cmp DWORD [edi+4], 3 + je .L52 +.L75: + cmp DWORD [edi+4], 1 + jne .L138 + mov eax, DWORD [edi+8] + and eax, -16 + cmp eax, 112 + je .L52 + cmp eax, 128 + jmp .L273 +.L83: + cmp DWORD [edi+4], 2 + jmp .L273 +.L85: + cmp DWORD [edi+4], 1 + jne .L138 + mov eax, DWORD [edi+8] + and eax, -16 + cmp eax, 144 + jmp .L273 +.L88: + cmp DWORD [edi+4], 1 + jne .L138 + mov eax, DWORD [edi+8] + and eax, -16 + cmp eax, 160 + jmp .L273 +.L91: + cmp DWORD [edi+4], 1 + jne .L138 + mov eax, DWORD [edi+8] + and eax, -16 + cmp eax, 176 + jmp .L273 +.L94: + cmp DWORD [edi+4], 1 + jne .L138 + cmp DWORD [edi+8], 96 + jmp .L273 +.L97: + cmp DWORD [edi+4], 1 + jne .L138 + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 224 + cmp eax, 32 + jne .L100 + cmp DWORD [edi+8], 16 + je .L100 + cmp DWORD [edi+8], 32 + jne .L138 +.L100: + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 224 + cmp eax, 64 + jne .L101 + cmp DWORD [edi+8], 48 + jne .L138 +.L101: + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 224 + cmp eax, 96 + jne .L102 + cmp DWORD [edi+8], 64 + jne .L138 +.L102: + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 224 + cmp eax, 128 + jne .L52 + cmp DWORD [edi+8], 80 + jmp .L273 +.L103: + cmp DWORD [edi+4], 1 + jne .L138 + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 224 + cmp eax, 32 + jne .L106 + cmp DWORD [edi+8], 17 + je .L106 + cmp DWORD [edi+8], 33 + jne .L138 +.L106: + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 224 + cmp eax, 64 + jne .L107 + cmp DWORD [edi+8], 49 + jne .L138 +.L107: + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 224 + cmp eax, 96 + jne .L108 + cmp DWORD [edi+8], 65 + jne .L138 +.L108: + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 224 + cmp eax, 128 + jne .L52 + cmp DWORD [edi+8], 81 + jmp .L273 +.L109: + cmp DWORD [edi+4], 1 + jne .L138 + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 224 + cmp eax, 32 + jne .L112 + cmp DWORD [edi+8], 18 + je .L112 + cmp DWORD [edi+8], 34 + jne .L138 +.L112: + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 224 + cmp eax, 64 + jne .L113 + cmp DWORD [edi+8], 50 + jne .L138 +.L113: + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 224 + cmp eax, 96 + jne .L114 + cmp DWORD [edi+8], 66 + jne .L138 +.L114: + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 224 + cmp eax, 128 + jne .L52 + cmp DWORD [edi+8], 82 + jmp .L273 +.L115: + cmp DWORD [edi+4], 2 + jne .L138 + mov eax, DWORD [edi+8] + and eax, 15 + cmp eax, 1 + jmp .L273 +.L118: + cmp DWORD [edi+4], 2 + jne .L138 + mov eax, DWORD [edi+8] + and eax, 15 + cmp eax, 3 + jmp .L273 +.L121: + cmp DWORD [edi+4], 2 + jne .L138 + test BYTE [edi+8], 15 + jmp .L273 +.L124: + cmp DWORD [edi+4], 2 + jne .L138 + mov eax, DWORD [edi+8] + and eax, 15 + cmp eax, 4 + jmp .L273 +.L127: + cmp DWORD [edi+4], 2 + jne .L138 + mov eax, DWORD [edi+8] + and eax, 15 + cmp eax, 5 + jmp .L273 +.L130: + cmp DWORD [edi+4], 2 + jne .L138 + mov eax, DWORD [edi+8] + and eax, 15 + cmp eax, 2 + jmp .L273 +.L133: + cmp DWORD [edi+4], 1 + jne .L138 + cmp DWORD [edi+8], 148 + jmp .L273 +.L136: + cmp DWORD [edi+4], 3 + jne .L138 + sub esp, 8 + push DWORD 1 + push DWORD [edi+8] + call yasm_ea_get_disp + mov DWORD [esp], eax + call yasm_expr__contains + add esp, 16 + test eax, eax +.L273: + je .L52 +.L138: + mov DWORD [ebp-80], 1 + jmp .L52 +.L139: + sub esp, 4 + push DWORD LC3 + push DWORD 1849 + push DWORD LC1 + call [DWORD yasm_internal_error_] + add esp, 16 +.L52: + cmp DWORD [ebp-80], 0 + jne .L39 + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 224 + shr eax, 5 + mov esi, DWORD [size_lookup.1+eax*4] + cmp DWORD [edi+4], 1 + jne .L142 + cmp DWORD [edi+16], 0 + jne .L142 + sub esp, 12 + push DWORD [edi+8] + call yasm_x86__get_reg_size + add esp, 16 + cmp eax, esi + jmp .L274 +.L142: + mov eax, DWORD [ebp-76] + test BYTE [ebx+17+eax*4], 1 + je .L145 + test esi, esi + je .L144 + cmp DWORD [edi+16], esi + je .L144 + cmp DWORD [edi+16], 0 + jmp .L274 +.L145: + cmp DWORD [edi+16], esi +.L274: + je .L144 + mov DWORD [ebp-80], 1 +.L144: + cmp DWORD [ebp-80], 0 + jne .L39 + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 3584 + cmp eax, 1024 + je .L155 + cmp eax, 1024 + jg .L163 + test eax, eax + je .L151 + cmp eax, 512 + je .L153 + jmp .L161 +.L163: + cmp eax, 1536 + je .L157 + cmp eax, 2048 + je .L159 + jmp .L161 +.L151: + cmp DWORD [edi+12], 0 + jmp .L275 +.L153: + cmp DWORD [edi+12], 1 + jmp .L275 +.L155: + cmp DWORD [edi+12], 2 + jmp .L275 +.L157: + cmp DWORD [edi+12], 3 + jmp .L275 +.L159: + cmp DWORD [edi+12], 4 +.L275: + je .L49 + mov DWORD [ebp-80], 1 + jmp .L49 +.L161: + sub esp, 4 + push DWORD LC4 + push DWORD 1899 + push DWORD LC1 + call [DWORD yasm_internal_error_] + add esp, 16 +.L49: + mov edi, DWORD [edi] + inc DWORD [ebp-76] + test edi, edi + je .L48 + movzx eax, BYTE [ebx+14] + cmp DWORD [ebp-76], eax + jge .L48 + cmp DWORD [ebp-80], 0 + je .L164 + jmp .L39 +.L48: + cmp DWORD [ebp-80], 0 + je .L261 +.L39: + dec DWORD [ebp-64] + add ebx, 28 + cmp DWORD [ebp-64], 0 + jle .L38 + cmp DWORD [ebp-72], 0 + je .L166 + jmp .L167 +.L38: + cmp DWORD [ebp-72], 0 + jne .L167 + jmp .L277 +.L261: + mov DWORD [ebp-72], 1 + jmp .L38 +.L167: + mov eax, DWORD [ebx+4] + and eax, -268435456 + cmp eax, 268435456 + je .L170 + cmp eax, 268435456 + jg .L182 + test eax, eax + je .L168 + jmp .L180 +.L182: + cmp eax, 536870912 + je .L178 + jmp .L180 +.L170: + mov eax, DWORD [ebx+4] + and eax, 267386880 + shr eax, 20 + je .L172 + cmp eax, 1 + je .L173 + jmp .L174 +.L172: + sub esp, 8 + push DWORD LC6 + jmp .L268 +.L173: + sub esp, 8 + push DWORD LC7 +.L268: + push DWORD [ebp+28] + call yasm__error + jmp .L276 +.L174: + sub esp, 4 + push DWORD LC8 + push DWORD 1930 + push DWORD LC1 + call [DWORD yasm_internal_error_] + jmp .L276 +.L178: + sub esp, 4 + push DWORD LC8 + push DWORD 1937 + jmp DWORD .L269 +.L180: + sub esp, 4 + push DWORD LC9 + push DWORD 1941 +.L269: + push DWORD LC1 + call [DWORD yasm_internal_error_] + add esp, 16 +.L168: + cmp DWORD [ebp+16], 0 + je .L183 + mov eax, DWORD [ebx+16] + and eax, 61440 + cmp eax, 32768 + jne .L183 + sub esp, 4 + push DWORD [ebp+28] + push DWORD [ebp+24] + push DWORD [ebp+20] + push ebx + push DWORD [ebp+16] + push DWORD [ebp+12] + push DWORD [ebp+8] + call x86_new_jmp + jmp .L36 +.L183: + mov ecx, DWORD [ebp+28] + mov DWORD [ebp-56], ecx + mov DWORD [ebp-52], 0 + mov DWORD [ebp-48], 0 + mov al, BYTE [ebx+8] + mov BYTE [ebp-44], al + mov al, BYTE [ebx+9] + mov BYTE [ebp-43], al + mov al, BYTE [ebx+10] + mov BYTE [ebp-42], al + mov al, BYTE [ebx+11] + mov BYTE [ebp-41], al + mov al, BYTE [ebx+12] + mov BYTE [ebp-40], al + mov al, BYTE [ebx+13] + mov BYTE [ebp-39], al + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L184 + cmp BYTE [ebx+8], 64 + jne .L184 + mov al, 72 + jmp .L185 +.L184: + mov al, 0 +.L185: + mov BYTE [ebp-38], al + mov BYTE [ebp-37], 0 + mov BYTE [ebp-36], 0 + mov BYTE [ebp-35], 0 + mov BYTE [ebp-34], 0 + test BYTE [ebx+4], 1 + je .L186 + mov al, BYTE [ebp-68] + add BYTE [ebp-40], al + shr DWORD [ebp-68], 8 +.L186: + test BYTE [ebx+4], 2 + je .L187 + shr DWORD [ebp-68], 8 +.L187: + test BYTE [ebx+4], 4 + je .L188 + mov dl, BYTE [ebp-68] + add BYTE [ebp-41], dl + shr DWORD [ebp-68], 8 +.L188: + test BYTE [ebx+4], 8 + je .L189 + shr DWORD [ebp-68], 8 +.L189: + test BYTE [ebx+4], 16 + je .L190 + mov cl, BYTE [ebp-68] + add BYTE [ebp-42], cl + shr DWORD [ebp-68], 8 +.L190: + test BYTE [ebx+4], 32 + je .L191 + mov al, BYTE [ebp-68] + add BYTE [ebp-39], al + shr DWORD [ebp-68], 8 +.L191: + test BYTE [ebx+4], 64 + je .L192 + mov dl, BYTE [ebp-68] + mov BYTE [ebp-44], dl + shr DWORD [ebp-68], 8 +.L192: + cmp BYTE [ebx+4], 0 + jns .L193 + push DWORD [ebp+28] + push DWORD 0 + sub esp, 4 + movzx eax, BYTE [ebp-68] + push eax + call yasm_intnum_new_uint + mov DWORD [esp], eax + call yasm_expr_int + add esp, 8 + push eax + push DWORD 0 + call yasm_expr_new + mov DWORD [ebp-48], eax + mov BYTE [ebp-37], 1 + add esp, 16 +.L193: + cmp DWORD [ebp+16], 0 + je .L194 + mov DWORD [ebp-76], 0 + mov ecx, DWORD [ebp+16] + mov edi, DWORD [ecx] + test edi, edi + je .L194 + movzx eax, BYTE [ebx+14] + cmp DWORD [ebp-76], eax + jge .L194 +.L257: + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 61440 + cmp eax, 12288 + je .L223 + cmp eax, 12288 + jg .L247 + cmp eax, 4096 + je .L210 + cmp eax, 4096 + jg .L248 + test eax, eax + je .L201 + jmp .L245 +.L248: + cmp eax, 8192 + je .L220 + jmp .L245 +.L247: + cmp eax, 20480 + je .L232 + cmp eax, 20480 + jg .L249 + cmp eax, 16384 + je .L226 + jmp .L245 +.L249: + cmp eax, 24576 + je .L236 + cmp eax, 28672 + je .L239 + jmp .L245 +.L201: + mov eax, DWORD [edi+4] + cmp eax, 3 + je .L205 + cmp eax, 3 + jbe .L200 + cmp eax, 4 + je .L206 + jmp .L200 +.L205: + sub esp, 12 + push DWORD [edi+8] + call yasm_ea_delete + jmp .L271 +.L206: + sub esp, 12 + push DWORD [edi+8] + call yasm_expr_delete + jmp .L271 +.L210: + mov eax, DWORD [edi+4] + cmp eax, 2 + je .L213 + cmp eax, 2 + ja .L219 + cmp eax, 1 + je .L212 + jmp .L200 +.L219: + cmp eax, 3 + je .L214 + cmp eax, 4 + je .L216 + jmp .L200 +.L212: + sub esp, 4 + movzx eax, BYTE [yasm_x86_LTX_mode_bits] + push eax + lea eax, [ebp-38] + push eax + push DWORD [edi+8] + call yasm_x86__ea_new_reg + jmp .L272 +.L213: + sub esp, 4 + push DWORD LC0 + push DWORD 2025 + push DWORD LC1 + call [DWORD yasm_internal_error_] + add esp, 16 +.L214: + mov edx, DWORD [edi+8] + mov DWORD [ebp-52], edx + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 31 + cmp eax, 21 + jne .L200 + sub esp, 12 + push edx + call yasm_x86__ea_set_disponly + jmp .L271 +.L216: + sub esp, 8 + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 224 + shr eax, 5 + push DWORD [size_lookup.1+eax*4] + push DWORD [edi+8] + call yasm_x86__ea_new_imm +.L272: + mov DWORD [ebp-52], eax + jmp .L271 +.L220: + cmp DWORD [edi+4], 4 + jne .L221 + mov eax, DWORD [edi+8] + mov DWORD [ebp-48], eax + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 224 + shr eax, 5 + mov al, BYTE [size_lookup.1+eax*4] + mov BYTE [ebp-37], al + jmp .L200 +.L221: + sub esp, 4 + push DWORD LC0 + push DWORD 2045 + jmp .L270 +.L223: + cmp DWORD [edi+4], 4 + jne .L224 + mov eax, DWORD [edi+8] + mov DWORD [ebp-48], eax + mov edx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+edx*4] + and eax, 224 + shr eax, 5 + mov al, BYTE [size_lookup.1+eax*4] + mov BYTE [ebp-37], al + mov BYTE [ebp-36], 1 + jmp .L200 +.L224: + sub esp, 4 + push DWORD LC0 + push DWORD 2054 + jmp .L270 +.L226: + cmp DWORD [edi+4], 2 + jne .L227 + mov al, BYTE [edi+8] + and eax, 7 + mov BYTE [ebp-39], al + jmp .L200 +.L227: + cmp DWORD [edi+4], 1 + jne .L229 + sub esp, 12 + push DWORD 2 + movzx eax, BYTE [yasm_x86_LTX_mode_bits] + push eax + push DWORD [edi+8] + lea eax, [ebp-39] + push eax + lea eax, [ebp-38] + push eax + call yasm_x86__set_rex_from_reg + add esp, 32 + test eax, eax + je .L200 +.L277: + sub esp, 8 + push DWORD LC5 + push DWORD [ebp+28] + call yasm__error + jmp .L243 +.L229: + sub esp, 4 + push DWORD LC0 + push DWORD 2068 + jmp .L270 +.L232: + cmp DWORD [edi+4], 1 + jne .L233 + sub esp, 12 + push DWORD 0 + movzx eax, BYTE [yasm_x86_LTX_mode_bits] + push eax + push DWORD [edi+8] + lea eax, [ebp-57] + push eax + lea eax, [ebp-38] + push eax + call yasm_x86__set_rex_from_reg + add esp, 32 + test eax, eax + jne .L277 + mov al, BYTE [ebp-42] + add al, BYTE [ebp-57] + mov BYTE [ebp-42], al + jmp .L200 +.L233: + sub esp, 4 + push DWORD LC0 + push DWORD 2082 + jmp .L270 +.L236: + cmp DWORD [edi+4], 1 + jne .L237 + mov al, BYTE [edi+8] + and eax, 7 + add BYTE [ebp-41], al + jmp .L200 +.L237: + sub esp, 4 + push DWORD LC0 + push DWORD 2089 + jmp .L270 +.L239: + cmp DWORD [edi+4], 1 + jne .L240 + sub esp, 4 + movzx eax, BYTE [yasm_x86_LTX_mode_bits] + push eax + lea esi, [ebp-38] + push esi + push DWORD [edi+8] + call yasm_x86__ea_new_reg + mov DWORD [ebp-52], eax + add esp, 16 + test eax, eax + je .L242 + sub esp, 12 + push DWORD 2 + movzx eax, BYTE [yasm_x86_LTX_mode_bits] + push eax + push DWORD [edi+8] + lea eax, [ebp-39] + push eax + push esi + call yasm_x86__set_rex_from_reg + add esp, 32 + test eax, eax + je .L200 +.L242: + sub esp, 8 + push DWORD LC5 + push DWORD [ebp+28] + call yasm__error + add esp, 16 + cmp DWORD [ebp-52], 0 + je .L243 + sub esp, 12 + push DWORD [ebp-52] + call [DWORD yasm_xfree] +.L276: + add esp, 16 +.L243: + mov eax, 0 + jmp .L36 +.L240: + sub esp, 4 + push DWORD LC0 + push DWORD 2106 + jmp .L270 +.L245: + sub esp, 4 + push DWORD LC10 + push DWORD 2109 +.L270: + push DWORD LC1 + call [DWORD yasm_internal_error_] +.L271: + add esp, 16 +.L200: + mov ecx, DWORD [ebp-76] + mov eax, DWORD [ebx+16+ecx*4] + and eax, 196608 + cmp eax, 65536 + je .L252 + cmp eax, 65536 + jg .L256 + test eax, eax + je .L197 + jmp .L254 +.L256: + cmp eax, 131072 + je .L253 + jmp .L254 +.L252: + mov BYTE [ebp-35], 1 + jmp .L197 +.L253: + mov BYTE [ebp-34], 1 + jmp .L197 +.L254: + sub esp, 4 + push DWORD LC11 + push DWORD 2123 + push DWORD LC1 + call [DWORD yasm_internal_error_] + add esp, 16 +.L197: + mov edi, DWORD [edi] + inc DWORD [ebp-76] + test edi, edi + je .L194 + movzx eax, BYTE [ebx+14] + cmp DWORD [ebp-76], eax + jl .L257 +.L194: + sub esp, 12 + lea eax, [ebp-56] + push eax + call yasm_x86__bc_new_insn +.L36: + lea esp, [ebp-12] + pop ebx + pop esi + pop edi + leave + ret +.Lfe2: + ;.size yasm_x86__parse_insn,.Lfe2-yasm_x86__parse_insn + [section .rodata];.str1.32 + [align 32] +LC12: + db "unrecognized CPU identifier `s'", 0 + [section .text] +[global yasm_x86__parse_cpu] + ;.type yasm_x86__parse_cpu,@function +yasm_x86__parse_cpu: + push ebp + mov ebp, esp + push ebx + sub esp, 4 + mov edx, DWORD [ebp+8] + mov ebx, DWORD [ebp+12] +.L279: + movsx eax, BYTE [edx] + cmp eax, 119 + ja .L338 + jmp DWORD [.L339+eax*4] + [section .rodata] + [align 4] + [align 4] +.L339: + dd .L283 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L285 + dd .L287 + dd .L289 + dd .L291 + dd .L293 + dd .L295 + dd .L338 + dd .L297 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L300 + dd .L338 + dd .L303 + dd .L338 + dd .L338 + dd .L306 + dd .L338 + dd .L309 + dd .L312 + dd .L338 + dd .L315 + dd .L338 + dd .L318 + dd .L321 + dd .L324 + dd .L327 + dd .L338 + dd .L338 + dd .L330 + dd .L338 + dd .L333 + dd .L338 + dd .L336 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L338 + dd .L300 + dd .L338 + dd .L303 + dd .L338 + dd .L338 + dd .L306 + dd .L338 + dd .L309 + dd .L312 + dd .L338 + dd .L315 + dd .L338 + dd .L318 + dd .L321 + dd .L324 + dd .L327 + dd .L338 + dd .L338 + dd .L330 + dd .L338 + dd .L333 + dd .L338 + dd .L336 + [section .text] +.L297: + inc edx + mov cl, BYTE [edx] + cmp cl, 48 + je .L341 + jmp .L342 +.L343: +.L312: + inc edx + mov cl, BYTE [edx] + cmp cl, 64 + jg .L344 + cmp cl, 51 + jle .L925 + cmp cl, 52 + jle .L291 + cmp cl, 53 + jle .L293 + cmp cl, 54 + jle .L295 + jmp .L342 +.L344: + cmp cl, 96 + jg .L355 + cmp cl, 65 + jle .L357 + cmp cl, 84 + jmp .L913 +.L355: + cmp cl, 97 + jle .L357 + cmp cl, 116 +.L913: + je .L359 + jmp .L342 +.L285: + inc edx + mov cl, BYTE [edx] + cmp cl, 56 + je .L364 + jmp .L342 +.L287: + inc edx + mov cl, BYTE [edx] + cmp cl, 56 + je .L366 + jmp .L342 +.L289: + inc edx + mov cl, BYTE [edx] + cmp cl, 67 + jle .L912 + cmp cl, 68 + jle .L372 + cmp cl, 100 + je .L372 + jmp .L342 +.L291: + inc edx + mov cl, BYTE [edx] + cmp cl, 56 + je .L375 + jmp .L342 +.L293: + inc edx + mov cl, BYTE [edx] + cmp cl, 56 + je .L377 + jmp .L342 +.L327: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + jg .L378 + cmp cl, 52 + jle .L923 + cmp cl, 54 + jg .L387 + cmp cl, 53 + jle .L389 + jmp .L390 +.L387: + cmp cl, 69 + je .L393 + jmp .L342 +.L378: + cmp cl, 101 + jg .L395 + cmp cl, 81 + jg .L396 + cmp cl, 80 + jle .L824 + jmp .L342 +.L396: + cmp cl, 82 + jle .L401 + cmp cl, 100 + jle .L342 + jmp .L393 +.L395: + cmp cl, 112 + jg .L404 + cmp cl, 111 + jle .L342 + jmp .L824 +.L404: + cmp cl, 114 + je .L401 + jmp .L342 +.L295: + inc edx + mov cl, BYTE [edx] + cmp cl, 56 + je .L409 + jmp .L342 +.L315: + inc edx + mov cl, BYTE [edx] + cmp cl, 64 + jg .L410 + cmp cl, 53 + jle .L342 + cmp cl, 54 + jle .L413 + cmp cl, 55 + jle .L415 + jmp .L342 +.L410: + cmp cl, 65 + jle .L418 + cmp cl, 97 + je .L418 + jmp .L342 +.L336: + inc edx + mov cl, BYTE [edx] + cmp cl, 73 + je .L421 + cmp cl, 105 + je .L421 + jmp .L342 +.L300: + inc edx + mov cl, BYTE [edx] + cmp cl, 84 + jg .L423 + cmp cl, 77 + je .L425 + cmp cl, 83 + jle .L342 + jmp .L427 +.L423: + cmp cl, 109 + jg .L429 + cmp cl, 108 + jle .L342 + jmp .L425 +.L429: + cmp cl, 116 + je .L427 + jmp .L342 +.L330: + inc edx + mov cl, BYTE [edx] + cmp cl, 83 + jg .L433 + cmp cl, 76 + jg .L434 + cmp cl, 75 + jle .L342 + jmp .L436 +.L434: + cmp cl, 77 + jle .L439 + cmp cl, 82 + jle .L342 + jmp .L441 +.L433: + cmp cl, 109 + jg .L443 + cmp cl, 107 + jle .L342 + cmp cl, 108 + jle .L436 + jmp .L439 +.L443: + cmp cl, 115 + je .L441 + jmp .L342 +.L309: + inc edx + mov cl, BYTE [edx] + cmp cl, 65 + je .L449 + cmp cl, 97 + je .L449 + jmp .L342 +.L324: + inc edx + mov cl, BYTE [edx] + cmp cl, 80 + jg .L451 + cmp cl, 66 + je .L453 + cmp cl, 79 + jle .L342 + jmp .L455 +.L451: + cmp cl, 98 + jg .L457 + cmp cl, 97 + jle .L342 + jmp .L453 +.L457: + cmp cl, 112 + je .L455 + jmp .L342 +.L306: + inc edx + mov cl, BYTE [edx] + cmp cl, 80 + je .L462 + cmp cl, 112 + je .L462 + jmp .L342 +.L321: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + je .L465 + cmp cl, 111 + je .L465 + jmp .L342 +.L318: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L468 + cmp cl, 109 + je .L468 + jmp .L342 +.L303: + inc edx + mov cl, BYTE [edx] + cmp cl, 89 + je .L471 + cmp cl, 121 + je .L471 + jmp .L342 +.L333: + inc edx + mov cl, BYTE [edx] + cmp cl, 78 + je .L474 + cmp cl, 110 + je .L474 + jmp .L342 +.L338: + inc edx + mov cl, BYTE [edx] +.L342: + test cl, cl + jle .L922 + jmp .L338 +.L283: + inc edx +.L922: + push edx + push DWORD LC12 + push ebx + push DWORD 0 + call yasm__warning + jmp .L278 +.L474: + inc edx + mov cl, BYTE [edx] + cmp cl, 68 + je .L479 + cmp cl, 100 + jne .L342 +.L479: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + je .L482 + cmp cl, 111 + jne .L342 +.L482: + inc edx + mov cl, BYTE [edx] + cmp cl, 67 + je .L485 + cmp cl, 99 + jne .L342 +.L485: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 2097152 + jmp .L278 +.L471: + inc edx + mov cl, BYTE [edx] + cmp cl, 82 + je .L489 + cmp cl, 114 + jne .L342 +.L489: + inc edx + mov cl, BYTE [edx] + cmp cl, 73 + je .L492 + cmp cl, 105 + jne .L342 +.L492: + inc edx + mov cl, BYTE [edx] + cmp cl, 88 + je .L495 + cmp cl, 120 + jne .L342 +.L495: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 131072 + jmp .L278 +.L468: + inc edx + mov cl, BYTE [edx] + cmp cl, 88 + je .L499 + cmp cl, 120 + jne .L342 +.L499: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 8192 + jmp .L278 +.L465: + inc edx + mov cl, BYTE [edx] + movsx eax, cl + sub eax, 51 + cmp eax, 66 + ja .L342 + jmp DWORD [.L530+eax*4] + [section .rodata] + [align 4] + [align 4] +.L530: + dd .L504 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L507 + dd .L342 + dd .L510 + dd .L342 + dd .L342 + dd .L513 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L516 + dd .L342 + dd .L519 + dd .L522 + dd .L342 + dd .L342 + dd .L525 + dd .L342 + dd .L528 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L507 + dd .L342 + dd .L510 + dd .L342 + dd .L342 + dd .L513 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L342 + dd .L516 + dd .L342 + dd .L519 + dd .L522 + dd .L342 + dd .L342 + dd .L525 + dd .L342 + dd .L528 + [section .text] +.L513: + inc edx + mov cl, BYTE [edx] + cmp cl, 80 + je .L532 + cmp cl, 112 + je .L532 + jmp .L342 +.L516: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L535 + cmp cl, 109 + je .L535 + jmp .L342 +.L525: + inc edx + mov cl, BYTE [edx] + cmp cl, 83 + jg .L537 + cmp cl, 77 + je .L539 + cmp cl, 82 + jle .L342 + jmp .L541 +.L537: + cmp cl, 109 + jg .L543 + cmp cl, 108 + jle .L342 + jmp .L539 +.L543: + cmp cl, 115 + je .L541 + jmp .L342 +.L504: + inc edx + mov cl, BYTE [edx] + cmp cl, 68 + je .L548 + cmp cl, 100 + je .L548 + jmp .L342 +.L510: + inc edx + mov cl, BYTE [edx] + cmp cl, 89 + je .L551 + cmp cl, 121 + je .L551 + jmp .L342 +.L507: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L554 + cmp cl, 109 + je .L554 + jmp .L342 +.L522: + inc edx + mov cl, BYTE [edx] + cmp cl, 82 + je .L557 + cmp cl, 114 + je .L557 + jmp .L342 +.L528: + inc edx + mov cl, BYTE [edx] + cmp cl, 78 + je .L560 + cmp cl, 110 + je .L560 + jmp .L342 +.L519: + inc edx + mov cl, BYTE [edx] + cmp cl, 66 + je .L563 + cmp cl, 98 + jne .L342 +.L563: + inc edx + mov cl, BYTE [edx] + cmp cl, 83 + je .L566 + cmp cl, 115 + jne .L342 +.L566: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -4194305 + jmp .L278 +.L560: + inc edx + mov cl, BYTE [edx] + cmp cl, 68 + je .L570 + cmp cl, 100 + jne .L342 +.L570: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + je .L573 + cmp cl, 111 + jne .L342 +.L573: + inc edx + mov cl, BYTE [edx] + cmp cl, 67 + je .L576 + cmp cl, 99 + jne .L342 +.L576: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -2097153 + jmp .L278 +.L557: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + jg .L579 + cmp cl, 73 + je .L581 + cmp cl, 78 + jle .L342 + jmp .L583 +.L579: + cmp cl, 105 + jg .L584 + cmp cl, 104 + jle .L342 + jmp .L581 +.L584: + cmp cl, 111 + jne .L342 +.L583: + inc edx + mov cl, BYTE [edx] + cmp cl, 84 + je .L589 + cmp cl, 116 + je .L589 + jmp .L342 +.L581: + inc edx + mov cl, BYTE [edx] + cmp cl, 86 + je .L592 + cmp cl, 118 + jne .L342 +.L592: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -8388609 + jmp .L278 +.L589: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -1048577 + jmp .L278 +.L554: + inc edx + mov cl, BYTE [edx] + cmp cl, 68 + je .L597 + cmp cl, 100 + jne .L342 +.L597: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -262145 + jmp .L278 +.L551: + inc edx + mov cl, BYTE [edx] + cmp cl, 82 + je .L601 + cmp cl, 114 + jne .L342 +.L601: + inc edx + mov cl, BYTE [edx] + cmp cl, 73 + je .L604 + cmp cl, 105 + jne .L342 +.L604: + inc edx + mov cl, BYTE [edx] + cmp cl, 88 + je .L607 + cmp cl, 120 + jne .L342 +.L607: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -131073 + jmp .L278 +.L548: + inc edx + mov cl, BYTE [edx] + cmp cl, 78 + je .L611 + cmp cl, 110 + jne .L342 +.L611: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + je .L614 + cmp cl, 111 + jne .L342 +.L614: + inc edx + mov cl, BYTE [edx] + cmp cl, 87 + je .L617 + cmp cl, 119 + jne .L342 +.L617: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -65537 + jmp .L278 +.L539: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L621 + cmp cl, 109 + je .L621 + jmp .L342 +.L541: + inc edx + mov cl, BYTE [edx] + cmp cl, 69 + je .L624 + cmp cl, 101 + jne .L342 +.L624: + inc edx + mov cl, BYTE [edx] + test cl, cl + jle .L627 + cmp cl, 50 + je .L629 + jmp .L338 +.L627: + and DWORD [cpu_enabled], -16385 + jmp .L278 +.L629: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -32769 + jmp .L278 +.L621: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -524289 + jmp .L278 +.L535: + inc edx + mov cl, BYTE [edx] + cmp cl, 88 + je .L633 + cmp cl, 120 + jne .L342 +.L633: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -8193 + jmp .L278 +.L532: + inc edx + mov cl, BYTE [edx] + cmp cl, 85 + je .L637 + cmp cl, 117 + jne .L342 +.L637: + inc edx + cmp BYTE [edx], 0 + jg .L338 + and DWORD [cpu_enabled], -4097 + jmp .L278 +.L462: + inc edx + mov cl, BYTE [edx] + cmp cl, 85 + je .L641 + cmp cl, 117 + jne .L342 +.L641: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 4096 + jmp .L278 +.L453: + inc edx + mov cl, BYTE [edx] + cmp cl, 83 + je .L645 + cmp cl, 115 + je .L645 + jmp .L342 +.L455: + inc edx + mov cl, BYTE [edx] + cmp cl, 84 + je .L648 + cmp cl, 116 + jne .L342 +.L648: + inc edx + mov cl, BYTE [edx] + cmp cl, 69 + je .L651 + cmp cl, 101 + jne .L342 +.L651: + inc edx + mov cl, BYTE [edx] + cmp cl, 82 + je .L654 + cmp cl, 114 + jne .L342 +.L654: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + je .L657 + cmp cl, 111 + jne .L342 +.L657: + inc edx + mov cl, BYTE [edx] + cmp cl, 78 + je .L660 + cmp cl, 110 +.L914: + jne .L342 +.L660: + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 10059327 + jmp .L278 +.L645: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 4194304 + jmp .L278 +.L449: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L665 + cmp cl, 109 + jne .L342 +.L665: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L668 + cmp cl, 109 + jne .L342 +.L668: + inc edx + mov cl, BYTE [edx] + cmp cl, 69 + je .L671 + cmp cl, 101 + jne .L342 +.L671: + inc edx + mov cl, BYTE [edx] + cmp cl, 82 + je .L660 + cmp cl, 114 + jmp .L914 +.L436: + inc edx + mov cl, BYTE [edx] + cmp cl, 69 + je .L676 + cmp cl, 101 + je .L676 + jmp .L342 +.L439: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L679 + cmp cl, 109 + je .L679 + jmp .L342 +.L441: + inc edx + mov cl, BYTE [edx] + cmp cl, 69 + je .L682 + cmp cl, 101 + jne .L342 +.L682: + inc edx + mov cl, BYTE [edx] + test cl, cl + jle .L685 + cmp cl, 50 + je .L687 + jmp .L338 +.L685: + or DWORD [cpu_enabled], 16384 + jmp .L278 +.L687: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 32768 + jmp .L278 +.L679: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 524288 + jmp .L278 +.L676: + inc edx + mov cl, BYTE [edx] + cmp cl, 68 + je .L691 + cmp cl, 100 + jne .L342 +.L691: + inc edx + mov cl, BYTE [edx] + cmp cl, 71 + je .L694 + cmp cl, 103 + jne .L342 +.L694: + inc edx + mov cl, BYTE [edx] + cmp cl, 69 + je .L697 + cmp cl, 101 + jne .L342 +.L697: + inc edx + mov cl, BYTE [edx] + cmp cl, 72 + je .L309 + cmp cl, 104 + je .L309 + jmp .L342 +.L425: + inc edx + mov cl, BYTE [edx] + cmp cl, 68 + je .L702 + cmp cl, 100 + je .L702 + jmp .L342 +.L427: + inc edx + mov cl, BYTE [edx] + cmp cl, 72 + je .L705 + cmp cl, 104 + jne .L342 +.L705: + inc edx + mov cl, BYTE [edx] + cmp cl, 76 + je .L708 + cmp cl, 108 + jne .L342 +.L708: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + je .L711 + cmp cl, 111 + jne .L342 +.L711: + inc edx + mov cl, BYTE [edx] + cmp cl, 78 + je .L714 + cmp cl, 110 + jne .L342 +.L714: + inc edx + mov cl, BYTE [edx] + cmp cl, 45 + jg .L716 + test cl, cl + jle .L718 + cmp cl, 44 + jle .L338 + jmp .L720 +.L716: + cmp cl, 54 + je .L723 + jmp .L338 +.L718: + mov DWORD [cpu_enabled], 10057279 + jmp .L278 +.L720: + inc edx + mov cl, BYTE [edx] + cmp cl, 54 + jne .L342 +.L723: + inc edx + mov cl, BYTE [edx] + cmp cl, 52 + jmp .L914 +.L702: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 262144 + jmp .L278 +.L421: + inc edx + mov cl, BYTE [edx] + cmp cl, 76 + je .L728 + cmp cl, 108 + jne .L342 +.L728: + inc edx + mov cl, BYTE [edx] + cmp cl, 76 + je .L731 + cmp cl, 108 + jne .L342 +.L731: + inc edx + mov cl, BYTE [edx] + cmp cl, 73 + je .L734 + cmp cl, 105 + jne .L342 +.L734: + inc edx + mov cl, BYTE [edx] + cmp cl, 65 + je .L737 + cmp cl, 97 + jne .L342 +.L737: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L740 + cmp cl, 109 + jne .L342 +.L740: + inc edx + mov cl, BYTE [edx] + cmp cl, 69 + je .L743 + cmp cl, 101 + jne .L342 +.L743: + inc edx + mov cl, BYTE [edx] + cmp cl, 84 + je .L746 + cmp cl, 116 + jne .L342 +.L746: + inc edx + mov cl, BYTE [edx] + cmp cl, 84 + je .L749 + cmp cl, 116 + jne .L342 +.L749: + inc edx + mov cl, BYTE [edx] + cmp cl, 69 + je .L385 + cmp cl, 101 +.L915: + jne .L342 +.L385: + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 10023167 + jmp .L278 +.L413: + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 10039871 + jmp .L278 +.L415: + inc edx + cmp BYTE [edx], 0 + jle .L718 + jmp .L338 +.L418: + inc edx + mov cl, BYTE [edx] + cmp cl, 84 + je .L757 + cmp cl, 116 + jne .L342 +.L757: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L760 + cmp cl, 109 + jne .L342 +.L760: + inc edx + mov cl, BYTE [edx] + cmp cl, 65 + je .L763 + cmp cl, 97 + jne .L342 +.L763: + inc edx + mov cl, BYTE [edx] + cmp cl, 73 + je .L384 + cmp cl, 105 + jne .L342 +.L384: + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 9990271 + jmp .L278 +.L409: + inc edx + mov cl, BYTE [edx] + cmp cl, 54 +.L917: + jne .L342 +.L390: + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 9965631 + jmp .L278 +.L382: + inc edx + cmp BYTE [edx], 0 + jg .L338 +.L771: + mov DWORD [cpu_enabled], 9973823 + jmp .L278 +.L389: + inc edx + cmp BYTE [edx], 0 + jg .L338 +.L773: + mov DWORD [cpu_enabled], 9965599 + jmp .L278 +.L393: + inc edx + mov cl, BYTE [edx] + cmp cl, 78 + je .L775 + cmp cl, 110 + je .L775 + jmp .L342 +.L398: +.L401: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + jg .L780 + cmp cl, 73 + je .L782 + cmp cl, 78 + jle .L342 + jmp .L784 +.L780: + cmp cl, 105 + jg .L785 + cmp cl, 104 + jle .L342 + jmp .L782 +.L785: + cmp cl, 111 + jne .L342 +.L784: + inc edx + mov cl, BYTE [edx] + cmp cl, 84 + je .L790 + cmp cl, 116 + je .L790 + jmp .L342 +.L782: + inc edx + mov cl, BYTE [edx] + cmp cl, 86 + je .L793 + cmp cl, 118 + jne .L342 +.L793: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 8388608 + jmp .L278 +.L790: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 1048576 + jmp .L278 +.L778: +.L775: + inc edx + mov cl, BYTE [edx] + cmp cl, 84 + je .L800 + cmp cl, 116 + jne .L342 +.L800: + inc edx + mov cl, BYTE [edx] + cmp cl, 73 + je .L803 + cmp cl, 105 + jne .L342 +.L803: + inc edx + mov cl, BYTE [edx] + cmp cl, 85 + je .L806 + cmp cl, 117 + jne .L342 +.L806: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L809 + cmp cl, 109 + jne .L342 +.L809: + inc edx + mov cl, BYTE [edx] + cmp cl, 72 + jg .L811 + cmp cl, 49 + jg .L812 + test cl, cl + jle .L773 + cmp cl, 45 + jne .L338 + jmp .L819 +.L812: + cmp cl, 50 + jle .L382 + cmp cl, 51 + jle .L384 + cmp cl, 52 + jle .L385 + jmp .L338 +.L811: + cmp cl, 104 + jg .L820 + cmp cl, 73 + jle .L822 + cmp cl, 80 + jmp .L908 +.L820: + cmp cl, 105 + jle .L822 + cmp cl, 112 +.L908: + je .L824 + jmp .L338 +.L819: + inc edx + mov cl, BYTE [edx] + cmp cl, 52 + jg .L828 +.L923: + cmp cl, 49 + jle .L342 + cmp cl, 50 + jle .L382 + cmp cl, 51 + jle .L384 + jmp .L385 +.L828: + cmp cl, 73 + jg .L833 + cmp cl, 72 + jle .L342 + jmp .L822 +.L833: + cmp cl, 105 + jne .L342 +.L822: + inc edx + mov cl, BYTE [edx] + cmp cl, 86 + jg .L837 + cmp cl, 73 + je .L839 + cmp cl, 85 + jle .L342 + jmp .L385 +.L837: + cmp cl, 105 + jg .L842 + cmp cl, 104 + jle .L342 + jmp .L839 +.L842: + cmp cl, 118 + jmp .L915 +.L824: + inc edx + mov cl, BYTE [edx] + cmp cl, 82 + je .L847 + cmp cl, 114 + jne .L342 +.L847: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + je .L390 + cmp cl, 111 + jmp .L917 +.L839: + inc edx + mov cl, BYTE [edx] + cmp cl, 73 + jg .L851 + test cl, cl + jle .L771 + cmp cl, 72 + jle .L338 + jmp .L384 +.L851: + cmp cl, 105 + je .L384 + jmp .L338 +.L377: + inc edx + mov cl, BYTE [edx] + cmp cl, 54 + je .L389 + jmp .L342 +.L375: + inc edx + mov cl, BYTE [edx] + cmp cl, 54 + jne .L342 + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 9965583 + jmp .L278 +.L369: + inc edx + mov cl, BYTE [edx] + cmp cl, 54 + je .L860 + jmp .L342 +.L372: + inc edx + mov cl, BYTE [edx] + cmp cl, 78 + je .L862 + cmp cl, 110 + jne .L342 +.L862: + inc edx + mov cl, BYTE [edx] + cmp cl, 79 + je .L865 + cmp cl, 111 + jne .L342 +.L865: + inc edx + mov cl, BYTE [edx] + cmp cl, 87 + je .L868 + cmp cl, 119 + jne .L342 +.L868: + inc edx + cmp BYTE [edx], 0 + jg .L338 + or DWORD [cpu_enabled], 65536 + jmp .L278 +.L860: + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 9961479 + jmp .L278 +.L366: + inc edx + mov cl, BYTE [edx] + cmp cl, 54 + jne .L342 + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 8388611 + jmp .L278 +.L364: + inc edx + mov cl, BYTE [edx] + cmp cl, 54 + jne .L342 + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 8388609 + jmp .L278 +.L349: + inc edx + mov cl, BYTE [edx] +.L912: + cmp cl, 56 + je .L369 + jmp .L342 +.L357: + inc edx + mov cl, BYTE [edx] + cmp cl, 45 + je .L878 + jmp .L909 +.L359: + inc edx + mov cl, BYTE [edx] + cmp cl, 65 + je .L882 + cmp cl, 97 + jne .L342 +.L882: + inc edx + mov cl, BYTE [edx] + cmp cl, 78 + je .L885 + cmp cl, 110 + jne .L342 +.L885: + inc edx + mov cl, BYTE [edx] + cmp cl, 73 + je .L888 + cmp cl, 105 + jne .L342 +.L888: + inc edx + mov cl, BYTE [edx] + cmp cl, 85 + je .L891 + cmp cl, 117 + jne .L342 +.L891: + inc edx + mov cl, BYTE [edx] + cmp cl, 77 + je .L894 + cmp cl, 109 +.L920: + jne .L342 +.L894: + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 10023423 + jmp .L278 +.L878: + inc edx + mov cl, BYTE [edx] +.L909: + cmp cl, 54 + jne .L342 +.L880: + inc edx + mov cl, BYTE [edx] + cmp cl, 52 + jmp .L920 +.L341: + inc edx + mov cl, BYTE [edx] + cmp cl, 51 + jg .L899 +.L925: + cmp cl, 48 + jle .L342 + cmp cl, 49 + jle .L285 + cmp cl, 50 + jle .L287 + jmp .L349 +.L899: + cmp cl, 52 + jle .L291 + cmp cl, 56 + jne .L342 + inc edx + mov cl, BYTE [edx] + cmp cl, 54 + jne .L342 + inc edx + cmp BYTE [edx], 0 + jg .L338 + mov DWORD [cpu_enabled], 8388608 +.L278: + mov ebx, DWORD [ebp-4] + leave + ret +.Lfe3: + ;.size yasm_x86__parse_cpu,.Lfe3-yasm_x86__parse_cpu + [section .rodata];.str1.32 + [align 32] +LC16: + db "`s' segment register ignored in 64-bit mode", 0 + [align 32] +LC18: + db "Cannot override address size to 16 bits in 64-bit mode", 0 + [align 32] +LC17: + db "`s' is a prefix in 64-bit mode", 0 + [align 32] +LC15: + db "`s' is a register in 64-bit mode", 0 + [align 32] +LC13: + db "`s' is an instruction in 64-bit mode", 0 + [section .rodata];.str1.1 +LC14: + db "`s' invalid in 64-bit mode", 0 + [section .text] +[global yasm_x86__parse_check_id] + ;.type yasm_x86__parse_check_id,@function +yasm_x86__parse_check_id: + push ebp + mov ebp, esp + push edi + push esi + push ebx + sub esp, 12 + mov edi, DWORD [ebp+8] + mov ecx, DWORD [ebp+12] + mov esi, DWORD [ebp+16] + mov ebx, ecx +.L927: + movsx eax, BYTE [ecx] + cmp eax, 120 + ja .L999 + jmp DWORD [.L1000+eax*4] + [section .rodata] + [align 4] + [align 4] +.L1000: + dd .L8702 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L934 + dd .L937 + dd .L940 + dd .L943 + dd .L946 + dd .L949 + dd .L952 + dd .L955 + dd .L958 + dd .L961 + dd .L999 + dd .L964 + dd .L967 + dd .L970 + dd .L973 + dd .L976 + dd .L999 + dd .L979 + dd .L982 + dd .L985 + dd .L988 + dd .L991 + dd .L994 + dd .L997 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L999 + dd .L934 + dd .L937 + dd .L940 + dd .L943 + dd .L946 + dd .L949 + dd .L952 + dd .L955 + dd .L958 + dd .L961 + dd .L999 + dd .L964 + dd .L967 + dd .L970 + dd .L973 + dd .L976 + dd .L999 + dd .L979 + dd .L982 + dd .L985 + dd .L988 + dd .L991 + dd .L994 + dd .L997 + [section .text] +.L970: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + jg .L1001 + cmp dl, 69 + je .L1003 + cmp dl, 78 + jle .L1005 + jmp .L1006 +.L1001: + cmp dl, 101 + jg .L1008 + cmp dl, 100 + jle .L1005 + jmp .L1003 +.L1008: + cmp dl, 111 + je .L1006 + jmp .L1005 +.L1012: +.L982: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 56 + ja .L1005 + jmp DWORD [.L1069+eax*4] + [section .rodata] + [align 4] + [align 4] +.L1069: + dd .L1016 + dd .L1019 + dd .L1022 + dd .L1005 + dd .L1025 + dd .L1028 + dd .L1031 + dd .L1034 + dd .L1037 + dd .L1005 + dd .L1005 + dd .L1040 + dd .L1043 + dd .L1005 + dd .L1005 + dd .L1046 + dd .L1049 + dd .L1005 + dd .L1052 + dd .L1055 + dd .L1058 + dd .L1061 + dd .L1064 + dd .L1005 + dd .L1067 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1016 + dd .L1019 + dd .L1022 + dd .L1005 + dd .L1025 + dd .L1028 + dd .L1031 + dd .L1034 + dd .L1037 + dd .L1005 + dd .L1005 + dd .L1040 + dd .L1043 + dd .L1005 + dd .L1005 + dd .L1046 + dd .L1049 + dd .L1005 + dd .L1052 + dd .L1055 + dd .L1058 + dd .L1061 + dd .L1064 + dd .L1005 + dd .L1067 + [section .text] +.L949: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 50 + cmp eax, 71 + ja .L1005 + jmp DWORD [.L1128+eax*4] + [section .rodata] + [align 4] + [align 4] +.L1128: + dd .L1072 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1075 + dd .L1078 + dd .L1081 + dd .L1084 + dd .L1087 + dd .L1090 + dd .L1005 + dd .L1005 + dd .L1093 + dd .L1005 + dd .L1005 + dd .L1096 + dd .L1099 + dd .L1102 + dd .L1005 + dd .L1105 + dd .L1005 + dd .L1108 + dd .L1111 + dd .L1114 + dd .L1117 + dd .L1005 + dd .L1120 + dd .L1123 + dd .L1126 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1075 + dd .L1078 + dd .L1081 + dd .L1084 + dd .L1087 + dd .L1090 + dd .L1005 + dd .L1005 + dd .L1093 + dd .L1005 + dd .L1005 + dd .L1096 + dd .L1099 + dd .L1102 + dd .L1005 + dd .L1105 + dd .L1005 + dd .L1108 + dd .L1111 + dd .L1114 + dd .L1117 + dd .L1005 + dd .L1120 + dd .L1123 + dd .L1126 + [section .text] +.L985: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L1129 + cmp dl, 78 + jg .L1130 + cmp dl, 69 + jmp .L8674 +.L1130: + cmp dl, 79 + jle .L1135 + cmp dl, 81 + jle .L1005 + jmp .L1137 +.L1129: + cmp dl, 110 + jg .L1139 + cmp dl, 101 +.L8674: + je .L1132 + jmp .L1005 +.L1139: + cmp dl, 111 + jle .L1135 + cmp dl, 114 + je .L1137 + jmp .L1005 +.L973: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + jg .L1144 + cmp dl, 50 + jg .L1145 + cmp dl, 49 + je .L1147 + jmp .L1005 +.L1145: + cmp dl, 51 + jle .L1150 + cmp dl, 54 + je .L1152 + jmp .L1005 +.L1144: + cmp dl, 113 + jg .L1154 + cmp dl, 82 + jle .L1156 + cmp dl, 85 + jmp .L8673 +.L1154: + cmp dl, 114 + jle .L1156 + cmp dl, 117 +.L8673: + je .L1158 + jmp .L1005 +.L934: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 49 + cmp eax, 71 + ja .L1005 + jmp DWORD [.L1191+eax*4] + [section .rodata] + [align 4] + [align 4] +.L1191: + dd .L1164 + dd .L1005 + dd .L1166 + dd .L1005 + dd .L1005 + dd .L1168 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1171 + dd .L1005 + dd .L1005 + dd .L1174 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1177 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1180 + dd .L1005 + dd .L1183 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1186 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1189 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1171 + dd .L1005 + dd .L1005 + dd .L1174 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1177 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1180 + dd .L1005 + dd .L1183 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1186 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1189 + [section .text] +.L964: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 51 + ja .L1005 + jmp DWORD [.L1227+eax*4] + [section .rodata] + [align 4] + [align 4] +.L1227: + dd .L1195 + dd .L1005 + dd .L1005 + dd .L1198 + dd .L1201 + dd .L1204 + dd .L1207 + dd .L1005 + dd .L1210 + dd .L1005 + dd .L1005 + dd .L1213 + dd .L1216 + dd .L1005 + dd .L1219 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1222 + dd .L1225 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1195 + dd .L1005 + dd .L1005 + dd .L1198 + dd .L1201 + dd .L1204 + dd .L1207 + dd .L1005 + dd .L1210 + dd .L1005 + dd .L1005 + dd .L1213 + dd .L1216 + dd .L1005 + dd .L1219 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1222 + dd .L1225 + [section .text] +.L979: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 49 + cmp eax, 66 + ja .L1005 + jmp DWORD [.L1259+eax*4] + [section .rodata] + [align 4] + [align 4] +.L1259: + dd .L1230 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1233 + dd .L1233 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1236 + dd .L1239 + dd .L1242 + dd .L1245 + dd .L1248 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1251 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1254 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1257 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1236 + dd .L1239 + dd .L1242 + dd .L1245 + dd .L1248 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1251 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1254 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1257 + [section .text] +.L940: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 55 + ja .L1005 + jmp DWORD [.L1301+eax*4] + [section .rodata] + [align 4] + [align 4] +.L1301: + dd .L1263 + dd .L1266 + dd .L1005 + dd .L1269 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1272 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1275 + dd .L1278 + dd .L1005 + dd .L1281 + dd .L1284 + dd .L1005 + dd .L1287 + dd .L1290 + dd .L1005 + dd .L1005 + dd .L1293 + dd .L1296 + dd .L1299 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1263 + dd .L1266 + dd .L1005 + dd .L1269 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1272 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1275 + dd .L1278 + dd .L1005 + dd .L1281 + dd .L1284 + dd .L1005 + dd .L1287 + dd .L1290 + dd .L1005 + dd .L1005 + dd .L1293 + dd .L1296 + dd .L1299 + [section .text] +.L943: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 55 + ja .L1005 + jmp DWORD [.L1328+eax*4] + [section .rodata] + [align 4] + [align 4] +.L1328: + dd .L1305 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1308 + dd .L1005 + dd .L1005 + dd .L1311 + dd .L1314 + dd .L1005 + dd .L1005 + dd .L1317 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1320 + dd .L1323 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1326 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1305 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1308 + dd .L1005 + dd .L1005 + dd .L1311 + dd .L1314 + dd .L1005 + dd .L1005 + dd .L1317 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1320 + dd .L1323 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1326 + [section .text] +.L967: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 52 + ja .L1005 + jmp DWORD [.L1349+eax*4] + [section .rodata] + [align 4] + [align 4] +.L1349: + dd .L1332 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1335 + dd .L1005 + dd .L1005 + dd .L1338 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1341 + dd .L1005 + dd .L1344 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1347 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1332 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1335 + dd .L1005 + dd .L1005 + dd .L1338 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1341 + dd .L1005 + dd .L1344 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1347 + [section .text] +.L997: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 46 + ja .L1005 + jmp DWORD [.L1370+eax*4] + [section .rodata] + [align 4] + [align 4] +.L1370: + dd .L1353 + dd .L1356 + dd .L1359 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1362 + dd .L1365 + dd .L1005 + dd .L1368 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1353 + dd .L1356 + dd .L1359 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1362 + dd .L1365 + dd .L1005 + dd .L1368 + [section .text] +.L946: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 50 + ja .L1005 + jmp DWORD [.L1394+eax*4] + [section .rodata] + [align 4] + [align 4] +.L1394: + dd .L1374 + dd .L1377 + dd .L1380 + dd .L1383 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1386 + dd .L1389 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1392 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1374 + dd .L1377 + dd .L1380 + dd .L1383 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1386 + dd .L1389 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1392 + [section .text] +.L937: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 72 + cmp eax, 48 + ja .L1005 + jmp DWORD [.L1418+eax*4] + [section .rodata] + [align 4] + [align 4] +.L1418: + dd .L1398 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1401 + dd .L1005 + dd .L1005 + dd .L1404 + dd .L1407 + dd .L1005 + dd .L1005 + dd .L1410 + dd .L1413 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1416 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1398 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1401 + dd .L1005 + dd .L1005 + dd .L1404 + dd .L1407 + dd .L1005 + dd .L1005 + dd .L1410 + dd .L1413 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1416 + [section .text] +.L952: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L1420 + cmp dl, 115 + je .L1420 + jmp .L1005 +.L976: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 55 + ja .L1005 + jmp DWORD [.L1457+eax*4] + [section .rodata] + [align 4] + [align 4] +.L1457: + dd .L1425 + dd .L1005 + dd .L1005 + dd .L1428 + dd .L1431 + dd .L1434 + dd .L1005 + dd .L1005 + dd .L1437 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1440 + dd .L1005 + dd .L1443 + dd .L1005 + dd .L1005 + dd .L1446 + dd .L1449 + dd .L1005 + dd .L1452 + dd .L1005 + dd .L1005 + dd .L1455 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1425 + dd .L1005 + dd .L1005 + dd .L1428 + dd .L1431 + dd .L1434 + dd .L1005 + dd .L1005 + dd .L1437 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1440 + dd .L1005 + dd .L1443 + dd .L1005 + dd .L1005 + dd .L1446 + dd .L1449 + dd .L1005 + dd .L1452 + dd .L1005 + dd .L1005 + dd .L1455 + [section .text] +.L958: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 66 + cmp eax, 48 + ja .L1005 + jmp DWORD [.L1475+eax*4] + [section .rodata] + [align 4] + [align 4] +.L1475: + dd .L1461 + dd .L1005 + dd .L1464 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1467 + dd .L1470 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1473 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1461 + dd .L1005 + dd .L1464 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1467 + dd .L1470 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1473 + [section .text] +.L961: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 57 + ja .L1005 + jmp DWORD [.L1517+eax*4] + [section .rodata] + [align 4] + [align 4] +.L1517: + dd .L1479 + dd .L1482 + dd .L1485 + dd .L1005 + dd .L1488 + dd .L1005 + dd .L1491 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1494 + dd .L1497 + dd .L1500 + dd .L1503 + dd .L1506 + dd .L1005 + dd .L1509 + dd .L1512 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1515 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1479 + dd .L1482 + dd .L1485 + dd .L1005 + dd .L1488 + dd .L1005 + dd .L1491 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1494 + dd .L1497 + dd .L1500 + dd .L1503 + dd .L1506 + dd .L1005 + dd .L1509 + dd .L1512 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1515 + [section .text] +.L955: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L1519 + cmp dl, 108 + je .L1519 + jmp .L1005 +.L991: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L1522 + cmp dl, 101 + je .L1522 + jmp .L1005 +.L994: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L1524 + cmp dl, 65 + jg .L1525 + cmp dl, 64 + jle .L1005 + jmp .L1527 +.L1525: + cmp dl, 66 + jle .L1530 + cmp dl, 81 + jle .L1005 + jmp .L1532 +.L1524: + cmp dl, 98 + jg .L1534 + cmp dl, 96 + jle .L1005 + cmp dl, 97 + jle .L1527 + jmp .L1530 +.L1534: + cmp dl, 114 + je .L1532 + jmp .L1005 +.L988: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + jg .L1539 + cmp dl, 68 + jg .L1540 + cmp dl, 66 + jle .L1005 + cmp dl, 67 + jmp .L8675 +.L1540: + cmp dl, 76 + jle .L1005 + cmp dl, 77 + jle .L1548 + jmp .L1549 +.L1539: + cmp dl, 100 + jg .L1551 + cmp dl, 98 + jle .L1005 + cmp dl, 99 +.L8675: + jle .L1543 + jmp .L1544 +.L1551: + cmp dl, 108 + jle .L1005 + cmp dl, 109 + jle .L1548 + cmp dl, 110 + jle .L1549 + jmp .L1005 +.L999: + inc ecx + mov dl, BYTE [ecx] +.L1005: + mov eax, 0 + test dl, dl + jle .L926 + jmp .L999 +.L931: +.L1543: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L1561 + cmp dl, 111 + je .L1561 + jmp .L1005 +.L1544: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 48 + jle .L1005 + cmp dl, 49 + jle .L1565 + cmp dl, 50 + jle .L1567 + jmp .L1005 +.L1548: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L1569 + cmp dl, 111 + je .L1569 + jmp .L1005 +.L1549: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L1572 + cmp dl, 112 + jne .L1005 +.L1572: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L1575 + cmp dl, 99 + jne .L1005 +.L1575: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 75 + je .L1578 + cmp dl, 107 + jne .L1005 +.L1578: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + jg .L1580 + cmp dl, 72 + je .L1582 + cmp dl, 75 + jle .L1005 + jmp .L1584 +.L1580: + cmp dl, 104 + jg .L1586 + cmp dl, 103 + jle .L1005 + jmp .L1582 +.L1586: + cmp dl, 108 + je .L1584 + jmp .L1005 +.L1582: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L1591 + cmp dl, 112 + je .L1591 + jmp .L1005 +.L1584: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L1594 + cmp dl, 112 + jne .L1005 +.L1594: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L1596 + cmp dl, 68 + je .L1598 + cmp dl, 82 + jle .L1005 + jmp .L1600 +.L1596: + cmp dl, 100 + jg .L1602 + cmp dl, 99 + jle .L1005 + jmp .L1598 +.L1602: + cmp dl, 115 + je .L1600 + jmp .L1005 +.L1598: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6689793 + jmp .L9151 +.L1600: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 5121 + jmp .L9152 +.L1591: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L1612 + cmp dl, 68 + je .L1614 + cmp dl, 82 + jle .L1005 + jmp .L1616 +.L1612: + cmp dl, 100 + jg .L1618 + cmp dl, 99 + jle .L1005 + jmp .L1614 +.L1618: + cmp dl, 115 + je .L1616 + jmp .L1005 +.L1614: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6690049 + jmp .L9151 +.L1616: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 5377 + jmp .L9152 +.L1569: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L1629 + cmp dl, 118 + jne .L1005 +.L1629: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], umov_insn + mov DWORD [edi+4], 6 + jmp .L9016 +.L1567: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 985857 + jmp .L9153 +.L1565: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 1030401 + jmp .L8709 +.L1561: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L1641 + cmp dl, 109 + jne .L1005 +.L1641: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L1644 + cmp dl, 105 + jne .L1005 +.L1644: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L1647 + cmp dl, 115 + jne .L1005 +.L1647: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L1649 + cmp dl, 68 + je .L1651 + cmp dl, 82 + jle .L1005 + jmp .L1653 +.L1649: + cmp dl, 100 + jg .L1654 + cmp dl, 99 + jle .L1005 + jmp .L1651 +.L1654: + cmp dl, 115 + jne .L1005 +.L1653: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15937025 + jmp .L9152 +.L1651: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15871489 + jmp .L9151 +.L1527: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L1665 + cmp dl, 105 + je .L1665 + jmp .L1005 +.L1530: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L1668 + cmp dl, 105 + je .L1668 + jmp .L1005 +.L1532: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L1670 + cmp dl, 77 + je .L1672 + cmp dl, 82 + jle .L1005 + jmp .L1674 +.L1670: + cmp dl, 109 + jg .L1676 + cmp dl, 108 + jle .L1005 + jmp .L1672 +.L1676: + cmp dl, 115 + je .L1674 + jmp .L1005 +.L1672: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L1681 + cmp dl, 115 + je .L1681 + jmp .L1005 +.L1674: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 72 + je .L1684 + cmp dl, 104 + jne .L1005 +.L1684: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L1687 + cmp dl, 114 + jne .L1005 +.L1687: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 997121 + jmp .L8712 +.L1681: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L1693 + cmp dl, 114 + jne .L1005 +.L1693: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 995329 + jmp .L8713 +.L1668: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L1699 + cmp dl, 110 + jne .L1005 +.L1699: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L1702 + cmp dl, 118 + jne .L1005 +.L1702: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L1705 + cmp dl, 100 + jne .L1005 +.L1705: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 985345 + jmp .L8721 +.L1665: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L1711 + cmp dl, 116 + jne .L1005 +.L1711: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 39681 + jmp .L8695 +.L1522: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L1717 + cmp dl, 114 + jne .L1005 +.L1717: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L1719 + cmp dl, 82 + je .L1721 + cmp dl, 86 + jle .L1005 + jmp .L1723 +.L1719: + cmp dl, 114 + jg .L1725 + cmp dl, 113 + jle .L1005 + jmp .L1721 +.L1725: + cmp dl, 119 + je .L1723 + jmp .L1005 +.L1721: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], prot286_insn + mov DWORD [edi+4], 262145 + jmp .L9031 +.L1723: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], prot286_insn + mov DWORD [edi+4], 327681 + jmp .L9031 +.L1519: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L1736 + cmp dl, 116 + jne .L1005 +.L1736: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 62465 + mov DWORD [edi+8], 8388608 + jmp .L8696 +.L1479: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L1741 + test dl, dl + jle .L9238 + cmp dl, 68 + jle .L999 + jmp .L1745 +.L1741: + cmp dl, 101 + je .L1745 + jmp .L999 +.L1743: +.L1482: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L1750 + test dl, dl + jle .L9237 + cmp dl, 68 + jle .L999 + jmp .L1754 +.L1750: + cmp dl, 101 + je .L1754 + jmp .L999 +.L1752: +.L1485: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + jg .L1759 + test dl, dl + jle .L9237 + cmp dl, 87 + jle .L999 + jmp .L1763 +.L1759: + cmp dl, 120 + je .L1763 + jmp .L999 +.L1761: +.L1488: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + jg .L1768 + test dl, dl + jle .L9236 + cmp dl, 66 + jle .L999 + jmp .L1772 +.L1768: + cmp dl, 99 + je .L1772 + jmp .L999 +.L1770: +.L1491: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L1777 + test dl, dl + jle .L9235 + cmp dl, 68 + jle .L999 + jmp .L1781 +.L1777: + cmp dl, 101 + je .L1781 + jmp .L999 +.L1779: +.L1494: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L1786 + test dl, dl + jle .L9234 + cmp dl, 68 + jle .L999 + jmp .L1790 +.L1786: + cmp dl, 101 + je .L1790 + jmp .L999 +.L1788: +.L1497: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L1796 + cmp dl, 112 + je .L1796 + jmp .L1005 +.L1500: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 57 + ja .L1005 + jmp DWORD [.L1830+eax*4] + [section .rodata] + [align 4] + [align 4] +.L1830: + dd .L1801 + dd .L1804 + dd .L1745 + dd .L1005 + dd .L1828 + dd .L1005 + dd .L1813 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1816 + dd .L1005 + dd .L1005 + dd .L1819 + dd .L1822 + dd .L1005 + dd .L1005 + dd .L1825 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1828 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1801 + dd .L1804 + dd .L1745 + dd .L1005 + dd .L1828 + dd .L1005 + dd .L1813 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1816 + dd .L1005 + dd .L1005 + dd .L1819 + dd .L1822 + dd .L1005 + dd .L1005 + dd .L1825 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1828 + [section .text] +.L1503: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 7 + jmp .L8695 +.L1506: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + jg .L1834 + cmp dl, 68 + jg .L1835 + test dl, dl + jmp .L9239 +.L1835: + cmp dl, 69 + jle .L1839 + cmp dl, 78 + jle .L999 + jmp .L1822 +.L1834: + cmp dl, 101 + jg .L1843 + cmp dl, 100 + jle .L999 + jmp .L1839 +.L1843: + cmp dl, 111 + je .L1822 + jmp .L999 +.L1509: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L1850 + cmp dl, 99 + je .L1850 + jmp .L1005 +.L1512: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 2055 + jmp .L8695 +.L1515: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9236: + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 1031 + jmp .L8695 +.L1850: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L1859 + cmp dl, 120 + jne .L1005 +.L1859: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + je .L1862 + cmp dl, 122 + jne .L1005 +.L1862: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], jcxz_insn + mov DWORD [edi+4], 16386 + jmp .L9148 +.L1839: + inc ecx + cmp BYTE [ecx], 0 +.L9239: + jg .L999 + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 2567 + jmp .L8695 +.L1841: +.L1819: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 263 + jmp .L8695 +.L1801: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L1877 + test dl, dl + jle .L9231 + cmp dl, 68 + jle .L999 + jmp .L1881 +.L1877: + cmp dl, 101 + je .L1881 + jmp .L999 +.L1879: +.L1804: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L1886 + test dl, dl + jle .L9230 + cmp dl, 68 + jle .L999 + jmp .L1890 +.L1886: + cmp dl, 101 + je .L1890 + jmp .L999 +.L1888: +.L1807: +.L1810: +.L1828: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 1287 + jmp .L8695 +.L1825: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 2311 + jmp .L8695 +.L1822: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 2823 + jmp .L8695 +.L1813: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L1910 + test dl, dl + jle .L9228 + cmp dl, 68 + jle .L999 + jmp .L1914 +.L1910: + cmp dl, 101 + je .L1914 + jmp .L999 +.L1912: +.L1816: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L1919 + test dl, dl + jle .L9227 + cmp dl, 68 + jle .L999 + jmp .L1923 +.L1919: + cmp dl, 101 + jne .L999 +.L1921: +.L1923: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9235: + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 3847 + jmp .L8695 +.L1914: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9234: + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 3079 + jmp .L8695 +.L1890: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9238: + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 1799 + jmp .L8695 +.L1881: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9237: + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 519 + jmp .L8695 +.L1796: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], jmp_insn + jmp .L9226 +.L1790: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9228: + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 3591 + jmp .L8695 +.L1781: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9227: + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 3335 + jmp .L8695 +.L1772: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L1950 + cmp dl, 120 + jne .L1005 +.L1950: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + je .L1953 + cmp dl, 122 + jne .L1005 +.L1953: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], jcxz_insn + mov DWORD [edi+4], 8194 + jmp .L9186 +.L1763: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + je .L1959 + cmp dl, 122 + jne .L1005 +.L1959: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], jcxz_insn + mov DWORD [edi+4], 4098 + jmp .L8695 +.L1754: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9231: + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 1543 + jmp .L8695 +.L1745: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9230: + mov DWORD [edi], jcc_insn + mov DWORD [edi+4], 775 + jmp .L8695 +.L1461: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L1971 + cmp dl, 116 + je .L1971 + jmp .L1005 +.L1464: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L1974 + cmp dl, 105 + je .L1974 + jmp .L1005 +.L1467: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + je .L1977 + cmp dl, 117 + je .L1977 + jmp .L1005 +.L1470: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + jg .L1979 + cmp dl, 82 + jg .L1980 + test dl, dl + jle .L1982 + cmp dl, 67 + je .L1984 + jmp .L999 +.L1980: + cmp dl, 83 + jle .L1987 + cmp dl, 84 + jle .L1989 + cmp dl, 85 + jle .L999 + jmp .L1991 +.L1979: + cmp dl, 115 + jg .L1993 + cmp dl, 99 + je .L1984 + cmp dl, 114 + jle .L999 + jmp .L1987 +.L1993: + cmp dl, 116 + jle .L1989 + cmp dl, 118 + je .L1991 + jmp .L999 +.L1982: + mov DWORD [edi], in_insn + jmp .L9225 +.L1473: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L2002 + cmp dl, 101 + jne .L1005 +.L2002: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L2005 + cmp dl, 116 + jne .L1005 +.L2005: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2007 + cmp dl, 68 + jg .L2008 + test dl, dl + jle .L2010 + cmp dl, 67 + jle .L999 + jmp .L2012 +.L2008: + cmp dl, 81 + je .L2015 + cmp dl, 86 + jle .L999 + jmp .L2017 +.L2007: + cmp dl, 112 + jg .L2019 + cmp dl, 100 + je .L2012 + jmp .L999 +.L2019: + cmp dl, 113 + jle .L2015 + cmp dl, 119 + je .L2017 + jmp .L999 +.L2010: + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 52993 + jmp .L8695 +.L2017: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1101569 + jmp .L8695 +.L2012: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2150145 + jmp .L9186 +.L2015: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4247297 + jmp .L9148 +.L1984: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], incdec_insn + mov DWORD [edi+4], 16390 + jmp .L8695 +.L1987: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2039 + cmp dl, 67 + jg .L2040 + cmp dl, 66 + jmp .L8672 +.L2040: + cmp dl, 68 + jle .L2045 + cmp dl, 86 + jle .L1005 + jmp .L2047 +.L2039: + cmp dl, 99 + jg .L2049 + cmp dl, 98 +.L8672: + je .L2042 + jmp .L1005 +.L2049: + cmp dl, 100 + jle .L2045 + cmp dl, 119 + je .L2047 + jmp .L1005 +.L1989: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 51 + jg .L2054 + cmp dl, 47 + jg .L2055 + test dl, dl + jg .L999 + jmp .L2062 +.L2055: + cmp dl, 48 + jle .L2059 + cmp dl, 50 + jle .L999 + jmp .L2093 +.L2054: + cmp dl, 79 + jg .L2063 + cmp dl, 78 + jle .L999 + jmp .L2065 +.L2063: + cmp dl, 111 + je .L2065 + jmp .L999 +.L2062: + mov DWORD [edi], int_insn + mov DWORD [edi+4], 1 + jmp .L8695 +.L1991: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + jg .L2070 + cmp dl, 68 + je .L2072 + cmp dl, 75 + jle .L1005 + jmp .L2074 +.L2070: + cmp dl, 100 + jg .L2076 + cmp dl, 99 + jle .L1005 + jmp .L2072 +.L2076: + cmp dl, 108 + je .L2074 + jmp .L1005 +.L2072: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 985089 + jmp .L8721 +.L2074: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L2084 + cmp dl, 112 + jne .L1005 +.L2084: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 71 + je .L2087 + cmp dl, 103 + jne .L1005 +.L2087: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 118423809 +.L8721: + mov DWORD [edi+8], 8388616 + jmp .L8696 +.L2059: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 51 + je .L2093 + jmp .L1005 +.L2061: +.L2065: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 52737 + jmp .L8695 +.L2093: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 52225 + jmp .L8695 +.L2042: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 27649 + jmp .L8695 +.L2045: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2125057 + jmp .L9186 +.L2047: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1076481 + jmp .L8695 +.L1977: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L2116 + cmp dl, 108 + jne .L1005 +.L2116: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], imul_insn + mov DWORD [edi+4], 19 + jmp .L8695 +.L1974: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L2122 + cmp dl, 118 + jne .L1005 +.L2122: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], f6_insn + mov DWORD [edi+4], 1796 + jmp .L8695 +.L1971: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L2128 + cmp dl, 115 + jne .L1005 +.L2128: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ibts_insn + jmp .L8724 +.L1425: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + jg .L2133 + cmp dl, 77 + jg .L2134 + cmp dl, 66 + jle .L1005 + cmp dl, 67 + jle .L2137 + cmp dl, 68 + jmp .L8671 +.L2134: + cmp dl, 78 + jle .L2142 + cmp dl, 84 + jle .L1005 + cmp dl, 85 + jle .L2145 + jmp .L2146 +.L2133: + cmp dl, 109 + jg .L2148 + cmp dl, 98 + jle .L1005 + cmp dl, 99 + jle .L2137 + cmp dl, 100 +.L8671: + jle .L2139 + jmp .L1005 +.L2148: + cmp dl, 116 + jg .L2153 + cmp dl, 110 + jle .L2142 + jmp .L1005 +.L2153: + cmp dl, 117 + jle .L2145 + cmp dl, 118 + jle .L2146 + jmp .L1005 +.L1428: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L2159 + cmp dl, 105 + je .L2159 + jmp .L1005 +.L1431: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L2162 + cmp dl, 120 + je .L2162 + jmp .L1005 +.L1434: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 50 + cmp eax, 65 + ja .L1005 + jmp DWORD [.L2189+eax*4] + [section .rodata] + [align 4] + [align 4] +.L2189: + dd .L2166 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2169 + dd .L1005 + dd .L2172 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2175 + dd .L2178 + dd .L1005 + dd .L2181 + dd .L1005 + dd .L2184 + dd .L2187 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2169 + dd .L1005 + dd .L2172 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2175 + dd .L2178 + dd .L1005 + dd .L2181 + dd .L1005 + dd .L2184 + dd .L2187 + [section .text] +.L1437: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + jg .L2190 + cmp dl, 50 + je .L2192 + jmp .L1005 +.L2190: + cmp dl, 78 + jle .L2195 + cmp dl, 110 + je .L2195 + jmp .L1005 +.L1440: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + jg .L2197 + cmp dl, 73 + jg .L2198 + cmp dl, 65 + je .L2200 + cmp dl, 72 + jle .L1005 + jmp .L2202 +.L2198: + cmp dl, 79 + jg .L2204 + cmp dl, 78 + jle .L1005 + jmp .L2206 +.L2204: + cmp dl, 84 + jle .L1005 + cmp dl, 85 + jle .L2210 + jmp .L2211 +.L2197: + cmp dl, 110 + jg .L2213 + cmp dl, 97 + jg .L2214 + cmp dl, 96 + jle .L1005 + jmp .L2200 +.L2214: + cmp dl, 105 + je .L2202 + jmp .L1005 +.L2213: + cmp dl, 116 + jg .L2219 + cmp dl, 111 + jle .L2206 + jmp .L1005 +.L2219: + cmp dl, 117 + jle .L2210 + cmp dl, 118 + jle .L2211 + jmp .L1005 +.L1443: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L2224 + cmp dl, 80 + je .L2226 + cmp dl, 81 + jle .L1005 + jmp .L2228 +.L2224: + cmp dl, 112 + jg .L2230 + cmp dl, 111 + jle .L1005 + jmp .L2226 +.L2230: + cmp dl, 114 + je .L2228 + jmp .L1005 +.L1446: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L2235 + cmp dl, 101 + je .L2235 + jmp .L1005 +.L1449: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 54 + ja .L1005 + jmp DWORD [.L2257+eax*4] + [section .rodata] + [align 4] + [align 4] +.L2257: + dd .L2240 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2243 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2246 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2249 + dd .L1005 + dd .L1005 + dd .L2252 + dd .L1005 + dd .L2255 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2240 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2243 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2246 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2249 + dd .L1005 + dd .L1005 + dd .L2252 + dd .L1005 + dd .L2255 + [section .text] +.L1452: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L2258 + cmp dl, 78 + je .L2260 + cmp dl, 82 + jle .L1005 + jmp .L2262 +.L2258: + cmp dl, 110 + jg .L2264 + cmp dl, 109 + jle .L1005 + jmp .L2260 +.L2264: + cmp dl, 115 + je .L2262 + jmp .L1005 +.L1455: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L2269 + cmp dl, 111 + jne .L1005 +.L2269: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L2272 + cmp dl, 114 + jne .L1005 +.L2272: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 61186 + jmp .L8866 +.L2262: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 72 + je .L2278 + cmp dl, 104 + je .L2278 + jmp .L1005 +.L2260: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L2281 + cmp dl, 112 + jne .L1005 +.L2281: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L2284 + cmp dl, 99 + jne .L1005 +.L2284: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 75 + je .L2287 + cmp dl, 107 + jne .L1005 +.L2287: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + jg .L2289 + cmp dl, 72 + je .L2291 + cmp dl, 75 + jle .L1005 + jmp .L2293 +.L2289: + cmp dl, 104 + jg .L2295 + cmp dl, 103 + jle .L1005 + jmp .L2291 +.L2295: + cmp dl, 108 + je .L2293 + jmp .L1005 +.L2291: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2299 + cmp dl, 68 + jg .L2300 + cmp dl, 66 + je .L2302 + cmp dl, 67 + jmp .L8677 +.L2300: + cmp dl, 81 + je .L2307 + cmp dl, 86 + jle .L1005 + jmp .L2309 +.L2299: + cmp dl, 100 + jg .L2311 + cmp dl, 98 + je .L2302 + cmp dl, 99 +.L8677: + jle .L1005 + jmp .L2304 +.L2311: + cmp dl, 113 + jg .L2315 + cmp dl, 112 + jle .L1005 + jmp .L2307 +.L2315: + cmp dl, 119 + je .L2309 + jmp .L1005 +.L2293: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2319 + cmp dl, 68 + jg .L2320 + cmp dl, 66 + je .L2322 + cmp dl, 67 + jmp .L8676 +.L2320: + cmp dl, 81 + je .L2327 + cmp dl, 86 + jle .L1005 + jmp .L2329 +.L2319: + cmp dl, 100 + jg .L2331 + cmp dl, 98 + je .L2322 + cmp dl, 99 +.L8676: + jle .L1005 + jmp .L2324 +.L2331: + cmp dl, 113 + jg .L2335 + cmp dl, 112 + jle .L1005 + jmp .L2327 +.L2335: + cmp dl, 119 + je .L2329 + jmp .L1005 +.L2322: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L2340 + cmp dl, 119 + je .L2340 + jmp .L1005 +.L2324: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L2343 + cmp dl, 113 + je .L2343 + jmp .L1005 +.L2327: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L2346 + cmp dl, 100 + je .L2346 + jmp .L1005 +.L2329: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L2349 + cmp dl, 100 + jne .L1005 +.L2349: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 24834 + jmp .L8866 +.L2346: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L2355 + cmp dl, 113 + jne .L1005 +.L2355: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6712321 + jmp .L9151 +.L2343: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 25090 + jmp .L8866 +.L2340: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 24578 + jmp .L8866 +.L2302: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L2367 + cmp dl, 119 + je .L2367 + jmp .L1005 +.L2304: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L2370 + cmp dl, 113 + je .L2370 + jmp .L1005 +.L2307: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L2373 + cmp dl, 100 + je .L2373 + jmp .L1005 +.L2309: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L2376 + cmp dl, 100 + jne .L1005 +.L2376: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 26882 + jmp .L8866 +.L2373: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L2382 + cmp dl, 113 + jne .L1005 +.L2382: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6712577 + jmp .L9151 +.L2370: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 27138 + jmp .L8866 +.L2367: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 26626 + jmp .L8866 +.L2278: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 70 + jg .L2393 + cmp dl, 64 + jg .L2394 + test dl, dl + jg .L999 + jmp .L2401 +.L2394: + cmp dl, 65 + jle .L2398 + cmp dl, 69 + jle .L999 + jmp .L2400 +.L2393: + cmp dl, 97 + jg .L2402 + cmp dl, 96 + jle .L999 + jmp .L2398 +.L2402: + cmp dl, 102 + je .L2400 + jmp .L999 +.L2401: + mov DWORD [edi], push_insn + mov DWORD [edi+4], 28 + jmp .L8695 +.L2398: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2408 + cmp dl, 67 + jg .L2409 + test dl, dl + jg .L999 + jmp .L2416 +.L2409: + cmp dl, 68 + jle .L2413 + cmp dl, 86 + jle .L999 + jmp .L2415 +.L2408: + cmp dl, 100 + jg .L2417 + cmp dl, 99 + jle .L999 + jmp .L2413 +.L2417: + cmp dl, 119 + je .L2415 + jmp .L999 +.L2416: + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 24577 + jmp .L8857 +.L2400: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2426 + cmp dl, 68 + jg .L2427 + test dl, dl + jle .L2429 + cmp dl, 67 + jle .L999 + jmp .L2431 +.L2427: + cmp dl, 81 + je .L2434 + cmp dl, 86 + jle .L999 + jmp .L2436 +.L2426: + cmp dl, 112 + jg .L2438 + cmp dl, 100 + je .L2431 + jmp .L999 +.L2438: + cmp dl, 113 + jle .L2434 + cmp dl, 119 + je .L2436 + jmp .L999 +.L2429: + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 39937 + jmp .L8695 +.L2431: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2137089 + jmp .L9186 +.L2434: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4234241 + jmp .L9148 +.L2436: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1088513 + jmp .L8695 +.L2413: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2121729 + jmp .L9186 +.L2415: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1073153 + jmp .L8857 +.L2246: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L2468 + cmp dl, 108 + je .L2468 + jmp .L1005 +.L2249: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + jg .L2470 + cmp dl, 65 + je .L2472 + cmp dl, 75 + jle .L1005 + jmp .L2474 +.L2470: + cmp dl, 97 + jg .L2476 + cmp dl, 96 + jle .L1005 + jmp .L2472 +.L2476: + cmp dl, 108 + je .L2474 + jmp .L1005 +.L2252: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L2481 + cmp dl, 98 + je .L2481 + jmp .L1005 +.L2240: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L2484 + cmp dl, 100 + je .L2484 + jmp .L1005 +.L2243: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + je .L2487 + cmp dl, 117 + je .L2487 + jmp .L1005 +.L2255: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L2490 + cmp dl, 97 + jne .L1005 +.L2490: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L2493 + cmp dl, 112 + jne .L1005 +.L2493: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L2496 + cmp dl, 100 + jne .L1005 +.L2496: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 47873 + jmp .L8812 +.L2487: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 70 + je .L2502 + cmp dl, 102 + jne .L1005 +.L2502: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2504 + cmp dl, 72 + jg .L2505 + cmp dl, 68 + je .L2507 + cmp dl, 71 + jmp .L8678 +.L2505: + cmp dl, 76 + je .L2512 + cmp dl, 86 + jle .L1005 + jmp .L2514 +.L2504: + cmp dl, 104 + jg .L2516 + cmp dl, 100 + je .L2507 + cmp dl, 103 +.L8678: + jle .L1005 + jmp .L2509 +.L2516: + cmp dl, 108 + jg .L2520 + cmp dl, 107 + jle .L1005 + jmp .L2512 +.L2520: + cmp dl, 119 + je .L2514 + jmp .L1005 +.L2507: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssessimm_insn + mov DWORD [edi+4], 6713345 + jmp .L9151 +.L2509: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L2528 + cmp dl, 119 + je .L2528 + jmp .L1005 +.L2512: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L2531 + cmp dl, 119 + je .L2531 + jmp .L1005 +.L2514: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pshufw_insn + jmp .L9240 +.L2531: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssessimm_insn + mov DWORD [edi+4], 15888385 + jmp .L9151 +.L2528: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssessimm_insn + mov DWORD [edi+4], 15953921 + jmp .L9151 +.L2484: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L2543 + cmp dl, 98 + jne .L1005 +.L2543: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L2546 + cmp dl, 119 + jne .L1005 +.L2546: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 62978 + jmp .L8825 +.L2481: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 66 + cmp eax, 53 + ja .L1005 + jmp DWORD [.L2571+eax*4] + [section .rodata] + [align 4] + [align 4] +.L2571: + dd .L2554 + dd .L1005 + dd .L2557 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2560 + dd .L1005 + dd .L2563 + dd .L1005 + dd .L2566 + dd .L1005 + dd .L2569 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2554 + dd .L1005 + dd .L2557 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L2560 + dd .L1005 + dd .L2563 + dd .L1005 + dd .L2566 + dd .L1005 + dd .L2569 + [section .text] +.L2554: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 63490 + jmp .L8866 +.L2569: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 63746 + jmp .L8866 +.L2557: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 64002 + jmp .L8866 +.L2560: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 64258 + jmp .L8866 +.L2563: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2584 + cmp dl, 72 + jg .L2585 + cmp dl, 66 + jmp .L8670 +.L2585: + cmp dl, 73 + jle .L2590 + cmp dl, 86 + jle .L1005 + jmp .L2592 +.L2584: + cmp dl, 104 + jg .L2594 + cmp dl, 98 +.L8670: + je .L2587 + jmp .L1005 +.L2594: + cmp dl, 105 + jle .L2590 + cmp dl, 119 + je .L2592 + jmp .L1005 +.L2566: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L2600 + cmp dl, 115 + jne .L1005 +.L2600: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2602 + cmp dl, 66 + je .L2604 + cmp dl, 86 + jle .L1005 + jmp .L2606 +.L2602: + cmp dl, 98 + jg .L2608 + cmp dl, 97 + jle .L1005 + jmp .L2604 +.L2608: + cmp dl, 119 + je .L2606 + jmp .L1005 +.L2604: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 55298 + jmp .L8866 +.L2606: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 55554 + jmp .L8866 +.L2587: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 59394 + jmp .L8866 +.L2590: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L2622 + cmp dl, 119 + je .L2622 + jmp .L1005 +.L2592: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 59650 + jmp .L8866 +.L2622: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 21761 + jmp .L8827 +.L2472: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2630 + cmp dl, 68 + je .L2632 + cmp dl, 86 + jle .L1005 + jmp .L2634 +.L2630: + cmp dl, 100 + jg .L2636 + cmp dl, 99 + jle .L1005 + jmp .L2632 +.L2636: + cmp dl, 119 + je .L2634 + jmp .L1005 +.L2474: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2640 + cmp dl, 80 + jg .L2641 + cmp dl, 68 + jmp .L8669 +.L2641: + cmp dl, 81 + jle .L2646 + cmp dl, 86 + jle .L1005 + jmp .L2648 +.L2640: + cmp dl, 112 + jg .L2649 + cmp dl, 100 +.L8669: + je .L2643 + jmp .L1005 +.L2649: + cmp dl, 113 + jle .L2646 + cmp dl, 119 + jne .L1005 +.L2648: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pshift_insn + mov DWORD [edi+4], 41013508 + jmp .L8866 +.L2643: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + jg .L2657 + test dl, dl + jle .L2659 + cmp dl, 80 + jle .L999 + jmp .L2661 +.L2657: + cmp dl, 113 + je .L2661 + jmp .L999 +.L2659: + mov DWORD [edi], pshift_insn + mov DWORD [edi+4], 41079300 + jmp .L8866 +.L2646: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pshift_insn + mov DWORD [edi+4], 41145092 + jmp .L8866 +.L2661: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pslrldq_insn + mov DWORD [edi+4], 769 + jmp .L9151 +.L2634: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pshift_insn + mov DWORD [edi+4], 74572036 + jmp .L8866 +.L2632: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pshift_insn + mov DWORD [edi+4], 74637828 + jmp .L8866 +.L2468: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2678 + cmp dl, 80 + jg .L2679 + cmp dl, 68 + jmp .L8668 +.L2679: + cmp dl, 81 + jle .L2684 + cmp dl, 86 + jle .L1005 + jmp .L2686 +.L2678: + cmp dl, 112 + jg .L2687 + cmp dl, 100 +.L8668: + je .L2681 + jmp .L1005 +.L2687: + cmp dl, 113 + jle .L2684 + cmp dl, 119 + jne .L1005 +.L2686: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pshift_insn + mov DWORD [edi+4], 108130564 + jmp .L8866 +.L2681: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + jg .L2695 + test dl, dl + jle .L2697 + cmp dl, 80 + jle .L999 + jmp .L2699 +.L2695: + cmp dl, 113 + je .L2699 + jmp .L999 +.L2697: + mov DWORD [edi], pshift_insn + mov DWORD [edi+4], 108196356 + jmp .L8866 +.L2684: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pshift_insn + mov DWORD [edi+4], 108262148 + jmp .L8866 +.L2699: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pslrldq_insn + mov DWORD [edi+4], 1793 + jmp .L9151 +.L2235: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 70 + je .L2711 + cmp dl, 102 + jne .L1005 +.L2711: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L2714 + cmp dl, 101 + jne .L1005 +.L2714: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L2717 + cmp dl, 116 + jne .L1005 +.L2717: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L2720 + cmp dl, 99 + jne .L1005 +.L2720: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 72 + je .L2723 + cmp dl, 104 + jne .L1005 +.L2723: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2725 + cmp dl, 78 + jg .L2726 + test dl, dl + jle .L2728 + cmp dl, 77 + jle .L999 + jmp .L2730 +.L2726: + cmp dl, 84 + je .L2733 + cmp dl, 86 + jle .L999 + jmp .L2735 +.L2725: + cmp dl, 115 + jg .L2737 + cmp dl, 110 + je .L2730 + jmp .L999 +.L2737: + cmp dl, 116 + jle .L2733 + cmp dl, 119 + je .L2735 + jmp .L999 +.L2728: + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 986369 + jmp .L8826 +.L2730: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L2745 + cmp dl, 116 + je .L2745 + jmp .L1005 +.L2733: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 47 + jle .L1005 + cmp dl, 48 + jle .L2749 + cmp dl, 49 + jle .L2751 + cmp dl, 50 + jle .L2753 + jmp .L1005 +.L2735: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 17763585 + jmp .L8826 +.L2749: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 17766401 + jmp .L9024 +.L2751: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 34543617 + jmp .L9024 +.L2753: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 51320833 + jmp .L9024 +.L2745: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L2767 + cmp dl, 97 + jne .L1005 +.L2767: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 989185 + jmp .L9024 +.L2226: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 70 + jg .L2772 + cmp dl, 64 + jg .L2773 + test dl, dl + jg .L999 + jmp .L2780 +.L2773: + cmp dl, 65 + jle .L2777 + cmp dl, 69 + jle .L999 + jmp .L2779 +.L2772: + cmp dl, 97 + jg .L2781 + cmp dl, 96 + jle .L999 + jmp .L2777 +.L2781: + cmp dl, 102 + je .L2779 + jmp .L999 +.L2780: + mov DWORD [edi], pop_insn +.L9226: + mov DWORD [edi+4], 21 + jmp .L8695 +.L2228: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 60162 + jmp .L8866 +.L2777: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2790 + cmp dl, 67 + jg .L2791 + test dl, dl + jg .L999 + jmp .L2798 +.L2791: + cmp dl, 68 + jle .L2795 + cmp dl, 86 + jle .L999 + jmp .L2797 +.L2790: + cmp dl, 100 + jg .L2799 + cmp dl, 99 + jle .L999 + jmp .L2795 +.L2799: + cmp dl, 119 + je .L2797 + jmp .L999 +.L2798: + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 24833 + jmp .L8857 +.L2779: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2808 + cmp dl, 68 + jg .L2809 + test dl, dl + jle .L2811 + cmp dl, 67 + jle .L999 + jmp .L2813 +.L2809: + cmp dl, 81 + je .L2816 + cmp dl, 86 + jle .L999 + jmp .L2818 +.L2808: + cmp dl, 112 + jg .L2820 + cmp dl, 100 + je .L2813 + jmp .L999 +.L2820: + cmp dl, 113 + jle .L2816 + cmp dl, 119 + je .L2818 + jmp .L999 +.L2811: + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 40193 + jmp .L8695 +.L2813: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2137345 + jmp .L9186 +.L2818: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1088769 + jmp .L8695 +.L2816: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4234497 + jmp .L9148 +.L2795: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2121985 + jmp .L9186 +.L2797: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1073409 + jmp .L8857 +.L2200: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + jg .L2849 + cmp dl, 68 + jg .L2850 + cmp dl, 66 + jle .L1005 + cmp dl, 67 + jle .L2853 + jmp .L2854 +.L2850: + cmp dl, 71 + je .L2857 + cmp dl, 87 + jle .L1005 + jmp .L2859 +.L2849: + cmp dl, 102 + jg .L2861 + cmp dl, 98 + jle .L1005 + cmp dl, 99 + jle .L2853 + cmp dl, 100 + jle .L2854 + jmp .L1005 +.L2861: + cmp dl, 103 + jle .L2857 + cmp dl, 120 + je .L2859 + jmp .L1005 +.L2210: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L2869 + cmp dl, 108 + je .L2869 + jmp .L1005 +.L2202: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L2872 + cmp dl, 110 + je .L2872 + jmp .L1005 +.L2206: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L2875 + cmp dl, 118 + je .L2875 + jmp .L1005 +.L2211: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + jg .L2877 + cmp dl, 76 + jg .L2878 + cmp dl, 71 + je .L2880 + cmp dl, 75 + jmp .L8679 +.L2878: + cmp dl, 78 + je .L2885 + cmp dl, 89 + jle .L1005 + jmp .L2887 +.L2877: + cmp dl, 108 + jg .L2889 + cmp dl, 103 + je .L2880 + cmp dl, 107 +.L8679: + jle .L1005 + jmp .L2882 +.L2889: + cmp dl, 110 + jg .L2893 + cmp dl, 109 + jle .L1005 + jmp .L2885 +.L2893: + cmp dl, 122 + je .L2887 + jmp .L1005 +.L2880: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L2898 + cmp dl, 101 + je .L2898 + jmp .L1005 +.L2882: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + je .L2901 + cmp dl, 122 + je .L2901 + jmp .L1005 +.L2885: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + je .L2904 + cmp dl, 122 + je .L2904 + jmp .L1005 +.L2887: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L2907 + cmp dl, 98 + jne .L1005 +.L2907: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 22529 + jmp .L8827 +.L2904: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L2913 + cmp dl, 98 + jne .L1005 +.L2913: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 23041 + jmp .L8827 +.L2901: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L2919 + cmp dl, 98 + jne .L1005 +.L2919: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 23297 + jmp .L8827 +.L2898: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + je .L2925 + cmp dl, 122 + jne .L1005 +.L2925: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L2928 + cmp dl, 98 + jne .L1005 +.L2928: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 23553 + jmp .L8827 +.L2875: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L2934 + cmp dl, 109 + jne .L1005 +.L2934: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L2937 + cmp dl, 115 + jne .L1005 +.L2937: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 75 + je .L2940 + cmp dl, 107 + jne .L1005 +.L2940: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L2943 + cmp dl, 98 + jne .L1005 +.L2943: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pmovmskb_insn + mov DWORD [edi+4], 2 + jmp .L9152 +.L2872: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + jg .L2948 + cmp dl, 83 + je .L2950 + cmp dl, 84 + jle .L1005 + jmp .L2952 +.L2948: + cmp dl, 115 + jg .L2954 + cmp dl, 114 + jle .L1005 + jmp .L2950 +.L2954: + cmp dl, 117 + je .L2952 + jmp .L1005 +.L2950: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L2959 + cmp dl, 119 + je .L2959 + jmp .L1005 +.L2952: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L2962 + cmp dl, 98 + jne .L1005 +.L2962: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 55810 + jmp .L8825 +.L2959: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 59906 + jmp .L8825 +.L2869: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + jg .L2970 + cmp dl, 75 + jg .L2971 + cmp dl, 72 + jmp .L8680 +.L2971: + cmp dl, 76 + jle .L2975 + cmp dl, 84 + jle .L1005 + jmp .L2977 +.L2970: + cmp dl, 107 + jg .L2979 + cmp dl, 104 +.L8680: + jne .L1005 + jmp .L2978 +.L2979: + cmp dl, 108 + jle .L2975 + cmp dl, 117 + je .L2977 + jmp .L1005 +.L2978: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L2984 + cmp dl, 84 + jg .L2985 + cmp dl, 82 + jmp .L8667 +.L2985: + cmp dl, 85 + jle .L2990 + cmp dl, 86 + jle .L1005 + jmp .L2992 +.L2984: + cmp dl, 116 + jg .L2994 + cmp dl, 114 +.L8667: + je .L2987 + jmp .L1005 +.L2994: + cmp dl, 117 + jle .L2990 + cmp dl, 119 + je .L2992 + jmp .L1005 +.L2975: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3000 + cmp dl, 119 + je .L3000 + jmp .L1005 +.L2977: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L3003 + cmp dl, 100 + jne .L1005 +.L3003: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L3006 + cmp dl, 113 + jne .L1005 +.L3006: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 62466 + jmp .L9151 +.L3000: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 54530 + jmp .L8866 +.L2987: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3014 + cmp dl, 73 + je .L3016 + cmp dl, 86 + jle .L1005 + jmp .L3018 +.L3014: + cmp dl, 105 + jg .L3020 + cmp dl, 104 + jle .L1005 + jmp .L3016 +.L3020: + cmp dl, 119 + je .L3018 + jmp .L1005 +.L2990: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3025 + cmp dl, 119 + je .L3025 + jmp .L1005 +.L2992: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 58626 + jmp .L8866 +.L3025: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 58370 + jmp .L8825 +.L3018: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + jg .L3033 + cmp dl, 65 + je .L3035 + cmp dl, 66 + jle .L1005 + jmp .L3037 +.L3033: + cmp dl, 97 + jg .L3039 + cmp dl, 96 + jle .L1005 + jmp .L3035 +.L3039: + cmp dl, 99 + je .L3037 + jmp .L1005 +.L3016: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3044 + cmp dl, 119 + jne .L1005 +.L3044: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 23809 + jmp .L8827 +.L3035: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 46849 + jmp .L8826 +.L3037: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 22785 + jmp .L8827 +.L2853: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 72 + je .L3056 + cmp dl, 104 + je .L3056 + jmp .L1005 +.L2854: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L3059 + cmp dl, 100 + je .L3059 + jmp .L1005 +.L2857: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3062 + cmp dl, 119 + je .L3062 + jmp .L1005 +.L2859: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + jg .L3064 + cmp dl, 83 + je .L3066 + cmp dl, 84 + jle .L1005 + jmp .L3068 +.L3064: + cmp dl, 115 + jg .L3070 + cmp dl, 114 + jle .L1005 + jmp .L3066 +.L3070: + cmp dl, 117 + je .L3068 + jmp .L1005 +.L3066: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3075 + cmp dl, 119 + je .L3075 + jmp .L1005 +.L3068: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L3078 + cmp dl, 98 + jne .L1005 +.L3078: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 56834 + jmp .L8825 +.L3075: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 60930 + jmp .L8825 +.L3062: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 20993 + jmp .L8827 +.L3059: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3090 + cmp dl, 119 + jne .L1005 +.L3090: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L3093 + cmp dl, 100 + jne .L1005 +.L3093: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 62722 + jmp .L8866 +.L3056: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L3099 + cmp dl, 114 + jne .L1005 +.L3099: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L3102 + cmp dl, 105 + jne .L1005 +.L3102: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3105 + cmp dl, 119 + jne .L1005 +.L3105: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pmachriw_insn + mov DWORD [edi+4], 1 + jmp .L8827 +.L2195: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L3111 + cmp dl, 115 + je .L3111 + jmp .L1005 +.L2192: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 70 + je .L3114 + cmp dl, 102 + jne .L1005 +.L3114: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3116 + cmp dl, 68 + je .L3118 + cmp dl, 86 + jle .L1005 + jmp .L3120 +.L3116: + cmp dl, 100 + jg .L3122 + cmp dl, 99 + jle .L1005 + jmp .L3118 +.L3122: + cmp dl, 119 + je .L3120 + jmp .L1005 +.L3118: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 3329 + jmp .L8826 +.L3120: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 3073 + jmp .L8812 +.L3111: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L3133 + cmp dl, 114 + jne .L1005 +.L3133: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3136 + cmp dl, 119 + jne .L1005 +.L3136: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pinsrw_insn + mov DWORD [edi+4], 4 + jmp .L8825 +.L2166: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L3142 + cmp dl, 105 + je .L3142 + jmp .L1005 +.L2169: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + jg .L3144 + cmp dl, 66 + jle .L1005 + cmp dl, 67 + jle .L3147 + jmp .L3148 +.L3144: + cmp dl, 98 + jle .L1005 + cmp dl, 99 + jle .L3147 + cmp dl, 100 + jle .L3148 + jmp .L1005 +.L2172: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L3154 + cmp dl, 109 + je .L3154 + jmp .L1005 +.L2175: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + jg .L3156 + cmp dl, 72 + jg .L3157 + cmp dl, 65 + jmp .L8666 +.L3157: + cmp dl, 73 + jle .L3162 + cmp dl, 84 + jle .L1005 + jmp .L3164 +.L3156: + cmp dl, 104 + jg .L3166 + cmp dl, 97 +.L8666: + je .L3159 + jmp .L1005 +.L3166: + cmp dl, 105 + jle .L3162 + cmp dl, 117 + je .L3164 + jmp .L1005 +.L2178: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L3172 + cmp dl, 97 + je .L3172 + jmp .L1005 +.L2181: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L3175 + cmp dl, 110 + je .L3175 + jmp .L1005 +.L2184: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L3177 + cmp dl, 67 + je .L3179 + cmp dl, 82 + jle .L1005 + jmp .L3181 +.L3177: + cmp dl, 99 + jg .L3183 + cmp dl, 98 + jle .L1005 + jmp .L3179 +.L3183: + cmp dl, 115 + je .L3181 + jmp .L1005 +.L2187: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + je .L3188 + cmp dl, 117 + jne .L1005 +.L3188: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L3191 + cmp dl, 98 + jne .L1005 +.L3191: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L3193 + test dl, dl + jle .L3195 + cmp dl, 81 + jle .L999 + jmp .L3197 +.L3193: + cmp dl, 114 + je .L3197 + jmp .L999 +.L3195: + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 39425 + jmp .L8826 +.L3197: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 43521 + jmp .L8826 +.L3179: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L3206 + cmp dl, 112 + je .L3206 + jmp .L1005 +.L3181: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L3209 + cmp dl, 113 + jne .L1005 +.L3209: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L3211 + cmp dl, 73 + je .L3213 + cmp dl, 81 + jle .L1005 + jmp .L3215 +.L3211: + cmp dl, 105 + jg .L3217 + cmp dl, 104 + jle .L1005 + jmp .L3213 +.L3217: + cmp dl, 114 + je .L3215 + jmp .L1005 +.L3213: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L3222 + cmp dl, 116 + je .L3222 + jmp .L1005 +.L3215: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L3225 + cmp dl, 116 + jne .L1005 +.L3225: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 38657 + jmp .L8826 +.L3222: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 49 + jne .L1005 + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 42753 + jmp .L8826 +.L3206: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + jg .L3234 + test dl, dl + jle .L3236 + cmp dl, 72 + jle .L999 + jmp .L3238 +.L3234: + cmp dl, 105 + je .L3238 + jmp .L999 +.L3236: + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 38401 + jmp .L8826 +.L3238: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L3244 + cmp dl, 116 + jne .L1005 +.L3244: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 48 + jle .L1005 + cmp dl, 49 + jle .L3248 + cmp dl, 50 + jle .L3250 + jmp .L1005 +.L3248: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 42497 + jmp .L8826 +.L3250: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 46593 + jmp .L8826 +.L3175: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L3258 + cmp dl, 97 + jne .L1005 +.L3258: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L3261 + cmp dl, 99 + jne .L1005 +.L3261: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L3264 + cmp dl, 99 + jne .L1005 +.L3264: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 36353 + jmp .L8812 +.L3172: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L3270 + cmp dl, 99 + jne .L1005 +.L3270: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L3273 + cmp dl, 99 + jne .L1005 +.L3273: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 35329 + jmp .L8812 +.L3159: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L3279 + cmp dl, 120 + je .L3279 + jmp .L1005 +.L3162: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L3282 + cmp dl, 110 + je .L3282 + jmp .L1005 +.L3164: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L3285 + cmp dl, 108 + jne .L1005 +.L3285: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 46081 + jmp .L8826 +.L3282: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 37889 + jmp .L8826 +.L3279: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 41985 + jmp .L8826 +.L3154: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L3297 + cmp dl, 112 + jne .L1005 +.L3297: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 71 + jg .L3299 + cmp dl, 69 + je .L3301 + cmp dl, 70 + jle .L1005 + jmp .L3303 +.L3299: + cmp dl, 101 + jg .L3305 + cmp dl, 100 + jle .L1005 + jmp .L3301 +.L3305: + cmp dl, 103 + je .L3303 + jmp .L1005 +.L3301: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L3310 + cmp dl, 113 + je .L3310 + jmp .L1005 +.L3303: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L3312 + cmp dl, 69 + je .L3314 + cmp dl, 83 + jle .L1005 + jmp .L3316 +.L3312: + cmp dl, 101 + jg .L3318 + cmp dl, 100 + jle .L1005 + jmp .L3314 +.L3318: + cmp dl, 116 + je .L3316 + jmp .L1005 +.L3314: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 36865 + jmp .L8826 +.L3316: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 40961 + jmp .L8826 +.L3310: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 45057 + jmp .L8826 +.L3147: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L3332 + cmp dl, 99 + je .L3332 + jmp .L1005 +.L3148: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L3335 + cmp dl, 100 + jne .L1005 +.L3335: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 40449 + jmp .L8826 +.L3332: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 44545 + jmp .L8826 +.L3142: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3343 + cmp dl, 68 + je .L3345 + cmp dl, 86 + jle .L1005 + jmp .L3347 +.L3343: + cmp dl, 100 + jg .L3349 + cmp dl, 99 + jle .L1005 + jmp .L3345 +.L3349: + cmp dl, 119 + je .L3347 + jmp .L1005 +.L3345: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 7425 + jmp .L8826 +.L3347: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 7169 +.L8812: + mov DWORD [edi+8], 66560 + jmp .L8696 +.L2162: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L3360 + cmp dl, 116 + jne .L1005 +.L3360: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L3363 + cmp dl, 114 + jne .L1005 +.L3363: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3366 + cmp dl, 119 + jne .L1005 +.L3366: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], pextrw_insn + mov DWORD [edi+4], 2 + jmp .L8825 +.L2159: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L3372 + cmp dl, 115 + jne .L1005 +.L3372: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L3375 + cmp dl, 116 + jne .L1005 +.L3375: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L3378 + cmp dl, 105 + jne .L1005 +.L3378: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L3381 + cmp dl, 98 + jne .L1005 +.L3381: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 21505 + jmp .L8827 +.L2145: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L3387 + cmp dl, 115 + je .L3387 + jmp .L1005 +.L2137: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + jg .L3389 + cmp dl, 75 + je .L3391 + cmp dl, 76 + jle .L1005 + jmp .L3393 +.L3389: + cmp dl, 107 + jg .L3395 + cmp dl, 106 + jle .L1005 + jmp .L3391 +.L3395: + cmp dl, 109 + je .L3393 + jmp .L1005 +.L2139: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L3400 + cmp dl, 100 + je .L3400 + jmp .L1005 +.L2142: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L3403 + cmp dl, 100 + je .L3403 + jmp .L1005 +.L2146: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 71 + jg .L3405 + cmp dl, 69 + je .L3407 + cmp dl, 70 + jle .L1005 + jmp .L3409 +.L3405: + cmp dl, 101 + jg .L3411 + cmp dl, 100 + jle .L1005 + jmp .L3407 +.L3411: + cmp dl, 103 + je .L3409 + jmp .L1005 +.L3407: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L3416 + cmp dl, 98 + je .L3416 + jmp .L1005 +.L3409: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3418 + cmp dl, 84 + jg .L3419 + cmp dl, 66 + jmp .L8681 +.L3419: + cmp dl, 85 + jle .L3423 + cmp dl, 86 + jle .L1005 + jmp .L3425 +.L3418: + cmp dl, 116 + jg .L3427 + cmp dl, 98 +.L8681: + jne .L1005 + jmp .L3426 +.L3427: + cmp dl, 117 + jle .L3423 + cmp dl, 119 + je .L3425 + jmp .L1005 +.L3426: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 57346 + jmp .L8825 +.L3425: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 58114 + jmp .L8825 +.L3423: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L3439 + cmp dl, 115 + jne .L1005 +.L3439: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L3442 + cmp dl, 98 + jne .L1005 +.L3442: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], now3d_insn + mov DWORD [edi+4], 48897 + jmp .L8826 +.L3416: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 20481 + jmp .L8827 +.L3403: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + jg .L3450 + test dl, dl + jle .L3452 + cmp dl, 77 + jle .L999 + jmp .L3454 +.L3450: + cmp dl, 110 + je .L3454 + jmp .L999 +.L3452: + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 56066 + jmp .L8866 +.L3454: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 57090 + jmp .L8866 +.L3400: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 66 + cmp eax, 53 + ja .L1005 + jmp DWORD [.L3482+eax*4] + [section .rodata] + [align 4] + [align 4] +.L3482: + dd .L3465 + dd .L1005 + dd .L3468 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L3471 + dd .L1005 + dd .L3474 + dd .L1005 + dd .L3477 + dd .L1005 + dd .L3480 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L3465 + dd .L1005 + dd .L3468 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L3471 + dd .L1005 + dd .L3474 + dd .L1005 + dd .L3477 + dd .L1005 + dd .L3480 + [section .text] +.L3465: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 64514 + jmp .L8866 +.L3480: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 64770 + jmp .L8866 +.L3468: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 65026 + jmp .L8866 +.L3471: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 54274 + jmp .L8866 +.L3474: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3495 + cmp dl, 72 + jg .L3496 + cmp dl, 66 + jmp .L8665 +.L3496: + cmp dl, 73 + jle .L3501 + cmp dl, 86 + jle .L1005 + jmp .L3503 +.L3495: + cmp dl, 104 + jg .L3505 + cmp dl, 98 +.L8665: + je .L3498 + jmp .L1005 +.L3505: + cmp dl, 105 + jle .L3501 + cmp dl, 119 + je .L3503 + jmp .L1005 +.L3477: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L3511 + cmp dl, 115 + jne .L1005 +.L3511: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3513 + cmp dl, 66 + je .L3515 + cmp dl, 86 + jle .L1005 + jmp .L3517 +.L3513: + cmp dl, 98 + jg .L3519 + cmp dl, 97 + jle .L1005 + jmp .L3515 +.L3519: + cmp dl, 119 + je .L3517 + jmp .L1005 +.L3515: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 56322 + jmp .L8866 +.L3517: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 56578 + jmp .L8866 +.L3498: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 60418 + jmp .L8866 +.L3501: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3533 + cmp dl, 119 + je .L3533 + jmp .L1005 +.L3503: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 60674 + jmp .L8866 +.L3533: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixmmx_insn + mov DWORD [edi+4], 20737 +.L8827: + mov DWORD [edi+8], 139264 + jmp .L8696 +.L3391: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + jg .L3541 + cmp dl, 83 + je .L3543 + cmp dl, 84 + jle .L1005 + jmp .L3545 +.L3541: + cmp dl, 115 + jg .L3547 + cmp dl, 114 + jle .L1005 + jmp .L3543 +.L3547: + cmp dl, 117 + je .L3545 + jmp .L1005 +.L3393: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L3552 + cmp dl, 112 + jne .L1005 +.L3552: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 71 + jg .L3554 + cmp dl, 69 + je .L3556 + cmp dl, 70 + jle .L1005 + jmp .L3558 +.L3554: + cmp dl, 101 + jg .L3560 + cmp dl, 100 + jle .L1005 + jmp .L3556 +.L3560: + cmp dl, 103 + je .L3558 + jmp .L1005 +.L3556: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L3565 + cmp dl, 113 + je .L3565 + jmp .L1005 +.L3558: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L3568 + cmp dl, 116 + jne .L1005 +.L3568: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3570 + cmp dl, 67 + jg .L3571 + cmp dl, 66 + jmp .L8682 +.L3571: + cmp dl, 68 + jle .L3575 + cmp dl, 86 + jle .L1005 + jmp .L3577 +.L3570: + cmp dl, 99 + jg .L3579 + cmp dl, 98 +.L8682: + jne .L1005 + jmp .L3578 +.L3579: + cmp dl, 100 + jle .L3575 + cmp dl, 119 + je .L3577 + jmp .L1005 +.L3578: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 25602 + jmp .L8866 +.L3575: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 26114 + jmp .L8866 +.L3577: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 25858 + jmp .L8866 +.L3565: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3593 + cmp dl, 67 + jg .L3594 + cmp dl, 66 + jmp .L8683 +.L3594: + cmp dl, 68 + jle .L3598 + cmp dl, 86 + jle .L1005 + jmp .L3600 +.L3593: + cmp dl, 99 + jg .L3602 + cmp dl, 98 +.L8683: + jne .L1005 + jmp .L3601 +.L3602: + cmp dl, 100 + jle .L3598 + cmp dl, 119 + je .L3600 + jmp .L1005 +.L3601: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 29698 + jmp .L8866 +.L3598: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 30210 + jmp .L8866 +.L3600: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 29954 + jmp .L8866 +.L3543: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L3617 + cmp dl, 115 + je .L3617 + jmp .L1005 +.L3545: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L3620 + cmp dl, 115 + jne .L1005 +.L3620: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3623 + cmp dl, 119 + jne .L1005 +.L3623: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L3626 + cmp dl, 98 + jne .L1005 +.L3626: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 26370 + jmp .L8866 +.L3617: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3631 + cmp dl, 68 + je .L3633 + cmp dl, 86 + jle .L1005 + jmp .L3635 +.L3631: + cmp dl, 100 + jg .L3637 + cmp dl, 99 + jle .L1005 + jmp .L3633 +.L3637: + cmp dl, 119 + je .L3635 + jmp .L1005 +.L3633: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L3642 + cmp dl, 119 + je .L3642 + jmp .L1005 +.L3635: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L3645 + cmp dl, 98 + jne .L1005 +.L3645: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 25346 + jmp .L8866 +.L3642: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], mmxsse2_insn + mov DWORD [edi+4], 27394 + jmp .L8866 +.L3387: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L3654 + cmp dl, 101 + jne .L1005 +.L3654: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 15962113 + jmp .L8847 +.L1420: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 25861 + jmp .L8700 +.L1398: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 23 + jmp .L8699 +.L1401: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 19 + jmp .L8699 +.L1404: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + je .L3663 + cmp dl, 117 + je .L3663 + jmp .L1005 +.L1407: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + jg .L3665 + test dl, dl + jle .L3667 + cmp dl, 75 + jle .L999 + jmp .L3669 +.L3665: + cmp dl, 108 + je .L3669 + jmp .L999 +.L3667: + mov DWORD [edi], 53 + jmp .L8699 +.L1410: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L3672 + cmp dl, 81 + jg .L3673 + cmp dl, 70 + jmp .L8664 +.L3673: + cmp dl, 82 + jle .L3678 + cmp dl, 86 + jle .L1005 + jmp .L3680 +.L3672: + cmp dl, 113 + jg .L3682 + cmp dl, 102 +.L8664: + je .L3675 + jmp .L1005 +.L3682: + cmp dl, 114 + jle .L3678 + cmp dl, 119 + je .L3680 + jmp .L1005 +.L1413: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L3687 + cmp dl, 67 + jg .L3688 + test dl, dl + jle .L3690 + cmp dl, 66 + jle .L999 + jmp .L3692 +.L3688: + cmp dl, 81 + jle .L999 + cmp dl, 82 + jle .L3696 + jmp .L3697 +.L3687: + cmp dl, 113 + jg .L3699 + cmp dl, 99 + je .L3692 + jmp .L999 +.L3699: + cmp dl, 114 + jle .L3696 + cmp dl, 115 + jle .L3697 + jmp .L999 +.L3690: + mov DWORD [edi], bittest_insn + mov DWORD [edi+4], 303878 + jmp .L9186 +.L1416: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 51 + jmp .L8699 +.L3692: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], bittest_insn + mov DWORD [edi+4], 506630 + jmp .L9186 +.L3696: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], bittest_insn + mov DWORD [edi+4], 439046 + jmp .L9186 +.L3697: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], bittest_insn + mov DWORD [edi+4], 371462 + jmp .L9186 +.L3675: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], bsfr_insn + mov DWORD [edi+4], 48131 + jmp .L9186 +.L3678: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], bsfr_insn + mov DWORD [edi+4], 48387 + jmp .L9186 +.L3680: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L3723 + cmp dl, 97 + jne .L1005 +.L3723: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L3726 + cmp dl, 112 + jne .L1005 +.L3726: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], bswap_insn + mov DWORD [edi+4], 2 + jmp .L8930 +.L3669: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 37 + jmp .L8699 +.L3663: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L3734 + cmp dl, 110 + jne .L1005 +.L3734: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L3737 + cmp dl, 100 + jne .L1005 +.L3737: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], bound_insn + mov DWORD [edi+4], 2 + jmp .L8857 +.L1374: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L3746 + cmp dl, 120 + je .L3746 + jmp .L1005 +.L1377: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + jg .L3748 + cmp dl, 80 + je .L3750 + cmp dl, 87 + jle .L1005 + jmp .L3752 +.L3748: + cmp dl, 112 + jg .L3754 + cmp dl, 111 + jle .L1005 + jmp .L3750 +.L3754: + cmp dl, 120 + je .L3752 + jmp .L1005 +.L1380: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L3759 + cmp dl, 120 + je .L3759 + jmp .L1005 +.L1383: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + jg .L3761 + cmp dl, 73 + je .L3763 + cmp dl, 87 + jle .L1005 + jmp .L3765 +.L3761: + cmp dl, 105 + jg .L3767 + cmp dl, 104 + jle .L1005 + jmp .L3763 +.L3767: + cmp dl, 120 + je .L3765 + jmp .L1005 +.L1386: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L3772 + cmp dl, 109 + je .L3772 + jmp .L1005 +.L1389: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L3775 + cmp dl, 116 + je .L3775 + jmp .L1005 +.L1392: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L3777 + cmp dl, 72 + jg .L3778 + test dl, dl + jg .L999 + jmp .L3785 +.L3778: + cmp dl, 73 + jle .L3782 + cmp dl, 79 + jle .L999 + jmp .L3784 +.L3777: + cmp dl, 105 + jg .L3786 + cmp dl, 104 + jle .L999 + jmp .L3782 +.L3786: + cmp dl, 112 + je .L3784 + jmp .L999 +.L3785: + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L3790 + push ebx + push DWORD LC16 + push esi + push DWORD 0 + call yasm__warning + add esp, 16 +.L3790: + mov DWORD [edi], 9728 + jmp .L8700 +.L3784: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 68 + jmp .L8699 +.L3782: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 70 + jmp .L8699 +.L3775: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L3794 + cmp dl, 101 + jne .L1005 +.L3794: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L3797 + cmp dl, 114 + jne .L1005 +.L3797: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], enter_insn + mov DWORD [edi+4], 1 + jmp .L8857 +.L3772: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L3803 + cmp dl, 115 + jne .L1005 +.L3803: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 1013505 + jmp .L8866 +.L3765: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 66 + jmp .L8699 +.L3763: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 71 + jmp .L8699 +.L3759: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 65 + jmp .L8699 +.L3752: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 67 + jmp .L8699 +.L3750: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 69 + jmp .L8699 +.L3746: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 64 + jmp .L8699 +.L1353: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L3815 + cmp dl, 100 + je .L3815 + jmp .L1005 +.L1356: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L3818 + cmp dl, 116 + je .L3818 + jmp .L1005 +.L1359: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 72 + je .L3821 + cmp dl, 104 + je .L3821 + jmp .L1005 +.L1362: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L3824 + cmp dl, 97 + je .L3824 + jmp .L1005 +.L1365: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L3827 + cmp dl, 109 + je .L3827 + jmp .L1005 +.L1368: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L3830 + cmp dl, 114 + jne .L1005 +.L3830: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L3832 + test dl, dl + jle .L3834 + cmp dl, 79 + jle .L999 + jmp .L3836 +.L3832: + cmp dl, 112 + je .L3836 + jmp .L999 +.L3834: + mov DWORD [edi], arith_insn + mov DWORD [edi+4], 405527 + jmp .L8695 +.L3836: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L3841 + cmp dl, 68 + je .L3843 + cmp dl, 82 + jle .L1005 + jmp .L3845 +.L3841: + cmp dl, 100 + jg .L3846 + cmp dl, 99 + jle .L1005 + jmp .L3843 +.L3846: + cmp dl, 115 + jne .L1005 +.L3845: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 22273 + jmp .L9152 +.L3843: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6706945 + jmp .L9151 +.L3827: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 47 + jle .L1005 + cmp dl, 49 + je .L3858 + cmp dl, 57 + jg .L1005 + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L3861: + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L3862 + mov al, BYTE [ebx+3] + sub eax, 56 + cmp al, 1 + jbe .L9215 +.L3862: + movsx eax, BYTE [ebx+3] + sub eax, 48 + or eax, 128 + jmp .L9201 +.L3858: + inc ecx + mov dl, BYTE [ecx] + test dl, dl + jle .L3861 + cmp dl, 47 + jle .L999 + cmp dl, 53 + jg .L999 + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + movsx eax, BYTE [ebx+4] + jmp .L9269 +.L3824: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L3869 + cmp dl, 116 + jne .L1005 +.L3869: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + jg .L3871 + test dl, dl + jle .L3873 + cmp dl, 65 + jle .L999 + jmp .L3875 +.L3871: + cmp dl, 98 + je .L3875 + jmp .L999 +.L3873: + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 55041 + jmp .L8695 +.L3875: + inc ecx + cmp BYTE [ecx], 0 + jle .L3873 + jmp .L999 +.L3821: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 71 + je .L3882 + cmp dl, 103 + jne .L1005 +.L3882: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], xchg_insn + mov DWORD [edi+4], 14 + jmp .L8695 +.L3818: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L3888 + cmp dl, 115 + jne .L1005 +.L3888: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], xbts_insn +.L8724: + mov DWORD [edi+4], 2 + mov DWORD [edi+8], 6291460 + jmp .L8696 +.L3815: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L3894 + cmp dl, 100 + jne .L1005 +.L3894: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmpxchgxadd_insn + mov DWORD [edi+4], 49156 + jmp .L8930 +.L1332: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + jg .L3899 + cmp dl, 83 + je .L3901 + cmp dl, 87 + jle .L1005 + jmp .L3903 +.L3899: + cmp dl, 115 + jg .L3905 + cmp dl, 114 + jle .L1005 + jmp .L3901 +.L3905: + cmp dl, 120 + je .L3903 + jmp .L1005 +.L1335: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L3910 + cmp dl, 101 + je .L3910 + jmp .L1005 +.L1338: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L3913 + cmp dl, 110 + je .L3913 + jmp .L1005 +.L1341: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 47 + jle .L1005 + cmp dl, 55 + jle .L3917 + jmp .L1005 +.L1344: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L3919 + cmp dl, 118 + je .L3919 + jmp .L1005 +.L1347: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L3922 + cmp dl, 108 + jne .L1005 +.L3922: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L3924 + cmp dl, 79 + jg .L3925 + test dl, dl + jg .L999 + jmp .L3932 +.L3925: + cmp dl, 80 + jle .L3929 + cmp dl, 82 + jle .L999 + jmp .L3931 +.L3924: + cmp dl, 112 + jg .L3933 + cmp dl, 111 + jle .L999 + jmp .L3929 +.L3933: + cmp dl, 115 + je .L3931 + jmp .L999 +.L3932: + mov DWORD [edi], f6_insn + mov DWORD [edi+4], 1028 + jmp .L8695 +.L3929: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L3939 + cmp dl, 68 + je .L3941 + cmp dl, 82 + jle .L1005 + jmp .L3943 +.L3939: + cmp dl, 100 + jg .L3945 + cmp dl, 99 + jle .L1005 + jmp .L3941 +.L3945: + cmp dl, 115 + je .L3943 + jmp .L1005 +.L3931: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L3949 + cmp dl, 68 + je .L3951 + cmp dl, 82 + jle .L1005 + jmp .L3953 +.L3949: + cmp dl, 100 + jg .L3954 + cmp dl, 99 + jle .L1005 + jmp .L3951 +.L3954: + cmp dl, 115 + jne .L1005 +.L3953: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15948033 + jmp .L9152 +.L3951: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15882497 + jmp .L9151 +.L3943: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 22785 + jmp .L9152 +.L3941: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6707457 + jmp .L9151 +.L3919: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + jg .L3970 + cmp dl, 76 + jg .L3971 + cmp dl, 67 + jg .L3972 + test dl, dl + jle .L3974 + cmp dl, 65 + je .L3976 + jmp .L999 +.L3972: + cmp dl, 71 + jg .L3978 + cmp dl, 68 + jle .L3980 + jmp .L999 +.L3978: + cmp dl, 72 + jle .L3983 + cmp dl, 75 + jle .L999 + jmp .L3985 +.L3971: + cmp dl, 82 + jg .L3987 + cmp dl, 78 + jg .L3988 + cmp dl, 77 + jle .L3990 + jmp .L3991 +.L3988: + cmp dl, 81 + je .L3994 + jmp .L999 +.L3987: + cmp dl, 84 + jg .L3996 + cmp dl, 83 + jle .L3998 + jmp .L999 +.L3996: + cmp dl, 85 + jle .L4001 + cmp dl, 89 + jle .L999 + jmp .L4003 +.L3970: + cmp dl, 109 + jg .L4005 + cmp dl, 100 + jg .L4006 + cmp dl, 97 + je .L3976 + cmp dl, 99 + jle .L999 + jmp .L3980 +.L4006: + cmp dl, 104 + jg .L4010 + cmp dl, 103 + jle .L999 + jmp .L3983 +.L4010: + cmp dl, 107 + jle .L999 + cmp dl, 108 + jle .L3985 + jmp .L3990 +.L4005: + cmp dl, 115 + jg .L4016 + cmp dl, 112 + jg .L4017 + cmp dl, 110 + jle .L3991 + jmp .L999 +.L4017: + cmp dl, 113 + jle .L3994 + cmp dl, 114 + jle .L999 + jmp .L3998 +.L4016: + cmp dl, 117 + jg .L4023 + cmp dl, 116 + jle .L999 + jmp .L4001 +.L4023: + cmp dl, 122 + je .L4003 + jmp .L999 +.L3974: + mov DWORD [edi], mov_insn + mov DWORD [edi+4], 45 + jmp .L8695 +.L3976: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L4030 + cmp dl, 112 + je .L4030 + jmp .L1005 +.L3980: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + jg .L4032 + test dl, dl + jle .L4034 + cmp dl, 80 + jle .L999 + jmp .L4036 +.L4032: + cmp dl, 113 + je .L4036 + jmp .L999 +.L4034: + mov DWORD [edi], movd_insn + mov DWORD [edi+4], 8 + jmp .L8866 +.L3983: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L4041 + cmp dl, 76 + je .L4043 + cmp dl, 79 + jle .L1005 + jmp .L4045 +.L4041: + cmp dl, 108 + jg .L4047 + cmp dl, 107 + jle .L1005 + jmp .L4043 +.L4047: + cmp dl, 112 + je .L4045 + jmp .L1005 +.L3985: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L4051 + cmp dl, 72 + je .L4053 + cmp dl, 79 + jle .L1005 + jmp .L4055 +.L4051: + cmp dl, 104 + jg .L4057 + cmp dl, 103 + jle .L1005 + jmp .L4053 +.L4057: + cmp dl, 112 + je .L4055 + jmp .L1005 +.L3990: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L4062 + cmp dl, 115 + je .L4062 + jmp .L1005 +.L3991: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L4065 + cmp dl, 116 + je .L4065 + jmp .L1005 +.L3994: + inc ecx + mov dl, BYTE [ecx] + test dl, dl + jle .L4068 + cmp dl, 50 + je .L4070 + jmp .L999 +.L4068: + mov DWORD [edi], movq_insn + mov DWORD [edi+4], 5 +.L8866: + mov DWORD [edi+8], 8192 + jmp .L8696 +.L3998: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 66 + cmp eax, 54 + ja .L1005 + jmp DWORD [.L4093+eax*4] + [section .rodata] + [align 4] + [align 4] +.L4093: + dd .L4076 + dd .L1005 + dd .L4079 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L4082 + dd .L1005 + dd .L4085 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L4088 + dd .L4091 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L4076 + dd .L1005 + dd .L4079 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L4082 + dd .L1005 + dd .L4085 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L4088 + dd .L4091 + [section .text] +.L4001: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L4095 + cmp dl, 112 + je .L4095 + jmp .L1005 +.L4003: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L4098 + cmp dl, 120 + jne .L1005 +.L4098: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movszx_insn + mov DWORD [edi+4], 46597 + jmp .L9186 +.L4095: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4103 + cmp dl, 68 + je .L4105 + cmp dl, 82 + jle .L1005 + jmp .L4107 +.L4103: + cmp dl, 100 + jg .L4109 + cmp dl, 99 + jle .L1005 + jmp .L4105 +.L4109: + cmp dl, 115 + je .L4107 + jmp .L1005 +.L4105: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movaupd_insn + mov DWORD [edi+4], 4098 + jmp .L9151 +.L4107: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movaups_insn + mov DWORD [edi+4], 4098 + jmp .L9152 +.L4091: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + jg .L4119 + test dl, dl + jle .L4121 + cmp dl, 67 + jle .L999 + jmp .L4123 +.L4119: + cmp dl, 100 + je .L4123 + jmp .L999 +.L4121: + mov DWORD [edi], movszx_insn + mov DWORD [edi+4], 48645 + jmp .L9186 +.L4076: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 41985 + jmp .L8695 +.L4088: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1090817 + jmp .L8695 +.L4079: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movsd_insn + mov DWORD [edi+4], 4 + jmp .L8695 +.L4082: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4236545 + jmp .L8695 +.L4085: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movss_insn + mov DWORD [edi+4], 3 + jmp .L9152 +.L4123: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], movsxd_insn + mov DWORD [edi+4], 1 + jmp .L9148 +.L4070: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L4149 + cmp dl, 100 + jne .L1005 +.L4149: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L4152 + cmp dl, 113 + jne .L1005 +.L4152: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movq2dq_insn + jmp .L9262 +.L4065: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + jg .L4157 + cmp dl, 72 + jg .L4158 + cmp dl, 68 + jne .L1005 + jmp .L4170 +.L4158: + cmp dl, 73 + jle .L4162 + cmp dl, 79 + jle .L1005 + cmp dl, 80 + jle .L4165 + jmp .L4166 +.L4157: + cmp dl, 105 + jg .L4168 + cmp dl, 100 + je .L4170 + cmp dl, 104 + jle .L1005 + jmp .L4162 +.L4168: + cmp dl, 111 + jle .L1005 + cmp dl, 112 + jle .L4165 + cmp dl, 113 + jle .L4166 + jmp .L1005 +.L4170: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L4177 + cmp dl, 113 + je .L4177 + jmp .L1005 +.L4162: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movnti_insn + mov DWORD [edi+4], 2 +.L8847: + mov DWORD [edi+8], 128 + jmp .L8696 +.L4165: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4182 + cmp dl, 68 + je .L4184 + cmp dl, 82 + jle .L1005 + jmp .L4186 +.L4182: + cmp dl, 100 + jg .L4188 + cmp dl, 99 + jle .L1005 + jmp .L4184 +.L4188: + cmp dl, 115 + je .L4186 + jmp .L1005 +.L4166: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movntq_insn + jmp .L9265 +.L4186: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movntps_insn + jmp .L9265 +.L4184: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movntpddq_insn + mov DWORD [edi+4], 11009 + jmp .L9151 +.L4177: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movntpddq_insn + mov DWORD [edi+4], 59137 + jmp .L9151 +.L4062: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 75 + je .L4205 + cmp dl, 107 + jne .L1005 +.L4205: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L4208 + cmp dl, 112 + jne .L1005 +.L4208: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4210 + cmp dl, 68 + je .L4212 + cmp dl, 82 + jle .L1005 + jmp .L4214 +.L4210: + cmp dl, 100 + jg .L4216 + cmp dl, 99 + jle .L1005 + jmp .L4212 +.L4216: + cmp dl, 115 + je .L4214 + jmp .L1005 +.L4212: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movmskpd_insn + jmp .L9262 +.L4214: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movmskps_insn + jmp .L9265 +.L4053: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L4227 + cmp dl, 112 + je .L4227 + jmp .L1005 +.L4055: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4229 + cmp dl, 68 + je .L4231 + cmp dl, 82 + jle .L1005 + jmp .L4233 +.L4229: + cmp dl, 100 + jg .L4235 + cmp dl, 99 + jle .L1005 + jmp .L4231 +.L4235: + cmp dl, 115 + je .L4233 + jmp .L1005 +.L4231: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movhlpd_insn + mov DWORD [edi+4], 4610 + jmp .L9151 +.L4233: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movhlps_insn + mov DWORD [edi+4], 4610 + jmp .L9152 +.L4227: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L4246 + cmp dl, 115 + jne .L1005 +.L4246: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movhllhps_insn + mov DWORD [edi+4], 5633 + jmp .L9152 +.L4043: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L4252 + cmp dl, 112 + je .L4252 + jmp .L1005 +.L4045: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4254 + cmp dl, 68 + je .L4256 + cmp dl, 82 + jle .L1005 + jmp .L4258 +.L4254: + cmp dl, 100 + jg .L4260 + cmp dl, 99 + jle .L1005 + jmp .L4256 +.L4260: + cmp dl, 115 + je .L4258 + jmp .L1005 +.L4256: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movhlpd_insn + mov DWORD [edi+4], 5634 + jmp .L9151 +.L4258: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movhlps_insn + mov DWORD [edi+4], 5634 + jmp .L9152 +.L4252: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L4271 + cmp dl, 115 + jne .L1005 +.L4271: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movhllhps_insn + mov DWORD [edi+4], 4609 + jmp .L9152 +.L4036: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L4276 + cmp dl, 50 + jg .L4277 + cmp dl, 49 + jle .L1005 + jmp .L4282 +.L4277: + cmp dl, 65 + je .L4281 + jmp .L1005 +.L4276: + cmp dl, 97 + jg .L4283 + cmp dl, 85 + jle .L4285 + cmp dl, 96 + jle .L1005 + jmp .L4281 +.L4283: + cmp dl, 117 + je .L4285 + jmp .L1005 +.L4282: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L4290 + cmp dl, 113 + je .L4290 + jmp .L1005 +.L4281: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movdqau_insn + mov DWORD [edi+4], 26114 + jmp .L9151 +.L4285: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movdqau_insn + mov DWORD [edi+4], 62210 + jmp .L9151 +.L4290: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movdq2q_insn + jmp .L9262 +.L4030: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4301 + cmp dl, 68 + je .L4303 + cmp dl, 82 + jle .L1005 + jmp .L4305 +.L4301: + cmp dl, 100 + jg .L4307 + cmp dl, 99 + jle .L1005 + jmp .L4303 +.L4307: + cmp dl, 115 + je .L4305 + jmp .L1005 +.L4303: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movaupd_insn + mov DWORD [edi+4], 10242 + jmp .L9151 +.L4305: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], movaups_insn + mov DWORD [edi+4], 10242 + jmp .L9152 +.L3917: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + movsx eax, BYTE [ebx+2] + sub eax, 48 + or eax, 112 + jmp .L9201 +.L3913: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4318 + cmp dl, 80 + je .L4320 + cmp dl, 82 + jle .L1005 + jmp .L4322 +.L4318: + cmp dl, 112 + jg .L4324 + cmp dl, 111 + jle .L1005 + jmp .L4320 +.L4324: + cmp dl, 115 + je .L4322 + jmp .L1005 +.L4320: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4328 + cmp dl, 68 + je .L4330 + cmp dl, 82 + jle .L1005 + jmp .L4332 +.L4328: + cmp dl, 100 + jg .L4334 + cmp dl, 99 + jle .L1005 + jmp .L4330 +.L4334: + cmp dl, 115 + je .L4332 + jmp .L1005 +.L4322: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4338 + cmp dl, 68 + je .L4340 + cmp dl, 82 + jle .L1005 + jmp .L4342 +.L4338: + cmp dl, 100 + jg .L4343 + cmp dl, 99 + jle .L1005 + jmp .L4340 +.L4343: + cmp dl, 115 + jne .L1005 +.L4342: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15949057 + jmp .L9152 +.L4340: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15883521 + jmp .L9151 +.L4332: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 23809 + jmp .L9152 +.L4330: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6708481 + jmp .L9151 +.L3910: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L4360 + cmp dl, 110 + jne .L1005 +.L4360: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L4363 + cmp dl, 99 + jne .L1005 +.L4363: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L4366 + cmp dl, 101 + jne .L1005 +.L4366: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], threebyte_insn + mov DWORD [edi+4], 263122945 + jmp .L9024 +.L3901: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 75 + je .L4372 + cmp dl, 107 + je .L4372 + jmp .L1005 +.L3903: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4374 + cmp dl, 80 + je .L4376 + cmp dl, 82 + jle .L1005 + jmp .L4378 +.L4374: + cmp dl, 112 + jg .L4380 + cmp dl, 111 + jle .L1005 + jmp .L4376 +.L4380: + cmp dl, 115 + je .L4378 + jmp .L1005 +.L4376: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4384 + cmp dl, 68 + je .L4386 + cmp dl, 82 + jle .L1005 + jmp .L4388 +.L4384: + cmp dl, 100 + jg .L4390 + cmp dl, 99 + jle .L1005 + jmp .L4386 +.L4390: + cmp dl, 115 + je .L4388 + jmp .L1005 +.L4378: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4394 + cmp dl, 68 + je .L4396 + cmp dl, 82 + jle .L1005 + jmp .L4398 +.L4394: + cmp dl, 100 + jg .L4399 + cmp dl, 99 + jle .L1005 + jmp .L4396 +.L4399: + cmp dl, 115 + jne .L1005 +.L4398: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15949569 + jmp .L9152 +.L4396: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15884033 + jmp .L9151 +.L4388: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 24321 + jmp .L9152 +.L4386: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6708993 + jmp .L9151 +.L4372: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L4416 + cmp dl, 109 + jne .L1005 +.L4416: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L4419 + cmp dl, 111 + jne .L1005 +.L4419: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L4422 + cmp dl, 118 + jne .L1005 +.L4422: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + jg .L4424 + cmp dl, 68 + je .L4426 + cmp dl, 80 + jle .L1005 + jmp .L4428 +.L4424: + cmp dl, 100 + jg .L4430 + cmp dl, 99 + jle .L1005 + jmp .L4426 +.L4430: + cmp dl, 113 + je .L4428 + jmp .L1005 +.L4426: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L4435 + cmp dl, 113 + je .L4435 + jmp .L1005 +.L4428: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], maskmovq_insn +.L9240: + mov DWORD [edi+4], 1 +.L8825: + mov DWORD [edi+8], 8256 + jmp .L8696 +.L4435: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + je .L4441 + cmp dl, 117 + jne .L1005 +.L4441: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], maskmovdqu_insn +.L9262: + mov DWORD [edi+4], 1 + jmp .L9151 +.L1305: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4446 + cmp dl, 65 + je .L4448 + cmp dl, 82 + jle .L1005 + jmp .L4450 +.L4446: + cmp dl, 97 + jg .L4452 + cmp dl, 96 + jle .L1005 + jmp .L4448 +.L4452: + cmp dl, 115 + je .L4450 + jmp .L1005 +.L1308: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L4457 + cmp dl, 99 + je .L4457 + jmp .L1005 +.L1311: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 22 + jmp .L8699 +.L1314: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + jg .L4460 + cmp dl, 75 + jg .L4461 + test dl, dl + jg .L999 + jmp .L4468 +.L4461: + cmp dl, 76 + jle .L4465 + cmp dl, 85 + jle .L999 + jmp .L4467 +.L4460: + cmp dl, 108 + jg .L4469 + cmp dl, 107 + jle .L999 + jmp .L4465 +.L4469: + cmp dl, 118 + je .L4467 + jmp .L999 +.L4468: + mov DWORD [edi], 55 + jmp .L8699 +.L1317: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 18 + jmp .L8699 +.L1320: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 47 + jle .L1005 + cmp dl, 55 + jle .L4476 + jmp .L1005 +.L1323: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L4478 + push ebx + push DWORD LC16 + push esi + push DWORD 0 + call yasm__warning + add esp, 16 +.L4478: + mov DWORD [edi], 15875 + jmp .L8700 +.L1326: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 50 + jmp .L8699 +.L4476: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + movsx eax, BYTE [ebx+2] + sub eax, 48 + or eax, 160 + jmp .L9201 +.L4465: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 39 + jmp .L8699 +.L4467: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4483 + cmp dl, 79 + jg .L4484 + test dl, dl + jg .L999 + jmp .L4491 +.L4484: + cmp dl, 80 + jle .L4488 + cmp dl, 82 + jle .L999 + jmp .L4490 +.L4483: + cmp dl, 112 + jg .L4492 + cmp dl, 111 + jle .L999 + jmp .L4488 +.L4492: + cmp dl, 115 + je .L4490 + jmp .L999 +.L4491: + mov DWORD [edi], f6_insn + mov DWORD [edi+4], 1540 + jmp .L8695 +.L4488: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4498 + cmp dl, 68 + je .L4500 + cmp dl, 82 + jle .L1005 + jmp .L4502 +.L4498: + cmp dl, 100 + jg .L4504 + cmp dl, 99 + jle .L1005 + jmp .L4500 +.L4504: + cmp dl, 115 + je .L4502 + jmp .L1005 +.L4490: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4508 + cmp dl, 68 + je .L4510 + cmp dl, 82 + jle .L1005 + jmp .L4512 +.L4508: + cmp dl, 100 + jg .L4513 + cmp dl, 99 + jle .L1005 + jmp .L4510 +.L4513: + cmp dl, 115 + jne .L1005 +.L4512: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15949313 + jmp .L9152 +.L4510: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15883777 + jmp .L9151 +.L4502: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 24065 + jmp .L9152 +.L4500: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6708737 + jmp .L9151 +.L4457: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], incdec_insn + mov DWORD [edi+4], 83974 + jmp .L8695 +.L4448: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 9985 + jmp .L8695 +.L4450: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 12033 + jmp .L8695 +.L1263: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L4545 + cmp dl, 108 + je .L4545 + jmp .L1005 +.L1266: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L4548 + cmp dl, 119 + je .L4548 + jmp .L1005 +.L1269: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + jg .L4550 + cmp dl, 79 + je .L4552 + cmp dl, 80 + jle .L1005 + jmp .L4554 +.L4550: + cmp dl, 111 + jg .L4556 + cmp dl, 110 + jle .L1005 + jmp .L4552 +.L4556: + cmp dl, 113 + je .L4554 + jmp .L1005 +.L1272: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 21 + jmp .L8699 +.L1275: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L4561 + cmp dl, 69 + jg .L4562 + cmp dl, 66 + jg .L4563 + test dl, dl + jg .L999 + jmp .L4579 +.L4563: + cmp dl, 67 + jle .L4567 + cmp dl, 68 + jle .L4569 + jmp .L999 +.L4562: + cmp dl, 72 + jg .L4571 + cmp dl, 70 + jle .L4573 + jmp .L999 +.L4571: + cmp dl, 73 + jle .L4576 + cmp dl, 83 + jle .L999 + jmp .L4578 +.L4561: + cmp dl, 102 + jg .L4580 + cmp dl, 99 + jg .L4581 + cmp dl, 98 + jle .L999 + jmp .L4567 +.L4581: + cmp dl, 100 + jle .L4569 + cmp dl, 101 + jle .L999 + jmp .L4573 +.L4580: + cmp dl, 105 + jg .L4587 + cmp dl, 104 + jle .L999 + jmp .L4576 +.L4587: + cmp dl, 116 + je .L4578 + jmp .L999 +.L4579: + mov DWORD [edi], 17 + jmp .L8699 +.L1278: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L4591 + cmp dl, 67 + jg .L4592 + cmp dl, 66 + jle .L1005 + jmp .L4594 +.L4592: + cmp dl, 78 + jle .L1005 + cmp dl, 79 + jle .L4598 + jmp .L4599 +.L4591: + cmp dl, 110 + jg .L4601 + cmp dl, 99 + je .L4594 + jmp .L1005 +.L4601: + cmp dl, 111 + jle .L4598 + cmp dl, 112 + jle .L4599 + jmp .L1005 +.L1281: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L4607 + cmp dl, 109 + je .L4607 + jmp .L1005 +.L1284: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + je .L4610 + cmp dl, 117 + je .L4610 + jmp .L1005 +.L1287: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 49 + jg .L4612 + cmp dl, 48 + jmp .L8663 +.L4612: + cmp dl, 52 + jle .L4614 + cmp dl, 56 +.L8663: + je .L4614 + jmp .L1005 +.L1290: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 11777 + jmp .L8700 +.L1293: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L4620 + cmp dl, 116 + je .L4620 + jmp .L1005 +.L1296: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L4623 + cmp dl, 100 + je .L4623 + jmp .L1005 +.L1299: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 49 + jmp .L8699 +.L4623: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L4626 + test dl, dl + jle .L4628 + cmp dl, 68 + jle .L999 + jmp .L4630 +.L4626: + cmp dl, 101 + je .L4630 + jmp .L999 +.L4628: + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1087745 + jmp .L8695 +.L4630: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2136065 + jmp .L9186 +.L4620: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L4638 + cmp dl, 79 + jg .L4639 + cmp dl, 68 + jne .L1005 + jmp .L4651 +.L4639: + cmp dl, 80 + jle .L4643 + cmp dl, 82 + jle .L1005 + cmp dl, 83 + jle .L4646 + jmp .L4647 +.L4638: + cmp dl, 112 + jg .L4649 + cmp dl, 100 + je .L4651 + cmp dl, 111 + jle .L1005 + jmp .L4643 +.L4649: + cmp dl, 114 + jle .L1005 + cmp dl, 115 + jle .L4646 + cmp dl, 116 + jle .L4647 + jmp .L1005 +.L4651: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L4658 + cmp dl, 113 + je .L4658 + jmp .L1005 +.L4643: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4660 + cmp dl, 72 + jg .L4661 + cmp dl, 68 + jmp .L8662 +.L4661: + cmp dl, 73 + jle .L4666 + cmp dl, 82 + jle .L1005 + jmp .L4668 +.L4660: + cmp dl, 104 + jg .L4670 + cmp dl, 100 +.L8662: + je .L4663 + jmp .L1005 +.L4670: + cmp dl, 105 + jle .L4666 + cmp dl, 115 + je .L4668 + jmp .L1005 +.L4646: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4675 + cmp dl, 72 + jg .L4676 + cmp dl, 68 + jmp .L8661 +.L4676: + cmp dl, 73 + jle .L4681 + cmp dl, 82 + jle .L1005 + jmp .L4683 +.L4675: + cmp dl, 104 + jg .L4685 + cmp dl, 100 +.L8661: + je .L4678 + jmp .L1005 +.L4685: + cmp dl, 105 + jle .L4681 + cmp dl, 115 + je .L4683 + jmp .L1005 +.L4647: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4690 + cmp dl, 80 + je .L4692 + cmp dl, 82 + jle .L1005 + jmp .L4694 +.L4690: + cmp dl, 112 + jg .L4696 + cmp dl, 111 + jle .L1005 + jmp .L4692 +.L4696: + cmp dl, 115 + je .L4694 + jmp .L1005 +.L4692: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4700 + cmp dl, 68 + je .L4702 + cmp dl, 82 + jle .L1005 + jmp .L4704 +.L4700: + cmp dl, 100 + jg .L4706 + cmp dl, 99 + jle .L1005 + jmp .L4702 +.L4706: + cmp dl, 115 + je .L4704 + jmp .L1005 +.L4694: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4710 + cmp dl, 68 + je .L4712 + cmp dl, 82 + jle .L1005 + jmp .L4714 +.L4710: + cmp dl, 100 + jg .L4716 + cmp dl, 99 + jle .L1005 + jmp .L4712 +.L4716: + cmp dl, 115 + je .L4714 + jmp .L1005 +.L4712: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + je .L4721 + jmp .L1005 +.L4714: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + jne .L1005 + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L4724 + cmp dl, 115 + jne .L1005 +.L4724: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L4727 + cmp dl, 105 + jne .L1005 +.L4727: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15936513 + jmp .L9152 +.L4721: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L4733 + cmp dl, 115 + jne .L1005 +.L4733: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L4736 + cmp dl, 105 + jne .L1005 +.L4736: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15870977 + jmp .L9151 +.L4702: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + je .L4742 + jmp .L1005 +.L4704: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + jne .L1005 + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L4744 + cmp dl, 68 + je .L4746 + cmp dl, 79 + jle .L1005 + jmp .L4748 +.L4744: + cmp dl, 100 + jg .L4750 + cmp dl, 99 + jle .L1005 + jmp .L4746 +.L4750: + cmp dl, 112 + je .L4748 + jmp .L1005 +.L4746: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L4755 + cmp dl, 113 + je .L4755 + jmp .L1005 +.L4748: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L4758 + cmp dl, 105 + jne .L1005 +.L4758: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 11265 + jmp .L9152 +.L4755: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15948545 + jmp .L9151 +.L4742: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L4766 + cmp dl, 68 + je .L4768 + cmp dl, 79 + jle .L1005 + jmp .L4770 +.L4766: + cmp dl, 100 + jg .L4772 + cmp dl, 99 + jle .L1005 + jmp .L4768 +.L4772: + cmp dl, 112 + je .L4770 + jmp .L1005 +.L4768: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L4777 + cmp dl, 113 + je .L4777 + jmp .L1005 +.L4770: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L4780 + cmp dl, 105 + jne .L1005 +.L4780: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6695937 + jmp .L9151 +.L4777: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6743553 + jmp .L9151 +.L4681: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + je .L4789 + jmp .L1005 +.L4683: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + je .L4791 + jmp .L1005 +.L4678: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + jne .L1005 + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L4794 + cmp dl, 115 + jne .L1005 +.L4794: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4796 + cmp dl, 73 + je .L4798 + cmp dl, 82 + jle .L1005 + jmp .L4800 +.L4796: + cmp dl, 105 + jg .L4802 + cmp dl, 104 + jle .L1005 + jmp .L4798 +.L4802: + cmp dl, 115 + je .L4800 + jmp .L1005 +.L4798: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15871233 + jmp .L9151 +.L4800: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15882753 + jmp .L9151 +.L4791: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L4813 + cmp dl, 115 + jne .L1005 +.L4813: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + jg .L4815 + cmp dl, 68 + je .L4817 + cmp dl, 72 + jle .L1005 + jmp .L4819 +.L4815: + cmp dl, 100 + jg .L4821 + cmp dl, 99 + jle .L1005 + jmp .L4817 +.L4821: + cmp dl, 105 + je .L4819 + jmp .L1005 +.L4817: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15948289 + jmp .L9151 +.L4819: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15936769 + jmp .L9152 +.L4789: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L4832 + cmp dl, 115 + jne .L1005 +.L4832: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4834 + cmp dl, 68 + je .L4836 + cmp dl, 82 + jle .L1005 + jmp .L4838 +.L4834: + cmp dl, 100 + jg .L4840 + cmp dl, 99 + jle .L1005 + jmp .L4836 +.L4840: + cmp dl, 115 + je .L4838 + jmp .L1005 +.L4836: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15870465 + jmp .L9151 +.L4838: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15936001 + jmp .L9152 +.L4666: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + je .L4851 + jmp .L1005 +.L4668: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + je .L4853 + jmp .L1005 +.L4663: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + jne .L1005 + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L4855 + cmp dl, 68 + je .L4857 + cmp dl, 79 + jle .L1005 + jmp .L4859 +.L4855: + cmp dl, 100 + jg .L4861 + cmp dl, 99 + jle .L1005 + jmp .L4857 +.L4861: + cmp dl, 112 + je .L4859 + jmp .L1005 +.L4857: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L4866 + cmp dl, 113 + je .L4866 + jmp .L1005 +.L4859: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4868 + cmp dl, 73 + je .L4870 + cmp dl, 82 + jle .L1005 + jmp .L4872 +.L4868: + cmp dl, 105 + jg .L4874 + cmp dl, 104 + jle .L1005 + jmp .L4870 +.L4874: + cmp dl, 115 + je .L4872 + jmp .L1005 +.L4870: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6696193 + jmp .L9151 +.L4872: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6707713 + jmp .L9151 +.L4866: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15918593 + jmp .L9151 +.L4853: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L4887 + cmp dl, 68 + je .L4889 + cmp dl, 79 + jle .L1005 + jmp .L4891 +.L4887: + cmp dl, 100 + jg .L4892 + cmp dl, 99 + jle .L1005 + jmp .L4889 +.L4892: + cmp dl, 112 + jne .L1005 +.L4891: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + jg .L4896 + cmp dl, 68 + je .L4898 + cmp dl, 72 + jle .L1005 + jmp .L4900 +.L4896: + cmp dl, 100 + jg .L4902 + cmp dl, 99 + jle .L1005 + jmp .L4898 +.L4902: + cmp dl, 105 + je .L4900 + jmp .L1005 +.L4889: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L4907 + cmp dl, 113 + jne .L1005 +.L4907: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6707969 + jmp .L9151 +.L4898: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 23041 + jmp .L9151 +.L4900: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 11521 + jmp .L9152 +.L4851: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L4919 + cmp dl, 112 + jne .L1005 +.L4919: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4921 + cmp dl, 68 + je .L4923 + cmp dl, 82 + jle .L1005 + jmp .L4925 +.L4921: + cmp dl, 100 + jg .L4927 + cmp dl, 99 + jle .L1005 + jmp .L4923 +.L4927: + cmp dl, 115 + je .L4925 + jmp .L1005 +.L4923: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6695425 + jmp .L9151 +.L4925: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 10753 + jmp .L9152 +.L4658: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + jne .L1005 + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L4939 + cmp dl, 112 + jne .L1005 +.L4939: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4941 + cmp dl, 68 + je .L4943 + cmp dl, 82 + jle .L1005 + jmp .L4945 +.L4941: + cmp dl, 100 + jg .L4947 + cmp dl, 99 + jle .L1005 + jmp .L4943 +.L4947: + cmp dl, 115 + je .L4945 + jmp .L1005 +.L4943: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15984129 + jmp .L9151 +.L4945: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 23297 + jmp .L9151 +.L4614: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L4958 + cmp BYTE [ebx+2], 56 + je .L9215 +.L4958: + movsx eax, BYTE [ebx+2] + sub eax, 48 + or eax, 144 + jmp .L9201 +.L4610: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L4960 + cmp dl, 105 + jne .L1005 +.L4960: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L4963 + cmp dl, 100 + jne .L1005 +.L4963: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 1024513 + jmp .L8930 +.L4607: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L4969 + cmp dl, 105 + jne .L1005 +.L4969: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L4972 + cmp dl, 115 + jne .L1005 +.L4972: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L4974 + cmp dl, 68 + je .L4976 + cmp dl, 82 + jle .L1005 + jmp .L4978 +.L4974: + cmp dl, 100 + jg .L4980 + cmp dl, 99 + jle .L1005 + jmp .L4976 +.L4980: + cmp dl, 115 + je .L4978 + jmp .L1005 +.L4976: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6696705 + jmp .L9151 +.L4978: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 12033 + jmp .L9152 +.L4594: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 62721 + jmp .L8695 +.L4599: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + jg .L4993 + cmp dl, 78 + jg .L4994 + cmp dl, 69 + jg .L4995 + test dl, dl + jle .L4997 + cmp dl, 68 + jle .L999 + jmp .L4999 +.L4995: + cmp dl, 76 + je .L5002 + cmp dl, 77 + jle .L999 + jmp .L5004 +.L4994: + cmp dl, 83 + jg .L5006 + cmp dl, 79 + jle .L5008 + cmp dl, 80 + jle .L5010 + cmp dl, 82 + jle .L999 + jmp .L5012 +.L5006: + cmp dl, 85 + je .L5015 + cmp dl, 87 + jle .L999 + jmp .L5017 +.L4993: + cmp dl, 111 + jg .L5019 + cmp dl, 107 + jg .L5020 + cmp dl, 101 + je .L4999 + jmp .L999 +.L5020: + cmp dl, 108 + jle .L5002 + cmp dl, 109 + jle .L999 + cmp dl, 110 + jle .L5004 + jmp .L5008 +.L5019: + cmp dl, 116 + jg .L5027 + cmp dl, 112 + jle .L5010 + cmp dl, 115 + je .L5012 + jmp .L999 +.L5027: + cmp dl, 117 + jle .L5015 + cmp dl, 120 + je .L5017 + jmp .L999 +.L4997: + mov DWORD [edi], arith_insn + mov DWORD [edi+4], 473111 + jmp .L8695 +.L4598: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L5036 + cmp dl, 118 + jne .L1005 +.L5036: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 57 + ja .L1005 + jmp DWORD [.L5073+eax*4] + [section .rodata] + [align 4] + [align 4] +.L5073: + dd .L5041 + dd .L5044 + dd .L5195 + dd .L1005 + dd .L5071 + dd .L1005 + dd .L5053 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5056 + dd .L1005 + dd .L5059 + dd .L5062 + dd .L5065 + dd .L1005 + dd .L1005 + dd .L5068 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5071 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5041 + dd .L5044 + dd .L5195 + dd .L1005 + dd .L5071 + dd .L1005 + dd .L5053 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5056 + dd .L1005 + dd .L5059 + dd .L5062 + dd .L5065 + dd .L1005 + dd .L1005 + dd .L5068 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5071 + [section .text] +.L5062: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 3 + jmp .L9010 +.L5059: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 57 + ja .L1005 + jmp DWORD [.L5109+eax*4] + [section .rodata] + [align 4] + [align 4] +.L5109: + dd .L5080 + dd .L5083 + dd .L5086 + dd .L1005 + dd .L5107 + dd .L1005 + dd .L5092 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5095 + dd .L1005 + dd .L1005 + dd .L5098 + dd .L5101 + dd .L1005 + dd .L1005 + dd .L5104 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5107 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5080 + dd .L5083 + dd .L5086 + dd .L1005 + dd .L5107 + dd .L1005 + dd .L5092 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5095 + dd .L1005 + dd .L1005 + dd .L5098 + dd .L5101 + dd .L1005 + dd .L1005 + dd .L5104 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5107 + [section .text] +.L5044: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L5110 + test dl, dl + jle .L9256 + cmp dl, 68 + jle .L999 + jmp .L5114 +.L5110: + cmp dl, 101 + je .L5114 + jmp .L999 +.L5112: +.L5047: +.L5041: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L5122 + test dl, dl + jle .L9255 + cmp dl, 68 + jle .L999 + jmp .L5086 +.L5122: + cmp dl, 101 + je .L5086 + jmp .L999 +.L5124: +.L5050: +.L5071: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 1027 + jmp .L9010 +.L5068: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 2051 + jmp .L9010 +.L5065: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + jg .L5140 + cmp dl, 68 + jg .L5141 + test dl, dl + jmp .L9268 +.L5141: + cmp dl, 69 + jle .L5145 + cmp dl, 78 + jle .L999 + jmp .L5101 +.L5140: + cmp dl, 101 + jg .L5149 + cmp dl, 100 + jle .L999 + jmp .L5145 +.L5149: + cmp dl, 111 + je .L5101 + jmp .L999 +.L5056: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L5155 + test dl, dl + jle .L9252 + cmp dl, 68 + jle .L999 + jmp .L5159 +.L5155: + cmp dl, 101 + je .L5159 + jmp .L999 +.L5157: +.L5053: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L5164 + test dl, dl + jle .L9251 + cmp dl, 68 + jle .L999 + jmp .L5168 +.L5164: + cmp dl, 101 + jne .L999 +.L5166: +.L5168: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + jmp .L5226 +.L5159: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + jmp .L5217 +.L5145: + inc ecx + cmp BYTE [ecx], 0 +.L9268: + jg .L999 + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 2563 + jmp .L9010 +.L5147: +.L5126: +.L5114: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + jmp .L5193 +.L5080: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L5191 + test dl, dl + jle .L5193 + cmp dl, 68 + jle .L999 + jmp .L5195 +.L5191: + cmp dl, 101 + je .L5195 + jmp .L999 +.L5193: + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 1539 + jmp .L9010 +.L5083: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L5200 + test dl, dl + jle .L9249 + cmp dl, 68 + jle .L999 + jmp .L5204 +.L5200: + cmp dl, 101 + je .L5204 + jmp .L999 +.L5202: +.L5086: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9249: + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 771 + jmp .L9010 +.L5089: +.L5092: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L5215 + test dl, dl + jle .L5217 + cmp dl, 68 + jle .L999 + jmp .L5219 +.L5215: + cmp dl, 101 + je .L5219 + jmp .L999 +.L5217: + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 3587 + jmp .L9010 +.L5095: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L5224 + test dl, dl + jle .L5226 + cmp dl, 68 + jle .L999 + jmp .L5228 +.L5224: + cmp dl, 101 + je .L5228 + jmp .L999 +.L5226: + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 3331 + jmp .L9010 +.L5098: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 259 + jmp .L9010 +.L5101: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 2819 + jmp .L9010 +.L5104: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 2307 + jmp .L9010 +.L5107: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 1283 + jmp .L9010 +.L5228: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9251: + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 3843 + jmp .L9010 +.L5219: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9252: + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 3075 + jmp .L9010 +.L5204: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9255: + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 1795 + jmp .L9010 +.L5195: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9256: + mov DWORD [edi], cmovcc_insn + mov DWORD [edi+4], 515 + jmp .L9010 +.L4999: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L5258 + cmp dl, 113 + je .L5258 + jmp .L1005 +.L5002: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L5260 + cmp dl, 69 + je .L5262 + cmp dl, 83 + jle .L1005 + jmp .L5264 +.L5260: + cmp dl, 101 + jg .L5266 + cmp dl, 100 + jle .L1005 + jmp .L5262 +.L5266: + cmp dl, 116 + je .L5264 + jmp .L1005 +.L5004: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + jg .L5270 + cmp dl, 69 + je .L5272 + cmp dl, 75 + jle .L1005 + jmp .L5274 +.L5270: + cmp dl, 101 + jg .L5276 + cmp dl, 100 + jle .L1005 + jmp .L5272 +.L5276: + cmp dl, 108 + je .L5274 + jmp .L1005 +.L5008: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L5281 + cmp dl, 114 + je .L5281 + jmp .L1005 +.L5010: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5283 + cmp dl, 68 + je .L5285 + cmp dl, 82 + jle .L1005 + jmp .L5287 +.L5283: + cmp dl, 100 + jg .L5289 + cmp dl, 99 + jle .L1005 + jmp .L5285 +.L5289: + cmp dl, 115 + je .L5287 + jmp .L1005 +.L5012: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 66 + cmp eax, 53 + ja .L1005 + jmp DWORD [.L5310+eax*4] + [section .rodata] + [align 4] + [align 4] +.L5310: + dd .L5296 + dd .L1005 + dd .L5299 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5302 + dd .L1005 + dd .L5305 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5308 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5296 + dd .L1005 + dd .L5299 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5302 + dd .L1005 + dd .L5305 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5308 + [section .text] +.L5015: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L5312 + cmp dl, 110 + je .L5312 + jmp .L1005 +.L5017: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L5315 + cmp dl, 99 + jne .L1005 +.L5315: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 72 + je .L5318 + cmp dl, 104 + jne .L1005 +.L5318: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 71 + je .L5321 + cmp dl, 103 + jne .L1005 +.L5321: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 52 + jg .L5323 + test dl, dl + jle .L5325 + cmp dl, 51 + jle .L999 + jmp .L5327 +.L5323: + cmp dl, 56 + je .L5330 + jmp .L999 +.L5325: + mov DWORD [edi], cmpxchgxadd_insn + mov DWORD [edi+4], 45060 +.L8930: + mov DWORD [edi+8], 8 + jmp .L8696 +.L5327: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 56 + je .L5334 + jmp .L1005 +.L5330: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L5336 + cmp dl, 98 + jne .L1005 +.L5336: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmpxchg8b_insn + mov DWORD [edi+4], 1 + jmp .L8963 +.L5334: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 54 + jne .L1005 + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmpxchgxadd_insn + mov DWORD [edi+4], 42500 + mov DWORD [edi+8], 2097160 + jmp .L8696 +.L5312: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L5346 + cmp dl, 111 + jne .L1005 +.L5346: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L5349 + cmp dl, 114 + jne .L1005 +.L5349: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L5352 + cmp dl, 100 + jne .L1005 +.L5352: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5354 + cmp dl, 80 + je .L5356 + cmp dl, 82 + jle .L1005 + jmp .L5358 +.L5354: + cmp dl, 112 + jg .L5360 + cmp dl, 111 + jle .L1005 + jmp .L5356 +.L5360: + cmp dl, 115 + je .L5358 + jmp .L1005 +.L5356: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5364 + cmp dl, 68 + je .L5366 + cmp dl, 82 + jle .L1005 + jmp .L5368 +.L5364: + cmp dl, 100 + jg .L5370 + cmp dl, 99 + jle .L1005 + jmp .L5366 +.L5370: + cmp dl, 115 + je .L5368 + jmp .L1005 +.L5358: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5374 + cmp dl, 68 + je .L5376 + cmp dl, 82 + jle .L1005 + jmp .L5378 +.L5374: + cmp dl, 100 + jg .L5380 + cmp dl, 99 + jle .L1005 + jmp .L5376 +.L5380: + cmp dl, 115 + je .L5378 + jmp .L1005 +.L5376: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 258561 + jmp .L9151 +.L5378: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 258817 + jmp .L9152 +.L5366: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 222721 + jmp .L9151 +.L5368: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpps_insn + jmp .L9264 +.L5296: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 42497 + jmp .L8695 +.L5308: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1091329 + jmp .L8695 +.L5299: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cmpsd_insn + jmp .L9223 +.L5302: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4237057 + jmp .L9148 +.L5305: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssessimm_insn + mov DWORD [edi+4], 15974913 + jmp .L9152 +.L5287: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssepsimm_insn + mov DWORD [edi+4], 49665 + jmp .L9152 +.L5285: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssessimm_insn + mov DWORD [edi+4], 6734337 + jmp .L9151 +.L5281: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L5419 + cmp dl, 100 + jne .L1005 +.L5419: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5421 + cmp dl, 80 + je .L5423 + cmp dl, 82 + jle .L1005 + jmp .L5425 +.L5421: + cmp dl, 112 + jg .L5427 + cmp dl, 111 + jle .L1005 + jmp .L5423 +.L5427: + cmp dl, 115 + je .L5425 + jmp .L1005 +.L5423: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5431 + cmp dl, 68 + je .L5433 + cmp dl, 82 + jle .L1005 + jmp .L5435 +.L5431: + cmp dl, 100 + jg .L5437 + cmp dl, 99 + jle .L1005 + jmp .L5433 +.L5437: + cmp dl, 115 + je .L5435 + jmp .L1005 +.L5425: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5441 + cmp dl, 68 + je .L5443 + cmp dl, 82 + jle .L1005 + jmp .L5445 +.L5441: + cmp dl, 100 + jg .L5447 + cmp dl, 99 + jle .L1005 + jmp .L5443 +.L5447: + cmp dl, 115 + je .L5445 + jmp .L1005 +.L5443: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 520705 + jmp .L9151 +.L5445: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 520961 + jmp .L9152 +.L5433: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 484865 + jmp .L9151 +.L5435: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpps_insn + mov DWORD [edi+4], 1793 + jmp .L9152 +.L5272: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 81 + je .L5464 + cmp dl, 113 + je .L5464 + jmp .L1005 +.L5274: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L5466 + cmp dl, 69 + je .L5468 + cmp dl, 83 + jle .L1005 + jmp .L5470 +.L5466: + cmp dl, 101 + jg .L5472 + cmp dl, 100 + jle .L1005 + jmp .L5468 +.L5472: + cmp dl, 116 + je .L5470 + jmp .L1005 +.L5468: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5476 + cmp dl, 80 + je .L5478 + cmp dl, 82 + jle .L1005 + jmp .L5480 +.L5476: + cmp dl, 112 + jg .L5482 + cmp dl, 111 + jle .L1005 + jmp .L5478 +.L5482: + cmp dl, 115 + je .L5480 + jmp .L1005 +.L5470: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5486 + cmp dl, 80 + je .L5488 + cmp dl, 82 + jle .L1005 + jmp .L5490 +.L5486: + cmp dl, 112 + jg .L5492 + cmp dl, 111 + jle .L1005 + jmp .L5488 +.L5492: + cmp dl, 115 + je .L5490 + jmp .L1005 +.L5488: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5496 + cmp dl, 68 + je .L5498 + cmp dl, 82 + jle .L1005 + jmp .L5500 +.L5496: + cmp dl, 100 + jg .L5502 + cmp dl, 99 + jle .L1005 + jmp .L5498 +.L5502: + cmp dl, 115 + je .L5500 + jmp .L1005 +.L5490: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5506 + cmp dl, 68 + je .L5508 + cmp dl, 82 + jle .L1005 + jmp .L5510 +.L5506: + cmp dl, 100 + jg .L5512 + cmp dl, 99 + jle .L1005 + jmp .L5508 +.L5512: + cmp dl, 115 + je .L5510 + jmp .L1005 +.L5508: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 389633 + jmp .L9151 +.L5510: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 389889 + jmp .L9152 +.L5498: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 353793 + jmp .L9151 +.L5500: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpps_insn + mov DWORD [edi+4], 1281 + jmp .L9152 +.L5478: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5528 + cmp dl, 68 + je .L5530 + cmp dl, 82 + jle .L1005 + jmp .L5532 +.L5528: + cmp dl, 100 + jg .L5534 + cmp dl, 99 + jle .L1005 + jmp .L5530 +.L5534: + cmp dl, 115 + je .L5532 + jmp .L1005 +.L5480: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5538 + cmp dl, 68 + je .L5540 + cmp dl, 82 + jle .L1005 + jmp .L5542 +.L5538: + cmp dl, 100 + jg .L5544 + cmp dl, 99 + jle .L1005 + jmp .L5540 +.L5544: + cmp dl, 115 + je .L5542 + jmp .L1005 +.L5540: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 455169 + jmp .L9151 +.L5542: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 455425 + jmp .L9152 +.L5530: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 419329 + jmp .L9151 +.L5532: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpps_insn + mov DWORD [edi+4], 1537 + jmp .L9152 +.L5464: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5560 + cmp dl, 80 + je .L5562 + cmp dl, 82 + jle .L1005 + jmp .L5564 +.L5560: + cmp dl, 112 + jg .L5566 + cmp dl, 111 + jle .L1005 + jmp .L5562 +.L5566: + cmp dl, 115 + je .L5564 + jmp .L1005 +.L5562: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5570 + cmp dl, 68 + je .L5572 + cmp dl, 82 + jle .L1005 + jmp .L5574 +.L5570: + cmp dl, 100 + jg .L5576 + cmp dl, 99 + jle .L1005 + jmp .L5572 +.L5576: + cmp dl, 115 + je .L5574 + jmp .L1005 +.L5564: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5580 + cmp dl, 68 + je .L5582 + cmp dl, 82 + jle .L1005 + jmp .L5584 +.L5580: + cmp dl, 100 + jg .L5586 + cmp dl, 99 + jle .L1005 + jmp .L5582 +.L5586: + cmp dl, 115 + je .L5584 + jmp .L1005 +.L5582: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 324097 + jmp .L9151 +.L5584: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 324353 + jmp .L9152 +.L5572: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 288257 + jmp .L9151 +.L5574: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpps_insn + mov DWORD [edi+4], 1025 + jmp .L9152 +.L5262: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5602 + cmp dl, 80 + je .L5604 + cmp dl, 82 + jle .L1005 + jmp .L5606 +.L5602: + cmp dl, 112 + jg .L5608 + cmp dl, 111 + jle .L1005 + jmp .L5604 +.L5608: + cmp dl, 115 + je .L5606 + jmp .L1005 +.L5264: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5612 + cmp dl, 80 + je .L5614 + cmp dl, 82 + jle .L1005 + jmp .L5616 +.L5612: + cmp dl, 112 + jg .L5618 + cmp dl, 111 + jle .L1005 + jmp .L5614 +.L5618: + cmp dl, 115 + je .L5616 + jmp .L1005 +.L5614: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5622 + cmp dl, 68 + je .L5624 + cmp dl, 82 + jle .L1005 + jmp .L5626 +.L5622: + cmp dl, 100 + jg .L5628 + cmp dl, 99 + jle .L1005 + jmp .L5624 +.L5628: + cmp dl, 115 + je .L5626 + jmp .L1005 +.L5616: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5632 + cmp dl, 68 + je .L5634 + cmp dl, 82 + jle .L1005 + jmp .L5636 +.L5632: + cmp dl, 100 + jg .L5637 + cmp dl, 99 + jle .L1005 + jmp .L5634 +.L5637: + cmp dl, 115 + jne .L1005 +.L5636: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 127745 + jmp .L9152 +.L5634: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 127489 + jmp .L9151 +.L5626: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpps_insn + mov DWORD [edi+4], 257 + jmp .L9152 +.L5624: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 91649 + jmp .L9151 +.L5604: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5653 + cmp dl, 68 + je .L5655 + cmp dl, 82 + jle .L1005 + jmp .L5657 +.L5653: + cmp dl, 100 + jg .L5659 + cmp dl, 99 + jle .L1005 + jmp .L5655 +.L5659: + cmp dl, 115 + je .L5657 + jmp .L1005 +.L5606: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5663 + cmp dl, 68 + je .L5665 + cmp dl, 82 + jle .L1005 + jmp .L5667 +.L5663: + cmp dl, 100 + jg .L5668 + cmp dl, 99 + jle .L1005 + jmp .L5665 +.L5668: + cmp dl, 115 + jne .L1005 +.L5667: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 193281 + jmp .L9152 +.L5665: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 193025 + jmp .L9151 +.L5657: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpps_insn + jmp .L9263 +.L5655: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 157185 + jmp .L9151 +.L5258: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5684 + cmp dl, 80 + je .L5686 + cmp dl, 82 + jle .L1005 + jmp .L5688 +.L5684: + cmp dl, 112 + jg .L5690 + cmp dl, 111 + jle .L1005 + jmp .L5686 +.L5690: + cmp dl, 115 + je .L5688 + jmp .L1005 +.L5686: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5694 + cmp dl, 68 + je .L5696 + cmp dl, 82 + jle .L1005 + jmp .L5698 +.L5694: + cmp dl, 100 + jg .L5700 + cmp dl, 99 + jle .L1005 + jmp .L5696 +.L5700: + cmp dl, 115 + je .L5698 + jmp .L1005 +.L5688: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5704 + cmp dl, 68 + je .L5706 + cmp dl, 82 + jle .L1005 + jmp .L5708 +.L5704: + cmp dl, 100 + jg .L5709 + cmp dl, 99 + jle .L1005 + jmp .L5706 +.L5709: + cmp dl, 115 + jne .L1005 +.L5708: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 62209 + jmp .L9152 +.L5706: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 61953 + jmp .L9151 +.L5698: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpps_insn +.L9265: + mov DWORD [edi+4], 1 + jmp .L9152 +.L5696: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssecmpss_insn + mov DWORD [edi+4], 26113 + jmp .L9151 +.L4567: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 63489 + jmp .L8695 +.L4569: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 64513 + jmp .L8695 +.L4576: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 64001 + jmp .L8695 +.L4578: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L5735 + cmp dl, 115 + je .L5735 + jmp .L1005 +.L4573: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L5738 + cmp dl, 108 + jne .L1005 +.L5738: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + je .L5741 + cmp dl, 117 + jne .L1005 +.L5741: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L5744 + cmp dl, 115 + jne .L1005 +.L5744: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 72 + je .L5747 + cmp dl, 104 + jne .L1005 +.L5747: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], clflush_insn + mov DWORD [edi+4], 1 + jmp .L9024 +.L5735: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 984577 + jmp .L9154 +.L4554: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L5755 + test dl, dl + jle .L5757 + cmp dl, 68 + jle .L999 + jmp .L5759 +.L5755: + cmp dl, 101 + je .L5759 + jmp .L999 +.L5757: + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2136321 + jmp .L9186 +.L4552: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4233473 + jmp .L9148 +.L5759: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4233217 + jmp .L9148 +.L4548: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1087489 + jmp .L8695 +.L4545: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L5776 + cmp dl, 108 + jne .L1005 +.L5776: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], call_insn + jmp .L9222 +.L1230: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 47 + jle .L1005 + cmp dl, 53 + jle .L5783 + jmp .L1005 +.L1233: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L5784 + cmp dl, 66 + jg .L5785 + test dl, dl + jle .L5787 + cmp dl, 65 + jle .L999 + jmp .L5789 +.L5785: + cmp dl, 68 + je .L5792 + cmp dl, 86 + jle .L999 + jmp .L5794 +.L5784: + cmp dl, 99 + jg .L5796 + cmp dl, 98 + je .L5789 + jmp .L999 +.L5796: + cmp dl, 100 + jle .L5792 + cmp dl, 119 + je .L5794 + jmp .L999 +.L5787: + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + movsx eax, BYTE [ebx+1] + sub eax, 48 + jmp .L9261 +.L1236: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L5803 + cmp dl, 120 + je .L5803 + jmp .L1005 +.L1239: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + jg .L5805 + cmp dl, 80 + je .L5807 + cmp dl, 87 + jle .L1005 + jmp .L5809 +.L5805: + cmp dl, 112 + jg .L5811 + cmp dl, 111 + jle .L1005 + jmp .L5807 +.L5811: + cmp dl, 120 + je .L5809 + jmp .L1005 +.L1242: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + jg .L5815 + cmp dl, 80 + jg .L5816 + cmp dl, 76 + je .L5818 + cmp dl, 79 + jmp .L8684 +.L5816: + cmp dl, 82 + je .L5823 + cmp dl, 87 + jle .L1005 + jmp .L5825 +.L5815: + cmp dl, 112 + jg .L5827 + cmp dl, 108 + je .L5818 + cmp dl, 111 +.L8684: + jle .L1005 + jmp .L5820 +.L5827: + cmp dl, 114 + jg .L5831 + cmp dl, 113 + jle .L1005 + jmp .L5823 +.L5831: + cmp dl, 120 + je .L5825 + jmp .L1005 +.L1245: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 73 + cmp eax, 47 + ja .L1005 + jmp DWORD [.L5855+eax*4] + [section .rodata] + [align 4] + [align 4] +.L5855: + dd .L5838 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5841 + dd .L1005 + dd .L1005 + dd .L5844 + dd .L1005 + dd .L1005 + dd .L5847 + dd .L5850 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5853 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5838 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5841 + dd .L1005 + dd .L1005 + dd .L5844 + dd .L1005 + dd .L1005 + dd .L5847 + dd .L5850 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5853 + [section .text] +.L1248: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L5856 + cmp dl, 80 + je .L5858 + cmp dl, 83 + jle .L1005 + jmp .L5860 +.L5856: + cmp dl, 112 + jg .L5862 + cmp dl, 111 + jle .L1005 + jmp .L5858 +.L5862: + cmp dl, 116 + je .L5860 + jmp .L1005 +.L1251: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L5867 + cmp dl, 112 + je .L5867 + jmp .L1005 +.L1254: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L5869 + cmp dl, 76 + je .L5871 + cmp dl, 81 + jle .L1005 + jmp .L5873 +.L5869: + cmp dl, 108 + jg .L5875 + cmp dl, 107 + jle .L1005 + jmp .L5871 +.L5875: + cmp dl, 114 + je .L5873 + jmp .L1005 +.L1257: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 68 + cmp eax, 48 + ja .L1005 + jmp DWORD [.L5902+eax*4] + [section .rodata] + [align 4] + [align 4] +.L5902: + dd .L5882 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5885 + dd .L1005 + dd .L1005 + dd .L5888 + dd .L5891 + dd .L1005 + dd .L1005 + dd .L5894 + dd .L5897 + dd .L1005 + dd .L1005 + dd .L5900 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5882 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L5885 + dd .L1005 + dd .L1005 + dd .L5888 + dd .L5891 + dd .L1005 + dd .L1005 + dd .L5894 + dd .L5897 + dd .L1005 + dd .L1005 + dd .L5900 + [section .text] +.L5894: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 84 + jmp .L8699 +.L5885: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 86 + jmp .L8699 +.L5891: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 1026561 + mov DWORD [edi+8], 524304 + jmp .L8696 +.L5897: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L5911 + cmp dl, 114 + je .L5911 + jmp .L1005 +.L5882: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L5914 + cmp dl, 99 + je .L5914 + jmp .L1005 +.L5888: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L5917 + cmp dl, 100 + je .L5917 + jmp .L1005 +.L5900: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L5920 + cmp dl, 115 + jne .L1005 +.L5920: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixsmm_insn + mov DWORD [edi+4], 32001 + jmp .L9141 +.L5917: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L5926 + cmp dl, 116 + jne .L1005 +.L5926: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixsmm_insn + mov DWORD [edi+4], 31489 + jmp .L9141 +.L5914: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], rsdc_insn + jmp .L9257 +.L5911: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L5935 + cmp dl, 116 + jne .L1005 +.L5935: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L5937 + cmp dl, 80 + je .L5939 + cmp dl, 82 + jle .L1005 + jmp .L5941 +.L5937: + cmp dl, 112 + jg .L5943 + cmp dl, 111 + jle .L1005 + jmp .L5939 +.L5943: + cmp dl, 115 + je .L5941 + jmp .L1005 +.L5939: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L5948 + cmp dl, 115 + je .L5948 + jmp .L1005 +.L5941: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L5951 + cmp dl, 115 + jne .L1005 +.L5951: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15946241 + jmp .L9152 +.L5948: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 20993 + jmp .L9152 +.L5871: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], shift_insn + jmp .L9221 +.L5873: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], shift_insn + jmp .L9220 +.L5867: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 192 + jmp .L8699 +.L5858: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + jg .L5967 + cmp dl, 69 + jg .L5968 + test dl, dl + jle .L5970 + cmp dl, 68 + jmp .L9273 +.L5968: + cmp dl, 78 + je .L5975 + cmp dl, 89 +.L9273: + jle .L999 + jmp .L5977 +.L5967: + cmp dl, 109 + jg .L5979 + cmp dl, 101 + jmp .L9275 +.L5979: + cmp dl, 110 + jle .L5975 + cmp dl, 122 +.L9275: + je .L5977 + jmp .L999 +.L5970: + mov DWORD [edi], 1 + mov DWORD [edi+4], 243 + jmp .L8701 +.L5860: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + jg .L5984 + cmp dl, 69 + jg .L5985 + test dl, dl + jmp .L9241 +.L5985: + cmp dl, 70 + jle .L5989 + cmp dl, 77 + jle .L999 + jmp .L5991 +.L5984: + cmp dl, 102 + jg .L5993 + cmp dl, 101 + jle .L999 + jmp .L5989 +.L5993: + cmp dl, 110 + je .L5991 + jmp .L999 +.L5989: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], retnf_insn + mov DWORD [edi+4], 51714 + jmp .L8695 +.L5991: + inc ecx + cmp BYTE [ecx], 0 +.L9241: + jg .L999 + mov DWORD [edi], retnf_insn + mov DWORD [edi+4], 49666 + jmp .L8695 +.L5972: +.L5975: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + jg .L6006 + cmp dl, 69 + je .L6010 + cmp dl, 89 + jmp .L9274 +.L6006: + cmp dl, 101 + jg .L6012 + cmp dl, 100 +.L9274: + jle .L1005 + jmp .L6010 +.L6012: + cmp dl, 122 + je .L6010 + jmp .L1005 +.L5977: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 1 + mov DWORD [edi+4], 244 + jmp .L8701 +.L6008: +.L6010: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 1 + mov DWORD [edi+4], 242 + jmp .L8701 +.L5853: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 82 + jmp .L8699 +.L5838: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 87 + jmp .L8699 +.L5850: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6024 + cmp dl, 115 + je .L6024 + jmp .L1005 +.L5841: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6027 + cmp dl, 115 + je .L6027 + jmp .L1005 +.L5844: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L6030 + cmp dl, 109 + je .L6030 + jmp .L1005 +.L5847: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 72 + je .L6033 + cmp dl, 104 + jne .L1005 +.L6033: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L6036 + cmp dl, 114 + jne .L1005 +.L6036: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 996865 +.L8712: + mov DWORD [edi+8], 655392 + jmp .L8696 +.L6030: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L6042 + cmp dl, 99 + jne .L1005 +.L6042: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 996097 + jmp .L9010 +.L6027: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L6048 + cmp dl, 114 + jne .L1005 +.L6048: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 995841 +.L8713: + mov DWORD [edi+8], 8388624 + jmp .L8696 +.L6024: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L6054 + cmp dl, 99 + jne .L1005 +.L6054: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 995585 +.L8963: + mov DWORD [edi+8], 16 + jmp .L8696 +.L5825: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 81 + jmp .L8699 +.L5818: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], shift_insn + jmp .L9218 +.L5823: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], shift_insn + mov DWORD [edi+4], 776 + jmp .L8695 +.L5820: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6067 + cmp dl, 80 + je .L6069 + cmp dl, 82 + jle .L1005 + jmp .L6071 +.L6067: + cmp dl, 112 + jg .L6073 + cmp dl, 111 + jle .L1005 + jmp .L6069 +.L6073: + cmp dl, 115 + je .L6071 + jmp .L1005 +.L6069: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6078 + cmp dl, 115 + je .L6078 + jmp .L1005 +.L6071: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6081 + cmp dl, 115 + jne .L1005 +.L6081: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15946497 + jmp .L9152 +.L6078: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 21249 + jmp .L9152 +.L5809: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 83 + jmp .L8699 +.L5807: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 85 + jmp .L8699 +.L5803: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 80 + jmp .L8699 +.L5792: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + movsx eax, BYTE [ebx+1] + sub eax, 48 + jmp .L9260 +.L5794: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + movsx eax, BYTE [ebx+1] + sub eax, 48 + jmp .L9259 +.L5789: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + movsx eax, BYTE [ebx+1] + sub eax, 48 + jmp .L9258 +.L5783: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L6101 + cmp dl, 66 + jg .L6102 + test dl, dl + jle .L6104 + cmp dl, 65 + jle .L999 + jmp .L6106 +.L6102: + cmp dl, 68 + je .L6109 + cmp dl, 86 + jle .L999 + jmp .L6111 +.L6101: + cmp dl, 99 + jg .L6113 + cmp dl, 98 + je .L6106 + jmp .L999 +.L6113: + cmp dl, 100 + jle .L6109 + cmp dl, 119 + je .L6111 + jmp .L999 +.L6104: + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + movsx eax, BYTE [ebx+2] +.L9269: + sub eax, 38 +.L9261: + or eax, 80 + jmp .L9201 +.L6106: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + movsx eax, BYTE [ebx+2] + sub eax, 38 +.L9258: + or eax, 16 + jmp .L9201 +.L6109: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + movsx eax, BYTE [ebx+2] + sub eax, 38 +.L9260: + or eax, 64 + jmp .L9201 +.L6111: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + movsx eax, BYTE [ebx+2] + sub eax, 38 +.L9259: + or eax, 48 + jmp .L9201 +.L1195: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L6125 + cmp dl, 72 + je .L6127 + cmp dl, 81 + jle .L1005 + jmp .L6129 +.L6125: + cmp dl, 104 + jg .L6131 + cmp dl, 103 + jle .L1005 + jmp .L6127 +.L6131: + cmp dl, 114 + je .L6129 + jmp .L1005 +.L1198: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6135 + cmp dl, 77 + je .L6137 + cmp dl, 82 + jle .L1005 + jmp .L6139 +.L6135: + cmp dl, 109 + jg .L6141 + cmp dl, 108 + jle .L1005 + jmp .L6137 +.L6141: + cmp dl, 115 + je .L6139 + jmp .L1005 +.L1201: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6145 + cmp dl, 65 + je .L6147 + cmp dl, 82 + jle .L1005 + jmp .L6149 +.L6145: + cmp dl, 97 + jg .L6151 + cmp dl, 96 + jle .L1005 + jmp .L6147 +.L6151: + cmp dl, 115 + je .L6149 + jmp .L1005 +.L1204: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6155 + cmp dl, 69 + je .L6157 + cmp dl, 82 + jle .L1005 + jmp .L6159 +.L6155: + cmp dl, 101 + jg .L6161 + cmp dl, 100 + jle .L1005 + jmp .L6157 +.L6161: + cmp dl, 115 + je .L6159 + jmp .L1005 +.L1207: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6165 + cmp dl, 68 + je .L6167 + cmp dl, 82 + jle .L1005 + jmp .L6169 +.L6165: + cmp dl, 100 + jg .L6171 + cmp dl, 99 + jle .L1005 + jmp .L6167 +.L6171: + cmp dl, 115 + je .L6169 + jmp .L1005 +.L1210: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L6176 + cmp dl, 100 + je .L6176 + jmp .L1005 +.L1213: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L6179 + cmp dl, 100 + je .L6179 + jmp .L1005 +.L1216: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6182 + cmp dl, 115 + je .L6182 + jmp .L1005 +.L1219: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + jg .L6184 + cmp dl, 66 + jg .L6185 + cmp dl, 65 + je .L6187 + jmp .L1005 +.L6185: + cmp dl, 67 + jle .L6190 + cmp dl, 68 + jle .L6192 + cmp dl, 78 + jle .L1005 + jmp .L6194 +.L6184: + cmp dl, 99 + jg .L6196 + cmp dl, 97 + je .L6187 + cmp dl, 98 + jle .L1005 + jmp .L6190 +.L6196: + cmp dl, 100 + jle .L6192 + cmp dl, 111 + je .L6194 + jmp .L1005 +.L1222: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6202 + cmp dl, 76 + je .L6204 + cmp dl, 82 + jle .L1005 + jmp .L6206 +.L6202: + cmp dl, 108 + jg .L6208 + cmp dl, 107 + jle .L1005 + jmp .L6204 +.L6208: + cmp dl, 115 + je .L6206 + jmp .L1005 +.L1225: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L6213 + cmp dl, 114 + jne .L1005 +.L6213: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], prot286_insn + mov DWORD [edi+4], 196609 + jmp .L9013 +.L6206: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], lfgss_insn + mov DWORD [edi+4], 46594 + jmp .L9186 +.L6204: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], bsfr_insn + mov DWORD [edi+4], 771 + jmp .L9031 +.L6190: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 75 + je .L6225 + cmp dl, 107 + je .L6225 + jmp .L1005 +.L6194: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L6228 + cmp dl, 112 + je .L6228 + jmp .L1005 +.L6192: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6231 + cmp dl, 115 + je .L6231 + jmp .L1005 +.L6187: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L6234 + cmp dl, 100 + jne .L1005 +.L6234: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L6237 + cmp dl, 97 + jne .L1005 +.L6237: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L6240 + cmp dl, 108 + jne .L1005 +.L6240: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L6243 + cmp dl, 108 + jne .L1005 +.L6243: + inc ecx + mov dl, BYTE [ecx] + test dl, dl + jle .L6246 + cmp dl, 50 + je .L6248 + jmp .L999 +.L6246: + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 984833 + jmp .L9016 +.L6248: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 56 + jne .L1005 + inc ecx + mov dl, BYTE [ecx] + cmp dl, 54 + jne .L1005 + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 984321 +.L8709: + mov DWORD [edi+8], 2097154 + jmp .L8696 +.L6231: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L6256 + cmp dl, 68 + jg .L6257 + cmp dl, 66 + je .L6259 + cmp dl, 67 + jmp .L8685 +.L6257: + cmp dl, 81 + je .L6264 + cmp dl, 86 + jle .L1005 + jmp .L6266 +.L6256: + cmp dl, 100 + jg .L6268 + cmp dl, 98 + je .L6259 + cmp dl, 99 +.L8685: + jle .L1005 + jmp .L6261 +.L6268: + cmp dl, 113 + jg .L6272 + cmp dl, 112 + jle .L1005 + jmp .L6264 +.L6272: + cmp dl, 119 + je .L6266 + jmp .L1005 +.L6259: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 44033 + jmp .L8695 +.L6266: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1092865 + jmp .L8695 +.L6261: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2141441 + jmp .L9186 +.L6264: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4238593 + jmp .L9148 +.L6228: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + jg .L6289 + cmp dl, 69 + jg .L6290 + test dl, dl + jle .L6292 + cmp dl, 68 + jmp .L9270 +.L6290: + cmp dl, 78 + je .L6297 + cmp dl, 89 +.L9270: + jle .L999 + jmp .L6294 +.L6289: + cmp dl, 109 + jg .L6301 + cmp dl, 101 + jmp .L9272 +.L6301: + cmp dl, 110 + jle .L6297 + cmp dl, 122 +.L9272: + je .L6294 + jmp .L999 +.L6292: + mov DWORD [edi], loop_insn +.L9218: + mov DWORD [edi+4], 520 + jmp .L8695 +.L6299: +.L6294: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], loop_insn +.L9220: + mov DWORD [edi+4], 264 + jmp .L8695 +.L6297: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 90 + jg .L6314 + cmp dl, 69 + je .L6318 + cmp dl, 89 + jmp .L9271 +.L6314: + cmp dl, 101 + jg .L6320 + cmp dl, 100 +.L9271: + jle .L1005 + jmp .L6318 +.L6320: + cmp dl, 122 + jne .L1005 +.L6316: +.L6318: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], loop_insn +.L9221: + mov DWORD [edi+4], 8 + jmp .L8695 +.L6225: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 1 + mov DWORD [edi+4], 240 + jmp .L8701 +.L6182: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L6332 + cmp dl, 119 + jne .L1005 +.L6332: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], prot286_insn + mov DWORD [edi+4], 393473 + jmp .L9154 +.L6179: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L6338 + cmp dl, 116 + jne .L1005 +.L6338: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], prot286_insn + mov DWORD [edi+4], 131073 +.L9013: + mov DWORD [edi+8], 9437186 + jmp .L8696 +.L6176: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L6344 + cmp dl, 116 + jne .L1005 +.L6344: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 51314945 + jmp .L9154 +.L6169: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], lfgss_insn + mov DWORD [edi+4], 46338 + jmp .L9186 +.L6167: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L6353 + cmp dl, 116 + jne .L1005 +.L6353: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 34537729 + jmp .L9154 +.L6159: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], lfgss_insn + mov DWORD [edi+4], 46082 + jmp .L9186 +.L6157: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L6362 + cmp dl, 110 + jne .L1005 +.L6362: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L6365 + cmp dl, 99 + jne .L1005 +.L6365: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L6368 + cmp dl, 101 + jne .L1005 +.L6368: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], threebyte_insn + mov DWORD [edi+4], 263120897 + jmp .L9024 +.L6147: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + jg .L6373 + test dl, dl + jle .L6375 + cmp dl, 85 + jle .L999 + jmp .L6377 +.L6373: + cmp dl, 118 + je .L6377 + jmp .L999 +.L6375: + mov DWORD [edi], lea_insn + mov DWORD [edi+4], 3 + jmp .L8695 +.L6149: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], ldes_insn + mov DWORD [edi+4], 50178 + jmp .L8695 +.L6377: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L6389 + cmp dl, 101 + jne .L1005 +.L6389: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 51457 +.L8857: + mov DWORD [edi+8], 1 + jmp .L8696 +.L6139: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], ldes_insn + mov DWORD [edi+4], 50434 + jmp .L8695 +.L6137: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L6401 + cmp dl, 120 + jne .L1005 +.L6401: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L6404 + cmp dl, 99 + jne .L1005 +.L6404: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6407 + cmp dl, 115 + jne .L1005 +.L6407: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L6410 + cmp dl, 114 + jne .L1005 +.L6410: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ldstmxcsr_insn +.L9263: + mov DWORD [edi+4], 513 + jmp .L9152 +.L6127: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 70 + je .L6416 + cmp dl, 102 + je .L6416 + jmp .L1005 +.L6129: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], bsfr_insn + mov DWORD [edi+4], 515 + jmp .L9031 +.L6416: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 40705 + jmp .L8695 +.L1164: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 54 + je .L6428 + jmp .L1005 +.L1166: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + je .L6430 + jmp .L1005 +.L1168: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 52 + je .L6432 + jmp .L1005 +.L1171: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6433 + cmp dl, 68 + jg .L6434 + cmp dl, 65 + je .L6436 + cmp dl, 67 + jmp .L8686 +.L6434: + cmp dl, 77 + je .L6441 + cmp dl, 82 + jle .L1005 + jmp .L6443 +.L6433: + cmp dl, 100 + jg .L6445 + cmp dl, 97 + je .L6436 + cmp dl, 99 +.L8686: + jle .L1005 + jmp .L6438 +.L6445: + cmp dl, 109 + jg .L6449 + cmp dl, 108 + jle .L1005 + jmp .L6441 +.L6449: + cmp dl, 115 + je .L6443 + jmp .L1005 +.L1174: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + jg .L6453 + cmp dl, 66 + jle .L1005 + cmp dl, 67 + jle .L6456 + jmp .L6457 +.L6453: + cmp dl, 98 + jle .L1005 + cmp dl, 99 + jle .L6456 + cmp dl, 100 + jle .L6457 + jmp .L1005 +.L1177: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 20 + jmp .L8699 +.L1180: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 16 + jmp .L8699 +.L1183: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L6465 + cmp dl, 100 + je .L6465 + jmp .L1005 +.L1186: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L6468 + cmp dl, 112 + je .L6468 + jmp .L1005 +.L1189: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 48 + jmp .L8699 +.L6468: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L6472 + cmp dl, 108 + jne .L1005 +.L6472: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], arpl_insn + mov DWORD [edi+4], 1 + jmp .L9031 +.L6465: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L6480 + cmp dl, 77 + jg .L6481 + test dl, dl + jg .L999 + jmp .L6488 +.L6481: + cmp dl, 78 + jle .L6485 + cmp dl, 79 + jle .L999 + jmp .L6487 +.L6480: + cmp dl, 110 + jg .L6489 + cmp dl, 109 + jle .L999 + jmp .L6485 +.L6489: + cmp dl, 112 + je .L6487 + jmp .L999 +.L6488: + mov DWORD [edi], arith_insn + mov DWORD [edi+4], 270359 + jmp .L8695 +.L6485: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L6496 + cmp dl, 112 + je .L6496 + jmp .L1005 +.L6487: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6498 + cmp dl, 68 + je .L6500 + cmp dl, 82 + jle .L1005 + jmp .L6502 +.L6498: + cmp dl, 100 + jg .L6503 + cmp dl, 99 + jle .L1005 + jmp .L6500 +.L6503: + cmp dl, 115 + jne .L1005 +.L6502: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 21505 + jmp .L9152 +.L6500: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6706177 + jmp .L9151 +.L6496: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6513 + cmp dl, 68 + je .L6515 + cmp dl, 82 + jle .L1005 + jmp .L6517 +.L6513: + cmp dl, 100 + jg .L6519 + cmp dl, 99 + jle .L1005 + jmp .L6515 +.L6519: + cmp dl, 115 + je .L6517 + jmp .L1005 +.L6515: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6706433 + jmp .L9151 +.L6517: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 21761 + jmp .L9152 +.L6457: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6529 + cmp dl, 79 + jg .L6530 + test dl, dl + jg .L999 + jmp .L6537 +.L6530: + cmp dl, 80 + jle .L6534 + cmp dl, 82 + jle .L999 + jmp .L6536 +.L6529: + cmp dl, 112 + jg .L6538 + cmp dl, 111 + jle .L999 + jmp .L6534 +.L6538: + cmp dl, 115 + je .L6536 + jmp .L999 +.L6537: + mov DWORD [edi], arith_insn + mov DWORD [edi+4], 23 + jmp .L8695 +.L6456: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], arith_insn + mov DWORD [edi+4], 135191 + jmp .L8695 +.L6534: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6547 + cmp dl, 68 + je .L6549 + cmp dl, 82 + jle .L1005 + jmp .L6551 +.L6547: + cmp dl, 100 + jg .L6553 + cmp dl, 99 + jle .L1005 + jmp .L6549 +.L6553: + cmp dl, 115 + je .L6551 + jmp .L1005 +.L6536: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6557 + cmp dl, 68 + je .L6559 + cmp dl, 82 + jle .L1005 + jmp .L6561 +.L6557: + cmp dl, 100 + jg .L6562 + cmp dl, 99 + jle .L1005 + jmp .L6559 +.L6562: + cmp dl, 115 + jne .L1005 +.L6561: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15947777 + jmp .L9152 +.L6559: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15882241 + jmp .L9151 +.L6551: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 22529 + jmp .L9152 +.L6549: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6707201 + jmp .L9151 +.L6436: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 14081 + jmp .L8695 +.L6443: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 16129 + jmp .L8695 +.L6438: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], aadm_insn + mov DWORD [edi+4], 258 + jmp .L8695 +.L6441: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], aadm_insn +.L9223: + mov DWORD [edi+4], 2 + jmp .L8695 +.L6432: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9267 + mov DWORD [edi], 2 + jmp .L9244 +.L6430: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 2 + jmp .L9245 +.L6428: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L6606 + sub esp, 8 + push DWORD LC18 + push esi + call yasm__error + jmp .L8702 +.L6606: + mov DWORD [edi], 2 + jmp .L9246 +.L1147: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 54 + je .L6608 + jmp .L1005 +.L1150: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + je .L6610 + jmp .L1005 +.L1152: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 52 + je .L6612 + jmp .L1005 +.L1156: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L6613 + test dl, dl + jle .L6615 + cmp dl, 79 + jle .L999 + jmp .L6617 +.L6613: + cmp dl, 112 + je .L6617 + jmp .L999 +.L6615: + mov DWORD [edi], arith_insn + mov DWORD [edi+4], 67607 + jmp .L8695 +.L1158: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L6623 + cmp dl, 116 + jne .L1005 +.L6623: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6625 + test dl, dl + jle .L6627 + cmp dl, 82 + jle .L999 + jmp .L6629 +.L6625: + cmp dl, 115 + je .L6629 + jmp .L999 +.L6627: + mov DWORD [edi], out_insn +.L9225: + mov DWORD [edi+4], 6 + jmp .L8695 +.L6629: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L6634 + cmp dl, 67 + jg .L6635 + cmp dl, 66 + jmp .L8687 +.L6635: + cmp dl, 68 + jle .L6639 + cmp dl, 86 + jle .L1005 + jmp .L6641 +.L6634: + cmp dl, 99 + jg .L6643 + cmp dl, 98 +.L8687: + jne .L1005 + jmp .L6642 +.L6643: + cmp dl, 100 + jle .L6639 + cmp dl, 119 + je .L6641 + jmp .L1005 +.L6642: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 28161 + jmp .L8695 +.L6641: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1076993 + jmp .L8695 +.L6639: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2125569 + jmp .L9186 +.L6617: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6657 + cmp dl, 68 + je .L6659 + cmp dl, 82 + jle .L1005 + jmp .L6661 +.L6657: + cmp dl, 100 + jg .L6663 + cmp dl, 99 + jle .L1005 + jmp .L6659 +.L6663: + cmp dl, 115 + je .L6661 + jmp .L1005 +.L6659: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6706689 + jmp .L9151 +.L6661: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 22017 + jmp .L9152 +.L6612: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L6674 +.L9267: + push ebx + push DWORD LC17 + jmp .L8698 +.L6674: + mov DWORD [edi], 3 +.L9244: + mov DWORD [edi+4], 64 + jmp .L8701 +.L6610: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 3 +.L9245: + mov DWORD [edi+4], 32 + jmp .L8701 +.L6608: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 3 +.L9246: + mov DWORD [edi+4], 16 +.L8701: + mov eax, 2 + jmp .L926 +.L1132: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6678 + cmp dl, 115 + je .L6678 + jmp .L1005 +.L1135: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 4 + jmp .L8697 +.L1137: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 47 + jle .L1005 + cmp dl, 55 + jg .L1005 + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + movsx eax, BYTE [ebx+2] + sub eax, 48 + or eax, 176 + jmp .L9201 +.L6678: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L6685 + cmp dl, 116 + jne .L1005 +.L6685: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], test_insn +.L9222: + mov DWORD [edi+4], 20 + jmp .L8695 +.L1072: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L6691 + cmp dl, 120 + je .L6691 + jmp .L1005 +.L1075: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L6693 + cmp dl, 67 + jg .L6694 + cmp dl, 66 + jmp .L8660 +.L6694: + cmp dl, 68 + jle .L6699 + cmp dl, 81 + jle .L1005 + jmp .L6701 +.L6693: + cmp dl, 99 + jg .L6703 + cmp dl, 98 +.L8660: + je .L6696 + jmp .L1005 +.L6703: + cmp dl, 100 + jle .L6699 + cmp dl, 114 + je .L6701 + jmp .L1005 +.L1078: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6708 + cmp dl, 76 + je .L6710 + cmp dl, 82 + jle .L1005 + jmp .L6712 +.L6708: + cmp dl, 108 + jg .L6714 + cmp dl, 107 + jle .L1005 + jmp .L6710 +.L6714: + cmp dl, 115 + je .L6712 + jmp .L1005 +.L1081: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + jg .L6718 + cmp dl, 75 + jg .L6719 + cmp dl, 72 + je .L6721 + jmp .L1005 +.L6719: + cmp dl, 76 + jle .L6724 + cmp dl, 77 + jle .L6726 + cmp dl, 78 + jle .L1005 + jmp .L6728 +.L6718: + cmp dl, 108 + jg .L6730 + cmp dl, 104 + je .L6721 + cmp dl, 107 + jle .L1005 + jmp .L6724 +.L6730: + cmp dl, 109 + jle .L6726 + cmp dl, 111 + je .L6728 + jmp .L1005 +.L1084: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + jg .L6736 + cmp dl, 69 + je .L6738 + cmp dl, 72 + jle .L1005 + jmp .L6740 +.L6736: + cmp dl, 101 + jg .L6742 + cmp dl, 100 + jle .L1005 + jmp .L6738 +.L6742: + cmp dl, 105 + je .L6740 + jmp .L1005 +.L1087: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L6747 + cmp dl, 109 + je .L6747 + jmp .L1005 +.L1090: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L6750 + cmp dl, 114 + je .L6750 + jmp .L1005 +.L1093: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 50 + ja .L1005 + jmp DWORD [.L6775+eax*4] + [section .rodata] + [align 4] + [align 4] +.L6775: + dd .L6755 + dd .L1005 + dd .L6758 + dd .L6761 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L6764 + dd .L6767 + dd .L6770 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L6773 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L6755 + dd .L1005 + dd .L6758 + dd .L6761 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L6764 + dd .L6767 + dd .L6770 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L6773 + [section .text] +.L1096: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L6777 + cmp dl, 100 + je .L6777 + jmp .L1005 +.L1099: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + je .L6780 + cmp dl, 117 + je .L6780 + jmp .L1005 +.L1102: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6782 + cmp dl, 73 + jg .L6783 + cmp dl, 67 + je .L6785 + cmp dl, 72 + jmp .L8689 +.L6783: + cmp dl, 79 + je .L6790 + cmp dl, 82 + jle .L1005 + jmp .L6792 +.L6782: + cmp dl, 105 + jg .L6794 + cmp dl, 99 + je .L6785 + cmp dl, 104 +.L8689: + jle .L1005 + jmp .L6787 +.L6794: + cmp dl, 111 + jg .L6798 + cmp dl, 110 + jle .L1005 + jmp .L6790 +.L6798: + cmp dl, 115 + je .L6792 + jmp .L1005 +.L1105: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L6802 + cmp dl, 81 + jg .L6803 + cmp dl, 65 + jmp .L8659 +.L6803: + cmp dl, 82 + jle .L6808 + cmp dl, 83 + jle .L1005 + jmp .L6810 +.L6802: + cmp dl, 113 + jg .L6812 + cmp dl, 97 +.L8659: + je .L6805 + jmp .L1005 +.L6812: + cmp dl, 114 + jle .L6808 + cmp dl, 116 + je .L6810 + jmp .L1005 +.L1108: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L6817 + cmp dl, 78 + je .L6819 + cmp dl, 82 + jle .L1005 + jmp .L6821 +.L6817: + cmp dl, 110 + jg .L6823 + cmp dl, 109 + jle .L1005 + jmp .L6819 +.L6823: + cmp dl, 115 + je .L6821 + jmp .L1005 +.L1111: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + jg .L6827 + cmp dl, 69 + jg .L6828 + cmp dl, 65 + jg .L6829 + test dl, dl + jle .L6831 + cmp dl, 64 + jle .L999 + jmp .L6833 +.L6829: + cmp dl, 67 + je .L6836 + cmp dl, 68 + jle .L999 + jmp .L6838 +.L6828: + cmp dl, 80 + jg .L6840 + cmp dl, 73 + je .L6842 + jmp .L999 +.L6840: + cmp dl, 81 + jle .L6845 + cmp dl, 83 + jle .L999 + cmp dl, 84 + jle .L6848 + jmp .L6849 +.L6827: + cmp dl, 104 + jg .L6851 + cmp dl, 98 + jg .L6852 + cmp dl, 97 + je .L6833 + jmp .L999 +.L6852: + cmp dl, 99 + jle .L6836 + cmp dl, 101 + je .L6838 + jmp .L999 +.L6851: + cmp dl, 113 + jg .L6858 + cmp dl, 105 + jle .L6842 + cmp dl, 112 + jle .L999 + jmp .L6845 +.L6858: + cmp dl, 115 + jle .L999 + cmp dl, 116 + jle .L6848 + cmp dl, 117 + jle .L6849 + jmp .L999 +.L6831: + mov DWORD [edi], 25604 + jmp .L8700 +.L1114: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6866 + cmp dl, 115 + je .L6866 + jmp .L1005 +.L1117: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L6869 + cmp dl, 99 + je .L6869 + jmp .L1005 +.L1120: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L6872 + cmp dl, 97 + je .L6872 + jmp .L1005 +.L1123: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L6874 + cmp dl, 67 + jg .L6875 + cmp dl, 65 + je .L6877 + cmp dl, 66 + jmp .L8688 +.L6875: + cmp dl, 81 + jle .L1005 + cmp dl, 82 + jle .L6883 + cmp dl, 83 + jle .L6885 + jmp .L6886 +.L6874: + cmp dl, 99 + jg .L6888 + cmp dl, 97 + je .L6877 + cmp dl, 98 +.L8688: + jle .L1005 + jmp .L6879 +.L6888: + cmp dl, 114 + jg .L6892 + cmp dl, 113 + jle .L1005 + jmp .L6883 +.L6892: + cmp dl, 115 + jle .L6885 + cmp dl, 116 + jle .L6886 + jmp .L1005 +.L1126: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L6898 + cmp dl, 108 + jne .L1005 +.L6898: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + jne .L1005 + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L6902 + cmp dl, 120 + jne .L1005 +.L6902: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L6904 + test dl, dl + jle .L6906 + cmp dl, 79 + jle .L999 + jmp .L6908 +.L6904: + cmp dl, 112 + je .L6908 + jmp .L999 +.L6906: + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14283009 + jmp .L9136 +.L6908: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 49 + jne .L1005 + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14285057 + jmp .L9136 +.L6879: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 72 + je .L6918 + cmp dl, 104 + je .L6918 + jmp .L1005 +.L6877: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L6921 + cmp dl, 109 + je .L6921 + jmp .L1005 +.L6886: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L6924 + cmp dl, 114 + je .L6924 + jmp .L1005 +.L6885: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L6927 + cmp dl, 97 + je .L6927 + jmp .L1005 +.L6883: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L6930 + cmp dl, 115 + jne .L1005 +.L6930: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L6933 + cmp dl, 116 + jne .L1005 +.L6933: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L6936 + cmp dl, 111 + jne .L1005 +.L6936: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L6939 + cmp dl, 114 + jne .L1005 +.L6939: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 17804801 + jmp .L9130 +.L6927: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L6945 + cmp dl, 118 + jne .L1005 +.L6945: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L6948 + cmp dl, 101 + jne .L1005 +.L6948: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 1027585 + jmp .L9130 +.L6924: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L6954 + cmp dl, 97 + jne .L1005 +.L6954: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L6957 + cmp dl, 99 + jne .L1005 +.L6957: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L6960 + cmp dl, 116 + jne .L1005 +.L6960: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14283777 + jmp .L9136 +.L6921: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14279937 + jmp .L9136 +.L6918: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fxch_insn + mov DWORD [edi+4], 4 + jmp .L9136 +.L6872: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L6972 + cmp dl, 105 + jne .L1005 +.L6972: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L6975 + cmp dl, 116 + jne .L1005 +.L6975: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 39681 + jmp .L9136 +.L6869: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L6981 + cmp dl, 111 + jne .L1005 +.L6981: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L6984 + cmp dl, 109 + jne .L1005 +.L6984: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L6986 + cmp dl, 72 + jg .L6987 + test dl, dl + jg .L999 + jmp .L6994 +.L6987: + cmp dl, 73 + jle .L6991 + cmp dl, 79 + jle .L999 + jmp .L6993 +.L6986: + cmp dl, 105 + jg .L6995 + cmp dl, 104 + jle .L999 + jmp .L6991 +.L6995: + cmp dl, 112 + je .L6993 + jmp .L999 +.L6994: + mov DWORD [edi], fcom2_insn + mov DWORD [edi+4], 14540802 + jmp .L9078 +.L6991: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7001 + test dl, dl + jle .L7003 + cmp dl, 79 + jle .L999 + jmp .L7005 +.L7001: + cmp dl, 112 + je .L7005 + jmp .L999 +.L7003: + mov DWORD [edi], fcom2_insn + mov DWORD [edi+4], 14411778 + jmp .L9130 +.L6993: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7010 + test dl, dl + jle .L7012 + cmp dl, 79 + jle .L999 + jmp .L7014 +.L7010: + cmp dl, 112 + je .L7014 + jmp .L999 +.L7012: + mov DWORD [edi], fcom2_insn + mov DWORD [edi+4], 14542850 + jmp .L9078 +.L7014: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14346497 + jmp .L9078 +.L7005: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fcom2_insn + mov DWORD [edi+4], 14673922 + jmp .L9130 +.L6866: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7026 + cmp dl, 116 + jne .L1005 +.L7026: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14279681 + jmp .L9136 +.L6848: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L7031 + cmp dl, 68 + jg .L7032 + test dl, dl + jle .L7034 + cmp dl, 67 + je .L7036 + jmp .L999 +.L7032: + cmp dl, 79 + jg .L7038 + cmp dl, 69 + jle .L7040 + jmp .L999 +.L7038: + cmp dl, 80 + jle .L7043 + cmp dl, 82 + jle .L999 + jmp .L7045 +.L7031: + cmp dl, 101 + jg .L7047 + cmp dl, 99 + je .L7036 + cmp dl, 100 + jle .L999 + jmp .L7040 +.L7047: + cmp dl, 112 + jg .L7051 + cmp dl, 111 + jle .L999 + jmp .L7043 +.L7051: + cmp dl, 115 + je .L7045 + jmp .L999 +.L7034: + mov DWORD [edi], fst_insn + mov DWORD [edi+4], 3 + jmp .L9136 +.L6849: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L7058 + cmp dl, 98 + je .L7058 + jmp .L1005 +.L6845: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L7061 + cmp dl, 114 + je .L7061 + jmp .L1005 +.L6842: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L7064 + cmp dl, 110 + je .L7064 + jmp .L1005 +.L6836: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L7067 + cmp dl, 97 + je .L7067 + jmp .L1005 +.L6833: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L7070 + cmp dl, 118 + je .L7070 + jmp .L1005 +.L6838: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7073 + cmp dl, 116 + jne .L1005 +.L7073: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L7076 + cmp dl, 112 + jne .L1005 +.L7076: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L7079 + cmp dl, 109 + jne .L1005 +.L7079: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14410753 + mov DWORD [edi+8], 4198402 + jmp .L8696 +.L7070: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7085 + cmp dl, 101 + jne .L1005 +.L7085: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 110877953 + jmp .L9136 +.L7067: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L7091 + cmp dl, 108 + jne .L1005 +.L7091: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7094 + cmp dl, 101 + jne .L1005 +.L7094: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14286081 + jmp .L9136 +.L7064: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + jg .L7099 + test dl, dl + jle .L7101 + cmp dl, 66 + jle .L999 + jmp .L7103 +.L7099: + cmp dl, 99 + je .L7103 + jmp .L999 +.L7101: + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14286337 + jmp .L9078 +.L7103: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L7109 + cmp dl, 111 + jne .L1005 +.L7109: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L7112 + cmp dl, 115 + jne .L1005 +.L7112: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14285569 + jmp .L9078 +.L7061: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7118 + cmp dl, 116 + jne .L1005 +.L7118: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14285313 + jmp .L9136 +.L7058: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L7123 + cmp dl, 79 + jg .L7124 + test dl, dl + jg .L999 + jmp .L7131 +.L7124: + cmp dl, 80 + jle .L7128 + cmp dl, 81 + jle .L999 + jmp .L7130 +.L7123: + cmp dl, 112 + jg .L7132 + cmp dl, 111 + jle .L999 + jmp .L7128 +.L7132: + cmp dl, 114 + je .L7130 + jmp .L999 +.L7131: + mov DWORD [edi], farith_insn + mov DWORD [edi+4], 81848326 + jmp .L9136 +.L7128: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], farithp_insn + mov DWORD [edi+4], 59395 + jmp .L9136 +.L7130: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7141 + test dl, dl + jle .L7143 + cmp dl, 79 + jle .L999 + jmp .L7145 +.L7141: + cmp dl, 112 + je .L7145 + jmp .L999 +.L7143: + mov DWORD [edi], farith_insn + mov DWORD [edi+4], 99147782 + jmp .L9136 +.L7145: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], farithp_insn + mov DWORD [edi+4], 57347 + jmp .L9136 +.L7036: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L7154 + cmp dl, 119 + je .L7154 + jmp .L1005 +.L7040: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L7157 + cmp dl, 110 + je .L7157 + jmp .L1005 +.L7043: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fldstp_insn + mov DWORD [edi+4], 117692420 + jmp .L9136 +.L7045: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L7163 + cmp dl, 119 + jne .L1005 +.L7163: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fstsw_insn + jmp .L9247 +.L7157: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L7169 + cmp dl, 118 + jne .L1005 +.L7169: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 110876929 + jmp .L9136 +.L7154: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fstcw_insn + mov DWORD [edi+4], 1 + jmp .L9136 +.L6819: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L7178 + cmp dl, 100 + je .L7178 + jmp .L1005 +.L6821: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7181 + cmp dl, 116 + jne .L1005 +.L7181: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L7184 + cmp dl, 111 + jne .L1005 +.L7184: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L7187 + cmp dl, 114 + jne .L1005 +.L7187: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebytemem_insn + mov DWORD [edi+4], 318721 + jmp .L9136 +.L7178: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L7193 + cmp dl, 105 + jne .L1005 +.L7193: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L7196 + cmp dl, 110 + jne .L1005 +.L7196: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7199 + cmp dl, 116 + jne .L1005 +.L7199: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14285825 + jmp .L9136 +.L6810: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L7205 + cmp dl, 97 + je .L7205 + jmp .L1005 +.L6805: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7208 + cmp dl, 116 + je .L7208 + jmp .L1005 +.L6808: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7211 + cmp dl, 101 + jne .L1005 +.L7211: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L7214 + cmp dl, 109 + jne .L1005 +.L7214: + inc ecx + mov dl, BYTE [ecx] + test dl, dl + jle .L7217 + cmp dl, 49 + je .L7219 + jmp .L999 +.L7217: + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14284801 + jmp .L9136 +.L7219: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14284033 + jmp .L9078 +.L7208: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L7226 + cmp dl, 97 + jne .L1005 +.L7226: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L7229 + cmp dl, 110 + jne .L1005 +.L7229: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14283521 + jmp .L9136 +.L7205: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L7235 + cmp dl, 110 + jne .L1005 +.L7235: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14283265 + jmp .L9136 +.L6787: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L7241 + cmp dl, 110 + je .L7241 + jmp .L1005 +.L6792: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L7243 + cmp dl, 65 + je .L7245 + cmp dl, 83 + jle .L1005 + jmp .L7247 +.L7243: + cmp dl, 97 + jg .L7249 + cmp dl, 96 + jle .L1005 + jmp .L7245 +.L7249: + cmp dl, 116 + je .L7247 + jmp .L1005 +.L6785: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L7254 + cmp dl, 108 + je .L7254 + jmp .L1005 +.L6790: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L7257 + cmp dl, 112 + jne .L1005 +.L7257: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14274561 + jmp .L9136 +.L7254: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7263 + cmp dl, 101 + jne .L1005 +.L7263: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L7266 + cmp dl, 120 + jne .L1005 +.L7266: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14410241 + jmp .L9136 +.L7245: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L7272 + cmp dl, 118 + je .L7272 + jmp .L1005 +.L7247: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L7274 + cmp dl, 68 + jg .L7275 + cmp dl, 67 + jmp .L8690 +.L7275: + cmp dl, 69 + jle .L7279 + cmp dl, 82 + jle .L1005 + jmp .L7281 +.L7274: + cmp dl, 100 + jg .L7283 + cmp dl, 99 +.L8690: + jne .L1005 + jmp .L7282 +.L7283: + cmp dl, 101 + jle .L7279 + cmp dl, 115 + je .L7281 + jmp .L1005 +.L7282: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L7289 + cmp dl, 119 + je .L7289 + jmp .L1005 +.L7281: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L7292 + cmp dl, 119 + je .L7292 + jmp .L1005 +.L7279: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L7295 + cmp dl, 110 + jne .L1005 +.L7295: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L7298 + cmp dl, 118 + jne .L1005 +.L7298: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebytemem_insn + mov DWORD [edi+4], 448769 + jmp .L9136 +.L7292: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fnstsw_insn +.L9247: + mov DWORD [edi+4], 2 + jmp .L9136 +.L7289: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fldnstcw_insn + mov DWORD [edi+4], 1793 + jmp .L9136 +.L7272: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7310 + cmp dl, 101 + jne .L1005 +.L7310: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebytemem_insn + mov DWORD [edi+4], 449793 + jmp .L9136 +.L7241: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L7316 + cmp dl, 105 + jne .L1005 +.L7316: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7319 + cmp dl, 116 + jne .L1005 +.L7319: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14410497 + jmp .L9136 +.L6780: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L7325 + cmp dl, 108 + jne .L1005 +.L7325: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7327 + test dl, dl + jle .L7329 + cmp dl, 79 + jle .L999 + jmp .L7331 +.L7327: + cmp dl, 112 + je .L7331 + jmp .L999 +.L7329: + mov DWORD [edi], farith_insn + mov DWORD [edi+4], 29935622 + jmp .L9136 +.L7331: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], farithp_insn + mov DWORD [edi+4], 51203 + jmp .L9136 +.L6777: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 89 + jg .L7339 + cmp dl, 68 + jg .L7340 + cmp dl, 49 + jg .L7341 + test dl, dl + jle .L7343 + cmp dl, 48 + jle .L999 + jmp .L7345 +.L7341: + cmp dl, 67 + je .L7348 + jmp .L999 +.L7340: + cmp dl, 76 + jg .L7350 + cmp dl, 69 + jle .L7352 + cmp dl, 75 + jle .L999 + jmp .L7354 +.L7350: + cmp dl, 80 + je .L7357 + jmp .L999 +.L7339: + cmp dl, 107 + jg .L7359 + cmp dl, 99 + jg .L7360 + cmp dl, 90 + jle .L7362 + cmp dl, 98 + jle .L999 + jmp .L7348 +.L7360: + cmp dl, 101 + je .L7352 + jmp .L999 +.L7359: + cmp dl, 112 + jg .L7367 + cmp dl, 108 + jle .L7354 + cmp dl, 111 + jle .L999 + jmp .L7357 +.L7367: + cmp dl, 122 + je .L7362 + jmp .L999 +.L7343: + mov DWORD [edi], fldstp_insn + mov DWORD [edi+4], 83935236 + jmp .L9136 +.L7345: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14280705 + jmp .L9136 +.L7348: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L7378 + cmp dl, 119 + je .L7378 + jmp .L1005 +.L7352: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L7381 + cmp dl, 110 + je .L7381 + jmp .L1005 +.L7354: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + jg .L7383 + cmp dl, 50 + jg .L7384 + cmp dl, 49 + jle .L1005 + jmp .L7386 +.L7384: + cmp dl, 71 + je .L7389 + jmp .L1005 +.L7383: + cmp dl, 103 + jg .L7391 + cmp dl, 78 + jle .L7393 + cmp dl, 102 + jle .L1005 + jmp .L7389 +.L7391: + cmp dl, 110 + je .L7393 + jmp .L1005 +.L7357: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L7398 + cmp dl, 105 + je .L7398 + jmp .L1005 +.L7362: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14282241 + jmp .L9136 +.L7398: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14281473 + jmp .L9136 +.L7386: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L7406 + cmp dl, 69 + je .L7408 + cmp dl, 83 + jle .L1005 + jmp .L7410 +.L7406: + cmp dl, 101 + jg .L7412 + cmp dl, 100 + jle .L1005 + jmp .L7408 +.L7412: + cmp dl, 116 + je .L7410 + jmp .L1005 +.L7389: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + je .L7417 + jmp .L1005 +.L7393: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 50 + jne .L1005 + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14281985 + jmp .L9136 +.L7417: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14281729 + jmp .L9136 +.L7408: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14281217 + jmp .L9136 +.L7410: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14280961 + jmp .L9136 +.L7381: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L7432 + cmp dl, 118 + jne .L1005 +.L7432: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebytemem_insn + mov DWORD [edi+4], 317697 + jmp .L9136 +.L7378: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fldnstcw_insn + mov DWORD [edi+4], 1281 + jmp .L9136 +.L6764: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L7441 + cmp dl, 100 + je .L7441 + jmp .L1005 +.L6773: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + jg .L7443 + cmp dl, 83 + jle .L1005 + cmp dl, 84 + jle .L7446 + jmp .L7447 +.L7443: + cmp dl, 115 + jle .L1005 + cmp dl, 116 + jle .L7446 + cmp dl, 117 + jle .L7447 + jmp .L1005 +.L6758: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L7453 + cmp dl, 111 + je .L7453 + jmp .L1005 +.L6755: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L7456 + cmp dl, 100 + je .L7456 + jmp .L1005 +.L6767: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + je .L7459 + cmp dl, 117 + je .L7459 + jmp .L1005 +.L6761: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L7462 + cmp dl, 105 + je .L7462 + jmp .L1005 +.L6770: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + jg .L7464 + cmp dl, 67 + je .L7466 + cmp dl, 72 + jle .L1005 + jmp .L7468 +.L7464: + cmp dl, 99 + jg .L7470 + cmp dl, 98 + jle .L1005 + jmp .L7466 +.L7470: + cmp dl, 105 + je .L7468 + jmp .L1005 +.L7466: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L7475 + cmp dl, 115 + je .L7475 + jmp .L1005 +.L7468: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7478 + cmp dl, 116 + jne .L1005 +.L7478: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], threebyte_insn + mov DWORD [edi+4], -1730419967 + jmp .L9136 +.L7475: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7484 + cmp dl, 116 + jne .L1005 +.L7484: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L7487 + cmp dl, 112 + jne .L1005 +.L7487: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14284545 + jmp .L9136 +.L7462: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L7493 + cmp dl, 118 + jne .L1005 +.L7493: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L7495 + test dl, dl + jle .L7497 + cmp dl, 81 + jle .L999 + jmp .L7499 +.L7495: + cmp dl, 114 + je .L7499 + jmp .L999 +.L7497: + mov DWORD [edi], fiarith_insn + mov DWORD [edi+4], 449026 + jmp .L9136 +.L7499: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fiarith_insn + mov DWORD [edi+4], 514562 + jmp .L9136 +.L7459: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L7508 + cmp dl, 108 + jne .L1005 +.L7508: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fiarith_insn + mov DWORD [edi+4], 121346 + jmp .L9136 +.L7456: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L7514 + cmp dl, 100 + jne .L1005 +.L7514: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fiarith_insn + mov DWORD [edi+4], 55810 + jmp .L9136 +.L7453: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L7520 + cmp dl, 109 + jne .L1005 +.L7520: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7522 + test dl, dl + jle .L7524 + cmp dl, 79 + jle .L999 + jmp .L7526 +.L7522: + cmp dl, 112 + je .L7526 + jmp .L999 +.L7524: + mov DWORD [edi], fiarith_insn + mov DWORD [edi+4], 186882 + jmp .L9136 +.L7526: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fiarith_insn + mov DWORD [edi+4], 252418 + jmp .L9136 +.L7446: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7534 + test dl, dl + jle .L7536 + cmp dl, 79 + jle .L999 + jmp .L7538 +.L7534: + cmp dl, 112 + je .L7538 + jmp .L999 +.L7536: + mov DWORD [edi], fiarith_insn + mov DWORD [edi+4], 187138 + jmp .L9136 +.L7447: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L7544 + cmp dl, 98 + jne .L1005 +.L7544: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L7546 + test dl, dl + jle .L7548 + cmp dl, 81 + jle .L999 + jmp .L7550 +.L7546: + cmp dl, 114 + je .L7550 + jmp .L999 +.L7548: + mov DWORD [edi], fiarith_insn + mov DWORD [edi+4], 317954 + jmp .L9136 +.L7550: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fiarith_insn + mov DWORD [edi+4], 383490 + jmp .L9136 +.L7538: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fildstp_insn + mov DWORD [edi+4], 459523 + jmp .L9136 +.L7441: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fildstp_insn + mov DWORD [edi+4], 327683 + jmp .L9136 +.L6750: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7565 + cmp dl, 101 + jne .L1005 +.L7565: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7568 + cmp dl, 101 + jne .L1005 +.L7568: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7570 + test dl, dl + jle .L7572 + cmp dl, 79 + jle .L999 + jmp .L7574 +.L7570: + cmp dl, 112 + je .L7574 + jmp .L999 +.L7572: + mov DWORD [edi], ffree_insn + mov DWORD [edi+4], 56577 + jmp .L9136 +.L7574: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ffree_insn + mov DWORD [edi+4], 57089 + mov DWORD [edi+8], 2101280 + jmp .L8696 +.L6747: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L7583 + cmp dl, 109 + jne .L1005 +.L7583: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L7586 + cmp dl, 115 + jne .L1005 +.L7586: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 986625 +.L8826: + mov DWORD [edi+8], 65536 + jmp .L8696 +.L6740: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L7592 + cmp dl, 118 + je .L7592 + jmp .L1005 +.L6738: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L7595 + cmp dl, 99 + jne .L1005 +.L7595: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L7598 + cmp dl, 115 + jne .L1005 +.L7598: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7601 + cmp dl, 116 + jne .L1005 +.L7601: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L7604 + cmp dl, 112 + jne .L1005 +.L7604: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14284289 + jmp .L9136 +.L7592: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L7609 + cmp dl, 79 + jg .L7610 + test dl, dl + jg .L999 + jmp .L7617 +.L7610: + cmp dl, 80 + jle .L7614 + cmp dl, 81 + jle .L999 + jmp .L7616 +.L7609: + cmp dl, 112 + jg .L7618 + cmp dl, 111 + jle .L999 + jmp .L7614 +.L7618: + cmp dl, 114 + je .L7616 + jmp .L999 +.L7617: + mov DWORD [edi], farith_insn + mov DWORD [edi+4], 116455430 + jmp .L9136 +.L7614: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], farithp_insn + mov DWORD [edi+4], 63491 + jmp .L9136 +.L7616: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7627 + test dl, dl + jle .L7629 + cmp dl, 79 + jle .L999 + jmp .L7631 +.L7627: + cmp dl, 112 + je .L7631 + jmp .L999 +.L7629: + mov DWORD [edi], farith_insn + mov DWORD [edi+4], 133754886 + jmp .L9136 +.L7631: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], farithp_insn + mov DWORD [edi+4], 61443 + jmp .L9136 +.L6728: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L7639 + cmp dl, 77 + je .L7641 + cmp dl, 82 + jle .L1005 + jmp .L7643 +.L7639: + cmp dl, 109 + jg .L7645 + cmp dl, 108 + jle .L1005 + jmp .L7641 +.L7645: + cmp dl, 115 + je .L7643 + jmp .L1005 +.L6721: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L7650 + cmp dl, 115 + je .L7650 + jmp .L1005 +.L6724: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7653 + cmp dl, 101 + je .L7653 + jmp .L1005 +.L6726: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + je .L7656 + cmp dl, 111 + jne .L1005 +.L7656: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 86 + je .L7659 + cmp dl, 118 + jne .L1005 +.L7659: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 85 + jg .L7661 + cmp dl, 69 + jg .L7662 + cmp dl, 66 + je .L7664 + cmp dl, 68 + jmp .L8691 +.L7662: + cmp dl, 78 + je .L7669 + cmp dl, 84 + jle .L1005 + jmp .L7671 +.L7661: + cmp dl, 101 + jg .L7673 + cmp dl, 98 + je .L7664 + cmp dl, 100 +.L8691: + jle .L1005 + jmp .L7666 +.L7673: + cmp dl, 110 + jg .L7677 + cmp dl, 109 + jle .L1005 + jmp .L7669 +.L7677: + cmp dl, 117 + je .L7671 + jmp .L1005 +.L7664: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L7681 + test dl, dl + jle .L7683 + cmp dl, 68 + jle .L999 + jmp .L7685 +.L7681: + cmp dl, 101 + je .L7685 + jmp .L999 +.L7683: + mov DWORD [edi], fcmovcc_insn + mov DWORD [edi+4], 14336001 + jmp .L9130 +.L7666: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fcmovcc_insn + mov DWORD [edi+4], 14338049 + jmp .L9130 +.L7669: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L7693 + cmp dl, 66 + je .L7695 + cmp dl, 68 + jle .L1005 + jmp .L7697 +.L7693: + cmp dl, 98 + jg .L7699 + cmp dl, 97 + jle .L1005 + jmp .L7695 +.L7699: + cmp dl, 101 + je .L7697 + jmp .L1005 +.L7671: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fcmovcc_insn + mov DWORD [edi+4], 14342145 + jmp .L9130 +.L7695: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L7706 + test dl, dl + jle .L7708 + cmp dl, 68 + jle .L999 + jmp .L7710 +.L7706: + cmp dl, 101 + je .L7710 + jmp .L999 +.L7708: + mov DWORD [edi], fcmovcc_insn + mov DWORD [edi+4], 14401537 + jmp .L9130 +.L7697: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fcmovcc_insn + mov DWORD [edi+4], 14403585 + jmp .L9130 +.L7710: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fcmovcc_insn + mov DWORD [edi+4], 14405633 + jmp .L9130 +.L7685: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fcmovcc_insn + mov DWORD [edi+4], 14340097 + jmp .L9130 +.L7653: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L7725 + cmp dl, 120 + jne .L1005 +.L7725: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], threebyte_insn + mov DWORD [edi+4], -1730420223 + jmp .L9136 +.L7650: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14278657 + jmp .L9136 +.L7641: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7733 + cmp dl, 72 + jg .L7734 + test dl, dl + jg .L999 + jmp .L7741 +.L7734: + cmp dl, 73 + jle .L7738 + cmp dl, 79 + jle .L999 + jmp .L7740 +.L7733: + cmp dl, 105 + jg .L7742 + cmp dl, 104 + jle .L999 + jmp .L7738 +.L7742: + cmp dl, 112 + je .L7740 + jmp .L999 +.L7741: + mov DWORD [edi], fcom_insn + mov DWORD [edi+4], 184324 + jmp .L9136 +.L7643: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14286593 +.L9078: + mov DWORD [edi+8], 4098 + jmp .L8696 +.L7740: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7751 + test dl, dl + jle .L7753 + cmp dl, 79 + jle .L999 + jmp .L7755 +.L7751: + cmp dl, 112 + je .L7755 + jmp .L999 +.L7753: + mov DWORD [edi], fcom_insn + mov DWORD [edi+4], 251908 + jmp .L9136 +.L7738: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7760 + test dl, dl + jle .L7762 + cmp dl, 79 + jle .L999 + jmp .L7764 +.L7760: + cmp dl, 112 + je .L7764 + jmp .L999 +.L7762: + mov DWORD [edi], fcom2_insn + mov DWORD [edi+4], 14413826 + jmp .L9130 +.L7764: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fcom2_insn + mov DWORD [edi+4], 14675970 +.L9130: + mov DWORD [edi+8], 4128 + jmp .L8696 +.L7755: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14604545 + jmp .L9136 +.L6710: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L7776 + cmp dl, 100 + je .L7776 + jmp .L1005 +.L6712: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7779 + cmp dl, 116 + jne .L1005 +.L7779: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L7782 + cmp dl, 112 + jne .L1005 +.L7782: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fbldstp_insn + mov DWORD [edi+4], 1537 + jmp .L9136 +.L7776: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], fbldstp_insn + mov DWORD [edi+4], 1025 + jmp .L9136 +.L6701: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 3 + jmp .L8697 +.L6699: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L7792 + cmp dl, 100 + je .L7792 + jmp .L1005 +.L6696: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L7795 + cmp dl, 115 + jne .L1005 +.L7795: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14278913 + jmp .L9136 +.L7792: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + jg .L7800 + test dl, dl + jle .L7802 + cmp dl, 79 + jle .L999 + jmp .L7804 +.L7800: + cmp dl, 112 + je .L7804 + jmp .L999 +.L7802: + mov DWORD [edi], farith_insn + mov DWORD [edi+4], 12632070 + jmp .L9136 +.L7804: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], farithp_insn + mov DWORD [edi+4], 49155 + jmp .L9136 +.L6691: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 77 + je .L7813 + cmp dl, 109 + jne .L1005 +.L7813: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 49 + jne .L1005 + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 14282753 +.L9136: + mov DWORD [edi+8], 4096 + jmp .L8696 +.L1016: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L7819 + cmp dl, 75 + jg .L7820 + cmp dl, 72 + jmp .L8658 +.L7820: + cmp dl, 76 + jle .L7825 + cmp dl, 81 + jle .L1005 + jmp .L7827 +.L7819: + cmp dl, 107 + jg .L7829 + cmp dl, 104 +.L8658: + je .L7822 + jmp .L1005 +.L7829: + cmp dl, 108 + jle .L7825 + cmp dl, 114 + je .L7827 + jmp .L1005 +.L1019: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L7835 + cmp dl, 98 + je .L7835 + jmp .L1005 +.L1022: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L7838 + cmp dl, 97 + je .L7838 + jmp .L1005 +.L1025: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7841 + cmp dl, 116 + je .L7841 + jmp .L1005 +.L1028: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7844 + cmp dl, 101 + je .L7844 + jmp .L1005 +.L1031: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L7847 + cmp dl, 100 + je .L7847 + jmp .L1005 +.L1034: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 76 + cmp eax, 41 + ja .L1005 + jmp DWORD [.L7863+eax*4] + [section .rodata] + [align 4] + [align 4] +.L7863: + dd .L7852 + dd .L1005 + dd .L1005 + dd .L7855 + dd .L1005 + dd .L1005 + dd .L7858 + dd .L1005 + dd .L1005 + dd .L7861 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L7852 + dd .L1005 + dd .L1005 + dd .L7855 + dd .L1005 + dd .L1005 + dd .L7858 + dd .L1005 + dd .L1005 + dd .L7861 + [section .text] +.L1037: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + jg .L7864 + cmp dl, 67 + jg .L7865 + test dl, dl + jg .L999 + jmp .L7872 +.L7865: + cmp dl, 68 + jle .L7869 + cmp dl, 75 + jle .L999 + jmp .L7871 +.L7864: + cmp dl, 100 + jg .L7873 + cmp dl, 99 + jle .L999 + jmp .L7869 +.L7873: + cmp dl, 108 + je .L7871 + jmp .L999 +.L7872: + mov DWORD [edi], 54 + jmp .L8699 +.L1040: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L7878 + cmp dl, 100 + je .L7878 + jmp .L1005 +.L1043: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L7880 + cmp dl, 73 + je .L7882 + cmp dl, 82 + jle .L1005 + jmp .L7884 +.L7880: + cmp dl, 105 + jg .L7886 + cmp dl, 104 + jle .L1005 + jmp .L7882 +.L7886: + cmp dl, 115 + je .L7884 + jmp .L1005 +.L1046: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + jg .L7890 + test dl, dl + jle .L7892 + cmp dl, 75 + jle .L999 + jmp .L7894 +.L7890: + cmp dl, 108 + je .L7894 + jmp .L999 +.L7892: + mov DWORD [edi], 52 + jmp .L8699 +.L1049: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L7898 + cmp dl, 114 + je .L7898 + jmp .L1005 +.L1052: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L7901 + push ebx + push DWORD LC16 + push esi + push DWORD 0 + call yasm__warning + add esp, 16 +.L7901: + mov DWORD [edi], 13826 +.L8700: + mov eax, 4 + jmp .L926 +.L1055: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 48 + cmp eax, 66 + ja .L1005 + jmp DWORD [.L7931+eax*4] + [section .rodata] + [align 4] + [align 4] +.L7931: + dd .L7911 + dd .L7911 + dd .L7911 + dd .L7911 + dd .L7911 + dd .L7911 + dd .L7911 + dd .L7911 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L7914 + dd .L7917 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L7920 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L7923 + dd .L1005 + dd .L7926 + dd .L1005 + dd .L1005 + dd .L7929 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L7914 + dd .L7917 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L7920 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L7923 + dd .L1005 + dd .L7926 + dd .L1005 + dd .L1005 + dd .L7929 + [section .text] +.L1058: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 66 + je .L7933 + cmp dl, 98 + je .L7933 + jmp .L1005 +.L1061: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L7935 + cmp dl, 75 + jg .L7936 + cmp dl, 68 + jmp .L8657 +.L7936: + cmp dl, 76 + jle .L7941 + cmp dl, 83 + jle .L1005 + jmp .L7943 +.L7935: + cmp dl, 107 + jg .L7945 + cmp dl, 100 +.L8657: + je .L7938 + jmp .L1005 +.L7945: + cmp dl, 108 + jle .L7941 + cmp dl, 116 + je .L7943 + jmp .L1005 +.L1064: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L7951 + cmp dl, 97 + je .L7951 + jmp .L1005 +.L1067: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L7954 + cmp dl, 115 + jne .L1005 +.L7954: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + jg .L7956 + cmp dl, 68 + jg .L7957 + cmp dl, 67 + jmp .L8692 +.L7957: + cmp dl, 69 + jle .L7961 + cmp dl, 81 + jle .L1005 + jmp .L7963 +.L7956: + cmp dl, 100 + jg .L7965 + cmp dl, 99 +.L8692: + jne .L1005 + jmp .L7964 +.L7965: + cmp dl, 101 + jle .L7961 + cmp dl, 114 + je .L7963 + jmp .L1005 +.L7964: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 65 + je .L7971 + cmp dl, 97 + je .L7971 + jmp .L1005 +.L7961: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + jg .L7973 + cmp dl, 78 + je .L7975 + cmp dl, 87 + jle .L1005 + jmp .L7977 +.L7973: + cmp dl, 110 + jg .L7979 + cmp dl, 109 + jle .L1005 + jmp .L7975 +.L7979: + cmp dl, 120 + je .L7977 + jmp .L1005 +.L7963: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L7984 + cmp dl, 101 + jne .L1005 +.L7984: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7987 + cmp dl, 116 + jne .L1005 +.L7987: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 984833 + mov DWORD [edi+8], 8650784 + jmp .L8696 +.L7975: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7993 + cmp dl, 116 + je .L7993 + jmp .L1005 +.L7977: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 73 + je .L7996 + cmp dl, 105 + jne .L1005 +.L7996: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L7999 + cmp dl, 116 + jne .L1005 +.L7999: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 996609 + mov DWORD [edi+8], 8388640 + jmp .L8696 +.L7993: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L8008 + cmp dl, 101 + jne .L1005 +.L8008: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L8011 + cmp dl, 114 + jne .L1005 +.L8011: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 996353 +.L9010: + mov DWORD [edi+8], 32 + jmp .L8696 +.L7971: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L8020 + cmp dl, 108 + jne .L1005 +.L8020: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L8023 + cmp dl, 108 + jne .L1005 +.L8023: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 984321 + mov DWORD [edi+8], 262176 + jmp .L8696 +.L7951: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L8029 + cmp dl, 112 + jne .L1005 +.L8029: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 71 + je .L8032 + cmp dl, 103 + jne .L1005 +.L8032: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L8035 + cmp dl, 115 + jne .L1005 +.L8035: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], threebyte_insn + mov DWORD [edi+4], 251787265 + jmp .L9148 +.L7938: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L8042 + cmp dl, 99 + je .L8042 + jmp .L1005 +.L7941: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L8045 + cmp dl, 100 + je .L8045 + jmp .L1005 +.L7943: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L8048 + cmp dl, 115 + jne .L1005 +.L8048: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixsmm_insn + mov DWORD [edi+4], 31745 + jmp .L9141 +.L8045: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L8054 + cmp dl, 116 + jne .L1005 +.L8054: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], cyrixsmm_insn + mov DWORD [edi+4], 31233 + jmp .L9141 +.L8042: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], svdc_insn +.L9257: + mov DWORD [edi+4], 1 +.L9141: + mov DWORD [edi+8], 655368 + jmp .L8696 +.L7933: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L8062 + cmp dl, 79 + jg .L8063 + test dl, dl + jg .L999 + jmp .L8070 +.L8063: + cmp dl, 80 + jle .L8067 + cmp dl, 82 + jle .L999 + jmp .L8069 +.L8062: + cmp dl, 112 + jg .L8071 + cmp dl, 111 + jle .L999 + jmp .L8067 +.L8071: + cmp dl, 115 + je .L8069 + jmp .L999 +.L8070: + mov DWORD [edi], arith_insn + mov DWORD [edi+4], 337943 + jmp .L8695 +.L8067: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L8077 + cmp dl, 68 + je .L8079 + cmp dl, 82 + jle .L1005 + jmp .L8081 +.L8077: + cmp dl, 100 + jg .L8083 + cmp dl, 99 + jle .L1005 + jmp .L8079 +.L8083: + cmp dl, 115 + je .L8081 + jmp .L1005 +.L8069: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L8087 + cmp dl, 68 + je .L8089 + cmp dl, 82 + jle .L1005 + jmp .L8091 +.L8087: + cmp dl, 100 + jg .L8092 + cmp dl, 99 + jle .L1005 + jmp .L8089 +.L8092: + cmp dl, 115 + jne .L1005 +.L8091: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15948801 + jmp .L9152 +.L8089: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15883265 + jmp .L9151 +.L8081: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 23553 + jmp .L9152 +.L8079: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6708225 + jmp .L9151 +.L7911: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + movsx eax, BYTE [ebx+2] + sub eax, 48 + or eax, 96 +.L9201: + mov DWORD [edi], eax + jmp .L8699 +.L7914: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 63745 + jmp .L8695 +.L7917: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 64769 + jmp .L8695 +.L7920: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 64257 + jmp .L8695 +.L7926: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L8119 + cmp dl, 115 + je .L8119 + jmp .L1005 +.L7929: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], str_insn + mov DWORD [edi+4], 4 +.L9031: + mov DWORD [edi+8], 1048578 + jmp .L8696 +.L7923: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 88 + je .L8125 + cmp dl, 120 + jne .L1005 +.L8125: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L8128 + cmp dl, 99 + jne .L1005 +.L8128: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L8131 + cmp dl, 115 + jne .L1005 +.L8131: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L8134 + cmp dl, 114 + jne .L1005 +.L8134: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ldstmxcsr_insn +.L9264: + mov DWORD [edi+4], 769 + jmp .L9152 +.L8119: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L8139 + cmp dl, 68 + jg .L8140 + cmp dl, 66 + je .L8142 + cmp dl, 67 + jmp .L8693 +.L8140: + cmp dl, 81 + je .L8147 + cmp dl, 86 + jle .L1005 + jmp .L8149 +.L8139: + cmp dl, 100 + jg .L8151 + cmp dl, 98 + je .L8142 + cmp dl, 99 +.L8693: + jle .L1005 + jmp .L8144 +.L8151: + cmp dl, 113 + jg .L8155 + cmp dl, 112 + jle .L1005 + jmp .L8147 +.L8155: + cmp dl, 119 + je .L8149 + jmp .L1005 +.L8142: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 43521 + jmp .L8695 +.L8149: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1092353 + jmp .L8695 +.L8144: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2140929 + jmp .L9186 +.L8147: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9214 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4238081 + jmp .L9148 +.L7898: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L8173 + cmp dl, 116 + jne .L1005 +.L8173: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L8175 + cmp dl, 80 + je .L8177 + cmp dl, 82 + jle .L1005 + jmp .L8179 +.L8175: + cmp dl, 112 + jg .L8181 + cmp dl, 111 + jle .L1005 + jmp .L8177 +.L8181: + cmp dl, 115 + je .L8179 + jmp .L1005 +.L8177: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L8185 + cmp dl, 68 + je .L8187 + cmp dl, 82 + jle .L1005 + jmp .L8189 +.L8185: + cmp dl, 100 + jg .L8191 + cmp dl, 99 + jle .L1005 + jmp .L8187 +.L8191: + cmp dl, 115 + je .L8189 + jmp .L1005 +.L8179: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L8195 + cmp dl, 68 + je .L8197 + cmp dl, 82 + jle .L1005 + jmp .L8199 +.L8195: + cmp dl, 100 + jg .L8201 + cmp dl, 99 + jle .L1005 + jmp .L8197 +.L8201: + cmp dl, 115 + je .L8199 + jmp .L1005 +.L8197: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15880449 + jmp .L9151 +.L8199: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 15945985 + jmp .L9152 +.L8187: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssess_insn + mov DWORD [edi+4], 6705409 + jmp .L9151 +.L8189: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sseps_insn + mov DWORD [edi+4], 20737 + jmp .L9152 +.L7894: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L9215 + mov DWORD [edi], 36 + jmp .L8699 +.L7884: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + je .L8220 + cmp dl, 119 + je .L8220 + jmp .L1005 +.L7882: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + jg .L8222 + test dl, dl + jle .L8224 + cmp dl, 77 + jle .L999 + jmp .L8226 +.L8222: + cmp dl, 110 + je .L8226 + jmp .L999 +.L8224: + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 61697 +.L9016: + mov DWORD [edi+8], 2097156 + jmp .L8696 +.L8226: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L8232 + cmp dl, 116 + jne .L1005 +.L8232: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + jg .L8234 + test dl, dl + jle .L8236 + cmp dl, 78 + jle .L999 + jmp .L8238 +.L8234: + cmp dl, 111 + je .L8238 + jmp .L999 +.L8236: + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 997377 + mov DWORD [edi+8], 131104 + jmp .L8696 +.L8238: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 76 + je .L8244 + cmp dl, 108 + jne .L1005 +.L8244: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + je .L8247 + cmp dl, 100 + jne .L1005 +.L8247: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobyte_insn + mov DWORD [edi+4], 1015297 + mov DWORD [edi+8], 4325384 + jmp .L8696 +.L8220: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sldtmsw_insn + mov DWORD [edi+4], 262406 + jmp .L9153 +.L7878: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L8256 + cmp dl, 116 + jne .L1005 +.L8256: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], sldtmsw_insn + mov DWORD [edi+4], 6 +.L9153: + mov DWORD [edi+8], 2 + jmp .L8696 +.L7871: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L8262 +.L9215: + push ebx + push DWORD LC15 + jmp .L8698 +.L8262: + mov DWORD [edi], 38 +.L8699: + mov eax, 3 + jmp .L926 +.L7869: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L8264 + cmp dl, 116 + jne .L1005 +.L8264: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 17760513 + jmp .L9154 +.L7855: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L8270 + cmp dl, 114 + je .L8270 + jmp .L1005 +.L7852: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + jg .L8272 + test dl, dl + jle .L8603 + cmp dl, 67 + jle .L999 + jmp .L8276 +.L8272: + cmp dl, 100 + je .L8276 + jmp .L999 +.L8274: +.L7858: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 68 + jg .L8281 + test dl, dl + jle .L8283 + cmp dl, 67 + jle .L999 + jmp .L8285 +.L8281: + cmp dl, 100 + je .L8285 + jmp .L999 +.L8283: + mov DWORD [edi], shift_insn + mov DWORD [edi+4], 1288 + jmp .L8695 +.L7861: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 70 + je .L8291 + cmp dl, 102 + jne .L1005 +.L8291: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 80 + je .L8294 + cmp dl, 112 + jne .L1005 +.L8294: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + jg .L8296 + cmp dl, 68 + je .L8298 + cmp dl, 82 + jle .L1005 + jmp .L8300 +.L8296: + cmp dl, 100 + jg .L8302 + cmp dl, 99 + jle .L1005 + jmp .L8298 +.L8302: + cmp dl, 115 + je .L8300 + jmp .L1005 +.L8298: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssessimm_insn + mov DWORD [edi+4], 6735361 +.L9151: + mov DWORD [edi+8], 32768 + jmp .L8696 +.L8300: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], ssepsimm_insn + mov DWORD [edi+4], 50689 +.L9152: + mov DWORD [edi+8], 16384 + jmp .L8696 +.L8285: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], shlrd_insn + mov DWORD [edi+4], 44038 + jmp .L9186 +.L8276: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], shlrd_insn + mov DWORD [edi+4], 41990 + jmp .L9186 +.L8270: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L8319 + cmp dl, 116 + jne .L1005 +.L8319: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 2 + jmp .L8697 +.L7847: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + je .L8323 + cmp dl, 116 + jne .L1005 +.L8323: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], twobytemem_insn + mov DWORD [edi+4], 983297 +.L9154: + mov DWORD [edi+8], 8388610 + jmp .L8696 +.L7844: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 78 + je .L8329 + cmp dl, 110 + jne .L1005 +.L8329: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + je .L8332 + cmp dl, 99 + jne .L1005 +.L8332: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + je .L8335 + cmp dl, 101 + jne .L1005 +.L8335: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], threebyte_insn + mov DWORD [edi+4], 263124993 +.L9024: + mov DWORD [edi+8], 64 + jmp .L8696 +.L7841: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 57 + ja .L1005 + jmp DWORD [.L8375+eax*4] + [section .rodata] + [align 4] + [align 4] +.L8375: + dd .L8343 + dd .L8346 + dd .L8488 + dd .L1005 + dd .L8373 + dd .L1005 + dd .L8355 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8358 + dd .L1005 + dd .L8361 + dd .L8364 + dd .L8367 + dd .L1005 + dd .L1005 + dd .L8370 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8373 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8343 + dd .L8346 + dd .L8488 + dd .L1005 + dd .L8373 + dd .L1005 + dd .L8355 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8358 + dd .L1005 + dd .L8361 + dd .L8364 + dd .L8367 + dd .L1005 + dd .L1005 + dd .L8370 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8373 + [section .text] +.L8343: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L8376 + test dl, dl + jle .L9213 + cmp dl, 68 + jle .L999 + jmp .L8380 +.L8376: + cmp dl, 101 + je .L8380 + jmp .L999 +.L8378: +.L8346: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L8385 + test dl, dl + jle .L9212 + cmp dl, 68 + jle .L999 + jmp .L8389 +.L8385: + cmp dl, 101 + je .L8389 + jmp .L999 +.L8387: +.L8349: +.L8352: +.L8355: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L8400 + test dl, dl + jle .L9210 + cmp dl, 68 + jle .L999 + jmp .L8404 +.L8400: + cmp dl, 101 + je .L8404 + jmp .L999 +.L8402: +.L8358: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L8409 + test dl, dl + jle .L9209 + cmp dl, 68 + jle .L999 + jmp .L8413 +.L8409: + cmp dl, 101 + je .L8413 + jmp .L999 +.L8411: +.L8361: + inc ecx + mov dl, BYTE [ecx] + movsx eax, dl + sub eax, 65 + cmp eax, 57 + ja .L1005 + jmp DWORD [.L8450+eax*4] + [section .rodata] + [align 4] + [align 4] +.L8450: + dd .L8421 + dd .L8424 + dd .L8380 + dd .L1005 + dd .L8448 + dd .L1005 + dd .L8433 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8436 + dd .L1005 + dd .L1005 + dd .L8439 + dd .L8442 + dd .L1005 + dd .L1005 + dd .L8445 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8448 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8421 + dd .L8424 + dd .L8380 + dd .L1005 + dd .L8448 + dd .L1005 + dd .L8433 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8436 + dd .L1005 + dd .L1005 + dd .L8439 + dd .L8442 + dd .L1005 + dd .L1005 + dd .L8445 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L1005 + dd .L8448 + [section .text] +.L8364: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 1 + jmp .L9186 +.L8367: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 79 + jg .L8454 + cmp dl, 68 + jg .L8455 + test dl, dl + jmp .L9266 +.L8455: + cmp dl, 69 + jle .L8459 + cmp dl, 78 + jle .L999 + jmp .L8442 +.L8454: + cmp dl, 101 + jg .L8463 + cmp dl, 100 + jle .L999 + jmp .L8459 +.L8463: + cmp dl, 111 + je .L8442 + jmp .L999 +.L8370: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 2049 + jmp .L9186 +.L8373: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 1025 + jmp .L9186 +.L8459: + inc ecx + cmp BYTE [ecx], 0 +.L9266: + jg .L999 + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 2561 + jmp .L9186 +.L8461: +.L8439: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 257 + jmp .L9186 +.L8421: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L8484 + test dl, dl + jle .L9206 + cmp dl, 68 + jle .L999 + jmp .L8488 +.L8484: + cmp dl, 101 + je .L8488 + jmp .L999 +.L8486: +.L8424: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L8493 + test dl, dl + jle .L9205 + cmp dl, 68 + jle .L999 + jmp .L8497 +.L8493: + cmp dl, 101 + je .L8497 + jmp .L999 +.L8495: +.L8427: +.L8430: +.L8448: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 1281 + jmp .L9186 +.L8445: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 2305 + jmp .L9186 +.L8442: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 2817 + jmp .L9186 +.L8433: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L8517 + test dl, dl + jle .L9203 + cmp dl, 68 + jle .L999 + jmp .L8521 +.L8517: + cmp dl, 101 + je .L8521 + jmp .L999 +.L8519: +.L8436: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 69 + jg .L8526 + test dl, dl + jle .L9202 + cmp dl, 68 + jle .L999 + jmp .L8530 +.L8526: + cmp dl, 101 + jne .L999 +.L8528: +.L8530: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9210: + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 3841 + jmp .L9186 +.L8521: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9209: + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 3073 + jmp .L9186 +.L8497: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9213: + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 1793 + jmp .L9186 +.L8488: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9212: + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 513 + jmp .L9186 +.L8413: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9203: + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 3585 + jmp .L9186 +.L8404: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9202: + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 3329 + jmp .L9186 +.L8389: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9206: + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 1537 + jmp .L9186 +.L8380: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 +.L9205: + mov DWORD [edi], setcc_insn + mov DWORD [edi+4], 769 + jmp .L9186 +.L7838: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 83 + je .L8560 + cmp dl, 115 + jne .L1005 +.L8560: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 87 + jg .L8562 + cmp dl, 68 + jg .L8563 + cmp dl, 66 + je .L8565 + cmp dl, 67 + jmp .L8694 +.L8563: + cmp dl, 81 + je .L8570 + cmp dl, 86 + jle .L1005 + jmp .L8572 +.L8562: + cmp dl, 100 + jg .L8574 + cmp dl, 98 + je .L8565 + cmp dl, 99 +.L8694: + jle .L1005 + jmp .L8567 +.L8574: + cmp dl, 113 + jg .L8578 + cmp dl, 112 + jle .L1005 + jmp .L8570 +.L8578: + cmp dl, 119 + je .L8572 + jmp .L1005 +.L8565: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 44545 + jmp .L8695 +.L8572: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 1093377 + jmp .L8695 +.L8567: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 2141953 +.L9186: + mov DWORD [edi+8], 4 + jmp .L8696 +.L8570: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L8592 +.L9214: + push ebx + push DWORD LC13 +.L8698: + push esi + push DWORD 0 + call yasm__warning +.L8702: + mov eax, 0 + jmp .L926 +.L8592: + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 4239105 +.L9148: + mov DWORD [edi+8], 16779264 + jmp .L8696 +.L7835: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], arith_insn + mov DWORD [edi+4], 202775 + jmp .L8695 +.L7822: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 70 + je .L8599 + cmp dl, 102 + je .L8599 + jmp .L1005 +.L7825: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 67 + jg .L8601 + test dl, dl + jle .L8603 + cmp dl, 66 + jle .L999 + jmp .L8605 +.L8601: + cmp dl, 99 + je .L8605 + jmp .L999 +.L8603: + mov DWORD [edi], shift_insn + mov DWORD [edi+4], 1032 + jmp .L8695 +.L7827: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], shift_insn + mov DWORD [edi+4], 1800 + jmp .L8695 +.L8605: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + je .L9187 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 54785 + mov DWORD [edi+8], 2097152 + jmp .L8696 +.L8599: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + cmp BYTE [yasm_x86_LTX_mode_bits], 64 + jne .L8620 +.L9187: + sub esp, 4 + push ebx + push DWORD LC14 + push esi + call yasm__error + mov DWORD [edi], not64_insn + mov DWORD [edi+4], 1 + mov DWORD [edi+8], 33554432 + add esp, 16 + jmp .L8696 +.L8620: + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 40449 + jmp .L8695 +.L1003: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 71 + jg .L8625 + cmp dl, 65 + je .L8627 + cmp dl, 70 + jle .L1005 + jmp .L8629 +.L8625: + cmp dl, 97 + jg .L8631 + cmp dl, 96 + jle .L1005 + jmp .L8627 +.L8631: + cmp dl, 103 + je .L8629 + jmp .L1005 +.L1006: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 84 + jg .L8635 + cmp dl, 80 + je .L8637 + cmp dl, 83 + jle .L1005 + jmp .L8639 +.L8635: + cmp dl, 112 + jg .L8640 + cmp dl, 111 + jle .L1005 + jmp .L8637 +.L8640: + cmp dl, 116 + jne .L1005 +.L8639: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], f6_insn + mov DWORD [edi+4], 516 + jmp .L8695 +.L8637: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], onebyte_insn + mov DWORD [edi+4], 36865 + jmp .L8695 +.L8627: + inc ecx + mov dl, BYTE [ecx] + cmp dl, 82 + je .L8651 + cmp dl, 114 + je .L8651 + jmp .L1005 +.L8629: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], f6_insn + mov DWORD [edi+4], 772 +.L8695: + mov DWORD [edi+8], 0 +.L8696: + mov eax, 1 + jmp .L926 +.L8651: + inc ecx + cmp BYTE [ecx], 0 + jg .L999 + mov DWORD [edi], 1 +.L8697: + mov eax, 5 +.L926: + lea esp, [ebp-12] + pop ebx + pop esi + pop edi + leave + ret +.Lfe4: + ;.size yasm_x86__parse_check_id,.Lfe4-yasm_x86__parse_check_id + ;.ident "GCC: (GNU) 3.2.3" diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf-x86id.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf-x86id.hex new file mode 100644 index 0000000000..7effd0fdff --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf-x86id.hex @@ -0,0 +1,145800 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +38 +02 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +09 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +55 +89 +e5 +57 +56 +53 +83 +ec +4c +8b +55 +08 +8b +42 +04 +0f +b6 +f0 +8b +1a +c1 +e8 +08 +89 +45 +c4 +8b +7d +20 +89 +7d +c8 +8b +45 +10 +8b +38 +83 +7f +04 +04 +74 +1b +83 +ec +04 +68 +a0 +34 +00 +00 +68 +07 +06 +00 +00 +68 +bb +34 +00 +00 +ff +15 +00 +00 +00 +00 +83 +c4 +10 +8b +55 +14 +8b +42 +10 +25 +00 +0e +00 +00 +3d +00 +06 +00 +00 +75 +54 +ff +75 +20 +83 +ec +08 +ff +77 +08 +e8 +fc +ff +ff +ff +89 +04 +24 +e8 +fc +ff +ff +ff +83 +c4 +0c +50 +83 +ec +08 +ff +75 +20 +6a +00 +83 +ec +04 +ff +77 +08 +e8 +fc +ff +ff +ff +83 +c4 +08 +50 +6a +19 +e8 +fc +ff +ff +ff +83 +c4 +14 +50 +e8 +fc +ff +ff +ff +83 +c4 +08 +50 +6a +1b +e8 +fc +ff +ff +ff +89 +45 +cc +83 +c4 +10 +eb +06 +8b +47 +08 +89 +45 +cc +83 +ec +0c +ff +75 +20 +6a +00 +ff +75 +1c +ff +75 +18 +68 +d7 +34 +00 +00 +e8 +fc +ff +ff +ff +89 +45 +d0 +c6 +45 +e0 +00 +83 +c4 +20 +8b +7d +14 +8b +47 +10 +25 +00 +0e +00 +00 +3d +00 +04 +00 +00 +74 +19 +3d +00 +04 +00 +00 +7f +09 +3d +00 +02 +00 +00 +74 +14 +eb +3c +3d +00 +06 +00 +00 +74 +14 +eb +33 +c7 +45 +d4 +03 +00 +00 +00 +eb +31 +c7 +45 +d4 +04 +00 +00 +00 +eb +28 +c7 +45 +d4 +05 +00 +00 +00 +8a +43 +09 +88 +45 +e0 +8a +43 +0a +88 +45 +e1 +8a +43 +0b +88 +45 +e2 +8a +43 +0c +88 +45 +e3 +eb +07 +c7 +45 +d4 +00 +00 +00 +00 +8b +55 +14 +8a +42 +08 +88 +45 +e5 +80 +7a +0e +01 +76 +26 +8b +52 +14 +89 +d0 +25 +00 +f0 +00 +00 +3d +00 +90 +00 +00 +75 +15 +89 +d0 +25 +e0 +00 +00 +00 +c1 +e8 +05 +8a +80 +98 +34 +00 +00 +88 +45 +e4 +eb +04 +c6 +45 +e4 +00 +8b +45 +14 +f6 +40 +05 +01 +74 +06 +8a +55 +c4 +88 +55 +e4 +c6 +45 +d8 +00 +c6 +45 +dc +00 +85 +f6 +0f +8e +14 +01 +00 +00 +8a +0d +00 +00 +00 +00 +8b +3d +00 +00 +00 +00 +89 +7d +b4 +8a +45 +e5 +88 +45 +c3 +8b +03 +89 +c2 +8b +7d +08 +0b +57 +08 +f7 +c2 +00 +00 +00 +01 +74 +09 +80 +f9 +40 +0f +85 +c8 +00 +00 +00 +f7 +c2 +00 +00 +00 +02 +74 +09 +80 +f9 +40 +0f +84 +b7 +00 +00 +00 +81 +e2 +ff +ff +ff +fc +8b +45 +b4 +21 +d0 +39 +d0 +0f +85 +a4 +00 +00 +00 +80 +7b +0e +00 +0f +84 +9a +00 +00 +00 +8b +53 +10 +89 +d0 +25 +00 +f0 +00 +00 +3d +00 +80 +00 +00 +0f +85 +85 +00 +00 +00 +8a +45 +c3 +38 +43 +08 +75 +7d +89 +d0 +25 +00 +0e +00 +00 +3d +00 +02 +00 +00 +74 +2d +3d +00 +04 +00 +00 +75 +68 +8a +43 +09 +88 +45 +d8 +8a +53 +0a +88 +55 +d9 +8a +43 +0b +88 +45 +da +8a +43 +0c +88 +45 +db +f6 +43 +04 +10 +74 +4a +03 +55 +c4 +88 +55 +d9 +eb +42 +8a +43 +09 +88 +45 +dc +8a +43 +0a +88 +45 +dd +8a +53 +0b +88 +55 +de +8a +43 +0c +88 +45 +df +f6 +43 +04 +04 +74 +06 +03 +55 +c4 +88 +55 +de +8b +43 +10 +25 +00 +00 +03 +00 +3d +00 +00 +03 +00 +75 +0f +c6 +45 +e0 +01 +0f +b6 +43 +09 +8a +44 +18 +0a +88 +45 +e1 +4e +83 +c3 +1c +85 +f6 +7e +14 +80 +7d +d8 +00 +0f +84 +0b +ff +ff +ff +80 +7d +dc +00 +0f +84 +01 +ff +ff +ff +83 +ec +0c +8d +45 +c8 +50 +e8 +fc +ff +ff +ff +8d +65 +f4 +5b +5e +5f +c9 +c3 +55 +89 +e5 +57 +56 +53 +83 +ec +4c +8b +55 +08 +8b +42 +04 +8b +1a +89 +c1 +c1 +e9 +08 +89 +4d +bc +c7 +45 +b8 +00 +00 +00 +00 +25 +ff +00 +00 +00 +89 +45 +c0 +0f +8e +0c +05 +00 +00 +c7 +45 +b0 +00 +00 +00 +00 +8b +03 +89 +c2 +8b +4d +08 +0b +51 +08 +f7 +c2 +00 +00 +00 +01 +74 +0d +80 +3d +00 +00 +00 +00 +40 +0f +85 +ce +04 +00 +00 +f7 +c2 +00 +00 +00 +02 +74 +0d +80 +3d +00 +00 +00 +00 +40 +0f +84 +b9 +04 +00 +00 +81 +e2 +ff +ff +ff +fc +89 +d0 +23 +05 +00 +00 +00 +00 +39 +d0 +0f +85 +a3 +04 +00 +00 +0f +b6 +43 +0e +39 +45 +0c +0f +85 +96 +04 +00 +00 +83 +7d +10 +00 +0f +84 +af +04 +00 +00 +c7 +45 +b4 +00 +00 +00 +00 +8b +45 +10 +8b +38 +85 +ff +0f +84 +72 +04 +00 +00 +0f +b6 +43 +0e +39 +45 +b4 +0f +8d +65 +04 +00 +00 +83 +7d +b0 +00 +0f +85 +61 +04 +00 +00 +8b +55 +b4 +8b +44 +93 +10 +83 +e0 +1f +83 +f8 +15 +0f +87 +29 +03 +00 +00 +ff +24 +85 +64 +36 +00 +00 +83 +7f +04 +04 +e9 +0e +03 +00 +00 +83 +7f +04 +03 +0f +84 +2a +03 +00 +00 +83 +7f +04 +01 +0f +85 +fc +02 +00 +00 +8b +47 +08 +83 +e0 +f0 +83 +f8 +30 +0f +84 +11 +03 +00 +00 +83 +f8 +30 +77 +11 +83 +f8 +10 +0f +84 +03 +03 +00 +00 +83 +f8 +20 +e9 +d5 +02 +00 +00 +83 +f8 +50 +0f +84 +f2 +02 +00 +00 +83 +f8 +50 +77 +08 +83 +f8 +40 +e9 +bf +02 +00 +00 +83 +f8 +60 +e9 +b7 +02 +00 +00 +83 +7f +04 +03 +e9 +ae +02 +00 +00 +83 +7f +04 +03 +0f +84 +ca +02 +00 +00 +83 +7f +04 +01 +0f +85 +9c +02 +00 +00 +8b +47 +08 +83 +e0 +f0 +83 +f8 +70 +0f +84 +b1 +02 +00 +00 +3d +80 +00 +00 +00 +e9 +81 +02 +00 +00 +83 +7f +04 +02 +e9 +78 +02 +00 +00 +83 +7f +04 +01 +0f +85 +70 +02 +00 +00 +8b +47 +08 +83 +e0 +f0 +3d +90 +00 +00 +00 +e9 +5e +02 +00 +00 +83 +7f +04 +01 +0f +85 +56 +02 +00 +00 +8b +47 +08 +83 +e0 +f0 +3d +a0 +00 +00 +00 +e9 +44 +02 +00 +00 +83 +7f +04 +01 +0f +85 +3c +02 +00 +00 +8b +47 +08 +83 +e0 +f0 +3d +b0 +00 +00 +00 +e9 +2a +02 +00 +00 +83 +7f +04 +01 +0f +85 +22 +02 +00 +00 +83 +7f +08 +60 +e9 +17 +02 +00 +00 +83 +7f +04 +01 +0f +85 +0f +02 +00 +00 +8b +4d +b4 +8b +44 +8b +10 +25 +e0 +00 +00 +00 +83 +f8 +20 +75 +10 +83 +7f +08 +10 +74 +0a +83 +7f +08 +20 +0f +85 +ee +01 +00 +00 +8b +55 +b4 +8b +44 +93 +10 +25 +e0 +00 +00 +00 +83 +f8 +40 +75 +0a +83 +7f +08 +30 +0f +85 +d3 +01 +00 +00 +8b +4d +b4 +8b +44 +8b +10 +25 +e0 +00 +00 +00 +83 +f8 +60 +75 +0a +83 +7f +08 +40 +0f +85 +b8 +01 +00 +00 +8b +55 +b4 +8b +44 +93 +10 +25 +e0 +00 +00 +00 +3d +80 +00 +00 +00 +0f +85 +c5 +01 +00 +00 +83 +7f +08 +50 +e9 +96 +01 +00 +00 +83 +7f +04 +01 +0f +85 +8e +01 +00 +00 +8b +4d +b4 +8b +44 +8b +10 +25 +e0 +00 +00 +00 +83 +f8 +20 +75 +10 +83 +7f +08 +11 +74 +0a +83 +7f +08 +21 +0f +85 +6d +01 +00 +00 +8b +55 +b4 +8b +44 +93 +10 +25 +e0 +00 +00 +00 +83 +f8 +40 +75 +0a +83 +7f +08 +31 +0f +85 +52 +01 +00 +00 +8b +4d +b4 +8b +44 +8b +10 +25 +e0 +00 +00 +00 +83 +f8 +60 +75 +0a +83 +7f +08 +41 +0f +85 +37 +01 +00 +00 +8b +55 +b4 +8b +44 +93 +10 +25 +e0 +00 +00 +00 +3d +80 +00 +00 +00 +0f +85 +44 +01 +00 +00 +83 +7f +08 +51 +e9 +15 +01 +00 +00 +83 +7f +04 +01 +0f +85 +0d +01 +00 +00 +8b +4d +b4 +8b +44 +8b +10 +25 +e0 +00 +00 +00 +83 +f8 +20 +75 +10 +83 +7f +08 +12 +74 +0a +83 +7f +08 +22 +0f +85 +ec +00 +00 +00 +8b +55 +b4 +8b +44 +93 +10 +25 +e0 +00 +00 +00 +83 +f8 +40 +75 +0a +83 +7f +08 +32 +0f +85 +d1 +00 +00 +00 +8b +4d +b4 +8b +44 +8b +10 +25 +e0 +00 +00 +00 +83 +f8 +60 +75 +0a +83 +7f +08 +42 +0f +85 +b6 +00 +00 +00 +8b +55 +b4 +8b +44 +93 +10 +25 +e0 +00 +00 +00 +3d +80 +00 +00 +00 +0f +85 +c3 +00 +00 +00 +83 +7f +08 +52 +e9 +94 +00 +00 +00 +83 +7f +04 +02 +0f +85 +8c +00 +00 +00 +8b +47 +08 +83 +e0 +0f +83 +f8 +01 +eb +7f +83 +7f +04 +02 +75 +7b +8b +47 +08 +83 +e0 +0f +83 +f8 +03 +eb +6e +83 +7f +04 +02 +75 +6a +f6 +47 +08 +0f +eb +62 +83 +7f +04 +02 +75 +5e +8b +47 +08 +83 +e0 +0f +83 +f8 +04 +eb +51 +83 +7f +04 +02 +75 +4d +8b +47 +08 +83 +e0 +0f +83 +f8 +05 +eb +40 +83 +7f +04 +02 +75 +3c +8b +47 +08 +83 +e0 +0f +83 +f8 +02 +eb +2f +83 +7f +04 +01 +75 +2b +81 +7f +08 +94 +00 +00 +00 +eb +20 +83 +7f +04 +03 +75 +1c +83 +ec +08 +6a +01 +ff +77 +08 +e8 +fc +ff +ff +ff +89 +04 +24 +e8 +fc +ff +ff +ff +83 +c4 +10 +85 +c0 +74 +24 +c7 +45 +b0 +01 +00 +00 +00 +eb +1b +83 +ec +04 +68 +00 +35 +00 +00 +68 +39 +07 +00 +00 +68 +bb +34 +00 +00 +ff +15 +00 +00 +00 +00 +83 +c4 +10 +83 +7d +b0 +00 +0f +85 +00 +01 +00 +00 +8b +4d +b4 +8b +44 +8b +10 +25 +e0 +00 +00 +00 +c1 +e8 +05 +8b +34 +85 +e0 +34 +00 +00 +83 +7f +04 +01 +75 +18 +83 +7f +10 +00 +75 +12 +83 +ec +0c +ff +77 +08 +e8 +fc +ff +ff +ff +83 +c4 +10 +39 +f0 +eb +1c +8b +45 +b4 +f6 +44 +83 +11 +01 +74 +0f +85 +f6 +74 +17 +39 +77 +10 +74 +12 +83 +7f +10 +00 +eb +03 +39 +77 +10 +74 +07 +c7 +45 +b0 +01 +00 +00 +00 +83 +7d +b0 +00 +0f +85 +9d +00 +00 +00 +8b +55 +b4 +8b +44 +93 +10 +25 +00 +0e +00 +00 +3d +00 +04 +00 +00 +74 +30 +3d +00 +04 +00 +00 +7f +0d +85 +c0 +74 +19 +3d +00 +02 +00 +00 +74 +18 +eb +37 +3d +00 +06 +00 +00 +74 +1b +3d +00 +08 +00 +00 +74 +1a +eb +27 +83 +7f +0c +00 +eb +16 +83 +7f +0c +01 +eb +10 +83 +7f +0c +02 +eb +0a +83 +7f +0c +03 +eb +04 +83 +7f +0c +04 +74 +24 +c7 +45 +b0 +01 +00 +00 +00 +eb +1b +83 +ec +04 +68 +15 +35 +00 +00 +68 +6b +07 +00 +00 +68 +bb +34 +00 +00 +ff +15 +00 +00 +00 +00 +83 +c4 +10 +8b +3f +ff +45 +b4 +85 +ff +74 +15 +0f +b6 +43 +0e +39 +45 +b4 +7d +0c +83 +7d +b0 +00 +0f +84 +a7 +fb +ff +ff +eb +06 +83 +7d +b0 +00 +74 +23 +ff +4d +c0 +83 +c3 +1c +83 +7d +c0 +00 +7e +0c +83 +7d +b8 +00 +0f +84 +f6 +fa +ff +ff +eb +14 +83 +7d +b8 +00 +75 +0e +e9 +31 +04 +00 +00 +c7 +45 +b8 +01 +00 +00 +00 +eb +ec +8b +43 +04 +25 +00 +00 +00 +f0 +3d +00 +00 +00 +10 +74 +1a +3d +00 +00 +00 +10 +7f +0a +85 +c0 +0f +84 +88 +00 +00 +00 +eb +6b +3d +00 +00 +00 +20 +74 +52 +eb +62 +8b +43 +04 +25 +00 +00 +f0 +0f +c1 +e8 +14 +74 +07 +83 +f8 +01 +74 +0c +eb +1f +83 +ec +08 +68 +32 +35 +00 +00 +eb +08 +83 +ec +08 +68 +4c +35 +00 +00 +ff +75 +1c +e8 +fc +ff +ff +ff +e9 +d0 +04 +00 +00 +83 +ec +04 +68 +80 +35 +00 +00 +68 +8a +07 +00 +00 +68 +bb +34 +00 +00 +ff +15 +00 +00 +00 +00 +e9 +b3 +04 +00 +00 +83 +ec +04 +68 +80 +35 +00 +00 +68 +91 +07 +00 +00 +e9 +0d +00 +00 +00 +83 +ec +04 +68 +a0 +35 +00 +00 +68 +95 +07 +00 +00 +68 +bb +34 +00 +00 +ff +15 +00 +00 +00 +00 +83 +c4 +10 +83 +7d +10 +00 +74 +2f +8b +43 +10 +25 +00 +f0 +00 +00 +3d +00 +80 +00 +00 +75 +20 +83 +ec +04 +ff +75 +1c +ff +75 +18 +ff +75 +14 +53 +ff +75 +10 +ff +75 +0c +ff +75 +08 +e8 +23 +f7 +ff +ff +e9 +fa +04 +00 +00 +8b +4d +1c +89 +4d +c8 +c7 +45 +cc +00 +00 +00 +00 +c7 +45 +d0 +00 +00 +00 +00 +8a +43 +08 +88 +45 +d4 +8a +43 +09 +88 +45 +d5 +8a +43 +0a +88 +45 +d6 +8a +43 +0b +88 +45 +d7 +8a +43 +0c +88 +45 +d8 +8a +43 +0d +88 +45 +d9 +80 +3d +00 +00 +00 +00 +40 +75 +0a +80 +7b +08 +40 +75 +04 +b0 +48 +eb +02 +b0 +00 +88 +45 +da +c6 +45 +db +00 +c6 +45 +dc +00 +c6 +45 +dd +00 +c6 +45 +de +00 +f6 +43 +04 +01 +74 +0a +8a +45 +bc +00 +45 +d8 +c1 +6d +bc +08 +f6 +43 +04 +02 +74 +04 +c1 +6d +bc +08 +f6 +43 +04 +04 +74 +0a +8a +55 +bc +00 +55 +d7 +c1 +6d +bc +08 +f6 +43 +04 +08 +74 +04 +c1 +6d +bc +08 +f6 +43 +04 +10 +74 +0a +8a +4d +bc +00 +4d +d6 +c1 +6d +bc +08 +f6 +43 +04 +20 +74 +0a +8a +45 +bc +00 +45 +d9 +c1 +6d +bc +08 +f6 +43 +04 +40 +74 +0a +8a +55 +bc +88 +55 +d4 +c1 +6d +bc +08 +80 +7b +04 +00 +79 +2f +ff +75 +1c +6a +00 +83 +ec +04 +0f +b6 +45 +bc +50 +e8 +fc +ff +ff +ff +89 +04 +24 +e8 +fc +ff +ff +ff +83 +c4 +08 +50 +6a +00 +e8 +fc +ff +ff +ff +89 +45 +d0 +c6 +45 +db +01 +83 +c4 +10 +83 +7d +10 +00 +0f +84 +eb +03 +00 +00 +c7 +45 +b4 +00 +00 +00 +00 +8b +4d +10 +8b +39 +85 +ff +0f +84 +d7 +03 +00 +00 +0f +b6 +43 +0e +39 +45 +b4 +0f +8d +ca +03 +00 +00 +8b +55 +b4 +8b +44 +93 +10 +25 +00 +f0 +00 +00 +3d +00 +30 +00 +00 +0f +84 +90 +01 +00 +00 +3d +00 +30 +00 +00 +7f +2b +3d +00 +10 +00 +00 +0f +84 +98 +00 +00 +00 +3d +00 +10 +00 +00 +7f +09 +85 +c0 +74 +52 +e9 +10 +03 +00 +00 +3d +00 +20 +00 +00 +0f +84 +27 +01 +00 +00 +e9 +00 +03 +00 +00 +3d +00 +50 +00 +00 +0f +84 +fc +01 +00 +00 +3d +00 +50 +00 +00 +7f +10 +3d +00 +40 +00 +00 +0f +84 +81 +01 +00 +00 +e9 +de +02 +00 +00 +3d +00 +60 +00 +00 +0f +84 +24 +02 +00 +00 +3d +00 +70 +00 +00 +0f +84 +3f +02 +00 +00 +e9 +c3 +02 +00 +00 +8b +47 +04 +83 +f8 +03 +74 +13 +83 +f8 +03 +0f +86 +cd +02 +00 +00 +83 +f8 +04 +74 +15 +e9 +c3 +02 +00 +00 +83 +ec +0c +ff +77 +08 +e8 +fc +ff +ff +ff +e9 +b0 +02 +00 +00 +83 +ec +0c +ff +77 +08 +e8 +fc +ff +ff +ff +e9 +a0 +02 +00 +00 +8b +47 +04 +83 +f8 +02 +74 +37 +83 +f8 +02 +77 +0a +83 +f8 +01 +74 +14 +e9 +8c +02 +00 +00 +83 +f8 +03 +74 +3e +83 +f8 +04 +74 +60 +e9 +7d +02 +00 +00 +83 +ec +04 +0f +b6 +05 +00 +00 +00 +00 +50 +8d +45 +da +50 +ff +77 +08 +e8 +fc +ff +ff +ff +eb +63 +83 +ec +04 +68 +a0 +34 +00 +00 +68 +e9 +07 +00 +00 +68 +bb +34 +00 +00 +ff +15 +00 +00 +00 +00 +83 +c4 +10 +8b +57 +08 +89 +55 +cc +8b +4d +b4 +8b +44 +8b +10 +83 +e0 +1f +83 +f8 +15 +0f +85 +30 +02 +00 +00 +83 +ec +0c +52 +e8 +fc +ff +ff +ff +e9 +1f +02 +00 +00 +83 +ec +08 +8b +55 +b4 +8b +44 +93 +10 +25 +e0 +00 +00 +00 +c1 +e8 +05 +ff +34 +85 +e0 +34 +00 +00 +ff +77 +08 +e8 +fc +ff +ff +ff +89 +45 +cc +e9 +f6 +01 +00 +00 +83 +7f +04 +04 +75 +24 +8b +47 +08 +89 +45 +d0 +8b +4d +b4 +8b +44 +8b +10 +25 +e0 +00 +00 +00 +c1 +e8 +05 +8a +04 +85 +e0 +34 +00 +00 +88 +45 +db +e9 +cf +01 +00 +00 +83 +ec +04 +68 +a0 +34 +00 +00 +68 +fd +07 +00 +00 +e9 +af +01 +00 +00 +83 +7f +04 +04 +75 +28 +8b +47 +08 +89 +45 +d0 +8b +55 +b4 +8b +44 +93 +10 +25 +e0 +00 +00 +00 +c1 +e8 +05 +8a +04 +85 +e0 +34 +00 +00 +88 +45 +db +c6 +45 +dc +01 +e9 +8f +01 +00 +00 +83 +ec +04 +68 +a0 +34 +00 +00 +68 +06 +08 +00 +00 +e9 +6f +01 +00 +00 +83 +7f +04 +02 +75 +0e +8a +47 +08 +83 +e0 +07 +88 +45 +d9 +e9 +69 +01 +00 +00 +83 +7f +04 +01 +75 +3d +83 +ec +0c +6a +02 +0f +b6 +05 +00 +00 +00 +00 +50 +ff +77 +08 +8d +45 +d9 +50 +8d +45 +da +50 +e8 +fc +ff +ff +ff +83 +c4 +20 +85 +c0 +0f +84 +3b +01 +00 +00 +83 +ec +08 +68 +e0 +35 +00 +00 +ff +75 +1c +e8 +fc +ff +ff +ff +e9 +f2 +00 +00 +00 +83 +ec +04 +68 +a0 +34 +00 +00 +68 +14 +08 +00 +00 +e9 +06 +01 +00 +00 +83 +7f +04 +01 +75 +32 +83 +ec +0c +6a +00 +0f +b6 +05 +00 +00 +00 +00 +50 +ff +77 +08 +8d +45 +c7 +50 +8d +45 +da +50 +e8 +fc +ff +ff +ff +83 +c4 +20 +85 +c0 +75 +af +8a +45 +d6 +02 +45 +c7 +88 +45 +d6 +e9 +dc +00 +00 +00 +83 +ec +04 +68 +a0 +34 +00 +00 +68 +22 +08 +00 +00 +e9 +bc +00 +00 +00 +83 +7f +04 +01 +75 +0e +8a +47 +08 +83 +e0 +07 +00 +45 +d7 +e9 +b6 +00 +00 +00 +83 +ec +04 +68 +a0 +34 +00 +00 +68 +29 +08 +00 +00 +e9 +96 +00 +00 +00 +83 +7f +04 +01 +75 +74 +83 +ec +04 +0f +b6 +05 +00 +00 +00 +00 +50 +8d +75 +da +56 +ff +77 +08 +e8 +fc +ff +ff +ff +89 +45 +cc +83 +c4 +10 +85 +c0 +74 +21 +83 +ec +0c +6a +02 +0f +b6 +05 +00 +00 +00 +00 +50 +ff +77 +08 +8d +45 +d9 +50 +56 +e8 +fc +ff +ff +ff +83 +c4 +20 +85 +c0 +74 +5c +83 +ec +08 +68 +e0 +35 +00 +00 +ff +75 +1c +e8 +fc +ff +ff +ff +83 +c4 +10 +83 +7d +cc +00 +74 +0f +83 +ec +0c +ff +75 +cc +ff +15 +00 +00 +00 +00 +83 +c4 +10 +b8 +00 +00 +00 +00 +e9 +9c +00 +00 +00 +83 +ec +04 +68 +a0 +34 +00 +00 +68 +3a +08 +00 +00 +eb +0d +83 +ec +04 +68 +0b +36 +00 +00 +68 +3d +08 +00 +00 +68 +bb +34 +00 +00 +ff +15 +00 +00 +00 +00 +83 +c4 +10 +8b +4d +b4 +8b +44 +8b +10 +25 +00 +00 +03 +00 +3d +00 +00 +01 +00 +74 +16 +3d +00 +00 +01 +00 +7f +06 +85 +c0 +74 +32 +eb +15 +3d +00 +00 +02 +00 +74 +08 +eb +0c +c6 +45 +dd +01 +eb +21 +c6 +45 +de +01 +eb +1b +83 +ec +04 +68 +40 +36 +00 +00 +68 +4b +08 +00 +00 +68 +bb +34 +00 +00 +ff +15 +00 +00 +00 +00 +83 +c4 +10 +8b +3f +ff +45 +b4 +85 +ff +74 +0d +0f +b6 +43 +0e +39 +45 +b4 +0f +8c +36 +fc +ff +ff +83 +ec +0c +8d +45 +c8 +50 +e8 +fc +ff +ff +ff +8d +65 +f4 +5b +5e +5f +c9 +c3 +55 +89 +e5 +53 +83 +ec +04 +8b +55 +08 +8b +5d +0c +0f +be +02 +83 +f8 +77 +0f +87 +18 +03 +00 +00 +ff +24 +85 +e0 +36 +00 +00 +42 +8a +0a +80 +f9 +30 +0f +84 +1d +0f +00 +00 +e9 +03 +03 +00 +00 +42 +8a +0a +80 +f9 +40 +7f +29 +80 +f9 +33 +0f +8e +0f +0f +00 +00 +80 +f9 +34 +0f +8e +86 +00 +00 +00 +80 +f9 +35 +0f +8e +8e +00 +00 +00 +80 +f9 +36 +0f +8e +18 +01 +00 +00 +e9 +d2 +02 +00 +00 +80 +f9 +60 +7f +0e +80 +f9 +41 +0f +8e +50 +0e +00 +00 +80 +f9 +54 +eb +0c +80 +f9 +61 +0f +8e +42 +0e +00 +00 +80 +f9 +74 +0f +84 +43 +0e +00 +00 +e9 +a8 +02 +00 +00 +42 +8a +0a +80 +f9 +38 +0f +84 +f2 +0d +00 +00 +e9 +97 +02 +00 +00 +42 +8a +0a +80 +f9 +38 +0f +84 +bc +0d +00 +00 +e9 +86 +02 +00 +00 +42 +8a +0a +80 +f9 +43 +0f +8e +f8 +0d +00 +00 +80 +f9 +44 +0f +8e +3d +0d +00 +00 +80 +f9 +64 +0f +84 +34 +0d +00 +00 +e9 +63 +02 +00 +00 +42 +8a +0a +80 +f9 +38 +0f +84 +f1 +0c +00 +00 +e9 +52 +02 +00 +00 +42 +8a +0a +80 +f9 +38 +0f +84 +cf +0c +00 +00 +e9 +41 +02 +00 +00 +42 +8a +0a +80 +f9 +4f +7f +2a +80 +f9 +34 +0f +8e +fc +0b +00 +00 +80 +f9 +36 +7f +0e +80 +f9 +35 +0f +8e +8b +0a +00 +00 +e9 +54 +0a +00 +00 +80 +f9 +45 +0f +84 +96 +0a +00 +00 +e9 +0f +02 +00 +00 +80 +f9 +65 +7f +2a +80 +f9 +51 +7f +0e +80 +f9 +50 +0f +8e +34 +0c +00 +00 +e9 +f7 +01 +00 +00 +80 +f9 +52 +0f +8e +8a +0a +00 +00 +80 +f9 +64 +0f +8e +e5 +01 +00 +00 +e9 +62 +0a +00 +00 +80 +f9 +70 +7f +0e +80 +f9 +6f +0f +8e +d2 +01 +00 +00 +e9 +05 +0c +00 +00 +80 +f9 +72 +0f +84 +60 +0a +00 +00 +e9 +bf +01 +00 +00 +42 +8a +0a +80 +f9 +38 +0f +84 +de +09 +00 +00 +e9 +ae +01 +00 +00 +42 +8a +0a +80 +f9 +40 +7f +20 +80 +f9 +35 +0f +8e +9d +01 +00 +00 +80 +f9 +36 +0f +8e +3a +09 +00 +00 +80 +f9 +37 +0f +8e +4a +09 +00 +00 +e9 +86 +01 +00 +00 +80 +f9 +41 +0f +8e +4b +09 +00 +00 +80 +f9 +61 +0f +84 +42 +09 +00 +00 +e9 +6f +01 +00 +00 +42 +8a +0a +80 +f9 +49 +0f +84 +57 +08 +00 +00 +80 +f9 +69 +0f +84 +4e +08 +00 +00 +e9 +55 +01 +00 +00 +42 +8a +0a +80 +f9 +54 +7f +17 +80 +f9 +4d +0f +84 +7a +07 +00 +00 +80 +f9 +53 +0f +8e +3b +01 +00 +00 +e9 +86 +07 +00 +00 +80 +f9 +6d +7f +0e +80 +f9 +6c +0f +8e +28 +01 +00 +00 +e9 +59 +07 +00 +00 +80 +f9 +74 +0f +84 +6a +07 +00 +00 +e9 +15 +01 +00 +00 +42 +8a +0a +80 +f9 +53 +7f +2a +80 +f9 +4c +7f +0e +80 +f9 +4b +0f +8e +ff +00 +00 +00 +e9 +5c +06 +00 +00 +80 +f9 +4d +0f +8e +65 +06 +00 +00 +80 +f9 +52 +0f +8e +e8 +00 +00 +00 +e9 +69 +06 +00 +00 +80 +f9 +6d +7f +17 +80 +f9 +6b +0f +8e +d5 +00 +00 +00 +80 +f9 +6c +0f +8e +2e +06 +00 +00 +e9 +3b +06 +00 +00 +80 +f9 +73 +0f +84 +44 +06 +00 +00 +e9 +b9 +00 +00 +00 +42 +8a +0a +80 +f9 +41 +0f +84 +cf +05 +00 +00 +80 +f9 +61 +0f +84 +c6 +05 +00 +00 +e9 +9f +00 +00 +00 +42 +8a +0a +80 +f9 +50 +7f +17 +80 +f9 +42 +0f +84 +17 +05 +00 +00 +80 +f9 +4f +0f +8e +85 +00 +00 +00 +e9 +1b +05 +00 +00 +80 +f9 +62 +7f +0a +80 +f9 +61 +7e +76 +e9 +fa +04 +00 +00 +80 +f9 +70 +0f +84 +03 +05 +00 +00 +eb +66 +42 +8a +0a +80 +f9 +50 +0f +84 +b9 +04 +00 +00 +80 +f9 +70 +0f +84 +b0 +04 +00 +00 +eb +4f +42 +8a +0a +80 +f9 +4f +0f +84 +03 +01 +00 +00 +80 +f9 +6f +0f +84 +fa +00 +00 +00 +eb +38 +42 +8a +0a +80 +f9 +4d +0f +84 +c2 +00 +00 +00 +80 +f9 +6d +0f +84 +b9 +00 +00 +00 +eb +21 +42 +8a +0a +80 +f9 +59 +74 +6f +80 +f9 +79 +74 +6a +eb +12 +42 +8a +0a +80 +f9 +4e +74 +24 +80 +f9 +6e +74 +1f +eb +03 +42 +8a +0a +84 +c9 +7e +03 +eb +f7 +42 +52 +68 +c0 +36 +00 +00 +53 +6a +00 +e8 +fc +ff +ff +ff +e9 +55 +0c +00 +00 +42 +8a +0a +80 +f9 +44 +74 +05 +80 +f9 +64 +75 +d9 +42 +8a +0a +80 +f9 +4f +74 +05 +80 +f9 +6f +75 +cc +42 +8a +0a +80 +f9 +43 +74 +05 +80 +f9 +63 +75 +bf +42 +80 +3a +00 +7f +b6 +81 +0d +00 +00 +00 +00 +00 +00 +20 +00 +e9 +19 +0c +00 +00 +42 +8a +0a +80 +f9 +52 +74 +05 +80 +f9 +72 +75 +9d +42 +8a +0a +80 +f9 +49 +74 +05 +80 +f9 +69 +75 +90 +42 +8a +0a +80 +f9 +58 +74 +05 +80 +f9 +78 +75 +83 +42 +80 +3a +00 +0f +8f +76 +ff +ff +ff +81 +0d +00 +00 +00 +00 +00 +00 +02 +00 +e9 +d9 +0b +00 +00 +42 +8a +0a +80 +f9 +58 +74 +09 +80 +f9 +78 +0f +85 +59 +ff +ff +ff +42 +80 +3a +00 +0f +8f +4c +ff +ff +ff +81 +0d +00 +00 +00 +00 +00 +20 +00 +00 +e9 +af +0b +00 +00 +42 +8a +0a +0f +be +c1 +83 +e8 +33 +83 +f8 +42 +0f +87 +2e +ff +ff +ff +ff +24 +85 +c0 +38 +00 +00 +42 +8a +0a +80 +f9 +50 +0f +84 +50 +03 +00 +00 +80 +f9 +70 +0f +84 +47 +03 +00 +00 +e9 +0d +ff +ff +ff +42 +8a +0a +80 +f9 +4d +0f +84 +0c +03 +00 +00 +80 +f9 +6d +0f +84 +03 +03 +00 +00 +e9 +f3 +fe +ff +ff +42 +8a +0a +80 +f9 +53 +7f +17 +80 +f9 +4d +0f +84 +78 +02 +00 +00 +80 +f9 +52 +0f +8e +d9 +fe +ff +ff +e9 +7c +02 +00 +00 +80 +f9 +6d +7f +0e +80 +f9 +6c +0f +8e +c6 +fe +ff +ff +e9 +57 +02 +00 +00 +80 +f9 +73 +0f +84 +60 +02 +00 +00 +e9 +b3 +fe +ff +ff +42 +8a +0a +80 +f9 +44 +0f +84 +f1 +01 +00 +00 +80 +f9 +64 +0f +84 +e8 +01 +00 +00 +e9 +99 +fe +ff +ff +42 +8a +0a +80 +f9 +59 +0f +84 +8b +01 +00 +00 +80 +f9 +79 +0f +84 +82 +01 +00 +00 +e9 +7f +fe +ff +ff +42 +8a +0a +80 +f9 +4d +0f +84 +47 +01 +00 +00 +80 +f9 +6d +0f +84 +3e +01 +00 +00 +e9 +65 +fe +ff +ff +42 +8a +0a +80 +f9 +52 +0f +84 +a7 +00 +00 +00 +80 +f9 +72 +0f +84 +9e +00 +00 +00 +e9 +4b +fe +ff +ff +42 +8a +0a +80 +f9 +4e +74 +45 +80 +f9 +6e +74 +40 +e9 +39 +fe +ff +ff +42 +8a +0a +80 +f9 +42 +74 +09 +80 +f9 +62 +0f +85 +28 +fe +ff +ff +42 +8a +0a +80 +f9 +53 +74 +09 +80 +f9 +73 +0f +85 +17 +fe +ff +ff +42 +80 +3a +00 +0f +8f +0a +fe +ff +ff +81 +25 +00 +00 +00 +00 +ff +ff +bf +ff +e9 +6d +0a +00 +00 +42 +8a +0a +80 +f9 +44 +74 +09 +80 +f9 +64 +0f +85 +ed +fd +ff +ff +42 +8a +0a +80 +f9 +4f +74 +09 +80 +f9 +6f +0f +85 +dc +fd +ff +ff +42 +8a +0a +80 +f9 +43 +74 +09 +80 +f9 +63 +0f +85 +cb +fd +ff +ff +42 +80 +3a +00 +0f +8f +be +fd +ff +ff +81 +25 +00 +00 +00 +00 +ff +ff +df +ff +e9 +21 +0a +00 +00 +42 +8a +0a +80 +f9 +4f +7f +10 +80 +f9 +49 +74 +36 +80 +f9 +4e +0f +8e +9c +fd +ff +ff +eb +19 +80 +f9 +69 +7f +0b +80 +f9 +68 +0f +8e +8c +fd +ff +ff +eb +1b +80 +f9 +6f +0f +85 +81 +fd +ff +ff +42 +8a +0a +80 +f9 +54 +74 +34 +80 +f9 +74 +74 +2f +e9 +6f +fd +ff +ff +42 +8a +0a +80 +f9 +56 +74 +09 +80 +f9 +76 +0f +85 +5e +fd +ff +ff +42 +80 +3a +00 +0f +8f +51 +fd +ff +ff +81 +25 +00 +00 +00 +00 +ff +ff +7f +ff +e9 +b4 +09 +00 +00 +42 +80 +3a +00 +0f +8f +38 +fd +ff +ff +81 +25 +00 +00 +00 +00 +ff +ff +ef +ff +e9 +9b +09 +00 +00 +42 +8a +0a +80 +f9 +44 +74 +09 +80 +f9 +64 +0f +85 +1b +fd +ff +ff +42 +80 +3a +00 +0f +8f +0e +fd +ff +ff +81 +25 +00 +00 +00 +00 +ff +ff +fb +ff +e9 +71 +09 +00 +00 +42 +8a +0a +80 +f9 +52 +74 +09 +80 +f9 +72 +0f +85 +f1 +fc +ff +ff +42 +8a +0a +80 +f9 +49 +74 +09 +80 +f9 +69 +0f +85 +e0 +fc +ff +ff +42 +8a +0a +80 +f9 +58 +74 +09 +80 +f9 +78 +0f +85 +cf +fc +ff +ff +42 +80 +3a +00 +0f +8f +c2 +fc +ff +ff +81 +25 +00 +00 +00 +00 +ff +ff +fd +ff +e9 +25 +09 +00 +00 +42 +8a +0a +80 +f9 +4e +74 +09 +80 +f9 +6e +0f +85 +a5 +fc +ff +ff +42 +8a +0a +80 +f9 +4f +74 +09 +80 +f9 +6f +0f +85 +94 +fc +ff +ff +42 +8a +0a +80 +f9 +57 +74 +09 +80 +f9 +77 +0f +85 +83 +fc +ff +ff +42 +80 +3a +00 +0f +8f +76 +fc +ff +ff +81 +25 +00 +00 +00 +00 +ff +ff +fe +ff +e9 +d9 +08 +00 +00 +42 +8a +0a +80 +f9 +4d +74 +54 +80 +f9 +6d +74 +4f +e9 +58 +fc +ff +ff +42 +8a +0a +80 +f9 +45 +74 +09 +80 +f9 +65 +0f +85 +47 +fc +ff +ff +42 +8a +0a +84 +c9 +7e +0a +80 +f9 +32 +74 +14 +e9 +33 +fc +ff +ff +81 +25 +00 +00 +00 +00 +ff +bf +ff +ff +e9 +96 +08 +00 +00 +42 +80 +3a +00 +0f +8f +1a +fc +ff +ff +81 +25 +00 +00 +00 +00 +ff +7f +ff +ff +e9 +7d +08 +00 +00 +42 +80 +3a +00 +0f +8f +01 +fc +ff +ff +81 +25 +00 +00 +00 +00 +ff +ff +f7 +ff +e9 +64 +08 +00 +00 +42 +8a +0a +80 +f9 +58 +74 +09 +80 +f9 +78 +0f +85 +e4 +fb +ff +ff +42 +80 +3a +00 +0f +8f +d7 +fb +ff +ff +81 +25 +00 +00 +00 +00 +ff +df +ff +ff +e9 +3a +08 +00 +00 +42 +8a +0a +80 +f9 +55 +74 +09 +80 +f9 +75 +0f +85 +ba +fb +ff +ff +42 +80 +3a +00 +0f +8f +ad +fb +ff +ff +81 +25 +00 +00 +00 +00 +ff +ef +ff +ff +e9 +10 +08 +00 +00 +42 +8a +0a +80 +f9 +55 +74 +09 +80 +f9 +75 +0f +85 +90 +fb +ff +ff +42 +80 +3a +00 +0f +8f +83 +fb +ff +ff +81 +0d +00 +00 +00 +00 +00 +10 +00 +00 +e9 +e6 +07 +00 +00 +42 +8a +0a +80 +f9 +53 +74 +78 +80 +f9 +73 +74 +73 +e9 +65 +fb +ff +ff +42 +8a +0a +80 +f9 +54 +74 +09 +80 +f9 +74 +0f +85 +54 +fb +ff +ff +42 +8a +0a +80 +f9 +45 +74 +09 +80 +f9 +65 +0f +85 +43 +fb +ff +ff +42 +8a +0a +80 +f9 +52 +74 +09 +80 +f9 +72 +0f +85 +32 +fb +ff +ff +42 +8a +0a +80 +f9 +4f +74 +09 +80 +f9 +6f +0f +85 +21 +fb +ff +ff +42 +8a +0a +80 +f9 +4e +74 +09 +80 +f9 +6e +0f +85 +10 +fb +ff +ff +42 +80 +3a +00 +0f +8f +03 +fb +ff +ff +c7 +05 +00 +00 +00 +00 +3f +7e +99 +00 +e9 +66 +07 +00 +00 +42 +80 +3a +00 +0f +8f +ea +fa +ff +ff +81 +0d +00 +00 +00 +00 +00 +00 +40 +00 +e9 +4d +07 +00 +00 +42 +8a +0a +80 +f9 +4d +74 +09 +80 +f9 +6d +0f +85 +cd +fa +ff +ff +42 +8a +0a +80 +f9 +4d +74 +09 +80 +f9 +6d +0f +85 +bc +fa +ff +ff +42 +8a +0a +80 +f9 +45 +74 +09 +80 +f9 +65 +0f +85 +ab +fa +ff +ff +42 +8a +0a +80 +f9 +52 +74 +93 +80 +f9 +72 +eb +88 +42 +8a +0a +80 +f9 +45 +74 +7f +80 +f9 +65 +74 +7a +e9 +8c +fa +ff +ff +42 +8a +0a +80 +f9 +4d +74 +54 +80 +f9 +6d +74 +4f +e9 +7a +fa +ff +ff +42 +8a +0a +80 +f9 +45 +74 +09 +80 +f9 +65 +0f +85 +69 +fa +ff +ff +42 +8a +0a +84 +c9 +7e +0a +80 +f9 +32 +74 +14 +e9 +55 +fa +ff +ff +81 +0d +00 +00 +00 +00 +00 +40 +00 +00 +e9 +b8 +06 +00 +00 +42 +80 +3a +00 +0f +8f +3c +fa +ff +ff +81 +0d +00 +00 +00 +00 +00 +80 +00 +00 +e9 +9f +06 +00 +00 +42 +80 +3a +00 +0f +8f +23 +fa +ff +ff +81 +0d +00 +00 +00 +00 +00 +00 +08 +00 +e9 +86 +06 +00 +00 +42 +8a +0a +80 +f9 +44 +74 +09 +80 +f9 +64 +0f +85 +06 +fa +ff +ff +42 +8a +0a +80 +f9 +47 +74 +09 +80 +f9 +67 +0f +85 +f5 +f9 +ff +ff +42 +8a +0a +80 +f9 +45 +74 +09 +80 +f9 +65 +0f +85 +e4 +f9 +ff +ff +42 +8a +0a +80 +f9 +48 +0f +84 +1f +f9 +ff +ff +80 +f9 +68 +0f +84 +16 +f9 +ff +ff +e9 +ca +f9 +ff +ff +42 +8a +0a +80 +f9 +44 +0f +84 +99 +00 +00 +00 +80 +f9 +64 +0f +84 +90 +00 +00 +00 +e9 +b0 +f9 +ff +ff +42 +8a +0a +80 +f9 +48 +74 +09 +80 +f9 +68 +0f +85 +9f +f9 +ff +ff +42 +8a +0a +80 +f9 +4c +74 +09 +80 +f9 +6c +0f +85 +8e +f9 +ff +ff +42 +8a +0a +80 +f9 +4f +74 +09 +80 +f9 +6f +0f +85 +7d +f9 +ff +ff +42 +8a +0a +80 +f9 +4e +74 +09 +80 +f9 +6e +0f +85 +6c +f9 +ff +ff +42 +8a +0a +80 +f9 +2d +7f +0f +84 +c9 +7e +15 +80 +f9 +2c +0f +8e +54 +f9 +ff +ff +eb +19 +80 +f9 +36 +74 +20 +e9 +48 +f9 +ff +ff +c7 +05 +00 +00 +00 +00 +3f +76 +99 +00 +e9 +ab +05 +00 +00 +42 +8a +0a +80 +f9 +36 +0f +85 +30 +f9 +ff +ff +42 +8a +0a +80 +f9 +34 +e9 +0f +fe +ff +ff +42 +80 +3a +00 +0f +8f +18 +f9 +ff +ff +81 +0d +00 +00 +00 +00 +00 +00 +04 +00 +e9 +7b +05 +00 +00 +42 +8a +0a +80 +f9 +4c +74 +09 +80 +f9 +6c +0f +85 +fb +f8 +ff +ff +42 +8a +0a +80 +f9 +4c +74 +09 +80 +f9 +6c +0f +85 +ea +f8 +ff +ff +42 +8a +0a +80 +f9 +49 +74 +09 +80 +f9 +69 +0f +85 +d9 +f8 +ff +ff +42 +8a +0a +80 +f9 +41 +74 +09 +80 +f9 +61 +0f +85 +c8 +f8 +ff +ff +42 +8a +0a +80 +f9 +4d +74 +09 +80 +f9 +6d +0f +85 +b7 +f8 +ff +ff +42 +8a +0a +80 +f9 +45 +74 +09 +80 +f9 +65 +0f +85 +a6 +f8 +ff +ff +42 +8a +0a +80 +f9 +54 +74 +09 +80 +f9 +74 +0f +85 +95 +f8 +ff +ff +42 +8a +0a +80 +f9 +54 +74 +09 +80 +f9 +74 +0f +85 +84 +f8 +ff +ff +42 +8a +0a +80 +f9 +45 +74 +09 +80 +f9 +65 +0f +85 +73 +f8 +ff +ff +42 +80 +3a +00 +0f +8f +66 +f8 +ff +ff +c7 +05 +00 +00 +00 +00 +ff +f0 +98 +00 +e9 +c9 +04 +00 +00 +42 +80 +3a +00 +0f +8f +4d +f8 +ff +ff +c7 +05 +00 +00 +00 +00 +3f +32 +99 +00 +e9 +b0 +04 +00 +00 +42 +80 +3a +00 +0f +8e +ec +fe +ff +ff +e9 +2f +f8 +ff +ff +42 +8a +0a +80 +f9 +54 +74 +09 +80 +f9 +74 +0f +85 +21 +f8 +ff +ff +42 +8a +0a +80 +f9 +4d +74 +09 +80 +f9 +6d +0f +85 +10 +f8 +ff +ff +42 +8a +0a +80 +f9 +41 +74 +09 +80 +f9 +61 +0f +85 +ff +f7 +ff +ff +42 +8a +0a +80 +f9 +49 +74 +09 +80 +f9 +69 +0f +85 +ee +f7 +ff +ff +42 +80 +3a +00 +0f +8f +e1 +f7 +ff +ff +c7 +05 +00 +00 +00 +00 +7f +70 +98 +00 +e9 +44 +04 +00 +00 +42 +8a +0a +80 +f9 +36 +0f +85 +c9 +f7 +ff +ff +42 +80 +3a +00 +0f +8f +bc +f7 +ff +ff +c7 +05 +00 +00 +00 +00 +3f +10 +98 +00 +e9 +1f +04 +00 +00 +42 +80 +3a +00 +0f +8f +a3 +f7 +ff +ff +c7 +05 +00 +00 +00 +00 +3f +30 +98 +00 +e9 +06 +04 +00 +00 +42 +80 +3a +00 +0f +8f +8a +f7 +ff +ff +c7 +05 +00 +00 +00 +00 +1f +10 +98 +00 +e9 +ed +03 +00 +00 +42 +8a +0a +80 +f9 +4e +0f +84 +94 +00 +00 +00 +80 +f9 +6e +0f +84 +8b +00 +00 +00 +e9 +64 +f7 +ff +ff +42 +8a +0a +80 +f9 +4f +7f +10 +80 +f9 +49 +74 +36 +80 +f9 +4e +0f +8e +4e +f7 +ff +ff +eb +19 +80 +f9 +69 +7f +0b +80 +f9 +68 +0f +8e +3e +f7 +ff +ff +eb +1b +80 +f9 +6f +0f +85 +33 +f7 +ff +ff +42 +8a +0a +80 +f9 +54 +74 +34 +80 +f9 +74 +74 +2f +e9 +21 +f7 +ff +ff +42 +8a +0a +80 +f9 +56 +74 +09 +80 +f9 +76 +0f +85 +10 +f7 +ff +ff +42 +80 +3a +00 +0f +8f +03 +f7 +ff +ff +81 +0d +00 +00 +00 +00 +00 +00 +80 +00 +e9 +66 +03 +00 +00 +42 +80 +3a +00 +0f +8f +ea +f6 +ff +ff +81 +0d +00 +00 +00 +00 +00 +00 +10 +00 +e9 +4d +03 +00 +00 +42 +8a +0a +80 +f9 +54 +74 +09 +80 +f9 +74 +0f +85 +cd +f6 +ff +ff +42 +8a +0a +80 +f9 +49 +74 +09 +80 +f9 +69 +0f +85 +bc +f6 +ff +ff +42 +8a +0a +80 +f9 +55 +74 +09 +80 +f9 +75 +0f +85 +ab +f6 +ff +ff +42 +8a +0a +80 +f9 +4d +74 +09 +80 +f9 +6d +0f +85 +9a +f6 +ff +ff +42 +8a +0a +80 +f9 +48 +7f +38 +80 +f9 +31 +7f +13 +84 +c9 +0f +8e +f8 +fe +ff +ff +80 +f9 +2d +0f +85 +79 +f6 +ff +ff +eb +3e +80 +f9 +32 +0f +8e +c1 +fe +ff +ff +80 +f9 +33 +0f +8e +7a +fe +ff +ff +80 +f9 +34 +0f +8e +ec +fd +ff +ff +e9 +57 +f6 +ff +ff +80 +f9 +68 +7f +0a +80 +f9 +49 +7e +55 +80 +f9 +50 +eb +08 +80 +f9 +69 +7e +4b +80 +f9 +70 +74 +79 +e9 +39 +f6 +ff +ff +42 +8a +0a +80 +f9 +34 +7f +20 +80 +f9 +31 +0f +8e +2b +f6 +ff +ff +80 +f9 +32 +0f +8e +72 +fe +ff +ff +80 +f9 +33 +0f +8e +2b +fe +ff +ff +e9 +a1 +fd +ff +ff +80 +f9 +49 +7f +0b +80 +f9 +48 +0f +8e +06 +f6 +ff +ff +eb +09 +80 +f9 +69 +0f +85 +fb +f5 +ff +ff +42 +8a +0a +80 +f9 +56 +7f +13 +80 +f9 +49 +74 +4b +80 +f9 +55 +0f +8e +e5 +f5 +ff +ff +e9 +6d +fd +ff +ff +80 +f9 +69 +7f +0b +80 +f9 +68 +0f +8e +d2 +f5 +ff +ff +eb +2d +80 +f9 +76 +e9 +4f +fd +ff +ff +42 +8a +0a +80 +f9 +52 +74 +09 +80 +f9 +72 +0f +85 +b7 +f5 +ff +ff +42 +8a +0a +80 +f9 +4f +0f +84 +e2 +fd +ff +ff +80 +f9 +6f +e9 +d4 +fd +ff +ff +42 +8a +0a +80 +f9 +49 +7f +16 +84 +c9 +0f +8e +ed +fd +ff +ff +80 +f9 +48 +0f +8e +87 +f5 +ff +ff +e9 +97 +fd +ff +ff +80 +f9 +69 +0f +84 +8e +fd +ff +ff +e9 +74 +f5 +ff +ff +42 +8a +0a +80 +f9 +36 +0f +84 +d4 +fd +ff +ff +e9 +66 +f5 +ff +ff +42 +8a +0a +80 +f9 +36 +0f +85 +5a +f5 +ff +ff +42 +80 +3a +00 +0f +8f +4d +f5 +ff +ff +c7 +05 +00 +00 +00 +00 +0f +10 +98 +00 +e9 +b0 +01 +00 +00 +42 +8a +0a +80 +f9 +36 +74 +51 +e9 +34 +f5 +ff +ff +42 +8a +0a +80 +f9 +4e +74 +09 +80 +f9 +6e +0f +85 +23 +f5 +ff +ff +42 +8a +0a +80 +f9 +4f +74 +09 +80 +f9 +6f +0f +85 +12 +f5 +ff +ff +42 +8a +0a +80 +f9 +57 +74 +09 +80 +f9 +77 +0f +85 +01 +f5 +ff +ff +42 +80 +3a +00 +0f +8f +f4 +f4 +ff +ff +81 +0d +00 +00 +00 +00 +00 +00 +01 +00 +e9 +57 +01 +00 +00 +42 +80 +3a +00 +0f +8f +db +f4 +ff +ff +c7 +05 +00 +00 +00 +00 +07 +00 +98 +00 +e9 +3e +01 +00 +00 +42 +8a +0a +80 +f9 +36 +0f +85 +c3 +f4 +ff +ff +42 +80 +3a +00 +0f +8f +b6 +f4 +ff +ff +c7 +05 +00 +00 +00 +00 +03 +00 +80 +00 +e9 +19 +01 +00 +00 +42 +8a +0a +80 +f9 +36 +0f +85 +9e +f4 +ff +ff +42 +80 +3a +00 +0f +8f +91 +f4 +ff +ff +c7 +05 +00 +00 +00 +00 +01 +00 +80 +00 +e9 +f4 +00 +00 +00 +42 +8a +0a +80 +f9 +38 +0f +84 +38 +ff +ff +ff +e9 +74 +f4 +ff +ff +42 +8a +0a +80 +f9 +2d +74 +6d +eb +6e +42 +8a +0a +80 +f9 +41 +74 +09 +80 +f9 +61 +0f +85 +59 +f4 +ff +ff +42 +8a +0a +80 +f9 +4e +74 +09 +80 +f9 +6e +0f +85 +48 +f4 +ff +ff +42 +8a +0a +80 +f9 +49 +74 +09 +80 +f9 +69 +0f +85 +37 +f4 +ff +ff +42 +8a +0a +80 +f9 +55 +74 +09 +80 +f9 +75 +0f +85 +26 +f4 +ff +ff +42 +8a +0a +80 +f9 +4d +74 +09 +80 +f9 +6d +0f +85 +15 +f4 +ff +ff +42 +80 +3a +00 +0f +8f +08 +f4 +ff +ff +c7 +05 +00 +00 +00 +00 +ff +f1 +98 +00 +eb +6e +42 +8a +0a +80 +f9 +36 +0f +85 +f3 +f3 +ff +ff +42 +8a +0a +80 +f9 +34 +eb +d0 +42 +8a +0a +80 +f9 +33 +7f +20 +80 +f9 +30 +0f +8e +da +f3 +ff +ff +80 +f9 +31 +0f +8e +29 +f1 +ff +ff +80 +f9 +32 +0f +8e +31 +f1 +ff +ff +e9 +3e +ff +ff +ff +80 +f9 +34 +0f +8e +57 +f1 +ff +ff +80 +f9 +38 +0f +85 +b1 +f3 +ff +ff +42 +8a +0a +80 +f9 +36 +0f +85 +a5 +f3 +ff +ff +42 +80 +3a +00 +0f +8f +98 +f3 +ff +ff +c7 +05 +00 +00 +00 +00 +00 +00 +80 +00 +8b +5d +fc +c9 +c3 +55 +89 +e5 +57 +56 +53 +83 +ec +0c +8b +7d +08 +8b +4d +0c +8b +75 +10 +89 +cb +0f +be +01 +83 +f8 +78 +0f +87 +38 +03 +00 +00 +ff +24 +85 +00 +3b +00 +00 +41 +8a +11 +80 +fa +4f +7f +17 +80 +fa +45 +0f +84 +35 +b5 +00 +00 +80 +fa +4e +0f +8e +1a +03 +00 +00 +e9 +60 +b5 +00 +00 +80 +fa +65 +7f +0e +80 +fa +64 +0f +8e +07 +03 +00 +00 +e9 +14 +b5 +00 +00 +80 +fa +6f +0f +84 +44 +b5 +00 +00 +e9 +f4 +02 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +38 +0f +87 +e2 +02 +00 +00 +ff +24 +85 +e4 +3c +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +32 +83 +f8 +47 +0f +87 +c9 +02 +00 +00 +ff +24 +85 +c8 +3d +00 +00 +41 +8a +11 +80 +fa +52 +7f +21 +80 +fa +4e +7f +05 +80 +fa +45 +eb +1f +80 +fa +4f +0f +8e +31 +84 +00 +00 +80 +fa +51 +0f +8e +9e +02 +00 +00 +e9 +38 +84 +00 +00 +80 +fa +6e +7f +0e +80 +fa +65 +0f +84 +03 +84 +00 +00 +e9 +86 +02 +00 +00 +80 +fa +6f +0f +8e +07 +84 +00 +00 +80 +fa +72 +0f +84 +13 +84 +00 +00 +e9 +6f +02 +00 +00 +41 +8a +11 +80 +fa +51 +7f +2a +80 +fa +32 +7f +0e +80 +fa +31 +0f +84 +ba +81 +00 +00 +e9 +54 +02 +00 +00 +80 +fa +33 +0f +8e +bd +81 +00 +00 +80 +fa +36 +0f +84 +c5 +81 +00 +00 +e9 +3d +02 +00 +00 +80 +fa +71 +7f +0e +80 +fa +52 +0f +8e +c3 +81 +00 +00 +80 +fa +55 +eb +0c +80 +fa +72 +0f +8e +b5 +81 +00 +00 +80 +fa +75 +0f +84 +e6 +81 +00 +00 +e9 +13 +02 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +31 +83 +f8 +47 +0f +87 +01 +02 +00 +00 +ff +24 +85 +e8 +3e +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +33 +0f +87 +e8 +01 +00 +00 +ff +24 +85 +08 +40 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +31 +83 +f8 +42 +0f +87 +cf +01 +00 +00 +ff +24 +85 +d8 +40 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +37 +0f +87 +b6 +01 +00 +00 +ff +24 +85 +e4 +41 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +37 +0f +87 +9d +01 +00 +00 +ff +24 +85 +c4 +42 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +34 +0f +87 +84 +01 +00 +00 +ff +24 +85 +a4 +43 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +2e +0f +87 +6b +01 +00 +00 +ff +24 +85 +78 +44 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +32 +0f +87 +52 +01 +00 +00 +ff +24 +85 +34 +45 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +48 +83 +f8 +30 +0f +87 +39 +01 +00 +00 +ff +24 +85 +00 +46 +00 +00 +41 +8a +11 +80 +fa +53 +0f +84 +29 +34 +00 +00 +80 +fa +73 +0f +84 +20 +34 +00 +00 +e9 +18 +01 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +37 +0f +87 +06 +01 +00 +00 +ff +24 +85 +c4 +46 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +42 +83 +f8 +30 +0f +87 +ed +00 +00 +00 +ff +24 +85 +a4 +47 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +39 +0f +87 +d4 +00 +00 +00 +ff +24 +85 +68 +48 +00 +00 +41 +8a +11 +80 +fa +4c +0f +84 +4d +05 +00 +00 +80 +fa +6c +0f +84 +44 +05 +00 +00 +e9 +b3 +00 +00 +00 +41 +8a +11 +80 +fa +45 +0f +84 +b8 +04 +00 +00 +80 +fa +65 +0f +84 +af +04 +00 +00 +e9 +99 +00 +00 +00 +41 +8a +11 +80 +fa +52 +7f +26 +80 +fa +41 +7f +0e +80 +fa +40 +0f +8e +83 +00 +00 +00 +e9 +30 +03 +00 +00 +80 +fa +42 +0f +8e +41 +03 +00 +00 +80 +fa +51 +7e +70 +e9 +51 +03 +00 +00 +80 +fa +62 +7f +13 +80 +fa +60 +7e +61 +80 +fa +61 +0f +8e +0a +03 +00 +00 +e9 +1f +03 +00 +00 +80 +fa +72 +0f +84 +30 +03 +00 +00 +eb +48 +41 +8a +11 +80 +fa +4e +7f +1b +80 +fa +44 +7f +0a +80 +fa +42 +7e +36 +80 +fa +43 +eb +19 +80 +fa +4c +7e +2c +80 +fa +4d +7e +69 +eb +7e +80 +fa +64 +7f +0c +80 +fa +62 +7e +1b +80 +fa +63 +7e +25 +eb +3a +80 +fa +6c +7e +0f +80 +fa +6d +7e +4c +80 +fa +6e +7e +5e +eb +03 +41 +8a +11 +b8 +00 +00 +00 +00 +84 +d2 +0f +8e +ed +b2 +00 +00 +eb +ee +41 +8a +11 +80 +fa +4f +0f +84 +fb +01 +00 +00 +80 +fa +6f +0f +84 +f2 +01 +00 +00 +eb +da +41 +8a +11 +80 +fa +30 +7e +d2 +80 +fa +31 +0f +8e +c3 +01 +00 +00 +80 +fa +32 +0f +8e +9e +01 +00 +00 +eb +be +41 +8a +11 +80 +fa +4f +0f +84 +63 +01 +00 +00 +80 +fa +6f +0f +84 +5a +01 +00 +00 +eb +a7 +41 +8a +11 +80 +fa +50 +74 +05 +80 +fa +70 +75 +9a +41 +8a +11 +80 +fa +43 +74 +05 +80 +fa +63 +75 +8d +41 +8a +11 +80 +fa +4b +74 +05 +80 +fa +6b +75 +80 +41 +8a +11 +80 +fa +4c +7f +10 +80 +fa +48 +74 +25 +80 +fa +4b +0f +8e +6a +ff +ff +ff +eb +34 +80 +fa +68 +7f +0b +80 +fa +67 +0f +8e +5a +ff +ff +ff +eb +0a +80 +fa +6c +74 +1f +e9 +4e +ff +ff +ff +41 +8a +11 +80 +fa +50 +0f +84 +89 +00 +00 +00 +80 +fa +70 +0f +84 +80 +00 +00 +00 +e9 +34 +ff +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +23 +ff +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +0d +ff +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +fd +fe +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +f1 +fe +ff +ff +41 +80 +39 +00 +0f +8f +e4 +fe +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +14 +66 +00 +e9 +40 +aa +00 +00 +41 +80 +39 +00 +0f +8f +c8 +fe +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +14 +00 +00 +e9 +47 +aa +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +a3 +fe +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +93 +fe +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +87 +fe +ff +ff +41 +80 +39 +00 +0f +8f +7a +fe +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +15 +66 +00 +e9 +d6 +a9 +00 +00 +41 +80 +39 +00 +0f +8f +5e +fe +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +15 +00 +00 +e9 +dd +a9 +00 +00 +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +3e +fe +ff +ff +41 +80 +39 +00 +0f +8f +31 +fe +ff +ff +c7 +07 +a0 +33 +00 +00 +c7 +47 +04 +06 +00 +00 +00 +e9 +5e +a7 +00 +00 +41 +80 +39 +00 +0f +8f +15 +fe +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +0b +0f +00 +e9 +1f +a8 +00 +00 +41 +80 +39 +00 +0f +8f +f9 +fd +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +b9 +0f +00 +e9 +d5 +73 +00 +00 +41 +8a +11 +80 +fa +4d +74 +09 +80 +fa +6d +0f +85 +d9 +fd +ff +ff +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +c8 +fd +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +b7 +fd +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +a1 +fd +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +91 +fd +ff +ff +eb +25 +80 +fa +73 +0f +85 +86 +fd +ff +ff +41 +80 +39 +00 +0f +8f +79 +fd +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +2e +f3 +00 +e9 +f8 +a8 +00 +00 +41 +80 +39 +00 +0f +8f +5d +fd +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +2e +f2 +00 +e9 +b9 +a8 +00 +00 +41 +8a +11 +80 +fa +49 +0f +84 +26 +01 +00 +00 +80 +fa +69 +0f +84 +1d +01 +00 +00 +e9 +34 +fd +ff +ff +41 +8a +11 +80 +fa +49 +0f +84 +bd +00 +00 +00 +80 +fa +69 +0f +84 +b4 +00 +00 +00 +e9 +1a +fd +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +4d +74 +25 +80 +fa +52 +0f +8e +04 +fd +ff +ff +eb +2c +80 +fa +6d +7f +0b +80 +fa +6c +0f +8e +f4 +fc +ff +ff +eb +0a +80 +fa +73 +74 +17 +e9 +e8 +fc +ff +ff +41 +8a +11 +80 +fa +53 +74 +48 +80 +fa +73 +74 +43 +e9 +d6 +fc +ff +ff +41 +8a +11 +80 +fa +48 +74 +09 +80 +fa +68 +0f +85 +c5 +fc +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +b4 +fc +ff +ff +41 +80 +39 +00 +0f +8f +a7 +fc +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +37 +0f +00 +e9 +e1 +6b +00 +00 +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +87 +fc +ff +ff +41 +80 +39 +00 +0f +8f +7a +fc +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +30 +0f +00 +e9 +15 +6c +00 +00 +41 +8a +11 +80 +fa +4e +74 +09 +80 +fa +6e +0f +85 +5a +fc +ff +ff +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +49 +fc +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +38 +fc +ff +ff +41 +80 +39 +00 +0f +8f +2b +fc +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +09 +0f +00 +e9 +9f +08 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +0b +fc +ff +ff +41 +80 +39 +00 +0f +8f +fe +fb +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +9b +00 +00 +e9 +c6 +ae +00 +00 +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +de +fb +ff +ff +41 +8a +11 +80 +fa +57 +7f +10 +80 +fa +52 +74 +25 +80 +fa +56 +0f +8e +c8 +fb +ff +ff +eb +36 +80 +fa +72 +7f +0b +80 +fa +71 +0f +8e +b8 +fb +ff +ff +eb +0a +80 +fa +77 +74 +21 +e9 +ac +fb +ff +ff +41 +80 +39 +00 +0f +8f +9f +fb +ff +ff +c7 +07 +50 +23 +00 +00 +c7 +47 +04 +01 +00 +04 +00 +e9 +fd +a1 +00 +00 +41 +80 +39 +00 +0f +8f +83 +fb +ff +ff +c7 +07 +50 +23 +00 +00 +c7 +47 +04 +01 +00 +05 +00 +e9 +e1 +a1 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +63 +fb +ff +ff +41 +80 +39 +00 +0f +8f +56 +fb +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +f4 +00 +00 +c7 +47 +08 +00 +00 +80 +00 +e9 +1e +ae +00 +00 +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +97 +03 +00 +00 +80 +fa +44 +0f +8e +24 +fb +ff +ff +e9 +8b +04 +00 +00 +80 +fa +65 +0f +84 +82 +04 +00 +00 +e9 +11 +fb +ff +ff +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +87 +03 +00 +00 +80 +fa +44 +0f +8e +f8 +fa +ff +ff +e9 +43 +04 +00 +00 +80 +fa +65 +0f +84 +3a +04 +00 +00 +e9 +e5 +fa +ff +ff +41 +8a +11 +80 +fa +58 +7f +16 +84 +d2 +0f +8e +5b +03 +00 +00 +80 +fa +57 +0f +8e +cc +fa +ff +ff +e9 +ea +03 +00 +00 +80 +fa +78 +0f +84 +e1 +03 +00 +00 +e9 +b9 +fa +ff +ff +41 +8a +11 +80 +fa +43 +7f +16 +84 +d2 +0f +8e +47 +01 +00 +00 +80 +fa +42 +0f +8e +a0 +fa +ff +ff +e9 +80 +03 +00 +00 +80 +fa +63 +0f +84 +77 +03 +00 +00 +e9 +8d +fa +ff +ff +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +af +02 +00 +00 +80 +fa +44 +0f +8e +74 +fa +ff +ff +e9 +38 +03 +00 +00 +80 +fa +65 +0f +84 +2f +03 +00 +00 +e9 +61 +fa +ff +ff +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +9f +02 +00 +00 +80 +fa +44 +0f +8e +48 +fa +ff +ff +e9 +f0 +02 +00 +00 +80 +fa +65 +0f +84 +e7 +02 +00 +00 +e9 +35 +fa +ff +ff +41 +8a +11 +80 +fa +50 +0f +84 +c1 +02 +00 +00 +80 +fa +70 +0f +84 +b8 +02 +00 +00 +e9 +1e +fa +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +39 +0f +87 +0c +fa +ff +ff +ff +24 +85 +50 +49 +00 +00 +41 +80 +39 +00 +0f +8f +f8 +f9 +ff +ff +c7 +07 +20 +1f +00 +00 +c7 +47 +04 +07 +00 +00 +00 +e9 +c0 +ac +00 +00 +41 +8a +11 +80 +fa +4f +7f +23 +80 +fa +44 +7f +07 +84 +d2 +e9 +d1 +00 +00 +00 +80 +fa +45 +0f +8e +c4 +00 +00 +00 +80 +fa +4e +0f +8e +c0 +f9 +ff +ff +e9 +7e +01 +00 +00 +80 +fa +65 +7f +0e +80 +fa +64 +0f +8e +ad +f9 +ff +ff +e9 +a3 +00 +00 +00 +80 +fa +6f +0f +84 +62 +01 +00 +00 +e9 +9a +f9 +ff +ff +41 +8a +11 +80 +fa +43 +74 +42 +80 +fa +63 +74 +3d +e9 +8b +f9 +ff +ff +41 +80 +39 +00 +0f +8f +7e +f9 +ff +ff +c7 +07 +20 +1f +00 +00 +c7 +47 +04 +07 +08 +00 +00 +e9 +46 +ac +00 +00 +41 +80 +39 +00 +0f +8f +62 +f9 +ff +ff +c7 +07 +20 +1f +00 +00 +c7 +47 +04 +07 +04 +00 +00 +e9 +2a +ac +00 +00 +41 +8a +11 +80 +fa +58 +74 +09 +80 +fa +78 +0f +85 +42 +f9 +ff +ff +41 +8a +11 +80 +fa +5a +74 +09 +80 +fa +7a +0f +85 +31 +f9 +ff +ff +41 +80 +39 +00 +0f +8f +24 +f9 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +fa +a9 +00 +00 +c7 +07 +00 +20 +00 +00 +c7 +47 +04 +02 +40 +00 +00 +e9 +0d +aa +00 +00 +41 +80 +39 +00 +0f +8f +fb +f8 +ff +ff +c7 +07 +20 +1f +00 +00 +c7 +47 +04 +07 +0a +00 +00 +e9 +c3 +ab +00 +00 +41 +80 +39 +00 +0f +8f +df +f8 +ff +ff +c7 +07 +20 +1f +00 +00 +c7 +47 +04 +07 +01 +00 +00 +e9 +a7 +ab +00 +00 +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +17 +02 +00 +00 +80 +fa +44 +0f +8e +b4 +f8 +ff +ff +e9 +2b +01 +00 +00 +80 +fa +65 +0f +84 +22 +01 +00 +00 +e9 +a1 +f8 +ff +ff +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +07 +02 +00 +00 +80 +fa +44 +0f +8e +88 +f8 +ff +ff +e9 +e3 +00 +00 +00 +80 +fa +65 +0f +84 +da +00 +00 +00 +e9 +75 +f8 +ff +ff +41 +80 +39 +00 +0f +8f +6b +f8 +ff +ff +c7 +07 +20 +1f +00 +00 +c7 +47 +04 +07 +05 +00 +00 +e9 +33 +ab +00 +00 +41 +80 +39 +00 +0f +8f +4f +f8 +ff +ff +c7 +07 +20 +1f +00 +00 +c7 +47 +04 +07 +09 +00 +00 +e9 +17 +ab +00 +00 +41 +80 +39 +00 +0f +8f +33 +f8 +ff +ff +c7 +07 +20 +1f +00 +00 +c7 +47 +04 +07 +0b +00 +00 +e9 +fb +aa +00 +00 +41 +8a +11 +80 +fa +45 +7f +13 +84 +d2 +0f +8e +c8 +00 +00 +00 +80 +fa +44 +0f +8e +08 +f8 +ff +ff +eb +4a +80 +fa +65 +74 +45 +e9 +fc +f7 +ff +ff +41 +8a +11 +80 +fa +45 +7f +13 +84 +d2 +0f +8e +bf +00 +00 +00 +80 +fa +44 +0f +8e +e3 +f7 +ff +ff +eb +09 +80 +fa +65 +0f +85 +d8 +f7 +ff +ff +41 +80 +39 +00 +0f +8f +ce +f7 +ff +ff +c7 +07 +20 +1f +00 +00 +c7 +47 +04 +07 +0f +00 +00 +e9 +96 +aa +00 +00 +41 +80 +39 +00 +0f +8f +b2 +f7 +ff +ff +c7 +07 +20 +1f +00 +00 +c7 +47 +04 +07 +0c +00 +00 +e9 +7a +aa +00 +00 +41 +80 +39 +00 +0f +8f +96 +f7 +ff +ff +c7 +07 +20 +1f +00 +00 +c7 +47 +04 +07 +07 +00 +00 +e9 +5e +aa +00 +00 +41 +80 +39 +00 +0f +8f +7a +f7 +ff +ff +c7 +07 +20 +1f +00 +00 +c7 +47 +04 +07 +02 +00 +00 +e9 +42 +aa +00 +00 +41 +80 +39 +00 +0f +8f +5e +f7 +ff +ff +c7 +07 +60 +1c +00 +00 +e9 +0f +14 +00 +00 +41 +80 +39 +00 +0f +8f +49 +f7 +ff +ff +c7 +07 +20 +1f +00 +00 +c7 +47 +04 +07 +0e +00 +00 +e9 +11 +aa +00 +00 +41 +80 +39 +00 +0f +8f +2d +f7 +ff +ff +c7 +07 +20 +1f +00 +00 +c7 +47 +04 +07 +0d +00 +00 +e9 +f5 +a9 +00 +00 +41 +8a +11 +80 +fa +58 +74 +09 +80 +fa +78 +0f +85 +0d +f7 +ff +ff +41 +8a +11 +80 +fa +5a +74 +09 +80 +fa +7a +0f +85 +fc +f6 +ff +ff +41 +80 +39 +00 +0f +8f +ef +f6 +ff +ff +c7 +07 +00 +20 +00 +00 +c7 +47 +04 +02 +20 +00 +00 +e9 +a1 +a7 +00 +00 +41 +8a +11 +80 +fa +5a +74 +09 +80 +fa +7a +0f +85 +cf +f6 +ff +ff +41 +80 +39 +00 +0f +8f +c2 +f6 +ff +ff +c7 +07 +00 +20 +00 +00 +c7 +47 +04 +02 +10 +00 +00 +e9 +8a +a9 +00 +00 +41 +80 +39 +00 +0f +8f +a6 +f6 +ff +ff +c7 +07 +20 +1f +00 +00 +c7 +47 +04 +07 +06 +00 +00 +e9 +6e +a9 +00 +00 +41 +80 +39 +00 +0f +8f +8a +f6 +ff +ff +c7 +07 +20 +1f +00 +00 +c7 +47 +04 +07 +03 +00 +00 +e9 +52 +a9 +00 +00 +41 +8a +11 +80 +fa +54 +0f +84 +fe +03 +00 +00 +80 +fa +74 +0f +84 +f5 +03 +00 +00 +e9 +61 +f6 +ff +ff +41 +8a +11 +80 +fa +49 +0f +84 +b7 +03 +00 +00 +80 +fa +69 +0f +84 +ae +03 +00 +00 +e9 +47 +f6 +ff +ff +41 +8a +11 +80 +fa +55 +0f +84 +70 +03 +00 +00 +80 +fa +75 +0f +84 +67 +03 +00 +00 +e9 +2d +f6 +ff +ff +41 +8a +11 +80 +fa +56 +7f +37 +80 +fa +52 +7f +12 +84 +d2 +7e +61 +80 +fa +43 +0f +84 +42 +01 +00 +00 +e9 +0b +f6 +ff +ff +80 +fa +53 +0f +8e +50 +01 +00 +00 +80 +fa +54 +0f +8e +9a +01 +00 +00 +80 +fa +55 +0f +8e +f0 +f5 +ff +ff +e9 +ed +01 +00 +00 +80 +fa +73 +7f +17 +80 +fa +63 +0f +84 +0f +01 +00 +00 +80 +fa +72 +0f +8e +d4 +f5 +ff +ff +e9 +1d +01 +00 +00 +80 +fa +74 +0f +8e +67 +01 +00 +00 +80 +fa +76 +0f +84 +bf +01 +00 +00 +e9 +b8 +f5 +ff +ff +c7 +07 +a0 +0d +00 +00 +e9 +b6 +75 +00 +00 +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +9f +f5 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +8e +f5 +ff +ff +41 +8a +11 +80 +fa +57 +7f +24 +80 +fa +44 +7f +0f +84 +d2 +7e +39 +80 +fa +43 +0f +8e +71 +f5 +ff +ff +eb +5c +80 +fa +51 +74 +73 +80 +fa +56 +0f +8e +61 +f5 +ff +ff +eb +30 +80 +fa +70 +7f +0a +80 +fa +64 +74 +42 +e9 +50 +f5 +ff +ff +80 +fa +71 +7e +54 +80 +fa +77 +74 +17 +e9 +41 +f5 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +cf +00 +00 +e9 +09 +a8 +00 +00 +41 +80 +39 +00 +0f +8f +25 +f5 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +cf +10 +00 +e9 +ed +a7 +00 +00 +41 +80 +39 +00 +0f +8f +09 +f5 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +cf +20 +00 +e9 +bb +a5 +00 +00 +41 +80 +39 +00 +0f +8f +ed +f4 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +c3 +a5 +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +cf +40 +00 +e9 +d6 +a5 +00 +00 +41 +80 +39 +00 +0f +8f +c4 +f4 +ff +ff +c7 +07 +a0 +12 +00 +00 +c7 +47 +04 +06 +40 +00 +00 +e9 +8c +a7 +00 +00 +41 +8a +11 +80 +fa +57 +7f +21 +80 +fa +43 +7f +05 +80 +fa +42 +eb +1f +80 +fa +44 +0f +8e +97 +01 +00 +00 +80 +fa +56 +0f +8e +91 +f4 +ff +ff +e9 +a5 +01 +00 +00 +80 +fa +63 +7f +0e +80 +fa +62 +0f +84 +5f +01 +00 +00 +e9 +79 +f4 +ff +ff +80 +fa +64 +0f +8e +6d +01 +00 +00 +80 +fa +77 +0f +84 +80 +01 +00 +00 +e9 +62 +f4 +ff +ff +41 +8a +11 +80 +fa +33 +7f +26 +80 +fa +2f +7f +0a +84 +d2 +0f +8f +4a +f4 +ff +ff +eb +38 +80 +fa +30 +0f +8e +d1 +00 +00 +00 +80 +fa +32 +0f +8e +36 +f4 +ff +ff +e9 +f9 +00 +00 +00 +80 +fa +4f +7f +0e +80 +fa +4e +0f +8e +23 +f4 +ff +ff +e9 +bd +00 +00 +00 +80 +fa +6f +0f +84 +b4 +00 +00 +00 +e9 +10 +f4 +ff +ff +c7 +07 +54 +22 +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +d8 +a6 +00 +00 +41 +8a +11 +80 +fa +4c +7f +10 +80 +fa +44 +74 +25 +80 +fa +4b +0f +8e +eb +f3 +ff +ff +eb +33 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +db +f3 +ff +ff +eb +0a +80 +fa +6c +74 +1e +e9 +cf +f3 +ff +ff +41 +80 +39 +00 +0f +8f +c2 +f3 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +08 +0f +00 +eb +39 +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +a5 +f3 +ff +ff +41 +8a +11 +80 +fa +47 +74 +09 +80 +fa +67 +0f +85 +94 +f3 +ff +ff +41 +80 +39 +00 +0f +8f +87 +f3 +ff +ff +c7 +07 +8c +00 +00 +00 +c7 +47 +04 +01 +01 +0f +07 +c7 +47 +08 +08 +00 +80 +00 +e9 +4f +a6 +00 +00 +41 +8a +11 +80 +fa +33 +74 +2e +e9 +64 +f3 +ff +ff +41 +80 +39 +00 +0f +8f +57 +f3 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +22 +a5 +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +ce +00 +00 +e9 +12 +a6 +00 +00 +41 +80 +39 +00 +0f +8f +2e +f3 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +cc +00 +00 +e9 +f6 +a5 +00 +00 +41 +80 +39 +00 +0f +8f +12 +f3 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +6c +00 +00 +e9 +da +a5 +00 +00 +41 +80 +39 +00 +0f +8f +f6 +f2 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +6d +20 +00 +e9 +a8 +a3 +00 +00 +41 +80 +39 +00 +0f +8f +da +f2 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +6d +10 +00 +e9 +a2 +a5 +00 +00 +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +ba +f2 +ff +ff +41 +80 +39 +00 +0f +8f +ad +f2 +ff +ff +c7 +07 +60 +16 +00 +00 +c7 +47 +04 +13 +00 +00 +00 +e9 +75 +a5 +00 +00 +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +8d +f2 +ff +ff +41 +80 +39 +00 +0f +8f +80 +f2 +ff +ff +c7 +07 +60 +13 +00 +00 +c7 +47 +04 +04 +07 +00 +00 +e9 +48 +a5 +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +60 +f2 +ff +ff +41 +80 +39 +00 +0f +8f +53 +f2 +ff +ff +c7 +07 +60 +33 +00 +00 +e9 +87 +2c +00 +00 +41 +8a +11 +80 +fa +56 +7f +3c +80 +fa +4d +7f +17 +80 +fa +42 +0f +8e +35 +f2 +ff +ff +80 +fa +43 +0f +8e +96 +1e +00 +00 +80 +fa +44 +eb +3a +80 +fa +4e +0f +8e +e2 +1e +00 +00 +80 +fa +54 +0f +8e +15 +f2 +ff +ff +80 +fa +55 +0f +8e +5c +1e +00 +00 +e9 +e5 +1e +00 +00 +80 +fa +6d +7f +20 +80 +fa +62 +0f +8e +f9 +f1 +ff +ff +80 +fa +63 +0f +8e +5a +1e +00 +00 +80 +fa +64 +0f +8e +91 +1e +00 +00 +e9 +e2 +f1 +ff +ff +80 +fa +74 +7f +0e +80 +fa +6e +0f +8e +98 +1e +00 +00 +e9 +cf +f1 +ff +ff +80 +fa +75 +0f +8e +16 +1e +00 +00 +80 +fa +76 +0f +8e +9b +1e +00 +00 +e9 +b8 +f1 +ff +ff +41 +8a +11 +80 +fa +49 +0f +84 +9c +1d +00 +00 +80 +fa +69 +0f +84 +93 +1d +00 +00 +e9 +9e +f1 +ff +ff +41 +8a +11 +80 +fa +58 +0f +84 +33 +1d +00 +00 +80 +fa +78 +0f +84 +2a +1d +00 +00 +e9 +84 +f1 +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +32 +83 +f8 +41 +0f +87 +72 +f1 +ff +ff +ff +24 +85 +38 +4a +00 +00 +41 +8a +11 +80 +fa +4d +7f +0e +80 +fa +32 +0f +84 +82 +16 +00 +00 +e9 +55 +f1 +ff +ff +80 +fa +4e +0f +8e +5a +16 +00 +00 +80 +fa +6e +0f +84 +51 +16 +00 +00 +e9 +3e +f1 +ff +ff +41 +8a +11 +80 +fa +56 +7f +46 +80 +fa +49 +7f +17 +80 +fa +41 +0f +84 +86 +0f +00 +00 +80 +fa +48 +0f +8e +1f +f1 +ff +ff +e9 +09 +10 +00 +00 +80 +fa +4f +7f +0e +80 +fa +4e +0f +8e +0c +f1 +ff +ff +e9 +10 +10 +00 +00 +80 +fa +54 +0f +8e +fe +f0 +ff +ff +80 +fa +55 +0f +8e +ca +0f +00 +00 +e9 +13 +10 +00 +00 +80 +fa +6e +7f +21 +80 +fa +61 +7f +0e +80 +fa +60 +0f +8e +dd +f0 +ff +ff +e9 +36 +0f +00 +00 +80 +fa +69 +0f +84 +be +0f +00 +00 +e9 +ca +f0 +ff +ff +80 +fa +74 +7f +0e +80 +fa +6f +0f +8e +c5 +0f +00 +00 +e9 +b7 +f0 +ff +ff +80 +fa +75 +0f +8e +83 +0f +00 +00 +80 +fa +76 +0f +8e +c8 +0f +00 +00 +e9 +a0 +f0 +ff +ff +41 +8a +11 +80 +fa +52 +7f +17 +80 +fa +50 +0f +84 +fa +0c +00 +00 +80 +fa +51 +0f +8e +86 +f0 +ff +ff +e9 +46 +0d +00 +00 +80 +fa +70 +7f +0e +80 +fa +6f +0f +8e +73 +f0 +ff +ff +e9 +d9 +0c +00 +00 +80 +fa +72 +0f +84 +2a +0d +00 +00 +e9 +60 +f0 +ff +ff +41 +8a +11 +80 +fa +45 +0f +84 +37 +0b +00 +00 +80 +fa +65 +0f +84 +2e +0b +00 +00 +e9 +46 +f0 +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +36 +0f +87 +34 +f0 +ff +ff +ff +24 +85 +40 +4b +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +4e +74 +7d +80 +fa +52 +0f +8e +17 +f0 +ff +ff +eb +58 +80 +fa +6e +7f +0b +80 +fa +6d +0f +8e +07 +f0 +ff +ff +eb +62 +80 +fa +73 +74 +43 +e9 +fb +ef +ff +ff +41 +8a +11 +80 +fa +4f +74 +09 +80 +fa +6f +0f +85 +ea +ef +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +d9 +ef +ff +ff +41 +80 +39 +00 +0f +8f +cc +ef +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +ef +00 +00 +e9 +9f +2e +00 +00 +41 +8a +11 +80 +fa +48 +0f +84 +db +02 +00 +00 +80 +fa +68 +0f +84 +d2 +02 +00 +00 +e9 +a3 +ef +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +92 +ef +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +81 +ef +ff +ff +41 +8a +11 +80 +fa +4b +74 +09 +80 +fa +6b +0f +85 +70 +ef +ff +ff +41 +8a +11 +80 +fa +4c +7f +13 +80 +fa +48 +74 +28 +80 +fa +4b +0f +8e +5a +ef +ff +ff +e9 +89 +00 +00 +00 +80 +fa +68 +7f +0b +80 +fa +67 +0f +8e +47 +ef +ff +ff +eb +0a +80 +fa +6c +74 +74 +e9 +3b +ef +ff +ff +41 +8a +11 +80 +fa +57 +7f +2a +80 +fa +44 +7f +0e +80 +fa +42 +0f +84 +7f +01 +00 +00 +80 +fa +43 +eb +28 +80 +fa +51 +0f +84 +9d +01 +00 +00 +80 +fa +56 +0f +8e +0e +ef +ff +ff +e9 +a1 +01 +00 +00 +80 +fa +64 +7f +17 +80 +fa +62 +0f +84 +55 +01 +00 +00 +80 +fa +63 +0f +8e +f2 +ee +ff +ff +e9 +61 +01 +00 +00 +80 +fa +71 +7f +0e +80 +fa +70 +0f +8e +df +ee +ff +ff +e9 +60 +01 +00 +00 +80 +fa +77 +0f +84 +69 +01 +00 +00 +e9 +cc +ee +ff +ff +41 +8a +11 +80 +fa +57 +7f +1f +80 +fa +44 +7f +0a +80 +fa +42 +74 +44 +80 +fa +43 +eb +1d +80 +fa +51 +74 +66 +80 +fa +56 +0f +8e +a7 +ee +ff +ff +eb +6d +80 +fa +64 +7f +10 +80 +fa +62 +74 +25 +80 +fa +63 +0f +8e +92 +ee +ff +ff +eb +34 +80 +fa +71 +7f +0b +80 +fa +70 +0f +8e +82 +ee +ff +ff +eb +36 +80 +fa +77 +74 +43 +e9 +76 +ee +ff +ff +41 +8a +11 +80 +fa +57 +0f +84 +a8 +00 +00 +00 +80 +fa +77 +0f +84 +9f +00 +00 +00 +e9 +5c +ee +ff +ff +41 +8a +11 +80 +fa +51 +74 +76 +80 +fa +71 +74 +71 +e9 +4a +ee +ff +ff +41 +8a +11 +80 +fa +44 +74 +37 +80 +fa +64 +74 +32 +e9 +38 +ee +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +27 +ee +ff +ff +41 +80 +39 +00 +0f +8f +1a +ee +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +61 +00 +00 +e9 +ed +2c +00 +00 +41 +8a +11 +80 +fa +51 +74 +09 +80 +fa +71 +0f +85 +fa +ed +ff +ff +41 +80 +39 +00 +0f +8f +ed +ed +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +6c +66 +00 +e9 +49 +99 +00 +00 +41 +80 +39 +00 +0f +8f +d1 +ed +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +62 +00 +00 +e9 +a4 +2c +00 +00 +41 +80 +39 +00 +0f +8f +b5 +ed +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +60 +00 +00 +e9 +88 +2c +00 +00 +41 +8a +11 +80 +fa +57 +0f +84 +a8 +00 +00 +00 +80 +fa +77 +0f +84 +9f +00 +00 +00 +e9 +8c +ed +ff +ff +41 +8a +11 +80 +fa +51 +74 +76 +80 +fa +71 +74 +71 +e9 +7a +ed +ff +ff +41 +8a +11 +80 +fa +44 +74 +37 +80 +fa +64 +74 +32 +e9 +68 +ed +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +57 +ed +ff +ff +41 +80 +39 +00 +0f +8f +4a +ed +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +69 +00 +00 +e9 +1d +2c +00 +00 +41 +8a +11 +80 +fa +51 +74 +09 +80 +fa +71 +0f +85 +2a +ed +ff +ff +41 +80 +39 +00 +0f +8f +1d +ed +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +6d +66 +00 +e9 +79 +98 +00 +00 +41 +80 +39 +00 +0f +8f +01 +ed +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +6a +00 +00 +e9 +d4 +2b +00 +00 +41 +80 +39 +00 +0f +8f +e5 +ec +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +68 +00 +00 +e9 +b8 +2b +00 +00 +41 +8a +11 +80 +fa +46 +7f +22 +80 +fa +40 +7f +0a +84 +d2 +0f +8f +be +ec +ff +ff +eb +31 +80 +fa +41 +7e +3e +80 +fa +45 +0f +8e +ae +ec +ff +ff +e9 +9e +00 +00 +00 +80 +fa +61 +7f +0b +80 +fa +60 +0f +8e +9b +ec +ff +ff +eb +20 +80 +fa +66 +0f +84 +85 +00 +00 +00 +e9 +8b +ec +ff +ff +c7 +07 +80 +06 +00 +00 +c7 +47 +04 +1c +00 +00 +00 +e9 +53 +9f +00 +00 +41 +8a +11 +80 +fa +57 +7f +26 +80 +fa +43 +7f +0a +84 +d2 +0f +8f +64 +ec +ff +ff +eb +38 +80 +fa +44 +0f +8e +0b +01 +00 +00 +80 +fa +56 +0f +8e +50 +ec +ff +ff +e9 +26 +01 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +3d +ec +ff +ff +e9 +ea +00 +00 +00 +80 +fa +77 +0f +84 +0a +01 +00 +00 +e9 +2a +ec +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +f5 +9d +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +60 +00 +00 +e9 +72 +65 +00 +00 +41 +8a +11 +80 +fa +57 +7f +24 +80 +fa +44 +7f +0f +84 +d2 +7e +39 +80 +fa +43 +0f +8e +f1 +eb +ff +ff +eb +40 +80 +fa +51 +74 +57 +80 +fa +56 +0f +8e +e1 +eb +ff +ff +eb +75 +80 +fa +70 +7f +0a +80 +fa +64 +74 +26 +e9 +d0 +eb +ff +ff +80 +fa +71 +7e +38 +80 +fa +77 +74 +5c +e9 +c1 +eb +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +9c +00 +00 +e9 +89 +9e +00 +00 +41 +80 +39 +00 +0f +8f +a5 +eb +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +9c +20 +00 +e9 +57 +9c +00 +00 +41 +80 +39 +00 +0f +8f +89 +eb +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +5f +9c +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +9c +40 +00 +e9 +72 +9c +00 +00 +41 +80 +39 +00 +0f +8f +60 +eb +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +9c +10 +00 +e9 +28 +9e +00 +00 +41 +80 +39 +00 +0f +8f +44 +eb +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +0f +9d +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +60 +20 +00 +e9 +e9 +9b +00 +00 +41 +80 +39 +00 +0f +8f +1b +eb +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +e6 +9c +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +60 +10 +00 +e9 +63 +64 +00 +00 +41 +8a +11 +80 +fa +4c +0f +84 +10 +05 +00 +00 +80 +fa +6c +0f +84 +07 +05 +00 +00 +e9 +e5 +ea +ff +ff +41 +8a +11 +80 +fa +4c +7f +17 +80 +fa +41 +0f +84 +b3 +03 +00 +00 +80 +fa +4b +0f +8e +cb +ea +ff +ff +e9 +e5 +03 +00 +00 +80 +fa +61 +7f +0e +80 +fa +60 +0f +8e +b8 +ea +ff +ff +e9 +92 +03 +00 +00 +80 +fa +6c +0f +84 +c9 +03 +00 +00 +e9 +a5 +ea +ff +ff +41 +8a +11 +80 +fa +42 +0f +84 +bb +01 +00 +00 +80 +fa +62 +0f +84 +b2 +01 +00 +00 +e9 +8b +ea +ff +ff +41 +8a +11 +80 +fa +44 +0f +84 +63 +01 +00 +00 +80 +fa +64 +0f +84 +5a +01 +00 +00 +e9 +71 +ea +ff +ff +41 +8a +11 +80 +fa +55 +74 +59 +80 +fa +75 +74 +54 +e9 +5f +ea +ff +ff +41 +8a +11 +80 +fa +41 +74 +09 +80 +fa +61 +0f +85 +4e +ea +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +3d +ea +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +2c +ea +ff +ff +41 +80 +39 +00 +0f +8f +1f +ea +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +bb +00 +00 +e9 +a5 +15 +00 +00 +41 +8a +11 +80 +fa +46 +74 +09 +80 +fa +66 +0f +85 +ff +e9 +ff +ff +41 +8a +11 +80 +fa +57 +7f +1f +80 +fa +48 +7f +0a +80 +fa +44 +74 +44 +80 +fa +47 +eb +1d +80 +fa +4c +74 +68 +80 +fa +56 +0f +8e +da +e9 +ff +ff +eb +6f +80 +fa +68 +7f +10 +80 +fa +64 +74 +25 +80 +fa +67 +0f +8e +c5 +e9 +ff +ff +eb +36 +80 +fa +6c +7f +0b +80 +fa +6b +0f +8e +b5 +e9 +ff +ff +eb +38 +80 +fa +77 +74 +45 +e9 +a9 +e9 +ff +ff +41 +80 +39 +00 +0f +8f +9c +e9 +ff +ff +c7 +07 +9c +2d +00 +00 +c7 +47 +04 +01 +70 +66 +00 +e9 +f8 +94 +00 +00 +41 +8a +11 +80 +fa +57 +74 +4d +80 +fa +77 +74 +48 +e9 +7b +e9 +ff +ff +41 +8a +11 +80 +fa +57 +74 +1f +80 +fa +77 +74 +1a +e9 +69 +e9 +ff +ff +41 +80 +39 +00 +0f +8f +5c +e9 +ff +ff +c7 +07 +58 +30 +00 +00 +e9 +66 +31 +00 +00 +41 +80 +39 +00 +0f +8f +47 +e9 +ff +ff +c7 +07 +9c +2d +00 +00 +c7 +47 +04 +01 +70 +f2 +00 +e9 +a3 +94 +00 +00 +41 +80 +39 +00 +0f +8f +2b +e9 +ff +ff +c7 +07 +9c +2d +00 +00 +c7 +47 +04 +01 +70 +f3 +00 +e9 +87 +94 +00 +00 +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +0b +e9 +ff +ff +41 +8a +11 +80 +fa +57 +74 +09 +80 +fa +77 +0f +85 +fa +e8 +ff +ff +41 +80 +39 +00 +0f +8f +ed +e8 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +f6 +00 +00 +e9 +f7 +30 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +42 +83 +f8 +35 +0f +87 +cc +e8 +ff +ff +ff +24 +85 +1c +4c +00 +00 +41 +80 +39 +00 +0f +8f +b8 +e8 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +f8 +00 +00 +e9 +8b +27 +00 +00 +41 +80 +39 +00 +0f +8f +9c +e8 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +f9 +00 +00 +e9 +6f +27 +00 +00 +41 +80 +39 +00 +0f +8f +80 +e8 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +fa +00 +00 +e9 +53 +27 +00 +00 +41 +80 +39 +00 +0f +8f +64 +e8 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +fb +00 +00 +e9 +37 +27 +00 +00 +41 +8a +11 +80 +fa +57 +7f +21 +80 +fa +48 +7f +05 +80 +fa +42 +eb +1f +80 +fa +49 +0f +8e +cf +00 +00 +00 +80 +fa +56 +0f +8e +31 +e8 +ff +ff +e9 +d3 +00 +00 +00 +80 +fa +68 +7f +0e +80 +fa +62 +0f +84 +97 +00 +00 +00 +e9 +19 +e8 +ff +ff +80 +fa +69 +0f +8e +a5 +00 +00 +00 +80 +fa +77 +0f +84 +ae +00 +00 +00 +e9 +02 +e8 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +f1 +e7 +ff +ff +41 +8a +11 +80 +fa +57 +7f +10 +80 +fa +42 +74 +25 +80 +fa +56 +0f +8e +db +e7 +ff +ff +eb +36 +80 +fa +62 +7f +0b +80 +fa +61 +0f +8e +cb +e7 +ff +ff +eb +0a +80 +fa +77 +74 +21 +e9 +bf +e7 +ff +ff +41 +80 +39 +00 +0f +8f +b2 +e7 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +d8 +00 +00 +e9 +85 +26 +00 +00 +41 +80 +39 +00 +0f +8f +96 +e7 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +d9 +00 +00 +e9 +69 +26 +00 +00 +41 +80 +39 +00 +0f +8f +7a +e7 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +e8 +00 +00 +e9 +4d +26 +00 +00 +41 +8a +11 +80 +fa +57 +74 +26 +80 +fa +77 +74 +21 +e9 +59 +e7 +ff +ff +41 +80 +39 +00 +0f +8f +4c +e7 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +e9 +00 +00 +e9 +1f +26 +00 +00 +41 +80 +39 +00 +0f +8f +30 +e7 +ff +ff +c7 +07 +c8 +32 +00 +00 +c7 +47 +04 +01 +55 +00 +00 +e9 +25 +17 +00 +00 +41 +8a +11 +80 +fa +57 +7f +17 +80 +fa +44 +0f +84 +11 +01 +00 +00 +80 +fa +56 +0f +8e +07 +e7 +ff +ff +e9 +e7 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +f4 +e6 +ff +ff +e9 +f0 +00 +00 +00 +80 +fa +77 +0f +84 +cb +00 +00 +00 +e9 +e1 +e6 +ff +ff +41 +8a +11 +80 +fa +57 +7f +1a +80 +fa +50 +7f +05 +80 +fa +44 +eb +18 +80 +fa +51 +7e +77 +80 +fa +56 +0f +8e +c1 +e6 +ff +ff +eb +1d +80 +fa +70 +7f +0a +80 +fa +64 +74 +2f +e9 +b0 +e6 +ff +ff +80 +fa +71 +7e +58 +80 +fa +77 +0f +85 +a2 +e6 +ff +ff +41 +80 +39 +00 +0f +8f +95 +e6 +ff +ff +c7 +07 +a0 +2c +00 +00 +c7 +47 +04 +04 +d1 +71 +02 +e9 +68 +25 +00 +00 +41 +8a +11 +80 +fa +51 +7f +0f +84 +d2 +7e +15 +80 +fa +50 +0f +8e +6e +e6 +ff +ff +eb +38 +80 +fa +71 +74 +33 +e9 +62 +e6 +ff +ff +c7 +07 +a0 +2c +00 +00 +c7 +47 +04 +04 +d2 +72 +02 +e9 +35 +25 +00 +00 +41 +80 +39 +00 +0f +8f +46 +e6 +ff +ff +c7 +07 +a0 +2c +00 +00 +c7 +47 +04 +04 +d3 +73 +02 +e9 +19 +25 +00 +00 +41 +80 +39 +00 +0f +8f +2a +e6 +ff +ff +c7 +07 +90 +32 +00 +00 +c7 +47 +04 +01 +03 +00 +00 +e9 +86 +91 +00 +00 +41 +80 +39 +00 +0f +8f +0e +e6 +ff +ff +c7 +07 +a0 +2c +00 +00 +c7 +47 +04 +04 +e1 +71 +04 +e9 +e1 +24 +00 +00 +41 +80 +39 +00 +0f +8f +f2 +e5 +ff +ff +c7 +07 +a0 +2c +00 +00 +c7 +47 +04 +04 +e2 +72 +04 +e9 +c5 +24 +00 +00 +41 +8a +11 +80 +fa +57 +7f +1a +80 +fa +50 +7f +05 +80 +fa +44 +eb +18 +80 +fa +51 +7e +77 +80 +fa +56 +0f +8e +c3 +e5 +ff +ff +eb +1d +80 +fa +70 +7f +0a +80 +fa +64 +74 +2f +e9 +b2 +e5 +ff +ff +80 +fa +71 +7e +58 +80 +fa +77 +0f +85 +a4 +e5 +ff +ff +41 +80 +39 +00 +0f +8f +97 +e5 +ff +ff +c7 +07 +a0 +2c +00 +00 +c7 +47 +04 +04 +f1 +71 +06 +e9 +6a +24 +00 +00 +41 +8a +11 +80 +fa +51 +7f +0f +84 +d2 +7e +15 +80 +fa +50 +0f +8e +70 +e5 +ff +ff +eb +38 +80 +fa +71 +74 +33 +e9 +64 +e5 +ff +ff +c7 +07 +a0 +2c +00 +00 +c7 +47 +04 +04 +f2 +72 +06 +e9 +37 +24 +00 +00 +41 +80 +39 +00 +0f +8f +48 +e5 +ff +ff +c7 +07 +a0 +2c +00 +00 +c7 +47 +04 +04 +f3 +73 +06 +e9 +1b +24 +00 +00 +41 +80 +39 +00 +0f +8f +2c +e5 +ff +ff +c7 +07 +90 +32 +00 +00 +c7 +47 +04 +01 +07 +00 +00 +e9 +88 +90 +00 +00 +41 +8a +11 +80 +fa +46 +74 +09 +80 +fa +66 +0f +85 +0c +e5 +ff +ff +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +fb +e4 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +ea +e4 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +d9 +e4 +ff +ff +41 +8a +11 +80 +fa +48 +74 +09 +80 +fa +68 +0f +85 +c8 +e4 +ff +ff +41 +8a +11 +80 +fa +57 +7f +24 +80 +fa +4e +7f +0f +84 +d2 +7e +39 +80 +fa +4d +0f +8e +ab +e4 +ff +ff +eb +40 +80 +fa +54 +74 +55 +80 +fa +56 +0f +8e +9b +e4 +ff +ff +eb +6a +80 +fa +73 +7f +0a +80 +fa +6e +74 +26 +e9 +8a +e4 +ff +ff +80 +fa +74 +7e +36 +80 +fa +77 +74 +51 +e9 +7b +e4 +ff +ff +c7 +07 +8c +00 +00 +00 +c7 +47 +04 +01 +0d +0f +00 +e9 +68 +7d +00 +00 +41 +8a +11 +80 +fa +54 +0f +84 +9e +00 +00 +00 +80 +fa +74 +0f +84 +95 +00 +00 +00 +e9 +52 +e4 +ff +ff +41 +8a +11 +80 +fa +2f +0f +8e +46 +e4 +ff +ff +80 +fa +30 +7e +2b +80 +fa +31 +7e +42 +80 +fa +32 +7e +59 +e9 +32 +e4 +ff +ff +41 +80 +39 +00 +0f +8f +25 +e4 +ff +ff +c7 +07 +8c +00 +00 +00 +c7 +47 +04 +01 +0d +0f +01 +e9 +12 +7d +00 +00 +41 +80 +39 +00 +0f +8f +09 +e4 +ff +ff +c7 +07 +8c +00 +00 +00 +c7 +47 +04 +01 +18 +0f +01 +e9 +70 +90 +00 +00 +41 +80 +39 +00 +0f +8f +ed +e3 +ff +ff +c7 +07 +8c +00 +00 +00 +c7 +47 +04 +01 +18 +0f +02 +e9 +54 +90 +00 +00 +41 +80 +39 +00 +0f +8f +d1 +e3 +ff +ff +c7 +07 +8c +00 +00 +00 +c7 +47 +04 +01 +18 +0f +03 +e9 +38 +90 +00 +00 +41 +8a +11 +80 +fa +41 +74 +09 +80 +fa +61 +0f +85 +b1 +e3 +ff +ff +41 +80 +39 +00 +0f +8f +a4 +e3 +ff +ff +c7 +07 +8c +00 +00 +00 +c7 +47 +04 +01 +18 +0f +00 +e9 +0b +90 +00 +00 +41 +8a +11 +80 +fa +46 +7f +22 +80 +fa +40 +7f +0a +84 +d2 +0f +8f +7d +e3 +ff +ff +eb +31 +80 +fa +41 +7e +5a +80 +fa +45 +0f +8e +6d +e3 +ff +ff +e9 +ba +00 +00 +00 +80 +fa +61 +7f +0b +80 +fa +60 +0f +8e +5a +e3 +ff +ff +eb +3c +80 +fa +66 +0f +84 +a1 +00 +00 +00 +e9 +4a +e3 +ff +ff +c7 +07 +a0 +09 +00 +00 +c7 +47 +04 +15 +00 +00 +00 +e9 +12 +96 +00 +00 +41 +80 +39 +00 +0f +8f +2e +e3 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +eb +00 +00 +e9 +01 +22 +00 +00 +41 +8a +11 +80 +fa +57 +7f +26 +80 +fa +43 +7f +0a +84 +d2 +0f +8f +07 +e3 +ff +ff +eb +38 +80 +fa +44 +0f +8e +0b +01 +00 +00 +80 +fa +56 +0f +8e +f3 +e2 +ff +ff +e9 +26 +01 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +e0 +e2 +ff +ff +e9 +ea +00 +00 +00 +80 +fa +77 +0f +84 +0a +01 +00 +00 +e9 +cd +e2 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +98 +94 +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +61 +00 +00 +e9 +15 +5c +00 +00 +41 +8a +11 +80 +fa +57 +7f +24 +80 +fa +44 +7f +0f +84 +d2 +7e +39 +80 +fa +43 +0f +8e +94 +e2 +ff +ff +eb +40 +80 +fa +51 +74 +73 +80 +fa +56 +0f +8e +84 +e2 +ff +ff +eb +4c +80 +fa +70 +7f +0a +80 +fa +64 +74 +26 +e9 +73 +e2 +ff +ff +80 +fa +71 +7e +54 +80 +fa +77 +74 +33 +e9 +64 +e2 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +9d +00 +00 +e9 +2c +95 +00 +00 +41 +80 +39 +00 +0f +8f +48 +e2 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +9d +20 +00 +e9 +fa +92 +00 +00 +41 +80 +39 +00 +0f +8f +2c +e2 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +9d +10 +00 +e9 +f4 +94 +00 +00 +41 +80 +39 +00 +0f +8f +10 +e2 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +e6 +92 +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +9d +40 +00 +e9 +f9 +92 +00 +00 +41 +80 +39 +00 +0f +8f +e7 +e1 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +b2 +93 +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +61 +20 +00 +e9 +8c +92 +00 +00 +41 +80 +39 +00 +0f +8f +be +e1 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +89 +93 +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +61 +10 +00 +e9 +06 +5b +00 +00 +41 +8a +11 +80 +fa +58 +7f +33 +80 +fa +44 +7f +17 +80 +fa +42 +0f +8e +8c +e1 +ff +ff +80 +fa +43 +0f +8e +0d +05 +00 +00 +e9 +22 +05 +00 +00 +80 +fa +47 +0f +84 +33 +05 +00 +00 +80 +fa +57 +0f +8e +6c +e1 +ff +ff +e9 +3f +05 +00 +00 +80 +fa +66 +7f +20 +80 +fa +62 +0f +8e +59 +e1 +ff +ff +80 +fa +63 +0f +8e +da +04 +00 +00 +80 +fa +64 +0f +8e +eb +04 +00 +00 +e9 +42 +e1 +ff +ff +80 +fa +67 +0f +8e +f7 +04 +00 +00 +80 +fa +78 +0f +84 +08 +05 +00 +00 +e9 +2b +e1 +ff +ff +41 +8a +11 +80 +fa +4c +0f +84 +88 +02 +00 +00 +80 +fa +6c +0f +84 +7f +02 +00 +00 +e9 +11 +e1 +ff +ff +41 +8a +11 +80 +fa +4e +0f +84 +e1 +01 +00 +00 +80 +fa +6e +0f +84 +d8 +01 +00 +00 +e9 +f7 +e0 +ff +ff +41 +8a +11 +80 +fa +56 +0f +84 +67 +01 +00 +00 +80 +fa +76 +0f +84 +5e +01 +00 +00 +e9 +dd +e0 +ff +ff +41 +8a +11 +80 +fa +5a +7f +1f +80 +fa +4c +7f +0a +80 +fa +47 +74 +44 +80 +fa +4b +eb +1d +80 +fa +4e +74 +66 +80 +fa +59 +0f +8e +b8 +e0 +ff +ff +eb +6d +80 +fa +6c +7f +10 +80 +fa +67 +74 +25 +80 +fa +6b +0f +8e +a3 +e0 +ff +ff +eb +34 +80 +fa +6e +7f +0b +80 +fa +6d +0f +8e +93 +e0 +ff +ff +eb +36 +80 +fa +7a +74 +43 +e9 +87 +e0 +ff +ff +41 +8a +11 +80 +fa +45 +0f +84 +b9 +00 +00 +00 +80 +fa +65 +0f +84 +b0 +00 +00 +00 +e9 +6d +e0 +ff +ff +41 +8a +11 +80 +fa +5a +74 +76 +80 +fa +7a +74 +71 +e9 +5b +e0 +ff +ff +41 +8a +11 +80 +fa +5a +74 +37 +80 +fa +7a +74 +32 +e9 +49 +e0 +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +38 +e0 +ff +ff +41 +80 +39 +00 +0f +8f +2b +e0 +ff +ff +c7 +07 +c8 +32 +00 +00 +c7 +47 +04 +01 +58 +00 +00 +e9 +20 +10 +00 +00 +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +0b +e0 +ff +ff +41 +80 +39 +00 +0f +8f +fe +df +ff +ff +c7 +07 +c8 +32 +00 +00 +c7 +47 +04 +01 +5a +00 +00 +e9 +f3 +0f +00 +00 +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +de +df +ff +ff +41 +80 +39 +00 +0f +8f +d1 +df +ff +ff +c7 +07 +c8 +32 +00 +00 +c7 +47 +04 +01 +5b +00 +00 +e9 +c6 +0f +00 +00 +41 +8a +11 +80 +fa +5a +74 +09 +80 +fa +7a +0f +85 +b1 +df +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +a0 +df +ff +ff +41 +80 +39 +00 +0f +8f +93 +df +ff +ff +c7 +07 +c8 +32 +00 +00 +c7 +47 +04 +01 +5c +00 +00 +e9 +88 +0f +00 +00 +41 +8a +11 +80 +fa +4d +74 +09 +80 +fa +6d +0f +85 +73 +df +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +62 +df +ff +ff +41 +8a +11 +80 +fa +4b +74 +09 +80 +fa +6b +0f +85 +51 +df +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +40 +df +ff +ff +41 +80 +39 +00 +0f +8f +33 +df +ff +ff +c7 +07 +20 +30 +00 +00 +c7 +47 +04 +02 +00 +00 +00 +e9 +b2 +8a +00 +00 +41 +8a +11 +80 +fa +55 +7f +10 +80 +fa +53 +74 +25 +80 +fa +54 +0f +8e +0e +df +ff +ff +eb +2c +80 +fa +73 +7f +0b +80 +fa +72 +0f +8e +fe +de +ff +ff +eb +0a +80 +fa +75 +74 +17 +e9 +f2 +de +ff +ff +41 +8a +11 +80 +fa +57 +74 +37 +80 +fa +77 +74 +32 +e9 +e0 +de +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +cf +de +ff +ff +41 +80 +39 +00 +0f +8f +c2 +de +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +da +00 +00 +e9 +cc +26 +00 +00 +41 +80 +39 +00 +0f +8f +a6 +de +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +ea +00 +00 +e9 +b0 +26 +00 +00 +41 +8a +11 +80 +fa +55 +7f +21 +80 +fa +4b +7f +05 +80 +fa +48 +eb +1f +80 +fa +4c +0f +8e +80 +00 +00 +00 +80 +fa +54 +0f +8e +73 +de +ff +ff +e9 +84 +00 +00 +00 +80 +fa +6b +7f +0b +80 +fa +68 +0f +85 +60 +de +ff +ff +eb +0f +80 +fa +6c +7e +5d +80 +fa +75 +74 +6a +e9 +4f +de +ff +ff +41 +8a +11 +80 +fa +57 +7f +21 +80 +fa +54 +7f +05 +80 +fa +52 +eb +1f +80 +fa +55 +0f +8e +dd +00 +00 +00 +80 +fa +56 +0f +8e +2b +de +ff +ff +e9 +e1 +00 +00 +00 +80 +fa +74 +7f +0e +80 +fa +72 +0f +84 +88 +00 +00 +00 +e9 +13 +de +ff +ff +80 +fa +75 +0f +8e +b3 +00 +00 +00 +80 +fa +77 +0f +84 +bc +00 +00 +00 +e9 +fc +dd +ff +ff +41 +8a +11 +80 +fa +57 +74 +48 +80 +fa +77 +74 +43 +e9 +ea +dd +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +d9 +dd +ff +ff +41 +8a +11 +80 +fa +51 +74 +09 +80 +fa +71 +0f +85 +c8 +dd +ff +ff +41 +80 +39 +00 +0f +8f +bb +dd +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +f4 +00 +00 +e9 +17 +89 +00 +00 +41 +80 +39 +00 +0f +8f +9f +dd +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +d5 +00 +00 +e9 +72 +1c +00 +00 +41 +8a +11 +80 +fa +57 +7f +14 +80 +fa +49 +0f +84 +a4 +00 +00 +00 +80 +fa +56 +0f +8e +76 +dd +ff +ff +eb +67 +80 +fa +69 +7f +0e +80 +fa +68 +0f +8e +66 +dd +ff +ff +e9 +86 +00 +00 +00 +80 +fa +77 +74 +4f +e9 +57 +dd +ff +ff +41 +8a +11 +80 +fa +57 +74 +26 +80 +fa +77 +74 +21 +e9 +45 +dd +ff +ff +41 +80 +39 +00 +0f +8f +38 +dd +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +e5 +00 +00 +e9 +0b +1c +00 +00 +41 +80 +39 +00 +0f +8f +1c +dd +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +e4 +00 +00 +e9 +26 +25 +00 +00 +41 +8a +11 +80 +fa +43 +7f +10 +80 +fa +41 +74 +52 +80 +fa +42 +0f +8e +f7 +dc +ff +ff +eb +63 +80 +fa +61 +7f +0b +80 +fa +60 +0f +8e +e7 +dc +ff +ff +eb +37 +80 +fa +63 +74 +4e +e9 +db +dc +ff +ff +41 +8a +11 +80 +fa +57 +74 +09 +80 +fa +77 +0f +85 +ca +dc +ff +ff +41 +80 +39 +00 +0f +8f +bd +dc +ff +ff +c7 +07 +c8 +32 +00 +00 +c7 +47 +04 +01 +5d +00 +00 +e9 +b2 +0c +00 +00 +41 +80 +39 +00 +0f +8f +a1 +dc +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +b7 +00 +00 +e9 +8e +75 +00 +00 +41 +80 +39 +00 +0f +8f +85 +dc +ff +ff +c7 +07 +c8 +32 +00 +00 +c7 +47 +04 +01 +59 +00 +00 +e9 +7a +0c +00 +00 +41 +8a +11 +80 +fa +48 +0f +84 +29 +01 +00 +00 +80 +fa +68 +0f +84 +20 +01 +00 +00 +e9 +5c +dc +ff +ff +41 +8a +11 +80 +fa +44 +0f +84 +d1 +00 +00 +00 +80 +fa +64 +0f +84 +c8 +00 +00 +00 +e9 +42 +dc +ff +ff +41 +8a +11 +80 +fa +57 +0f +84 +9b +00 +00 +00 +80 +fa +77 +0f +84 +92 +00 +00 +00 +e9 +28 +dc +ff +ff +41 +8a +11 +80 +fa +55 +7f +10 +80 +fa +53 +74 +25 +80 +fa +54 +0f +8e +12 +dc +ff +ff +eb +2c +80 +fa +73 +7f +0b +80 +fa +72 +0f +8e +02 +dc +ff +ff +eb +0a +80 +fa +75 +74 +17 +e9 +f6 +db +ff +ff +41 +8a +11 +80 +fa +57 +74 +37 +80 +fa +77 +74 +32 +e9 +e4 +db +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +d3 +db +ff +ff +41 +80 +39 +00 +0f +8f +c6 +db +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +de +00 +00 +e9 +d0 +23 +00 +00 +41 +80 +39 +00 +0f +8f +aa +db +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +ee +00 +00 +e9 +b4 +23 +00 +00 +41 +80 +39 +00 +0f +8f +8e +db +ff +ff +c7 +07 +c8 +32 +00 +00 +c7 +47 +04 +01 +52 +00 +00 +e9 +83 +0b +00 +00 +41 +8a +11 +80 +fa +57 +74 +09 +80 +fa +77 +0f +85 +6e +db +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +5d +db +ff +ff +41 +80 +39 +00 +0f +8f +50 +db +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +f5 +00 +00 +e9 +23 +1a +00 +00 +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +30 +db +ff +ff +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +1f +db +ff +ff +41 +8a +11 +80 +fa +57 +74 +09 +80 +fa +77 +0f +85 +0e +db +ff +ff +41 +80 +39 +00 +0f +8f +01 +db +ff +ff +c7 +07 +e4 +32 +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +f6 +0a +00 +00 +41 +8a +11 +80 +fa +53 +0f +84 +89 +00 +00 +00 +80 +fa +73 +0f +84 +80 +00 +00 +00 +e9 +d8 +da +ff +ff +41 +8a +11 +80 +fa +46 +74 +09 +80 +fa +66 +0f +85 +c7 +da +ff +ff +41 +8a +11 +80 +fa +57 +7f +10 +80 +fa +44 +74 +25 +80 +fa +56 +0f +8e +b1 +da +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +a1 +da +ff +ff +eb +0a +80 +fa +77 +74 +21 +e9 +95 +da +ff +ff +41 +80 +39 +00 +0f +8f +88 +da +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +0d +00 +00 +e9 +75 +73 +00 +00 +41 +80 +39 +00 +0f +8f +6c +da +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +0c +00 +00 +e9 +f2 +05 +00 +00 +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +4c +da +ff +ff +41 +8a +11 +80 +fa +57 +74 +09 +80 +fa +77 +0f +85 +3b +da +ff +ff +41 +80 +39 +00 +0f +8f +2e +da +ff +ff +c7 +07 +a0 +2f +00 +00 +c7 +47 +04 +04 +00 +00 +00 +e9 +38 +22 +00 +00 +41 +8a +11 +80 +fa +49 +0f +84 +43 +05 +00 +00 +80 +fa +69 +0f +84 +3a +05 +00 +00 +e9 +05 +da +ff +ff +41 +8a +11 +80 +fa +44 +7f +17 +80 +fa +42 +0f +8e +f4 +d9 +ff +ff +80 +fa +43 +0f +8e +c0 +04 +00 +00 +e9 +cd +04 +00 +00 +80 +fa +62 +0f +8e +dd +d9 +ff +ff +80 +fa +63 +0f +8e +a9 +04 +00 +00 +80 +fa +64 +0f +8e +b2 +04 +00 +00 +e9 +c6 +d9 +ff +ff +41 +8a +11 +80 +fa +4d +0f +84 +b4 +03 +00 +00 +80 +fa +6d +0f +84 +ab +03 +00 +00 +e9 +ac +d9 +ff +ff +41 +8a +11 +80 +fa +55 +7f +21 +80 +fa +48 +7f +05 +80 +fa +41 +eb +1f +80 +fa +49 +0f +8e +14 +03 +00 +00 +80 +fa +54 +0f +8e +88 +d9 +ff +ff +e9 +18 +03 +00 +00 +80 +fa +68 +7f +0e +80 +fa +61 +0f +84 +e6 +02 +00 +00 +e9 +70 +d9 +ff +ff +80 +fa +69 +0f +8e +ea +02 +00 +00 +80 +fa +75 +0f +84 +f3 +02 +00 +00 +e9 +59 +d9 +ff +ff +41 +8a +11 +80 +fa +41 +0f +84 +80 +02 +00 +00 +80 +fa +61 +0f +84 +77 +02 +00 +00 +e9 +3f +d9 +ff +ff +41 +8a +11 +80 +fa +4e +0f +84 +17 +02 +00 +00 +80 +fa +6e +0f +84 +0e +02 +00 +00 +e9 +25 +d9 +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +43 +0f +84 +9d +00 +00 +00 +80 +fa +52 +0f +8e +0b +d9 +ff +ff +e9 +a9 +00 +00 +00 +80 +fa +63 +7f +0b +80 +fa +62 +0f +8e +f8 +d8 +ff +ff +eb +7f +80 +fa +73 +0f +84 +90 +00 +00 +00 +e9 +e8 +d8 +ff +ff +41 +8a +11 +80 +fa +55 +74 +09 +80 +fa +75 +0f +85 +d7 +d8 +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +c6 +d8 +ff +ff +41 +8a +11 +80 +fa +52 +7f +0f +84 +d2 +7e +15 +80 +fa +51 +0f +8e +ae +d8 +ff +ff +eb +1c +80 +fa +72 +74 +17 +e9 +a2 +d8 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +9a +00 +00 +e9 +8f +71 +00 +00 +41 +80 +39 +00 +0f +8f +86 +d8 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +aa +00 +00 +e9 +73 +71 +00 +00 +41 +8a +11 +80 +fa +50 +0f +84 +b8 +00 +00 +00 +80 +fa +70 +0f +84 +af +00 +00 +00 +e9 +5d +d8 +ff +ff +41 +8a +11 +80 +fa +51 +74 +09 +80 +fa +71 +0f +85 +4c +d8 +ff +ff +41 +8a +11 +80 +fa +52 +7f +10 +80 +fa +49 +74 +25 +80 +fa +51 +0f +8e +36 +d8 +ff +ff +eb +2c +80 +fa +69 +7f +0b +80 +fa +68 +0f +8e +26 +d8 +ff +ff +eb +0a +80 +fa +72 +74 +17 +e9 +1a +d8 +ff +ff +41 +8a +11 +80 +fa +54 +74 +37 +80 +fa +74 +74 +32 +e9 +08 +d8 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +f7 +d7 +ff +ff +41 +80 +39 +00 +0f +8f +ea +d7 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +97 +00 +00 +e9 +d7 +70 +00 +00 +41 +8a +11 +80 +fa +31 +0f +85 +cf +d7 +ff +ff +41 +80 +39 +00 +0f +8f +c2 +d7 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +a7 +00 +00 +e9 +af +70 +00 +00 +41 +8a +11 +80 +fa +49 +7f +0f +84 +d2 +7e +15 +80 +fa +48 +0f +8e +9b +d7 +ff +ff +eb +1c +80 +fa +69 +74 +17 +e9 +8f +d7 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +96 +00 +00 +e9 +7c +70 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +6f +d7 +ff +ff +41 +8a +11 +80 +fa +30 +0f +8e +63 +d7 +ff +ff +80 +fa +31 +7e +0a +80 +fa +32 +7e +21 +e9 +54 +d7 +ff +ff +41 +80 +39 +00 +0f +8f +47 +d7 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +a6 +00 +00 +e9 +34 +70 +00 +00 +41 +80 +39 +00 +0f +8f +2b +d7 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +b6 +00 +00 +e9 +18 +70 +00 +00 +41 +8a +11 +80 +fa +41 +74 +09 +80 +fa +61 +0f +85 +0b +d7 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +fa +d6 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +e9 +d6 +ff +ff +41 +80 +39 +00 +0f +8f +dc +d6 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +8e +00 +00 +e9 +62 +02 +00 +00 +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +bc +d6 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +ab +d6 +ff +ff +41 +80 +39 +00 +0f +8f +9e +d6 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +8a +00 +00 +e9 +24 +02 +00 +00 +41 +8a +11 +80 +fa +58 +74 +65 +80 +fa +78 +74 +60 +e9 +7d +d6 +ff +ff +41 +8a +11 +80 +fa +4e +74 +37 +80 +fa +6e +74 +32 +e9 +6b +d6 +ff +ff +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +5a +d6 +ff +ff +41 +80 +39 +00 +0f +8f +4d +d6 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +b4 +00 +00 +e9 +3a +6f +00 +00 +41 +80 +39 +00 +0f +8f +31 +d6 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +94 +00 +00 +e9 +1e +6f +00 +00 +41 +80 +39 +00 +0f +8f +15 +d6 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +a4 +00 +00 +e9 +02 +6f +00 +00 +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +f5 +d5 +ff +ff +41 +8a +11 +80 +fa +47 +7f +10 +80 +fa +45 +74 +25 +80 +fa +46 +0f +8e +df +d5 +ff +ff +eb +2c +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +cf +d5 +ff +ff +eb +0a +80 +fa +67 +74 +17 +e9 +c3 +d5 +ff +ff +41 +8a +11 +80 +fa +51 +74 +74 +80 +fa +71 +74 +6f +e9 +b1 +d5 +ff +ff +41 +8a +11 +80 +fa +54 +7f +10 +80 +fa +45 +74 +25 +80 +fa +53 +0f +8e +9b +d5 +ff +ff +eb +36 +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +8b +d5 +ff +ff +eb +0a +80 +fa +74 +74 +21 +e9 +7f +d5 +ff +ff +41 +80 +39 +00 +0f +8f +72 +d5 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +90 +00 +00 +e9 +5f +6e +00 +00 +41 +80 +39 +00 +0f +8f +56 +d5 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +a0 +00 +00 +e9 +43 +6e +00 +00 +41 +80 +39 +00 +0f +8f +3a +d5 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +b0 +00 +00 +e9 +27 +6e +00 +00 +41 +8a +11 +80 +fa +43 +74 +37 +80 +fa +63 +74 +32 +e9 +19 +d5 +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +08 +d5 +ff +ff +41 +80 +39 +00 +0f +8f +fb +d4 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +9e +00 +00 +e9 +e8 +6d +00 +00 +41 +80 +39 +00 +0f +8f +df +d4 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +ae +00 +00 +e9 +cc +6d +00 +00 +41 +8a +11 +80 +fa +57 +7f +10 +80 +fa +44 +74 +25 +80 +fa +56 +0f +8e +ba +d4 +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +aa +d4 +ff +ff +eb +0a +80 +fa +77 +74 +21 +e9 +9e +d4 +ff +ff +41 +80 +39 +00 +0f +8f +91 +d4 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +1d +00 +00 +e9 +7e +6d +00 +00 +41 +80 +39 +00 +0f +8f +75 +d4 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +1c +00 +00 +c7 +47 +08 +00 +04 +01 +00 +e9 +3d +87 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +4e +d4 +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +3d +d4 +ff +ff +41 +8a +11 +80 +fa +57 +74 +09 +80 +fa +77 +0f +85 +2c +d4 +ff +ff +41 +80 +39 +00 +0f +8f +1f +d4 +ff +ff +c7 +07 +60 +2f +00 +00 +c7 +47 +04 +02 +00 +00 +00 +e9 +29 +1c +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +ff +d3 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +ee +d3 +ff +ff +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +dd +d3 +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +cc +d3 +ff +ff +41 +80 +39 +00 +0f +8f +bf +d3 +ff +ff +c7 +07 +c8 +32 +00 +00 +c7 +47 +04 +01 +54 +00 +00 +e9 +b4 +03 +00 +00 +41 +8a +11 +80 +fa +53 +0f +84 +7a +06 +00 +00 +80 +fa +73 +0f +84 +71 +06 +00 +00 +e9 +96 +d3 +ff +ff +41 +8a +11 +80 +fa +4d +7f +17 +80 +fa +4b +0f +84 +95 +03 +00 +00 +80 +fa +4c +0f +8e +7c +d3 +ff +ff +e9 +c7 +03 +00 +00 +80 +fa +6b +7f +0e +80 +fa +6a +0f +8e +69 +d3 +ff +ff +e9 +74 +03 +00 +00 +80 +fa +6d +0f +84 +ab +03 +00 +00 +e9 +56 +d3 +ff +ff +41 +8a +11 +80 +fa +44 +0f +84 +96 +01 +00 +00 +80 +fa +64 +0f +84 +8d +01 +00 +00 +e9 +3c +d3 +ff +ff +41 +8a +11 +80 +fa +44 +0f +84 +2d +01 +00 +00 +80 +fa +64 +0f +84 +24 +01 +00 +00 +e9 +22 +d3 +ff +ff +41 +8a +11 +80 +fa +47 +7f +10 +80 +fa +45 +74 +25 +80 +fa +46 +0f +8e +0c +d3 +ff +ff +eb +34 +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +fc +d2 +ff +ff +eb +0a +80 +fa +67 +74 +1f +e9 +f0 +d2 +ff +ff +41 +8a +11 +80 +fa +42 +0f +84 +c5 +00 +00 +00 +80 +fa +62 +0f +84 +bc +00 +00 +00 +e9 +d6 +d2 +ff +ff +41 +8a +11 +80 +fa +57 +7f +1a +80 +fa +54 +7f +05 +80 +fa +42 +eb +18 +80 +fa +55 +7e +62 +80 +fa +56 +0f +8e +b6 +d2 +ff +ff +eb +3b +80 +fa +74 +7f +0b +80 +fa +62 +0f +85 +a6 +d2 +ff +ff +eb +0f +80 +fa +75 +7e +42 +80 +fa +77 +74 +21 +e9 +95 +d2 +ff +ff +41 +80 +39 +00 +0f +8f +88 +d2 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +e0 +00 +00 +e9 +92 +1a +00 +00 +41 +80 +39 +00 +0f +8f +6c +d2 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +e3 +00 +00 +e9 +76 +1a +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +4c +d2 +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +3b +d2 +ff +ff +41 +80 +39 +00 +0f +8f +2e +d2 +ff +ff +c7 +07 +ac +32 +00 +00 +c7 +47 +04 +01 +bf +00 +00 +e9 +1b +6b +00 +00 +41 +80 +39 +00 +0f +8f +12 +d2 +ff +ff +c7 +07 +c8 +32 +00 +00 +c7 +47 +04 +01 +50 +00 +00 +e9 +07 +02 +00 +00 +41 +8a +11 +80 +fa +4e +7f +0f +84 +d2 +7e +15 +80 +fa +4d +0f +8e +eb +d1 +ff +ff +eb +1c +80 +fa +6e +74 +17 +e9 +df +d1 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +db +00 +00 +e9 +b2 +10 +00 +00 +41 +80 +39 +00 +0f +8f +c3 +d1 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +df +00 +00 +e9 +96 +10 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +42 +83 +f8 +35 +0f +87 +a2 +d1 +ff +ff +ff +24 +85 +f4 +4c +00 +00 +41 +80 +39 +00 +0f +8f +8e +d1 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +fc +00 +00 +e9 +61 +10 +00 +00 +41 +80 +39 +00 +0f +8f +72 +d1 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +fd +00 +00 +e9 +45 +10 +00 +00 +41 +80 +39 +00 +0f +8f +56 +d1 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +fe +00 +00 +e9 +29 +10 +00 +00 +41 +80 +39 +00 +0f +8f +3a +d1 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +d4 +00 +00 +e9 +0d +10 +00 +00 +41 +8a +11 +80 +fa +57 +7f +21 +80 +fa +48 +7f +05 +80 +fa +42 +eb +1f +80 +fa +49 +0f +8e +cf +00 +00 +00 +80 +fa +56 +0f +8e +07 +d1 +ff +ff +e9 +d3 +00 +00 +00 +80 +fa +68 +7f +0e +80 +fa +62 +0f +84 +97 +00 +00 +00 +e9 +ef +d0 +ff +ff +80 +fa +69 +0f +8e +a5 +00 +00 +00 +80 +fa +77 +0f +84 +ae +00 +00 +00 +e9 +d8 +d0 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +c7 +d0 +ff +ff +41 +8a +11 +80 +fa +57 +7f +10 +80 +fa +42 +74 +25 +80 +fa +56 +0f +8e +b1 +d0 +ff +ff +eb +36 +80 +fa +62 +7f +0b +80 +fa +61 +0f +8e +a1 +d0 +ff +ff +eb +0a +80 +fa +77 +74 +21 +e9 +95 +d0 +ff +ff +41 +80 +39 +00 +0f +8f +88 +d0 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +dc +00 +00 +e9 +5b +0f +00 +00 +41 +80 +39 +00 +0f +8f +6c +d0 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +dd +00 +00 +e9 +3f +0f +00 +00 +41 +80 +39 +00 +0f +8f +50 +d0 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +ec +00 +00 +e9 +23 +0f +00 +00 +41 +8a +11 +80 +fa +57 +74 +26 +80 +fa +77 +74 +21 +e9 +2f +d0 +ff +ff +41 +80 +39 +00 +0f +8f +22 +d0 +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +ed +00 +00 +e9 +f5 +0e +00 +00 +41 +80 +39 +00 +0f +8f +06 +d0 +ff +ff +c7 +07 +c8 +32 +00 +00 +c7 +47 +04 +01 +51 +00 +00 +c7 +47 +08 +00 +20 +02 +00 +e9 +ce +82 +00 +00 +41 +8a +11 +80 +fa +55 +7f +17 +80 +fa +53 +0f +84 +c7 +01 +00 +00 +80 +fa +54 +0f +8e +d6 +cf +ff +ff +e9 +cb +01 +00 +00 +80 +fa +73 +7f +0e +80 +fa +72 +0f +8e +c3 +cf +ff +ff +e9 +a6 +01 +00 +00 +80 +fa +75 +0f +84 +af +01 +00 +00 +e9 +b0 +cf +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +9f +cf +ff +ff +41 +8a +11 +80 +fa +47 +7f +10 +80 +fa +45 +74 +25 +80 +fa +46 +0f +8e +89 +cf +ff +ff +eb +34 +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +79 +cf +ff +ff +eb +0a +80 +fa +67 +74 +1f +e9 +6d +cf +ff +ff +41 +8a +11 +80 +fa +51 +0f +84 +b4 +00 +00 +00 +80 +fa +71 +0f +84 +ab +00 +00 +00 +e9 +53 +cf +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +42 +cf +ff +ff +41 +8a +11 +80 +fa +57 +7f +1a +80 +fa +43 +7f +05 +80 +fa +42 +eb +18 +80 +fa +44 +7e +46 +80 +fa +56 +0f +8e +22 +cf +ff +ff +eb +57 +80 +fa +63 +7f +0b +80 +fa +62 +0f +85 +12 +cf +ff +ff +eb +0f +80 +fa +64 +7e +26 +80 +fa +77 +74 +3d +e9 +01 +cf +ff +ff +41 +80 +39 +00 +0f +8f +f4 +ce +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +64 +00 +00 +e9 +c7 +0d +00 +00 +41 +80 +39 +00 +0f +8f +d8 +ce +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +66 +00 +00 +e9 +ab +0d +00 +00 +41 +80 +39 +00 +0f +8f +bc +ce +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +65 +00 +00 +e9 +8f +0d +00 +00 +41 +8a +11 +80 +fa +57 +7f +1a +80 +fa +43 +7f +05 +80 +fa +42 +eb +18 +80 +fa +44 +7e +46 +80 +fa +56 +0f +8e +8d +ce +ff +ff +eb +57 +80 +fa +63 +7f +0b +80 +fa +62 +0f +85 +7d +ce +ff +ff +eb +0f +80 +fa +64 +7e +26 +80 +fa +77 +74 +3d +e9 +6c +ce +ff +ff +41 +80 +39 +00 +0f +8f +5f +ce +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +74 +00 +00 +e9 +32 +0d +00 +00 +41 +80 +39 +00 +0f +8f +43 +ce +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +76 +00 +00 +e9 +16 +0d +00 +00 +41 +80 +39 +00 +0f +8f +27 +ce +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +75 +00 +00 +e9 +fa +0c +00 +00 +41 +8a +11 +80 +fa +53 +74 +59 +80 +fa +73 +74 +54 +e9 +06 +ce +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +f5 +cd +ff +ff +41 +8a +11 +80 +fa +57 +74 +09 +80 +fa +77 +0f +85 +e4 +cd +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +d3 +cd +ff +ff +41 +80 +39 +00 +0f +8f +c6 +cd +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +67 +00 +00 +e9 +99 +0c +00 +00 +41 +8a +11 +80 +fa +57 +7f +10 +80 +fa +44 +74 +25 +80 +fa +56 +0f +8e +a1 +cd +ff +ff +eb +2c +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +91 +cd +ff +ff +eb +0a +80 +fa +77 +74 +17 +e9 +85 +cd +ff +ff +41 +8a +11 +80 +fa +57 +74 +37 +80 +fa +77 +74 +32 +e9 +73 +cd +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +62 +cd +ff +ff +41 +80 +39 +00 +0f +8f +55 +cd +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +63 +00 +00 +e9 +28 +0c +00 +00 +41 +80 +39 +00 +0f +8f +39 +cd +ff +ff +c7 +07 +60 +2c +00 +00 +c7 +47 +04 +02 +6b +00 +00 +e9 +0c +0c +00 +00 +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +19 +cd +ff +ff +41 +80 +39 +00 +0f +8f +0c +cd +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +90 +f3 +00 +e9 +6e +0e +00 +00 +41 +80 +39 +00 +0f +8f +f0 +cc +ff +ff +c7 +07 +05 +65 +00 +00 +e9 +06 +6e +00 +00 +41 +80 +39 +00 +0f +8f +db +cc +ff +ff +c7 +07 +17 +00 +00 +00 +e9 +1c +77 +00 +00 +41 +80 +39 +00 +0f +8f +c6 +cc +ff +ff +c7 +07 +13 +00 +00 +00 +e9 +07 +77 +00 +00 +41 +8a +11 +80 +fa +55 +0f +84 +f1 +01 +00 +00 +80 +fa +75 +0f +84 +e8 +01 +00 +00 +e9 +a4 +cc +ff +ff +41 +8a +11 +80 +fa +4c +7f +12 +84 +d2 +7e +1c +80 +fa +4b +0f +8e +8c +cc +ff +ff +e9 +a7 +01 +00 +00 +80 +fa +6c +0f +84 +9e +01 +00 +00 +e9 +79 +cc +ff +ff +c7 +07 +35 +00 +00 +00 +e9 +ba +76 +00 +00 +41 +8a +11 +80 +fa +57 +7f +21 +80 +fa +51 +7f +05 +80 +fa +46 +eb +1f +80 +fa +52 +0f +8e +19 +01 +00 +00 +80 +fa +56 +0f +8e +4d +cc +ff +ff +e9 +27 +01 +00 +00 +80 +fa +71 +7f +0e +80 +fa +66 +0f +84 +e1 +00 +00 +00 +e9 +35 +cc +ff +ff +80 +fa +72 +0f +8e +ef +00 +00 +00 +80 +fa +77 +0f +84 +02 +01 +00 +00 +e9 +1e +cc +ff +ff +41 +8a +11 +80 +fa +53 +7f +24 +80 +fa +43 +7f +0f +84 +d2 +7e +39 +80 +fa +42 +0f +8e +01 +cc +ff +ff +eb +55 +80 +fa +51 +0f +8e +f6 +cb +ff +ff +80 +fa +52 +7e +63 +eb +7d +80 +fa +71 +7f +0a +80 +fa +63 +74 +3b +e9 +e0 +cb +ff +ff +80 +fa +72 +7e +4d +80 +fa +73 +7e +64 +e9 +d1 +cb +ff +ff +c7 +07 +40 +21 +00 +00 +c7 +47 +04 +06 +a3 +04 +00 +e9 +83 +7c +00 +00 +41 +80 +39 +00 +0f +8f +b5 +cb +ff +ff +c7 +07 +33 +00 +00 +00 +e9 +f6 +75 +00 +00 +41 +80 +39 +00 +0f +8f +a0 +cb +ff +ff +c7 +07 +40 +21 +00 +00 +c7 +47 +04 +06 +bb +07 +00 +e9 +52 +7c +00 +00 +41 +80 +39 +00 +0f +8f +84 +cb +ff +ff +c7 +07 +40 +21 +00 +00 +c7 +47 +04 +06 +b3 +06 +00 +e9 +36 +7c +00 +00 +41 +80 +39 +00 +0f +8f +68 +cb +ff +ff +c7 +07 +40 +21 +00 +00 +c7 +47 +04 +06 +ab +05 +00 +e9 +1a +7c +00 +00 +41 +80 +39 +00 +0f +8f +4c +cb +ff +ff +c7 +07 +00 +22 +00 +00 +c7 +47 +04 +03 +bc +00 +00 +e9 +fe +7b +00 +00 +41 +80 +39 +00 +0f +8f +30 +cb +ff +ff +c7 +07 +00 +22 +00 +00 +c7 +47 +04 +03 +bd +00 +00 +e9 +e2 +7b +00 +00 +41 +8a +11 +80 +fa +41 +74 +09 +80 +fa +61 +0f +85 +10 +cb +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +ff +ca +ff +ff +41 +80 +39 +00 +0f +8f +f2 +ca +ff +ff +c7 +07 +20 +29 +00 +00 +c7 +47 +04 +02 +00 +00 +00 +e9 +04 +28 +00 +00 +41 +80 +39 +00 +0f +8f +d6 +ca +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +04 +75 +00 +00 +c7 +07 +25 +00 +00 +00 +e9 +0a +75 +00 +00 +41 +8a +11 +80 +fa +4e +74 +09 +80 +fa +6e +0f +85 +b0 +ca +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +9f +ca +ff +ff +41 +80 +39 +00 +0f +8f +92 +ca +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +5d +7c +00 +00 +c7 +07 +80 +22 +00 +00 +c7 +47 +04 +02 +00 +00 +00 +e9 +da +43 +00 +00 +41 +8a +11 +80 +fa +58 +0f +84 +40 +02 +00 +00 +80 +fa +78 +0f +84 +37 +02 +00 +00 +e9 +5c +ca +ff +ff +41 +8a +11 +80 +fa +58 +7f +17 +80 +fa +50 +0f +84 +0c +02 +00 +00 +80 +fa +57 +0f +8e +42 +ca +ff +ff +e9 +e9 +01 +00 +00 +80 +fa +70 +7f +0e +80 +fa +6f +0f +8e +2f +ca +ff +ff +e9 +eb +01 +00 +00 +80 +fa +78 +0f +84 +cd +01 +00 +00 +e9 +1c +ca +ff +ff +41 +8a +11 +80 +fa +58 +0f +84 +a7 +01 +00 +00 +80 +fa +78 +0f +84 +9e +01 +00 +00 +e9 +02 +ca +ff +ff +41 +8a +11 +80 +fa +58 +7f +17 +80 +fa +49 +0f +84 +73 +01 +00 +00 +80 +fa +57 +0f +8e +e8 +c9 +ff +ff +e9 +50 +01 +00 +00 +80 +fa +69 +7f +0e +80 +fa +68 +0f +8e +d5 +c9 +ff +ff +e9 +52 +01 +00 +00 +80 +fa +78 +0f +84 +34 +01 +00 +00 +e9 +c2 +c9 +ff +ff +41 +8a +11 +80 +fa +4d +0f +84 +f6 +00 +00 +00 +80 +fa +6d +0f +84 +ed +00 +00 +00 +e9 +a8 +c9 +ff +ff +41 +8a +11 +80 +fa +54 +0f +84 +9e +00 +00 +00 +80 +fa +74 +0f +84 +95 +00 +00 +00 +e9 +8e +c9 +ff +ff +41 +8a +11 +80 +fa +50 +7f +1f +80 +fa +48 +7f +0a +84 +d2 +0f +8f +76 +c9 +ff +ff +eb +2a +80 +fa +49 +7e +5f +80 +fa +4f +0f +8e +66 +c9 +ff +ff +eb +3f +80 +fa +69 +7f +0b +80 +fa +68 +0f +8e +56 +c9 +ff +ff +eb +44 +80 +fa +70 +74 +2a +e9 +4a +c9 +ff +ff +80 +3d +00 +00 +00 +00 +40 +75 +11 +53 +68 +e0 +39 +00 +00 +56 +6a +00 +e8 +fc +ff +ff +ff +83 +c4 +10 +c7 +07 +00 +26 +00 +00 +e9 +46 +6a +00 +00 +41 +80 +39 +00 +0f +8f +1b +c9 +ff +ff +c7 +07 +44 +00 +00 +00 +e9 +5c +73 +00 +00 +41 +80 +39 +00 +0f +8f +06 +c9 +ff +ff +c7 +07 +46 +00 +00 +00 +e9 +47 +73 +00 +00 +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +ed +c8 +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +dc +c8 +ff +ff +41 +80 +39 +00 +0f +8f +cf +c8 +ff +ff +c7 +07 +f8 +1e +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +24 +42 +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +af +c8 +ff +ff +41 +80 +39 +00 +0f +8f +a2 +c8 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +77 +0f +00 +e9 +75 +07 +00 +00 +41 +80 +39 +00 +0f +8f +86 +c8 +ff +ff +c7 +07 +42 +00 +00 +00 +e9 +c7 +72 +00 +00 +41 +80 +39 +00 +0f +8f +71 +c8 +ff +ff +c7 +07 +47 +00 +00 +00 +e9 +b2 +72 +00 +00 +41 +80 +39 +00 +0f +8f +5c +c8 +ff +ff +c7 +07 +41 +00 +00 +00 +e9 +9d +72 +00 +00 +41 +80 +39 +00 +0f +8f +47 +c8 +ff +ff +c7 +07 +43 +00 +00 +00 +e9 +88 +72 +00 +00 +41 +80 +39 +00 +0f +8f +32 +c8 +ff +ff +c7 +07 +45 +00 +00 +00 +e9 +73 +72 +00 +00 +41 +80 +39 +00 +0f +8f +1d +c8 +ff +ff +c7 +07 +40 +00 +00 +00 +e9 +5e +72 +00 +00 +41 +8a +11 +80 +fa +44 +0f +84 +58 +02 +00 +00 +80 +fa +64 +0f +84 +4f +02 +00 +00 +e9 +fb +c7 +ff +ff +41 +8a +11 +80 +fa +54 +0f +84 +0a +02 +00 +00 +80 +fa +74 +0f +84 +01 +02 +00 +00 +e9 +e1 +c7 +ff +ff +41 +8a +11 +80 +fa +48 +0f +84 +c3 +01 +00 +00 +80 +fa +68 +0f +84 +ba +01 +00 +00 +e9 +c7 +c7 +ff +ff +41 +8a +11 +80 +fa +41 +0f +84 +5a +01 +00 +00 +80 +fa +61 +0f +84 +51 +01 +00 +00 +e9 +ad +c7 +ff +ff +41 +8a +11 +80 +fa +4d +0f +84 +bb +00 +00 +00 +80 +fa +6d +0f +84 +b2 +00 +00 +00 +e9 +93 +c7 +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +82 +c7 +ff +ff +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +6a +c7 +ff +ff +eb +1c +80 +fa +70 +74 +17 +e9 +5e +c7 +ff +ff +c7 +07 +00 +10 +00 +00 +c7 +47 +04 +17 +30 +06 +00 +e9 +26 +7a +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +39 +c7 +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +29 +c7 +ff +ff +eb +25 +80 +fa +73 +0f +85 +1e +c7 +ff +ff +41 +80 +39 +00 +0f +8f +11 +c7 +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +57 +00 +00 +e9 +90 +72 +00 +00 +41 +80 +39 +00 +0f +8f +f5 +c6 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +57 +66 +00 +e9 +51 +72 +00 +00 +41 +8a +11 +80 +fa +2f +0f +8e +da +c6 +ff +ff +80 +fa +31 +74 +3b +80 +fa +39 +0f +8f +cc +c6 +ff +ff +41 +80 +39 +00 +0f +8f +bf +c6 +ff +ff +80 +3d +00 +00 +00 +00 +40 +74 +0e +8a +43 +03 +83 +e8 +38 +3c +01 +0f +86 +e3 +70 +00 +00 +0f +be +43 +03 +83 +e8 +30 +0d +80 +00 +00 +00 +e9 +7b +6c +00 +00 +41 +8a +11 +84 +d2 +7e +d1 +80 +fa +2f +0f +8e +87 +c6 +ff +ff +80 +fa +35 +0f +8f +7e +c6 +ff +ff +41 +80 +39 +00 +0f +8f +74 +c6 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +a2 +70 +00 +00 +0f +be +43 +04 +e9 +58 +38 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +50 +c6 +ff +ff +41 +8a +11 +80 +fa +42 +7f +0f +84 +d2 +7e +15 +80 +fa +41 +0f +8e +38 +c6 +ff +ff +eb +1c +80 +fa +62 +74 +17 +e9 +2c +c6 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +d7 +00 +00 +e9 +f4 +78 +00 +00 +41 +80 +39 +00 +7e +e8 +e9 +0f +c6 +ff +ff +41 +8a +11 +80 +fa +47 +74 +09 +80 +fa +67 +0f +85 +01 +c6 +ff +ff +41 +80 +39 +00 +0f +8f +f4 +c5 +ff +ff +c7 +07 +00 +0c +00 +00 +c7 +47 +04 +0e +00 +00 +00 +e9 +bc +78 +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +d4 +c5 +ff +ff +41 +80 +39 +00 +0f +8f +c7 +c5 +ff +ff +c7 +07 +60 +34 +00 +00 +c7 +47 +04 +02 +00 +00 +00 +c7 +47 +08 +04 +00 +60 +00 +e9 +8f +78 +00 +00 +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +a0 +c5 +ff +ff +41 +80 +39 +00 +0f +8f +93 +c5 +ff +ff +c7 +07 +60 +29 +00 +00 +c7 +47 +04 +04 +c0 +00 +00 +e9 +a5 +22 +00 +00 +41 +8a +11 +80 +fa +58 +7f +17 +80 +fa +53 +0f +84 +d5 +0b +00 +00 +80 +fa +57 +0f +8e +6a +c5 +ff +ff +e9 +e1 +0b +00 +00 +80 +fa +73 +7f +0e +80 +fa +72 +0f +8e +57 +c5 +ff +ff +e9 +b4 +0b +00 +00 +80 +fa +78 +0f +84 +c5 +0b +00 +00 +e9 +44 +c5 +ff +ff +41 +8a +11 +80 +fa +45 +0f +84 +4b +0b +00 +00 +80 +fa +65 +0f +84 +42 +0b +00 +00 +e9 +2a +c5 +ff +ff +41 +8a +11 +80 +fa +4e +0f +84 +22 +0a +00 +00 +80 +fa +6e +0f +84 +19 +0a +00 +00 +e9 +10 +c5 +ff +ff +41 +8a +11 +80 +fa +2f +0f +8e +04 +c5 +ff +ff +80 +fa +37 +0f +8e +e6 +09 +00 +00 +e9 +f6 +c4 +ff +ff +41 +8a +11 +80 +fa +56 +0f +84 +4f +01 +00 +00 +80 +fa +76 +0f +84 +46 +01 +00 +00 +e9 +dc +c4 +ff +ff +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +cb +c4 +ff +ff +41 +8a +11 +80 +fa +53 +7f +1f +80 +fa +4f +7f +0a +84 +d2 +0f +8f +b3 +c4 +ff +ff +eb +2a +80 +fa +50 +7e +37 +80 +fa +52 +0f +8e +a3 +c4 +ff +ff +eb +68 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +93 +c4 +ff +ff +eb +1c +80 +fa +73 +74 +53 +e9 +87 +c4 +ff +ff +c7 +07 +60 +13 +00 +00 +c7 +47 +04 +04 +04 +00 +00 +e9 +4f +77 +00 +00 +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +b0 +00 +00 +00 +80 +fa +52 +0f +8e +5e +c4 +ff +ff +e9 +86 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +4b +c4 +ff +ff +e9 +8f +00 +00 +00 +80 +fa +73 +74 +6e +e9 +3c +c4 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +26 +c4 +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +16 +c4 +ff +ff +eb +25 +80 +fa +73 +0f +85 +0b +c4 +ff +ff +41 +80 +39 +00 +0f +8f +fe +c3 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +59 +f3 +00 +e9 +7d +6f +00 +00 +41 +80 +39 +00 +0f +8f +e2 +c3 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +59 +f2 +00 +e9 +3e +6f +00 +00 +41 +80 +39 +00 +0f +8f +c6 +c3 +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +59 +00 +00 +e9 +45 +6f +00 +00 +41 +80 +39 +00 +0f +8f +aa +c3 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +59 +66 +00 +e9 +06 +6f +00 +00 +41 +8a +11 +80 +fa +5a +0f +8f +9a +00 +00 +00 +80 +fa +4c +7f +45 +80 +fa +43 +7f +16 +84 +d2 +0f +8e +23 +01 +00 +00 +80 +fa +41 +0f +84 +2c +01 +00 +00 +e9 +6c +c3 +ff +ff +80 +fa +47 +7f +0e +80 +fa +44 +0f +8e +33 +01 +00 +00 +e9 +59 +c3 +ff +ff +80 +fa +48 +0f +8e +5f +01 +00 +00 +80 +fa +4b +0f +8e +47 +c3 +ff +ff +e9 +91 +01 +00 +00 +80 +fa +52 +7f +21 +80 +fa +4e +7f +0e +80 +fa +4d +0f +8e +be +01 +00 +00 +e9 +d3 +01 +00 +00 +80 +fa +51 +0f +84 +e4 +01 +00 +00 +e9 +1c +c3 +ff +ff +80 +fa +54 +7f +0e +80 +fa +53 +0f +8e +ff +01 +00 +00 +e9 +09 +c3 +ff +ff +80 +fa +55 +0f +8e +0a +02 +00 +00 +80 +fa +59 +0f +8e +f7 +c2 +ff +ff +e9 +0e +02 +00 +00 +80 +fa +6d +7f +46 +80 +fa +64 +7f +17 +80 +fa +61 +0f +84 +9a +00 +00 +00 +80 +fa +63 +0f +8e +d6 +c2 +ff +ff +e9 +a6 +00 +00 +00 +80 +fa +68 +7f +0e +80 +fa +67 +0f +8e +c3 +c2 +ff +ff +e9 +cd +00 +00 +00 +80 +fa +6b +0f +8e +b5 +c2 +ff +ff +80 +fa +6c +0f +8e +fb +00 +00 +00 +e9 +36 +01 +00 +00 +80 +fa +73 +7f +2a +80 +fa +70 +7f +0e +80 +fa +6e +0f +8e +3d +01 +00 +00 +e9 +8f +c2 +ff +ff +80 +fa +71 +0f +8e +49 +01 +00 +00 +80 +fa +72 +0f +8e +7d +c2 +ff +ff +e9 +69 +01 +00 +00 +80 +fa +75 +7f +0e +80 +fa +74 +0f +8e +6a +c2 +ff +ff +e9 +6f +01 +00 +00 +80 +fa +7a +0f +84 +78 +01 +00 +00 +e9 +57 +c2 +ff +ff +c7 +07 +c0 +00 +00 +00 +c7 +47 +04 +2d +00 +00 +00 +e9 +1f +75 +00 +00 +41 +8a +11 +80 +fa +50 +0f +84 +bd +06 +00 +00 +80 +fa +70 +0f +84 +b4 +06 +00 +00 +e9 +2e +c2 +ff +ff +41 +8a +11 +80 +fa +51 +7f +12 +84 +d2 +7e +1c +80 +fa +50 +0f +8e +16 +c2 +ff +ff +e9 +f5 +05 +00 +00 +80 +fa +71 +0f +84 +ec +05 +00 +00 +e9 +03 +c2 +ff +ff +c7 +07 +e0 +2a +00 +00 +c7 +47 +04 +08 +00 +00 +00 +e9 +d6 +00 +00 +00 +41 +8a +11 +80 +fa +50 +7f +17 +80 +fa +4c +0f +84 +1b +05 +00 +00 +80 +fa +4f +0f +8e +da +c1 +ff +ff +e9 +1f +05 +00 +00 +80 +fa +6c +7f +0e +80 +fa +6b +0f +8e +c7 +c1 +ff +ff +e9 +fa +04 +00 +00 +80 +fa +70 +0f +84 +03 +05 +00 +00 +e9 +b4 +c1 +ff +ff +41 +8a +11 +80 +fa +50 +7f +17 +80 +fa +48 +0f +84 +32 +04 +00 +00 +80 +fa +4f +0f +8e +9a +c1 +ff +ff +e9 +36 +04 +00 +00 +80 +fa +68 +7f +0e +80 +fa +67 +0f +8e +87 +c1 +ff +ff +e9 +11 +04 +00 +00 +80 +fa +70 +0f +84 +1a +04 +00 +00 +e9 +74 +c1 +ff +ff +41 +8a +11 +80 +fa +53 +0f +84 +79 +03 +00 +00 +80 +fa +73 +0f +84 +70 +03 +00 +00 +e9 +5a +c1 +ff +ff +41 +8a +11 +80 +fa +54 +0f +84 +31 +02 +00 +00 +80 +fa +74 +0f +84 +28 +02 +00 +00 +e9 +40 +c1 +ff +ff +41 +8a +11 +84 +d2 +7e +0e +80 +fa +32 +0f +84 +dc +01 +00 +00 +e9 +28 +c1 +ff +ff +c7 +07 +c0 +2b +00 +00 +c7 +47 +04 +05 +00 +00 +00 +c7 +47 +08 +00 +20 +00 +00 +e9 +f0 +73 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +42 +83 +f8 +36 +0f +87 +00 +c1 +ff +ff +ff +24 +85 +cc +4d +00 +00 +41 +8a +11 +80 +fa +50 +74 +37 +80 +fa +70 +74 +32 +e9 +e7 +c0 +ff +ff +41 +8a +11 +80 +fa +58 +74 +09 +80 +fa +78 +0f +85 +d6 +c0 +ff +ff +41 +80 +39 +00 +0f +8f +c9 +c0 +ff +ff +c7 +07 +c0 +05 +00 +00 +c7 +47 +04 +05 +b6 +00 +00 +e9 +7b +71 +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +a4 +c0 +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +94 +c0 +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +88 +c0 +ff +ff +41 +80 +39 +00 +0f +8f +7b +c0 +ff +ff +c7 +07 +c0 +30 +00 +00 +c7 +47 +04 +02 +10 +00 +00 +e9 +d7 +6b +00 +00 +41 +80 +39 +00 +0f +8f +5f +c0 +ff +ff +c7 +07 +00 +2e +00 +00 +c7 +47 +04 +02 +10 +00 +00 +e9 +de +6b +00 +00 +41 +8a +11 +80 +fa +44 +7f +12 +84 +d2 +7e +1c +80 +fa +43 +0f +8e +38 +c0 +ff +ff +e9 +b9 +00 +00 +00 +80 +fa +64 +0f +84 +b0 +00 +00 +00 +e9 +25 +c0 +ff +ff +c7 +07 +c0 +05 +00 +00 +c7 +47 +04 +05 +be +00 +00 +e9 +d7 +70 +00 +00 +41 +80 +39 +00 +0f +8f +09 +c0 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +a4 +00 +00 +e9 +d1 +72 +00 +00 +41 +80 +39 +00 +0f +8f +ed +bf +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +a5 +10 +00 +e9 +b5 +72 +00 +00 +41 +80 +39 +00 +0f +8f +d1 +bf +ff +ff +c7 +07 +80 +31 +00 +00 +c7 +47 +04 +04 +00 +00 +00 +e9 +99 +72 +00 +00 +41 +80 +39 +00 +0f +8f +b5 +bf +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +8b +70 +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +a5 +40 +00 +e9 +70 +72 +00 +00 +41 +80 +39 +00 +0f +8f +8c +bf +ff +ff +c7 +07 +00 +2f +00 +00 +c7 +47 +04 +03 +00 +00 +00 +e9 +0b +6b +00 +00 +41 +80 +39 +00 +0f +8f +70 +bf +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +46 +70 +00 +00 +c7 +07 +4c +06 +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +59 +70 +00 +00 +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +43 +bf +ff +ff +41 +8a +11 +80 +fa +51 +74 +09 +80 +fa +71 +0f +85 +32 +bf +ff +ff +41 +80 +39 +00 +0f +8f +25 +bf +ff +ff +c7 +07 +74 +32 +00 +00 +e9 +63 +07 +00 +00 +41 +8a +11 +80 +fa +51 +7f +28 +80 +fa +48 +7f +0b +80 +fa +44 +0f +85 +07 +bf +ff +ff +eb +45 +80 +fa +49 +7e +5a +80 +fa +4f +0f +8e +f7 +be +ff +ff +80 +fa +50 +7e +6f +e9 +9c +00 +00 +00 +80 +fa +69 +7f +10 +80 +fa +64 +74 +23 +80 +fa +68 +0f +8e +da +be +ff +ff +eb +32 +80 +fa +6f +0f +8e +cf +be +ff +ff +80 +fa +70 +7e +47 +80 +fa +71 +7e +74 +e9 +c0 +be +ff +ff +41 +8a +11 +80 +fa +51 +0f +84 +a9 +00 +00 +00 +80 +fa +71 +0f +84 +a0 +00 +00 +00 +e9 +a6 +be +ff +ff +41 +80 +39 +00 +0f +8f +99 +be +ff +ff +c7 +07 +80 +2a +00 +00 +c7 +47 +04 +02 +00 +00 +00 +c7 +47 +08 +80 +00 +00 +00 +e9 +61 +71 +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +4f +80 +fa +52 +0f +8e +6d +be +ff +ff +eb +2f +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +5d +be +ff +ff +eb +34 +80 +fa +73 +74 +1a +e9 +51 +be +ff +ff +41 +80 +39 +00 +0f +8f +44 +be +ff +ff +c7 +07 +d0 +2e +00 +00 +e9 +94 +25 +00 +00 +41 +80 +39 +00 +0f +8f +2f +be +ff +ff +c7 +07 +b4 +2e +00 +00 +e9 +7f +25 +00 +00 +41 +80 +39 +00 +0f +8f +1a +be +ff +ff +c7 +07 +54 +31 +00 +00 +c7 +47 +04 +01 +2b +00 +00 +e9 +76 +69 +00 +00 +41 +80 +39 +00 +0f +8f +fe +bd +ff +ff +c7 +07 +54 +31 +00 +00 +c7 +47 +04 +01 +e7 +00 +00 +e9 +5a +69 +00 +00 +41 +8a +11 +80 +fa +4b +74 +09 +80 +fa +6b +0f +85 +de +bd +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +cd +bd +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +b7 +bd +ff +ff +eb +2f +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +a7 +bd +ff +ff +eb +0a +80 +fa +73 +74 +1a +e9 +9b +bd +ff +ff +41 +80 +39 +00 +0f +8f +8e +bd +ff +ff +c7 +07 +38 +31 +00 +00 +e9 +cc +05 +00 +00 +41 +80 +39 +00 +0f +8f +79 +bd +ff +ff +c7 +07 +98 +2e +00 +00 +e9 +c9 +24 +00 +00 +41 +8a +11 +80 +fa +50 +74 +74 +80 +fa +70 +74 +6f +e9 +5f +bd +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +49 +bd +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +39 +bd +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +2d +bd +ff +ff +41 +80 +39 +00 +0f +8f +20 +bd +ff +ff +c7 +07 +00 +31 +00 +00 +c7 +47 +04 +02 +12 +00 +00 +e9 +7c +68 +00 +00 +41 +80 +39 +00 +0f +8f +04 +bd +ff +ff +c7 +07 +60 +2e +00 +00 +c7 +47 +04 +02 +12 +00 +00 +e9 +83 +68 +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +e4 +bc +ff +ff +41 +80 +39 +00 +0f +8f +d7 +bc +ff +ff +c7 +07 +38 +2e +00 +00 +c7 +47 +04 +01 +16 +00 +00 +e9 +56 +68 +00 +00 +41 +8a +11 +80 +fa +50 +74 +74 +80 +fa +70 +74 +6f +e9 +b6 +bc +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +a0 +bc +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +90 +bc +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +84 +bc +ff +ff +41 +80 +39 +00 +0f +8f +77 +bc +ff +ff +c7 +07 +00 +31 +00 +00 +c7 +47 +04 +02 +16 +00 +00 +e9 +d3 +67 +00 +00 +41 +80 +39 +00 +0f +8f +5b +bc +ff +ff +c7 +07 +60 +2e +00 +00 +c7 +47 +04 +02 +16 +00 +00 +e9 +da +67 +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +3b +bc +ff +ff +41 +80 +39 +00 +0f +8f +2e +bc +ff +ff +c7 +07 +38 +2e +00 +00 +c7 +47 +04 +01 +12 +00 +00 +e9 +ad +67 +00 +00 +41 +8a +11 +80 +fa +54 +7f +1a +80 +fa +32 +7f +0b +80 +fa +31 +0f +8e +09 +bc +ff +ff +eb +29 +80 +fa +41 +74 +36 +e9 +fd +bb +ff +ff +80 +fa +61 +7f +10 +80 +fa +55 +7e +43 +80 +fa +60 +0f +8e +ea +bb +ff +ff +eb +1c +80 +fa +75 +74 +33 +e9 +de +bb +ff +ff +41 +8a +11 +80 +fa +51 +74 +42 +80 +fa +71 +74 +3d +e9 +cc +bb +ff +ff +41 +80 +39 +00 +0f +8f +bf +bb +ff +ff +c7 +07 +20 +32 +00 +00 +c7 +47 +04 +02 +66 +00 +00 +e9 +1b +67 +00 +00 +41 +80 +39 +00 +0f +8f +a3 +bb +ff +ff +c7 +07 +20 +32 +00 +00 +c7 +47 +04 +02 +f3 +00 +00 +e9 +ff +66 +00 +00 +41 +80 +39 +00 +0f +8f +87 +bb +ff +ff +c7 +07 +58 +32 +00 +00 +e9 +c5 +03 +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +69 +bb +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +59 +bb +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +4d +bb +ff +ff +41 +80 +39 +00 +0f +8f +40 +bb +ff +ff +c7 +07 +c0 +30 +00 +00 +c7 +47 +04 +02 +28 +00 +00 +e9 +9c +66 +00 +00 +41 +80 +39 +00 +0f +8f +24 +bb +ff +ff +c7 +07 +00 +2e +00 +00 +c7 +47 +04 +02 +28 +00 +00 +e9 +a3 +66 +00 +00 +41 +80 +39 +00 +0f +8f +08 +bb +ff +ff +0f +be +43 +02 +83 +e8 +30 +83 +c8 +70 +e9 +dd +60 +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +e6 +ba +ff +ff +eb +56 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +d6 +ba +ff +ff +eb +0a +80 +fa +73 +74 +41 +e9 +ca +ba +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +b0 +00 +00 +00 +80 +fa +52 +0f +8e +b0 +ba +ff +ff +e9 +86 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +9d +ba +ff +ff +e9 +8f +00 +00 +00 +80 +fa +73 +74 +6e +e9 +8e +ba +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +78 +ba +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +68 +ba +ff +ff +eb +25 +80 +fa +73 +0f +85 +5d +ba +ff +ff +41 +80 +39 +00 +0f +8f +50 +ba +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +5d +f3 +00 +e9 +cf +65 +00 +00 +41 +80 +39 +00 +0f +8f +34 +ba +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +5d +f2 +00 +e9 +90 +65 +00 +00 +41 +80 +39 +00 +0f +8f +18 +ba +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +5d +00 +00 +e9 +97 +65 +00 +00 +41 +80 +39 +00 +0f +8f +fc +b9 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +5d +66 +00 +e9 +58 +65 +00 +00 +41 +8a +11 +80 +fa +4e +74 +09 +80 +fa +6e +0f +85 +dc +b9 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +cb +b9 +ff +ff +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +ba +b9 +ff +ff +41 +80 +39 +00 +0f +8f +ad +b9 +ff +ff +c7 +07 +54 +00 +00 +00 +c7 +47 +04 +01 +f0 +ae +0f +e9 +14 +66 +00 +00 +41 +8a +11 +80 +fa +4b +0f +84 +1d +01 +00 +00 +80 +fa +6b +0f +84 +14 +01 +00 +00 +e9 +84 +b9 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +6e +b9 +ff +ff +eb +56 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +5e +b9 +ff +ff +eb +0a +80 +fa +73 +74 +41 +e9 +52 +b9 +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +b0 +00 +00 +00 +80 +fa +52 +0f +8e +38 +b9 +ff +ff +e9 +86 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +25 +b9 +ff +ff +e9 +8f +00 +00 +00 +80 +fa +73 +74 +6e +e9 +16 +b9 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +00 +b9 +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +f0 +b8 +ff +ff +eb +25 +80 +fa +73 +0f +85 +e5 +b8 +ff +ff +41 +80 +39 +00 +0f +8f +d8 +b8 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +5f +f3 +00 +e9 +57 +64 +00 +00 +41 +80 +39 +00 +0f +8f +bc +b8 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +5f +f2 +00 +e9 +18 +64 +00 +00 +41 +80 +39 +00 +0f +8f +a0 +b8 +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +5f +00 +00 +e9 +1f +64 +00 +00 +41 +80 +39 +00 +0f +8f +84 +b8 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +5f +66 +00 +e9 +e0 +63 +00 +00 +41 +8a +11 +80 +fa +4d +74 +09 +80 +fa +6d +0f +85 +64 +b8 +ff +ff +41 +8a +11 +80 +fa +4f +74 +09 +80 +fa +6f +0f +85 +53 +b8 +ff +ff +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +42 +b8 +ff +ff +41 +8a +11 +80 +fa +51 +7f +10 +80 +fa +44 +74 +25 +80 +fa +50 +0f +8e +2c +b8 +ff +ff +eb +2c +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +1c +b8 +ff +ff +eb +0a +80 +fa +71 +74 +17 +e9 +10 +b8 +ff +ff +41 +8a +11 +80 +fa +51 +74 +2d +80 +fa +71 +74 +28 +e9 +fe +b7 +ff +ff +41 +80 +39 +00 +0f +8f +f1 +b7 +ff +ff +c7 +07 +d4 +2d +00 +00 +c7 +47 +04 +01 +00 +00 +00 +c7 +47 +08 +40 +20 +00 +00 +e9 +b9 +6a +00 +00 +41 +8a +11 +80 +fa +55 +74 +09 +80 +fa +75 +0f +85 +ca +b7 +ff +ff +41 +80 +39 +00 +0f +8f +bd +b7 +ff +ff +c7 +07 +f0 +31 +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +19 +63 +00 +00 +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +41 +0f +84 +b0 +02 +00 +00 +80 +fa +52 +0f +8e +94 +b7 +ff +ff +e9 +cb +02 +00 +00 +80 +fa +61 +7f +0e +80 +fa +60 +0f +8e +81 +b7 +ff +ff +e9 +8f +02 +00 +00 +80 +fa +73 +0f +84 +af +02 +00 +00 +e9 +6e +b7 +ff +ff +41 +8a +11 +80 +fa +43 +0f +84 +59 +02 +00 +00 +80 +fa +63 +0f +84 +50 +02 +00 +00 +e9 +54 +b7 +ff +ff +41 +80 +39 +00 +0f +8f +47 +b7 +ff +ff +c7 +07 +16 +00 +00 +00 +e9 +88 +61 +00 +00 +41 +8a +11 +80 +fa +56 +7f +26 +80 +fa +4b +7f +0a +84 +d2 +0f +8f +27 +b7 +ff +ff +eb +38 +80 +fa +4c +0f +8e +c4 +00 +00 +00 +80 +fa +55 +0f +8e +13 +b7 +ff +ff +e9 +d8 +00 +00 +00 +80 +fa +6c +7f +0e +80 +fa +6b +0f +8e +00 +b7 +ff +ff +e9 +a3 +00 +00 +00 +80 +fa +76 +0f +84 +bc +00 +00 +00 +e9 +ed +b6 +ff +ff +c7 +07 +37 +00 +00 +00 +e9 +2e +61 +00 +00 +41 +80 +39 +00 +0f +8f +d8 +b6 +ff +ff +c7 +07 +12 +00 +00 +00 +e9 +19 +61 +00 +00 +41 +8a +11 +80 +fa +2f +0f +8e +c4 +b6 +ff +ff +80 +fa +37 +7e +49 +e9 +ba +b6 +ff +ff +41 +80 +39 +00 +0f +8f +ad +b6 +ff +ff +80 +3d +00 +00 +00 +00 +40 +75 +11 +53 +68 +e0 +39 +00 +00 +56 +6a +00 +e8 +fc +ff +ff +ff +83 +c4 +10 +c7 +07 +03 +3e +00 +00 +e9 +a9 +57 +00 +00 +41 +80 +39 +00 +0f +8f +7e +b6 +ff +ff +c7 +07 +32 +00 +00 +00 +e9 +bf +60 +00 +00 +41 +80 +39 +00 +0f +8f +69 +b6 +ff +ff +0f +be +43 +02 +83 +e8 +30 +0d +a0 +00 +00 +00 +e9 +3c +5c +00 +00 +41 +80 +39 +00 +0f +8f +4e +b6 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +7c +60 +00 +00 +c7 +07 +27 +00 +00 +00 +e9 +82 +60 +00 +00 +41 +8a +11 +80 +fa +53 +7f +1f +80 +fa +4f +7f +0a +84 +d2 +0f +8f +21 +b6 +ff +ff +eb +2a +80 +fa +50 +7e +37 +80 +fa +52 +0f +8e +11 +b6 +ff +ff +eb +68 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +01 +b6 +ff +ff +eb +1c +80 +fa +73 +74 +53 +e9 +f5 +b5 +ff +ff +c7 +07 +60 +13 +00 +00 +c7 +47 +04 +04 +06 +00 +00 +e9 +bd +68 +00 +00 +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +b0 +00 +00 +00 +80 +fa +52 +0f +8e +cc +b5 +ff +ff +e9 +86 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +b9 +b5 +ff +ff +e9 +8f +00 +00 +00 +80 +fa +73 +74 +6e +e9 +aa +b5 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +94 +b5 +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +84 +b5 +ff +ff +eb +25 +80 +fa +73 +0f +85 +79 +b5 +ff +ff +41 +80 +39 +00 +0f +8f +6c +b5 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +5e +f3 +00 +e9 +eb +60 +00 +00 +41 +80 +39 +00 +0f +8f +50 +b5 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +5e +f2 +00 +e9 +ac +60 +00 +00 +41 +80 +39 +00 +0f +8f +34 +b5 +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +5e +00 +00 +e9 +b3 +60 +00 +00 +41 +80 +39 +00 +0f +8f +18 +b5 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +5e +66 +00 +e9 +74 +60 +00 +00 +41 +80 +39 +00 +0f +8f +fc +b4 +ff +ff +c7 +07 +a0 +12 +00 +00 +c7 +47 +04 +06 +48 +01 +00 +e9 +c4 +67 +00 +00 +41 +80 +39 +00 +0f +8f +e0 +b4 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +ab +66 +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +27 +00 +00 +e9 +9b +67 +00 +00 +41 +80 +39 +00 +0f +8f +b7 +b4 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +82 +66 +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +2f +00 +00 +e9 +72 +67 +00 +00 +41 +8a +11 +80 +fa +4c +0f +84 +92 +1d +00 +00 +80 +fa +6c +0f +84 +89 +1d +00 +00 +e9 +81 +b4 +ff +ff +41 +8a +11 +80 +fa +57 +0f +84 +5c +1d +00 +00 +80 +fa +77 +0f +84 +53 +1d +00 +00 +e9 +67 +b4 +ff +ff +41 +8a +11 +80 +fa +51 +7f +17 +80 +fa +4f +0f +84 +eb +1c +00 +00 +80 +fa +50 +0f +8e +4d +b4 +ff +ff +e9 +aa +1c +00 +00 +80 +fa +6f +7f +0e +80 +fa +6e +0f +8e +3a +b4 +ff +ff +e9 +ca +1c +00 +00 +80 +fa +71 +0f +84 +8e +1c +00 +00 +e9 +27 +b4 +ff +ff +41 +80 +39 +00 +0f +8f +1a +b4 +ff +ff +c7 +07 +15 +00 +00 +00 +e9 +5b +5e +00 +00 +41 +8a +11 +80 +fa +54 +7f +58 +80 +fa +45 +7f +29 +80 +fa +42 +7f +0d +84 +d2 +0f +8f +f5 +b3 +ff +ff +e9 +91 +00 +00 +00 +80 +fa +43 +0f +8e +6a +1b +00 +00 +80 +fa +44 +0f +8e +7d +1b +00 +00 +e9 +d9 +b3 +ff +ff +80 +fa +48 +7f +0e +80 +fa +46 +0f +8e +b4 +1b +00 +00 +e9 +c6 +b3 +ff +ff +80 +fa +49 +0f +8e +78 +1b +00 +00 +80 +fa +53 +0f +8e +b4 +b3 +ff +ff +e9 +86 +1b +00 +00 +80 +fa +66 +7f +2a +80 +fa +63 +7f +0e +80 +fa +62 +0f +8e +9c +b3 +ff +ff +e9 +1a +1b +00 +00 +80 +fa +64 +0f +8e +2d +1b +00 +00 +80 +fa +65 +0f +8e +85 +b3 +ff +ff +e9 +69 +1b +00 +00 +80 +fa +69 +7f +0e +80 +fa +68 +0f +8e +72 +b3 +ff +ff +e9 +28 +1b +00 +00 +80 +fa +74 +0f +84 +3b +1b +00 +00 +e9 +5f +b3 +ff +ff +c7 +07 +11 +00 +00 +00 +e9 +a0 +5d +00 +00 +41 +8a +11 +80 +fa +50 +7f +2a +80 +fa +43 +7f +0e +80 +fa +42 +0f +8e +41 +b3 +ff +ff +e9 +28 +0a +00 +00 +80 +fa +4e +0f +8e +33 +b3 +ff +ff +80 +fa +4f +0f +8e +2a +0b +00 +00 +e9 +2d +0a +00 +00 +80 +fa +6e +7f +0e +80 +fa +63 +0f +84 +03 +0a +00 +00 +e9 +12 +b3 +ff +ff +80 +fa +6f +0f +8e +09 +0b +00 +00 +80 +fa +70 +0f +8e +08 +0a +00 +00 +e9 +fb +b2 +ff +ff +41 +8a +11 +80 +fa +4d +0f +84 +4f +09 +00 +00 +80 +fa +6d +0f +84 +46 +09 +00 +00 +e9 +e1 +b2 +ff +ff +41 +8a +11 +80 +fa +55 +0f +84 +f7 +08 +00 +00 +80 +fa +75 +0f +84 +ee +08 +00 +00 +e9 +c7 +b2 +ff +ff +41 +8a +11 +80 +fa +31 +7f +05 +80 +fa +30 +eb +0c +80 +fa +34 +0f +8e +a5 +08 +00 +00 +80 +fa +38 +0f +84 +9c +08 +00 +00 +e9 +a3 +b2 +ff +ff +41 +80 +39 +00 +0f +8f +96 +b2 +ff +ff +c7 +07 +01 +2e +00 +00 +e9 +ac +53 +00 +00 +41 +8a +11 +80 +fa +54 +0f +84 +80 +00 +00 +00 +80 +fa +74 +74 +7b +e9 +78 +b2 +ff +ff +41 +8a +11 +80 +fa +44 +74 +1f +80 +fa +64 +74 +1a +e9 +66 +b2 +ff +ff +41 +80 +39 +00 +0f +8f +59 +b2 +ff +ff +c7 +07 +31 +00 +00 +00 +e9 +9a +5c +00 +00 +41 +8a +11 +80 +fa +45 +7f +0f +84 +d2 +7e +15 +80 +fa +44 +0f +8e +39 +b2 +ff +ff +eb +1c +80 +fa +65 +74 +17 +e9 +2d +b2 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +99 +10 +00 +e9 +f5 +64 +00 +00 +41 +80 +39 +00 +0f +8f +11 +b2 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +98 +20 +00 +e9 +c3 +62 +00 +00 +41 +8a +11 +80 +fa +54 +7f +2c +80 +fa +4f +7f +0b +80 +fa +44 +0f +85 +ec +b1 +ff +ff +eb +4d +80 +fa +50 +7e +62 +80 +fa +52 +0f +8e +dc +b1 +ff +ff +80 +fa +53 +0f +8e +a3 +00 +00 +00 +e9 +f1 +00 +00 +00 +80 +fa +70 +7f +10 +80 +fa +64 +74 +27 +80 +fa +6f +0f +8e +bb +b1 +ff +ff +eb +36 +80 +fa +72 +0f +8e +b0 +b1 +ff +ff +80 +fa +73 +7e +7b +80 +fa +74 +0f +8e +c5 +00 +00 +00 +e9 +9d +b1 +ff +ff +41 +8a +11 +80 +fa +51 +0f +84 +fe +06 +00 +00 +80 +fa +71 +0f +84 +f5 +06 +00 +00 +e9 +83 +b1 +ff +ff +41 +8a +11 +80 +fa +53 +7f +21 +80 +fa +48 +7f +05 +80 +fa +44 +eb +1f +80 +fa +49 +0f +8e +9a +04 +00 +00 +80 +fa +52 +0f +8e +5f +b1 +ff +ff +e9 +9d +04 +00 +00 +80 +fa +68 +7f +0e +80 +fa +64 +0f +84 +a0 +04 +00 +00 +e9 +47 +b1 +ff +ff +80 +fa +69 +0f +8e +70 +04 +00 +00 +80 +fa +73 +0f +84 +78 +04 +00 +00 +e9 +30 +b1 +ff +ff +41 +8a +11 +80 +fa +53 +7f +21 +80 +fa +48 +7f +05 +80 +fa +44 +eb +1f +80 +fa +49 +0f +8e +a8 +02 +00 +00 +80 +fa +52 +0f +8e +0c +b1 +ff +ff +e9 +ab +02 +00 +00 +80 +fa +68 +7f +0e +80 +fa +64 +0f +84 +ae +02 +00 +00 +e9 +f4 +b0 +ff +ff +80 +fa +69 +0f +8e +7e +02 +00 +00 +80 +fa +73 +0f +84 +86 +02 +00 +00 +e9 +dd +b0 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +c7 +b0 +ff +ff +eb +5a +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +b7 +b0 +ff +ff +eb +0a +80 +fa +73 +74 +45 +e9 +ab +b0 +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +f6 +00 +00 +00 +80 +fa +52 +0f +8e +91 +b0 +ff +ff +e9 +f9 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +7e +b0 +ff +ff +e9 +d5 +00 +00 +00 +80 +fa +73 +0f +84 +dd +00 +00 +00 +e9 +6b +b0 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +55 +b0 +ff +ff +eb +27 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +45 +b0 +ff +ff +eb +0a +80 +fa +73 +74 +12 +e9 +39 +b0 +ff +ff +41 +8a +11 +80 +fa +32 +74 +4f +e9 +2c +b0 +ff +ff +41 +8a +11 +80 +fa +32 +0f +85 +20 +b0 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +0f +b0 +ff +ff +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +fe +af +ff +ff +41 +80 +39 +00 +0f +8f +f1 +af +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +2c +f3 +00 +e9 +70 +5b +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +d1 +af +ff +ff +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +c0 +af +ff +ff +41 +80 +39 +00 +0f +8f +b3 +af +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +2c +f2 +00 +e9 +0f +5b +00 +00 +41 +8a +11 +80 +fa +32 +0f +84 +9e +00 +00 +00 +e9 +93 +af +ff +ff +41 +8a +11 +80 +fa +32 +0f +85 +87 +af +ff +ff +41 +8a +11 +80 +fa +50 +7f +10 +80 +fa +44 +74 +25 +80 +fa +4f +0f +8e +71 +af +ff +ff +eb +2c +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +61 +af +ff +ff +eb +0a +80 +fa +70 +74 +17 +e9 +55 +af +ff +ff +41 +8a +11 +80 +fa +51 +74 +37 +80 +fa +71 +74 +32 +e9 +43 +af +ff +ff +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +32 +af +ff +ff +41 +80 +39 +00 +0f +8f +25 +af +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +2c +00 +00 +e9 +a4 +5a +00 +00 +41 +80 +39 +00 +0f +8f +09 +af +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +5b +f3 +00 +e9 +65 +5a +00 +00 +41 +8a +11 +80 +fa +50 +7f +10 +80 +fa +44 +74 +25 +80 +fa +4f +0f +8e +e4 +ae +ff +ff +eb +2c +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +d4 +ae +ff +ff +eb +0a +80 +fa +70 +74 +17 +e9 +c8 +ae +ff +ff +41 +8a +11 +80 +fa +51 +74 +37 +80 +fa +71 +74 +32 +e9 +b6 +ae +ff +ff +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +a5 +ae +ff +ff +41 +80 +39 +00 +0f +8f +98 +ae +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +2c +66 +00 +e9 +f4 +59 +00 +00 +41 +80 +39 +00 +0f +8f +7c +ae +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +e6 +66 +00 +e9 +d8 +59 +00 +00 +41 +8a +11 +80 +fa +32 +0f +84 +18 +01 +00 +00 +e9 +5c +ae +ff +ff +41 +8a +11 +80 +fa +32 +0f +84 +8c +00 +00 +00 +e9 +4b +ae +ff +ff +41 +8a +11 +80 +fa +32 +0f +85 +3f +ae +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +2e +ae +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +49 +74 +25 +80 +fa +52 +0f +8e +18 +ae +ff +ff +eb +36 +80 +fa +69 +7f +0b +80 +fa +68 +0f +8e +08 +ae +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +fc +ad +ff +ff +41 +80 +39 +00 +0f +8f +ef +ad +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +2d +f2 +00 +e9 +4b +59 +00 +00 +41 +80 +39 +00 +0f +8f +d3 +ad +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +5a +f2 +00 +e9 +2f +59 +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +b3 +ad +ff +ff +41 +8a +11 +80 +fa +49 +7f +10 +80 +fa +44 +74 +25 +80 +fa +48 +0f +8e +9d +ad +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +8d +ad +ff +ff +eb +0a +80 +fa +69 +74 +21 +e9 +81 +ad +ff +ff +41 +80 +39 +00 +0f +8f +74 +ad +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +5a +f3 +00 +e9 +d0 +58 +00 +00 +41 +80 +39 +00 +0f +8f +58 +ad +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +2d +f3 +00 +e9 +d7 +58 +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +38 +ad +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +22 +ad +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +12 +ad +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +06 +ad +ff +ff +41 +80 +39 +00 +0f +8f +f9 +ac +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +2a +f2 +00 +e9 +55 +58 +00 +00 +41 +80 +39 +00 +0f +8f +dd +ac +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +2a +f3 +00 +e9 +5c +58 +00 +00 +41 +8a +11 +80 +fa +32 +0f +84 +b4 +01 +00 +00 +e9 +bd +ac +ff +ff +41 +8a +11 +80 +fa +32 +0f +84 +db +00 +00 +00 +e9 +ac +ac +ff +ff +41 +8a +11 +80 +fa +32 +0f +85 +a0 +ac +ff +ff +41 +8a +11 +80 +fa +50 +7f +10 +80 +fa +44 +74 +25 +80 +fa +4f +0f +8e +8a +ac +ff +ff +eb +2c +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +7a +ac +ff +ff +eb +0a +80 +fa +70 +74 +17 +e9 +6e +ac +ff +ff +41 +8a +11 +80 +fa +51 +74 +74 +80 +fa +71 +74 +6f +e9 +5c +ac +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +49 +74 +25 +80 +fa +52 +0f +8e +46 +ac +ff +ff +eb +36 +80 +fa +69 +7f +0b +80 +fa +68 +0f +8e +36 +ac +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +2a +ac +ff +ff +41 +80 +39 +00 +0f +8f +1d +ac +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +2d +66 +00 +e9 +79 +57 +00 +00 +41 +80 +39 +00 +0f +8f +01 +ac +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +5a +66 +00 +e9 +5d +57 +00 +00 +41 +80 +39 +00 +0f +8f +e5 +ab +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +e6 +f2 +00 +e9 +41 +57 +00 +00 +41 +8a +11 +80 +fa +50 +7f +10 +80 +fa +44 +74 +56 +80 +fa +4f +0f +8e +c0 +ab +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +b0 +ab +ff +ff +eb +3b +80 +fa +70 +0f +85 +a5 +ab +ff +ff +41 +8a +11 +80 +fa +49 +7f +10 +80 +fa +44 +74 +52 +80 +fa +48 +0f +8e +8f +ab +ff +ff +eb +63 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +7f +ab +ff +ff +eb +37 +80 +fa +69 +74 +4e +e9 +73 +ab +ff +ff +41 +8a +11 +80 +fa +51 +74 +09 +80 +fa +71 +0f +85 +62 +ab +ff +ff +41 +80 +39 +00 +0f +8f +55 +ab +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +5b +66 +00 +e9 +b1 +56 +00 +00 +41 +80 +39 +00 +0f +8f +39 +ab +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +5a +00 +00 +e9 +95 +56 +00 +00 +41 +80 +39 +00 +0f +8f +1d +ab +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +2d +00 +00 +e9 +9c +56 +00 +00 +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +fd +aa +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +e7 +aa +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +d7 +aa +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +cb +aa +ff +ff +41 +80 +39 +00 +0f +8f +be +aa +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +2a +66 +00 +e9 +1a +56 +00 +00 +41 +80 +39 +00 +0f +8f +a2 +aa +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +2a +00 +00 +e9 +21 +56 +00 +00 +41 +8a +11 +80 +fa +32 +0f +85 +87 +aa +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +76 +aa +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +60 +aa +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +50 +aa +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +44 +aa +ff +ff +41 +80 +39 +00 +0f +8f +37 +aa +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +e6 +f3 +00 +e9 +93 +55 +00 +00 +41 +80 +39 +00 +0f +8f +1b +aa +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +5b +00 +00 +e9 +77 +55 +00 +00 +41 +80 +39 +00 +0f +8f +ff +a9 +ff +ff +80 +3d +00 +00 +00 +00 +40 +74 +0a +80 +7b +02 +38 +0f +84 +27 +54 +00 +00 +0f +be +43 +02 +83 +e8 +30 +0d +90 +00 +00 +00 +e9 +bf +4f +00 +00 +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +cd +a9 +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +bc +a9 +ff +ff +41 +80 +39 +00 +0f +8f +af +a9 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +a2 +0f +00 +e9 +c1 +06 +00 +00 +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +8f +a9 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +7e +a9 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +68 +a9 +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +58 +a9 +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +4c +a9 +ff +ff +41 +80 +39 +00 +0f +8f +3f +a9 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +2f +66 +00 +e9 +9b +54 +00 +00 +41 +80 +39 +00 +0f +8f +23 +a9 +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +2f +00 +00 +e9 +a2 +54 +00 +00 +41 +80 +39 +00 +0f +8f +07 +a9 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +f5 +00 +00 +e9 +cf +5b +00 +00 +41 +8a +11 +80 +fa +58 +7f +73 +80 +fa +4e +7f +32 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +cc +00 +00 +00 +80 +fa +44 +0f +8e +d2 +a8 +ff +ff +e9 +69 +04 +00 +00 +80 +fa +4c +0f +84 +7a +04 +00 +00 +80 +fa +4d +0f +8e +bb +a8 +ff +ff +e9 +ac +04 +00 +00 +80 +fa +53 +7f +20 +80 +fa +4f +0f +8e +de +04 +00 +00 +80 +fa +50 +0f +8e +ef +04 +00 +00 +80 +fa +52 +0f +8e +96 +a8 +ff +ff +e9 +21 +05 +00 +00 +80 +fa +55 +0f +84 +31 +05 +00 +00 +80 +fa +57 +0f +8e +7f +a8 +ff +ff +e9 +3d +05 +00 +00 +80 +fa +6f +7f +33 +80 +fa +6b +7f +0e +80 +fa +65 +0f +84 +03 +04 +00 +00 +e9 +62 +a8 +ff +ff +80 +fa +6c +0f +8e +0f +04 +00 +00 +80 +fa +6d +0f +8e +50 +a8 +ff +ff +80 +fa +6e +0f +8e +3d +04 +00 +00 +e9 +78 +04 +00 +00 +80 +fa +74 +7f +17 +80 +fa +70 +0f +8e +84 +04 +00 +00 +80 +fa +73 +0f +84 +bb +04 +00 +00 +e9 +26 +a8 +ff +ff +80 +fa +75 +0f +8e +c6 +04 +00 +00 +80 +fa +78 +0f +84 +d7 +04 +00 +00 +e9 +0f +a8 +ff +ff +c7 +07 +00 +10 +00 +00 +c7 +47 +04 +17 +38 +07 +00 +e9 +d7 +5a +00 +00 +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +ef +a7 +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +39 +0f +87 +dd +a7 +ff +ff +ff +24 +85 +a8 +4e +00 +00 +41 +80 +39 +00 +0f +8f +c9 +a7 +ff +ff +c7 +07 +00 +2a +00 +00 +c7 +47 +04 +03 +00 +00 +00 +e9 +0f +4b +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +39 +0f +87 +a8 +a7 +ff +ff +ff +24 +85 +90 +4f +00 +00 +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +18 +03 +00 +00 +80 +fa +44 +0f +8e +85 +a7 +ff +ff +e9 +3e +01 +00 +00 +80 +fa +65 +0f +84 +35 +01 +00 +00 +e9 +72 +a7 +ff +ff +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +d0 +02 +00 +00 +80 +fa +44 +0f +8e +59 +a7 +ff +ff +e9 +80 +01 +00 +00 +80 +fa +65 +0f +84 +77 +01 +00 +00 +e9 +46 +a7 +ff +ff +41 +80 +39 +00 +0f +8f +3c +a7 +ff +ff +c7 +07 +00 +2a +00 +00 +c7 +47 +04 +03 +04 +00 +00 +e9 +82 +4a +00 +00 +41 +80 +39 +00 +0f +8f +20 +a7 +ff +ff +c7 +07 +00 +2a +00 +00 +c7 +47 +04 +03 +08 +00 +00 +e9 +66 +4a +00 +00 +41 +8a +11 +80 +fa +4f +7f +23 +80 +fa +44 +7f +07 +84 +d2 +e9 +a0 +00 +00 +00 +80 +fa +45 +0f +8e +93 +00 +00 +00 +80 +fa +4e +0f +8e +e8 +a6 +ff +ff +e9 +bb +01 +00 +00 +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +d5 +a6 +ff +ff +eb +75 +80 +fa +6f +0f +84 +a2 +01 +00 +00 +e9 +c5 +a6 +ff +ff +41 +8a +11 +80 +fa +45 +7f +13 +84 +d2 +0f +8e +07 +02 +00 +00 +80 +fa +44 +0f +8e +ac +a6 +ff +ff +eb +3d +80 +fa +65 +74 +38 +e9 +a0 +a6 +ff +ff +41 +8a +11 +80 +fa +45 +7f +13 +84 +d2 +0f +8e +c6 +01 +00 +00 +80 +fa +44 +0f +8e +87 +a6 +ff +ff +eb +09 +80 +fa +65 +0f +85 +7c +a6 +ff +ff +41 +80 +39 +00 +0f +8f +72 +a6 +ff +ff +e9 +17 +01 +00 +00 +41 +80 +39 +00 +0f +8f +63 +a6 +ff +ff +e9 +ce +00 +00 +00 +41 +80 +39 +00 +0f +8f +54 +a6 +ff +ff +c7 +07 +00 +2a +00 +00 +c7 +47 +04 +03 +0a +00 +00 +e9 +9a +49 +00 +00 +41 +80 +39 +00 +0f +8f +38 +a6 +ff +ff +eb +28 +41 +8a +11 +80 +fa +45 +7f +12 +84 +d2 +7e +1c +80 +fa +44 +0f +8e +21 +a6 +ff +ff +e9 +9c +01 +00 +00 +80 +fa +65 +0f +84 +93 +01 +00 +00 +e9 +0e +a6 +ff +ff +c7 +07 +00 +2a +00 +00 +c7 +47 +04 +03 +06 +00 +00 +e9 +54 +49 +00 +00 +41 +8a +11 +80 +fa +45 +7f +12 +84 +d2 +7e +26 +80 +fa +44 +0f +8e +e7 +a5 +ff +ff +e9 +46 +01 +00 +00 +80 +fa +65 +0f +84 +3d +01 +00 +00 +e9 +d4 +a5 +ff +ff +41 +80 +39 +00 +0f +8f +ca +a5 +ff +ff +c7 +07 +00 +2a +00 +00 +c7 +47 +04 +03 +03 +00 +00 +e9 +10 +49 +00 +00 +41 +8a +11 +80 +fa +45 +7f +12 +84 +d2 +7e +1c +80 +fa +44 +0f +8e +a3 +a5 +ff +ff +e9 +e6 +00 +00 +00 +80 +fa +65 +0f +84 +dd +00 +00 +00 +e9 +90 +a5 +ff +ff +c7 +07 +00 +2a +00 +00 +c7 +47 +04 +03 +0e +00 +00 +e9 +d6 +48 +00 +00 +41 +8a +11 +80 +fa +45 +7f +12 +84 +d2 +7e +1c +80 +fa +44 +0f +8e +69 +a5 +ff +ff +e9 +90 +00 +00 +00 +80 +fa +65 +0f +84 +87 +00 +00 +00 +e9 +56 +a5 +ff +ff +c7 +07 +00 +2a +00 +00 +c7 +47 +04 +03 +0d +00 +00 +e9 +9c +48 +00 +00 +41 +80 +39 +00 +0f +8f +3a +a5 +ff +ff +c7 +07 +00 +2a +00 +00 +c7 +47 +04 +03 +01 +00 +00 +e9 +80 +48 +00 +00 +41 +80 +39 +00 +0f +8f +1e +a5 +ff +ff +c7 +07 +00 +2a +00 +00 +c7 +47 +04 +03 +0b +00 +00 +e9 +64 +48 +00 +00 +41 +80 +39 +00 +0f +8f +02 +a5 +ff +ff +c7 +07 +00 +2a +00 +00 +c7 +47 +04 +03 +09 +00 +00 +e9 +48 +48 +00 +00 +41 +80 +39 +00 +0f +8f +e6 +a4 +ff +ff +c7 +07 +00 +2a +00 +00 +c7 +47 +04 +03 +05 +00 +00 +e9 +2c +48 +00 +00 +41 +80 +39 +00 +0f +8f +ca +a4 +ff +ff +c7 +07 +00 +2a +00 +00 +c7 +47 +04 +03 +0f +00 +00 +e9 +10 +48 +00 +00 +41 +80 +39 +00 +0f +8f +ae +a4 +ff +ff +c7 +07 +00 +2a +00 +00 +c7 +47 +04 +03 +0c +00 +00 +e9 +f4 +47 +00 +00 +41 +80 +39 +00 +0f +8f +92 +a4 +ff +ff +c7 +07 +00 +2a +00 +00 +c7 +47 +04 +03 +07 +00 +00 +e9 +d8 +47 +00 +00 +41 +80 +39 +00 +0f +8f +76 +a4 +ff +ff +c7 +07 +00 +2a +00 +00 +c7 +47 +04 +03 +02 +00 +00 +e9 +bc +47 +00 +00 +41 +8a +11 +80 +fa +51 +0f +84 +cc +0a +00 +00 +80 +fa +71 +0f +84 +c3 +0a +00 +00 +e9 +4d +a4 +ff +ff +41 +8a +11 +80 +fa +54 +7f +17 +80 +fa +45 +0f +84 +88 +08 +00 +00 +80 +fa +53 +0f +8e +33 +a4 +ff +ff +e9 +ba +08 +00 +00 +80 +fa +65 +7f +0e +80 +fa +64 +0f +8e +20 +a4 +ff +ff +e9 +67 +08 +00 +00 +80 +fa +74 +0f +84 +9e +08 +00 +00 +e9 +0d +a4 +ff +ff +41 +8a +11 +80 +fa +4c +7f +17 +80 +fa +45 +0f +84 +bb +04 +00 +00 +80 +fa +4b +0f +8e +f3 +a3 +ff +ff +e9 +c7 +04 +00 +00 +80 +fa +65 +7f +0e +80 +fa +64 +0f +8e +e0 +a3 +ff +ff +e9 +9a +04 +00 +00 +80 +fa +6c +0f +84 +ab +04 +00 +00 +e9 +cd +a3 +ff +ff +41 +8a +11 +80 +fa +52 +0f +84 +5e +03 +00 +00 +80 +fa +72 +0f +84 +55 +03 +00 +00 +e9 +b3 +a3 +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +23 +03 +00 +00 +80 +fa +52 +0f +8e +99 +a3 +ff +ff +e9 +f9 +02 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +86 +a3 +ff +ff +e9 +02 +03 +00 +00 +80 +fa +73 +0f +84 +dd +02 +00 +00 +e9 +73 +a3 +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +42 +83 +f8 +35 +0f +87 +61 +a3 +ff +ff +ff +24 +85 +78 +50 +00 +00 +41 +8a +11 +80 +fa +4e +0f +84 +e4 +00 +00 +00 +80 +fa +6e +0f +84 +db +00 +00 +00 +e9 +40 +a3 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +2f +a3 +ff +ff +41 +8a +11 +80 +fa +48 +74 +09 +80 +fa +68 +0f +85 +1e +a3 +ff +ff +41 +8a +11 +80 +fa +47 +74 +09 +80 +fa +67 +0f +85 +0d +a3 +ff +ff +41 +8a +11 +80 +fa +34 +7f +0f +84 +d2 +7e +15 +80 +fa +33 +0f +8e +f5 +a2 +ff +ff +eb +23 +80 +fa +38 +74 +2b +e9 +e9 +a2 +ff +ff +c7 +07 +60 +29 +00 +00 +c7 +47 +04 +04 +b0 +00 +00 +c7 +47 +08 +08 +00 +00 +00 +e9 +b1 +55 +00 +00 +41 +8a +11 +80 +fa +38 +74 +32 +e9 +c6 +a2 +ff +ff +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +b5 +a2 +ff +ff +41 +80 +39 +00 +0f +8f +a8 +a2 +ff +ff +c7 +07 +d0 +29 +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +77 +12 +00 +00 +41 +8a +11 +80 +fa +36 +0f +85 +8d +a2 +ff +ff +41 +80 +39 +00 +0f +8f +80 +a2 +ff +ff +c7 +07 +60 +29 +00 +00 +c7 +47 +04 +04 +a6 +00 +00 +c7 +47 +08 +08 +00 +20 +00 +e9 +48 +55 +00 +00 +41 +8a +11 +80 +fa +4f +74 +09 +80 +fa +6f +0f +85 +59 +a2 +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +48 +a2 +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +37 +a2 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +21 +a2 +ff +ff +eb +57 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +11 +a2 +ff +ff +eb +0a +80 +fa +73 +74 +42 +e9 +05 +a2 +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +96 +00 +00 +00 +80 +fa +52 +0f +8e +eb +a1 +ff +ff +e9 +a4 +00 +00 +00 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +d8 +a1 +ff +ff +eb +78 +80 +fa +73 +0f +84 +8b +00 +00 +00 +e9 +c8 +a1 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +b2 +a1 +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +a2 +a1 +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +96 +a1 +ff +ff +41 +80 +39 +00 +0f +8f +89 +a1 +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +f2 +03 +00 +e9 +e5 +4c +00 +00 +41 +80 +39 +00 +0f +8f +6d +a1 +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +f3 +03 +00 +e9 +ec +4c +00 +00 +41 +80 +39 +00 +0f +8f +51 +a1 +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +66 +03 +00 +e9 +ad +4c +00 +00 +41 +80 +39 +00 +0f +8f +35 +a1 +ff +ff +c7 +07 +48 +2d +00 +00 +e9 +fa +47 +00 +00 +41 +80 +39 +00 +0f +8f +20 +a1 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +a6 +00 +00 +e9 +e8 +53 +00 +00 +41 +80 +39 +00 +0f +8f +04 +a1 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +a7 +10 +00 +e9 +cc +53 +00 +00 +41 +80 +39 +00 +0f +8f +e8 +a0 +ff +ff +c7 +07 +80 +30 +00 +00 +e9 +cd +1f +00 +00 +41 +80 +39 +00 +0f +8f +d3 +a0 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +a9 +51 +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +a7 +40 +00 +e9 +bc +51 +00 +00 +41 +80 +39 +00 +0f +8f +aa +a0 +ff +ff +c7 +07 +9c +2d +00 +00 +c7 +47 +04 +01 +c2 +f3 +00 +e9 +29 +4c +00 +00 +41 +80 +39 +00 +0f +8f +8e +a0 +ff +ff +c7 +07 +80 +2d +00 +00 +c7 +47 +04 +01 +c2 +00 +00 +e9 +0d +4c +00 +00 +41 +80 +39 +00 +0f +8f +72 +a0 +ff +ff +c7 +07 +9c +2d +00 +00 +c7 +47 +04 +01 +c2 +66 +00 +e9 +ce +4b +00 +00 +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +52 +a0 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +3c +a0 +ff +ff +eb +57 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +2c +a0 +ff +ff +eb +0a +80 +fa +73 +74 +42 +e9 +20 +a0 +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +96 +00 +00 +00 +80 +fa +52 +0f +8e +06 +a0 +ff +ff +e9 +a4 +00 +00 +00 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +f3 +9f +ff +ff +eb +78 +80 +fa +73 +0f +84 +8b +00 +00 +00 +e9 +e3 +9f +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +cd +9f +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +bd +9f +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +b1 +9f +ff +ff +41 +80 +39 +00 +0f +8f +a4 +9f +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +f2 +07 +00 +e9 +00 +4b +00 +00 +41 +80 +39 +00 +0f +8f +88 +9f +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +f3 +07 +00 +e9 +07 +4b +00 +00 +41 +80 +39 +00 +0f +8f +6c +9f +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +66 +07 +00 +e9 +c8 +4a +00 +00 +41 +80 +39 +00 +0f +8f +50 +9f +ff +ff +c7 +07 +48 +2d +00 +00 +c7 +47 +04 +01 +07 +00 +00 +e9 +cf +4a +00 +00 +41 +8a +11 +80 +fa +51 +0f +84 +70 +02 +00 +00 +80 +fa +71 +0f +84 +67 +02 +00 +00 +e9 +27 +9f +ff +ff +41 +8a +11 +80 +fa +54 +7f +10 +80 +fa +45 +74 +25 +80 +fa +53 +0f +8e +11 +9f +ff +ff +eb +5a +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +01 +9f +ff +ff +eb +0a +80 +fa +74 +74 +45 +e9 +f5 +9e +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +50 +0f +84 +40 +01 +00 +00 +80 +fa +52 +0f +8e +db +9e +ff +ff +e9 +6f +01 +00 +00 +80 +fa +70 +7f +0e +80 +fa +6f +0f +8e +c8 +9e +ff +ff +e9 +1f +01 +00 +00 +80 +fa +73 +0f +84 +53 +01 +00 +00 +e9 +b5 +9e +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +9f +9e +ff +ff +eb +57 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +8f +9e +ff +ff +eb +0a +80 +fa +73 +74 +42 +e9 +83 +9e +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +96 +00 +00 +00 +80 +fa +52 +0f +8e +69 +9e +ff +ff +e9 +a4 +00 +00 +00 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +56 +9e +ff +ff +eb +78 +80 +fa +73 +0f +84 +8b +00 +00 +00 +e9 +46 +9e +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +30 +9e +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +20 +9e +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +14 +9e +ff +ff +41 +80 +39 +00 +0f +8f +07 +9e +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +f2 +05 +00 +e9 +63 +49 +00 +00 +41 +80 +39 +00 +0f +8f +eb +9d +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +f3 +05 +00 +e9 +6a +49 +00 +00 +41 +80 +39 +00 +0f +8f +cf +9d +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +66 +05 +00 +e9 +2b +49 +00 +00 +41 +80 +39 +00 +0f +8f +b3 +9d +ff +ff +c7 +07 +48 +2d +00 +00 +c7 +47 +04 +01 +05 +00 +00 +e9 +32 +49 +00 +00 +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +96 +00 +00 +00 +80 +fa +52 +0f +8e +8a +9d +ff +ff +e9 +a4 +00 +00 +00 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +77 +9d +ff +ff +eb +78 +80 +fa +73 +0f +84 +8b +00 +00 +00 +e9 +67 +9d +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +51 +9d +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +41 +9d +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +35 +9d +ff +ff +41 +80 +39 +00 +0f +8f +28 +9d +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +f2 +06 +00 +e9 +84 +48 +00 +00 +41 +80 +39 +00 +0f +8f +0c +9d +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +f3 +06 +00 +e9 +8b +48 +00 +00 +41 +80 +39 +00 +0f +8f +f0 +9c +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +66 +06 +00 +e9 +4c +48 +00 +00 +41 +80 +39 +00 +0f +8f +d4 +9c +ff +ff +c7 +07 +48 +2d +00 +00 +c7 +47 +04 +01 +06 +00 +00 +e9 +53 +48 +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +af +9c +ff +ff +eb +57 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +9f +9c +ff +ff +eb +0a +80 +fa +73 +74 +42 +e9 +93 +9c +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +96 +00 +00 +00 +80 +fa +52 +0f +8e +79 +9c +ff +ff +e9 +a4 +00 +00 +00 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +66 +9c +ff +ff +eb +78 +80 +fa +73 +0f +84 +8b +00 +00 +00 +e9 +56 +9c +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +40 +9c +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +30 +9c +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +24 +9c +ff +ff +41 +80 +39 +00 +0f +8f +17 +9c +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +f2 +04 +00 +e9 +73 +47 +00 +00 +41 +80 +39 +00 +0f +8f +fb +9b +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +f3 +04 +00 +e9 +7a +47 +00 +00 +41 +80 +39 +00 +0f +8f +df +9b +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +66 +04 +00 +e9 +3b +47 +00 +00 +41 +80 +39 +00 +0f +8f +c3 +9b +ff +ff +c7 +07 +48 +2d +00 +00 +c7 +47 +04 +01 +04 +00 +00 +e9 +42 +47 +00 +00 +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +50 +0f +84 +3e +01 +00 +00 +80 +fa +52 +0f +8e +9a +9b +ff +ff +e9 +6c +01 +00 +00 +80 +fa +70 +7f +0e +80 +fa +6f +0f +8e +87 +9b +ff +ff +e9 +1d +01 +00 +00 +80 +fa +73 +0f +84 +50 +01 +00 +00 +e9 +74 +9b +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +5e +9b +ff +ff +eb +56 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +4e +9b +ff +ff +eb +0a +80 +fa +73 +74 +41 +e9 +42 +9b +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +b0 +00 +00 +00 +80 +fa +52 +0f +8e +28 +9b +ff +ff +e9 +86 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +15 +9b +ff +ff +e9 +8f +00 +00 +00 +80 +fa +73 +74 +6e +e9 +06 +9b +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +f0 +9a +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +e0 +9a +ff +ff +eb +25 +80 +fa +73 +0f +85 +d5 +9a +ff +ff +41 +80 +39 +00 +0f +8f +c8 +9a +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +f3 +01 +00 +e9 +47 +46 +00 +00 +41 +80 +39 +00 +0f +8f +ac +9a +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +f2 +01 +00 +e9 +08 +46 +00 +00 +41 +80 +39 +00 +0f +8f +90 +9a +ff +ff +c7 +07 +48 +2d +00 +00 +c7 +47 +04 +01 +01 +00 +00 +e9 +0f +46 +00 +00 +41 +80 +39 +00 +0f +8f +74 +9a +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +66 +01 +00 +e9 +d0 +45 +00 +00 +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +a9 +00 +00 +00 +80 +fa +52 +0f +8e +4b +9a +ff +ff +e9 +86 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +38 +9a +ff +ff +e9 +88 +00 +00 +00 +80 +fa +73 +74 +6e +e9 +29 +9a +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +13 +9a +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +03 +9a +ff +ff +eb +25 +80 +fa +73 +0f +85 +f8 +99 +ff +ff +41 +80 +39 +00 +0f +8f +eb +99 +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +f3 +02 +00 +e9 +6a +45 +00 +00 +41 +80 +39 +00 +0f +8f +cf +99 +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +f2 +02 +00 +e9 +2b +45 +00 +00 +41 +80 +39 +00 +0f +8f +b3 +99 +ff +ff +c7 +07 +48 +2d +00 +00 +e9 +98 +13 +00 +00 +41 +80 +39 +00 +0f +8f +9e +99 +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +66 +02 +00 +e9 +fa +44 +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +79 +99 +ff +ff +eb +56 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +69 +99 +ff +ff +eb +0a +80 +fa +73 +74 +41 +e9 +5d +99 +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +b0 +00 +00 +00 +80 +fa +52 +0f +8e +43 +99 +ff +ff +e9 +86 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +30 +99 +ff +ff +e9 +8f +00 +00 +00 +80 +fa +73 +74 +6e +e9 +21 +99 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +0b +99 +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +fb +98 +ff +ff +eb +25 +80 +fa +73 +0f +85 +f0 +98 +ff +ff +41 +80 +39 +00 +0f +8f +e3 +98 +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +f3 +00 +00 +e9 +62 +44 +00 +00 +41 +80 +39 +00 +0f +8f +c7 +98 +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +f2 +00 +00 +e9 +23 +44 +00 +00 +41 +80 +39 +00 +0f +8f +ab +98 +ff +ff +c7 +07 +48 +2d +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +2a +44 +00 +00 +41 +80 +39 +00 +0f +8f +8f +98 +ff +ff +c7 +07 +64 +2d +00 +00 +c7 +47 +04 +01 +66 +00 +00 +e9 +eb +43 +00 +00 +41 +80 +39 +00 +0f +8f +73 +98 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +f8 +00 +00 +e9 +3b +4b +00 +00 +41 +80 +39 +00 +0f +8f +57 +98 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +fc +00 +00 +e9 +1f +4b +00 +00 +41 +80 +39 +00 +0f +8f +3b +98 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +fa +00 +00 +e9 +03 +4b +00 +00 +41 +8a +11 +80 +fa +53 +74 +6a +80 +fa +73 +74 +65 +e9 +1a +98 +ff +ff +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +09 +98 +ff +ff +41 +8a +11 +80 +fa +55 +74 +09 +80 +fa +75 +0f +85 +f8 +97 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +e7 +97 +ff +ff +41 +8a +11 +80 +fa +48 +74 +09 +80 +fa +68 +0f +85 +d6 +97 +ff +ff +41 +80 +39 +00 +0f +8f +c9 +97 +ff +ff +c7 +07 +b8 +2a +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +30 +44 +00 +00 +41 +80 +39 +00 +0f +8f +ad +97 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +06 +0f +00 +e9 +be +43 +00 +00 +41 +8a +11 +80 +fa +45 +7f +0f +84 +d2 +7e +15 +80 +fa +44 +0f +8e +86 +97 +ff +ff +eb +45 +80 +fa +65 +74 +40 +e9 +7a +97 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +99 +20 +00 +e9 +2c +48 +00 +00 +41 +80 +39 +00 +0f +8f +5e +97 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +34 +48 +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +99 +40 +00 +e9 +47 +48 +00 +00 +41 +80 +39 +00 +0f +8f +35 +97 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +0b +48 +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +98 +40 +00 +e9 +1e +48 +00 +00 +41 +80 +39 +00 +0f +8f +0c +97 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +98 +10 +00 +e9 +d4 +49 +00 +00 +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +ec +96 +ff +ff +41 +80 +39 +00 +0f +8f +df +96 +ff +ff +c7 +07 +20 +1a +00 +00 +e9 +c7 +18 +00 +00 +41 +8a +11 +80 +fa +2f +0f +8e +cb +96 +ff +ff +80 +fa +35 +0f +8e +5b +08 +00 +00 +e9 +bd +96 +ff +ff +41 +8a +11 +80 +fa +57 +7f +2e +80 +fa +42 +7f +12 +84 +d2 +7e +4f +80 +fa +41 +0f +8e +a0 +96 +ff +ff +e9 +14 +08 +00 +00 +80 +fa +44 +0f +84 +c5 +07 +00 +00 +80 +fa +56 +0f +8e +89 +96 +ff +ff +e9 +da +07 +00 +00 +80 +fa +63 +7f +0e +80 +fa +62 +0f +84 +ef +07 +00 +00 +e9 +71 +96 +ff +ff +80 +fa +64 +0f +8e +9b +07 +00 +00 +80 +fa +77 +0f +84 +b5 +07 +00 +00 +e9 +5a +96 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +88 +40 +00 +00 +0f +be +43 +01 +83 +e8 +30 +e9 +3e +08 +00 +00 +41 +8a +11 +80 +fa +58 +0f +84 +46 +07 +00 +00 +80 +fa +78 +0f +84 +3d +07 +00 +00 +e9 +2a +96 +ff +ff +41 +8a +11 +80 +fa +58 +7f +17 +80 +fa +50 +0f +84 +05 +07 +00 +00 +80 +fa +57 +0f +8e +10 +96 +ff +ff +e9 +d5 +06 +00 +00 +80 +fa +70 +7f +0e +80 +fa +6f +0f +8e +fd +95 +ff +ff +e9 +e4 +06 +00 +00 +80 +fa +78 +0f +84 +b9 +06 +00 +00 +e9 +ea +95 +ff +ff +41 +8a +11 +80 +fa +58 +7f +2a +80 +fa +50 +7f +0e +80 +fa +4c +0f +84 +e0 +05 +00 +00 +80 +fa +4f +eb +28 +80 +fa +52 +0f +84 +e7 +05 +00 +00 +80 +fa +57 +0f +8e +bd +95 +ff +ff +e9 +a2 +05 +00 +00 +80 +fa +70 +7f +17 +80 +fa +6c +0f +84 +b6 +05 +00 +00 +80 +fa +6f +0f +8e +a1 +95 +ff +ff +e9 +d9 +05 +00 +00 +80 +fa +72 +7f +0e +80 +fa +71 +0f +8e +8e +95 +ff +ff +e9 +aa +05 +00 +00 +80 +fa +78 +0f +84 +6a +05 +00 +00 +e9 +7b +95 +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +49 +83 +f8 +2f +0f +87 +69 +95 +ff +ff +ff +24 +85 +50 +51 +00 +00 +41 +8a +11 +80 +fa +54 +7f +17 +80 +fa +50 +0f +84 +a0 +02 +00 +00 +80 +fa +53 +0f +8e +48 +95 +ff +ff +e9 +f2 +02 +00 +00 +80 +fa +70 +7f +0e +80 +fa +6f +0f +8e +35 +95 +ff +ff +e9 +7f +02 +00 +00 +80 +fa +74 +0f +84 +d6 +02 +00 +00 +e9 +22 +95 +ff +ff +41 +8a +11 +80 +fa +50 +0f +84 +43 +02 +00 +00 +80 +fa +70 +0f +84 +3a +02 +00 +00 +e9 +08 +95 +ff +ff +41 +8a +11 +80 +fa +52 +7f +17 +80 +fa +4c +0f +84 +fa +01 +00 +00 +80 +fa +51 +0f +8e +ee +94 +ff +ff +e9 +01 +02 +00 +00 +80 +fa +6c +7f +0e +80 +fa +6b +0f +8e +db +94 +ff +ff +e9 +d9 +01 +00 +00 +80 +fa +72 +0f +84 +e5 +01 +00 +00 +e9 +c8 +94 +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +44 +83 +f8 +30 +0f +87 +b6 +94 +ff +ff +ff +24 +85 +10 +52 +00 +00 +41 +80 +39 +00 +0f +8f +a2 +94 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +d0 +3e +00 +00 +c7 +07 +54 +00 +00 +00 +e9 +d6 +3e +00 +00 +41 +80 +39 +00 +0f +8f +80 +94 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +ae +3e +00 +00 +c7 +07 +56 +00 +00 +00 +e9 +b4 +3e +00 +00 +41 +80 +39 +00 +0f +8f +5e +94 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +aa +0f +00 +c7 +47 +08 +10 +00 +08 +00 +e9 +26 +47 +00 +00 +41 +8a +11 +80 +fa +52 +0f +84 +a1 +00 +00 +00 +80 +fa +72 +0f +84 +98 +00 +00 +00 +e9 +2e +94 +ff +ff +41 +8a +11 +80 +fa +43 +74 +76 +80 +fa +63 +74 +71 +e9 +1c +94 +ff +ff +41 +8a +11 +80 +fa +44 +74 +37 +80 +fa +64 +74 +32 +e9 +0a +94 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +f9 +93 +ff +ff +41 +80 +39 +00 +0f +8f +ec +93 +ff +ff +c7 +07 +1c +33 +00 +00 +c7 +47 +04 +01 +7d +00 +00 +e9 +6e +38 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +cc +93 +ff +ff +41 +80 +39 +00 +0f +8f +bf +93 +ff +ff +c7 +07 +1c +33 +00 +00 +c7 +47 +04 +01 +7b +00 +00 +e9 +41 +38 +00 +00 +41 +80 +39 +00 +0f +8f +a3 +93 +ff +ff +c7 +07 +00 +33 +00 +00 +e9 +25 +38 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +8a +93 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +74 +93 +ff +ff +eb +2c +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +64 +93 +ff +ff +eb +0a +80 +fa +73 +74 +17 +e9 +58 +93 +ff +ff +41 +8a +11 +80 +fa +53 +74 +37 +80 +fa +73 +74 +32 +e9 +46 +93 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +35 +93 +ff +ff +41 +80 +39 +00 +0f +8f +28 +93 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +52 +f3 +00 +e9 +a7 +3e +00 +00 +41 +80 +39 +00 +0f +8f +0c +93 +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +52 +00 +00 +e9 +8b +3e +00 +00 +41 +80 +39 +00 +0f +8f +f0 +92 +ff +ff +c7 +07 +80 +18 +00 +00 +e9 +5e +0a +00 +00 +41 +80 +39 +00 +0f +8f +db +92 +ff +ff +c7 +07 +80 +18 +00 +00 +e9 +02 +0a +00 +00 +41 +80 +39 +00 +0f +8f +c6 +92 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +f4 +3c +00 +00 +c7 +07 +c0 +00 +00 +00 +e9 +fa +3c +00 +00 +41 +8a +11 +80 +fa +5a +7f +25 +80 +fa +45 +7f +09 +84 +d2 +7e +3d +80 +fa +44 +eb +0c +80 +fa +4e +0f +84 +b4 +00 +00 +00 +80 +fa +59 +0f +8e +86 +92 +ff +ff +e9 +d2 +00 +00 +00 +80 +fa +6d +7f +05 +80 +fa +65 +eb +0c +80 +fa +6e +0f +8e +93 +00 +00 +00 +80 +fa +7a +0f +84 +b6 +00 +00 +00 +e9 +60 +92 +ff +ff +c7 +07 +01 +00 +00 +00 +c7 +47 +04 +f3 +00 +00 +00 +e9 +bf +13 +00 +00 +41 +8a +11 +80 +fa +4e +7f +19 +80 +fa +45 +7f +04 +84 +d2 +eb +4a +80 +fa +46 +7e +25 +80 +fa +4d +0f +8e +2f +92 +ff +ff +eb +36 +80 +fa +66 +7f +0b +80 +fa +65 +0f +8e +1f +92 +ff +ff +eb +0a +80 +fa +6e +74 +21 +e9 +13 +92 +ff +ff +41 +80 +39 +00 +0f +8f +09 +92 +ff +ff +c7 +07 +c0 +1e +00 +00 +c7 +47 +04 +02 +ca +00 +00 +e9 +d1 +44 +00 +00 +41 +80 +39 +00 +0f +8f +ed +91 +ff +ff +c7 +07 +c0 +1e +00 +00 +c7 +47 +04 +02 +c2 +00 +00 +e9 +b5 +44 +00 +00 +41 +8a +11 +80 +fa +5a +7f +0a +80 +fa +45 +74 +3b +80 +fa +59 +eb +08 +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +be +91 +ff +ff +eb +26 +80 +fa +7a +74 +21 +e9 +b2 +91 +ff +ff +41 +80 +39 +00 +0f +8f +a5 +91 +ff +ff +c7 +07 +01 +00 +00 +00 +c7 +47 +04 +f4 +00 +00 +00 +e9 +04 +13 +00 +00 +41 +80 +39 +00 +0f +8f +89 +91 +ff +ff +c7 +07 +01 +00 +00 +00 +c7 +47 +04 +f2 +00 +00 +00 +e9 +e8 +12 +00 +00 +41 +80 +39 +00 +0f +8f +6d +91 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +9b +3b +00 +00 +c7 +07 +52 +00 +00 +00 +e9 +a1 +3b +00 +00 +41 +80 +39 +00 +0f +8f +4b +91 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +79 +3b +00 +00 +c7 +07 +57 +00 +00 +00 +e9 +7f +3b +00 +00 +41 +8a +11 +80 +fa +53 +0f +84 +e0 +00 +00 +00 +80 +fa +73 +0f +84 +d7 +00 +00 +00 +e9 +1c +91 +ff +ff +41 +8a +11 +80 +fa +53 +0f +84 +92 +00 +00 +00 +80 +fa +73 +0f +84 +89 +00 +00 +00 +e9 +02 +91 +ff +ff +41 +8a +11 +80 +fa +4d +74 +4f +80 +fa +6d +74 +4a +e9 +f0 +90 +ff +ff +41 +8a +11 +80 +fa +48 +74 +09 +80 +fa +68 +0f +85 +df +90 +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +ce +90 +ff +ff +41 +80 +39 +00 +0f +8f +c1 +90 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +36 +0f +00 +c7 +47 +08 +20 +00 +0a +00 +e9 +89 +43 +00 +00 +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +9a +90 +ff +ff +41 +80 +39 +00 +0f +8f +8d +90 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +33 +0f +00 +e9 +d3 +33 +00 +00 +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +6d +90 +ff +ff +41 +80 +39 +00 +0f +8f +60 +90 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +32 +0f +00 +c7 +47 +08 +10 +00 +80 +00 +e9 +28 +43 +00 +00 +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +39 +90 +ff +ff +41 +80 +39 +00 +0f +8f +2c +90 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +31 +0f +00 +c7 +47 +08 +10 +00 +00 +00 +e9 +f4 +42 +00 +00 +41 +80 +39 +00 +0f +8f +09 +90 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +37 +3a +00 +00 +c7 +07 +51 +00 +00 +00 +e9 +3d +3a +00 +00 +41 +80 +39 +00 +0f +8f +e7 +8f +ff +ff +c7 +07 +80 +18 +00 +00 +e9 +f2 +06 +00 +00 +41 +80 +39 +00 +0f +8f +d2 +8f +ff +ff +c7 +07 +80 +18 +00 +00 +c7 +47 +04 +08 +03 +00 +00 +e9 +9a +42 +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +ad +8f +ff +ff +eb +2c +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +9d +8f +ff +ff +eb +0a +80 +fa +73 +74 +17 +e9 +91 +8f +ff +ff +41 +8a +11 +80 +fa +53 +74 +37 +80 +fa +73 +74 +32 +e9 +7f +8f +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +6e +8f +ff +ff +41 +80 +39 +00 +0f +8f +61 +8f +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +53 +f3 +00 +e9 +e0 +3a +00 +00 +41 +80 +39 +00 +0f +8f +45 +8f +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +53 +00 +00 +e9 +c4 +3a +00 +00 +41 +80 +39 +00 +0f +8f +29 +8f +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +57 +39 +00 +00 +c7 +07 +53 +00 +00 +00 +e9 +5d +39 +00 +00 +41 +80 +39 +00 +0f +8f +07 +8f +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +35 +39 +00 +00 +c7 +07 +55 +00 +00 +00 +e9 +3b +39 +00 +00 +41 +80 +39 +00 +0f +8f +e5 +8e +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +13 +39 +00 +00 +c7 +07 +50 +00 +00 +00 +e9 +19 +39 +00 +00 +41 +80 +39 +00 +0f +8f +c3 +8e +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +f1 +38 +00 +00 +0f +be +43 +01 +83 +e8 +30 +e9 +f3 +00 +00 +00 +41 +80 +39 +00 +0f +8f +a0 +8e +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +ce +38 +00 +00 +0f +be +43 +01 +83 +e8 +30 +e9 +f6 +00 +00 +00 +41 +80 +39 +00 +0f +8f +7d +8e +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +ab +38 +00 +00 +0f +be +43 +01 +83 +e8 +30 +e9 +87 +00 +00 +00 +41 +8a +11 +80 +fa +57 +7f +27 +80 +fa +42 +7f +0f +84 +d2 +7e +3c +80 +fa +41 +0f +8e +4a +8e +ff +ff +eb +4d +80 +fa +44 +74 +6e +80 +fa +56 +0f +8e +3a +8e +ff +ff +e9 +86 +00 +00 +00 +80 +fa +63 +7f +0a +80 +fa +62 +74 +30 +e9 +26 +8e +ff +ff +80 +fa +64 +7e +4c +80 +fa +77 +74 +6d +e9 +17 +8e +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +45 +38 +00 +00 +0f +be +43 +02 +83 +e8 +26 +83 +c8 +50 +e9 +df +33 +00 +00 +41 +80 +39 +00 +0f +8f +f1 +8d +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +1f +38 +00 +00 +0f +be +43 +02 +83 +e8 +26 +83 +c8 +10 +e9 +b9 +33 +00 +00 +41 +80 +39 +00 +0f +8f +cb +8d +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +f9 +37 +00 +00 +0f +be +43 +02 +83 +e8 +26 +83 +c8 +40 +e9 +93 +33 +00 +00 +41 +80 +39 +00 +0f +8f +a5 +8d +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +d3 +37 +00 +00 +0f +be +43 +02 +83 +e8 +26 +83 +c8 +30 +e9 +6d +33 +00 +00 +41 +8a +11 +80 +fa +52 +7f +17 +80 +fa +48 +0f +84 +74 +07 +00 +00 +80 +fa +51 +0f +8e +72 +8d +ff +ff +e9 +78 +07 +00 +00 +80 +fa +68 +7f +0e +80 +fa +67 +0f +8e +5f +8d +ff +ff +e9 +53 +07 +00 +00 +80 +fa +72 +0f +84 +5c +07 +00 +00 +e9 +4c +8d +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +4d +0f +84 +d4 +06 +00 +00 +80 +fa +52 +0f +8e +32 +8d +ff +ff +e9 +9d +06 +00 +00 +80 +fa +6d +7f +0e +80 +fa +6c +0f +8e +1f +8d +ff +ff +e9 +b3 +06 +00 +00 +80 +fa +73 +0f +84 +81 +06 +00 +00 +e9 +0c +8d +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +41 +0f +84 +db +05 +00 +00 +80 +fa +52 +0f +8e +f2 +8c +ff +ff +e9 +00 +06 +00 +00 +80 +fa +61 +7f +0e +80 +fa +60 +0f +8e +df +8c +ff +ff +e9 +ba +05 +00 +00 +80 +fa +73 +0f +84 +e4 +05 +00 +00 +e9 +cc +8c +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +45 +0f +84 +4c +05 +00 +00 +80 +fa +52 +0f +8e +b2 +8c +ff +ff +e9 +22 +05 +00 +00 +80 +fa +65 +7f +0e +80 +fa +64 +0f +8e +9f +8c +ff +ff +e9 +2b +05 +00 +00 +80 +fa +73 +0f +84 +06 +05 +00 +00 +e9 +8c +8c +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +c3 +04 +00 +00 +80 +fa +52 +0f +8e +72 +8c +ff +ff +e9 +99 +04 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +5f +8c +ff +ff +e9 +a2 +04 +00 +00 +80 +fa +73 +0f +84 +7d +04 +00 +00 +e9 +4c +8c +ff +ff +41 +8a +11 +80 +fa +44 +0f +84 +3f +04 +00 +00 +80 +fa +64 +0f +84 +36 +04 +00 +00 +e9 +32 +8c +ff +ff +41 +8a +11 +80 +fa +44 +0f +84 +f1 +03 +00 +00 +80 +fa +64 +0f +84 +e8 +03 +00 +00 +e9 +18 +8c +ff +ff +41 +8a +11 +80 +fa +53 +0f +84 +aa +03 +00 +00 +80 +fa +73 +0f +84 +a1 +03 +00 +00 +e9 +fe +8b +ff +ff +41 +8a +11 +80 +fa +4f +7f +33 +80 +fa +42 +7f +0e +80 +fa +41 +0f +84 +3d +01 +00 +00 +e9 +e3 +8b +ff +ff +80 +fa +43 +0f +8e +e1 +00 +00 +00 +80 +fa +44 +0f +8e +0c +01 +00 +00 +80 +fa +4e +0f +8e +c8 +8b +ff +ff +e9 +e4 +00 +00 +00 +80 +fa +63 +7f +17 +80 +fa +61 +0f +84 +0a +01 +00 +00 +80 +fa +62 +0f +8e +ac +8b +ff +ff +e9 +ae +00 +00 +00 +80 +fa +64 +0f +8e +d9 +00 +00 +00 +80 +fa +6f +0f +84 +b6 +00 +00 +00 +e9 +90 +8b +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +4c +74 +6e +80 +fa +52 +0f +8e +7a +8b +ff +ff +eb +47 +80 +fa +6c +7f +0b +80 +fa +6b +0f +8e +6a +8b +ff +ff +eb +53 +80 +fa +73 +74 +32 +e9 +5e +8b +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +4d +8b +ff +ff +41 +80 +39 +00 +0f +8f +40 +8b +ff +ff +c7 +07 +50 +23 +00 +00 +c7 +47 +04 +01 +00 +03 +00 +e9 +24 +03 +00 +00 +41 +80 +39 +00 +0f +8f +24 +8b +ff +ff +c7 +07 +c0 +0f +00 +00 +c7 +47 +04 +02 +b6 +00 +00 +e9 +d6 +3b +00 +00 +41 +80 +39 +00 +0f +8f +08 +8b +ff +ff +c7 +07 +00 +22 +00 +00 +c7 +47 +04 +03 +03 +00 +00 +e9 +66 +31 +00 +00 +41 +8a +11 +80 +fa +4b +0f +84 +6f +02 +00 +00 +80 +fa +6b +0f +84 +66 +02 +00 +00 +e9 +df +8a +ff +ff +41 +8a +11 +80 +fa +50 +0f +84 +a1 +01 +00 +00 +80 +fa +70 +0f +84 +98 +01 +00 +00 +e9 +c5 +8a +ff +ff +41 +8a +11 +80 +fa +53 +0f +84 +b0 +00 +00 +00 +80 +fa +73 +0f +84 +a7 +00 +00 +00 +e9 +ab +8a +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +9a +8a +ff +ff +41 +8a +11 +80 +fa +41 +74 +09 +80 +fa +61 +0f +85 +89 +8a +ff +ff +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +78 +8a +ff +ff +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +67 +8a +ff +ff +41 +8a +11 +84 +d2 +7e +0a +80 +fa +32 +74 +17 +e9 +53 +8a +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +07 +0f +00 +e9 +80 +33 +00 +00 +41 +8a +11 +80 +fa +38 +0f +85 +38 +8a +ff +ff +41 +8a +11 +80 +fa +36 +0f +85 +2c +8a +ff +ff +41 +80 +39 +00 +0f +8f +1f +8a +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +05 +0f +00 +c7 +47 +08 +02 +00 +20 +00 +e9 +e7 +3c +00 +00 +41 +8a +11 +80 +fa +57 +7f +23 +80 +fa +44 +7f +0a +80 +fa +42 +74 +48 +80 +fa +43 +eb +21 +80 +fa +51 +0f +84 +8e +00 +00 +00 +80 +fa +56 +0f +8e +e0 +89 +ff +ff +eb +4b +80 +fa +64 +7f +10 +80 +fa +62 +74 +25 +80 +fa +63 +0f +8e +cb +89 +ff +ff +eb +52 +80 +fa +71 +7f +0b +80 +fa +70 +0f +8e +bb +89 +ff +ff +eb +5e +80 +fa +77 +74 +21 +e9 +af +89 +ff +ff +41 +80 +39 +00 +0f +8f +a2 +89 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +ac +00 +00 +e9 +6a +3c +00 +00 +41 +80 +39 +00 +0f +8f +86 +89 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +ad +10 +00 +e9 +4e +3c +00 +00 +41 +80 +39 +00 +0f +8f +6a +89 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +ad +20 +00 +e9 +1c +3a +00 +00 +41 +80 +39 +00 +0f +8f +4e +89 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +24 +3a +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +ad +40 +00 +e9 +37 +3a +00 +00 +41 +8a +11 +80 +fa +5a +7f +1e +80 +fa +45 +7f +09 +84 +d2 +7e +2e +80 +fa +44 +eb +08 +80 +fa +4e +74 +52 +80 +fa +59 +0f +8e +0b +89 +ff +ff +eb +2b +80 +fa +6d +7f +05 +80 +fa +65 +eb +08 +80 +fa +6e +7e +38 +80 +fa +7a +74 +17 +e9 +f0 +88 +ff +ff +c7 +07 +40 +20 +00 +00 +c7 +47 +04 +08 +02 +00 +00 +e9 +b8 +3b +00 +00 +41 +80 +39 +00 +0f +8f +d4 +88 +ff +ff +c7 +07 +40 +20 +00 +00 +c7 +47 +04 +08 +01 +00 +00 +e9 +9c +3b +00 +00 +41 +8a +11 +80 +fa +5a +7f +0a +80 +fa +45 +74 +1e +80 +fa +59 +eb +08 +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +a5 +88 +ff +ff +eb +09 +80 +fa +7a +0f +85 +9a +88 +ff +ff +41 +80 +39 +00 +0f +8f +8d +88 +ff +ff +c7 +07 +40 +20 +00 +00 +c7 +47 +04 +08 +00 +00 +00 +e9 +55 +3b +00 +00 +41 +80 +39 +00 +0f +8f +71 +88 +ff +ff +c7 +07 +01 +00 +00 +00 +c7 +47 +04 +f0 +00 +00 +00 +e9 +d0 +09 +00 +00 +41 +8a +11 +80 +fa +57 +74 +09 +80 +fa +77 +0f +85 +51 +88 +ff +ff +41 +80 +39 +00 +0f +8f +44 +88 +ff +ff +c7 +07 +50 +23 +00 +00 +c7 +47 +04 +01 +01 +06 +00 +e9 +55 +34 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +24 +88 +ff +ff +41 +80 +39 +00 +0f +8f +17 +88 +ff +ff +c7 +07 +50 +23 +00 +00 +c7 +47 +04 +01 +00 +02 +00 +c7 +47 +08 +02 +00 +90 +00 +e9 +df +3a +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +f0 +87 +ff +ff +41 +80 +39 +00 +0f +8f +e3 +87 +ff +ff +c7 +07 +8c +00 +00 +00 +c7 +47 +04 +01 +01 +0f +03 +e9 +f4 +33 +00 +00 +41 +80 +39 +00 +0f +8f +c7 +87 +ff +ff +c7 +07 +c0 +0f +00 +00 +c7 +47 +04 +02 +b5 +00 +00 +e9 +79 +38 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +a7 +87 +ff +ff +41 +80 +39 +00 +0f +8f +9a +87 +ff +ff +c7 +07 +8c +00 +00 +00 +c7 +47 +04 +01 +01 +0f +02 +e9 +ab +33 +00 +00 +41 +80 +39 +00 +0f +8f +7e +87 +ff +ff +c7 +07 +c0 +0f +00 +00 +c7 +47 +04 +02 +b4 +00 +00 +e9 +30 +38 +00 +00 +41 +8a +11 +80 +fa +4e +74 +09 +80 +fa +6e +0f +85 +5e +87 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +4d +87 +ff +ff +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +3c +87 +ff +ff +41 +80 +39 +00 +0f +8f +2f +87 +ff +ff +c7 +07 +54 +00 +00 +00 +c7 +47 +04 +01 +e8 +ae +0f +e9 +96 +33 +00 +00 +41 +8a +11 +80 +fa +56 +7f +0f +84 +d2 +7e +15 +80 +fa +55 +0f +8e +08 +87 +ff +ff +eb +45 +80 +fa +76 +74 +40 +e9 +fc +86 +ff +ff +c7 +07 +20 +0f +00 +00 +c7 +47 +04 +03 +00 +00 +00 +e9 +c4 +39 +00 +00 +41 +80 +39 +00 +0f +8f +e0 +86 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +ab +38 +00 +00 +c7 +07 +80 +0f +00 +00 +c7 +47 +04 +02 +c4 +00 +00 +e9 +9b +39 +00 +00 +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +b3 +86 +ff +ff +41 +80 +39 +00 +0f +8f +a6 +86 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +c9 +00 +00 +c7 +47 +08 +01 +00 +00 +00 +e9 +6e +39 +00 +00 +41 +80 +39 +00 +0f +8f +83 +86 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +4e +38 +00 +00 +c7 +07 +80 +0f +00 +00 +c7 +47 +04 +02 +c5 +00 +00 +e9 +3e +39 +00 +00 +41 +8a +11 +80 +fa +58 +74 +09 +80 +fa +78 +0f +85 +56 +86 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +45 +86 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +34 +86 +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +23 +86 +ff +ff +41 +80 +39 +00 +0f +8f +16 +86 +ff +ff +c7 +07 +b8 +2d +00 +00 +c7 +47 +04 +01 +02 +00 +00 +e9 +95 +31 +00 +00 +41 +8a +11 +80 +fa +46 +74 +26 +80 +fa +66 +74 +21 +e9 +f5 +85 +ff +ff +41 +80 +39 +00 +0f +8f +e8 +85 +ff +ff +c7 +07 +00 +22 +00 +00 +c7 +47 +04 +03 +02 +00 +00 +e9 +46 +2c +00 +00 +41 +80 +39 +00 +0f +8f +cc +85 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +97 +37 +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +9f +00 +00 +e9 +87 +38 +00 +00 +41 +8a +11 +80 +fa +36 +0f +84 +d4 +04 +00 +00 +e9 +9f +85 +ff +ff +41 +8a +11 +80 +fa +32 +0f +84 +ae +04 +00 +00 +e9 +8e +85 +ff +ff +41 +8a +11 +80 +fa +34 +0f +84 +7b +04 +00 +00 +e9 +7d +85 +ff +ff +41 +8a +11 +80 +fa +53 +7f +2a +80 +fa +44 +7f +0e +80 +fa +41 +0f +84 +bc +03 +00 +00 +80 +fa +43 +eb +28 +80 +fa +4d +0f +84 +29 +04 +00 +00 +80 +fa +52 +0f +8e +50 +85 +ff +ff +e9 +c9 +03 +00 +00 +80 +fa +64 +7f +17 +80 +fa +61 +0f +84 +92 +03 +00 +00 +80 +fa +63 +0f +8e +34 +85 +ff +ff +e9 +d6 +03 +00 +00 +80 +fa +6d +7f +0e +80 +fa +6c +0f +8e +21 +85 +ff +ff +e9 +ec +03 +00 +00 +80 +fa +73 +0f +84 +91 +03 +00 +00 +e9 +0e +85 +ff +ff +41 +8a +11 +80 +fa +44 +7f +17 +80 +fa +42 +0f +8e +fd +84 +ff +ff +80 +fa +43 +0f +8e +50 +02 +00 +00 +e9 +f5 +01 +00 +00 +80 +fa +62 +0f +8e +e6 +84 +ff +ff +80 +fa +63 +0f +8e +39 +02 +00 +00 +80 +fa +64 +0f +8e +da +01 +00 +00 +e9 +cf +84 +ff +ff +41 +80 +39 +00 +0f +8f +c2 +84 +ff +ff +c7 +07 +14 +00 +00 +00 +e9 +03 +2f +00 +00 +41 +80 +39 +00 +0f +8f +ad +84 +ff +ff +c7 +07 +10 +00 +00 +00 +e9 +ee +2e +00 +00 +41 +8a +11 +80 +fa +44 +74 +6b +80 +fa +64 +74 +66 +e9 +93 +84 +ff +ff +41 +8a +11 +80 +fa +50 +74 +1f +80 +fa +70 +74 +1a +e9 +81 +84 +ff +ff +41 +80 +39 +00 +0f +8f +74 +84 +ff +ff +c7 +07 +30 +00 +00 +00 +e9 +b5 +2e +00 +00 +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +5b +84 +ff +ff +41 +80 +39 +00 +0f +8f +4e +84 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +19 +36 +00 +00 +c7 +07 +b8 +22 +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +9f +2a +00 +00 +41 +8a +11 +80 +fa +50 +7f +1f +80 +fa +4d +7f +0a +84 +d2 +0f +8f +1a +84 +ff +ff +eb +2a +80 +fa +4e +7e +37 +80 +fa +4f +0f +8e +0a +84 +ff +ff +eb +3e +80 +fa +6e +7f +0b +80 +fa +6d +0f +8e +fa +83 +ff +ff +eb +1c +80 +fa +70 +74 +29 +e9 +ee +83 +ff +ff +c7 +07 +00 +10 +00 +00 +c7 +47 +04 +17 +20 +04 +00 +e9 +b6 +36 +00 +00 +41 +8a +11 +80 +fa +50 +74 +73 +80 +fa +70 +74 +6e +e9 +cd +83 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +b7 +83 +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +a7 +83 +ff +ff +eb +25 +80 +fa +73 +0f +85 +9c +83 +ff +ff +41 +80 +39 +00 +0f +8f +8f +83 +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +54 +00 +00 +e9 +0e +2f +00 +00 +41 +80 +39 +00 +0f +8f +73 +83 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +54 +66 +00 +e9 +cf +2e +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +4e +83 +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +3e +83 +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +32 +83 +ff +ff +41 +80 +39 +00 +0f +8f +25 +83 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +55 +66 +00 +e9 +81 +2e +00 +00 +41 +80 +39 +00 +0f +8f +09 +83 +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +55 +00 +00 +e9 +88 +2e +00 +00 +41 +8a +11 +80 +fa +53 +7f +22 +80 +fa +4f +7f +0a +84 +d2 +0f +8f +e2 +82 +ff +ff +eb +2d +80 +fa +50 +7e +56 +80 +fa +52 +0f +8e +d2 +82 +ff +ff +e9 +84 +00 +00 +00 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +bf +82 +ff +ff +eb +38 +80 +fa +73 +74 +6f +e9 +b3 +82 +ff +ff +c7 +07 +00 +10 +00 +00 +c7 +47 +04 +17 +00 +00 +00 +e9 +7b +35 +00 +00 +41 +80 +39 +00 +0f +8f +97 +82 +ff +ff +c7 +07 +00 +10 +00 +00 +c7 +47 +04 +17 +10 +02 +00 +e9 +5f +35 +00 +00 +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +b0 +00 +00 +00 +80 +fa +52 +0f +8e +6e +82 +ff +ff +e9 +86 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +5b +82 +ff +ff +e9 +8f +00 +00 +00 +80 +fa +73 +74 +6e +e9 +4c +82 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +36 +82 +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +26 +82 +ff +ff +eb +25 +80 +fa +73 +0f +85 +1b +82 +ff +ff +41 +80 +39 +00 +0f +8f +0e +82 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +58 +f3 +00 +e9 +8d +2d +00 +00 +41 +80 +39 +00 +0f +8f +f2 +81 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +58 +f2 +00 +e9 +4e +2d +00 +00 +41 +80 +39 +00 +0f +8f +d6 +81 +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +58 +00 +00 +e9 +55 +2d +00 +00 +41 +80 +39 +00 +0f +8f +ba +81 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +58 +66 +00 +e9 +16 +2d +00 +00 +41 +80 +39 +00 +0f +8f +9e +81 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +69 +33 +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +37 +00 +00 +e9 +59 +34 +00 +00 +41 +80 +39 +00 +0f +8f +75 +81 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +40 +33 +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +3f +00 +00 +e9 +30 +34 +00 +00 +41 +80 +39 +00 +0f +8f +4c +81 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +17 +33 +00 +00 +c7 +07 +20 +16 +00 +00 +c7 +47 +04 +02 +01 +00 +00 +e9 +07 +34 +00 +00 +41 +80 +39 +00 +0f +8f +23 +81 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +ee +32 +00 +00 +c7 +07 +20 +16 +00 +00 +c7 +47 +04 +02 +00 +00 +00 +e9 +de +33 +00 +00 +41 +80 +39 +00 +0f +8f +fa +80 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +14 +02 +00 +00 +c7 +07 +02 +00 +00 +00 +e9 +1a +02 +00 +00 +41 +80 +39 +00 +0f +8f +d8 +80 +ff +ff +c7 +07 +02 +00 +00 +00 +e9 +1e +02 +00 +00 +41 +80 +39 +00 +0f +8f +c3 +80 +ff +ff +80 +3d +00 +00 +00 +00 +40 +75 +13 +83 +ec +08 +68 +20 +3a +00 +00 +56 +e8 +fc +ff +ff +ff +e9 +98 +31 +00 +00 +c7 +07 +02 +00 +00 +00 +e9 +06 +02 +00 +00 +41 +8a +11 +80 +fa +36 +0f +84 +ea +01 +00 +00 +e9 +8e +80 +ff +ff +41 +8a +11 +80 +fa +32 +0f +84 +c0 +01 +00 +00 +e9 +7d +80 +ff +ff +41 +8a +11 +80 +fa +34 +0f +84 +82 +01 +00 +00 +e9 +6c +80 +ff +ff +41 +8a +11 +80 +fa +50 +7f +12 +84 +d2 +7e +1c +80 +fa +4f +0f +8e +54 +80 +ff +ff +e9 +f9 +00 +00 +00 +80 +fa +70 +0f +84 +f0 +00 +00 +00 +e9 +41 +80 +ff +ff +c7 +07 +00 +10 +00 +00 +c7 +47 +04 +17 +08 +01 +00 +e9 +09 +33 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +21 +80 +ff +ff +41 +8a +11 +80 +fa +53 +7f +0f +84 +d2 +7e +15 +80 +fa +52 +0f +8e +09 +80 +ff +ff +eb +1c +80 +fa +73 +74 +17 +e9 +fd +7f +ff +ff +c7 +07 +60 +0e +00 +00 +c7 +47 +04 +06 +00 +00 +00 +e9 +c5 +32 +00 +00 +41 +8a +11 +80 +fa +57 +7f +1a +80 +fa +43 +7f +05 +80 +fa +42 +eb +18 +80 +fa +44 +7e +62 +80 +fa +56 +0f +8e +ce +7f +ff +ff +eb +3b +80 +fa +63 +7f +0b +80 +fa +62 +0f +85 +be +7f +ff +ff +eb +0f +80 +fa +64 +7e +42 +80 +fa +77 +74 +21 +e9 +ad +7f +ff +ff +41 +80 +39 +00 +0f +8f +a0 +7f +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +6e +00 +00 +e9 +68 +32 +00 +00 +41 +80 +39 +00 +0f +8f +84 +7f +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +6f +10 +00 +e9 +4c +32 +00 +00 +41 +80 +39 +00 +0f +8f +68 +7f +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +6f +20 +00 +e9 +1a +30 +00 +00 +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +43 +7f +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +33 +7f +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +27 +7f +ff +ff +41 +80 +39 +00 +0f +8f +1a +7f +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +56 +66 +00 +e9 +76 +2a +00 +00 +41 +80 +39 +00 +0f +8f +fe +7e +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +56 +00 +00 +e9 +7d +2a +00 +00 +41 +80 +39 +00 +0f +8f +e2 +7e +ff +ff +80 +3d +00 +00 +00 +00 +40 +74 +0b +53 +68 +60 +3a +00 +00 +e9 +b7 +2f +00 +00 +c7 +07 +03 +00 +00 +00 +c7 +47 +04 +40 +00 +00 +00 +eb +30 +41 +80 +39 +00 +0f +8f +b5 +7e +ff +ff +c7 +07 +03 +00 +00 +00 +c7 +47 +04 +20 +00 +00 +00 +eb +17 +41 +80 +39 +00 +0f +8f +9c +7e +ff +ff +c7 +07 +03 +00 +00 +00 +c7 +47 +04 +10 +00 +00 +00 +b8 +02 +00 +00 +00 +e9 +82 +31 +00 +00 +41 +8a +11 +80 +fa +53 +74 +4f +80 +fa +73 +74 +4a +e9 +76 +7e +ff +ff +41 +80 +39 +00 +0f +8f +69 +7e +ff +ff +c7 +07 +04 +00 +00 +00 +e9 +56 +31 +00 +00 +41 +8a +11 +80 +fa +2f +0f +8e +55 +7e +ff +ff +80 +fa +37 +0f +8f +4c +7e +ff +ff +41 +80 +39 +00 +0f +8f +3f +7e +ff +ff +0f +be +43 +02 +83 +e8 +30 +0d +b0 +00 +00 +00 +e9 +12 +24 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +20 +7e +ff +ff +41 +80 +39 +00 +0f +8f +13 +7e +ff +ff +c7 +07 +e0 +13 +00 +00 +c7 +47 +04 +14 +00 +00 +00 +e9 +db +30 +00 +00 +41 +8a +11 +80 +fa +58 +0f +84 +bd +1c +00 +00 +80 +fa +78 +0f +84 +b4 +1c +00 +00 +e9 +ea +7d +ff +ff +41 +8a +11 +80 +fa +52 +7f +21 +80 +fa +43 +7f +05 +80 +fa +42 +eb +1f +80 +fa +44 +0f +8e +0f +1c +00 +00 +80 +fa +51 +0f +8e +c6 +7d +ff +ff +e9 +ec +1b +00 +00 +80 +fa +63 +7f +0e +80 +fa +62 +0f +84 +05 +1c +00 +00 +e9 +ae +7d +ff +ff +80 +fa +64 +0f +8e +e5 +1b +00 +00 +80 +fa +72 +0f +84 +c7 +1b +00 +00 +e9 +97 +7d +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +4c +0f +84 +45 +1b +00 +00 +80 +fa +52 +0f +8e +7d +7d +ff +ff +e9 +49 +1b +00 +00 +80 +fa +6c +7f +0e +80 +fa +6b +0f +8e +6a +7d +ff +ff +e9 +24 +1b +00 +00 +80 +fa +73 +0f +84 +2d +1b +00 +00 +e9 +57 +7d +ff +ff +41 +8a +11 +80 +fa +4f +7f +33 +80 +fa +4b +7f +0e +80 +fa +48 +0f +84 +b9 +17 +00 +00 +e9 +3c +7d +ff +ff +80 +fa +4c +0f +8e +c5 +17 +00 +00 +80 +fa +4d +0f +8e +d6 +17 +00 +00 +80 +fa +4e +0f +8e +21 +7d +ff +ff +e9 +54 +17 +00 +00 +80 +fa +6c +7f +17 +80 +fa +68 +0f +84 +86 +17 +00 +00 +80 +fa +6b +0f +8e +05 +7d +ff +ff +e9 +92 +17 +00 +00 +80 +fa +6d +0f +8e +a3 +17 +00 +00 +80 +fa +6f +0f +84 +26 +17 +00 +00 +e9 +e9 +7c +ff +ff +41 +8a +11 +80 +fa +49 +7f +17 +80 +fa +45 +0f +84 +f2 +15 +00 +00 +80 +fa +48 +0f +8e +cf +7c +ff +ff +e9 +d2 +15 +00 +00 +80 +fa +65 +7f +0e +80 +fa +64 +0f +8e +bc +7c +ff +ff +e9 +d1 +15 +00 +00 +80 +fa +69 +0f +84 +b6 +15 +00 +00 +e9 +a9 +7c +ff +ff +41 +8a +11 +80 +fa +4d +0f +84 +60 +15 +00 +00 +80 +fa +6d +0f +84 +57 +15 +00 +00 +e9 +8f +7c +ff +ff +41 +8a +11 +80 +fa +52 +0f +84 +ce +14 +00 +00 +80 +fa +72 +0f +84 +c5 +14 +00 +00 +e9 +75 +7c +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +32 +0f +87 +63 +7c +ff +ff +ff +24 +85 +d4 +52 +00 +00 +41 +8a +11 +80 +fa +44 +0f +84 +92 +0e +00 +00 +80 +fa +64 +0f +84 +89 +0e +00 +00 +e9 +42 +7c +ff +ff +41 +8a +11 +80 +fa +55 +0f +84 +18 +0e +00 +00 +80 +fa +75 +0f +84 +0f +0e +00 +00 +e9 +28 +7c +ff +ff +41 +8a +11 +80 +fa +53 +7f +2a +80 +fa +49 +7f +0e +80 +fa +43 +0f +84 +17 +0c +00 +00 +80 +fa +48 +eb +28 +80 +fa +4f +0f +84 +1b +0c +00 +00 +80 +fa +52 +0f +8e +fb +7b +ff +ff +e9 +bb +0b +00 +00 +80 +fa +69 +7f +17 +80 +fa +63 +0f +84 +ed +0b +00 +00 +80 +fa +68 +0f +8e +df +7b +ff +ff +e9 +85 +0b +00 +00 +80 +fa +6f +7f +0e +80 +fa +6e +0f +8e +cc +7b +ff +ff +e9 +de +0b +00 +00 +80 +fa +73 +0f +84 +83 +0b +00 +00 +e9 +b9 +7b +ff +ff +41 +8a +11 +80 +fa +54 +7f +21 +80 +fa +51 +7f +05 +80 +fa +41 +eb +1f +80 +fa +52 +0f +8e +7d +0a +00 +00 +80 +fa +53 +0f +8e +95 +7b +ff +ff +e9 +43 +0a +00 +00 +80 +fa +71 +7f +0e +80 +fa +61 +0f +84 +4f +0a +00 +00 +e9 +7d +7b +ff +ff +80 +fa +72 +0f +8e +53 +0a +00 +00 +80 +fa +74 +0f +84 +1e +0a +00 +00 +e9 +66 +7b +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +4e +0f +84 +58 +09 +00 +00 +80 +fa +52 +0f +8e +4c +7b +ff +ff +e9 +5c +09 +00 +00 +80 +fa +6e +7f +0e +80 +fa +6d +0f +8e +39 +7b +ff +ff +e9 +37 +09 +00 +00 +80 +fa +73 +0f +84 +40 +09 +00 +00 +e9 +26 +7b +ff +ff +41 +8a +11 +80 +fa +55 +7f +6a +80 +fa +45 +7f +32 +80 +fa +41 +7f +16 +84 +d2 +0f +8e +c3 +00 +00 +00 +80 +fa +40 +0f +8e +00 +7b +ff +ff +e9 +1b +06 +00 +00 +80 +fa +43 +0f +84 +f8 +05 +00 +00 +80 +fa +44 +0f +8e +e9 +7a +ff +ff +e9 +16 +06 +00 +00 +80 +fa +50 +7f +0e +80 +fa +49 +0f +84 +c2 +05 +00 +00 +e9 +d1 +7a +ff +ff +80 +fa +51 +0f +8e +9a +05 +00 +00 +80 +fa +53 +0f +8e +bf +7a +ff +ff +80 +fa +54 +0f +8e +d6 +04 +00 +00 +e9 +69 +05 +00 +00 +80 +fa +68 +7f +2a +80 +fa +62 +7f +0e +80 +fa +61 +0f +84 +be +05 +00 +00 +e9 +99 +7a +ff +ff +80 +fa +63 +0f +8e +96 +05 +00 +00 +80 +fa +65 +0f +84 +b9 +05 +00 +00 +e9 +82 +7a +ff +ff +80 +fa +71 +7f +17 +80 +fa +69 +0f +8e +60 +05 +00 +00 +80 +fa +70 +0f +8e +6b +7a +ff +ff +e9 +38 +05 +00 +00 +80 +fa +73 +0f +8e +5d +7a +ff +ff +80 +fa +74 +0f +8e +74 +04 +00 +00 +80 +fa +75 +0f +8e +03 +05 +00 +00 +e9 +46 +7a +ff +ff +c7 +07 +04 +64 +00 +00 +e9 +5c +1b +00 +00 +41 +8a +11 +80 +fa +53 +0f +84 +22 +04 +00 +00 +80 +fa +73 +0f +84 +19 +04 +00 +00 +e9 +24 +7a +ff +ff +41 +8a +11 +80 +fa +43 +0f +84 +f5 +02 +00 +00 +80 +fa +63 +0f +84 +ec +02 +00 +00 +e9 +0a +7a +ff +ff +41 +8a +11 +80 +fa +41 +0f +84 +9d +02 +00 +00 +80 +fa +61 +0f +84 +94 +02 +00 +00 +e9 +f0 +79 +ff +ff +41 +8a +11 +80 +fa +54 +7f +33 +80 +fa +43 +7f +0e +80 +fa +41 +0f +84 +0e +01 +00 +00 +80 +fa +42 +eb +31 +80 +fa +51 +0f +8e +cc +79 +ff +ff +80 +fa +52 +0f +8e +3d +01 +00 +00 +80 +fa +53 +0f +8e +22 +01 +00 +00 +e9 +03 +01 +00 +00 +80 +fa +63 +7f +17 +80 +fa +61 +0f +84 +db +00 +00 +00 +80 +fa +62 +0f +8e +9e +79 +ff +ff +e9 +b3 +00 +00 +00 +80 +fa +72 +7f +0e +80 +fa +71 +0f +8e +8b +79 +ff +ff +e9 +00 +01 +00 +00 +80 +fa +73 +0f +8e +e5 +00 +00 +00 +80 +fa +74 +0f +8e +c2 +00 +00 +00 +e9 +6f +79 +ff +ff +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +5e +79 +ff +ff +41 +8a +11 +80 +fa +32 +0f +85 +52 +79 +ff +ff +41 +8a +11 +80 +fa +58 +74 +09 +80 +fa +78 +0f +85 +41 +79 +ff +ff +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +29 +79 +ff +ff +eb +1c +80 +fa +70 +74 +17 +e9 +1d +79 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +f1 +d9 +00 +e9 +07 +18 +00 +00 +41 +8a +11 +80 +fa +31 +0f +85 +02 +79 +ff +ff +41 +80 +39 +00 +0f +8f +f5 +78 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +f9 +d9 +00 +e9 +df +17 +00 +00 +41 +8a +11 +80 +fa +48 +0f +84 +5d +01 +00 +00 +80 +fa +68 +0f +84 +54 +01 +00 +00 +e9 +cc +78 +ff +ff +41 +8a +11 +80 +fa +4d +0f +84 +27 +01 +00 +00 +80 +fa +6d +0f +84 +1e +01 +00 +00 +e9 +b2 +78 +ff +ff +41 +8a +11 +80 +fa +52 +0f +84 +be +00 +00 +00 +80 +fa +72 +0f +84 +b5 +00 +00 +00 +e9 +98 +78 +ff +ff +41 +8a +11 +80 +fa +41 +74 +6a +80 +fa +61 +74 +65 +e9 +86 +78 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +75 +78 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +64 +78 +ff +ff +41 +8a +11 +80 +fa +4f +74 +09 +80 +fa +6f +0f +85 +53 +78 +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +42 +78 +ff +ff +41 +80 +39 +00 +0f +8f +35 +78 +ff +ff +c7 +07 +8c +00 +00 +00 +c7 +47 +04 +01 +ae +0f +01 +e9 +bd +15 +00 +00 +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +15 +78 +ff +ff +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +04 +78 +ff +ff +41 +80 +39 +00 +0f +8f +f7 +77 +ff +ff +c7 +07 +8c +00 +00 +00 +c7 +47 +04 +01 +ae +0f +00 +e9 +7f +15 +00 +00 +41 +8a +11 +80 +fa +41 +74 +09 +80 +fa +61 +0f +85 +d7 +77 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +c6 +77 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +b5 +77 +ff +ff +41 +80 +39 +00 +0f +8f +a8 +77 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +f4 +d9 +00 +e9 +92 +16 +00 +00 +41 +80 +39 +00 +0f +8f +8c +77 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +e5 +d9 +00 +e9 +76 +16 +00 +00 +41 +80 +39 +00 +0f +8f +70 +77 +ff +ff +c7 +07 +a0 +25 +00 +00 +c7 +47 +04 +04 +00 +00 +00 +e9 +5a +16 +00 +00 +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +50 +77 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +3f +77 +ff +ff +41 +80 +39 +00 +0f +8f +32 +77 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +9b +00 +00 +e9 +1c +16 +00 +00 +41 +8a +11 +80 +fa +4f +74 +09 +80 +fa +6f +0f +85 +12 +77 +ff +ff +41 +8a +11 +80 +fa +4d +74 +09 +80 +fa +6d +0f +85 +01 +77 +ff +ff +41 +8a +11 +80 +fa +50 +7f +1f +80 +fa +48 +7f +0a +84 +d2 +0f +8f +e9 +76 +ff +ff +eb +2a +80 +fa +49 +7e +37 +80 +fa +4f +0f +8e +d9 +76 +ff +ff +eb +5f +80 +fa +69 +7f +0b +80 +fa +68 +0f +8e +c9 +76 +ff +ff +eb +1c +80 +fa +70 +74 +4a +e9 +bd +76 +ff +ff +c7 +07 +a0 +26 +00 +00 +c7 +47 +04 +02 +e0 +dd +00 +e9 +bf +13 +00 +00 +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +96 +76 +ff +ff +eb +6b +80 +fa +70 +74 +66 +e9 +8a +76 +ff +ff +c7 +07 +a0 +26 +00 +00 +c7 +47 +04 +02 +e8 +db +00 +e9 +12 +14 +00 +00 +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +63 +76 +ff +ff +eb +1c +80 +fa +70 +74 +17 +e9 +57 +76 +ff +ff +c7 +07 +a0 +26 +00 +00 +c7 +47 +04 +02 +e8 +dd +00 +e9 +59 +13 +00 +00 +41 +80 +39 +00 +0f +8f +3b +76 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +e9 +da +00 +e9 +3d +13 +00 +00 +41 +80 +39 +00 +0f +8f +1f +76 +ff +ff +c7 +07 +a0 +26 +00 +00 +c7 +47 +04 +02 +e8 +df +00 +e9 +a7 +13 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +ff +75 +ff +ff +41 +80 +39 +00 +0f +8f +f2 +75 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +e4 +d9 +00 +e9 +dc +14 +00 +00 +41 +8a +11 +80 +fa +53 +7f +41 +80 +fa +44 +7f +12 +84 +d2 +7e +75 +80 +fa +43 +0f +84 +15 +03 +00 +00 +e9 +c1 +75 +ff +ff +80 +fa +4f +7f +0e +80 +fa +45 +0f +8e +1c +03 +00 +00 +e9 +ae +75 +ff +ff +80 +fa +50 +0f +8e +20 +03 +00 +00 +80 +fa +52 +0f +8e +9c +75 +ff +ff +e9 +2e +03 +00 +00 +80 +fa +65 +7f +17 +80 +fa +63 +0f +84 +d8 +02 +00 +00 +80 +fa +64 +0f +8e +80 +75 +ff +ff +e9 +e4 +02 +00 +00 +80 +fa +70 +7f +0e +80 +fa +6f +0f +8e +6d +75 +ff +ff +e9 +e3 +02 +00 +00 +80 +fa +73 +0f +84 +f6 +02 +00 +00 +e9 +5a +75 +ff +ff +c7 +07 +40 +25 +00 +00 +c7 +47 +04 +03 +00 +00 +00 +e9 +44 +14 +00 +00 +41 +8a +11 +80 +fa +42 +0f +84 +cd +01 +00 +00 +80 +fa +62 +0f +84 +c4 +01 +00 +00 +e9 +31 +75 +ff +ff +41 +8a +11 +80 +fa +52 +0f +84 +86 +01 +00 +00 +80 +fa +72 +0f +84 +7d +01 +00 +00 +e9 +17 +75 +ff +ff +41 +8a +11 +80 +fa +4e +0f +84 +fb +00 +00 +00 +80 +fa +6e +0f +84 +f2 +00 +00 +00 +e9 +fd +74 +ff +ff +41 +8a +11 +80 +fa +41 +0f +84 +a3 +00 +00 +00 +80 +fa +61 +0f +84 +9a +00 +00 +00 +e9 +e3 +74 +ff +ff +41 +8a +11 +80 +fa +56 +74 +60 +80 +fa +76 +74 +5b +e9 +d1 +74 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +c0 +74 +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +af +74 +ff +ff +41 +8a +11 +80 +fa +4d +74 +09 +80 +fa +6d +0f +85 +9e +74 +ff +ff +41 +80 +39 +00 +0f +8f +91 +74 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +e4 +db +00 +c7 +47 +08 +02 +10 +40 +00 +e9 +59 +27 +00 +00 +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +6a +74 +ff +ff +41 +80 +39 +00 +0f +8f +5d +74 +ff +ff +c7 +07 +8c +00 +00 +00 +c7 +47 +04 +01 +dd +9b +06 +e9 +47 +13 +00 +00 +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +3d +74 +ff +ff +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +2c +74 +ff +ff +41 +80 +39 +00 +0f +8f +1f +74 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +fd +d9 +00 +e9 +09 +13 +00 +00 +41 +8a +11 +80 +fa +43 +7f +0f +84 +d2 +7e +15 +80 +fa +42 +0f +8e +f8 +73 +ff +ff +eb +1c +80 +fa +63 +74 +17 +e9 +ec +73 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +fe +d9 +00 +e9 +ee +10 +00 +00 +41 +8a +11 +80 +fa +4f +74 +09 +80 +fa +6f +0f +85 +cc +73 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +bb +73 +ff +ff +41 +80 +39 +00 +0f +8f +ae +73 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +fb +d9 +00 +e9 +b0 +10 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +8e +73 +ff +ff +41 +80 +39 +00 +0f +8f +81 +73 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +fa +d9 +00 +e9 +6b +12 +00 +00 +41 +8a +11 +80 +fa +52 +7f +1f +80 +fa +4f +7f +0a +84 +d2 +0f +8f +5a +73 +ff +ff +eb +2a +80 +fa +50 +7e +37 +80 +fa +51 +0f +8e +4a +73 +ff +ff +eb +48 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +3a +73 +ff +ff +eb +1c +80 +fa +72 +74 +33 +e9 +2e +73 +ff +ff +c7 +07 +e0 +26 +00 +00 +c7 +47 +04 +06 +e8 +e0 +04 +e9 +18 +12 +00 +00 +41 +80 +39 +00 +0f +8f +12 +73 +ff +ff +c7 +07 +a0 +27 +00 +00 +c7 +47 +04 +03 +e8 +00 +00 +e9 +fc +11 +00 +00 +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +eb +72 +ff +ff +eb +1c +80 +fa +70 +74 +17 +e9 +df +72 +ff +ff +c7 +07 +e0 +26 +00 +00 +c7 +47 +04 +06 +e0 +e8 +05 +e9 +c9 +11 +00 +00 +41 +80 +39 +00 +0f +8f +c3 +72 +ff +ff +c7 +07 +a0 +27 +00 +00 +c7 +47 +04 +03 +e0 +00 +00 +e9 +ad +11 +00 +00 +41 +8a +11 +80 +fa +57 +0f +84 +8f +00 +00 +00 +80 +fa +77 +0f +84 +86 +00 +00 +00 +e9 +9a +72 +ff +ff +41 +8a +11 +80 +fa +4e +74 +4c +80 +fa +6e +74 +47 +e9 +88 +72 +ff +ff +41 +80 +39 +00 +0f +8f +7b +72 +ff +ff +c7 +07 +40 +24 +00 +00 +c7 +47 +04 +04 +d8 +03 +07 +e9 +65 +11 +00 +00 +41 +8a +11 +80 +fa +57 +74 +09 +80 +fa +77 +0f +85 +5b +72 +ff +ff +41 +80 +39 +00 +0f +8f +4e +72 +ff +ff +c7 +07 +c0 +28 +00 +00 +e9 +95 +03 +00 +00 +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +35 +72 +ff +ff +41 +80 +39 +00 +0f +8f +28 +72 +ff +ff +c7 +07 +8c +00 +00 +00 +c7 +47 +04 +01 +d9 +9b +06 +e9 +12 +11 +00 +00 +41 +80 +39 +00 +0f +8f +0c +72 +ff +ff +c7 +07 +54 +28 +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +f6 +10 +00 +00 +41 +8a +11 +80 +fa +44 +74 +59 +80 +fa +64 +74 +54 +e9 +eb +71 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +da +71 +ff +ff +41 +8a +11 +80 +fa +4f +74 +09 +80 +fa +6f +0f +85 +c9 +71 +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +b8 +71 +ff +ff +41 +80 +39 +00 +0f +8f +ab +71 +ff +ff +c7 +07 +70 +00 +00 +00 +c7 +47 +04 +01 +dd +04 +00 +e9 +95 +10 +00 +00 +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +8b +71 +ff +ff +41 +8a +11 +80 +fa +4e +74 +09 +80 +fa +6e +0f +85 +7a +71 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +69 +71 +ff +ff +41 +80 +39 +00 +0f +8f +5c +71 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +fc +d9 +00 +e9 +46 +10 +00 +00 +41 +8a +11 +80 +fa +41 +0f +84 +bf +00 +00 +00 +80 +fa +61 +0f +84 +b6 +00 +00 +00 +e9 +33 +71 +ff +ff +41 +8a +11 +80 +fa +54 +74 +6b +80 +fa +74 +74 +66 +e9 +21 +71 +ff +ff +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +10 +71 +ff +ff +41 +8a +11 +80 +fa +4d +74 +09 +80 +fa +6d +0f +85 +ff +70 +ff +ff +41 +8a +11 +84 +d2 +7e +0a +80 +fa +31 +74 +17 +e9 +eb +70 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +f8 +d9 +00 +e9 +d5 +0f +00 +00 +41 +80 +39 +00 +0f +8f +cf +70 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +f5 +d9 +00 +e9 +d1 +0d +00 +00 +41 +8a +11 +80 +fa +41 +74 +09 +80 +fa +61 +0f +85 +af +70 +ff +ff +41 +8a +11 +80 +fa +4e +74 +09 +80 +fa +6e +0f +85 +9e +70 +ff +ff +41 +80 +39 +00 +0f +8f +91 +70 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +f3 +d9 +00 +e9 +7b +0f +00 +00 +41 +8a +11 +80 +fa +4e +74 +09 +80 +fa +6e +0f +85 +71 +70 +ff +ff +41 +80 +39 +00 +0f +8f +64 +70 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +f2 +d9 +00 +e9 +4e +0f +00 +00 +41 +8a +11 +80 +fa +4e +0f +84 +ed +01 +00 +00 +80 +fa +6e +0f +84 +e4 +01 +00 +00 +e9 +3b +70 +ff +ff +41 +8a +11 +80 +fa +54 +7f +17 +80 +fa +41 +0f +84 +ac +00 +00 +00 +80 +fa +53 +0f +8e +21 +70 +ff +ff +e9 +b8 +00 +00 +00 +80 +fa +61 +7f +0e +80 +fa +60 +0f +8e +0e +70 +ff +ff +e9 +8b +00 +00 +00 +80 +fa +74 +0f +84 +9c +00 +00 +00 +e9 +fb +6f +ff +ff +41 +8a +11 +80 +fa +4c +74 +37 +80 +fa +6c +74 +32 +e9 +e9 +6f +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +d8 +6f +ff +ff +41 +80 +39 +00 +0f +8f +cb +6f +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +d0 +d9 +00 +e9 +b5 +0e +00 +00 +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +ab +6f +ff +ff +41 +8a +11 +80 +fa +58 +74 +09 +80 +fa +78 +0f +85 +9a +6f +ff +ff +41 +80 +39 +00 +0f +8f +8d +6f +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +e2 +db +00 +e9 +77 +0e +00 +00 +41 +8a +11 +80 +fa +56 +0f +84 +e9 +00 +00 +00 +80 +fa +76 +0f +84 +e0 +00 +00 +00 +e9 +64 +6f +ff +ff +41 +8a +11 +80 +fa +53 +7f +1a +80 +fa +44 +7f +05 +80 +fa +43 +eb +18 +80 +fa +45 +7e +4e +80 +fa +52 +0f +8e +44 +6f +ff +ff +eb +31 +80 +fa +64 +7f +0b +80 +fa +63 +0f +85 +34 +6f +ff +ff +eb +0f +80 +fa +65 +7e +2e +80 +fa +73 +74 +17 +e9 +23 +6f +ff +ff +41 +8a +11 +80 +fa +57 +74 +76 +80 +fa +77 +74 +71 +e9 +11 +6f +ff +ff +41 +8a +11 +80 +fa +57 +74 +48 +80 +fa +77 +74 +43 +e9 +ff +6e +ff +ff +41 +8a +11 +80 +fa +4e +74 +09 +80 +fa +6e +0f +85 +ee +6e +ff +ff +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +dd +6e +ff +ff +41 +80 +39 +00 +0f +8f +d0 +6e +ff +ff +c7 +07 +70 +00 +00 +00 +c7 +47 +04 +01 +d9 +06 +00 +e9 +ba +0d +00 +00 +41 +80 +39 +00 +0f +8f +b4 +6e +ff +ff +c7 +07 +80 +28 +00 +00 +c7 +47 +04 +02 +00 +00 +00 +e9 +9e +0d +00 +00 +41 +80 +39 +00 +0f +8f +98 +6e +ff +ff +c7 +07 +38 +28 +00 +00 +c7 +47 +04 +01 +07 +00 +00 +e9 +82 +0d +00 +00 +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +78 +6e +ff +ff +41 +80 +39 +00 +0f +8f +6b +6e +ff +ff +c7 +07 +70 +00 +00 +00 +c7 +47 +04 +01 +dd +06 +00 +e9 +55 +0d +00 +00 +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +4b +6e +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +3a +6e +ff +ff +41 +80 +39 +00 +0f +8f +2d +6e +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +e3 +db +00 +e9 +17 +0d +00 +00 +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +0d +6e +ff +ff +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +f5 +6d +ff +ff +eb +1c +80 +fa +70 +74 +17 +e9 +e9 +6d +ff +ff +c7 +07 +e0 +26 +00 +00 +c7 +47 +04 +06 +c8 +c8 +01 +e9 +d3 +0c +00 +00 +41 +80 +39 +00 +0f +8f +cd +6d +ff +ff +c7 +07 +a0 +27 +00 +00 +c7 +47 +04 +03 +c8 +00 +00 +e9 +b7 +0c +00 +00 +41 +8a +11 +80 +fa +59 +7f +58 +80 +fa +44 +7f +29 +80 +fa +31 +7f +16 +84 +d2 +0f +8e +94 +00 +00 +00 +80 +fa +30 +0f +8e +98 +6d +ff +ff +e9 +98 +00 +00 +00 +80 +fa +43 +0f +84 +ab +00 +00 +00 +e9 +85 +6d +ff +ff +80 +fa +4c +7f +17 +80 +fa +45 +0f +8e +b2 +00 +00 +00 +80 +fa +4b +0f +8e +6e +6d +ff +ff +e9 +be +00 +00 +00 +80 +fa +50 +0f +84 +08 +01 +00 +00 +e9 +5b +6d +ff +ff +80 +fa +6b +7f +23 +80 +fa +63 +7f +14 +80 +fa +5a +0f +8e +02 +01 +00 +00 +80 +fa +62 +0f +8e +3f +6d +ff +ff +eb +5e +80 +fa +65 +74 +73 +e9 +33 +6d +ff +ff +80 +fa +70 +7f +13 +80 +fa +6c +7e +7e +80 +fa +6f +0f +8e +20 +6d +ff +ff +e9 +c3 +00 +00 +00 +80 +fa +7a +0f +84 +cc +00 +00 +00 +e9 +0d +6d +ff +ff +c7 +07 +40 +24 +00 +00 +c7 +47 +04 +04 +c0 +00 +05 +e9 +f7 +0b +00 +00 +41 +80 +39 +00 +0f +8f +f1 +6c +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +e8 +d9 +00 +e9 +db +0b +00 +00 +41 +8a +11 +80 +fa +57 +0f +84 +b0 +01 +00 +00 +80 +fa +77 +0f +84 +a7 +01 +00 +00 +e9 +c8 +6c +ff +ff +41 +8a +11 +80 +fa +4e +0f +84 +69 +01 +00 +00 +80 +fa +6e +0f +84 +60 +01 +00 +00 +e9 +ae +6c +ff +ff +41 +8a +11 +80 +fa +4d +7f +21 +80 +fa +32 +7f +0e +80 +fa +31 +0f +8e +98 +6c +ff +ff +e9 +82 +00 +00 +00 +80 +fa +47 +0f +84 +ae +00 +00 +00 +e9 +85 +6c +ff +ff +80 +fa +67 +7f +17 +80 +fa +4e +0f +8e +a8 +00 +00 +00 +80 +fa +66 +0f +8e +6e +6c +ff +ff +e9 +8d +00 +00 +00 +80 +fa +6e +0f +84 +91 +00 +00 +00 +e9 +5b +6c +ff +ff +41 +8a +11 +80 +fa +49 +74 +26 +80 +fa +69 +74 +21 +e9 +49 +6c +ff +ff +41 +80 +39 +00 +0f +8f +3c +6c +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +ee +d9 +00 +e9 +26 +0b +00 +00 +41 +80 +39 +00 +0f +8f +20 +6c +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +eb +d9 +00 +e9 +0a +0b +00 +00 +41 +8a +11 +80 +fa +54 +7f +13 +80 +fa +45 +74 +79 +80 +fa +53 +0f +8e +fb +6b +ff +ff +e9 +87 +00 +00 +00 +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +e8 +6b +ff +ff +eb +5b +80 +fa +74 +74 +72 +e9 +dc +6b +ff +ff +41 +8a +11 +80 +fa +32 +74 +2d +e9 +cf +6b +ff +ff +41 +8a +11 +80 +fa +32 +0f +85 +c3 +6b +ff +ff +41 +80 +39 +00 +0f +8f +b6 +6b +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +ed +d9 +00 +e9 +a0 +0a +00 +00 +41 +80 +39 +00 +0f +8f +9a +6b +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +ec +d9 +00 +e9 +84 +0a +00 +00 +41 +80 +39 +00 +0f +8f +7e +6b +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +ea +d9 +00 +e9 +68 +0a +00 +00 +41 +80 +39 +00 +0f +8f +62 +6b +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +e9 +d9 +00 +e9 +4c +0a +00 +00 +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +42 +6b +ff +ff +41 +80 +39 +00 +0f +8f +35 +6b +ff +ff +c7 +07 +70 +00 +00 +00 +c7 +47 +04 +01 +d9 +04 +00 +e9 +1f +0a +00 +00 +41 +80 +39 +00 +0f +8f +19 +6b +ff +ff +c7 +07 +38 +28 +00 +00 +c7 +47 +04 +01 +05 +00 +00 +e9 +03 +0a +00 +00 +41 +8a +11 +80 +fa +44 +0f +84 +2d +03 +00 +00 +80 +fa +64 +0f +84 +24 +03 +00 +00 +e9 +f0 +6a +ff +ff +41 +8a +11 +80 +fa +55 +7f +17 +80 +fa +53 +0f +8e +df +6a +ff +ff +80 +fa +54 +0f +8e +56 +02 +00 +00 +e9 +84 +02 +00 +00 +80 +fa +73 +0f +8e +c8 +6a +ff +ff +80 +fa +74 +0f +8e +3f +02 +00 +00 +80 +fa +75 +0f +8e +69 +02 +00 +00 +e9 +b1 +6a +ff +ff +41 +8a +11 +80 +fa +4f +0f +84 +c5 +01 +00 +00 +80 +fa +6f +0f +84 +bc +01 +00 +00 +e9 +97 +6a +ff +ff +41 +8a +11 +80 +fa +44 +0f +84 +7e +01 +00 +00 +80 +fa +64 +0f +84 +75 +01 +00 +00 +e9 +7d +6a +ff +ff +41 +8a +11 +80 +fa +55 +0f +84 +37 +01 +00 +00 +80 +fa +75 +0f +84 +2e +01 +00 +00 +e9 +63 +6a +ff +ff +41 +8a +11 +80 +fa +49 +0f +84 +bd +00 +00 +00 +80 +fa +69 +0f +84 +b4 +00 +00 +00 +e9 +49 +6a +ff +ff +41 +8a +11 +80 +fa +49 +7f +10 +80 +fa +43 +74 +25 +80 +fa +48 +0f +8e +33 +6a +ff +ff +eb +2c +80 +fa +63 +7f +0b +80 +fa +62 +0f +8e +23 +6a +ff +ff +eb +0a +80 +fa +69 +74 +17 +e9 +17 +6a +ff +ff +41 +8a +11 +80 +fa +53 +74 +37 +80 +fa +73 +74 +32 +e9 +05 +6a +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +f4 +69 +ff +ff +41 +80 +39 +00 +0f +8f +e7 +69 +ff +ff +c7 +07 +54 +00 +00 +00 +c7 +47 +04 +01 +e3 +db +98 +e9 +d1 +08 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +c7 +69 +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +b6 +69 +ff +ff +41 +80 +39 +00 +0f +8f +a9 +69 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +f7 +d9 +00 +e9 +93 +08 +00 +00 +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +89 +69 +ff +ff +41 +8a +11 +80 +fa +52 +7f +0f +84 +d2 +7e +15 +80 +fa +51 +0f +8e +71 +69 +ff +ff +eb +1c +80 +fa +72 +74 +17 +e9 +65 +69 +ff +ff +c7 +07 +00 +28 +00 +00 +c7 +47 +04 +02 +da +06 +00 +e9 +4f +08 +00 +00 +41 +80 +39 +00 +0f +8f +49 +69 +ff +ff +c7 +07 +00 +28 +00 +00 +c7 +47 +04 +02 +da +07 +00 +e9 +33 +08 +00 +00 +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +29 +69 +ff +ff +41 +80 +39 +00 +0f +8f +1c +69 +ff +ff +c7 +07 +00 +28 +00 +00 +c7 +47 +04 +02 +da +01 +00 +e9 +06 +08 +00 +00 +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +fc +68 +ff +ff +41 +80 +39 +00 +0f +8f +ef +68 +ff +ff +c7 +07 +00 +28 +00 +00 +c7 +47 +04 +02 +da +00 +00 +e9 +d9 +07 +00 +00 +41 +8a +11 +80 +fa +4d +74 +09 +80 +fa +6d +0f +85 +cf +68 +ff +ff +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +b7 +68 +ff +ff +eb +1c +80 +fa +70 +74 +17 +e9 +ab +68 +ff +ff +c7 +07 +00 +28 +00 +00 +c7 +47 +04 +02 +da +02 +00 +e9 +95 +07 +00 +00 +41 +80 +39 +00 +0f +8f +8f +68 +ff +ff +c7 +07 +00 +28 +00 +00 +c7 +47 +04 +02 +da +03 +00 +e9 +79 +07 +00 +00 +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +68 +68 +ff +ff +eb +7c +80 +fa +70 +74 +77 +e9 +5c +68 +ff +ff +c7 +07 +00 +28 +00 +00 +c7 +47 +04 +02 +db +02 +00 +e9 +46 +07 +00 +00 +41 +8a +11 +80 +fa +42 +74 +09 +80 +fa +62 +0f +85 +3c +68 +ff +ff +41 +8a +11 +80 +fa +52 +7f +0f +84 +d2 +7e +15 +80 +fa +51 +0f +8e +24 +68 +ff +ff +eb +1c +80 +fa +72 +74 +17 +e9 +18 +68 +ff +ff +c7 +07 +00 +28 +00 +00 +c7 +47 +04 +02 +da +04 +00 +e9 +02 +07 +00 +00 +41 +80 +39 +00 +0f +8f +fc +67 +ff +ff +c7 +07 +00 +28 +00 +00 +c7 +47 +04 +02 +da +05 +00 +e9 +e6 +06 +00 +00 +41 +80 +39 +00 +0f +8f +e0 +67 +ff +ff +c7 +07 +c0 +24 +00 +00 +c7 +47 +04 +03 +03 +07 +00 +e9 +ca +06 +00 +00 +41 +80 +39 +00 +0f +8f +c4 +67 +ff +ff +c7 +07 +c0 +24 +00 +00 +c7 +47 +04 +03 +00 +05 +00 +e9 +ae +06 +00 +00 +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +a4 +67 +ff +ff +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +93 +67 +ff +ff +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +7b +67 +ff +ff +eb +1c +80 +fa +70 +74 +17 +e9 +6f +67 +ff +ff +c7 +07 +f8 +28 +00 +00 +c7 +47 +04 +01 +dd +00 +00 +e9 +59 +06 +00 +00 +41 +80 +39 +00 +0f +8f +53 +67 +ff +ff +c7 +07 +f8 +28 +00 +00 +c7 +47 +04 +01 +df +00 +00 +c7 +47 +08 +20 +10 +20 +00 +e9 +1b +1a +00 +00 +41 +8a +11 +80 +fa +4d +74 +09 +80 +fa +6d +0f +85 +2c +67 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +1b +67 +ff +ff +41 +80 +39 +00 +0f +8f +0e +67 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +0e +0f +00 +c7 +47 +08 +00 +00 +01 +00 +e9 +d6 +19 +00 +00 +41 +8a +11 +80 +fa +56 +74 +6a +80 +fa +76 +74 +65 +e9 +e6 +66 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +d5 +66 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +c4 +66 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +b3 +66 +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +a2 +66 +ff +ff +41 +80 +39 +00 +0f +8f +95 +66 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +f6 +d9 +00 +e9 +7f +05 +00 +00 +41 +8a +11 +80 +fa +52 +7f +1f +80 +fa +4f +7f +0a +84 +d2 +0f +8f +6e +66 +ff +ff +eb +2a +80 +fa +50 +7e +37 +80 +fa +51 +0f +8e +5e +66 +ff +ff +eb +48 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +4e +66 +ff +ff +eb +1c +80 +fa +72 +74 +33 +e9 +42 +66 +ff +ff +c7 +07 +e0 +26 +00 +00 +c7 +47 +04 +06 +f8 +f0 +06 +e9 +2c +05 +00 +00 +41 +80 +39 +00 +0f +8f +26 +66 +ff +ff +c7 +07 +a0 +27 +00 +00 +c7 +47 +04 +03 +f8 +00 +00 +e9 +10 +05 +00 +00 +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +ff +65 +ff +ff +eb +1c +80 +fa +70 +74 +17 +e9 +f3 +65 +ff +ff +c7 +07 +e0 +26 +00 +00 +c7 +47 +04 +06 +f0 +f8 +07 +e9 +dd +04 +00 +00 +41 +80 +39 +00 +0f +8f +d7 +65 +ff +ff +c7 +07 +a0 +27 +00 +00 +c7 +47 +04 +03 +f0 +00 +00 +e9 +c1 +04 +00 +00 +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +4d +0f +84 +5a +02 +00 +00 +80 +fa +52 +0f +8e +ae +65 +ff +ff +e9 +a3 +02 +00 +00 +80 +fa +6d +7f +0e +80 +fa +6c +0f +8e +9b +65 +ff +ff +e9 +39 +02 +00 +00 +80 +fa +73 +0f +84 +87 +02 +00 +00 +e9 +88 +65 +ff +ff +41 +8a +11 +80 +fa +53 +0f +84 +03 +02 +00 +00 +80 +fa +73 +0f +84 +fa +01 +00 +00 +e9 +6e +65 +ff +ff +41 +8a +11 +80 +fa +45 +0f +84 +bc +01 +00 +00 +80 +fa +65 +0f +84 +b3 +01 +00 +00 +e9 +54 +65 +ff +ff +41 +8a +11 +80 +fa +4f +74 +09 +80 +fa +6f +0f +85 +43 +65 +ff +ff +41 +8a +11 +80 +fa +56 +74 +09 +80 +fa +76 +0f +85 +32 +65 +ff +ff +41 +8a +11 +80 +fa +55 +7f +26 +80 +fa +45 +7f +0a +80 +fa +42 +74 +4f +80 +fa +44 +eb +24 +80 +fa +4e +0f +84 +97 +00 +00 +00 +80 +fa +54 +0f +8e +09 +65 +ff +ff +e9 +bb +00 +00 +00 +80 +fa +65 +7f +10 +80 +fa +62 +74 +29 +80 +fa +64 +0f +8e +f1 +64 +ff +ff +eb +58 +80 +fa +6e +7f +0b +80 +fa +6d +0f +8e +e1 +64 +ff +ff +eb +64 +80 +fa +75 +0f +84 +8d +00 +00 +00 +e9 +d1 +64 +ff +ff +41 +8a +11 +80 +fa +45 +7f +12 +84 +d2 +7e +1c +80 +fa +44 +0f +8e +b9 +64 +ff +ff +e9 +f5 +00 +00 +00 +80 +fa +65 +0f +84 +ec +00 +00 +00 +e9 +a6 +64 +ff +ff +c7 +07 +54 +2a +00 +00 +c7 +47 +04 +01 +c0 +da +00 +e9 +2e +02 +00 +00 +41 +80 +39 +00 +0f +8f +8a +64 +ff +ff +c7 +07 +54 +2a +00 +00 +c7 +47 +04 +01 +c8 +da +00 +e9 +12 +02 +00 +00 +41 +8a +11 +80 +fa +45 +7f +10 +80 +fa +42 +74 +41 +80 +fa +44 +0f +8e +65 +64 +ff +ff +eb +69 +80 +fa +62 +7f +0b +80 +fa +61 +0f +8e +55 +64 +ff +ff +eb +26 +80 +fa +65 +74 +54 +e9 +49 +64 +ff +ff +41 +80 +39 +00 +0f +8f +3c +64 +ff +ff +c7 +07 +54 +2a +00 +00 +c7 +47 +04 +01 +d8 +da +00 +e9 +c4 +01 +00 +00 +41 +8a +11 +80 +fa +45 +7f +0f +84 +d2 +7e +15 +80 +fa +44 +0f +8e +15 +64 +ff +ff +eb +38 +80 +fa +65 +74 +33 +e9 +09 +64 +ff +ff +c7 +07 +54 +2a +00 +00 +c7 +47 +04 +01 +c0 +db +00 +e9 +91 +01 +00 +00 +41 +80 +39 +00 +0f +8f +ed +63 +ff +ff +c7 +07 +54 +2a +00 +00 +c7 +47 +04 +01 +c8 +db +00 +e9 +75 +01 +00 +00 +41 +80 +39 +00 +0f +8f +d1 +63 +ff +ff +c7 +07 +54 +2a +00 +00 +c7 +47 +04 +01 +d0 +db +00 +e9 +59 +01 +00 +00 +41 +80 +39 +00 +0f +8f +b5 +63 +ff +ff +c7 +07 +54 +2a +00 +00 +c7 +47 +04 +01 +d0 +da +00 +e9 +3d +01 +00 +00 +41 +8a +11 +80 +fa +58 +74 +09 +80 +fa +78 +0f +85 +95 +63 +ff +ff +41 +80 +39 +00 +0f +8f +88 +63 +ff +ff +c7 +07 +54 +00 +00 +00 +c7 +47 +04 +01 +e2 +db +98 +e9 +72 +02 +00 +00 +41 +80 +39 +00 +0f +8f +6c +63 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +e0 +d9 +00 +e9 +56 +02 +00 +00 +41 +8a +11 +80 +fa +50 +7f +23 +80 +fa +48 +7f +0a +84 +d2 +0f +8f +45 +63 +ff +ff +eb +2e +80 +fa +49 +0f +8e +8d +00 +00 +00 +80 +fa +4f +0f +8e +31 +63 +ff +ff +eb +4f +80 +fa +69 +7f +0b +80 +fa +68 +0f +8e +21 +63 +ff +ff +eb +72 +80 +fa +70 +74 +3a +e9 +15 +63 +ff +ff +c7 +07 +20 +26 +00 +00 +c7 +47 +04 +04 +d0 +02 +00 +e9 +ff +01 +00 +00 +41 +80 +39 +00 +0f +8f +f9 +62 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +ff +d9 +00 +c7 +47 +08 +02 +10 +00 +00 +e9 +c1 +15 +00 +00 +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +cb +62 +ff +ff +eb +6f +80 +fa +70 +74 +6a +e9 +bf +62 +ff +ff +c7 +07 +20 +26 +00 +00 +c7 +47 +04 +04 +d8 +03 +00 +e9 +a9 +01 +00 +00 +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +98 +62 +ff +ff +eb +19 +80 +fa +70 +74 +14 +e9 +8c +62 +ff +ff +c7 +07 +a0 +26 +00 +00 +c7 +47 +04 +02 +f0 +db +00 +eb +17 +41 +80 +39 +00 +0f +8f +73 +62 +ff +ff +c7 +07 +a0 +26 +00 +00 +c7 +47 +04 +02 +f0 +df +00 +c7 +47 +08 +20 +10 +00 +00 +e9 +3b +15 +00 +00 +41 +80 +39 +00 +0f +8f +50 +62 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +d9 +de +00 +e9 +3a +01 +00 +00 +41 +8a +11 +80 +fa +44 +74 +48 +80 +fa +64 +74 +43 +e9 +2f +62 +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +1e +62 +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +0d +62 +ff +ff +41 +80 +39 +00 +0f +8f +00 +62 +ff +ff +c7 +07 +14 +25 +00 +00 +c7 +47 +04 +01 +06 +00 +00 +e9 +ea +00 +00 +00 +41 +80 +39 +00 +0f +8f +e4 +61 +ff +ff +c7 +07 +14 +25 +00 +00 +c7 +47 +04 +01 +04 +00 +00 +e9 +ce +00 +00 +00 +41 +80 +39 +00 +0f +8f +c8 +61 +ff +ff +c7 +07 +03 +00 +00 +00 +e9 +b5 +14 +00 +00 +41 +8a +11 +80 +fa +44 +74 +34 +80 +fa +64 +74 +2f +e9 +ae +61 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +9d +61 +ff +ff +41 +80 +39 +00 +0f +8f +90 +61 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +e1 +d9 +00 +eb +7d +41 +8a +11 +80 +fa +50 +7f +0f +84 +d2 +7e +15 +80 +fa +4f +0f +8e +6c +61 +ff +ff +eb +19 +80 +fa +70 +74 +14 +e9 +60 +61 +ff +ff +c7 +07 +e0 +26 +00 +00 +c7 +47 +04 +06 +c0 +c0 +00 +eb +4d +41 +80 +39 +00 +0f +8f +47 +61 +ff +ff +c7 +07 +a0 +27 +00 +00 +c7 +47 +04 +03 +c0 +00 +00 +eb +34 +41 +8a +11 +80 +fa +4d +74 +09 +80 +fa +6d +0f +85 +2a +61 +ff +ff +41 +8a +11 +80 +fa +31 +0f +85 +1e +61 +ff +ff +41 +80 +39 +00 +0f +8f +11 +61 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +f0 +d9 +00 +c7 +47 +08 +00 +10 +00 +00 +e9 +d9 +13 +00 +00 +41 +8a +11 +80 +fa +52 +7f +21 +80 +fa +4b +7f +05 +80 +fa +48 +eb +1f +80 +fa +4c +0f +8e +27 +12 +00 +00 +80 +fa +51 +0f +8e +d7 +60 +ff +ff +e9 +4c +12 +00 +00 +80 +fa +6b +7f +0e +80 +fa +68 +0f +84 +f1 +11 +00 +00 +e9 +bf +60 +ff +ff +80 +fa +6c +0f +8e +fd +11 +00 +00 +80 +fa +72 +0f +84 +27 +12 +00 +00 +e9 +a8 +60 +ff +ff +41 +8a +11 +80 +fa +42 +0f +84 +ad +11 +00 +00 +80 +fa +62 +0f +84 +a4 +11 +00 +00 +e9 +8e +60 +ff +ff +41 +8a +11 +80 +fa +41 +0f +84 +89 +10 +00 +00 +80 +fa +61 +0f +84 +80 +10 +00 +00 +e9 +74 +60 +ff +ff +41 +8a +11 +80 +fa +54 +0f +84 +ea +0c +00 +00 +80 +fa +74 +0f +84 +e1 +0c +00 +00 +e9 +5a +60 +ff +ff +41 +8a +11 +80 +fa +45 +0f +84 +7a +0c +00 +00 +80 +fa +65 +0f +84 +71 +0c +00 +00 +e9 +40 +60 +ff +ff +41 +8a +11 +80 +fa +44 +0f +84 +2c +0c +00 +00 +80 +fa +64 +0f +84 +23 +0c +00 +00 +e9 +26 +60 +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +4c +83 +f8 +29 +0f +87 +14 +60 +ff +ff +ff +24 +85 +a0 +53 +00 +00 +41 +8a +11 +80 +fa +4c +7f +26 +80 +fa +43 +7f +0a +84 +d2 +0f +8f +f5 +5f +ff +ff +eb +38 +80 +fa +44 +0f +8e +40 +0a +00 +00 +80 +fa +4b +0f +8e +e1 +5f +ff +ff +e9 +04 +0a +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +ce +5f +ff +ff +e9 +1f +0a +00 +00 +80 +fa +6c +0f +84 +e8 +09 +00 +00 +e9 +bb +5f +ff +ff +c7 +07 +36 +00 +00 +00 +e9 +fc +09 +00 +00 +41 +8a +11 +80 +fa +44 +0f +84 +98 +09 +00 +00 +80 +fa +64 +0f +84 +8f +09 +00 +00 +e9 +99 +5f +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +49 +0f +84 +96 +08 +00 +00 +80 +fa +52 +0f +8e +7f +5f +ff +ff +e9 +6e +08 +00 +00 +80 +fa +69 +7f +0e +80 +fa +68 +0f +8e +6c +5f +ff +ff +e9 +75 +08 +00 +00 +80 +fa +73 +0f +84 +52 +08 +00 +00 +e9 +59 +5f +ff +ff +41 +8a +11 +80 +fa +4c +7f +12 +84 +d2 +7e +1c +80 +fa +4b +0f +8e +41 +5f +ff +ff +e9 +11 +08 +00 +00 +80 +fa +6c +0f +84 +08 +08 +00 +00 +e9 +2e +5f +ff +ff +c7 +07 +34 +00 +00 +00 +e9 +6f +09 +00 +00 +41 +8a +11 +80 +fa +52 +0f +84 +ca +06 +00 +00 +80 +fa +72 +0f +84 +c1 +06 +00 +00 +e9 +0c +5f +ff +ff +41 +80 +39 +00 +0f +8f +ff +5e +ff +ff +80 +3d +00 +00 +00 +00 +40 +75 +11 +53 +68 +e0 +39 +00 +00 +56 +6a +00 +e8 +fc +ff +ff +ff +83 +c4 +10 +c7 +07 +02 +36 +00 +00 +b8 +04 +00 +00 +00 +e9 +d2 +11 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +30 +83 +f8 +42 +0f +87 +c6 +5e +ff +ff +ff +24 +85 +48 +54 +00 +00 +41 +8a +11 +80 +fa +42 +0f +84 +50 +03 +00 +00 +80 +fa +62 +0f +84 +47 +03 +00 +00 +e9 +a5 +5e +ff +ff +41 +8a +11 +80 +fa +54 +7f +21 +80 +fa +4b +7f +05 +80 +fa +44 +eb +1f +80 +fa +4c +0f +8e +9e +02 +00 +00 +80 +fa +53 +0f +8e +81 +5e +ff +ff +e9 +a2 +02 +00 +00 +80 +fa +6b +7f +0e +80 +fa +64 +0f +84 +70 +02 +00 +00 +e9 +69 +5e +ff +ff +80 +fa +6c +0f +8e +74 +02 +00 +00 +80 +fa +74 +0f +84 +7d +02 +00 +00 +e9 +52 +5e +ff +ff +41 +8a +11 +80 +fa +41 +0f +84 +ec +01 +00 +00 +80 +fa +61 +0f +84 +e3 +01 +00 +00 +e9 +38 +5e +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +27 +5e +ff +ff +41 +8a +11 +80 +fa +52 +7f +1a +80 +fa +44 +7f +05 +80 +fa +43 +eb +18 +80 +fa +45 +7e +44 +80 +fa +51 +0f +8e +07 +5e +ff +ff +eb +6b +80 +fa +64 +7f +0b +80 +fa +63 +0f +85 +f7 +5d +ff +ff +eb +0f +80 +fa +65 +7e +24 +80 +fa +72 +74 +51 +e9 +e6 +5d +ff +ff +41 +8a +11 +80 +fa +41 +0f +84 +3b +01 +00 +00 +80 +fa +61 +0f +84 +32 +01 +00 +00 +e9 +cc +5d +ff +ff +41 +8a +11 +80 +fa +58 +7f +10 +80 +fa +4e +74 +6a +80 +fa +57 +0f +8e +b6 +5d +ff +ff +eb +71 +80 +fa +6e +7f +0b +80 +fa +6d +0f +8e +a6 +5d +ff +ff +eb +4f +80 +fa +78 +74 +5c +e9 +9a +5d +ff +ff +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +89 +5d +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +78 +5d +ff +ff +41 +80 +39 +00 +0f +8f +6b +5d +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +07 +0f +00 +c7 +47 +08 +20 +00 +84 +00 +e9 +33 +10 +00 +00 +41 +8a +11 +80 +fa +54 +74 +5c +80 +fa +74 +74 +57 +e9 +43 +5d +ff +ff +41 +8a +11 +80 +fa +49 +74 +09 +80 +fa +69 +0f +85 +32 +5d +ff +ff +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +21 +5d +ff +ff +41 +80 +39 +00 +0f +8f +14 +5d +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +df +0e +00 +00 +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +35 +0f +00 +c7 +47 +08 +20 +00 +80 +00 +e9 +cf +0f +00 +00 +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +e0 +5c +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +cf +5c +ff +ff +41 +80 +39 +00 +0f +8f +c2 +5c +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +84 +8d +0e +00 +00 +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +34 +0f +00 +c7 +47 +08 +20 +00 +00 +00 +e9 +7d +0f +00 +00 +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +8e +5c +ff +ff +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +7d +5c +ff +ff +41 +80 +39 +00 +0f +8f +70 +5c +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +05 +0f +00 +c7 +47 +08 +20 +00 +04 +00 +e9 +38 +0f +00 +00 +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +49 +5c +ff +ff +41 +8a +11 +80 +fa +47 +74 +09 +80 +fa +67 +0f +85 +38 +5c +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +27 +5c +ff +ff +41 +80 +39 +00 +0f +8f +1a +5c +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +f0 +0c +00 +00 +c7 +07 +54 +00 +00 +00 +c7 +47 +04 +01 +f8 +01 +0f +e9 +03 +0d +00 +00 +41 +8a +11 +80 +fa +43 +74 +70 +80 +fa +63 +74 +6b +e9 +ec +5b +ff +ff +41 +8a +11 +80 +fa +44 +74 +34 +80 +fa +64 +74 +2f +e9 +da +5b +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +c9 +5b +ff +ff +41 +80 +39 +00 +0f +8f +bc +5b +ff +ff +c7 +07 +1c +33 +00 +00 +c7 +47 +04 +01 +7c +00 +00 +eb +41 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +9f +5b +ff +ff +41 +80 +39 +00 +0f +8f +92 +5b +ff +ff +c7 +07 +1c +33 +00 +00 +c7 +47 +04 +01 +7a +00 +00 +eb +17 +41 +80 +39 +00 +0f +8f +79 +5b +ff +ff +c7 +07 +38 +33 +00 +00 +c7 +47 +04 +01 +00 +00 +00 +c7 +47 +08 +08 +00 +0a +00 +e9 +41 +0e +00 +00 +41 +8a +11 +80 +fa +53 +7f +1f +80 +fa +4f +7f +0a +84 +d2 +0f +8f +4b +5b +ff +ff +eb +2a +80 +fa +50 +7e +37 +80 +fa +52 +0f +8e +3b +5b +ff +ff +eb +68 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +2b +5b +ff +ff +eb +1c +80 +fa +73 +74 +53 +e9 +1f +5b +ff +ff +c7 +07 +00 +10 +00 +00 +c7 +47 +04 +17 +28 +05 +00 +e9 +e7 +0d +00 +00 +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +b0 +00 +00 +00 +80 +fa +52 +0f +8e +f6 +5a +ff +ff +e9 +86 +00 +00 +00 +80 +fa +64 +7f +0e +80 +fa +63 +0f +8e +e3 +5a +ff +ff +e9 +8f +00 +00 +00 +80 +fa +73 +74 +6e +e9 +d4 +5a +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +40 +80 +fa +52 +0f +8e +be +5a +ff +ff +eb +19 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +ae +5a +ff +ff +eb +25 +80 +fa +73 +0f +85 +a3 +5a +ff +ff +41 +80 +39 +00 +0f +8f +96 +5a +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +5c +f3 +00 +e9 +15 +06 +00 +00 +41 +80 +39 +00 +0f +8f +7a +5a +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +5c +f2 +00 +e9 +d6 +05 +00 +00 +41 +80 +39 +00 +0f +8f +5e +5a +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +5c +00 +00 +e9 +dd +05 +00 +00 +41 +80 +39 +00 +0f +8f +42 +5a +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +5c +66 +00 +e9 +9e +05 +00 +00 +41 +80 +39 +00 +0f +8f +26 +5a +ff +ff +0f +be +43 +02 +83 +e8 +30 +83 +c8 +60 +89 +07 +e9 +61 +04 +00 +00 +41 +80 +39 +00 +0f +8f +0b +5a +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +f9 +00 +00 +e9 +d3 +0c +00 +00 +41 +80 +39 +00 +0f +8f +ef +59 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +fd +00 +00 +e9 +b7 +0c +00 +00 +41 +80 +39 +00 +0f +8f +d3 +59 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +fb +00 +00 +e9 +9b +0c +00 +00 +41 +8a +11 +80 +fa +53 +0f +84 +91 +00 +00 +00 +80 +fa +73 +0f +84 +88 +00 +00 +00 +e9 +aa +59 +ff +ff +41 +80 +39 +00 +0f +8f +9d +59 +ff +ff +c7 +07 +e0 +22 +00 +00 +c7 +47 +04 +04 +00 +00 +00 +c7 +47 +08 +02 +00 +10 +00 +e9 +65 +0c +00 +00 +41 +8a +11 +80 +fa +58 +74 +09 +80 +fa +78 +0f +85 +76 +59 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +65 +59 +ff +ff +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +54 +59 +ff +ff +41 +8a +11 +80 +fa +52 +74 +09 +80 +fa +72 +0f +85 +43 +59 +ff +ff +41 +80 +39 +00 +0f +8f +36 +59 +ff +ff +c7 +07 +b8 +2d +00 +00 +c7 +47 +04 +01 +03 +00 +00 +e9 +b5 +04 +00 +00 +41 +8a +11 +80 +fa +57 +7f +23 +80 +fa +44 +7f +0a +80 +fa +42 +74 +48 +80 +fa +43 +eb +21 +80 +fa +51 +0f +84 +8e +00 +00 +00 +80 +fa +56 +0f +8e +fe +58 +ff +ff +eb +4b +80 +fa +64 +7f +10 +80 +fa +62 +74 +25 +80 +fa +63 +0f +8e +e9 +58 +ff +ff +eb +52 +80 +fa +71 +7f +0b +80 +fa +70 +0f +8e +d9 +58 +ff +ff +eb +5e +80 +fa +77 +74 +21 +e9 +cd +58 +ff +ff +41 +80 +39 +00 +0f +8f +c0 +58 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +aa +00 +00 +e9 +88 +0b +00 +00 +41 +80 +39 +00 +0f +8f +a4 +58 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +ab +10 +00 +e9 +6c +0b +00 +00 +41 +80 +39 +00 +0f +8f +88 +58 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +ab +20 +00 +e9 +3a +09 +00 +00 +41 +80 +39 +00 +0f +8f +6c +58 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +42 +09 +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +ab +40 +00 +e9 +55 +09 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +3f +58 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +50 +74 +25 +80 +fa +52 +0f +8e +29 +58 +ff +ff +eb +57 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +19 +58 +ff +ff +eb +0a +80 +fa +73 +74 +42 +e9 +0d +58 +ff +ff +41 +8a +11 +80 +fa +53 +7f +17 +80 +fa +44 +0f +84 +96 +00 +00 +00 +80 +fa +52 +0f +8e +f3 +57 +ff +ff +e9 +a4 +00 +00 +00 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +e0 +57 +ff +ff +eb +78 +80 +fa +73 +0f +84 +8b +00 +00 +00 +e9 +d0 +57 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +ba +57 +ff +ff +eb +36 +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +aa +57 +ff +ff +eb +0a +80 +fa +73 +74 +21 +e9 +9e +57 +ff +ff +41 +80 +39 +00 +0f +8f +91 +57 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +51 +f2 +00 +e9 +ed +02 +00 +00 +41 +80 +39 +00 +0f +8f +75 +57 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +51 +f3 +00 +e9 +f4 +02 +00 +00 +41 +80 +39 +00 +0f +8f +59 +57 +ff +ff +c7 +07 +2c +2d +00 +00 +c7 +47 +04 +01 +51 +66 +00 +e9 +b5 +02 +00 +00 +41 +80 +39 +00 +0f +8f +3d +57 +ff +ff +c7 +07 +10 +2d +00 +00 +c7 +47 +04 +01 +51 +00 +00 +e9 +bc +02 +00 +00 +41 +80 +39 +00 +0f +8f +21 +57 +ff +ff +80 +3d +00 +00 +00 +00 +40 +0f +85 +4f +01 +00 +00 +c7 +07 +24 +00 +00 +00 +e9 +55 +01 +00 +00 +41 +8a +11 +80 +fa +57 +0f +84 +d8 +00 +00 +00 +80 +fa +77 +0f +84 +cf +00 +00 +00 +e9 +f2 +56 +ff +ff +41 +8a +11 +80 +fa +4e +7f +0f +84 +d2 +7e +15 +80 +fa +4d +0f +8e +da +56 +ff +ff +eb +23 +80 +fa +6e +74 +1e +e9 +ce +56 +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +f1 +00 +00 +c7 +47 +08 +04 +00 +20 +00 +e9 +96 +09 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +a7 +56 +ff +ff +41 +8a +11 +80 +fa +4f +7f +0f +84 +d2 +7e +15 +80 +fa +4e +0f +8e +8f +56 +ff +ff +eb +23 +80 +fa +6f +74 +1e +e9 +83 +56 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +38 +0f +00 +c7 +47 +08 +20 +00 +02 +00 +e9 +4b +09 +00 +00 +41 +8a +11 +80 +fa +4c +74 +09 +80 +fa +6c +0f +85 +5c +56 +ff +ff +41 +8a +11 +80 +fa +44 +74 +09 +80 +fa +64 +0f +85 +4b +56 +ff +ff +41 +80 +39 +00 +0f +8f +3e +56 +ff +ff +c7 +07 +38 +00 +00 +00 +c7 +47 +04 +01 +7e +0f +00 +c7 +47 +08 +08 +00 +42 +00 +e9 +06 +09 +00 +00 +41 +80 +39 +00 +0f +8f +1b +56 +ff +ff +c7 +07 +80 +23 +00 +00 +c7 +47 +04 +06 +01 +04 +00 +eb +28 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +fe +55 +ff +ff +41 +80 +39 +00 +0f +8f +f1 +55 +ff +ff +c7 +07 +80 +23 +00 +00 +c7 +47 +04 +06 +00 +00 +00 +c7 +47 +08 +02 +00 +00 +00 +e9 +b9 +08 +00 +00 +41 +80 +39 +00 +0f +8f +ce +55 +ff +ff +80 +3d +00 +00 +00 +00 +40 +74 +0b +53 +68 +80 +3a +00 +00 +e9 +a3 +06 +00 +00 +c7 +07 +26 +00 +00 +00 +b8 +03 +00 +00 +00 +e9 +a7 +08 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +9c +55 +ff +ff +41 +80 +39 +00 +0f +8f +8f +55 +ff +ff +c7 +07 +8c +00 +00 +00 +c7 +47 +04 +01 +01 +0f +01 +e9 +a0 +01 +00 +00 +41 +8a +11 +80 +fa +52 +0f +84 +46 +01 +00 +00 +80 +fa +72 +0f +84 +3d +01 +00 +00 +e9 +66 +55 +ff +ff +41 +8a +11 +80 +fa +44 +7f +16 +84 +d2 +0f +8e +be +06 +00 +00 +80 +fa +43 +0f +8e +4a +55 +ff +ff +e9 +fe +00 +00 +00 +80 +fa +64 +0f +84 +f5 +00 +00 +00 +e9 +37 +55 +ff +ff +41 +8a +11 +80 +fa +44 +7f +12 +84 +d2 +7e +1c +80 +fa +43 +0f +8e +22 +55 +ff +ff +e9 +ba +00 +00 +00 +80 +fa +64 +0f +84 +b1 +00 +00 +00 +e9 +0f +55 +ff +ff +c7 +07 +80 +18 +00 +00 +c7 +47 +04 +08 +05 +00 +00 +e9 +d7 +07 +00 +00 +41 +8a +11 +80 +fa +46 +74 +09 +80 +fa +66 +0f +85 +ef +54 +ff +ff +41 +8a +11 +80 +fa +50 +74 +09 +80 +fa +70 +0f +85 +de +54 +ff +ff +41 +8a +11 +80 +fa +53 +7f +10 +80 +fa +44 +74 +25 +80 +fa +52 +0f +8e +c8 +54 +ff +ff +eb +3d +80 +fa +64 +7f +0b +80 +fa +63 +0f +8e +b8 +54 +ff +ff +eb +0a +80 +fa +73 +74 +28 +e9 +ac +54 +ff +ff +41 +80 +39 +00 +0f +8f +9f +54 +ff +ff +c7 +07 +9c +2d +00 +00 +c7 +47 +04 +01 +c6 +66 +00 +c7 +47 +08 +00 +80 +00 +00 +e9 +67 +07 +00 +00 +41 +80 +39 +00 +0f +8f +7c +54 +ff +ff +c7 +07 +80 +2d +00 +00 +c7 +47 +04 +01 +c6 +00 +00 +c7 +47 +08 +00 +40 +00 +00 +e9 +44 +07 +00 +00 +41 +80 +39 +00 +0f +8f +59 +54 +ff +ff +c7 +07 +60 +19 +00 +00 +c7 +47 +04 +06 +ac +00 +00 +e9 +0b +05 +00 +00 +41 +80 +39 +00 +0f +8f +3d +54 +ff +ff +c7 +07 +60 +19 +00 +00 +c7 +47 +04 +06 +a4 +00 +00 +e9 +ef +04 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +1d +54 +ff +ff +41 +80 +39 +00 +0f +8f +10 +54 +ff +ff +c7 +07 +02 +00 +00 +00 +e9 +fd +06 +00 +00 +41 +8a +11 +80 +fa +54 +74 +09 +80 +fa +74 +0f +85 +f7 +53 +ff +ff +41 +80 +39 +00 +0f +8f +ea +53 +ff +ff +c7 +07 +8c +00 +00 +00 +c7 +47 +04 +01 +01 +0f +00 +c7 +47 +08 +02 +00 +80 +00 +e9 +b2 +06 +00 +00 +41 +8a +11 +80 +fa +4e +74 +09 +80 +fa +6e +0f +85 +c3 +53 +ff +ff +41 +8a +11 +80 +fa +43 +74 +09 +80 +fa +63 +0f +85 +b2 +53 +ff +ff +41 +8a +11 +80 +fa +45 +74 +09 +80 +fa +65 +0f +85 +a1 +53 +ff +ff +41 +80 +39 +00 +0f +8f +94 +53 +ff +ff +c7 +07 +54 +00 +00 +00 +c7 +47 +04 +01 +f8 +ae +0f +c7 +47 +08 +40 +00 +00 +00 +e9 +5c +06 +00 +00 +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +39 +0f +87 +6c +53 +ff +ff +ff +24 +85 +54 +55 +00 +00 +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +be +02 +00 +00 +80 +fa +44 +0f +8e +49 +53 +ff +ff +e9 +32 +03 +00 +00 +80 +fa +65 +0f +84 +29 +03 +00 +00 +e9 +36 +53 +ff +ff +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +ae +02 +00 +00 +80 +fa +44 +0f +8e +1d +53 +ff +ff +e9 +ea +02 +00 +00 +80 +fa +65 +0f +84 +e1 +02 +00 +00 +e9 +0a +53 +ff +ff +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +2e +02 +00 +00 +80 +fa +44 +0f +8e +f1 +52 +ff +ff +e9 +a2 +02 +00 +00 +80 +fa +65 +0f +84 +99 +02 +00 +00 +e9 +de +52 +ff +ff +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +1e +02 +00 +00 +80 +fa +44 +0f +8e +c5 +52 +ff +ff +e9 +5a +02 +00 +00 +80 +fa +65 +0f +84 +51 +02 +00 +00 +e9 +b2 +52 +ff +ff +41 +8a +11 +0f +be +c2 +83 +e8 +41 +83 +f8 +39 +0f +87 +a3 +52 +ff +ff +ff +24 +85 +3c +56 +00 +00 +41 +80 +39 +00 +0f +8f +8f +52 +ff +ff +c7 +07 +20 +21 +00 +00 +c7 +47 +04 +01 +00 +00 +00 +e9 +41 +03 +00 +00 +41 +8a +11 +80 +fa +4f +7f +1c +80 +fa +44 +7f +04 +84 +d2 +eb +6d +80 +fa +45 +7e +64 +80 +fa +4e +0f +8e +5e +52 +ff +ff +e9 +1e +01 +00 +00 +80 +fa +65 +7f +0b +80 +fa +64 +0f +8e +4b +52 +ff +ff +eb +46 +80 +fa +6f +0f +84 +05 +01 +00 +00 +e9 +3b +52 +ff +ff +41 +80 +39 +00 +0f +8f +31 +52 +ff +ff +c7 +07 +20 +21 +00 +00 +c7 +47 +04 +01 +08 +00 +00 +e9 +e3 +02 +00 +00 +41 +80 +39 +00 +0f +8f +15 +52 +ff +ff +c7 +07 +20 +21 +00 +00 +c7 +47 +04 +01 +04 +00 +00 +e9 +c7 +02 +00 +00 +41 +80 +39 +00 +0f +8f +f9 +51 +ff +ff +c7 +07 +20 +21 +00 +00 +c7 +47 +04 +01 +0a +00 +00 +e9 +ab +02 +00 +00 +41 +80 +39 +00 +0f +8f +dd +51 +ff +ff +c7 +07 +20 +21 +00 +00 +c7 +47 +04 +01 +01 +00 +00 +e9 +8f +02 +00 +00 +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +97 +01 +00 +00 +80 +fa +44 +0f +8e +b2 +51 +ff +ff +e9 +2b +01 +00 +00 +80 +fa +65 +0f +84 +22 +01 +00 +00 +e9 +9f +51 +ff +ff +41 +8a +11 +80 +fa +45 +7f +16 +84 +d2 +0f +8e +87 +01 +00 +00 +80 +fa +44 +0f +8e +86 +51 +ff +ff +e9 +e3 +00 +00 +00 +80 +fa +65 +0f +84 +da +00 +00 +00 +e9 +73 +51 +ff +ff +41 +80 +39 +00 +0f +8f +69 +51 +ff +ff +c7 +07 +20 +21 +00 +00 +c7 +47 +04 +01 +05 +00 +00 +e9 +1b +02 +00 +00 +41 +80 +39 +00 +0f +8f +4d +51 +ff +ff +c7 +07 +20 +21 +00 +00 +c7 +47 +04 +01 +09 +00 +00 +e9 +ff +01 +00 +00 +41 +80 +39 +00 +0f +8f +31 +51 +ff +ff +c7 +07 +20 +21 +00 +00 +c7 +47 +04 +01 +0b +00 +00 +e9 +e3 +01 +00 +00 +41 +8a +11 +80 +fa +45 +7f +13 +84 +d2 +0f +8e +b3 +00 +00 +00 +80 +fa +44 +0f +8e +06 +51 +ff +ff +eb +4a +80 +fa +65 +74 +45 +e9 +fa +50 +ff +ff +41 +8a +11 +80 +fa +45 +7f +13 +84 +d2 +0f +8e +aa +00 +00 +00 +80 +fa +44 +0f +8e +e1 +50 +ff +ff +eb +09 +80 +fa +65 +0f +85 +d6 +50 +ff +ff +41 +80 +39 +00 +0f +8f +cc +50 +ff +ff +c7 +07 +20 +21 +00 +00 +c7 +47 +04 +01 +0f +00 +00 +e9 +7e +01 +00 +00 +41 +80 +39 +00 +0f +8f +b0 +50 +ff +ff +c7 +07 +20 +21 +00 +00 +c7 +47 +04 +01 +0c +00 +00 +e9 +62 +01 +00 +00 +41 +80 +39 +00 +0f +8f +94 +50 +ff +ff +c7 +07 +20 +21 +00 +00 +c7 +47 +04 +01 +07 +00 +00 +e9 +46 +01 +00 +00 +41 +80 +39 +00 +0f +8f +78 +50 +ff +ff +c7 +07 +20 +21 +00 +00 +c7 +47 +04 +01 +02 +00 +00 +e9 +2a +01 +00 +00 +41 +80 +39 +00 +0f +8f +5c +50 +ff +ff +c7 +07 +20 +21 +00 +00 +c7 +47 +04 +01 +0e +00 +00 +e9 +0e +01 +00 +00 +41 +80 +39 +00 +0f +8f +40 +50 +ff +ff +c7 +07 +20 +21 +00 +00 +c7 +47 +04 +01 +0d +00 +00 +e9 +f2 +00 +00 +00 +41 +80 +39 +00 +0f +8f +24 +50 +ff +ff +c7 +07 +20 +21 +00 +00 +c7 +47 +04 +01 +06 +00 +00 +e9 +d6 +00 +00 +00 +41 +80 +39 +00 +0f +8f +08 +50 +ff +ff +c7 +07 +20 +21 +00 +00 +c7 +47 +04 +01 +03 +00 +00 +e9 +ba +00 +00 +00 +41 +8a +11 +80 +fa +53 +74 +09 +80 +fa +73 +0f +85 +e8 +4f +ff +ff +41 +8a +11 +80 +fa +57 +7f +23 +80 +fa +44 +7f +0a +80 +fa +42 +74 +48 +80 +fa +43 +eb +21 +80 +fa +51 +0f +84 +95 +00 +00 +00 +80 +fa +56 +0f +8e +bf +4f +ff +ff +eb +4b +80 +fa +64 +7f +10 +80 +fa +62 +74 +25 +80 +fa +63 +0f +8e +aa +4f +ff +ff +eb +52 +80 +fa +71 +7f +0b +80 +fa +70 +0f +8e +9a +4f +ff +ff +eb +65 +80 +fa +77 +74 +21 +e9 +8e +4f +ff +ff +41 +80 +39 +00 +0f +8f +81 +4f +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +ae +00 +00 +e9 +49 +02 +00 +00 +41 +80 +39 +00 +0f +8f +65 +4f +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +af +10 +00 +e9 +2d +02 +00 +00 +41 +80 +39 +00 +0f +8f +49 +4f +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +af +20 +00 +c7 +47 +08 +04 +00 +00 +00 +e9 +11 +02 +00 +00 +41 +80 +39 +00 +0f +8f +26 +4f +ff +ff +80 +3d +00 +00 +00 +00 +40 +74 +18 +53 +68 +c0 +3a +00 +00 +56 +6a +00 +e8 +fc +ff +ff +ff +b8 +00 +00 +00 +00 +e9 +02 +02 +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +af +40 +00 +c7 +47 +08 +00 +08 +00 +01 +e9 +cd +01 +00 +00 +41 +80 +39 +00 +0f +8f +e2 +4e +ff +ff +c7 +07 +00 +10 +00 +00 +c7 +47 +04 +17 +18 +03 +00 +e9 +aa +01 +00 +00 +41 +8a +11 +80 +fa +46 +0f +84 +89 +00 +00 +00 +80 +fa +66 +0f +84 +80 +00 +00 +00 +e9 +b9 +4e +ff +ff +41 +8a +11 +80 +fa +43 +7f +0f +84 +d2 +7e +15 +80 +fa +42 +0f +8e +a1 +4e +ff +ff +eb +38 +80 +fa +63 +74 +33 +e9 +95 +4e +ff +ff +c7 +07 +80 +18 +00 +00 +c7 +47 +04 +08 +04 +00 +00 +e9 +5d +01 +00 +00 +41 +80 +39 +00 +0f +8f +79 +4e +ff +ff +c7 +07 +80 +18 +00 +00 +c7 +47 +04 +08 +07 +00 +00 +e9 +41 +01 +00 +00 +41 +80 +39 +00 +0f +8f +5d +4e +ff +ff +80 +3d +00 +00 +00 +00 +40 +74 +2c +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +d6 +00 +00 +c7 +47 +08 +00 +00 +20 +00 +e9 +1c +01 +00 +00 +41 +80 +39 +00 +0f +8f +31 +4e +ff +ff +80 +3d +00 +00 +00 +00 +40 +75 +2b +83 +ec +04 +53 +68 +e5 +3a +00 +00 +56 +e8 +fc +ff +ff +ff +c7 +07 +00 +00 +00 +00 +c7 +47 +04 +01 +00 +00 +00 +c7 +47 +08 +00 +00 +00 +02 +83 +c4 +10 +e9 +de +00 +00 +00 +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +9e +00 +00 +e9 +c5 +00 +00 +00 +41 +8a +11 +80 +fa +47 +7f +17 +80 +fa +41 +0f +84 +8b +00 +00 +00 +80 +fa +46 +0f +8e +d4 +4d +ff +ff +e9 +8f +00 +00 +00 +80 +fa +61 +7f +0b +80 +fa +60 +0f +8e +c1 +4d +ff +ff +eb +6d +80 +fa +67 +74 +7a +e9 +b5 +4d +ff +ff +41 +8a +11 +80 +fa +54 +7f +10 +80 +fa +50 +74 +3d +80 +fa +53 +0f +8e +9f +4d +ff +ff +eb +19 +80 +fa +70 +7f +0b +80 +fa +6f +0f +8e +8f +4d +ff +ff +eb +22 +80 +fa +74 +0f +85 +84 +4d +ff +ff +41 +80 +39 +00 +0f +8f +77 +4d +ff +ff +c7 +07 +60 +13 +00 +00 +c7 +47 +04 +04 +02 +00 +00 +eb +42 +41 +80 +39 +00 +0f +8f +5e +4d +ff +ff +c7 +07 +1c +00 +00 +00 +c7 +47 +04 +01 +90 +00 +00 +eb +29 +41 +8a +11 +80 +fa +52 +74 +2f +80 +fa +72 +74 +2a +e9 +40 +4d +ff +ff +41 +80 +39 +00 +0f +8f +33 +4d +ff +ff +c7 +07 +60 +13 +00 +00 +c7 +47 +04 +04 +03 +00 +00 +c7 +47 +08 +00 +00 +00 +00 +b8 +01 +00 +00 +00 +eb +15 +41 +80 +39 +00 +0f +8f +0e +4d +ff +ff +c7 +07 +01 +00 +00 +00 +b8 +05 +00 +00 +00 +8d +65 +f4 +5b +5e +5f +c9 +c3 +00 +00 +00 +2f +00 +00 +00 +01 +09 +0b +00 +39 +00 +00 +00 +01 +09 +0b +00 +3f +00 +00 +00 +01 +0d +0b +00 +62 +00 +00 +00 +02 +0e +0b +00 +6a +00 +00 +00 +02 +0f +0b +00 +81 +00 +00 +00 +02 +0f +0b +00 +8c +00 +00 +00 +02 +10 +0b +00 +95 +00 +00 +00 +02 +0f +0b +00 +a0 +00 +00 +00 +02 +10 +0b +00 +c1 +00 +00 +00 +01 +09 +0b +00 +c6 +00 +00 +00 +02 +11 +0b +00 +65 +01 +00 +00 +01 +09 +0b +00 +93 +01 +00 +00 +01 +12 +0b +00 +99 +01 +00 +00 +01 +0b +0b +00 +ad +02 +00 +00 +02 +13 +0b +00 +02 +03 +00 +00 +01 +12 +0b +00 +17 +03 +00 +00 +01 +12 +0b +00 +2c +03 +00 +00 +01 +0b +0b +00 +90 +03 +00 +00 +01 +09 +0b +00 +9a +06 +00 +00 +02 +14 +0b +00 +a2 +06 +00 +00 +02 +15 +0b +00 +ba +06 +00 +00 +01 +09 +0b +00 +c4 +06 +00 +00 +01 +09 +0b +00 +ca +06 +00 +00 +01 +0d +0b +00 +ed +06 +00 +00 +01 +09 +0b +00 +04 +07 +00 +00 +02 +16 +0b +00 +a0 +07 +00 +00 +01 +09 +0b +00 +aa +07 +00 +00 +01 +09 +0b +00 +b0 +07 +00 +00 +01 +0d +0b +00 +48 +08 +00 +00 +01 +09 +0b +00 +52 +08 +00 +00 +01 +09 +0b +00 +5a +08 +00 +00 +02 +17 +0b +00 +67 +08 +00 +00 +01 +09 +0b +00 +71 +08 +00 +00 +01 +09 +0b +00 +77 +08 +00 +00 +01 +0d +0b +00 +84 +08 +00 +00 +01 +09 +0b +00 +96 +08 +00 +00 +01 +09 +0b +00 +a0 +08 +00 +00 +01 +09 +0b +00 +a6 +08 +00 +00 +01 +0d +0b +00 +1c +09 +00 +00 +01 +12 +0b +00 +ba +09 +00 +00 +02 +18 +0b +00 +c2 +09 +00 +00 +02 +19 +0b +00 +cd +09 +00 +00 +02 +10 +0b +00 +ae +0a +00 +00 +02 +1a +0b +00 +be +0a +00 +00 +02 +1b +0b +00 +f3 +0a +00 +00 +01 +12 +0b +00 +00 +0b +00 +00 +02 +1c +0b +00 +0a +0b +00 +00 +01 +09 +0b +00 +14 +0b +00 +00 +01 +09 +0b +00 +1a +0b +00 +00 +01 +0d +0b +00 +3f +0b +00 +00 +02 +1d +0b +00 +5d +0b +00 +00 +01 +09 +0b +00 +65 +0b +00 +00 +02 +1e +0b +00 +8f +0b +00 +00 +01 +09 +0b +00 +9f +0b +00 +00 +01 +09 +0b +00 +cb +0b +00 +00 +01 +09 +0b +00 +df +0b +00 +00 +01 +09 +0b +00 +0f +0c +00 +00 +01 +12 +0b +00 +20 +0c +00 +00 +02 +1f +0b +00 +33 +0c +00 +00 +01 +09 +0b +00 +3b +0c +00 +00 +02 +17 +0b +00 +48 +0c +00 +00 +01 +09 +0b +00 +64 +0c +00 +00 +01 +12 +0b +00 +75 +0c +00 +00 +02 +1f +0b +00 +92 +0c +00 +00 +01 +09 +0b +00 +b8 +0c +00 +00 +01 +09 +0b +00 +d2 +0c +00 +00 +01 +12 +0b +00 +df +0c +00 +00 +02 +1c +0b +00 +f5 +0c +00 +00 +01 +12 +0b +00 +03 +0d +00 +00 +02 +1f +0b +00 +12 +0d +00 +00 +01 +09 +0b +00 +1a +0d +00 +00 +02 +17 +0b +00 +2f +0d +00 +00 +01 +20 +0b +00 +44 +0d +00 +00 +01 +09 +0b +00 +53 +0d +00 +00 +01 +09 +0b +00 +5d +0d +00 +00 +01 +09 +0b +00 +63 +0d +00 +00 +01 +0d +0b +00 +a3 +0d +00 +00 +01 +09 +0b +00 +ad +0d +00 +00 +01 +09 +0b +00 +b3 +0d +00 +00 +01 +0d +0b +00 +d8 +0d +00 +00 +02 +21 +0b +00 +00 +0e +00 +00 +01 +09 +0b +00 +21 +11 +00 +00 +01 +09 +0b +00 +29 +11 +00 +00 +02 +22 +0b +00 +61 +11 +00 +00 +01 +0b +0b +00 +a1 +11 +00 +00 +01 +0b +0b +00 +cb +11 +00 +00 +01 +0b +0b +00 +ed +11 +00 +00 +01 +09 +0b +00 +0d +13 +00 +00 +01 +0b +0b +00 +59 +13 +00 +00 +01 +0b +0b +00 +c6 +13 +00 +00 +01 +0b +0b +00 +df +13 +00 +00 +01 +0b +0b +00 +09 +14 +00 +00 +01 +0b +0b +00 +55 +14 +00 +00 +01 +0b +0b +00 +a1 +14 +00 +00 +01 +0b +0b +00 +e4 +14 +00 +00 +01 +0b +0b +00 +fd +14 +00 +00 +01 +0b +0b +00 +16 +15 +00 +00 +01 +0b +0b +00 +40 +15 +00 +00 +01 +0b +0b +00 +6a +15 +00 +00 +01 +0b +0b +00 +94 +15 +00 +00 +01 +0b +0b +00 +14 +16 +00 +00 +01 +0b +0b +00 +2d +16 +00 +00 +01 +0b +0b +00 +c2 +16 +00 +00 +01 +0b +0b +00 +db +16 +00 +00 +01 +0b +0b +00 +f4 +16 +00 +00 +01 +0b +0b +00 +cf +17 +00 +00 +01 +0b +0b +00 +ff +17 +00 +00 +01 +0b +0b +00 +b1 +18 +00 +00 +01 +0b +0b +00 +ca +18 +00 +00 +01 +0b +0b +00 +36 +19 +00 +00 +01 +0b +0b +00 +5b +19 +00 +00 +01 +0b +0b +00 +74 +19 +00 +00 +01 +0b +0b +00 +8d +19 +00 +00 +01 +0b +0b +00 +14 +1a +00 +00 +01 +0b +0b +00 +2d +1a +00 +00 +01 +0b +0b +00 +ca +1b +00 +00 +01 +0b +0b +00 +23 +1c +00 +00 +01 +0b +0b +00 +3c +1c +00 +00 +01 +0b +0b +00 +61 +1c +00 +00 +01 +0b +0b +00 +86 +1c +00 +00 +01 +0b +0b +00 +0f +1d +00 +00 +01 +0b +0b +00 +7f +1d +00 +00 +01 +0b +0b +00 +af +1d +00 +00 +01 +09 +0b +00 +08 +1e +00 +00 +01 +09 +0b +00 +21 +1e +00 +00 +01 +09 +0b +00 +e9 +1e +00 +00 +01 +09 +0b +00 +02 +1f +00 +00 +01 +09 +0b +00 +1b +1f +00 +00 +01 +09 +0b +00 +34 +1f +00 +00 +01 +09 +0b +00 +4d +1f +00 +00 +01 +09 +0b +00 +66 +1f +00 +00 +01 +09 +0b +00 +7f +1f +00 +00 +01 +09 +0b +00 +98 +1f +00 +00 +01 +09 +0b +00 +b1 +1f +00 +00 +01 +09 +0b +00 +e4 +1f +00 +00 +01 +09 +0b +00 +fd +1f +00 +00 +01 +09 +0b +00 +16 +20 +00 +00 +01 +09 +0b +00 +02 +22 +00 +00 +01 +09 +0b +00 +1e +22 +00 +00 +01 +09 +0b +00 +6c +22 +00 +00 +01 +09 +0b +00 +88 +22 +00 +00 +01 +09 +0b +00 +b5 +22 +00 +00 +01 +09 +0b +00 +d1 +22 +00 +00 +01 +09 +0b +00 +ed +22 +00 +00 +01 +09 +0b +00 +6d +23 +00 +00 +01 +09 +0b +00 +89 +23 +00 +00 +01 +09 +0b +00 +3f +24 +00 +00 +01 +09 +0b +00 +6c +24 +00 +00 +01 +09 +0b +00 +bb +24 +00 +00 +01 +09 +0b +00 +e8 +24 +00 +00 +01 +09 +0b +00 +47 +25 +00 +00 +01 +09 +0b +00 +63 +25 +00 +00 +01 +09 +0b +00 +90 +25 +00 +00 +01 +09 +0b +00 +de +26 +00 +00 +01 +09 +0b +00 +ee +26 +00 +00 +01 +09 +0b +00 +68 +27 +00 +00 +01 +09 +0b +00 +84 +27 +00 +00 +01 +09 +0b +00 +c2 +27 +00 +00 +01 +12 +0b +00 +cf +27 +00 +00 +01 +09 +0b +00 +eb +27 +00 +00 +01 +09 +0b +00 +07 +28 +00 +00 +01 +09 +0b +00 +7b +28 +00 +00 +01 +09 +0b +00 +97 +28 +00 +00 +01 +09 +0b +00 +b3 +28 +00 +00 +01 +09 +0b +00 +18 +29 +00 +00 +01 +09 +0b +00 +34 +29 +00 +00 +01 +09 +0b +00 +50 +29 +00 +00 +01 +09 +0b +00 +6c +29 +00 +00 +01 +09 +0b +00 +88 +29 +00 +00 +01 +09 +0b +00 +9d +29 +00 +00 +01 +09 +0b +00 +b9 +29 +00 +00 +01 +09 +0b +00 +f7 +29 +00 +00 +01 +09 +0b +00 +24 +2a +00 +00 +01 +09 +0b +00 +40 +2a +00 +00 +01 +09 +0b +00 +5c +2a +00 +00 +01 +09 +0b +00 +2e +2b +00 +00 +01 +09 +0b +00 +a5 +2b +00 +00 +01 +09 +0b +00 +c1 +2b +00 +00 +01 +09 +0b +00 +dd +2b +00 +00 +01 +09 +0b +00 +f9 +2b +00 +00 +01 +12 +0b +00 +06 +2c +00 +00 +01 +09 +0b +00 +22 +2c +00 +00 +01 +09 +0b +00 +d6 +2c +00 +00 +01 +09 +0b +00 +24 +2d +00 +00 +01 +09 +0b +00 +5f +2d +00 +00 +01 +09 +0b +00 +8f +2d +00 +00 +01 +12 +0b +00 +9c +2d +00 +00 +01 +09 +0b +00 +b8 +2d +00 +00 +01 +09 +0b +00 +d4 +2d +00 +00 +01 +09 +0b +00 +f0 +2d +00 +00 +01 +09 +0b +00 +0c +2e +00 +00 +01 +09 +0b +00 +39 +2e +00 +00 +01 +09 +0b +00 +66 +2e +00 +00 +01 +09 +0b +00 +93 +2e +00 +00 +01 +09 +0b +00 +78 +2f +00 +00 +01 +09 +0b +00 +b6 +30 +00 +00 +01 +09 +0b +00 +1a +31 +00 +00 +01 +09 +0b +00 +cc +32 +00 +00 +01 +09 +0b +00 +f9 +32 +00 +00 +01 +09 +0b +00 +15 +33 +00 +00 +01 +09 +0b +00 +31 +33 +00 +00 +01 +09 +0b +00 +9c +33 +00 +00 +01 +09 +0b +00 +c9 +33 +00 +00 +01 +09 +0b +00 +e5 +33 +00 +00 +01 +09 +0b +00 +01 +34 +00 +00 +01 +09 +0b +00 +5b +34 +00 +00 +01 +09 +0b +00 +bc +34 +00 +00 +01 +12 +0b +00 +c9 +34 +00 +00 +01 +09 +0b +00 +25 +35 +00 +00 +01 +09 +0b +00 +41 +35 +00 +00 +01 +09 +0b +00 +5d +35 +00 +00 +01 +12 +0b +00 +6a +35 +00 +00 +01 +09 +0b +00 +86 +35 +00 +00 +01 +09 +0b +00 +a2 +35 +00 +00 +01 +12 +0b +00 +af +35 +00 +00 +01 +09 +0b +00 +cb +35 +00 +00 +01 +12 +0b +00 +d8 +35 +00 +00 +01 +09 +0b +00 +c7 +36 +00 +00 +01 +09 +0b +00 +4a +37 +00 +00 +01 +09 +0b +00 +8a +37 +00 +00 +01 +09 +0b +00 +9f +37 +00 +00 +01 +09 +0b +00 +bb +37 +00 +00 +01 +09 +0b +00 +f9 +37 +00 +00 +01 +09 +0b +00 +1e +38 +00 +00 +01 +09 +0b +00 +2e +38 +00 +00 +01 +09 +0b +00 +4a +38 +00 +00 +01 +09 +0b +00 +66 +38 +00 +00 +01 +09 +0b +00 +82 +38 +00 +00 +01 +09 +0b +00 +34 +39 +00 +00 +01 +09 +0b +00 +50 +39 +00 +00 +01 +09 +0b +00 +6c +39 +00 +00 +01 +09 +0b +00 +9a +39 +00 +00 +01 +09 +0b +00 +b6 +39 +00 +00 +01 +09 +0b +00 +51 +3a +00 +00 +01 +09 +0b +00 +84 +3a +00 +00 +01 +09 +0b +00 +a0 +3a +00 +00 +01 +09 +0b +00 +bc +3a +00 +00 +01 +09 +0b +00 +d8 +3a +00 +00 +01 +09 +0b +00 +f4 +3a +00 +00 +01 +09 +0b +00 +4f +3b +00 +00 +01 +09 +0b +00 +82 +3b +00 +00 +01 +09 +0b +00 +9e +3b +00 +00 +01 +09 +0b +00 +ba +3b +00 +00 +01 +09 +0b +00 +6b +3c +00 +00 +01 +09 +0b +00 +c1 +3c +00 +00 +01 +09 +0b +00 +dd +3c +00 +00 +01 +09 +0b +00 +f9 +3c +00 +00 +01 +09 +0b +00 +15 +3d +00 +00 +01 +09 +0b +00 +42 +3d +00 +00 +01 +09 +0b +00 +9c +3d +00 +00 +01 +09 +0b +00 +b8 +3d +00 +00 +01 +09 +0b +00 +19 +3e +00 +00 +01 +12 +0b +00 +26 +3e +00 +00 +01 +09 +0b +00 +82 +3e +00 +00 +01 +09 +0b +00 +9e +3e +00 +00 +01 +09 +0b +00 +ba +3e +00 +00 +01 +09 +0b +00 +d6 +3e +00 +00 +01 +12 +0b +00 +e3 +3e +00 +00 +01 +09 +0b +00 +ff +3e +00 +00 +01 +12 +0b +00 +0c +3f +00 +00 +01 +09 +0b +00 +28 +3f +00 +00 +01 +12 +0b +00 +35 +3f +00 +00 +01 +09 +0b +00 +bb +40 +00 +00 +01 +09 +0b +00 +e8 +40 +00 +00 +01 +09 +0b +00 +15 +41 +00 +00 +01 +09 +0b +00 +53 +41 +00 +00 +01 +09 +0b +00 +b3 +41 +00 +00 +01 +09 +0b +00 +24 +42 +00 +00 +01 +09 +0b +00 +40 +42 +00 +00 +01 +09 +0b +00 +2b +43 +00 +00 +01 +09 +0b +00 +47 +43 +00 +00 +01 +09 +0b +00 +ae +43 +00 +00 +01 +09 +0b +00 +ca +43 +00 +00 +01 +09 +0b +00 +29 +44 +00 +00 +01 +09 +0b +00 +45 +44 +00 +00 +01 +09 +0b +00 +61 +44 +00 +00 +01 +09 +0b +00 +20 +45 +00 +00 +01 +09 +0b +00 +3c +45 +00 +00 +01 +09 +0b +00 +58 +45 +00 +00 +01 +09 +0b +00 +96 +45 +00 +00 +01 +09 +0b +00 +e5 +45 +00 +00 +01 +09 +0b +00 +5e +46 +00 +00 +01 +09 +0b +00 +7a +46 +00 +00 +01 +09 +0b +00 +b8 +46 +00 +00 +01 +09 +0b +00 +44 +48 +00 +00 +01 +09 +0b +00 +60 +48 +00 +00 +01 +09 +0b +00 +fc +48 +00 +00 +01 +09 +0b +00 +24 +49 +00 +00 +01 +09 +0b +00 +57 +49 +00 +00 +01 +09 +0b +00 +9f +49 +00 +00 +01 +09 +0b +00 +bb +49 +00 +00 +01 +09 +0b +00 +0a +4a +00 +00 +01 +09 +0b +00 +48 +4a +00 +00 +01 +09 +0b +00 +99 +4a +00 +00 +01 +09 +0b +00 +b5 +4a +00 +00 +01 +09 +0b +00 +d1 +4a +00 +00 +01 +09 +0b +00 +74 +4b +00 +00 +01 +09 +0b +00 +90 +4b +00 +00 +01 +09 +0b +00 +ac +4b +00 +00 +01 +09 +0b +00 +eb +4b +00 +00 +01 +09 +0b +00 +07 +4c +00 +00 +01 +09 +0b +00 +55 +4c +00 +00 +01 +09 +0b +00 +71 +4c +00 +00 +01 +09 +0b +00 +c7 +4c +00 +00 +01 +09 +0b +00 +27 +4d +00 +00 +01 +09 +0b +00 +5e +4e +00 +00 +01 +09 +0b +00 +7a +4e +00 +00 +01 +09 +0b +00 +b8 +4e +00 +00 +01 +09 +0b +00 +d4 +4e +00 +00 +01 +09 +0b +00 +07 +4f +00 +00 +01 +09 +0b +00 +23 +4f +00 +00 +01 +09 +0b +00 +48 +4f +00 +00 +01 +09 +0b +00 +58 +4f +00 +00 +01 +09 +0b +00 +74 +4f +00 +00 +01 +09 +0b +00 +90 +4f +00 +00 +01 +09 +0b +00 +ac +4f +00 +00 +01 +09 +0b +00 +5e +50 +00 +00 +01 +09 +0b +00 +7a +50 +00 +00 +01 +09 +0b +00 +96 +50 +00 +00 +01 +09 +0b +00 +c4 +50 +00 +00 +01 +09 +0b +00 +e0 +50 +00 +00 +01 +09 +0b +00 +f2 +51 +00 +00 +01 +09 +0b +00 +0e +52 +00 +00 +01 +09 +0b +00 +2a +52 +00 +00 +01 +09 +0b +00 +87 +52 +00 +00 +01 +09 +0b +00 +a3 +52 +00 +00 +01 +09 +0b +00 +bf +52 +00 +00 +01 +09 +0b +00 +20 +53 +00 +00 +01 +09 +0b +00 +91 +53 +00 +00 +01 +09 +0b +00 +ad +53 +00 +00 +01 +09 +0b +00 +da +53 +00 +00 +01 +09 +0b +00 +15 +55 +00 +00 +01 +09 +0b +00 +46 +55 +00 +00 +01 +09 +0b +00 +62 +55 +00 +00 +01 +09 +0b +00 +7e +55 +00 +00 +01 +09 +0b +00 +9a +55 +00 +00 +01 +09 +0b +00 +b6 +55 +00 +00 +01 +09 +0b +00 +f4 +55 +00 +00 +01 +09 +0b +00 +10 +56 +00 +00 +01 +12 +0b +00 +54 +56 +00 +00 +01 +12 +0b +00 +61 +56 +00 +00 +01 +09 +0b +00 +9c +57 +00 +00 +01 +12 +0b +00 +a5 +57 +00 +00 +01 +09 +0b +00 +ad +57 +00 +00 +02 +22 +0b +00 +17 +58 +00 +00 +01 +09 +0b +00 +44 +58 +00 +00 +01 +09 +0b +00 +88 +59 +00 +00 +01 +09 +0b +00 +d5 +59 +00 +00 +01 +09 +0b +00 +f1 +59 +00 +00 +01 +09 +0b +00 +27 +5a +00 +00 +01 +12 +0b +00 +72 +5a +00 +00 +01 +12 +0b +00 +ba +5a +00 +00 +01 +09 +0b +00 +f2 +5a +00 +00 +01 +09 +0b +00 +1f +5b +00 +00 +01 +09 +0b +00 +53 +5b +00 +00 +01 +09 +0b +00 +5f +5c +00 +00 +01 +09 +0b +00 +e8 +5c +00 +00 +01 +09 +0b +00 +04 +5d +00 +00 +01 +09 +0b +00 +20 +5d +00 +00 +01 +09 +0b +00 +3c +5d +00 +00 +01 +09 +0b +00 +8f +5e +00 +00 +01 +09 +0b +00 +e3 +5e +00 +00 +01 +09 +0b +00 +be +5f +00 +00 +01 +09 +0b +00 +ea +5f +00 +00 +01 +09 +0b +00 +1d +60 +00 +00 +01 +09 +0b +00 +6b +60 +00 +00 +01 +09 +0b +00 +87 +60 +00 +00 +01 +09 +0b +00 +c1 +60 +00 +00 +01 +09 +0b +00 +dd +60 +00 +00 +01 +09 +0b +00 +f9 +60 +00 +00 +01 +09 +0b +00 +15 +61 +00 +00 +01 +09 +0b +00 +31 +61 +00 +00 +01 +12 +0b +00 +3e +61 +00 +00 +01 +09 +0b +00 +5a +61 +00 +00 +01 +09 +0b +00 +76 +61 +00 +00 +01 +12 +0b +00 +83 +61 +00 +00 +01 +09 +0b +00 +c1 +61 +00 +00 +01 +09 +0b +00 +4d +62 +00 +00 +01 +09 +0b +00 +a2 +62 +00 +00 +01 +09 +0b +00 +b7 +62 +00 +00 +01 +09 +0b +00 +cc +62 +00 +00 +01 +09 +0b +00 +e8 +62 +00 +00 +01 +09 +0b +00 +58 +63 +00 +00 +01 +09 +0b +00 +6d +63 +00 +00 +01 +09 +0b +00 +c6 +63 +00 +00 +01 +09 +0b +00 +e2 +63 +00 +00 +01 +09 +0b +00 +0f +64 +00 +00 +01 +09 +0b +00 +6f +64 +00 +00 +01 +09 +0b +00 +8b +64 +00 +00 +01 +09 +0b +00 +b8 +64 +00 +00 +01 +09 +0b +00 +27 +65 +00 +00 +01 +09 +0b +00 +43 +65 +00 +00 +01 +09 +0b +00 +5f +65 +00 +00 +01 +09 +0b +00 +a6 +65 +00 +00 +01 +09 +0b +00 +c2 +65 +00 +00 +01 +09 +0b +00 +96 +66 +00 +00 +01 +09 +0b +00 +b2 +66 +00 +00 +01 +09 +0b +00 +ce +66 +00 +00 +01 +09 +0b +00 +ea +66 +00 +00 +01 +09 +0b +00 +39 +67 +00 +00 +01 +09 +0b +00 +0e +68 +00 +00 +01 +09 +0b +00 +2a +68 +00 +00 +01 +09 +0b +00 +46 +68 +00 +00 +01 +09 +0b +00 +62 +68 +00 +00 +01 +09 +0b +00 +f5 +68 +00 +00 +01 +09 +0b +00 +29 +69 +00 +00 +01 +09 +0b +00 +39 +6a +00 +00 +01 +12 +0b +00 +42 +6a +00 +00 +01 +09 +0b +00 +4a +6a +00 +00 +02 +22 +0b +00 +98 +6a +00 +00 +01 +12 +0b +00 +f1 +6a +00 +00 +01 +09 +0b +00 +7a +6b +00 +00 +01 +09 +0b +00 +96 +6b +00 +00 +01 +09 +0b +00 +b2 +6b +00 +00 +01 +09 +0b +00 +ce +6b +00 +00 +01 +09 +0b +00 +ea +6b +00 +00 +01 +09 +0b +00 +06 +6c +00 +00 +01 +12 +0b +00 +13 +6c +00 +00 +01 +09 +0b +00 +2f +6c +00 +00 +01 +12 +0b +00 +3c +6c +00 +00 +01 +09 +0b +00 +b9 +6e +00 +00 +01 +09 +0b +00 +d5 +6e +00 +00 +01 +09 +0b +00 +f5 +70 +00 +00 +01 +09 +0b +00 +33 +71 +00 +00 +01 +09 +0b +00 +c1 +71 +00 +00 +01 +09 +0b +00 +dd +71 +00 +00 +01 +09 +0b +00 +4e +72 +00 +00 +01 +09 +0b +00 +6a +72 +00 +00 +01 +09 +0b +00 +f7 +72 +00 +00 +01 +09 +0b +00 +13 +73 +00 +00 +01 +09 +0b +00 +72 +73 +00 +00 +01 +09 +0b +00 +8e +73 +00 +00 +01 +09 +0b +00 +ed +73 +00 +00 +01 +09 +0b +00 +09 +74 +00 +00 +01 +09 +0b +00 +c9 +74 +00 +00 +01 +09 +0b +00 +e5 +74 +00 +00 +01 +09 +0b +00 +01 +75 +00 +00 +01 +09 +0b +00 +91 +75 +00 +00 +01 +09 +0b +00 +ad +75 +00 +00 +01 +09 +0b +00 +c9 +75 +00 +00 +01 +09 +0b +00 +28 +76 +00 +00 +01 +09 +0b +00 +44 +76 +00 +00 +01 +09 +0b +00 +af +76 +00 +00 +01 +09 +0b +00 +cb +76 +00 +00 +01 +09 +0b +00 +e7 +76 +00 +00 +01 +12 +0b +00 +37 +77 +00 +00 +01 +09 +0b +00 +a7 +77 +00 +00 +01 +09 +0b +00 +c3 +77 +00 +00 +01 +09 +0b +00 +df +77 +00 +00 +01 +09 +0b +00 +d7 +78 +00 +00 +01 +09 +0b +00 +0d +79 +00 +00 +01 +09 +0b +00 +1d +79 +00 +00 +01 +09 +0b +00 +42 +79 +00 +00 +01 +09 +0b +00 +aa +79 +00 +00 +01 +09 +0b +00 +c6 +79 +00 +00 +01 +09 +0b +00 +92 +7a +00 +00 +01 +09 +0b +00 +d8 +7a +00 +00 +01 +09 +0b +00 +1c +7b +00 +00 +01 +09 +0b +00 +56 +7b +00 +00 +01 +09 +0b +00 +90 +7b +00 +00 +01 +09 +0b +00 +ac +7b +00 +00 +01 +09 +0b +00 +c8 +7b +00 +00 +01 +09 +0b +00 +e4 +7b +00 +00 +01 +09 +0b +00 +00 +7c +00 +00 +01 +09 +0b +00 +1c +7c +00 +00 +01 +09 +0b +00 +38 +7c +00 +00 +01 +09 +0b +00 +54 +7c +00 +00 +01 +09 +0b +00 +70 +7c +00 +00 +01 +09 +0b +00 +89 +7d +00 +00 +01 +09 +0b +00 +fd +7d +00 +00 +01 +09 +0b +00 +3e +7e +00 +00 +01 +09 +0b +00 +66 +7e +00 +00 +01 +09 +0b +00 +5d +7f +00 +00 +01 +09 +0b +00 +79 +7f +00 +00 +01 +09 +0b +00 +95 +7f +00 +00 +01 +09 +0b +00 +b1 +7f +00 +00 +01 +09 +0b +00 +c6 +7f +00 +00 +01 +09 +0b +00 +e2 +7f +00 +00 +01 +09 +0b +00 +fe +7f +00 +00 +01 +09 +0b +00 +13 +80 +00 +00 +01 +12 +0b +00 +20 +80 +00 +00 +01 +09 +0b +00 +3c +80 +00 +00 +01 +09 +0b +00 +58 +80 +00 +00 +01 +09 +0b +00 +74 +80 +00 +00 +01 +09 +0b +00 +42 +81 +00 +00 +01 +09 +0b +00 +5e +81 +00 +00 +01 +09 +0b +00 +7a +81 +00 +00 +01 +09 +0b +00 +96 +81 +00 +00 +01 +09 +0b +00 +df +82 +00 +00 +01 +09 +0b +00 +fb +82 +00 +00 +01 +09 +0b +00 +17 +83 +00 +00 +01 +09 +0b +00 +33 +83 +00 +00 +01 +09 +0b +00 +be +83 +00 +00 +01 +09 +0b +00 +da +83 +00 +00 +01 +09 +0b +00 +f6 +83 +00 +00 +01 +09 +0b +00 +12 +84 +00 +00 +01 +09 +0b +00 +cf +84 +00 +00 +01 +09 +0b +00 +eb +84 +00 +00 +01 +09 +0b +00 +07 +85 +00 +00 +01 +09 +0b +00 +23 +85 +00 +00 +01 +09 +0b +00 +1e +86 +00 +00 +01 +09 +0b +00 +3a +86 +00 +00 +01 +09 +0b +00 +56 +86 +00 +00 +01 +09 +0b +00 +72 +86 +00 +00 +01 +09 +0b +00 +fb +86 +00 +00 +01 +09 +0b +00 +17 +87 +00 +00 +01 +09 +0b +00 +33 +87 +00 +00 +01 +09 +0b +00 +48 +87 +00 +00 +01 +09 +0b +00 +03 +88 +00 +00 +01 +09 +0b +00 +1f +88 +00 +00 +01 +09 +0b +00 +3b +88 +00 +00 +01 +09 +0b +00 +57 +88 +00 +00 +01 +09 +0b +00 +73 +88 +00 +00 +01 +09 +0b +00 +8f +88 +00 +00 +01 +09 +0b +00 +ab +88 +00 +00 +01 +09 +0b +00 +1d +89 +00 +00 +01 +09 +0b +00 +39 +89 +00 +00 +01 +09 +0b +00 +6c +89 +00 +00 +01 +09 +0b +00 +88 +89 +00 +00 +01 +12 +0b +00 +95 +89 +00 +00 +01 +09 +0b +00 +b1 +89 +00 +00 +01 +12 +0b +00 +be +89 +00 +00 +01 +09 +0b +00 +da +89 +00 +00 +01 +09 +0b +00 +07 +8a +00 +00 +01 +09 +0b +00 +8c +8a +00 +00 +01 +12 +0b +00 +81 +8b +00 +00 +01 +09 +0b +00 +34 +8c +00 +00 +01 +09 +0b +00 +44 +8c +00 +00 +01 +12 +0b +00 +66 +8c +00 +00 +01 +12 +0b +00 +88 +8c +00 +00 +01 +09 +0b +00 +fa +8c +00 +00 +01 +09 +0b +00 +27 +8d +00 +00 +01 +09 +0b +00 +43 +8d +00 +00 +01 +09 +0b +00 +be +8d +00 +00 +01 +09 +0b +00 +da +8d +00 +00 +01 +09 +0b +00 +f6 +8d +00 +00 +01 +09 +0b +00 +0b +8e +00 +00 +01 +09 +0b +00 +20 +8e +00 +00 +01 +12 +0b +00 +dd +8e +00 +00 +01 +09 +0b +00 +f9 +8e +00 +00 +01 +09 +0b +00 +79 +8f +00 +00 +01 +12 +0b +00 +9b +8f +00 +00 +01 +12 +0b +00 +25 +90 +00 +00 +01 +09 +0b +00 +59 +90 +00 +00 +01 +09 +0b +00 +86 +90 +00 +00 +01 +09 +0b +00 +ba +90 +00 +00 +01 +09 +0b +00 +dd +90 +00 +00 +01 +12 +0b +00 +ff +90 +00 +00 +01 +09 +0b +00 +14 +91 +00 +00 +01 +09 +0b +00 +85 +91 +00 +00 +01 +09 +0b +00 +a1 +91 +00 +00 +01 +09 +0b +00 +bd +91 +00 +00 +01 +12 +0b +00 +df +91 +00 +00 +01 +12 +0b +00 +01 +92 +00 +00 +01 +12 +0b +00 +23 +92 +00 +00 +01 +12 +0b +00 +46 +92 +00 +00 +01 +12 +0b +00 +69 +92 +00 +00 +01 +12 +0b +00 +cf +92 +00 +00 +01 +12 +0b +00 +f5 +92 +00 +00 +01 +12 +0b +00 +1b +93 +00 +00 +01 +12 +0b +00 +41 +93 +00 +00 +01 +12 +0b +00 +a6 +95 +00 +00 +01 +09 +0b +00 +c2 +95 +00 +00 +01 +09 +0b +00 +de +95 +00 +00 +01 +09 +0b +00 +93 +96 +00 +00 +01 +09 +0b +00 +c7 +96 +00 +00 +01 +09 +0b +00 +44 +97 +00 +00 +01 +09 +0b +00 +60 +97 +00 +00 +01 +09 +0b +00 +7c +97 +00 +00 +01 +09 +0b +00 +98 +97 +00 +00 +01 +12 +0b +00 +a5 +97 +00 +00 +01 +09 +0b +00 +f6 +97 +00 +00 +01 +09 +0b +00 +12 +98 +00 +00 +01 +09 +0b +00 +59 +98 +00 +00 +01 +09 +0b +00 +a2 +98 +00 +00 +01 +09 +0b +00 +cf +98 +00 +00 +01 +09 +0b +00 +03 +99 +00 +00 +01 +09 +0b +00 +1f +99 +00 +00 +01 +09 +0b +00 +4c +99 +00 +00 +01 +09 +0b +00 +68 +99 +00 +00 +01 +09 +0b +00 +b7 +99 +00 +00 +01 +09 +0b +00 +ea +99 +00 +00 +01 +09 +0b +00 +06 +9a +00 +00 +01 +12 +0b +00 +13 +9a +00 +00 +01 +09 +0b +00 +40 +9a +00 +00 +01 +09 +0b +00 +63 +9a +00 +00 +01 +12 +0b +00 +70 +9a +00 +00 +01 +09 +0b +00 +d0 +9a +00 +00 +01 +09 +0b +00 +fe +9a +00 +00 +01 +09 +0b +00 +1a +9b +00 +00 +01 +12 +0b +00 +27 +9b +00 +00 +01 +09 +0b +00 +98 +9c +00 +00 +01 +12 +0b +00 +a5 +9c +00 +00 +01 +09 +0b +00 +f8 +9c +00 +00 +01 +09 +0b +00 +57 +9d +00 +00 +01 +09 +0b +00 +73 +9d +00 +00 +01 +09 +0b +00 +c1 +9d +00 +00 +01 +09 +0b +00 +dd +9d +00 +00 +01 +09 +0b +00 +33 +9e +00 +00 +01 +09 +0b +00 +4f +9e +00 +00 +01 +09 +0b +00 +d8 +9e +00 +00 +01 +09 +0b +00 +f4 +9e +00 +00 +01 +09 +0b +00 +10 +9f +00 +00 +01 +09 +0b +00 +2c +9f +00 +00 +01 +09 +0b +00 +48 +9f +00 +00 +01 +12 +0b +00 +55 +9f +00 +00 +01 +09 +0b +00 +71 +9f +00 +00 +01 +12 +0b +00 +7e +9f +00 +00 +01 +09 +0b +00 +9a +9f +00 +00 +01 +12 +0b +00 +a7 +9f +00 +00 +01 +09 +0b +00 +c3 +9f +00 +00 +01 +12 +0b +00 +d0 +9f +00 +00 +01 +09 +0b +00 +ec +9f +00 +00 +01 +12 +0b +00 +23 +a0 +00 +00 +01 +12 +0b +00 +2e +a0 +00 +00 +01 +09 +0b +00 +34 +a0 +00 +00 +02 +17 +0b +00 +a5 +a0 +00 +00 +01 +09 +0b +00 +e9 +a0 +00 +00 +01 +09 +0b +00 +46 +a1 +00 +00 +01 +09 +0b +00 +62 +a1 +00 +00 +01 +09 +0b +00 +7e +a1 +00 +00 +01 +09 +0b +00 +cc +a1 +00 +00 +01 +09 +0b +00 +e8 +a1 +00 +00 +01 +09 +0b +00 +04 +a2 +00 +00 +01 +12 +0b +00 +0d +a2 +00 +00 +01 +09 +0b +00 +d3 +a2 +00 +00 +01 +09 +0b +00 +87 +a4 +00 +00 +01 +09 +0b +00 +c9 +a7 +00 +00 +01 +09 +0b +00 +f1 +a7 +00 +00 +01 +09 +0b +00 +b1 +a8 +00 +00 +01 +09 +0b +00 +ef +a8 +00 +00 +01 +09 +0b +00 +3e +a9 +00 +00 +01 +09 +0b +00 +5a +a9 +00 +00 +01 +09 +0b +00 +76 +a9 +00 +00 +01 +09 +0b +00 +b4 +a9 +00 +00 +01 +09 +0b +00 +29 +aa +00 +00 +01 +09 +0b +00 +5c +aa +00 +00 +01 +09 +0b +00 +8f +aa +00 +00 +01 +09 +0b +00 +ab +aa +00 +00 +01 +09 +0b +00 +c7 +aa +00 +00 +01 +09 +0b +00 +f4 +aa +00 +00 +01 +09 +0b +00 +8c +ab +00 +00 +01 +09 +0b +00 +55 +ac +00 +00 +01 +09 +0b +00 +89 +ac +00 +00 +01 +09 +0b +00 +c7 +ac +00 +00 +01 +09 +0b +00 +fa +ac +00 +00 +01 +09 +0b +00 +38 +ad +00 +00 +01 +09 +0b +00 +65 +ad +00 +00 +01 +09 +0b +00 +b8 +ad +00 +00 +01 +09 +0b +00 +d4 +ad +00 +00 +01 +09 +0b +00 +07 +ae +00 +00 +01 +09 +0b +00 +23 +ae +00 +00 +01 +09 +0b +00 +6b +ae +00 +00 +01 +09 +0b +00 +98 +ae +00 +00 +01 +09 +0b +00 +be +ae +00 +00 +01 +09 +0b +00 +da +ae +00 +00 +01 +09 +0b +00 +3b +af +00 +00 +01 +09 +0b +00 +8a +af +00 +00 +01 +09 +0b +00 +fb +af +00 +00 +01 +09 +0b +00 +17 +b0 +00 +00 +01 +09 +0b +00 +55 +b0 +00 +00 +01 +09 +0b +00 +82 +b0 +00 +00 +01 +09 +0b +00 +1b +b1 +00 +00 +01 +09 +0b +00 +59 +b1 +00 +00 +01 +09 +0b +00 +16 +b2 +00 +00 +01 +09 +0b +00 +32 +b2 +00 +00 +01 +09 +0b +00 +4e +b2 +00 +00 +01 +09 +0b +00 +7b +b2 +00 +00 +01 +09 +0b +00 +b9 +b2 +00 +00 +01 +09 +0b +00 +fd +b2 +00 +00 +01 +09 +0b +00 +19 +b3 +00 +00 +01 +09 +0b +00 +d9 +b3 +00 +00 +01 +09 +0b +00 +f5 +b3 +00 +00 +01 +09 +0b +00 +aa +b4 +00 +00 +01 +09 +0b +00 +c6 +b4 +00 +00 +01 +09 +0b +00 +30 +b5 +00 +00 +01 +09 +0b +00 +4c +b5 +00 +00 +01 +09 +0b +00 +68 +b5 +00 +00 +01 +09 +0b +00 +84 +b5 +00 +00 +01 +09 +0b +00 +b1 +b5 +00 +00 +01 +09 +0b +00 +cd +b5 +00 +00 +01 +09 +0b +00 +ff +b6 +00 +00 +01 +09 +0b +00 +3d +b7 +00 +00 +01 +09 +0b +00 +81 +b7 +00 +00 +01 +09 +0b +00 +9d +b7 +00 +00 +01 +09 +0b +00 +ca +b7 +00 +00 +01 +09 +0b +00 +f7 +b7 +00 +00 +01 +09 +0b +00 +3b +b8 +00 +00 +01 +09 +0b +00 +57 +b8 +00 +00 +01 +09 +0b +00 +8a +b8 +00 +00 +01 +09 +0b +00 +ce +b8 +00 +00 +01 +09 +0b +00 +ea +b8 +00 +00 +01 +09 +0b +00 +06 +b9 +00 +00 +01 +09 +0b +00 +22 +b9 +00 +00 +01 +09 +0b +00 +77 +b9 +00 +00 +01 +09 +0b +00 +93 +b9 +00 +00 +01 +09 +0b +00 +d8 +b9 +00 +00 +01 +09 +0b +00 +51 +ba +00 +00 +01 +09 +0b +00 +a4 +ba +00 +00 +01 +09 +0b +00 +c0 +ba +00 +00 +01 +09 +0b +00 +f3 +ba +00 +00 +01 +09 +0b +00 +0f +bb +00 +00 +01 +09 +0b +00 +40 +bc +00 +00 +01 +09 +0b +00 +5c +bc +00 +00 +01 +09 +0b +00 +aa +bc +00 +00 +01 +09 +0b +00 +dd +bc +00 +00 +01 +09 +0b +00 +f9 +bc +00 +00 +01 +09 +0b +00 +15 +bd +00 +00 +01 +09 +0b +00 +31 +bd +00 +00 +01 +09 +0b +00 +5e +bd +00 +00 +01 +09 +0b +00 +7a +bd +00 +00 +01 +09 +0b +00 +d1 +bd +00 +00 +01 +09 +0b +00 +ed +bd +00 +00 +01 +09 +0b +00 +27 +be +00 +00 +01 +09 +0b +00 +5a +be +00 +00 +01 +09 +0b +00 +73 +be +00 +00 +01 +09 +0b +00 +96 +be +00 +00 +01 +09 +0b +00 +e6 +be +00 +00 +01 +09 +0b +00 +02 +bf +00 +00 +01 +09 +0b +00 +56 +bf +00 +00 +01 +09 +0b +00 +86 +bf +00 +00 +01 +09 +0b +00 +9f +bf +00 +00 +01 +09 +0b +00 +d5 +bf +00 +00 +01 +09 +0b +00 +d6 +c0 +00 +00 +01 +09 +0b +00 +e7 +c1 +00 +00 +01 +12 +0b +00 +f0 +c1 +00 +00 +01 +09 +0b +00 +f8 +c1 +00 +00 +02 +22 +0b +00 +24 +c2 +00 +00 +01 +09 +0b +00 +7b +c3 +00 +00 +01 +09 +0b +00 +d2 +c3 +00 +00 +01 +12 +0b +00 +df +c3 +00 +00 +01 +09 +0b +00 +24 +c4 +00 +00 +01 +12 +0b +00 +31 +c4 +00 +00 +01 +09 +0b +00 +76 +c4 +00 +00 +01 +09 +0b +00 +cc +c4 +00 +00 +01 +12 +0b +00 +d9 +c4 +00 +00 +01 +09 +0b +00 +2a +c5 +00 +00 +01 +09 +0b +00 +54 +c5 +00 +00 +01 +09 +0b +00 +6d +c5 +00 +00 +01 +09 +0b +00 +c7 +c5 +00 +00 +01 +09 +0b +00 +50 +c6 +00 +00 +01 +09 +0b +00 +6c +c6 +00 +00 +01 +09 +0b +00 +88 +c6 +00 +00 +01 +09 +0b +00 +a4 +c6 +00 +00 +01 +09 +0b +00 +db +c6 +00 +00 +01 +09 +0b +00 +f7 +c6 +00 +00 +01 +09 +0b +00 +13 +c7 +00 +00 +01 +09 +0b +00 +49 +c7 +00 +00 +01 +09 +0b +00 +b0 +c7 +00 +00 +01 +09 +0b +00 +26 +c8 +00 +00 +01 +09 +0b +00 +42 +c8 +00 +00 +01 +09 +0b +00 +5e +c8 +00 +00 +01 +09 +0b +00 +7a +c8 +00 +00 +01 +12 +0b +00 +87 +c8 +00 +00 +01 +09 +0b +00 +55 +c9 +00 +00 +01 +09 +0b +00 +71 +c9 +00 +00 +01 +09 +0b +00 +8d +c9 +00 +00 +01 +09 +0b +00 +a9 +c9 +00 +00 +01 +09 +0b +00 +c5 +c9 +00 +00 +01 +12 +0b +00 +18 +ca +00 +00 +01 +09 +0b +00 +63 +ca +00 +00 +01 +09 +0b +00 +a8 +ca +00 +00 +01 +09 +0b +00 +cb +ca +00 +00 +01 +09 +0b +00 +f5 +ca +00 +00 +01 +09 +0b +00 +18 +cb +00 +00 +01 +12 +0b +00 +21 +cb +00 +00 +01 +09 +0b +00 +57 +cb +00 +00 +01 +09 +0b +00 +d7 +cb +00 +00 +01 +09 +0b +00 +47 +cc +00 +00 +01 +09 +0b +00 +6a +cc +00 +00 +01 +09 +0b +00 +8d +cc +00 +00 +01 +09 +0b +00 +a9 +cc +00 +00 +01 +09 +0b +00 +fc +cc +00 +00 +01 +09 +0b +00 +52 +cd +00 +00 +01 +09 +0b +00 +7e +cd +00 +00 +01 +09 +0b +00 +47 +ce +00 +00 +01 +09 +0b +00 +57 +ce +00 +00 +01 +09 +0b +00 +b5 +ce +00 +00 +01 +09 +0b +00 +d1 +ce +00 +00 +01 +09 +0b +00 +ed +ce +00 +00 +01 +09 +0b +00 +09 +cf +00 +00 +01 +09 +0b +00 +7d +cf +00 +00 +01 +09 +0b +00 +99 +cf +00 +00 +01 +09 +0b +00 +b5 +cf +00 +00 +01 +09 +0b +00 +1a +d0 +00 +00 +01 +09 +0b +00 +36 +d0 +00 +00 +01 +09 +0b +00 +52 +d0 +00 +00 +01 +09 +0b +00 +6e +d0 +00 +00 +01 +09 +0b +00 +8a +d0 +00 +00 +01 +09 +0b +00 +a6 +d0 +00 +00 +01 +09 +0b +00 +c2 +d0 +00 +00 +01 +09 +0b +00 +de +d0 +00 +00 +01 +09 +0b +00 +65 +d1 +00 +00 +01 +09 +0b +00 +81 +d1 +00 +00 +01 +09 +0b +00 +9d +d1 +00 +00 +01 +09 +0b +00 +c0 +d1 +00 +00 +01 +12 +0b +00 +c9 +d1 +00 +00 +01 +09 +0b +00 +d1 +d1 +00 +00 +02 +22 +0b +00 +e1 +d1 +00 +00 +01 +09 +0b +00 +04 +d2 +00 +00 +01 +09 +0b +00 +51 +d2 +00 +00 +01 +09 +0b +00 +6d +d2 +00 +00 +01 +09 +0b +00 +89 +d2 +00 +00 +01 +12 +0b +00 +92 +d2 +00 +00 +01 +09 +0b +00 +b5 +d2 +00 +00 +01 +12 +0b +00 +c1 +d2 +00 +00 +01 +09 +0b +00 +c7 +d2 +00 +00 +02 +17 +0b +00 +cd +d2 +00 +00 +01 +09 +0b +00 +e9 +d2 +00 +00 +01 +09 +0b +00 +6f +d3 +00 +00 +01 +09 +0b +00 +88 +d3 +00 +00 +01 +09 +0b +00 +b3 +d3 +00 +00 +01 +09 +0b +00 +ff +ff +ff +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +15 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +00 +01 +00 +00 +00 +00 +01 +00 +02 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +02 +00 +00 +00 +00 +01 +00 +02 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +a0 +00 +00 +00 +02 +00 +2b +00 +00 +00 +35 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +a1 +00 +00 +00 +02 +00 +4b +00 +00 +00 +55 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +a1 +00 +00 +00 +02 +00 +6b +00 +00 +00 +75 +11 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +a1 +00 +00 +00 +02 +00 +8b +00 +00 +00 +95 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +a2 +00 +00 +00 +02 +00 +35 +11 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +a3 +00 +00 +00 +02 +00 +55 +11 +00 +00 +4b +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +a3 +00 +00 +00 +02 +00 +75 +11 +00 +00 +6b +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +a3 +00 +00 +00 +02 +00 +95 +11 +00 +00 +8b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +88 +00 +00 +00 +02 +00 +23 +11 +00 +00 +21 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +89 +00 +00 +00 +02 +00 +43 +11 +00 +00 +41 +40 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +89 +00 +00 +00 +02 +00 +63 +11 +00 +00 +61 +40 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +89 +00 +00 +00 +02 +00 +83 +11 +00 +00 +81 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +8a +00 +00 +00 +02 +00 +21 +40 +00 +00 +23 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +8b +00 +00 +00 +02 +00 +41 +40 +00 +00 +43 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +8b +00 +00 +00 +02 +00 +61 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +8b +00 +00 +00 +02 +00 +81 +40 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +8c +00 +00 +00 +02 +00 +42 +11 +00 +00 +46 +41 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +8c +00 +00 +00 +02 +00 +41 +10 +00 +00 +46 +41 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +8c +00 +00 +00 +02 +00 +61 +10 +00 +00 +46 +41 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +8c +00 +00 +00 +02 +00 +81 +10 +00 +00 +46 +41 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +8e +00 +00 +00 +02 +00 +46 +41 +00 +00 +43 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +01 +8e +00 +00 +00 +02 +00 +46 +41 +00 +00 +61 +10 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +01 +8e +00 +00 +00 +02 +00 +46 +41 +00 +00 +81 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +b0 +00 +00 +00 +02 +00 +21 +50 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +b8 +00 +00 +00 +02 +00 +41 +50 +00 +00 +40 +21 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +b8 +00 +00 +00 +02 +00 +61 +50 +00 +00 +60 +21 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +b8 +00 +00 +00 +02 +00 +81 +50 +00 +00 +80 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +c6 +00 +00 +00 +02 +00 +23 +11 +00 +00 +20 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +c7 +00 +00 +00 +02 +00 +43 +11 +00 +00 +40 +20 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +c7 +00 +00 +00 +02 +00 +63 +11 +00 +00 +60 +20 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +c7 +00 +00 +00 +02 +00 +83 +11 +00 +00 +60 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +c6 +00 +00 +00 +02 +00 +23 +10 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +c7 +00 +00 +00 +02 +00 +43 +10 +00 +00 +40 +21 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +c7 +00 +00 +00 +02 +00 +63 +10 +00 +00 +60 +21 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +c7 +00 +00 +00 +02 +00 +83 +10 +00 +00 +60 +21 +00 +00 +00 +00 +00 +00 +10 +00 +80 +02 +00 +00 +00 +00 +00 +02 +0f +22 +00 +00 +02 +00 +74 +40 +00 +00 +61 +10 +00 +00 +00 +00 +00 +00 +04 +00 +80 +02 +00 +00 +00 +00 +00 +02 +0f +22 +00 +00 +02 +00 +67 +40 +00 +00 +61 +10 +00 +00 +00 +00 +00 +00 +00 +08 +80 +01 +00 +00 +00 +00 +00 +02 +0f +22 +00 +00 +02 +00 +67 +40 +00 +00 +81 +10 +00 +00 +00 +00 +00 +00 +10 +00 +80 +02 +00 +00 +00 +00 +00 +02 +0f +20 +00 +00 +02 +00 +61 +10 +00 +00 +74 +40 +00 +00 +00 +00 +00 +00 +04 +00 +80 +02 +00 +00 +00 +00 +00 +02 +0f +20 +00 +00 +02 +00 +61 +10 +00 +00 +67 +40 +00 +00 +00 +00 +00 +00 +00 +08 +80 +01 +00 +00 +00 +00 +00 +02 +0f +20 +00 +00 +02 +00 +81 +10 +00 +00 +67 +40 +00 +00 +00 +00 +00 +00 +04 +00 +80 +02 +00 +00 +00 +00 +00 +02 +0f +23 +00 +00 +02 +00 +68 +40 +00 +00 +61 +10 +00 +00 +00 +00 +00 +00 +00 +08 +80 +01 +00 +00 +00 +00 +00 +02 +0f +23 +00 +00 +02 +00 +68 +40 +00 +00 +81 +10 +00 +00 +00 +00 +00 +00 +04 +00 +80 +02 +00 +00 +00 +00 +00 +02 +0f +21 +00 +00 +02 +00 +61 +10 +00 +00 +68 +40 +00 +00 +00 +00 +00 +00 +00 +08 +80 +01 +00 +00 +00 +00 +00 +02 +0f +21 +00 +00 +02 +00 +81 +10 +00 +00 +68 +40 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +02 +0f +00 +00 +00 +02 +00 +41 +40 +00 +00 +23 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +00 +00 +00 +02 +00 +61 +40 +00 +00 +23 +10 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +04 +00 +00 +00 +40 +02 +0f +00 +00 +00 +02 +00 +81 +40 +00 +00 +23 +10 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +01 +00 +00 +02 +00 +61 +40 +00 +00 +43 +10 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +04 +00 +00 +00 +40 +02 +0f +01 +00 +00 +02 +00 +81 +40 +00 +00 +43 +10 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +63 +00 +00 +00 +02 +00 +81 +40 +00 +00 +63 +10 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +50 +00 +00 +00 +01 +00 +41 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +00 +00 +00 +00 +20 +01 +50 +00 +00 +00 +01 +00 +61 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +01 +50 +00 +00 +00 +01 +00 +81 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ff +00 +00 +06 +01 +00 +43 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +00 +00 +00 +00 +20 +01 +ff +00 +00 +06 +01 +00 +63 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +01 +ff +00 +00 +06 +01 +00 +83 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +6a +00 +00 +00 +01 +00 +20 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +68 +00 +00 +00 +01 +00 +40 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +00 +00 +00 +00 +20 +01 +68 +00 +00 +00 +01 +00 +60 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +68 +00 +00 +00 +01 +00 +80 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +01 +0e +00 +00 +00 +01 +00 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +10 +01 +0e +00 +00 +00 +01 +00 +4e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +20 +01 +0e +00 +00 +00 +01 +00 +6e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +01 +16 +00 +00 +00 +01 +00 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +10 +01 +16 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +20 +01 +16 +00 +00 +00 +01 +00 +73 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +01 +1e +00 +00 +00 +01 +00 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +10 +01 +1e +00 +00 +00 +01 +00 +4f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +20 +01 +1e +00 +00 +00 +01 +00 +6f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +01 +06 +00 +00 +00 +01 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +10 +01 +06 +00 +00 +00 +01 +00 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +20 +01 +06 +00 +00 +00 +01 +00 +70 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +02 +0f +a0 +00 +00 +01 +00 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +10 +02 +0f +a0 +00 +00 +01 +00 +51 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +02 +0f +a0 +00 +00 +01 +00 +71 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +02 +0f +a8 +00 +00 +01 +00 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +10 +02 +0f +a8 +00 +00 +01 +00 +52 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +02 +0f +a8 +00 +00 +01 +00 +72 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +58 +00 +00 +00 +01 +00 +41 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +00 +00 +00 +00 +20 +01 +58 +00 +00 +00 +01 +00 +61 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +01 +58 +00 +00 +00 +01 +00 +81 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +8f +00 +00 +00 +01 +00 +43 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +00 +00 +00 +00 +20 +01 +8f +00 +00 +00 +01 +00 +63 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +01 +8f +00 +00 +00 +01 +00 +83 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +01 +17 +00 +00 +00 +01 +00 +13 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +10 +01 +17 +00 +00 +00 +01 +00 +53 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +20 +01 +17 +00 +00 +00 +01 +00 +73 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +01 +1f +00 +00 +00 +01 +00 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +10 +01 +1f +00 +00 +00 +01 +00 +4f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +20 +01 +1f +00 +00 +00 +01 +00 +6f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +01 +07 +00 +00 +00 +01 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +10 +01 +07 +00 +00 +00 +01 +00 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +20 +01 +07 +00 +00 +00 +01 +00 +70 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +02 +0f +a1 +00 +00 +01 +00 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +10 +02 +0f +a1 +00 +00 +01 +00 +51 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +02 +0f +a1 +00 +00 +01 +00 +71 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +02 +0f +a9 +00 +00 +01 +00 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +10 +02 +0f +a9 +00 +00 +01 +00 +52 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +02 +0f +a9 +00 +00 +01 +00 +72 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +86 +00 +00 +00 +02 +00 +23 +11 +00 +00 +21 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +86 +00 +00 +00 +02 +00 +21 +40 +00 +00 +23 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +90 +00 +00 +00 +02 +00 +4b +00 +00 +00 +41 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +90 +00 +00 +00 +02 +00 +41 +50 +00 +00 +4b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +87 +00 +00 +00 +02 +00 +43 +11 +00 +00 +41 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +87 +00 +00 +00 +02 +00 +41 +40 +00 +00 +43 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +90 +00 +00 +00 +02 +00 +6b +00 +00 +00 +61 +50 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +90 +00 +00 +00 +02 +00 +61 +50 +00 +00 +6b +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +87 +00 +00 +00 +02 +00 +63 +11 +00 +00 +61 +40 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +87 +00 +00 +00 +02 +00 +61 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +90 +00 +00 +00 +02 +00 +8b +00 +00 +00 +81 +50 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +90 +00 +00 +00 +02 +00 +81 +50 +00 +00 +8b +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +87 +00 +00 +00 +02 +00 +83 +11 +00 +00 +81 +40 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +87 +00 +00 +00 +02 +00 +81 +40 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +e4 +00 +00 +00 +02 +00 +2b +00 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +e5 +00 +00 +00 +02 +00 +4b +00 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +e5 +00 +00 +00 +02 +00 +6b +00 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +ec +00 +00 +00 +02 +00 +2b +00 +00 +00 +4d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ed +00 +00 +00 +02 +00 +4b +00 +00 +00 +4d +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +ed +00 +00 +00 +02 +00 +6b +00 +00 +00 +4d +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +e6 +00 +00 +00 +02 +00 +20 +21 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +e7 +00 +00 +00 +02 +00 +20 +21 +00 +00 +4b +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +e7 +00 +00 +00 +02 +00 +20 +21 +00 +00 +6b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +ee +00 +00 +00 +02 +00 +4d +00 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ef +00 +00 +00 +02 +00 +4d +00 +00 +00 +4b +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +ef +00 +00 +00 +02 +00 +4d +00 +00 +00 +6b +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +8d +00 +00 +00 +02 +00 +41 +40 +00 +00 +42 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +8d +00 +00 +00 +02 +00 +61 +40 +00 +00 +62 +11 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +8d +00 +00 +00 +02 +00 +81 +40 +00 +00 +82 +11 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +02 +10 +00 +00 +00 +10 +01 +00 +00 +00 +00 +02 +00 +41 +40 +00 +00 +02 +10 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +10 +00 +00 +00 +20 +01 +00 +00 +00 +00 +02 +00 +61 +40 +00 +00 +02 +10 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +02 +0f +00 +00 +00 +02 +00 +41 +40 +00 +00 +02 +10 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +00 +00 +00 +02 +00 +61 +40 +00 +00 +02 +10 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +01 +04 +00 +00 +00 +02 +00 +2b +00 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +10 +01 +05 +00 +00 +00 +02 +00 +4b +00 +00 +00 +40 +21 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +20 +01 +05 +00 +00 +00 +02 +00 +6b +00 +00 +00 +60 +21 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +10 +00 +00 +00 +40 +01 +05 +00 +00 +00 +02 +00 +8b +00 +00 +00 +60 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +00 +01 +80 +00 +00 +00 +02 +00 +23 +10 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +00 +01 +80 +00 +00 +00 +02 +00 +23 +11 +00 +00 +20 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +10 +01 +83 +00 +00 +00 +02 +00 +43 +10 +00 +00 +20 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +10 +01 +81 +83 +00 +00 +02 +00 +43 +10 +00 +00 +40 +21 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +10 +01 +81 +00 +00 +00 +02 +00 +43 +11 +00 +00 +40 +20 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +22 +00 +00 +00 +20 +01 +83 +00 +00 +00 +02 +00 +63 +10 +00 +00 +20 +30 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +22 +00 +00 +00 +20 +01 +81 +83 +00 +00 +02 +00 +63 +10 +00 +00 +60 +21 +02 +00 +00 +00 +00 +00 +04 +00 +00 +00 +22 +00 +00 +00 +20 +01 +81 +00 +00 +00 +02 +00 +63 +11 +00 +00 +60 +20 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +22 +00 +00 +00 +40 +01 +83 +00 +00 +00 +02 +00 +83 +10 +00 +00 +20 +30 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +22 +00 +00 +00 +40 +01 +81 +83 +00 +00 +02 +00 +83 +10 +00 +00 +60 +21 +02 +00 +00 +00 +00 +00 +00 +08 +00 +01 +22 +00 +00 +00 +40 +01 +81 +00 +00 +00 +02 +00 +83 +11 +00 +00 +60 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +01 +00 +00 +00 +00 +02 +00 +23 +11 +00 +00 +21 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +10 +01 +01 +00 +00 +00 +02 +00 +43 +11 +00 +00 +41 +40 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +20 +01 +01 +00 +00 +00 +02 +00 +63 +11 +00 +00 +61 +40 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +10 +00 +00 +00 +40 +01 +01 +00 +00 +00 +02 +00 +83 +11 +00 +00 +81 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +01 +02 +00 +00 +00 +02 +00 +21 +40 +00 +00 +23 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +10 +01 +03 +00 +00 +00 +02 +00 +41 +40 +00 +00 +43 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +20 +01 +03 +00 +00 +00 +02 +00 +61 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +10 +00 +00 +00 +40 +01 +03 +00 +00 +00 +02 +00 +81 +40 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +0b +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +22 +00 +00 +00 +00 +01 +fe +00 +00 +00 +01 +00 +23 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +10 +00 +00 +00 +10 +01 +00 +00 +00 +00 +01 +00 +41 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +10 +01 +ff +00 +00 +00 +01 +00 +43 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +10 +00 +00 +00 +20 +01 +00 +00 +00 +00 +01 +00 +61 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +22 +00 +00 +00 +20 +01 +ff +00 +00 +00 +01 +00 +63 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +22 +00 +00 +00 +40 +01 +ff +00 +00 +00 +01 +00 +83 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +20 +00 +00 +00 +00 +01 +f6 +00 +00 +00 +01 +00 +23 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +10 +01 +f7 +00 +00 +00 +01 +00 +43 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +20 +00 +00 +00 +20 +01 +f7 +00 +00 +00 +01 +00 +63 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +20 +00 +00 +00 +40 +01 +f7 +00 +00 +00 +01 +00 +83 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +a8 +00 +00 +00 +02 +00 +2b +00 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +a9 +00 +00 +00 +02 +00 +4b +00 +00 +00 +40 +21 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +a9 +00 +00 +00 +02 +00 +6b +00 +00 +00 +60 +21 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +a9 +00 +00 +00 +02 +00 +8b +00 +00 +00 +60 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +f6 +00 +00 +00 +02 +00 +23 +10 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +f6 +00 +00 +00 +02 +00 +23 +11 +00 +00 +20 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +f7 +00 +00 +00 +02 +00 +43 +10 +00 +00 +40 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +f7 +00 +00 +00 +02 +00 +43 +11 +00 +00 +40 +20 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +f7 +00 +00 +00 +02 +00 +63 +10 +00 +00 +60 +21 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +f7 +00 +00 +00 +02 +00 +63 +11 +00 +00 +60 +20 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +f7 +00 +00 +00 +02 +00 +83 +10 +00 +00 +60 +21 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +f7 +00 +00 +00 +02 +00 +83 +11 +00 +00 +60 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +84 +00 +00 +00 +02 +00 +23 +11 +00 +00 +21 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +85 +00 +00 +00 +02 +00 +43 +11 +00 +00 +41 +40 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +85 +00 +00 +00 +02 +00 +63 +11 +00 +00 +61 +40 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +85 +00 +00 +00 +02 +00 +83 +11 +00 +00 +81 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +84 +00 +00 +00 +02 +00 +21 +40 +00 +00 +23 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +85 +00 +00 +00 +02 +00 +41 +40 +00 +00 +43 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +85 +00 +00 +00 +02 +00 +61 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +85 +00 +00 +00 +02 +00 +81 +40 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +10 +00 +00 +00 +00 +02 +d4 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +01 +d4 +00 +00 +00 +01 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +f6 +00 +00 +05 +01 +00 +23 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +f7 +00 +00 +05 +01 +00 +43 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +f7 +00 +00 +05 +01 +00 +63 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +f7 +00 +00 +05 +01 +00 +83 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +10 +02 +0f +af +00 +00 +02 +00 +41 +40 +00 +00 +43 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +02 +0f +af +00 +00 +02 +00 +61 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +02 +0f +af +00 +00 +02 +00 +81 +40 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +10 +01 +6b +00 +00 +00 +03 +00 +41 +40 +00 +00 +43 +11 +00 +00 +20 +30 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +6b +00 +00 +00 +03 +00 +61 +40 +00 +00 +63 +11 +00 +00 +20 +30 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +6b +00 +00 +00 +03 +00 +81 +40 +00 +00 +83 +11 +00 +00 +20 +30 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +10 +01 +6b +00 +00 +00 +02 +00 +41 +70 +00 +00 +20 +30 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +6b +00 +00 +00 +02 +00 +61 +70 +00 +00 +20 +30 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +6b +00 +00 +00 +02 +00 +81 +70 +00 +00 +20 +30 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +10 +01 +69 +6b +00 +00 +03 +00 +41 +40 +00 +00 +43 +11 +00 +00 +40 +31 +02 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +69 +6b +00 +00 +03 +00 +61 +40 +00 +00 +63 +11 +00 +00 +60 +31 +02 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +69 +6b +00 +00 +03 +00 +81 +40 +00 +00 +83 +11 +00 +00 +60 +31 +02 +00 +01 +00 +00 +00 +00 +00 +00 +00 +10 +01 +69 +6b +00 +00 +02 +00 +41 +70 +00 +00 +40 +31 +02 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +69 +6b +00 +00 +02 +00 +61 +70 +00 +00 +60 +31 +02 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +01 +69 +6b +00 +00 +02 +00 +81 +70 +00 +00 +60 +31 +02 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +20 +00 +00 +00 +00 +01 +d2 +00 +00 +00 +02 +00 +23 +10 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +01 +c0 +d0 +00 +00 +02 +00 +23 +10 +00 +00 +20 +21 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +10 +01 +d3 +00 +00 +00 +02 +00 +43 +10 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +10 +01 +c1 +d1 +00 +00 +02 +00 +43 +10 +00 +00 +20 +21 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +20 +01 +d3 +00 +00 +00 +02 +00 +63 +10 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +20 +01 +c1 +d1 +00 +00 +02 +00 +63 +10 +00 +00 +20 +21 +01 +00 +00 +00 +00 +00 +00 +08 +00 +01 +20 +00 +00 +00 +40 +01 +d3 +00 +00 +00 +02 +00 +83 +10 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +20 +00 +00 +00 +40 +01 +c1 +d1 +00 +00 +02 +00 +83 +10 +00 +00 +20 +21 +01 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +02 +0f +00 +00 +00 +03 +00 +43 +11 +00 +00 +41 +40 +00 +00 +20 +21 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +02 +0f +01 +00 +00 +03 +00 +43 +11 +00 +00 +41 +40 +00 +00 +2c +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +00 +00 +00 +03 +00 +63 +11 +00 +00 +61 +40 +00 +00 +20 +21 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +01 +00 +00 +03 +00 +63 +11 +00 +00 +61 +40 +00 +00 +2c +00 +00 +00 +00 +08 +00 +01 +04 +00 +00 +00 +40 +02 +0f +00 +00 +00 +03 +00 +83 +11 +00 +00 +81 +40 +00 +00 +20 +21 +00 +00 +00 +08 +00 +01 +04 +00 +00 +00 +40 +02 +0f +01 +00 +00 +03 +00 +83 +11 +00 +00 +81 +40 +00 +00 +2c +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +01 +00 +40 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +01 +00 +60 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +e8 +9a +00 +00 +01 +00 +40 +82 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +e8 +9a +00 +00 +01 +00 +60 +82 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +e8 +9a +00 +00 +01 +00 +00 +82 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ff +00 +00 +02 +01 +00 +43 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +00 +00 +00 +00 +20 +01 +ff +00 +00 +02 +01 +00 +63 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +01 +ff +00 +00 +02 +01 +00 +83 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +ff +00 +00 +02 +01 +00 +02 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ff +00 +00 +02 +01 +00 +43 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +00 +00 +00 +00 +20 +01 +ff +00 +00 +02 +01 +00 +63 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +01 +ff +00 +00 +02 +01 +00 +83 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +ff +00 +00 +02 +01 +00 +02 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +9a +00 +00 +03 +01 +00 +40 +86 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +9a +00 +00 +03 +01 +00 +60 +86 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +9a +00 +00 +03 +01 +00 +00 +86 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ff +00 +00 +03 +01 +00 +42 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +ff +00 +00 +03 +01 +00 +62 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +ff +00 +00 +03 +01 +00 +02 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +01 +00 +40 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +00 +00 +00 +00 +01 +00 +60 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +eb +00 +00 +00 +01 +00 +00 +84 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +e9 +ea +00 +00 +01 +00 +40 +82 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +e9 +ea +00 +00 +01 +00 +60 +82 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +e9 +ea +00 +00 +01 +00 +00 +82 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ff +00 +00 +04 +01 +00 +43 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +00 +00 +00 +00 +20 +01 +ff +00 +00 +04 +01 +00 +63 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +01 +ff +00 +00 +04 +01 +00 +83 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +ff +00 +00 +04 +01 +00 +02 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ff +00 +00 +04 +01 +00 +43 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +02 +00 +00 +00 +00 +20 +01 +ff +00 +00 +04 +01 +00 +63 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +01 +ff +00 +00 +04 +01 +00 +83 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +ff +00 +00 +04 +01 +00 +02 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ea +00 +00 +03 +01 +00 +40 +86 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +ea +00 +00 +03 +01 +00 +60 +86 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +ea +00 +00 +03 +01 +00 +00 +86 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +ff +00 +00 +05 +01 +00 +42 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +ff +00 +00 +05 +01 +00 +62 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +ff +00 +00 +05 +01 +00 +02 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +01 +00 +00 +00 +00 +01 +00 +40 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +01 +c8 +00 +00 +00 +02 +00 +40 +11 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +01 +00 +40 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +01 +00 +60 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +01 +70 +00 +00 +00 +01 +00 +00 +84 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +02 +0f +80 +00 +00 +01 +00 +40 +82 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +80 +00 +00 +01 +00 +60 +82 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +00 +02 +0f +80 +00 +00 +01 +00 +00 +82 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +0b +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +e3 +00 +00 +00 +01 +00 +00 +84 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +80 +00 +00 +4c +90 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +80 +00 +00 +6c +90 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +80 +00 +00 +8c +90 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +10 +00 +00 +00 +00 +01 +e0 +00 +00 +00 +01 +00 +00 +84 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +01 +e0 +00 +00 +00 +02 +00 +00 +84 +00 +00 +4c +90 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +00 +01 +e0 +00 +00 +00 +02 +00 +00 +84 +00 +00 +6c +90 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +10 +00 +00 +00 +00 +01 +e0 +00 +00 +00 +02 +00 +00 +84 +00 +00 +8c +90 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +00 +02 +0f +90 +00 +02 +01 +00 +23 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8d +74 +26 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +02 +0f +00 +00 +00 +02 +00 +43 +11 +00 +00 +41 +40 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +00 +00 +00 +02 +00 +63 +11 +00 +00 +61 +40 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +04 +00 +00 +00 +40 +02 +0f +00 +00 +00 +02 +00 +83 +11 +00 +00 +81 +40 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +22 +00 +00 +00 +10 +02 +0f +ba +00 +00 +02 +00 +43 +10 +00 +00 +20 +20 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +22 +00 +00 +00 +20 +02 +0f +ba +00 +00 +02 +00 +63 +10 +00 +00 +20 +20 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +22 +00 +00 +00 +40 +02 +0f +ba +00 +00 +02 +00 +83 +10 +00 +00 +20 +20 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +02 +00 +00 +00 +04 +00 +00 +00 +10 +02 +0f +00 +00 +00 +02 +00 +41 +40 +00 +00 +43 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +00 +00 +00 +02 +00 +61 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +04 +00 +00 +00 +40 +02 +0f +00 +00 +00 +02 +00 +81 +40 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +cd +00 +00 +00 +01 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +01 +00 +00 +00 +00 +00 +00 +00 +10 +01 +62 +00 +00 +00 +02 +00 +41 +40 +00 +00 +42 +11 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +20 +01 +62 +00 +00 +00 +02 +00 +61 +40 +00 +00 +62 +11 +00 +00 +00 +00 +00 +00 +02 +00 +10 +00 +00 +00 +00 +00 +00 +01 +63 +00 +00 +00 +02 +00 +43 +11 +00 +00 +41 +40 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +08 +00 +00 +00 +00 +00 +00 +10 +02 +0f +00 +00 +01 +01 +00 +41 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +20 +02 +0f +00 +00 +01 +01 +00 +61 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +02 +0f +00 +00 +01 +01 +00 +81 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +24 +00 +00 +00 +00 +02 +0f +00 +00 +00 +01 +00 +43 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +24 +00 +00 +00 +00 +02 +0f +00 +00 +00 +01 +00 +43 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +02 +00 +00 +00 +24 +00 +00 +00 +00 +02 +0f +00 +00 +00 +01 +00 +42 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +24 +00 +00 +00 +00 +02 +0f +00 +00 +00 +01 +00 +62 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +24 +00 +00 +00 +00 +02 +0f +00 +00 +00 +01 +00 +82 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +24 +00 +00 +00 +10 +02 +0f +00 +00 +00 +01 +00 +41 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +24 +00 +00 +00 +20 +02 +0f +00 +00 +00 +01 +00 +61 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +24 +00 +00 +00 +40 +02 +0f +00 +00 +00 +01 +00 +81 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +00 +10 +00 +00 +22 +00 +00 +00 +00 +01 +d9 +00 +00 +00 +01 +00 +62 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +22 +00 +00 +00 +00 +01 +dd +00 +00 +00 +01 +00 +82 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +2a +00 +00 +00 +00 +01 +db +00 +00 +00 +01 +00 +a2 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +04 +00 +00 +00 +00 +02 +d9 +00 +00 +00 +01 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +10 +00 +00 +20 +00 +00 +00 +00 +01 +df +00 +00 +00 +01 +00 +42 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +20 +00 +00 +00 +00 +01 +db +00 +00 +00 +01 +00 +62 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +22 +00 +00 +00 +00 +01 +df +00 +00 +00 +01 +00 +82 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +20 +00 +00 +00 +00 +01 +df +00 +00 +00 +01 +00 +a2 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +10 +00 +00 +00 +00 +00 +00 +00 +01 +d9 +00 +00 +02 +01 +00 +62 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +01 +dd +00 +00 +02 +01 +00 +82 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +02 +dd +d0 +00 +00 +01 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +10 +00 +00 +00 +00 +00 +00 +00 +02 +d9 +c8 +00 +00 +01 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +02 +d9 +c8 +00 +00 +02 +00 +aa +00 +00 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +02 +d9 +c8 +00 +00 +02 +00 +a1 +60 +00 +00 +aa +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +02 +d9 +c9 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +10 +00 +00 +22 +00 +00 +00 +00 +01 +d8 +00 +00 +00 +01 +00 +62 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +22 +00 +00 +00 +00 +01 +dc +00 +00 +00 +01 +00 +82 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +04 +00 +00 +00 +00 +02 +d8 +00 +00 +00 +01 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +04 +00 +00 +00 +00 +02 +d8 +00 +00 +00 +02 +00 +aa +00 +00 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +02 +10 +00 +00 +14 +00 +00 +00 +00 +02 +00 +00 +00 +00 +01 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +10 +00 +00 +14 +00 +00 +00 +00 +02 +00 +00 +00 +00 +02 +00 +aa +00 +00 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +00 +10 +00 +00 +2a +00 +00 +00 +00 +01 +d8 +00 +00 +00 +01 +00 +62 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +2a +00 +00 +00 +00 +01 +dc +00 +00 +00 +01 +00 +82 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +06 +00 +00 +00 +00 +02 +d8 +00 +00 +00 +01 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +06 +00 +00 +00 +00 +02 +d8 +00 +00 +00 +02 +00 +aa +00 +00 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +04 +00 +00 +00 +00 +02 +dc +00 +00 +00 +01 +00 +a1 +68 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +04 +00 +00 +00 +00 +02 +dc +00 +00 +00 +02 +00 +a1 +60 +00 +00 +aa +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +00 +10 +00 +00 +04 +00 +00 +00 +00 +02 +de +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +04 +00 +00 +00 +00 +02 +de +00 +00 +00 +01 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +04 +00 +00 +00 +00 +02 +de +00 +00 +00 +02 +00 +a1 +60 +00 +00 +aa +00 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +10 +00 +00 +30 +00 +00 +00 +00 +01 +04 +00 +00 +00 +01 +00 +42 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +30 +00 +00 +00 +00 +01 +00 +00 +00 +00 +01 +00 +62 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +20 +00 +00 +00 +00 +01 +d9 +00 +00 +00 +01 +00 +42 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +02 +9b +d9 +00 +07 +01 +00 +42 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +10 +00 +00 +00 +00 +00 +00 +00 +01 +dd +00 +00 +07 +01 +00 +42 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +02 +df +e0 +00 +00 +01 +00 +4b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +02 +9b +dd +00 +07 +01 +00 +42 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +03 +9b +df +e0 +00 +01 +00 +4b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +10 +00 +00 +00 +00 +02 +00 +c0 +00 +00 +01 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +08 +00 +00 +00 +00 +00 +00 +00 +20 +02 +0f +c8 +00 +00 +01 +00 +61 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +02 +0f +c8 +00 +00 +01 +00 +81 +60 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +08 +00 +00 +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +02 +00 +23 +11 +00 +00 +21 +40 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +04 +00 +00 +00 +10 +02 +0f +01 +00 +00 +02 +00 +43 +11 +00 +00 +41 +40 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +01 +00 +00 +02 +00 +63 +11 +00 +00 +61 +40 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +04 +00 +00 +00 +40 +02 +0f +01 +00 +00 +02 +00 +83 +11 +00 +00 +81 +40 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +02 +0f +c7 +00 +01 +01 +00 +82 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +20 +00 +00 +00 +04 +00 +00 +00 +10 +02 +0f +40 +00 +00 +02 +00 +41 +40 +00 +00 +43 +11 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +04 +00 +00 +00 +20 +02 +0f +40 +00 +00 +02 +00 +61 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +04 +00 +00 +00 +40 +02 +0f +40 +00 +00 +02 +00 +81 +40 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +20 +10 +00 +00 +14 +00 +00 +00 +00 +02 +00 +00 +00 +00 +02 +00 +aa +00 +00 +00 +a1 +60 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +80 +00 +00 +00 +00 +00 +00 +00 +00 +02 +0f +c3 +00 +00 +02 +00 +62 +11 +00 +00 +61 +40 +00 +00 +00 +00 +00 +00 +00 +08 +00 +01 +00 +00 +00 +00 +40 +02 +0f +c3 +00 +00 +02 +00 +82 +11 +00 +00 +81 +40 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +02 +0f +ae +00 +07 +01 +00 +22 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +6e +00 +00 +02 +00 +84 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +00 +28 +00 +01 +00 +00 +00 +00 +40 +02 +0f +6e +00 +00 +02 +00 +84 +40 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +7e +00 +00 +02 +00 +63 +11 +00 +00 +84 +40 +00 +00 +00 +00 +00 +00 +00 +28 +00 +01 +00 +00 +00 +00 +40 +02 +0f +7e +00 +00 +02 +00 +83 +11 +00 +00 +84 +40 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +66 +0f +6e +00 +02 +00 +c4 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +00 +88 +00 +01 +00 +00 +00 +00 +40 +03 +66 +0f +6e +00 +02 +00 +c4 +40 +00 +00 +83 +11 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +66 +0f +7e +00 +02 +00 +63 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +00 +88 +00 +01 +00 +00 +00 +00 +40 +03 +66 +0f +7e +00 +02 +00 +83 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +6f +00 +00 +02 +00 +84 +40 +00 +00 +85 +11 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +7f +00 +00 +02 +00 +85 +11 +00 +00 +84 +40 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +f3 +0f +7e +00 +02 +00 +c4 +40 +00 +00 +c4 +10 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +f3 +0f +7e +00 +02 +00 +c4 +40 +00 +00 +85 +11 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +66 +0f +d6 +00 +02 +00 +85 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +00 +20 +00 +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +02 +00 +84 +40 +00 +00 +85 +11 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +01 +00 +00 +00 +00 +03 +66 +0f +00 +00 +02 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +00 +20 +00 +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +02 +00 +84 +40 +00 +00 +85 +11 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +26 +00 +00 +00 +00 +02 +0f +00 +00 +00 +02 +00 +84 +10 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +01 +00 +00 +00 +00 +03 +66 +0f +00 +00 +02 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +23 +00 +00 +00 +00 +03 +66 +0f +00 +00 +02 +00 +c4 +10 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +02 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +11 +00 +00 +00 +00 +03 +00 +0f +00 +00 +02 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +80 +00 +00 +00 +00 +02 +0f +c2 +00 +00 +02 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +90 +00 +00 +00 +00 +03 +00 +0f +c2 +00 +02 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +03 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +20 +21 +00 +00 +00 +40 +00 +00 +11 +00 +00 +00 +00 +03 +00 +0f +00 +00 +03 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +20 +21 +00 +00 +00 +40 +00 +00 +20 +00 +00 +00 +00 +02 +0f +ae +00 +00 +01 +00 +62 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +f7 +00 +00 +02 +00 +84 +40 +00 +00 +84 +10 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +40 +00 +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +02 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +04 +00 +00 +00 +00 +02 +0f +01 +00 +00 +02 +00 +c5 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +02 +00 +c4 +40 +00 +00 +c4 +10 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +40 +00 +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +02 +00 +c4 +40 +00 +00 +82 +11 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +04 +00 +00 +00 +00 +02 +0f +01 +00 +00 +02 +00 +82 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +02 +0f +50 +00 +00 +02 +00 +61 +10 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +02 +0f +2b +00 +00 +02 +00 +c2 +11 +00 +00 +c1 +40 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +02 +0f +e7 +00 +00 +02 +00 +82 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +03 +f3 +0f +10 +00 +02 +00 +c4 +40 +00 +00 +c4 +10 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +03 +f3 +0f +10 +00 +02 +00 +c4 +40 +00 +00 +82 +11 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +03 +f3 +0f +11 +00 +02 +00 +82 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +40 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +c5 +00 +00 +03 +00 +61 +10 +00 +00 +84 +40 +00 +00 +20 +21 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +66 +0f +c5 +00 +03 +00 +61 +10 +00 +00 +c4 +40 +00 +00 +20 +21 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +40 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +c4 +00 +00 +03 +00 +84 +40 +00 +00 +61 +10 +00 +00 +20 +21 +00 +00 +40 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +c4 +00 +00 +03 +00 +84 +40 +00 +00 +43 +11 +00 +00 +20 +21 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +66 +0f +c4 +00 +03 +00 +c4 +40 +00 +00 +61 +10 +00 +00 +20 +21 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +66 +0f +c4 +00 +03 +00 +84 +40 +00 +00 +43 +11 +00 +00 +20 +21 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +40 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +d7 +00 +00 +02 +00 +61 +10 +00 +00 +84 +40 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +66 +0f +d7 +00 +02 +00 +61 +10 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +40 +20 +00 +00 +00 +00 +00 +00 +00 +02 +0f +70 +00 +00 +03 +00 +84 +40 +00 +00 +85 +11 +00 +00 +20 +21 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +20 +01 +a7 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +f2 +0f +c2 +00 +03 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +20 +21 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +00 +80 +00 +00 +01 +00 +00 +00 +00 +03 +66 +0f +00 +00 +02 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +01 +00 +00 +00 +00 +03 +66 +0f +01 +00 +02 +00 +c5 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +00 +80 +00 +00 +01 +00 +00 +00 +00 +03 +66 +0f +00 +00 +02 +00 +c4 +40 +00 +00 +82 +11 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +01 +00 +00 +00 +00 +03 +66 +0f +01 +00 +02 +00 +82 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +66 +0f +50 +00 +02 +00 +61 +10 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +01 +00 +00 +00 +00 +03 +66 +0f +00 +00 +02 +00 +c2 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +00 +00 +00 +00 +00 +00 +00 +00 +20 +01 +a5 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +f2 +0f +10 +00 +02 +00 +c4 +40 +00 +00 +c4 +10 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +f2 +0f +10 +00 +02 +00 +c4 +40 +00 +00 +82 +11 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +f2 +0f +11 +00 +02 +00 +82 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +66 +0f +f7 +00 +02 +00 +c4 +40 +00 +00 +c4 +10 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +00 +80 +00 +00 +10 +00 +00 +00 +00 +03 +00 +0f +6f +00 +02 +00 +c4 +40 +00 +00 +c5 +11 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +10 +00 +00 +00 +00 +03 +00 +0f +7f +00 +02 +00 +c5 +11 +00 +00 +c4 +40 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +f2 +0f +d6 +00 +02 +00 +84 +40 +00 +00 +c4 +10 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +03 +f3 +0f +d6 +00 +02 +00 +c4 +40 +00 +00 +84 +10 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +20 +00 +00 +00 +00 +03 +66 +0f +73 +00 +02 +00 +c4 +10 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +80 +00 +00 +00 +00 +02 +0f +0f +00 +00 +02 +00 +84 +40 +00 +00 +85 +11 +00 +00 +00 +00 +00 +00 +00 +20 +02 +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +02 +00 +84 +40 +00 +00 +85 +11 +00 +00 +00 +00 +00 +00 +00 +20 +02 +00 +00 +00 +00 +00 +00 +02 +0f +5e +00 +00 +02 +00 +84 +40 +00 +00 +82 +11 +00 +00 +00 +00 +00 +00 +08 +00 +0a +00 +00 +00 +00 +00 +00 +02 +0f +79 +00 +00 +02 +00 +46 +40 +00 +00 +a2 +11 +00 +00 +00 +00 +00 +00 +08 +00 +0a +00 +04 +00 +00 +00 +00 +02 +0f +00 +00 +00 +01 +00 +a2 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +0a +00 +00 +00 +00 +00 +00 +02 +0f +78 +00 +00 +02 +00 +a2 +11 +00 +00 +46 +40 +00 +00 +00 +00 +00 +00 +eb +0a +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +04 +00 +60 +00 +00 +00 +00 +00 +10 +02 +0f +a7 +00 +00 +02 +00 +43 +11 +00 +00 +41 +40 +00 +00 +00 +00 +00 +00 +04 +00 +60 +00 +00 +00 +00 +00 +20 +02 +0f +a7 +00 +00 +02 +00 +63 +11 +00 +00 +61 +40 +00 +00 +00 +00 +00 +00 +90 +8d +b4 +26 +00 +00 +00 +00 +04 +00 +20 +00 +00 +00 +00 +00 +00 +02 +0f +10 +00 +00 +02 +00 +23 +11 +00 +00 +21 +40 +00 +00 +00 +00 +00 +00 +04 +00 +20 +00 +00 +00 +00 +00 +10 +02 +0f +11 +00 +00 +02 +00 +43 +11 +00 +00 +41 +40 +00 +00 +00 +00 +00 +00 +04 +00 +20 +00 +00 +00 +00 +00 +20 +02 +0f +11 +00 +00 +02 +00 +63 +11 +00 +00 +61 +40 +00 +00 +00 +00 +00 +00 +04 +00 +20 +00 +00 +00 +00 +00 +00 +02 +0f +12 +00 +00 +02 +00 +21 +40 +00 +00 +23 +11 +00 +00 +00 +00 +00 +00 +04 +00 +20 +00 +00 +00 +00 +00 +10 +02 +0f +13 +00 +00 +02 +00 +41 +40 +00 +00 +43 +11 +00 +00 +00 +00 +00 +00 +04 +00 +20 +00 +00 +00 +00 +00 +20 +02 +0f +13 +00 +00 +02 +00 +61 +40 +00 +00 +63 +11 +00 +00 +00 +00 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +07 +90 +90 +90 +90 +90 +90 +90 +04 +00 +60 +00 +00 +00 +00 +00 +10 +02 +0f +a6 +00 +00 +02 +00 +41 +40 +00 +00 +42 +11 +00 +00 +00 +00 +00 +00 +04 +00 +60 +00 +00 +00 +00 +00 +20 +02 +0f +a6 +00 +00 +02 +00 +61 +40 +00 +00 +62 +11 +00 +00 +00 +00 +00 +00 +00 +08 +10 +20 +40 +50 +80 +00 +69 +6e +76 +61 +6c +69 +64 +20 +6f +70 +65 +72 +61 +6e +64 +20 +63 +6f +6e +76 +65 +72 +73 +69 +6f +6e +00 +2e +2f +6d +6f +64 +75 +6c +65 +73 +2f +61 +72 +63 +68 +2f +78 +38 +36 +2f +78 +38 +36 +69 +64 +2e +72 +65 +00 +24 +00 +8d +b4 +26 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +0a +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +69 +6e +76 +61 +6c +69 +64 +20 +6f +70 +65 +72 +61 +6e +64 +20 +74 +79 +70 +65 +00 +69 +6e +76 +61 +6c +69 +64 +20 +74 +61 +72 +67 +65 +74 +20 +6d +6f +64 +69 +66 +69 +65 +72 +20 +74 +79 +70 +65 +00 +6d +69 +73 +6d +61 +74 +63 +68 +20 +69 +6e +20 +6f +70 +65 +72 +61 +6e +64 +20 +73 +69 +7a +65 +73 +00 +6f +70 +65 +72 +61 +6e +64 +20 +73 +69 +7a +65 +20 +6e +6f +74 +20 +73 +70 +65 +63 +69 +66 +69 +65 +64 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +08 +90 +90 +90 +90 +90 +90 +90 +90 +75 +6e +72 +65 +63 +6f +67 +6e +69 +7a +65 +64 +20 +78 +38 +36 +20 +65 +78 +74 +20 +6d +6f +64 +20 +69 +6e +64 +65 +78 +00 +90 +75 +6e +72 +65 +63 +6f +67 +6e +69 +7a +65 +64 +20 +78 +38 +36 +20 +65 +78 +74 +65 +6e +64 +65 +64 +20 +6d +6f +64 +69 +66 +69 +65 +72 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +0c +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +69 +6e +76 +61 +6c +69 +64 +20 +63 +6f +6d +62 +69 +6e +61 +74 +69 +6f +6e +20 +6f +66 +20 +6f +70 +63 +6f +64 +65 +20 +61 +6e +64 +20 +6f +70 +65 +72 +61 +6e +64 +73 +00 +75 +6e +6b +6e +6f +77 +6e +20 +6f +70 +65 +72 +61 +6e +64 +20 +61 +63 +74 +69 +6f +6e +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +75 +6e +6b +6e +6f +77 +6e +20 +6f +70 +65 +72 +61 +6e +64 +20 +70 +6f +73 +74 +70 +6f +6e +65 +64 +20 +61 +63 +74 +69 +6f +6e +00 +8d +76 +00 +94 +03 +00 +00 +a7 +03 +00 +00 +f4 +03 +00 +00 +9d +03 +00 +00 +07 +04 +00 +00 +fd +03 +00 +00 +2a +04 +00 +00 +33 +04 +00 +00 +4d +04 +00 +00 +67 +04 +00 +00 +81 +04 +00 +00 +94 +04 +00 +00 +15 +05 +00 +00 +96 +05 +00 +00 +17 +06 +00 +00 +2c +06 +00 +00 +3d +06 +00 +00 +49 +06 +00 +00 +5a +06 +00 +00 +6b +06 +00 +00 +7c +06 +00 +00 +8b +06 +00 +00 +8d +74 +26 +00 +75 +6e +72 +65 +63 +6f +67 +6e +69 +7a +65 +64 +20 +43 +50 +55 +20 +69 +64 +65 +6e +74 +69 +66 +69 +65 +72 +20 +60 +73 +27 +00 +1e +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +70 +0e +00 +00 +81 +0e +00 +00 +92 +0e +00 +00 +b5 +0e +00 +00 +c6 +0e +00 +00 +59 +0f +00 +00 +15 +11 +00 +00 +04 +0e +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +c3 +0f +00 +00 +15 +11 +00 +00 +f7 +10 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +b2 +10 +00 +00 +15 +11 +00 +00 +5f +10 +00 +00 +15 +0e +00 +00 +15 +11 +00 +00 +6a +0f +00 +00 +15 +11 +00 +00 +e0 +10 +00 +00 +c9 +10 +00 +00 +79 +10 +00 +00 +d7 +0e +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +03 +10 +00 +00 +15 +11 +00 +00 +06 +11 +00 +00 +15 +11 +00 +00 +a9 +0f +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +c3 +0f +00 +00 +15 +11 +00 +00 +f7 +10 +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +b2 +10 +00 +00 +15 +11 +00 +00 +5f +10 +00 +00 +15 +0e +00 +00 +15 +11 +00 +00 +6a +0f +00 +00 +15 +11 +00 +00 +e0 +10 +00 +00 +c9 +10 +00 +00 +79 +10 +00 +00 +d7 +0e +00 +00 +15 +11 +00 +00 +15 +11 +00 +00 +03 +10 +00 +00 +15 +11 +00 +00 +06 +11 +00 +00 +15 +11 +00 +00 +a9 +0f +00 +00 +65 +12 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +99 +12 +00 +00 +18 +11 +00 +00 +7f +12 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +f1 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +0b +12 +00 +00 +18 +11 +00 +00 +df +12 +00 +00 +b3 +12 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +25 +12 +00 +00 +18 +11 +00 +00 +cd +12 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +99 +12 +00 +00 +18 +11 +00 +00 +7f +12 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +f1 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +0b +12 +00 +00 +18 +11 +00 +00 +df +12 +00 +00 +b3 +12 +00 +00 +18 +11 +00 +00 +18 +11 +00 +00 +25 +12 +00 +00 +18 +11 +00 +00 +cd +12 +00 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +60 +73 +27 +20 +73 +65 +67 +6d +65 +6e +74 +20 +72 +65 +67 +69 +73 +74 +65 +72 +20 +69 +67 +6e +6f +72 +65 +64 +20 +69 +6e +20 +36 +34 +2d +62 +69 +74 +20 +6d +6f +64 +65 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +8d +74 +26 +00 +43 +61 +6e +6e +6f +74 +20 +6f +76 +65 +72 +72 +69 +64 +65 +20 +61 +64 +64 +72 +65 +73 +73 +20 +73 +69 +7a +65 +20 +74 +6f +20 +31 +36 +20 +62 +69 +74 +73 +20 +69 +6e +20 +36 +34 +2d +62 +69 +74 +20 +6d +6f +64 +65 +00 +eb +07 +90 +90 +90 +90 +90 +90 +90 +60 +73 +27 +20 +69 +73 +20 +61 +20 +70 +72 +65 +66 +69 +78 +20 +69 +6e +20 +36 +34 +2d +62 +69 +74 +20 +6d +6f +64 +65 +00 +90 +60 +73 +27 +20 +69 +73 +20 +61 +20 +72 +65 +67 +69 +73 +74 +65 +72 +20 +69 +6e +20 +36 +34 +2d +62 +69 +74 +20 +6d +6f +64 +65 +00 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +eb +0d +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +60 +73 +27 +20 +69 +73 +20 +61 +6e +20 +69 +6e +73 +74 +72 +75 +63 +74 +69 +6f +6e +20 +69 +6e +20 +36 +34 +2d +62 +69 +74 +20 +6d +6f +64 +65 +00 +60 +73 +27 +20 +69 +6e +76 +61 +6c +69 +64 +20 +69 +6e +20 +36 +34 +2d +62 +69 +74 +20 +6d +6f +64 +65 +00 +d5 +d1 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +d4 +1e +00 +00 +9c +1f +00 +00 +1f +1f +00 +00 +38 +1f +00 +00 +83 +1f +00 +00 +0c +1e +00 +00 +b5 +1f +00 +00 +1a +20 +00 +00 +e8 +1f +00 +00 +01 +20 +00 +00 +e4 +20 +00 +00 +ed +1e +00 +00 +51 +1f +00 +00 +b3 +1d +00 +00 +78 +1e +00 +00 +cf +1f +00 +00 +e4 +20 +00 +00 +06 +1f +00 +00 +f3 +1d +00 +00 +25 +1e +00 +00 +9f +20 +00 +00 +34 +20 +00 +00 +4e +20 +00 +00 +6a +1f +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +e4 +20 +00 +00 +d4 +1e +00 +00 +9c +1f +00 +00 +1f +1f +00 +00 +38 +1f +00 +00 +83 +1f +00 +00 +0c +1e +00 +00 +b5 +1f +00 +00 +1a +20 +00 +00 +e8 +1f +00 +00 +01 +20 +00 +00 +e4 +20 +00 +00 +ed +1e +00 +00 +51 +1f +00 +00 +b3 +1d +00 +00 +78 +1e +00 +00 +cf +1f +00 +00 +e4 +20 +00 +00 +06 +1f +00 +00 +f3 +1d +00 +00 +25 +1e +00 +00 +9f +20 +00 +00 +34 +20 +00 +00 +4e +20 +00 +00 +6a +1f +00 +00 +ec +bf +00 +00 +3f +c0 +00 +00 +59 +c0 +00 +00 +e7 +20 +00 +00 +73 +c0 +00 +00 +8d +c0 +00 +00 +a7 +c0 +00 +00 +c1 +c0 +00 +00 +da +c0 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +34 +c1 +00 +00 +4e +c1 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +8e +c1 +00 +00 +c1 +c1 +00 +00 +e7 +20 +00 +00 +db +c1 +00 +00 +0f +c2 +00 +00 +28 +c2 +00 +00 +42 +c2 +00 +00 +95 +c2 +00 +00 +e7 +20 +00 +00 +af +c2 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ec +bf +00 +00 +3f +c0 +00 +00 +59 +c0 +00 +00 +e7 +20 +00 +00 +73 +c0 +00 +00 +8d +c0 +00 +00 +a7 +c0 +00 +00 +c1 +c0 +00 +00 +da +c0 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +34 +c1 +00 +00 +4e +c1 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +8e +c1 +00 +00 +c1 +c1 +00 +00 +e7 +20 +00 +00 +db +c1 +00 +00 +0f +c2 +00 +00 +28 +c2 +00 +00 +42 +c2 +00 +00 +95 +c2 +00 +00 +e7 +20 +00 +00 +af +c2 +00 +00 +e3 +a2 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +fd +a2 +00 +00 +50 +a3 +00 +00 +90 +a3 +00 +00 +fe +a3 +00 +00 +3e +a4 +00 +00 +58 +a4 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +72 +a4 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +8b +a4 +00 +00 +a5 +a4 +00 +00 +bf +a4 +00 +00 +e7 +20 +00 +00 +2e +a5 +00 +00 +e7 +20 +00 +00 +81 +a5 +00 +00 +c1 +a5 +00 +00 +a9 +a6 +00 +00 +c3 +a6 +00 +00 +e7 +20 +00 +00 +dd +a6 +00 +00 +f7 +a6 +00 +00 +78 +a7 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +fd +a2 +00 +00 +50 +a3 +00 +00 +90 +a3 +00 +00 +fe +a3 +00 +00 +3e +a4 +00 +00 +58 +a4 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +72 +a4 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +8b +a4 +00 +00 +a5 +a4 +00 +00 +bf +a4 +00 +00 +e7 +20 +00 +00 +2e +a5 +00 +00 +e7 +20 +00 +00 +81 +a5 +00 +00 +c1 +a5 +00 +00 +a9 +a6 +00 +00 +c3 +a6 +00 +00 +e7 +20 +00 +00 +dd +a6 +00 +00 +f7 +a6 +00 +00 +78 +a7 +00 +00 +37 +9b +00 +00 +e7 +20 +00 +00 +48 +9b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +59 +9b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +6a +9b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d9 +9b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +18 +9c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +2d +9c +00 +00 +e7 +20 +00 +00 +42 +9c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +54 +9c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +66 +9c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +6a +9b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d9 +9b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +18 +9c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +2d +9c +00 +00 +e7 +20 +00 +00 +42 +9c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +54 +9c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +66 +9c +00 +00 +5b +93 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +9b +93 +00 +00 +db +93 +00 +00 +1b +94 +00 +00 +5b +94 +00 +00 +e7 +20 +00 +00 +9b +94 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +b5 +94 +00 +00 +cf +94 +00 +00 +e7 +20 +00 +00 +e9 +94 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +57 +95 +00 +00 +89 +95 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +5b +93 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +9b +93 +00 +00 +db +93 +00 +00 +1b +94 +00 +00 +5b +94 +00 +00 +e7 +20 +00 +00 +9b +94 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +b5 +94 +00 +00 +cf +94 +00 +00 +e7 +20 +00 +00 +e9 +94 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +57 +95 +00 +00 +89 +95 +00 +00 +10 +8a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +2a +8a +00 +00 +2a +8a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a3 +8a +00 +00 +bd +8a +00 +00 +fd +8a +00 +00 +6c +8b +00 +00 +85 +8b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +c5 +8b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +df +8b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +1f +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a3 +8a +00 +00 +bd +8a +00 +00 +fd +8a +00 +00 +6c +8b +00 +00 +85 +8b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +c5 +8b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +df +8b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +1f +8c +00 +00 +4c +6c +00 +00 +66 +6c +00 +00 +e7 +20 +00 +00 +80 +6c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +c0 +6c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d5 +6c +00 +00 +90 +6d +00 +00 +e7 +20 +00 +00 +ec +6d +00 +00 +06 +6e +00 +00 +e7 +20 +00 +00 +20 +6e +00 +00 +44 +6e +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +59 +6e +00 +00 +6f +6e +00 +00 +81 +6e +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +4c +6c +00 +00 +66 +6c +00 +00 +e7 +20 +00 +00 +80 +6c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +c0 +6c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d5 +6c +00 +00 +90 +6d +00 +00 +e7 +20 +00 +00 +ec +6d +00 +00 +06 +6e +00 +00 +e7 +20 +00 +00 +20 +6e +00 +00 +44 +6e +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +59 +6e +00 +00 +6f +6e +00 +00 +81 +6e +00 +00 +39 +69 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +79 +69 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +93 +69 +00 +00 +a8 +69 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +02 +6a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +17 +6a +00 +00 +2d +6a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +5c +6a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +39 +69 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +79 +69 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +93 +69 +00 +00 +a8 +69 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +02 +6a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +17 +6a +00 +00 +2d +6a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +5c +6a +00 +00 +63 +5b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a3 +5b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +bd +5b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d7 +5b +00 +00 +e7 +20 +00 +00 +f1 +5b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +0b +5c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +63 +5b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a3 +5b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +bd +5b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d7 +5b +00 +00 +e7 +20 +00 +00 +f1 +5b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +0b +5c +00 +00 +d2 +58 +00 +00 +ec +58 +00 +00 +06 +59 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +20 +59 +00 +00 +3a +59 +00 +00 +e7 +20 +00 +00 +54 +59 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d2 +58 +00 +00 +ec +58 +00 +00 +06 +59 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +20 +59 +00 +00 +3a +59 +00 +00 +e7 +20 +00 +00 +54 +59 +00 +00 +71 +56 +00 +00 +8b +56 +00 +00 +cb +56 +00 +00 +e5 +56 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +25 +57 +00 +00 +3f +57 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +59 +57 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +71 +56 +00 +00 +8b +56 +00 +00 +cb +56 +00 +00 +e5 +56 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +25 +57 +00 +00 +3f +57 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +59 +57 +00 +00 +ff +53 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +14 +54 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +29 +54 +00 +00 +43 +54 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +76 +54 +00 +00 +c9 +54 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +25 +55 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ff +53 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +14 +54 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +29 +54 +00 +00 +43 +54 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +76 +54 +00 +00 +c9 +54 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +25 +55 +00 +00 +9c +2e +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +2f +2f +00 +00 +49 +2f +00 +00 +63 +2f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +7c +2f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a9 +2f +00 +00 +e7 +20 +00 +00 +47 +30 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +87 +30 +00 +00 +a1 +30 +00 +00 +e7 +20 +00 +00 +ba +30 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ec +30 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +9c +2e +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +2f +2f +00 +00 +49 +2f +00 +00 +63 +2f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +7c +2f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a9 +2f +00 +00 +e7 +20 +00 +00 +47 +30 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +87 +30 +00 +00 +a1 +30 +00 +00 +e7 +20 +00 +00 +ba +30 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ec +30 +00 +00 +6c +2a +00 +00 +e7 +20 +00 +00 +86 +2a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a0 +2a +00 +00 +ba +2a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +37 +2b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +6c +2a +00 +00 +e7 +20 +00 +00 +86 +2a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a0 +2a +00 +00 +ba +2a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +37 +2b +00 +00 +a7 +25 +00 +00 +d3 +25 +00 +00 +ff +25 +00 +00 +e7 +20 +00 +00 +2b +26 +00 +00 +e7 +20 +00 +00 +57 +26 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +83 +26 +00 +00 +af +26 +00 +00 +c9 +26 +00 +00 +e2 +26 +00 +00 +fe +26 +00 +00 +e7 +20 +00 +00 +4a +27 +00 +00 +5c +27 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +78 +27 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a7 +25 +00 +00 +d3 +25 +00 +00 +ff +25 +00 +00 +e7 +20 +00 +00 +2b +26 +00 +00 +e7 +20 +00 +00 +57 +26 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +83 +26 +00 +00 +af +26 +00 +00 +c9 +26 +00 +00 +e2 +26 +00 +00 +fe +26 +00 +00 +e7 +20 +00 +00 +4a +27 +00 +00 +5c +27 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +78 +27 +00 +00 +17 +28 +00 +00 +43 +28 +00 +00 +50 +2a +00 +00 +e7 +20 +00 +00 +6f +28 +00 +00 +e7 +20 +00 +00 +c3 +28 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e8 +28 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +fb +27 +00 +00 +a7 +28 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +8b +28 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +6f +28 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +17 +28 +00 +00 +43 +28 +00 +00 +50 +2a +00 +00 +e7 +20 +00 +00 +6f +28 +00 +00 +e7 +20 +00 +00 +c3 +28 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e8 +28 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +fb +27 +00 +00 +a7 +28 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +8b +28 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +6f +28 +00 +00 +c8 +46 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e2 +46 +00 +00 +e7 +20 +00 +00 +21 +47 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +3b +47 +00 +00 +8e +47 +00 +00 +e7 +20 +00 +00 +a8 +47 +00 +00 +e7 +20 +00 +00 +c2 +47 +00 +00 +ff +47 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e2 +46 +00 +00 +e7 +20 +00 +00 +21 +47 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +3b +47 +00 +00 +8e +47 +00 +00 +e7 +20 +00 +00 +a8 +47 +00 +00 +e7 +20 +00 +00 +c2 +47 +00 +00 +ff +47 +00 +00 +5c +36 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +76 +36 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e8 +35 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +02 +36 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +42 +36 +00 +00 +e7 +20 +00 +00 +88 +36 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +5c +36 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +76 +36 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e8 +35 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +02 +36 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +42 +36 +00 +00 +e7 +20 +00 +00 +88 +36 +00 +00 +22 +38 +00 +00 +e7 +20 +00 +00 +5a +38 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +76 +38 +00 +00 +e7 +20 +00 +00 +92 +38 +00 +00 +e7 +20 +00 +00 +e5 +38 +00 +00 +e7 +20 +00 +00 +3e +38 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +22 +38 +00 +00 +e7 +20 +00 +00 +5a +38 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +76 +38 +00 +00 +e7 +20 +00 +00 +92 +38 +00 +00 +e7 +20 +00 +00 +e5 +38 +00 +00 +e7 +20 +00 +00 +3e +38 +00 +00 +4c +4f +00 +00 +e7 +20 +00 +00 +84 +4f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a0 +4f +00 +00 +e7 +20 +00 +00 +bc +4f +00 +00 +e7 +20 +00 +00 +0f +50 +00 +00 +e7 +20 +00 +00 +68 +4f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +4c +4f +00 +00 +e7 +20 +00 +00 +84 +4f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a0 +4f +00 +00 +e7 +20 +00 +00 +bc +4f +00 +00 +e7 +20 +00 +00 +0f +50 +00 +00 +e7 +20 +00 +00 +68 +4f +00 +00 +d1 +60 +00 +00 +e7 +20 +00 +00 +09 +61 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +25 +61 +00 +00 +e7 +20 +00 +00 +4e +61 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ed +60 +00 +00 +97 +60 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d1 +60 +00 +00 +e7 +20 +00 +00 +09 +61 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +25 +61 +00 +00 +e7 +20 +00 +00 +4e +61 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ed +60 +00 +00 +97 +60 +00 +00 +72 +79 +00 +00 +46 +79 +00 +00 +64 +7c +00 +00 +e7 +20 +00 +00 +9e +79 +00 +00 +e7 +20 +00 +00 +44 +7a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +1f +7a +00 +00 +e7 +20 +00 +00 +2d +79 +00 +00 +11 +79 +00 +00 +d6 +79 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ba +79 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +9e +79 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +72 +79 +00 +00 +46 +79 +00 +00 +64 +7c +00 +00 +e7 +20 +00 +00 +9e +79 +00 +00 +e7 +20 +00 +00 +44 +7a +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +1f +7a +00 +00 +e7 +20 +00 +00 +2d +79 +00 +00 +11 +79 +00 +00 +d6 +79 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ba +79 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +9e +79 +00 +00 +ae +7a +00 +00 +e8 +7a +00 +00 +10 +7b +00 +00 +e7 +20 +00 +00 +f4 +7b +00 +00 +e7 +20 +00 +00 +2c +7b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +66 +7b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a0 +7b +00 +00 +bc +7b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d8 +7b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +f4 +7b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ae +7a +00 +00 +e8 +7a +00 +00 +10 +7b +00 +00 +e7 +20 +00 +00 +f4 +7b +00 +00 +e7 +20 +00 +00 +2c +7b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +66 +7b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a0 +7b +00 +00 +bc +7b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d8 +7b +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +f4 +7b +00 +00 +ba +7f +00 +00 +e7 +20 +00 +00 +f2 +7f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +07 +80 +00 +00 +e7 +20 +00 +00 +30 +80 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d6 +7f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ba +7f +00 +00 +e7 +20 +00 +00 +f2 +7f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +07 +80 +00 +00 +e7 +20 +00 +00 +30 +80 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +d6 +7f +00 +00 +8f +8f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +cb +8f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e5 +8f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +f7 +8f +00 +00 +b1 +8f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +6d +8f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +8f +8f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +cb +8f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e5 +8f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +f7 +8f +00 +00 +b1 +8f +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +6d +8f +00 +00 +b9 +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +5a +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +cb +8c +00 +00 +7c +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +38 +8c +00 +00 +9f +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +dd +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +b9 +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +5a +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +cb +8c +00 +00 +7c +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +38 +8c +00 +00 +9f +8c +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +dd +8c +00 +00 +50 +b6 +00 +00 +e7 +20 +00 +00 +36 +b6 +00 +00 +84 +b6 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +dd +b5 +00 +00 +6a +b6 +00 +00 +9e +b6 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +f7 +b5 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +50 +b6 +00 +00 +e7 +20 +00 +00 +36 +b6 +00 +00 +84 +b6 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +dd +b5 +00 +00 +6a +b6 +00 +00 +9e +b6 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +f7 +b5 +00 +00 +81 +cb +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +67 +cb +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ad +cb +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +cb +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +81 +cb +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +67 +cb +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ad +cb +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +cb +00 +00 +b4 +c6 +00 +00 +b4 +c6 +00 +00 +b4 +c6 +00 +00 +b4 +c6 +00 +00 +b4 +c6 +00 +00 +b4 +c6 +00 +00 +b4 +c6 +00 +00 +b4 +c6 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +cf +c6 +00 +00 +eb +c6 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +07 +c7 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +60 +c7 +00 +00 +e7 +20 +00 +00 +23 +c7 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +3d +c7 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +cf +c6 +00 +00 +eb +c6 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +07 +c7 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +60 +c7 +00 +00 +e7 +20 +00 +00 +23 +c7 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +3d +c7 +00 +00 +82 +cd +00 +00 +ae +cd +00 +00 +62 +d0 +00 +00 +e7 +20 +00 +00 +c5 +ce +00 +00 +e7 +20 +00 +00 +da +cd +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +06 +ce +00 +00 +e7 +20 +00 +00 +32 +ce +00 +00 +4b +ce +00 +00 +67 +ce +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a9 +ce +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +c5 +ce +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +82 +cd +00 +00 +ae +cd +00 +00 +62 +d0 +00 +00 +e7 +20 +00 +00 +c5 +ce +00 +00 +e7 +20 +00 +00 +da +cd +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +06 +ce +00 +00 +e7 +20 +00 +00 +32 +ce +00 +00 +4b +ce +00 +00 +67 +ce +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +a9 +ce +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +c5 +ce +00 +00 +19 +cf +00 +00 +45 +cf +00 +00 +d2 +d0 +00 +00 +e7 +20 +00 +00 +71 +cf +00 +00 +e7 +20 +00 +00 +c5 +cf +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ea +cf +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +fd +ce +00 +00 +a9 +cf +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +8d +cf +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +71 +cf +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +19 +cf +00 +00 +45 +cf +00 +00 +d2 +d0 +00 +00 +e7 +20 +00 +00 +71 +cf +00 +00 +e7 +20 +00 +00 +c5 +cf +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +ea +cf +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +fd +ce +00 +00 +a9 +cf +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +8d +cf +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +e7 +20 +00 +00 +71 +cf +00 +00 +64 +36 +00 +00 +01 +0c +0b +00 +68 +36 +00 +00 +01 +0c +0b +00 +6c +36 +00 +00 +01 +0c +0b +00 +70 +36 +00 +00 +01 +0c +0b +00 +74 +36 +00 +00 +01 +0c +0b +00 +78 +36 +00 +00 +01 +0c +0b +00 +7c +36 +00 +00 +01 +0c +0b +00 +80 +36 +00 +00 +01 +0c +0b +00 +84 +36 +00 +00 +01 +0c +0b +00 +88 +36 +00 +00 +01 +0c +0b +00 +8c +36 +00 +00 +01 +0c +0b +00 +90 +36 +00 +00 +01 +0c +0b +00 +94 +36 +00 +00 +01 +0c +0b +00 +98 +36 +00 +00 +01 +0c +0b +00 +9c +36 +00 +00 +01 +0c +0b +00 +a0 +36 +00 +00 +01 +0c +0b +00 +a4 +36 +00 +00 +01 +0c +0b +00 +a8 +36 +00 +00 +01 +0c +0b +00 +ac +36 +00 +00 +01 +0c +0b +00 +b0 +36 +00 +00 +01 +0c +0b +00 +b4 +36 +00 +00 +01 +0c +0b +00 +b8 +36 +00 +00 +01 +0c +0b +00 +e0 +36 +00 +00 +01 +0c +0b +00 +e4 +36 +00 +00 +01 +0c +0b +00 +e8 +36 +00 +00 +01 +0c +0b +00 +ec +36 +00 +00 +01 +0c +0b +00 +f0 +36 +00 +00 +01 +0c +0b +00 +f4 +36 +00 +00 +01 +0c +0b +00 +f8 +36 +00 +00 +01 +0c +0b +00 +fc +36 +00 +00 +01 +0c +0b +00 +00 +37 +00 +00 +01 +0c +0b +00 +04 +37 +00 +00 +01 +0c +0b +00 +08 +37 +00 +00 +01 +0c +0b +00 +0c +37 +00 +00 +01 +0c +0b +00 +10 +37 +00 +00 +01 +0c +0b +00 +14 +37 +00 +00 +01 +0c +0b +00 +18 +37 +00 +00 +01 +0c +0b +00 +1c +37 +00 +00 +01 +0c +0b +00 +20 +37 +00 +00 +01 +0c +0b +00 +24 +37 +00 +00 +01 +0c +0b +00 +28 +37 +00 +00 +01 +0c +0b +00 +2c +37 +00 +00 +01 +0c +0b +00 +30 +37 +00 +00 +01 +0c +0b +00 +34 +37 +00 +00 +01 +0c +0b +00 +38 +37 +00 +00 +01 +0c +0b +00 +3c +37 +00 +00 +01 +0c +0b +00 +40 +37 +00 +00 +01 +0c +0b +00 +44 +37 +00 +00 +01 +0c +0b +00 +48 +37 +00 +00 +01 +0c +0b +00 +4c +37 +00 +00 +01 +0c +0b +00 +50 +37 +00 +00 +01 +0c +0b +00 +54 +37 +00 +00 +01 +0c +0b +00 +58 +37 +00 +00 +01 +0c +0b +00 +5c +37 +00 +00 +01 +0c +0b +00 +60 +37 +00 +00 +01 +0c +0b +00 +64 +37 +00 +00 +01 +0c +0b +00 +68 +37 +00 +00 +01 +0c +0b +00 +6c +37 +00 +00 +01 +0c +0b +00 +70 +37 +00 +00 +01 +0c +0b +00 +74 +37 +00 +00 +01 +0c +0b +00 +78 +37 +00 +00 +01 +0c +0b +00 +7c +37 +00 +00 +01 +0c +0b +00 +80 +37 +00 +00 +01 +0c +0b +00 +84 +37 +00 +00 +01 +0c +0b +00 +88 +37 +00 +00 +01 +0c +0b +00 +8c +37 +00 +00 +01 +0c +0b +00 +90 +37 +00 +00 +01 +0c +0b +00 +94 +37 +00 +00 +01 +0c +0b +00 +98 +37 +00 +00 +01 +0c +0b +00 +9c +37 +00 +00 +01 +0c +0b +00 +a0 +37 +00 +00 +01 +0c +0b +00 +a4 +37 +00 +00 +01 +0c +0b +00 +a8 +37 +00 +00 +01 +0c +0b +00 +ac +37 +00 +00 +01 +0c +0b +00 +b0 +37 +00 +00 +01 +0c +0b +00 +b4 +37 +00 +00 +01 +0c +0b +00 +b8 +37 +00 +00 +01 +0c +0b +00 +bc +37 +00 +00 +01 +0c +0b +00 +c0 +37 +00 +00 +01 +0c +0b +00 +c4 +37 +00 +00 +01 +0c +0b +00 +c8 +37 +00 +00 +01 +0c +0b +00 +cc +37 +00 +00 +01 +0c +0b +00 +d0 +37 +00 +00 +01 +0c +0b +00 +d4 +37 +00 +00 +01 +0c +0b +00 +d8 +37 +00 +00 +01 +0c +0b +00 +dc +37 +00 +00 +01 +0c +0b +00 +e0 +37 +00 +00 +01 +0c +0b +00 +e4 +37 +00 +00 +01 +0c +0b +00 +e8 +37 +00 +00 +01 +0c +0b +00 +ec +37 +00 +00 +01 +0c +0b +00 +f0 +37 +00 +00 +01 +0c +0b +00 +f4 +37 +00 +00 +01 +0c +0b +00 +f8 +37 +00 +00 +01 +0c +0b +00 +fc +37 +00 +00 +01 +0c +0b +00 +00 +38 +00 +00 +01 +0c +0b +00 +04 +38 +00 +00 +01 +0c +0b +00 +08 +38 +00 +00 +01 +0c +0b +00 +0c +38 +00 +00 +01 +0c +0b +00 +10 +38 +00 +00 +01 +0c +0b +00 +14 +38 +00 +00 +01 +0c +0b +00 +18 +38 +00 +00 +01 +0c +0b +00 +1c +38 +00 +00 +01 +0c +0b +00 +20 +38 +00 +00 +01 +0c +0b +00 +24 +38 +00 +00 +01 +0c +0b +00 +28 +38 +00 +00 +01 +0c +0b +00 +2c +38 +00 +00 +01 +0c +0b +00 +30 +38 +00 +00 +01 +0c +0b +00 +34 +38 +00 +00 +01 +0c +0b +00 +38 +38 +00 +00 +01 +0c +0b +00 +3c +38 +00 +00 +01 +0c +0b +00 +40 +38 +00 +00 +01 +0c +0b +00 +44 +38 +00 +00 +01 +0c +0b +00 +48 +38 +00 +00 +01 +0c +0b +00 +4c +38 +00 +00 +01 +0c +0b +00 +50 +38 +00 +00 +01 +0c +0b +00 +54 +38 +00 +00 +01 +0c +0b +00 +58 +38 +00 +00 +01 +0c +0b +00 +5c +38 +00 +00 +01 +0c +0b +00 +60 +38 +00 +00 +01 +0c +0b +00 +64 +38 +00 +00 +01 +0c +0b +00 +68 +38 +00 +00 +01 +0c +0b +00 +6c +38 +00 +00 +01 +0c +0b +00 +70 +38 +00 +00 +01 +0c +0b +00 +74 +38 +00 +00 +01 +0c +0b +00 +78 +38 +00 +00 +01 +0c +0b +00 +7c +38 +00 +00 +01 +0c +0b +00 +80 +38 +00 +00 +01 +0c +0b +00 +84 +38 +00 +00 +01 +0c +0b +00 +88 +38 +00 +00 +01 +0c +0b +00 +8c +38 +00 +00 +01 +0c +0b +00 +90 +38 +00 +00 +01 +0c +0b +00 +94 +38 +00 +00 +01 +0c +0b +00 +98 +38 +00 +00 +01 +0c +0b +00 +9c +38 +00 +00 +01 +0c +0b +00 +a0 +38 +00 +00 +01 +0c +0b +00 +a4 +38 +00 +00 +01 +0c +0b +00 +a8 +38 +00 +00 +01 +0c +0b +00 +ac +38 +00 +00 +01 +0c +0b +00 +b0 +38 +00 +00 +01 +0c +0b +00 +b4 +38 +00 +00 +01 +0c +0b +00 +b8 +38 +00 +00 +01 +0c +0b +00 +bc +38 +00 +00 +01 +0c +0b +00 +c0 +38 +00 +00 +01 +0c +0b +00 +c4 +38 +00 +00 +01 +0c +0b +00 +c8 +38 +00 +00 +01 +0c +0b +00 +cc +38 +00 +00 +01 +0c +0b +00 +d0 +38 +00 +00 +01 +0c +0b +00 +d4 +38 +00 +00 +01 +0c +0b +00 +d8 +38 +00 +00 +01 +0c +0b +00 +dc +38 +00 +00 +01 +0c +0b +00 +e0 +38 +00 +00 +01 +0c +0b +00 +e4 +38 +00 +00 +01 +0c +0b +00 +e8 +38 +00 +00 +01 +0c +0b +00 +ec +38 +00 +00 +01 +0c +0b +00 +f0 +38 +00 +00 +01 +0c +0b +00 +f4 +38 +00 +00 +01 +0c +0b +00 +f8 +38 +00 +00 +01 +0c +0b +00 +fc +38 +00 +00 +01 +0c +0b +00 +00 +39 +00 +00 +01 +0c +0b +00 +04 +39 +00 +00 +01 +0c +0b +00 +08 +39 +00 +00 +01 +0c +0b +00 +0c +39 +00 +00 +01 +0c +0b +00 +10 +39 +00 +00 +01 +0c +0b +00 +14 +39 +00 +00 +01 +0c +0b +00 +18 +39 +00 +00 +01 +0c +0b +00 +1c +39 +00 +00 +01 +0c +0b +00 +20 +39 +00 +00 +01 +0c +0b +00 +24 +39 +00 +00 +01 +0c +0b +00 +28 +39 +00 +00 +01 +0c +0b +00 +2c +39 +00 +00 +01 +0c +0b +00 +30 +39 +00 +00 +01 +0c +0b +00 +34 +39 +00 +00 +01 +0c +0b +00 +38 +39 +00 +00 +01 +0c +0b +00 +3c +39 +00 +00 +01 +0c +0b +00 +40 +39 +00 +00 +01 +0c +0b +00 +44 +39 +00 +00 +01 +0c +0b +00 +48 +39 +00 +00 +01 +0c +0b +00 +4c +39 +00 +00 +01 +0c +0b +00 +50 +39 +00 +00 +01 +0c +0b +00 +54 +39 +00 +00 +01 +0c +0b +00 +58 +39 +00 +00 +01 +0c +0b +00 +5c +39 +00 +00 +01 +0c +0b +00 +60 +39 +00 +00 +01 +0c +0b +00 +64 +39 +00 +00 +01 +0c +0b +00 +68 +39 +00 +00 +01 +0c +0b +00 +6c +39 +00 +00 +01 +0c +0b +00 +70 +39 +00 +00 +01 +0c +0b +00 +74 +39 +00 +00 +01 +0c +0b +00 +78 +39 +00 +00 +01 +0c +0b +00 +7c +39 +00 +00 +01 +0c +0b +00 +80 +39 +00 +00 +01 +0c +0b +00 +84 +39 +00 +00 +01 +0c +0b +00 +88 +39 +00 +00 +01 +0c +0b +00 +8c +39 +00 +00 +01 +0c +0b +00 +90 +39 +00 +00 +01 +0c +0b +00 +94 +39 +00 +00 +01 +0c +0b +00 +98 +39 +00 +00 +01 +0c +0b +00 +9c +39 +00 +00 +01 +0c +0b +00 +a0 +39 +00 +00 +01 +0c +0b +00 +a4 +39 +00 +00 +01 +0c +0b +00 +a8 +39 +00 +00 +01 +0c +0b +00 +ac +39 +00 +00 +01 +0c +0b +00 +b0 +39 +00 +00 +01 +0c +0b +00 +b4 +39 +00 +00 +01 +0c +0b +00 +b8 +39 +00 +00 +01 +0c +0b +00 +bc +39 +00 +00 +01 +0c +0b +00 +c0 +39 +00 +00 +01 +0c +0b +00 +c4 +39 +00 +00 +01 +0c +0b +00 +c8 +39 +00 +00 +01 +0c +0b +00 +00 +3b +00 +00 +01 +0c +0b +00 +04 +3b +00 +00 +01 +0c +0b +00 +08 +3b +00 +00 +01 +0c +0b +00 +0c +3b +00 +00 +01 +0c +0b +00 +10 +3b +00 +00 +01 +0c +0b +00 +14 +3b +00 +00 +01 +0c +0b +00 +18 +3b +00 +00 +01 +0c +0b +00 +1c +3b +00 +00 +01 +0c +0b +00 +20 +3b +00 +00 +01 +0c +0b +00 +24 +3b +00 +00 +01 +0c +0b +00 +28 +3b +00 +00 +01 +0c +0b +00 +2c +3b +00 +00 +01 +0c +0b +00 +30 +3b +00 +00 +01 +0c +0b +00 +34 +3b +00 +00 +01 +0c +0b +00 +38 +3b +00 +00 +01 +0c +0b +00 +3c +3b +00 +00 +01 +0c +0b +00 +40 +3b +00 +00 +01 +0c +0b +00 +44 +3b +00 +00 +01 +0c +0b +00 +48 +3b +00 +00 +01 +0c +0b +00 +4c +3b +00 +00 +01 +0c +0b +00 +50 +3b +00 +00 +01 +0c +0b +00 +54 +3b +00 +00 +01 +0c +0b +00 +58 +3b +00 +00 +01 +0c +0b +00 +5c +3b +00 +00 +01 +0c +0b +00 +60 +3b +00 +00 +01 +0c +0b +00 +64 +3b +00 +00 +01 +0c +0b +00 +68 +3b +00 +00 +01 +0c +0b +00 +6c +3b +00 +00 +01 +0c +0b +00 +70 +3b +00 +00 +01 +0c +0b +00 +74 +3b +00 +00 +01 +0c +0b +00 +78 +3b +00 +00 +01 +0c +0b +00 +7c +3b +00 +00 +01 +0c +0b +00 +80 +3b +00 +00 +01 +0c +0b +00 +84 +3b +00 +00 +01 +0c +0b +00 +88 +3b +00 +00 +01 +0c +0b +00 +8c +3b +00 +00 +01 +0c +0b +00 +90 +3b +00 +00 +01 +0c +0b +00 +94 +3b +00 +00 +01 +0c +0b +00 +98 +3b +00 +00 +01 +0c +0b +00 +9c +3b +00 +00 +01 +0c +0b +00 +a0 +3b +00 +00 +01 +0c +0b +00 +a4 +3b +00 +00 +01 +0c +0b +00 +a8 +3b +00 +00 +01 +0c +0b +00 +ac +3b +00 +00 +01 +0c +0b +00 +b0 +3b +00 +00 +01 +0c +0b +00 +b4 +3b +00 +00 +01 +0c +0b +00 +b8 +3b +00 +00 +01 +0c +0b +00 +bc +3b +00 +00 +01 +0c +0b +00 +c0 +3b +00 +00 +01 +0c +0b +00 +c4 +3b +00 +00 +01 +0c +0b +00 +c8 +3b +00 +00 +01 +0c +0b +00 +cc +3b +00 +00 +01 +0c +0b +00 +d0 +3b +00 +00 +01 +0c +0b +00 +d4 +3b +00 +00 +01 +0c +0b +00 +d8 +3b +00 +00 +01 +0c +0b +00 +dc +3b +00 +00 +01 +0c +0b +00 +e0 +3b +00 +00 +01 +0c +0b +00 +e4 +3b +00 +00 +01 +0c +0b +00 +e8 +3b +00 +00 +01 +0c +0b +00 +ec +3b +00 +00 +01 +0c +0b +00 +f0 +3b +00 +00 +01 +0c +0b +00 +f4 +3b +00 +00 +01 +0c +0b +00 +f8 +3b +00 +00 +01 +0c +0b +00 +fc +3b +00 +00 +01 +0c +0b +00 +00 +3c +00 +00 +01 +0c +0b +00 +04 +3c +00 +00 +01 +0c +0b +00 +08 +3c +00 +00 +01 +0c +0b +00 +0c +3c +00 +00 +01 +0c +0b +00 +10 +3c +00 +00 +01 +0c +0b +00 +14 +3c +00 +00 +01 +0c +0b +00 +18 +3c +00 +00 +01 +0c +0b +00 +1c +3c +00 +00 +01 +0c +0b +00 +20 +3c +00 +00 +01 +0c +0b +00 +24 +3c +00 +00 +01 +0c +0b +00 +28 +3c +00 +00 +01 +0c +0b +00 +2c +3c +00 +00 +01 +0c +0b +00 +30 +3c +00 +00 +01 +0c +0b +00 +34 +3c +00 +00 +01 +0c +0b +00 +38 +3c +00 +00 +01 +0c +0b +00 +3c +3c +00 +00 +01 +0c +0b +00 +40 +3c +00 +00 +01 +0c +0b +00 +44 +3c +00 +00 +01 +0c +0b +00 +48 +3c +00 +00 +01 +0c +0b +00 +4c +3c +00 +00 +01 +0c +0b +00 +50 +3c +00 +00 +01 +0c +0b +00 +54 +3c +00 +00 +01 +0c +0b +00 +58 +3c +00 +00 +01 +0c +0b +00 +5c +3c +00 +00 +01 +0c +0b +00 +60 +3c +00 +00 +01 +0c +0b +00 +64 +3c +00 +00 +01 +0c +0b +00 +68 +3c +00 +00 +01 +0c +0b +00 +6c +3c +00 +00 +01 +0c +0b +00 +70 +3c +00 +00 +01 +0c +0b +00 +74 +3c +00 +00 +01 +0c +0b +00 +78 +3c +00 +00 +01 +0c +0b +00 +7c +3c +00 +00 +01 +0c +0b +00 +80 +3c +00 +00 +01 +0c +0b +00 +84 +3c +00 +00 +01 +0c +0b +00 +88 +3c +00 +00 +01 +0c +0b +00 +8c +3c +00 +00 +01 +0c +0b +00 +90 +3c +00 +00 +01 +0c +0b +00 +94 +3c +00 +00 +01 +0c +0b +00 +98 +3c +00 +00 +01 +0c +0b +00 +9c +3c +00 +00 +01 +0c +0b +00 +a0 +3c +00 +00 +01 +0c +0b +00 +a4 +3c +00 +00 +01 +0c +0b +00 +a8 +3c +00 +00 +01 +0c +0b +00 +ac +3c +00 +00 +01 +0c +0b +00 +b0 +3c +00 +00 +01 +0c +0b +00 +b4 +3c +00 +00 +01 +0c +0b +00 +b8 +3c +00 +00 +01 +0c +0b +00 +bc +3c +00 +00 +01 +0c +0b +00 +c0 +3c +00 +00 +01 +0c +0b +00 +c4 +3c +00 +00 +01 +0c +0b +00 +c8 +3c +00 +00 +01 +0c +0b +00 +cc +3c +00 +00 +01 +0c +0b +00 +d0 +3c +00 +00 +01 +0c +0b +00 +d4 +3c +00 +00 +01 +0c +0b +00 +d8 +3c +00 +00 +01 +0c +0b +00 +dc +3c +00 +00 +01 +0c +0b +00 +e0 +3c +00 +00 +01 +0c +0b +00 +e4 +3c +00 +00 +01 +0c +0b +00 +e8 +3c +00 +00 +01 +0c +0b +00 +ec +3c +00 +00 +01 +0c +0b +00 +f0 +3c +00 +00 +01 +0c +0b +00 +f4 +3c +00 +00 +01 +0c +0b +00 +f8 +3c +00 +00 +01 +0c +0b +00 +fc +3c +00 +00 +01 +0c +0b +00 +00 +3d +00 +00 +01 +0c +0b +00 +04 +3d +00 +00 +01 +0c +0b +00 +08 +3d +00 +00 +01 +0c +0b +00 +0c +3d +00 +00 +01 +0c +0b +00 +10 +3d +00 +00 +01 +0c +0b +00 +14 +3d +00 +00 +01 +0c +0b +00 +18 +3d +00 +00 +01 +0c +0b +00 +1c +3d +00 +00 +01 +0c +0b +00 +20 +3d +00 +00 +01 +0c +0b +00 +24 +3d +00 +00 +01 +0c +0b +00 +28 +3d +00 +00 +01 +0c +0b +00 +2c +3d +00 +00 +01 +0c +0b +00 +30 +3d +00 +00 +01 +0c +0b +00 +34 +3d +00 +00 +01 +0c +0b +00 +38 +3d +00 +00 +01 +0c +0b +00 +3c +3d +00 +00 +01 +0c +0b +00 +40 +3d +00 +00 +01 +0c +0b +00 +44 +3d +00 +00 +01 +0c +0b +00 +48 +3d +00 +00 +01 +0c +0b +00 +4c +3d +00 +00 +01 +0c +0b +00 +50 +3d +00 +00 +01 +0c +0b +00 +54 +3d +00 +00 +01 +0c +0b +00 +58 +3d +00 +00 +01 +0c +0b +00 +5c +3d +00 +00 +01 +0c +0b +00 +60 +3d +00 +00 +01 +0c +0b +00 +64 +3d +00 +00 +01 +0c +0b +00 +68 +3d +00 +00 +01 +0c +0b +00 +6c +3d +00 +00 +01 +0c +0b +00 +70 +3d +00 +00 +01 +0c +0b +00 +74 +3d +00 +00 +01 +0c +0b +00 +78 +3d +00 +00 +01 +0c +0b +00 +7c +3d +00 +00 +01 +0c +0b +00 +80 +3d +00 +00 +01 +0c +0b +00 +84 +3d +00 +00 +01 +0c +0b +00 +88 +3d +00 +00 +01 +0c +0b +00 +8c +3d +00 +00 +01 +0c +0b +00 +90 +3d +00 +00 +01 +0c +0b +00 +94 +3d +00 +00 +01 +0c +0b +00 +98 +3d +00 +00 +01 +0c +0b +00 +9c +3d +00 +00 +01 +0c +0b +00 +a0 +3d +00 +00 +01 +0c +0b +00 +a4 +3d +00 +00 +01 +0c +0b +00 +a8 +3d +00 +00 +01 +0c +0b +00 +ac +3d +00 +00 +01 +0c +0b +00 +b0 +3d +00 +00 +01 +0c +0b +00 +b4 +3d +00 +00 +01 +0c +0b +00 +b8 +3d +00 +00 +01 +0c +0b +00 +bc +3d +00 +00 +01 +0c +0b +00 +c0 +3d +00 +00 +01 +0c +0b +00 +c4 +3d +00 +00 +01 +0c +0b +00 +c8 +3d +00 +00 +01 +0c +0b +00 +cc +3d +00 +00 +01 +0c +0b +00 +d0 +3d +00 +00 +01 +0c +0b +00 +d4 +3d +00 +00 +01 +0c +0b +00 +d8 +3d +00 +00 +01 +0c +0b +00 +dc +3d +00 +00 +01 +0c +0b +00 +e0 +3d +00 +00 +01 +0c +0b +00 +e4 +3d +00 +00 +01 +0c +0b +00 +e8 +3d +00 +00 +01 +0c +0b +00 +ec +3d +00 +00 +01 +0c +0b +00 +f0 +3d +00 +00 +01 +0c +0b +00 +f4 +3d +00 +00 +01 +0c +0b +00 +f8 +3d +00 +00 +01 +0c +0b +00 +fc +3d +00 +00 +01 +0c +0b +00 +00 +3e +00 +00 +01 +0c +0b +00 +04 +3e +00 +00 +01 +0c +0b +00 +08 +3e +00 +00 +01 +0c +0b +00 +0c +3e +00 +00 +01 +0c +0b +00 +10 +3e +00 +00 +01 +0c +0b +00 +14 +3e +00 +00 +01 +0c +0b +00 +18 +3e +00 +00 +01 +0c +0b +00 +1c +3e +00 +00 +01 +0c +0b +00 +20 +3e +00 +00 +01 +0c +0b +00 +24 +3e +00 +00 +01 +0c +0b +00 +28 +3e +00 +00 +01 +0c +0b +00 +2c +3e +00 +00 +01 +0c +0b +00 +30 +3e +00 +00 +01 +0c +0b +00 +34 +3e +00 +00 +01 +0c +0b +00 +38 +3e +00 +00 +01 +0c +0b +00 +3c +3e +00 +00 +01 +0c +0b +00 +40 +3e +00 +00 +01 +0c +0b +00 +44 +3e +00 +00 +01 +0c +0b +00 +48 +3e +00 +00 +01 +0c +0b +00 +4c +3e +00 +00 +01 +0c +0b +00 +50 +3e +00 +00 +01 +0c +0b +00 +54 +3e +00 +00 +01 +0c +0b +00 +58 +3e +00 +00 +01 +0c +0b +00 +5c +3e +00 +00 +01 +0c +0b +00 +60 +3e +00 +00 +01 +0c +0b +00 +64 +3e +00 +00 +01 +0c +0b +00 +68 +3e +00 +00 +01 +0c +0b +00 +6c +3e +00 +00 +01 +0c +0b +00 +70 +3e +00 +00 +01 +0c +0b +00 +74 +3e +00 +00 +01 +0c +0b +00 +78 +3e +00 +00 +01 +0c +0b +00 +7c +3e +00 +00 +01 +0c +0b +00 +80 +3e +00 +00 +01 +0c +0b +00 +84 +3e +00 +00 +01 +0c +0b +00 +88 +3e +00 +00 +01 +0c +0b +00 +8c +3e +00 +00 +01 +0c +0b +00 +90 +3e +00 +00 +01 +0c +0b +00 +94 +3e +00 +00 +01 +0c +0b +00 +98 +3e +00 +00 +01 +0c +0b +00 +9c +3e +00 +00 +01 +0c +0b +00 +a0 +3e +00 +00 +01 +0c +0b +00 +a4 +3e +00 +00 +01 +0c +0b +00 +a8 +3e +00 +00 +01 +0c +0b +00 +ac +3e +00 +00 +01 +0c +0b +00 +b0 +3e +00 +00 +01 +0c +0b +00 +b4 +3e +00 +00 +01 +0c +0b +00 +b8 +3e +00 +00 +01 +0c +0b +00 +bc +3e +00 +00 +01 +0c +0b +00 +c0 +3e +00 +00 +01 +0c +0b +00 +c4 +3e +00 +00 +01 +0c +0b +00 +c8 +3e +00 +00 +01 +0c +0b +00 +cc +3e +00 +00 +01 +0c +0b +00 +d0 +3e +00 +00 +01 +0c +0b +00 +d4 +3e +00 +00 +01 +0c +0b +00 +d8 +3e +00 +00 +01 +0c +0b +00 +dc +3e +00 +00 +01 +0c +0b +00 +e0 +3e +00 +00 +01 +0c +0b +00 +e4 +3e +00 +00 +01 +0c +0b +00 +e8 +3e +00 +00 +01 +0c +0b +00 +ec +3e +00 +00 +01 +0c +0b +00 +f0 +3e +00 +00 +01 +0c +0b +00 +f4 +3e +00 +00 +01 +0c +0b +00 +f8 +3e +00 +00 +01 +0c +0b +00 +fc +3e +00 +00 +01 +0c +0b +00 +00 +3f +00 +00 +01 +0c +0b +00 +04 +3f +00 +00 +01 +0c +0b +00 +08 +3f +00 +00 +01 +0c +0b +00 +0c +3f +00 +00 +01 +0c +0b +00 +10 +3f +00 +00 +01 +0c +0b +00 +14 +3f +00 +00 +01 +0c +0b +00 +18 +3f +00 +00 +01 +0c +0b +00 +1c +3f +00 +00 +01 +0c +0b +00 +20 +3f +00 +00 +01 +0c +0b +00 +24 +3f +00 +00 +01 +0c +0b +00 +28 +3f +00 +00 +01 +0c +0b +00 +2c +3f +00 +00 +01 +0c +0b +00 +30 +3f +00 +00 +01 +0c +0b +00 +34 +3f +00 +00 +01 +0c +0b +00 +38 +3f +00 +00 +01 +0c +0b +00 +3c +3f +00 +00 +01 +0c +0b +00 +40 +3f +00 +00 +01 +0c +0b +00 +44 +3f +00 +00 +01 +0c +0b +00 +48 +3f +00 +00 +01 +0c +0b +00 +4c +3f +00 +00 +01 +0c +0b +00 +50 +3f +00 +00 +01 +0c +0b +00 +54 +3f +00 +00 +01 +0c +0b +00 +58 +3f +00 +00 +01 +0c +0b +00 +5c +3f +00 +00 +01 +0c +0b +00 +60 +3f +00 +00 +01 +0c +0b +00 +64 +3f +00 +00 +01 +0c +0b +00 +68 +3f +00 +00 +01 +0c +0b +00 +6c +3f +00 +00 +01 +0c +0b +00 +70 +3f +00 +00 +01 +0c +0b +00 +74 +3f +00 +00 +01 +0c +0b +00 +78 +3f +00 +00 +01 +0c +0b +00 +7c +3f +00 +00 +01 +0c +0b +00 +80 +3f +00 +00 +01 +0c +0b +00 +84 +3f +00 +00 +01 +0c +0b +00 +88 +3f +00 +00 +01 +0c +0b +00 +8c +3f +00 +00 +01 +0c +0b +00 +90 +3f +00 +00 +01 +0c +0b +00 +94 +3f +00 +00 +01 +0c +0b +00 +98 +3f +00 +00 +01 +0c +0b +00 +9c +3f +00 +00 +01 +0c +0b +00 +a0 +3f +00 +00 +01 +0c +0b +00 +a4 +3f +00 +00 +01 +0c +0b +00 +a8 +3f +00 +00 +01 +0c +0b +00 +ac +3f +00 +00 +01 +0c +0b +00 +b0 +3f +00 +00 +01 +0c +0b +00 +b4 +3f +00 +00 +01 +0c +0b +00 +b8 +3f +00 +00 +01 +0c +0b +00 +bc +3f +00 +00 +01 +0c +0b +00 +c0 +3f +00 +00 +01 +0c +0b +00 +c4 +3f +00 +00 +01 +0c +0b +00 +c8 +3f +00 +00 +01 +0c +0b +00 +cc +3f +00 +00 +01 +0c +0b +00 +d0 +3f +00 +00 +01 +0c +0b +00 +d4 +3f +00 +00 +01 +0c +0b +00 +d8 +3f +00 +00 +01 +0c +0b +00 +dc +3f +00 +00 +01 +0c +0b +00 +e0 +3f +00 +00 +01 +0c +0b +00 +e4 +3f +00 +00 +01 +0c +0b +00 +e8 +3f +00 +00 +01 +0c +0b +00 +ec +3f +00 +00 +01 +0c +0b +00 +f0 +3f +00 +00 +01 +0c +0b +00 +f4 +3f +00 +00 +01 +0c +0b +00 +f8 +3f +00 +00 +01 +0c +0b +00 +fc +3f +00 +00 +01 +0c +0b +00 +00 +40 +00 +00 +01 +0c +0b +00 +04 +40 +00 +00 +01 +0c +0b +00 +08 +40 +00 +00 +01 +0c +0b +00 +0c +40 +00 +00 +01 +0c +0b +00 +10 +40 +00 +00 +01 +0c +0b +00 +14 +40 +00 +00 +01 +0c +0b +00 +18 +40 +00 +00 +01 +0c +0b +00 +1c +40 +00 +00 +01 +0c +0b +00 +20 +40 +00 +00 +01 +0c +0b +00 +24 +40 +00 +00 +01 +0c +0b +00 +28 +40 +00 +00 +01 +0c +0b +00 +2c +40 +00 +00 +01 +0c +0b +00 +30 +40 +00 +00 +01 +0c +0b +00 +34 +40 +00 +00 +01 +0c +0b +00 +38 +40 +00 +00 +01 +0c +0b +00 +3c +40 +00 +00 +01 +0c +0b +00 +40 +40 +00 +00 +01 +0c +0b +00 +44 +40 +00 +00 +01 +0c +0b +00 +48 +40 +00 +00 +01 +0c +0b +00 +4c +40 +00 +00 +01 +0c +0b +00 +50 +40 +00 +00 +01 +0c +0b +00 +54 +40 +00 +00 +01 +0c +0b +00 +58 +40 +00 +00 +01 +0c +0b +00 +5c +40 +00 +00 +01 +0c +0b +00 +60 +40 +00 +00 +01 +0c +0b +00 +64 +40 +00 +00 +01 +0c +0b +00 +68 +40 +00 +00 +01 +0c +0b +00 +6c +40 +00 +00 +01 +0c +0b +00 +70 +40 +00 +00 +01 +0c +0b +00 +74 +40 +00 +00 +01 +0c +0b +00 +78 +40 +00 +00 +01 +0c +0b +00 +7c +40 +00 +00 +01 +0c +0b +00 +80 +40 +00 +00 +01 +0c +0b +00 +84 +40 +00 +00 +01 +0c +0b +00 +88 +40 +00 +00 +01 +0c +0b +00 +8c +40 +00 +00 +01 +0c +0b +00 +90 +40 +00 +00 +01 +0c +0b +00 +94 +40 +00 +00 +01 +0c +0b +00 +98 +40 +00 +00 +01 +0c +0b +00 +9c +40 +00 +00 +01 +0c +0b +00 +a0 +40 +00 +00 +01 +0c +0b +00 +a4 +40 +00 +00 +01 +0c +0b +00 +a8 +40 +00 +00 +01 +0c +0b +00 +ac +40 +00 +00 +01 +0c +0b +00 +b0 +40 +00 +00 +01 +0c +0b +00 +b4 +40 +00 +00 +01 +0c +0b +00 +b8 +40 +00 +00 +01 +0c +0b +00 +bc +40 +00 +00 +01 +0c +0b +00 +c0 +40 +00 +00 +01 +0c +0b +00 +c4 +40 +00 +00 +01 +0c +0b +00 +c8 +40 +00 +00 +01 +0c +0b +00 +cc +40 +00 +00 +01 +0c +0b +00 +d0 +40 +00 +00 +01 +0c +0b +00 +d4 +40 +00 +00 +01 +0c +0b +00 +d8 +40 +00 +00 +01 +0c +0b +00 +dc +40 +00 +00 +01 +0c +0b +00 +e0 +40 +00 +00 +01 +0c +0b +00 +e4 +40 +00 +00 +01 +0c +0b +00 +e8 +40 +00 +00 +01 +0c +0b +00 +ec +40 +00 +00 +01 +0c +0b +00 +f0 +40 +00 +00 +01 +0c +0b +00 +f4 +40 +00 +00 +01 +0c +0b +00 +f8 +40 +00 +00 +01 +0c +0b +00 +fc +40 +00 +00 +01 +0c +0b +00 +00 +41 +00 +00 +01 +0c +0b +00 +04 +41 +00 +00 +01 +0c +0b +00 +08 +41 +00 +00 +01 +0c +0b +00 +0c +41 +00 +00 +01 +0c +0b +00 +10 +41 +00 +00 +01 +0c +0b +00 +14 +41 +00 +00 +01 +0c +0b +00 +18 +41 +00 +00 +01 +0c +0b +00 +1c +41 +00 +00 +01 +0c +0b +00 +20 +41 +00 +00 +01 +0c +0b +00 +24 +41 +00 +00 +01 +0c +0b +00 +28 +41 +00 +00 +01 +0c +0b +00 +2c +41 +00 +00 +01 +0c +0b +00 +30 +41 +00 +00 +01 +0c +0b +00 +34 +41 +00 +00 +01 +0c +0b +00 +38 +41 +00 +00 +01 +0c +0b +00 +3c +41 +00 +00 +01 +0c +0b +00 +40 +41 +00 +00 +01 +0c +0b +00 +44 +41 +00 +00 +01 +0c +0b +00 +48 +41 +00 +00 +01 +0c +0b +00 +4c +41 +00 +00 +01 +0c +0b +00 +50 +41 +00 +00 +01 +0c +0b +00 +54 +41 +00 +00 +01 +0c +0b +00 +58 +41 +00 +00 +01 +0c +0b +00 +5c +41 +00 +00 +01 +0c +0b +00 +60 +41 +00 +00 +01 +0c +0b +00 +64 +41 +00 +00 +01 +0c +0b +00 +68 +41 +00 +00 +01 +0c +0b +00 +6c +41 +00 +00 +01 +0c +0b +00 +70 +41 +00 +00 +01 +0c +0b +00 +74 +41 +00 +00 +01 +0c +0b +00 +78 +41 +00 +00 +01 +0c +0b +00 +7c +41 +00 +00 +01 +0c +0b +00 +80 +41 +00 +00 +01 +0c +0b +00 +84 +41 +00 +00 +01 +0c +0b +00 +88 +41 +00 +00 +01 +0c +0b +00 +8c +41 +00 +00 +01 +0c +0b +00 +90 +41 +00 +00 +01 +0c +0b +00 +94 +41 +00 +00 +01 +0c +0b +00 +98 +41 +00 +00 +01 +0c +0b +00 +9c +41 +00 +00 +01 +0c +0b +00 +a0 +41 +00 +00 +01 +0c +0b +00 +a4 +41 +00 +00 +01 +0c +0b +00 +a8 +41 +00 +00 +01 +0c +0b +00 +ac +41 +00 +00 +01 +0c +0b +00 +b0 +41 +00 +00 +01 +0c +0b +00 +b4 +41 +00 +00 +01 +0c +0b +00 +b8 +41 +00 +00 +01 +0c +0b +00 +bc +41 +00 +00 +01 +0c +0b +00 +c0 +41 +00 +00 +01 +0c +0b +00 +c4 +41 +00 +00 +01 +0c +0b +00 +c8 +41 +00 +00 +01 +0c +0b +00 +cc +41 +00 +00 +01 +0c +0b +00 +d0 +41 +00 +00 +01 +0c +0b +00 +d4 +41 +00 +00 +01 +0c +0b +00 +d8 +41 +00 +00 +01 +0c +0b +00 +dc +41 +00 +00 +01 +0c +0b +00 +e0 +41 +00 +00 +01 +0c +0b +00 +e4 +41 +00 +00 +01 +0c +0b +00 +e8 +41 +00 +00 +01 +0c +0b +00 +ec +41 +00 +00 +01 +0c +0b +00 +f0 +41 +00 +00 +01 +0c +0b +00 +f4 +41 +00 +00 +01 +0c +0b +00 +f8 +41 +00 +00 +01 +0c +0b +00 +fc +41 +00 +00 +01 +0c +0b +00 +00 +42 +00 +00 +01 +0c +0b +00 +04 +42 +00 +00 +01 +0c +0b +00 +08 +42 +00 +00 +01 +0c +0b +00 +0c +42 +00 +00 +01 +0c +0b +00 +10 +42 +00 +00 +01 +0c +0b +00 +14 +42 +00 +00 +01 +0c +0b +00 +18 +42 +00 +00 +01 +0c +0b +00 +1c +42 +00 +00 +01 +0c +0b +00 +20 +42 +00 +00 +01 +0c +0b +00 +24 +42 +00 +00 +01 +0c +0b +00 +28 +42 +00 +00 +01 +0c +0b +00 +2c +42 +00 +00 +01 +0c +0b +00 +30 +42 +00 +00 +01 +0c +0b +00 +34 +42 +00 +00 +01 +0c +0b +00 +38 +42 +00 +00 +01 +0c +0b +00 +3c +42 +00 +00 +01 +0c +0b +00 +40 +42 +00 +00 +01 +0c +0b +00 +44 +42 +00 +00 +01 +0c +0b +00 +48 +42 +00 +00 +01 +0c +0b +00 +4c +42 +00 +00 +01 +0c +0b +00 +50 +42 +00 +00 +01 +0c +0b +00 +54 +42 +00 +00 +01 +0c +0b +00 +58 +42 +00 +00 +01 +0c +0b +00 +5c +42 +00 +00 +01 +0c +0b +00 +60 +42 +00 +00 +01 +0c +0b +00 +64 +42 +00 +00 +01 +0c +0b +00 +68 +42 +00 +00 +01 +0c +0b +00 +6c +42 +00 +00 +01 +0c +0b +00 +70 +42 +00 +00 +01 +0c +0b +00 +74 +42 +00 +00 +01 +0c +0b +00 +78 +42 +00 +00 +01 +0c +0b +00 +7c +42 +00 +00 +01 +0c +0b +00 +80 +42 +00 +00 +01 +0c +0b +00 +84 +42 +00 +00 +01 +0c +0b +00 +88 +42 +00 +00 +01 +0c +0b +00 +8c +42 +00 +00 +01 +0c +0b +00 +90 +42 +00 +00 +01 +0c +0b +00 +94 +42 +00 +00 +01 +0c +0b +00 +98 +42 +00 +00 +01 +0c +0b +00 +9c +42 +00 +00 +01 +0c +0b +00 +a0 +42 +00 +00 +01 +0c +0b +00 +a4 +42 +00 +00 +01 +0c +0b +00 +a8 +42 +00 +00 +01 +0c +0b +00 +ac +42 +00 +00 +01 +0c +0b +00 +b0 +42 +00 +00 +01 +0c +0b +00 +b4 +42 +00 +00 +01 +0c +0b +00 +b8 +42 +00 +00 +01 +0c +0b +00 +bc +42 +00 +00 +01 +0c +0b +00 +c0 +42 +00 +00 +01 +0c +0b +00 +c4 +42 +00 +00 +01 +0c +0b +00 +c8 +42 +00 +00 +01 +0c +0b +00 +cc +42 +00 +00 +01 +0c +0b +00 +d0 +42 +00 +00 +01 +0c +0b +00 +d4 +42 +00 +00 +01 +0c +0b +00 +d8 +42 +00 +00 +01 +0c +0b +00 +dc +42 +00 +00 +01 +0c +0b +00 +e0 +42 +00 +00 +01 +0c +0b +00 +e4 +42 +00 +00 +01 +0c +0b +00 +e8 +42 +00 +00 +01 +0c +0b +00 +ec +42 +00 +00 +01 +0c +0b +00 +f0 +42 +00 +00 +01 +0c +0b +00 +f4 +42 +00 +00 +01 +0c +0b +00 +f8 +42 +00 +00 +01 +0c +0b +00 +fc +42 +00 +00 +01 +0c +0b +00 +00 +43 +00 +00 +01 +0c +0b +00 +04 +43 +00 +00 +01 +0c +0b +00 +08 +43 +00 +00 +01 +0c +0b +00 +0c +43 +00 +00 +01 +0c +0b +00 +10 +43 +00 +00 +01 +0c +0b +00 +14 +43 +00 +00 +01 +0c +0b +00 +18 +43 +00 +00 +01 +0c +0b +00 +1c +43 +00 +00 +01 +0c +0b +00 +20 +43 +00 +00 +01 +0c +0b +00 +24 +43 +00 +00 +01 +0c +0b +00 +28 +43 +00 +00 +01 +0c +0b +00 +2c +43 +00 +00 +01 +0c +0b +00 +30 +43 +00 +00 +01 +0c +0b +00 +34 +43 +00 +00 +01 +0c +0b +00 +38 +43 +00 +00 +01 +0c +0b +00 +3c +43 +00 +00 +01 +0c +0b +00 +40 +43 +00 +00 +01 +0c +0b +00 +44 +43 +00 +00 +01 +0c +0b +00 +48 +43 +00 +00 +01 +0c +0b +00 +4c +43 +00 +00 +01 +0c +0b +00 +50 +43 +00 +00 +01 +0c +0b +00 +54 +43 +00 +00 +01 +0c +0b +00 +58 +43 +00 +00 +01 +0c +0b +00 +5c +43 +00 +00 +01 +0c +0b +00 +60 +43 +00 +00 +01 +0c +0b +00 +64 +43 +00 +00 +01 +0c +0b +00 +68 +43 +00 +00 +01 +0c +0b +00 +6c +43 +00 +00 +01 +0c +0b +00 +70 +43 +00 +00 +01 +0c +0b +00 +74 +43 +00 +00 +01 +0c +0b +00 +78 +43 +00 +00 +01 +0c +0b +00 +7c +43 +00 +00 +01 +0c +0b +00 +80 +43 +00 +00 +01 +0c +0b +00 +84 +43 +00 +00 +01 +0c +0b +00 +88 +43 +00 +00 +01 +0c +0b +00 +8c +43 +00 +00 +01 +0c +0b +00 +90 +43 +00 +00 +01 +0c +0b +00 +94 +43 +00 +00 +01 +0c +0b +00 +98 +43 +00 +00 +01 +0c +0b +00 +9c +43 +00 +00 +01 +0c +0b +00 +a0 +43 +00 +00 +01 +0c +0b +00 +a4 +43 +00 +00 +01 +0c +0b +00 +a8 +43 +00 +00 +01 +0c +0b +00 +ac +43 +00 +00 +01 +0c +0b +00 +b0 +43 +00 +00 +01 +0c +0b +00 +b4 +43 +00 +00 +01 +0c +0b +00 +b8 +43 +00 +00 +01 +0c +0b +00 +bc +43 +00 +00 +01 +0c +0b +00 +c0 +43 +00 +00 +01 +0c +0b +00 +c4 +43 +00 +00 +01 +0c +0b +00 +c8 +43 +00 +00 +01 +0c +0b +00 +cc +43 +00 +00 +01 +0c +0b +00 +d0 +43 +00 +00 +01 +0c +0b +00 +d4 +43 +00 +00 +01 +0c +0b +00 +d8 +43 +00 +00 +01 +0c +0b +00 +dc +43 +00 +00 +01 +0c +0b +00 +e0 +43 +00 +00 +01 +0c +0b +00 +e4 +43 +00 +00 +01 +0c +0b +00 +e8 +43 +00 +00 +01 +0c +0b +00 +ec +43 +00 +00 +01 +0c +0b +00 +f0 +43 +00 +00 +01 +0c +0b +00 +f4 +43 +00 +00 +01 +0c +0b +00 +f8 +43 +00 +00 +01 +0c +0b +00 +fc +43 +00 +00 +01 +0c +0b +00 +00 +44 +00 +00 +01 +0c +0b +00 +04 +44 +00 +00 +01 +0c +0b +00 +08 +44 +00 +00 +01 +0c +0b +00 +0c +44 +00 +00 +01 +0c +0b +00 +10 +44 +00 +00 +01 +0c +0b +00 +14 +44 +00 +00 +01 +0c +0b +00 +18 +44 +00 +00 +01 +0c +0b +00 +1c +44 +00 +00 +01 +0c +0b +00 +20 +44 +00 +00 +01 +0c +0b +00 +24 +44 +00 +00 +01 +0c +0b +00 +28 +44 +00 +00 +01 +0c +0b +00 +2c +44 +00 +00 +01 +0c +0b +00 +30 +44 +00 +00 +01 +0c +0b +00 +34 +44 +00 +00 +01 +0c +0b +00 +38 +44 +00 +00 +01 +0c +0b +00 +3c +44 +00 +00 +01 +0c +0b +00 +40 +44 +00 +00 +01 +0c +0b +00 +44 +44 +00 +00 +01 +0c +0b +00 +48 +44 +00 +00 +01 +0c +0b +00 +4c +44 +00 +00 +01 +0c +0b +00 +50 +44 +00 +00 +01 +0c +0b +00 +54 +44 +00 +00 +01 +0c +0b +00 +58 +44 +00 +00 +01 +0c +0b +00 +5c +44 +00 +00 +01 +0c +0b +00 +60 +44 +00 +00 +01 +0c +0b +00 +64 +44 +00 +00 +01 +0c +0b +00 +68 +44 +00 +00 +01 +0c +0b +00 +6c +44 +00 +00 +01 +0c +0b +00 +70 +44 +00 +00 +01 +0c +0b +00 +74 +44 +00 +00 +01 +0c +0b +00 +78 +44 +00 +00 +01 +0c +0b +00 +7c +44 +00 +00 +01 +0c +0b +00 +80 +44 +00 +00 +01 +0c +0b +00 +84 +44 +00 +00 +01 +0c +0b +00 +88 +44 +00 +00 +01 +0c +0b +00 +8c +44 +00 +00 +01 +0c +0b +00 +90 +44 +00 +00 +01 +0c +0b +00 +94 +44 +00 +00 +01 +0c +0b +00 +98 +44 +00 +00 +01 +0c +0b +00 +9c +44 +00 +00 +01 +0c +0b +00 +a0 +44 +00 +00 +01 +0c +0b +00 +a4 +44 +00 +00 +01 +0c +0b +00 +a8 +44 +00 +00 +01 +0c +0b +00 +ac +44 +00 +00 +01 +0c +0b +00 +b0 +44 +00 +00 +01 +0c +0b +00 +b4 +44 +00 +00 +01 +0c +0b +00 +b8 +44 +00 +00 +01 +0c +0b +00 +bc +44 +00 +00 +01 +0c +0b +00 +c0 +44 +00 +00 +01 +0c +0b +00 +c4 +44 +00 +00 +01 +0c +0b +00 +c8 +44 +00 +00 +01 +0c +0b +00 +cc +44 +00 +00 +01 +0c +0b +00 +d0 +44 +00 +00 +01 +0c +0b +00 +d4 +44 +00 +00 +01 +0c +0b +00 +d8 +44 +00 +00 +01 +0c +0b +00 +dc +44 +00 +00 +01 +0c +0b +00 +e0 +44 +00 +00 +01 +0c +0b +00 +e4 +44 +00 +00 +01 +0c +0b +00 +e8 +44 +00 +00 +01 +0c +0b +00 +ec +44 +00 +00 +01 +0c +0b +00 +f0 +44 +00 +00 +01 +0c +0b +00 +f4 +44 +00 +00 +01 +0c +0b +00 +f8 +44 +00 +00 +01 +0c +0b +00 +fc +44 +00 +00 +01 +0c +0b +00 +00 +45 +00 +00 +01 +0c +0b +00 +04 +45 +00 +00 +01 +0c +0b +00 +08 +45 +00 +00 +01 +0c +0b +00 +0c +45 +00 +00 +01 +0c +0b +00 +10 +45 +00 +00 +01 +0c +0b +00 +14 +45 +00 +00 +01 +0c +0b +00 +18 +45 +00 +00 +01 +0c +0b +00 +1c +45 +00 +00 +01 +0c +0b +00 +20 +45 +00 +00 +01 +0c +0b +00 +24 +45 +00 +00 +01 +0c +0b +00 +28 +45 +00 +00 +01 +0c +0b +00 +2c +45 +00 +00 +01 +0c +0b +00 +30 +45 +00 +00 +01 +0c +0b +00 +34 +45 +00 +00 +01 +0c +0b +00 +38 +45 +00 +00 +01 +0c +0b +00 +3c +45 +00 +00 +01 +0c +0b +00 +40 +45 +00 +00 +01 +0c +0b +00 +44 +45 +00 +00 +01 +0c +0b +00 +48 +45 +00 +00 +01 +0c +0b +00 +4c +45 +00 +00 +01 +0c +0b +00 +50 +45 +00 +00 +01 +0c +0b +00 +54 +45 +00 +00 +01 +0c +0b +00 +58 +45 +00 +00 +01 +0c +0b +00 +5c +45 +00 +00 +01 +0c +0b +00 +60 +45 +00 +00 +01 +0c +0b +00 +64 +45 +00 +00 +01 +0c +0b +00 +68 +45 +00 +00 +01 +0c +0b +00 +6c +45 +00 +00 +01 +0c +0b +00 +70 +45 +00 +00 +01 +0c +0b +00 +74 +45 +00 +00 +01 +0c +0b +00 +78 +45 +00 +00 +01 +0c +0b +00 +7c +45 +00 +00 +01 +0c +0b +00 +80 +45 +00 +00 +01 +0c +0b +00 +84 +45 +00 +00 +01 +0c +0b +00 +88 +45 +00 +00 +01 +0c +0b +00 +8c +45 +00 +00 +01 +0c +0b +00 +90 +45 +00 +00 +01 +0c +0b +00 +94 +45 +00 +00 +01 +0c +0b +00 +98 +45 +00 +00 +01 +0c +0b +00 +9c +45 +00 +00 +01 +0c +0b +00 +a0 +45 +00 +00 +01 +0c +0b +00 +a4 +45 +00 +00 +01 +0c +0b +00 +a8 +45 +00 +00 +01 +0c +0b +00 +ac +45 +00 +00 +01 +0c +0b +00 +b0 +45 +00 +00 +01 +0c +0b +00 +b4 +45 +00 +00 +01 +0c +0b +00 +b8 +45 +00 +00 +01 +0c +0b +00 +bc +45 +00 +00 +01 +0c +0b +00 +c0 +45 +00 +00 +01 +0c +0b +00 +c4 +45 +00 +00 +01 +0c +0b +00 +c8 +45 +00 +00 +01 +0c +0b +00 +cc +45 +00 +00 +01 +0c +0b +00 +d0 +45 +00 +00 +01 +0c +0b +00 +d4 +45 +00 +00 +01 +0c +0b +00 +d8 +45 +00 +00 +01 +0c +0b +00 +dc +45 +00 +00 +01 +0c +0b +00 +e0 +45 +00 +00 +01 +0c +0b +00 +e4 +45 +00 +00 +01 +0c +0b +00 +e8 +45 +00 +00 +01 +0c +0b +00 +ec +45 +00 +00 +01 +0c +0b +00 +f0 +45 +00 +00 +01 +0c +0b +00 +f4 +45 +00 +00 +01 +0c +0b +00 +f8 +45 +00 +00 +01 +0c +0b +00 +fc +45 +00 +00 +01 +0c +0b +00 +00 +46 +00 +00 +01 +0c +0b +00 +04 +46 +00 +00 +01 +0c +0b +00 +08 +46 +00 +00 +01 +0c +0b +00 +0c +46 +00 +00 +01 +0c +0b +00 +10 +46 +00 +00 +01 +0c +0b +00 +14 +46 +00 +00 +01 +0c +0b +00 +18 +46 +00 +00 +01 +0c +0b +00 +1c +46 +00 +00 +01 +0c +0b +00 +20 +46 +00 +00 +01 +0c +0b +00 +24 +46 +00 +00 +01 +0c +0b +00 +28 +46 +00 +00 +01 +0c +0b +00 +2c +46 +00 +00 +01 +0c +0b +00 +30 +46 +00 +00 +01 +0c +0b +00 +34 +46 +00 +00 +01 +0c +0b +00 +38 +46 +00 +00 +01 +0c +0b +00 +3c +46 +00 +00 +01 +0c +0b +00 +40 +46 +00 +00 +01 +0c +0b +00 +44 +46 +00 +00 +01 +0c +0b +00 +48 +46 +00 +00 +01 +0c +0b +00 +4c +46 +00 +00 +01 +0c +0b +00 +50 +46 +00 +00 +01 +0c +0b +00 +54 +46 +00 +00 +01 +0c +0b +00 +58 +46 +00 +00 +01 +0c +0b +00 +5c +46 +00 +00 +01 +0c +0b +00 +60 +46 +00 +00 +01 +0c +0b +00 +64 +46 +00 +00 +01 +0c +0b +00 +68 +46 +00 +00 +01 +0c +0b +00 +6c +46 +00 +00 +01 +0c +0b +00 +70 +46 +00 +00 +01 +0c +0b +00 +74 +46 +00 +00 +01 +0c +0b +00 +78 +46 +00 +00 +01 +0c +0b +00 +7c +46 +00 +00 +01 +0c +0b +00 +80 +46 +00 +00 +01 +0c +0b +00 +84 +46 +00 +00 +01 +0c +0b +00 +88 +46 +00 +00 +01 +0c +0b +00 +8c +46 +00 +00 +01 +0c +0b +00 +90 +46 +00 +00 +01 +0c +0b +00 +94 +46 +00 +00 +01 +0c +0b +00 +98 +46 +00 +00 +01 +0c +0b +00 +9c +46 +00 +00 +01 +0c +0b +00 +a0 +46 +00 +00 +01 +0c +0b +00 +a4 +46 +00 +00 +01 +0c +0b +00 +a8 +46 +00 +00 +01 +0c +0b +00 +ac +46 +00 +00 +01 +0c +0b +00 +b0 +46 +00 +00 +01 +0c +0b +00 +b4 +46 +00 +00 +01 +0c +0b +00 +b8 +46 +00 +00 +01 +0c +0b +00 +bc +46 +00 +00 +01 +0c +0b +00 +c0 +46 +00 +00 +01 +0c +0b +00 +c4 +46 +00 +00 +01 +0c +0b +00 +c8 +46 +00 +00 +01 +0c +0b +00 +cc +46 +00 +00 +01 +0c +0b +00 +d0 +46 +00 +00 +01 +0c +0b +00 +d4 +46 +00 +00 +01 +0c +0b +00 +d8 +46 +00 +00 +01 +0c +0b +00 +dc +46 +00 +00 +01 +0c +0b +00 +e0 +46 +00 +00 +01 +0c +0b +00 +e4 +46 +00 +00 +01 +0c +0b +00 +e8 +46 +00 +00 +01 +0c +0b +00 +ec +46 +00 +00 +01 +0c +0b +00 +f0 +46 +00 +00 +01 +0c +0b +00 +f4 +46 +00 +00 +01 +0c +0b +00 +f8 +46 +00 +00 +01 +0c +0b +00 +fc +46 +00 +00 +01 +0c +0b +00 +00 +47 +00 +00 +01 +0c +0b +00 +04 +47 +00 +00 +01 +0c +0b +00 +08 +47 +00 +00 +01 +0c +0b +00 +0c +47 +00 +00 +01 +0c +0b +00 +10 +47 +00 +00 +01 +0c +0b +00 +14 +47 +00 +00 +01 +0c +0b +00 +18 +47 +00 +00 +01 +0c +0b +00 +1c +47 +00 +00 +01 +0c +0b +00 +20 +47 +00 +00 +01 +0c +0b +00 +24 +47 +00 +00 +01 +0c +0b +00 +28 +47 +00 +00 +01 +0c +0b +00 +2c +47 +00 +00 +01 +0c +0b +00 +30 +47 +00 +00 +01 +0c +0b +00 +34 +47 +00 +00 +01 +0c +0b +00 +38 +47 +00 +00 +01 +0c +0b +00 +3c +47 +00 +00 +01 +0c +0b +00 +40 +47 +00 +00 +01 +0c +0b +00 +44 +47 +00 +00 +01 +0c +0b +00 +48 +47 +00 +00 +01 +0c +0b +00 +4c +47 +00 +00 +01 +0c +0b +00 +50 +47 +00 +00 +01 +0c +0b +00 +54 +47 +00 +00 +01 +0c +0b +00 +58 +47 +00 +00 +01 +0c +0b +00 +5c +47 +00 +00 +01 +0c +0b +00 +60 +47 +00 +00 +01 +0c +0b +00 +64 +47 +00 +00 +01 +0c +0b +00 +68 +47 +00 +00 +01 +0c +0b +00 +6c +47 +00 +00 +01 +0c +0b +00 +70 +47 +00 +00 +01 +0c +0b +00 +74 +47 +00 +00 +01 +0c +0b +00 +78 +47 +00 +00 +01 +0c +0b +00 +7c +47 +00 +00 +01 +0c +0b +00 +80 +47 +00 +00 +01 +0c +0b +00 +84 +47 +00 +00 +01 +0c +0b +00 +88 +47 +00 +00 +01 +0c +0b +00 +8c +47 +00 +00 +01 +0c +0b +00 +90 +47 +00 +00 +01 +0c +0b +00 +94 +47 +00 +00 +01 +0c +0b +00 +98 +47 +00 +00 +01 +0c +0b +00 +9c +47 +00 +00 +01 +0c +0b +00 +a0 +47 +00 +00 +01 +0c +0b +00 +a4 +47 +00 +00 +01 +0c +0b +00 +a8 +47 +00 +00 +01 +0c +0b +00 +ac +47 +00 +00 +01 +0c +0b +00 +b0 +47 +00 +00 +01 +0c +0b +00 +b4 +47 +00 +00 +01 +0c +0b +00 +b8 +47 +00 +00 +01 +0c +0b +00 +bc +47 +00 +00 +01 +0c +0b +00 +c0 +47 +00 +00 +01 +0c +0b +00 +c4 +47 +00 +00 +01 +0c +0b +00 +c8 +47 +00 +00 +01 +0c +0b +00 +cc +47 +00 +00 +01 +0c +0b +00 +d0 +47 +00 +00 +01 +0c +0b +00 +d4 +47 +00 +00 +01 +0c +0b +00 +d8 +47 +00 +00 +01 +0c +0b +00 +dc +47 +00 +00 +01 +0c +0b +00 +e0 +47 +00 +00 +01 +0c +0b +00 +e4 +47 +00 +00 +01 +0c +0b +00 +e8 +47 +00 +00 +01 +0c +0b +00 +ec +47 +00 +00 +01 +0c +0b +00 +f0 +47 +00 +00 +01 +0c +0b +00 +f4 +47 +00 +00 +01 +0c +0b +00 +f8 +47 +00 +00 +01 +0c +0b +00 +fc +47 +00 +00 +01 +0c +0b +00 +00 +48 +00 +00 +01 +0c +0b +00 +04 +48 +00 +00 +01 +0c +0b +00 +08 +48 +00 +00 +01 +0c +0b +00 +0c +48 +00 +00 +01 +0c +0b +00 +10 +48 +00 +00 +01 +0c +0b +00 +14 +48 +00 +00 +01 +0c +0b +00 +18 +48 +00 +00 +01 +0c +0b +00 +1c +48 +00 +00 +01 +0c +0b +00 +20 +48 +00 +00 +01 +0c +0b +00 +24 +48 +00 +00 +01 +0c +0b +00 +28 +48 +00 +00 +01 +0c +0b +00 +2c +48 +00 +00 +01 +0c +0b +00 +30 +48 +00 +00 +01 +0c +0b +00 +34 +48 +00 +00 +01 +0c +0b +00 +38 +48 +00 +00 +01 +0c +0b +00 +3c +48 +00 +00 +01 +0c +0b +00 +40 +48 +00 +00 +01 +0c +0b +00 +44 +48 +00 +00 +01 +0c +0b +00 +48 +48 +00 +00 +01 +0c +0b +00 +4c +48 +00 +00 +01 +0c +0b +00 +50 +48 +00 +00 +01 +0c +0b +00 +54 +48 +00 +00 +01 +0c +0b +00 +58 +48 +00 +00 +01 +0c +0b +00 +5c +48 +00 +00 +01 +0c +0b +00 +60 +48 +00 +00 +01 +0c +0b +00 +64 +48 +00 +00 +01 +0c +0b +00 +68 +48 +00 +00 +01 +0c +0b +00 +6c +48 +00 +00 +01 +0c +0b +00 +70 +48 +00 +00 +01 +0c +0b +00 +74 +48 +00 +00 +01 +0c +0b +00 +78 +48 +00 +00 +01 +0c +0b +00 +7c +48 +00 +00 +01 +0c +0b +00 +80 +48 +00 +00 +01 +0c +0b +00 +84 +48 +00 +00 +01 +0c +0b +00 +88 +48 +00 +00 +01 +0c +0b +00 +8c +48 +00 +00 +01 +0c +0b +00 +90 +48 +00 +00 +01 +0c +0b +00 +94 +48 +00 +00 +01 +0c +0b +00 +98 +48 +00 +00 +01 +0c +0b +00 +9c +48 +00 +00 +01 +0c +0b +00 +a0 +48 +00 +00 +01 +0c +0b +00 +a4 +48 +00 +00 +01 +0c +0b +00 +a8 +48 +00 +00 +01 +0c +0b +00 +ac +48 +00 +00 +01 +0c +0b +00 +b0 +48 +00 +00 +01 +0c +0b +00 +b4 +48 +00 +00 +01 +0c +0b +00 +b8 +48 +00 +00 +01 +0c +0b +00 +bc +48 +00 +00 +01 +0c +0b +00 +c0 +48 +00 +00 +01 +0c +0b +00 +c4 +48 +00 +00 +01 +0c +0b +00 +c8 +48 +00 +00 +01 +0c +0b +00 +cc +48 +00 +00 +01 +0c +0b +00 +d0 +48 +00 +00 +01 +0c +0b +00 +d4 +48 +00 +00 +01 +0c +0b +00 +d8 +48 +00 +00 +01 +0c +0b +00 +dc +48 +00 +00 +01 +0c +0b +00 +e0 +48 +00 +00 +01 +0c +0b +00 +e4 +48 +00 +00 +01 +0c +0b +00 +e8 +48 +00 +00 +01 +0c +0b +00 +ec +48 +00 +00 +01 +0c +0b +00 +f0 +48 +00 +00 +01 +0c +0b +00 +f4 +48 +00 +00 +01 +0c +0b +00 +f8 +48 +00 +00 +01 +0c +0b +00 +fc +48 +00 +00 +01 +0c +0b +00 +00 +49 +00 +00 +01 +0c +0b +00 +04 +49 +00 +00 +01 +0c +0b +00 +08 +49 +00 +00 +01 +0c +0b +00 +0c +49 +00 +00 +01 +0c +0b +00 +10 +49 +00 +00 +01 +0c +0b +00 +14 +49 +00 +00 +01 +0c +0b +00 +18 +49 +00 +00 +01 +0c +0b +00 +1c +49 +00 +00 +01 +0c +0b +00 +20 +49 +00 +00 +01 +0c +0b +00 +24 +49 +00 +00 +01 +0c +0b +00 +28 +49 +00 +00 +01 +0c +0b +00 +2c +49 +00 +00 +01 +0c +0b +00 +30 +49 +00 +00 +01 +0c +0b +00 +34 +49 +00 +00 +01 +0c +0b +00 +38 +49 +00 +00 +01 +0c +0b +00 +3c +49 +00 +00 +01 +0c +0b +00 +40 +49 +00 +00 +01 +0c +0b +00 +44 +49 +00 +00 +01 +0c +0b +00 +48 +49 +00 +00 +01 +0c +0b +00 +4c +49 +00 +00 +01 +0c +0b +00 +50 +49 +00 +00 +01 +0c +0b +00 +54 +49 +00 +00 +01 +0c +0b +00 +58 +49 +00 +00 +01 +0c +0b +00 +5c +49 +00 +00 +01 +0c +0b +00 +60 +49 +00 +00 +01 +0c +0b +00 +64 +49 +00 +00 +01 +0c +0b +00 +68 +49 +00 +00 +01 +0c +0b +00 +6c +49 +00 +00 +01 +0c +0b +00 +70 +49 +00 +00 +01 +0c +0b +00 +74 +49 +00 +00 +01 +0c +0b +00 +78 +49 +00 +00 +01 +0c +0b +00 +7c +49 +00 +00 +01 +0c +0b +00 +80 +49 +00 +00 +01 +0c +0b +00 +84 +49 +00 +00 +01 +0c +0b +00 +88 +49 +00 +00 +01 +0c +0b +00 +8c +49 +00 +00 +01 +0c +0b +00 +90 +49 +00 +00 +01 +0c +0b +00 +94 +49 +00 +00 +01 +0c +0b +00 +98 +49 +00 +00 +01 +0c +0b +00 +9c +49 +00 +00 +01 +0c +0b +00 +a0 +49 +00 +00 +01 +0c +0b +00 +a4 +49 +00 +00 +01 +0c +0b +00 +a8 +49 +00 +00 +01 +0c +0b +00 +ac +49 +00 +00 +01 +0c +0b +00 +b0 +49 +00 +00 +01 +0c +0b +00 +b4 +49 +00 +00 +01 +0c +0b +00 +b8 +49 +00 +00 +01 +0c +0b +00 +bc +49 +00 +00 +01 +0c +0b +00 +c0 +49 +00 +00 +01 +0c +0b +00 +c4 +49 +00 +00 +01 +0c +0b +00 +c8 +49 +00 +00 +01 +0c +0b +00 +cc +49 +00 +00 +01 +0c +0b +00 +d0 +49 +00 +00 +01 +0c +0b +00 +d4 +49 +00 +00 +01 +0c +0b +00 +d8 +49 +00 +00 +01 +0c +0b +00 +dc +49 +00 +00 +01 +0c +0b +00 +e0 +49 +00 +00 +01 +0c +0b +00 +e4 +49 +00 +00 +01 +0c +0b +00 +e8 +49 +00 +00 +01 +0c +0b +00 +ec +49 +00 +00 +01 +0c +0b +00 +f0 +49 +00 +00 +01 +0c +0b +00 +f4 +49 +00 +00 +01 +0c +0b +00 +f8 +49 +00 +00 +01 +0c +0b +00 +fc +49 +00 +00 +01 +0c +0b +00 +00 +4a +00 +00 +01 +0c +0b +00 +04 +4a +00 +00 +01 +0c +0b +00 +08 +4a +00 +00 +01 +0c +0b +00 +0c +4a +00 +00 +01 +0c +0b +00 +10 +4a +00 +00 +01 +0c +0b +00 +14 +4a +00 +00 +01 +0c +0b +00 +18 +4a +00 +00 +01 +0c +0b +00 +1c +4a +00 +00 +01 +0c +0b +00 +20 +4a +00 +00 +01 +0c +0b +00 +24 +4a +00 +00 +01 +0c +0b +00 +28 +4a +00 +00 +01 +0c +0b +00 +2c +4a +00 +00 +01 +0c +0b +00 +30 +4a +00 +00 +01 +0c +0b +00 +34 +4a +00 +00 +01 +0c +0b +00 +38 +4a +00 +00 +01 +0c +0b +00 +3c +4a +00 +00 +01 +0c +0b +00 +40 +4a +00 +00 +01 +0c +0b +00 +44 +4a +00 +00 +01 +0c +0b +00 +48 +4a +00 +00 +01 +0c +0b +00 +4c +4a +00 +00 +01 +0c +0b +00 +50 +4a +00 +00 +01 +0c +0b +00 +54 +4a +00 +00 +01 +0c +0b +00 +58 +4a +00 +00 +01 +0c +0b +00 +5c +4a +00 +00 +01 +0c +0b +00 +60 +4a +00 +00 +01 +0c +0b +00 +64 +4a +00 +00 +01 +0c +0b +00 +68 +4a +00 +00 +01 +0c +0b +00 +6c +4a +00 +00 +01 +0c +0b +00 +70 +4a +00 +00 +01 +0c +0b +00 +74 +4a +00 +00 +01 +0c +0b +00 +78 +4a +00 +00 +01 +0c +0b +00 +7c +4a +00 +00 +01 +0c +0b +00 +80 +4a +00 +00 +01 +0c +0b +00 +84 +4a +00 +00 +01 +0c +0b +00 +88 +4a +00 +00 +01 +0c +0b +00 +8c +4a +00 +00 +01 +0c +0b +00 +90 +4a +00 +00 +01 +0c +0b +00 +94 +4a +00 +00 +01 +0c +0b +00 +98 +4a +00 +00 +01 +0c +0b +00 +9c +4a +00 +00 +01 +0c +0b +00 +a0 +4a +00 +00 +01 +0c +0b +00 +a4 +4a +00 +00 +01 +0c +0b +00 +a8 +4a +00 +00 +01 +0c +0b +00 +ac +4a +00 +00 +01 +0c +0b +00 +b0 +4a +00 +00 +01 +0c +0b +00 +b4 +4a +00 +00 +01 +0c +0b +00 +b8 +4a +00 +00 +01 +0c +0b +00 +bc +4a +00 +00 +01 +0c +0b +00 +c0 +4a +00 +00 +01 +0c +0b +00 +c4 +4a +00 +00 +01 +0c +0b +00 +c8 +4a +00 +00 +01 +0c +0b +00 +cc +4a +00 +00 +01 +0c +0b +00 +d0 +4a +00 +00 +01 +0c +0b +00 +d4 +4a +00 +00 +01 +0c +0b +00 +d8 +4a +00 +00 +01 +0c +0b +00 +dc +4a +00 +00 +01 +0c +0b +00 +e0 +4a +00 +00 +01 +0c +0b +00 +e4 +4a +00 +00 +01 +0c +0b +00 +e8 +4a +00 +00 +01 +0c +0b +00 +ec +4a +00 +00 +01 +0c +0b +00 +f0 +4a +00 +00 +01 +0c +0b +00 +f4 +4a +00 +00 +01 +0c +0b +00 +f8 +4a +00 +00 +01 +0c +0b +00 +fc +4a +00 +00 +01 +0c +0b +00 +00 +4b +00 +00 +01 +0c +0b +00 +04 +4b +00 +00 +01 +0c +0b +00 +08 +4b +00 +00 +01 +0c +0b +00 +0c +4b +00 +00 +01 +0c +0b +00 +10 +4b +00 +00 +01 +0c +0b +00 +14 +4b +00 +00 +01 +0c +0b +00 +18 +4b +00 +00 +01 +0c +0b +00 +1c +4b +00 +00 +01 +0c +0b +00 +20 +4b +00 +00 +01 +0c +0b +00 +24 +4b +00 +00 +01 +0c +0b +00 +28 +4b +00 +00 +01 +0c +0b +00 +2c +4b +00 +00 +01 +0c +0b +00 +30 +4b +00 +00 +01 +0c +0b +00 +34 +4b +00 +00 +01 +0c +0b +00 +38 +4b +00 +00 +01 +0c +0b +00 +3c +4b +00 +00 +01 +0c +0b +00 +40 +4b +00 +00 +01 +0c +0b +00 +44 +4b +00 +00 +01 +0c +0b +00 +48 +4b +00 +00 +01 +0c +0b +00 +4c +4b +00 +00 +01 +0c +0b +00 +50 +4b +00 +00 +01 +0c +0b +00 +54 +4b +00 +00 +01 +0c +0b +00 +58 +4b +00 +00 +01 +0c +0b +00 +5c +4b +00 +00 +01 +0c +0b +00 +60 +4b +00 +00 +01 +0c +0b +00 +64 +4b +00 +00 +01 +0c +0b +00 +68 +4b +00 +00 +01 +0c +0b +00 +6c +4b +00 +00 +01 +0c +0b +00 +70 +4b +00 +00 +01 +0c +0b +00 +74 +4b +00 +00 +01 +0c +0b +00 +78 +4b +00 +00 +01 +0c +0b +00 +7c +4b +00 +00 +01 +0c +0b +00 +80 +4b +00 +00 +01 +0c +0b +00 +84 +4b +00 +00 +01 +0c +0b +00 +88 +4b +00 +00 +01 +0c +0b +00 +8c +4b +00 +00 +01 +0c +0b +00 +90 +4b +00 +00 +01 +0c +0b +00 +94 +4b +00 +00 +01 +0c +0b +00 +98 +4b +00 +00 +01 +0c +0b +00 +9c +4b +00 +00 +01 +0c +0b +00 +a0 +4b +00 +00 +01 +0c +0b +00 +a4 +4b +00 +00 +01 +0c +0b +00 +a8 +4b +00 +00 +01 +0c +0b +00 +ac +4b +00 +00 +01 +0c +0b +00 +b0 +4b +00 +00 +01 +0c +0b +00 +b4 +4b +00 +00 +01 +0c +0b +00 +b8 +4b +00 +00 +01 +0c +0b +00 +bc +4b +00 +00 +01 +0c +0b +00 +c0 +4b +00 +00 +01 +0c +0b +00 +c4 +4b +00 +00 +01 +0c +0b +00 +c8 +4b +00 +00 +01 +0c +0b +00 +cc +4b +00 +00 +01 +0c +0b +00 +d0 +4b +00 +00 +01 +0c +0b +00 +d4 +4b +00 +00 +01 +0c +0b +00 +d8 +4b +00 +00 +01 +0c +0b +00 +dc +4b +00 +00 +01 +0c +0b +00 +e0 +4b +00 +00 +01 +0c +0b +00 +e4 +4b +00 +00 +01 +0c +0b +00 +e8 +4b +00 +00 +01 +0c +0b +00 +ec +4b +00 +00 +01 +0c +0b +00 +f0 +4b +00 +00 +01 +0c +0b +00 +f4 +4b +00 +00 +01 +0c +0b +00 +f8 +4b +00 +00 +01 +0c +0b +00 +fc +4b +00 +00 +01 +0c +0b +00 +00 +4c +00 +00 +01 +0c +0b +00 +04 +4c +00 +00 +01 +0c +0b +00 +08 +4c +00 +00 +01 +0c +0b +00 +0c +4c +00 +00 +01 +0c +0b +00 +10 +4c +00 +00 +01 +0c +0b +00 +14 +4c +00 +00 +01 +0c +0b +00 +18 +4c +00 +00 +01 +0c +0b +00 +1c +4c +00 +00 +01 +0c +0b +00 +20 +4c +00 +00 +01 +0c +0b +00 +24 +4c +00 +00 +01 +0c +0b +00 +28 +4c +00 +00 +01 +0c +0b +00 +2c +4c +00 +00 +01 +0c +0b +00 +30 +4c +00 +00 +01 +0c +0b +00 +34 +4c +00 +00 +01 +0c +0b +00 +38 +4c +00 +00 +01 +0c +0b +00 +3c +4c +00 +00 +01 +0c +0b +00 +40 +4c +00 +00 +01 +0c +0b +00 +44 +4c +00 +00 +01 +0c +0b +00 +48 +4c +00 +00 +01 +0c +0b +00 +4c +4c +00 +00 +01 +0c +0b +00 +50 +4c +00 +00 +01 +0c +0b +00 +54 +4c +00 +00 +01 +0c +0b +00 +58 +4c +00 +00 +01 +0c +0b +00 +5c +4c +00 +00 +01 +0c +0b +00 +60 +4c +00 +00 +01 +0c +0b +00 +64 +4c +00 +00 +01 +0c +0b +00 +68 +4c +00 +00 +01 +0c +0b +00 +6c +4c +00 +00 +01 +0c +0b +00 +70 +4c +00 +00 +01 +0c +0b +00 +74 +4c +00 +00 +01 +0c +0b +00 +78 +4c +00 +00 +01 +0c +0b +00 +7c +4c +00 +00 +01 +0c +0b +00 +80 +4c +00 +00 +01 +0c +0b +00 +84 +4c +00 +00 +01 +0c +0b +00 +88 +4c +00 +00 +01 +0c +0b +00 +8c +4c +00 +00 +01 +0c +0b +00 +90 +4c +00 +00 +01 +0c +0b +00 +94 +4c +00 +00 +01 +0c +0b +00 +98 +4c +00 +00 +01 +0c +0b +00 +9c +4c +00 +00 +01 +0c +0b +00 +a0 +4c +00 +00 +01 +0c +0b +00 +a4 +4c +00 +00 +01 +0c +0b +00 +a8 +4c +00 +00 +01 +0c +0b +00 +ac +4c +00 +00 +01 +0c +0b +00 +b0 +4c +00 +00 +01 +0c +0b +00 +b4 +4c +00 +00 +01 +0c +0b +00 +b8 +4c +00 +00 +01 +0c +0b +00 +bc +4c +00 +00 +01 +0c +0b +00 +c0 +4c +00 +00 +01 +0c +0b +00 +c4 +4c +00 +00 +01 +0c +0b +00 +c8 +4c +00 +00 +01 +0c +0b +00 +cc +4c +00 +00 +01 +0c +0b +00 +d0 +4c +00 +00 +01 +0c +0b +00 +d4 +4c +00 +00 +01 +0c +0b +00 +d8 +4c +00 +00 +01 +0c +0b +00 +dc +4c +00 +00 +01 +0c +0b +00 +e0 +4c +00 +00 +01 +0c +0b +00 +e4 +4c +00 +00 +01 +0c +0b +00 +e8 +4c +00 +00 +01 +0c +0b +00 +ec +4c +00 +00 +01 +0c +0b +00 +f0 +4c +00 +00 +01 +0c +0b +00 +f4 +4c +00 +00 +01 +0c +0b +00 +f8 +4c +00 +00 +01 +0c +0b +00 +fc +4c +00 +00 +01 +0c +0b +00 +00 +4d +00 +00 +01 +0c +0b +00 +04 +4d +00 +00 +01 +0c +0b +00 +08 +4d +00 +00 +01 +0c +0b +00 +0c +4d +00 +00 +01 +0c +0b +00 +10 +4d +00 +00 +01 +0c +0b +00 +14 +4d +00 +00 +01 +0c +0b +00 +18 +4d +00 +00 +01 +0c +0b +00 +1c +4d +00 +00 +01 +0c +0b +00 +20 +4d +00 +00 +01 +0c +0b +00 +24 +4d +00 +00 +01 +0c +0b +00 +28 +4d +00 +00 +01 +0c +0b +00 +2c +4d +00 +00 +01 +0c +0b +00 +30 +4d +00 +00 +01 +0c +0b +00 +34 +4d +00 +00 +01 +0c +0b +00 +38 +4d +00 +00 +01 +0c +0b +00 +3c +4d +00 +00 +01 +0c +0b +00 +40 +4d +00 +00 +01 +0c +0b +00 +44 +4d +00 +00 +01 +0c +0b +00 +48 +4d +00 +00 +01 +0c +0b +00 +4c +4d +00 +00 +01 +0c +0b +00 +50 +4d +00 +00 +01 +0c +0b +00 +54 +4d +00 +00 +01 +0c +0b +00 +58 +4d +00 +00 +01 +0c +0b +00 +5c +4d +00 +00 +01 +0c +0b +00 +60 +4d +00 +00 +01 +0c +0b +00 +64 +4d +00 +00 +01 +0c +0b +00 +68 +4d +00 +00 +01 +0c +0b +00 +6c +4d +00 +00 +01 +0c +0b +00 +70 +4d +00 +00 +01 +0c +0b +00 +74 +4d +00 +00 +01 +0c +0b +00 +78 +4d +00 +00 +01 +0c +0b +00 +7c +4d +00 +00 +01 +0c +0b +00 +80 +4d +00 +00 +01 +0c +0b +00 +84 +4d +00 +00 +01 +0c +0b +00 +88 +4d +00 +00 +01 +0c +0b +00 +8c +4d +00 +00 +01 +0c +0b +00 +90 +4d +00 +00 +01 +0c +0b +00 +94 +4d +00 +00 +01 +0c +0b +00 +98 +4d +00 +00 +01 +0c +0b +00 +9c +4d +00 +00 +01 +0c +0b +00 +a0 +4d +00 +00 +01 +0c +0b +00 +a4 +4d +00 +00 +01 +0c +0b +00 +a8 +4d +00 +00 +01 +0c +0b +00 +ac +4d +00 +00 +01 +0c +0b +00 +b0 +4d +00 +00 +01 +0c +0b +00 +b4 +4d +00 +00 +01 +0c +0b +00 +b8 +4d +00 +00 +01 +0c +0b +00 +bc +4d +00 +00 +01 +0c +0b +00 +c0 +4d +00 +00 +01 +0c +0b +00 +c4 +4d +00 +00 +01 +0c +0b +00 +c8 +4d +00 +00 +01 +0c +0b +00 +cc +4d +00 +00 +01 +0c +0b +00 +d0 +4d +00 +00 +01 +0c +0b +00 +d4 +4d +00 +00 +01 +0c +0b +00 +d8 +4d +00 +00 +01 +0c +0b +00 +dc +4d +00 +00 +01 +0c +0b +00 +e0 +4d +00 +00 +01 +0c +0b +00 +e4 +4d +00 +00 +01 +0c +0b +00 +e8 +4d +00 +00 +01 +0c +0b +00 +ec +4d +00 +00 +01 +0c +0b +00 +f0 +4d +00 +00 +01 +0c +0b +00 +f4 +4d +00 +00 +01 +0c +0b +00 +f8 +4d +00 +00 +01 +0c +0b +00 +fc +4d +00 +00 +01 +0c +0b +00 +00 +4e +00 +00 +01 +0c +0b +00 +04 +4e +00 +00 +01 +0c +0b +00 +08 +4e +00 +00 +01 +0c +0b +00 +0c +4e +00 +00 +01 +0c +0b +00 +10 +4e +00 +00 +01 +0c +0b +00 +14 +4e +00 +00 +01 +0c +0b +00 +18 +4e +00 +00 +01 +0c +0b +00 +1c +4e +00 +00 +01 +0c +0b +00 +20 +4e +00 +00 +01 +0c +0b +00 +24 +4e +00 +00 +01 +0c +0b +00 +28 +4e +00 +00 +01 +0c +0b +00 +2c +4e +00 +00 +01 +0c +0b +00 +30 +4e +00 +00 +01 +0c +0b +00 +34 +4e +00 +00 +01 +0c +0b +00 +38 +4e +00 +00 +01 +0c +0b +00 +3c +4e +00 +00 +01 +0c +0b +00 +40 +4e +00 +00 +01 +0c +0b +00 +44 +4e +00 +00 +01 +0c +0b +00 +48 +4e +00 +00 +01 +0c +0b +00 +4c +4e +00 +00 +01 +0c +0b +00 +50 +4e +00 +00 +01 +0c +0b +00 +54 +4e +00 +00 +01 +0c +0b +00 +58 +4e +00 +00 +01 +0c +0b +00 +5c +4e +00 +00 +01 +0c +0b +00 +60 +4e +00 +00 +01 +0c +0b +00 +64 +4e +00 +00 +01 +0c +0b +00 +68 +4e +00 +00 +01 +0c +0b +00 +6c +4e +00 +00 +01 +0c +0b +00 +70 +4e +00 +00 +01 +0c +0b +00 +74 +4e +00 +00 +01 +0c +0b +00 +78 +4e +00 +00 +01 +0c +0b +00 +7c +4e +00 +00 +01 +0c +0b +00 +80 +4e +00 +00 +01 +0c +0b +00 +84 +4e +00 +00 +01 +0c +0b +00 +88 +4e +00 +00 +01 +0c +0b +00 +8c +4e +00 +00 +01 +0c +0b +00 +90 +4e +00 +00 +01 +0c +0b +00 +94 +4e +00 +00 +01 +0c +0b +00 +98 +4e +00 +00 +01 +0c +0b +00 +9c +4e +00 +00 +01 +0c +0b +00 +a0 +4e +00 +00 +01 +0c +0b +00 +a4 +4e +00 +00 +01 +0c +0b +00 +a8 +4e +00 +00 +01 +0c +0b +00 +ac +4e +00 +00 +01 +0c +0b +00 +b0 +4e +00 +00 +01 +0c +0b +00 +b4 +4e +00 +00 +01 +0c +0b +00 +b8 +4e +00 +00 +01 +0c +0b +00 +bc +4e +00 +00 +01 +0c +0b +00 +c0 +4e +00 +00 +01 +0c +0b +00 +c4 +4e +00 +00 +01 +0c +0b +00 +c8 +4e +00 +00 +01 +0c +0b +00 +cc +4e +00 +00 +01 +0c +0b +00 +d0 +4e +00 +00 +01 +0c +0b +00 +d4 +4e +00 +00 +01 +0c +0b +00 +d8 +4e +00 +00 +01 +0c +0b +00 +dc +4e +00 +00 +01 +0c +0b +00 +e0 +4e +00 +00 +01 +0c +0b +00 +e4 +4e +00 +00 +01 +0c +0b +00 +e8 +4e +00 +00 +01 +0c +0b +00 +ec +4e +00 +00 +01 +0c +0b +00 +f0 +4e +00 +00 +01 +0c +0b +00 +f4 +4e +00 +00 +01 +0c +0b +00 +f8 +4e +00 +00 +01 +0c +0b +00 +fc +4e +00 +00 +01 +0c +0b +00 +00 +4f +00 +00 +01 +0c +0b +00 +04 +4f +00 +00 +01 +0c +0b +00 +08 +4f +00 +00 +01 +0c +0b +00 +0c +4f +00 +00 +01 +0c +0b +00 +10 +4f +00 +00 +01 +0c +0b +00 +14 +4f +00 +00 +01 +0c +0b +00 +18 +4f +00 +00 +01 +0c +0b +00 +1c +4f +00 +00 +01 +0c +0b +00 +20 +4f +00 +00 +01 +0c +0b +00 +24 +4f +00 +00 +01 +0c +0b +00 +28 +4f +00 +00 +01 +0c +0b +00 +2c +4f +00 +00 +01 +0c +0b +00 +30 +4f +00 +00 +01 +0c +0b +00 +34 +4f +00 +00 +01 +0c +0b +00 +38 +4f +00 +00 +01 +0c +0b +00 +3c +4f +00 +00 +01 +0c +0b +00 +40 +4f +00 +00 +01 +0c +0b +00 +44 +4f +00 +00 +01 +0c +0b +00 +48 +4f +00 +00 +01 +0c +0b +00 +4c +4f +00 +00 +01 +0c +0b +00 +50 +4f +00 +00 +01 +0c +0b +00 +54 +4f +00 +00 +01 +0c +0b +00 +58 +4f +00 +00 +01 +0c +0b +00 +5c +4f +00 +00 +01 +0c +0b +00 +60 +4f +00 +00 +01 +0c +0b +00 +64 +4f +00 +00 +01 +0c +0b +00 +68 +4f +00 +00 +01 +0c +0b +00 +6c +4f +00 +00 +01 +0c +0b +00 +70 +4f +00 +00 +01 +0c +0b +00 +74 +4f +00 +00 +01 +0c +0b +00 +78 +4f +00 +00 +01 +0c +0b +00 +7c +4f +00 +00 +01 +0c +0b +00 +80 +4f +00 +00 +01 +0c +0b +00 +84 +4f +00 +00 +01 +0c +0b +00 +88 +4f +00 +00 +01 +0c +0b +00 +8c +4f +00 +00 +01 +0c +0b +00 +90 +4f +00 +00 +01 +0c +0b +00 +94 +4f +00 +00 +01 +0c +0b +00 +98 +4f +00 +00 +01 +0c +0b +00 +9c +4f +00 +00 +01 +0c +0b +00 +a0 +4f +00 +00 +01 +0c +0b +00 +a4 +4f +00 +00 +01 +0c +0b +00 +a8 +4f +00 +00 +01 +0c +0b +00 +ac +4f +00 +00 +01 +0c +0b +00 +b0 +4f +00 +00 +01 +0c +0b +00 +b4 +4f +00 +00 +01 +0c +0b +00 +b8 +4f +00 +00 +01 +0c +0b +00 +bc +4f +00 +00 +01 +0c +0b +00 +c0 +4f +00 +00 +01 +0c +0b +00 +c4 +4f +00 +00 +01 +0c +0b +00 +c8 +4f +00 +00 +01 +0c +0b +00 +cc +4f +00 +00 +01 +0c +0b +00 +d0 +4f +00 +00 +01 +0c +0b +00 +d4 +4f +00 +00 +01 +0c +0b +00 +d8 +4f +00 +00 +01 +0c +0b +00 +dc +4f +00 +00 +01 +0c +0b +00 +e0 +4f +00 +00 +01 +0c +0b +00 +e4 +4f +00 +00 +01 +0c +0b +00 +e8 +4f +00 +00 +01 +0c +0b +00 +ec +4f +00 +00 +01 +0c +0b +00 +f0 +4f +00 +00 +01 +0c +0b +00 +f4 +4f +00 +00 +01 +0c +0b +00 +f8 +4f +00 +00 +01 +0c +0b +00 +fc +4f +00 +00 +01 +0c +0b +00 +00 +50 +00 +00 +01 +0c +0b +00 +04 +50 +00 +00 +01 +0c +0b +00 +08 +50 +00 +00 +01 +0c +0b +00 +0c +50 +00 +00 +01 +0c +0b +00 +10 +50 +00 +00 +01 +0c +0b +00 +14 +50 +00 +00 +01 +0c +0b +00 +18 +50 +00 +00 +01 +0c +0b +00 +1c +50 +00 +00 +01 +0c +0b +00 +20 +50 +00 +00 +01 +0c +0b +00 +24 +50 +00 +00 +01 +0c +0b +00 +28 +50 +00 +00 +01 +0c +0b +00 +2c +50 +00 +00 +01 +0c +0b +00 +30 +50 +00 +00 +01 +0c +0b +00 +34 +50 +00 +00 +01 +0c +0b +00 +38 +50 +00 +00 +01 +0c +0b +00 +3c +50 +00 +00 +01 +0c +0b +00 +40 +50 +00 +00 +01 +0c +0b +00 +44 +50 +00 +00 +01 +0c +0b +00 +48 +50 +00 +00 +01 +0c +0b +00 +4c +50 +00 +00 +01 +0c +0b +00 +50 +50 +00 +00 +01 +0c +0b +00 +54 +50 +00 +00 +01 +0c +0b +00 +58 +50 +00 +00 +01 +0c +0b +00 +5c +50 +00 +00 +01 +0c +0b +00 +60 +50 +00 +00 +01 +0c +0b +00 +64 +50 +00 +00 +01 +0c +0b +00 +68 +50 +00 +00 +01 +0c +0b +00 +6c +50 +00 +00 +01 +0c +0b +00 +70 +50 +00 +00 +01 +0c +0b +00 +74 +50 +00 +00 +01 +0c +0b +00 +78 +50 +00 +00 +01 +0c +0b +00 +7c +50 +00 +00 +01 +0c +0b +00 +80 +50 +00 +00 +01 +0c +0b +00 +84 +50 +00 +00 +01 +0c +0b +00 +88 +50 +00 +00 +01 +0c +0b +00 +8c +50 +00 +00 +01 +0c +0b +00 +90 +50 +00 +00 +01 +0c +0b +00 +94 +50 +00 +00 +01 +0c +0b +00 +98 +50 +00 +00 +01 +0c +0b +00 +9c +50 +00 +00 +01 +0c +0b +00 +a0 +50 +00 +00 +01 +0c +0b +00 +a4 +50 +00 +00 +01 +0c +0b +00 +a8 +50 +00 +00 +01 +0c +0b +00 +ac +50 +00 +00 +01 +0c +0b +00 +b0 +50 +00 +00 +01 +0c +0b +00 +b4 +50 +00 +00 +01 +0c +0b +00 +b8 +50 +00 +00 +01 +0c +0b +00 +bc +50 +00 +00 +01 +0c +0b +00 +c0 +50 +00 +00 +01 +0c +0b +00 +c4 +50 +00 +00 +01 +0c +0b +00 +c8 +50 +00 +00 +01 +0c +0b +00 +cc +50 +00 +00 +01 +0c +0b +00 +d0 +50 +00 +00 +01 +0c +0b +00 +d4 +50 +00 +00 +01 +0c +0b +00 +d8 +50 +00 +00 +01 +0c +0b +00 +dc +50 +00 +00 +01 +0c +0b +00 +e0 +50 +00 +00 +01 +0c +0b +00 +e4 +50 +00 +00 +01 +0c +0b +00 +e8 +50 +00 +00 +01 +0c +0b +00 +ec +50 +00 +00 +01 +0c +0b +00 +f0 +50 +00 +00 +01 +0c +0b +00 +f4 +50 +00 +00 +01 +0c +0b +00 +f8 +50 +00 +00 +01 +0c +0b +00 +fc +50 +00 +00 +01 +0c +0b +00 +00 +51 +00 +00 +01 +0c +0b +00 +04 +51 +00 +00 +01 +0c +0b +00 +08 +51 +00 +00 +01 +0c +0b +00 +0c +51 +00 +00 +01 +0c +0b +00 +10 +51 +00 +00 +01 +0c +0b +00 +14 +51 +00 +00 +01 +0c +0b +00 +18 +51 +00 +00 +01 +0c +0b +00 +1c +51 +00 +00 +01 +0c +0b +00 +20 +51 +00 +00 +01 +0c +0b +00 +24 +51 +00 +00 +01 +0c +0b +00 +28 +51 +00 +00 +01 +0c +0b +00 +2c +51 +00 +00 +01 +0c +0b +00 +30 +51 +00 +00 +01 +0c +0b +00 +34 +51 +00 +00 +01 +0c +0b +00 +38 +51 +00 +00 +01 +0c +0b +00 +3c +51 +00 +00 +01 +0c +0b +00 +40 +51 +00 +00 +01 +0c +0b +00 +44 +51 +00 +00 +01 +0c +0b +00 +48 +51 +00 +00 +01 +0c +0b +00 +4c +51 +00 +00 +01 +0c +0b +00 +50 +51 +00 +00 +01 +0c +0b +00 +54 +51 +00 +00 +01 +0c +0b +00 +58 +51 +00 +00 +01 +0c +0b +00 +5c +51 +00 +00 +01 +0c +0b +00 +60 +51 +00 +00 +01 +0c +0b +00 +64 +51 +00 +00 +01 +0c +0b +00 +68 +51 +00 +00 +01 +0c +0b +00 +6c +51 +00 +00 +01 +0c +0b +00 +70 +51 +00 +00 +01 +0c +0b +00 +74 +51 +00 +00 +01 +0c +0b +00 +78 +51 +00 +00 +01 +0c +0b +00 +7c +51 +00 +00 +01 +0c +0b +00 +80 +51 +00 +00 +01 +0c +0b +00 +84 +51 +00 +00 +01 +0c +0b +00 +88 +51 +00 +00 +01 +0c +0b +00 +8c +51 +00 +00 +01 +0c +0b +00 +90 +51 +00 +00 +01 +0c +0b +00 +94 +51 +00 +00 +01 +0c +0b +00 +98 +51 +00 +00 +01 +0c +0b +00 +9c +51 +00 +00 +01 +0c +0b +00 +a0 +51 +00 +00 +01 +0c +0b +00 +a4 +51 +00 +00 +01 +0c +0b +00 +a8 +51 +00 +00 +01 +0c +0b +00 +ac +51 +00 +00 +01 +0c +0b +00 +b0 +51 +00 +00 +01 +0c +0b +00 +b4 +51 +00 +00 +01 +0c +0b +00 +b8 +51 +00 +00 +01 +0c +0b +00 +bc +51 +00 +00 +01 +0c +0b +00 +c0 +51 +00 +00 +01 +0c +0b +00 +c4 +51 +00 +00 +01 +0c +0b +00 +c8 +51 +00 +00 +01 +0c +0b +00 +cc +51 +00 +00 +01 +0c +0b +00 +d0 +51 +00 +00 +01 +0c +0b +00 +d4 +51 +00 +00 +01 +0c +0b +00 +d8 +51 +00 +00 +01 +0c +0b +00 +dc +51 +00 +00 +01 +0c +0b +00 +e0 +51 +00 +00 +01 +0c +0b +00 +e4 +51 +00 +00 +01 +0c +0b +00 +e8 +51 +00 +00 +01 +0c +0b +00 +ec +51 +00 +00 +01 +0c +0b +00 +f0 +51 +00 +00 +01 +0c +0b +00 +f4 +51 +00 +00 +01 +0c +0b +00 +f8 +51 +00 +00 +01 +0c +0b +00 +fc +51 +00 +00 +01 +0c +0b +00 +00 +52 +00 +00 +01 +0c +0b +00 +04 +52 +00 +00 +01 +0c +0b +00 +08 +52 +00 +00 +01 +0c +0b +00 +0c +52 +00 +00 +01 +0c +0b +00 +10 +52 +00 +00 +01 +0c +0b +00 +14 +52 +00 +00 +01 +0c +0b +00 +18 +52 +00 +00 +01 +0c +0b +00 +1c +52 +00 +00 +01 +0c +0b +00 +20 +52 +00 +00 +01 +0c +0b +00 +24 +52 +00 +00 +01 +0c +0b +00 +28 +52 +00 +00 +01 +0c +0b +00 +2c +52 +00 +00 +01 +0c +0b +00 +30 +52 +00 +00 +01 +0c +0b +00 +34 +52 +00 +00 +01 +0c +0b +00 +38 +52 +00 +00 +01 +0c +0b +00 +3c +52 +00 +00 +01 +0c +0b +00 +40 +52 +00 +00 +01 +0c +0b +00 +44 +52 +00 +00 +01 +0c +0b +00 +48 +52 +00 +00 +01 +0c +0b +00 +4c +52 +00 +00 +01 +0c +0b +00 +50 +52 +00 +00 +01 +0c +0b +00 +54 +52 +00 +00 +01 +0c +0b +00 +58 +52 +00 +00 +01 +0c +0b +00 +5c +52 +00 +00 +01 +0c +0b +00 +60 +52 +00 +00 +01 +0c +0b +00 +64 +52 +00 +00 +01 +0c +0b +00 +68 +52 +00 +00 +01 +0c +0b +00 +6c +52 +00 +00 +01 +0c +0b +00 +70 +52 +00 +00 +01 +0c +0b +00 +74 +52 +00 +00 +01 +0c +0b +00 +78 +52 +00 +00 +01 +0c +0b +00 +7c +52 +00 +00 +01 +0c +0b +00 +80 +52 +00 +00 +01 +0c +0b +00 +84 +52 +00 +00 +01 +0c +0b +00 +88 +52 +00 +00 +01 +0c +0b +00 +8c +52 +00 +00 +01 +0c +0b +00 +90 +52 +00 +00 +01 +0c +0b +00 +94 +52 +00 +00 +01 +0c +0b +00 +98 +52 +00 +00 +01 +0c +0b +00 +9c +52 +00 +00 +01 +0c +0b +00 +a0 +52 +00 +00 +01 +0c +0b +00 +a4 +52 +00 +00 +01 +0c +0b +00 +a8 +52 +00 +00 +01 +0c +0b +00 +ac +52 +00 +00 +01 +0c +0b +00 +b0 +52 +00 +00 +01 +0c +0b +00 +b4 +52 +00 +00 +01 +0c +0b +00 +b8 +52 +00 +00 +01 +0c +0b +00 +bc +52 +00 +00 +01 +0c +0b +00 +c0 +52 +00 +00 +01 +0c +0b +00 +c4 +52 +00 +00 +01 +0c +0b +00 +c8 +52 +00 +00 +01 +0c +0b +00 +cc +52 +00 +00 +01 +0c +0b +00 +d0 +52 +00 +00 +01 +0c +0b +00 +d4 +52 +00 +00 +01 +0c +0b +00 +d8 +52 +00 +00 +01 +0c +0b +00 +dc +52 +00 +00 +01 +0c +0b +00 +e0 +52 +00 +00 +01 +0c +0b +00 +e4 +52 +00 +00 +01 +0c +0b +00 +e8 +52 +00 +00 +01 +0c +0b +00 +ec +52 +00 +00 +01 +0c +0b +00 +f0 +52 +00 +00 +01 +0c +0b +00 +f4 +52 +00 +00 +01 +0c +0b +00 +f8 +52 +00 +00 +01 +0c +0b +00 +fc +52 +00 +00 +01 +0c +0b +00 +00 +53 +00 +00 +01 +0c +0b +00 +04 +53 +00 +00 +01 +0c +0b +00 +08 +53 +00 +00 +01 +0c +0b +00 +0c +53 +00 +00 +01 +0c +0b +00 +10 +53 +00 +00 +01 +0c +0b +00 +14 +53 +00 +00 +01 +0c +0b +00 +18 +53 +00 +00 +01 +0c +0b +00 +1c +53 +00 +00 +01 +0c +0b +00 +20 +53 +00 +00 +01 +0c +0b +00 +24 +53 +00 +00 +01 +0c +0b +00 +28 +53 +00 +00 +01 +0c +0b +00 +2c +53 +00 +00 +01 +0c +0b +00 +30 +53 +00 +00 +01 +0c +0b +00 +34 +53 +00 +00 +01 +0c +0b +00 +38 +53 +00 +00 +01 +0c +0b +00 +3c +53 +00 +00 +01 +0c +0b +00 +40 +53 +00 +00 +01 +0c +0b +00 +44 +53 +00 +00 +01 +0c +0b +00 +48 +53 +00 +00 +01 +0c +0b +00 +4c +53 +00 +00 +01 +0c +0b +00 +50 +53 +00 +00 +01 +0c +0b +00 +54 +53 +00 +00 +01 +0c +0b +00 +58 +53 +00 +00 +01 +0c +0b +00 +5c +53 +00 +00 +01 +0c +0b +00 +60 +53 +00 +00 +01 +0c +0b +00 +64 +53 +00 +00 +01 +0c +0b +00 +68 +53 +00 +00 +01 +0c +0b +00 +6c +53 +00 +00 +01 +0c +0b +00 +70 +53 +00 +00 +01 +0c +0b +00 +74 +53 +00 +00 +01 +0c +0b +00 +78 +53 +00 +00 +01 +0c +0b +00 +7c +53 +00 +00 +01 +0c +0b +00 +80 +53 +00 +00 +01 +0c +0b +00 +84 +53 +00 +00 +01 +0c +0b +00 +88 +53 +00 +00 +01 +0c +0b +00 +8c +53 +00 +00 +01 +0c +0b +00 +90 +53 +00 +00 +01 +0c +0b +00 +94 +53 +00 +00 +01 +0c +0b +00 +98 +53 +00 +00 +01 +0c +0b +00 +9c +53 +00 +00 +01 +0c +0b +00 +a0 +53 +00 +00 +01 +0c +0b +00 +a4 +53 +00 +00 +01 +0c +0b +00 +a8 +53 +00 +00 +01 +0c +0b +00 +ac +53 +00 +00 +01 +0c +0b +00 +b0 +53 +00 +00 +01 +0c +0b +00 +b4 +53 +00 +00 +01 +0c +0b +00 +b8 +53 +00 +00 +01 +0c +0b +00 +bc +53 +00 +00 +01 +0c +0b +00 +c0 +53 +00 +00 +01 +0c +0b +00 +c4 +53 +00 +00 +01 +0c +0b +00 +c8 +53 +00 +00 +01 +0c +0b +00 +cc +53 +00 +00 +01 +0c +0b +00 +d0 +53 +00 +00 +01 +0c +0b +00 +d4 +53 +00 +00 +01 +0c +0b +00 +d8 +53 +00 +00 +01 +0c +0b +00 +dc +53 +00 +00 +01 +0c +0b +00 +e0 +53 +00 +00 +01 +0c +0b +00 +e4 +53 +00 +00 +01 +0c +0b +00 +e8 +53 +00 +00 +01 +0c +0b +00 +ec +53 +00 +00 +01 +0c +0b +00 +f0 +53 +00 +00 +01 +0c +0b +00 +f4 +53 +00 +00 +01 +0c +0b +00 +f8 +53 +00 +00 +01 +0c +0b +00 +fc +53 +00 +00 +01 +0c +0b +00 +00 +54 +00 +00 +01 +0c +0b +00 +04 +54 +00 +00 +01 +0c +0b +00 +08 +54 +00 +00 +01 +0c +0b +00 +0c +54 +00 +00 +01 +0c +0b +00 +10 +54 +00 +00 +01 +0c +0b +00 +14 +54 +00 +00 +01 +0c +0b +00 +18 +54 +00 +00 +01 +0c +0b +00 +1c +54 +00 +00 +01 +0c +0b +00 +20 +54 +00 +00 +01 +0c +0b +00 +24 +54 +00 +00 +01 +0c +0b +00 +28 +54 +00 +00 +01 +0c +0b +00 +2c +54 +00 +00 +01 +0c +0b +00 +30 +54 +00 +00 +01 +0c +0b +00 +34 +54 +00 +00 +01 +0c +0b +00 +38 +54 +00 +00 +01 +0c +0b +00 +3c +54 +00 +00 +01 +0c +0b +00 +40 +54 +00 +00 +01 +0c +0b +00 +44 +54 +00 +00 +01 +0c +0b +00 +48 +54 +00 +00 +01 +0c +0b +00 +4c +54 +00 +00 +01 +0c +0b +00 +50 +54 +00 +00 +01 +0c +0b +00 +54 +54 +00 +00 +01 +0c +0b +00 +58 +54 +00 +00 +01 +0c +0b +00 +5c +54 +00 +00 +01 +0c +0b +00 +60 +54 +00 +00 +01 +0c +0b +00 +64 +54 +00 +00 +01 +0c +0b +00 +68 +54 +00 +00 +01 +0c +0b +00 +6c +54 +00 +00 +01 +0c +0b +00 +70 +54 +00 +00 +01 +0c +0b +00 +74 +54 +00 +00 +01 +0c +0b +00 +78 +54 +00 +00 +01 +0c +0b +00 +7c +54 +00 +00 +01 +0c +0b +00 +80 +54 +00 +00 +01 +0c +0b +00 +84 +54 +00 +00 +01 +0c +0b +00 +88 +54 +00 +00 +01 +0c +0b +00 +8c +54 +00 +00 +01 +0c +0b +00 +90 +54 +00 +00 +01 +0c +0b +00 +94 +54 +00 +00 +01 +0c +0b +00 +98 +54 +00 +00 +01 +0c +0b +00 +9c +54 +00 +00 +01 +0c +0b +00 +a0 +54 +00 +00 +01 +0c +0b +00 +a4 +54 +00 +00 +01 +0c +0b +00 +a8 +54 +00 +00 +01 +0c +0b +00 +ac +54 +00 +00 +01 +0c +0b +00 +b0 +54 +00 +00 +01 +0c +0b +00 +b4 +54 +00 +00 +01 +0c +0b +00 +b8 +54 +00 +00 +01 +0c +0b +00 +bc +54 +00 +00 +01 +0c +0b +00 +c0 +54 +00 +00 +01 +0c +0b +00 +c4 +54 +00 +00 +01 +0c +0b +00 +c8 +54 +00 +00 +01 +0c +0b +00 +cc +54 +00 +00 +01 +0c +0b +00 +d0 +54 +00 +00 +01 +0c +0b +00 +d4 +54 +00 +00 +01 +0c +0b +00 +d8 +54 +00 +00 +01 +0c +0b +00 +dc +54 +00 +00 +01 +0c +0b +00 +e0 +54 +00 +00 +01 +0c +0b +00 +e4 +54 +00 +00 +01 +0c +0b +00 +e8 +54 +00 +00 +01 +0c +0b +00 +ec +54 +00 +00 +01 +0c +0b +00 +f0 +54 +00 +00 +01 +0c +0b +00 +f4 +54 +00 +00 +01 +0c +0b +00 +f8 +54 +00 +00 +01 +0c +0b +00 +fc +54 +00 +00 +01 +0c +0b +00 +00 +55 +00 +00 +01 +0c +0b +00 +04 +55 +00 +00 +01 +0c +0b +00 +08 +55 +00 +00 +01 +0c +0b +00 +0c +55 +00 +00 +01 +0c +0b +00 +10 +55 +00 +00 +01 +0c +0b +00 +14 +55 +00 +00 +01 +0c +0b +00 +18 +55 +00 +00 +01 +0c +0b +00 +1c +55 +00 +00 +01 +0c +0b +00 +20 +55 +00 +00 +01 +0c +0b +00 +24 +55 +00 +00 +01 +0c +0b +00 +28 +55 +00 +00 +01 +0c +0b +00 +2c +55 +00 +00 +01 +0c +0b +00 +30 +55 +00 +00 +01 +0c +0b +00 +34 +55 +00 +00 +01 +0c +0b +00 +38 +55 +00 +00 +01 +0c +0b +00 +3c +55 +00 +00 +01 +0c +0b +00 +40 +55 +00 +00 +01 +0c +0b +00 +44 +55 +00 +00 +01 +0c +0b +00 +48 +55 +00 +00 +01 +0c +0b +00 +4c +55 +00 +00 +01 +0c +0b +00 +50 +55 +00 +00 +01 +0c +0b +00 +54 +55 +00 +00 +01 +0c +0b +00 +58 +55 +00 +00 +01 +0c +0b +00 +5c +55 +00 +00 +01 +0c +0b +00 +60 +55 +00 +00 +01 +0c +0b +00 +64 +55 +00 +00 +01 +0c +0b +00 +68 +55 +00 +00 +01 +0c +0b +00 +6c +55 +00 +00 +01 +0c +0b +00 +70 +55 +00 +00 +01 +0c +0b +00 +74 +55 +00 +00 +01 +0c +0b +00 +78 +55 +00 +00 +01 +0c +0b +00 +7c +55 +00 +00 +01 +0c +0b +00 +80 +55 +00 +00 +01 +0c +0b +00 +84 +55 +00 +00 +01 +0c +0b +00 +88 +55 +00 +00 +01 +0c +0b +00 +8c +55 +00 +00 +01 +0c +0b +00 +90 +55 +00 +00 +01 +0c +0b +00 +94 +55 +00 +00 +01 +0c +0b +00 +98 +55 +00 +00 +01 +0c +0b +00 +9c +55 +00 +00 +01 +0c +0b +00 +a0 +55 +00 +00 +01 +0c +0b +00 +a4 +55 +00 +00 +01 +0c +0b +00 +a8 +55 +00 +00 +01 +0c +0b +00 +ac +55 +00 +00 +01 +0c +0b +00 +b0 +55 +00 +00 +01 +0c +0b +00 +b4 +55 +00 +00 +01 +0c +0b +00 +b8 +55 +00 +00 +01 +0c +0b +00 +bc +55 +00 +00 +01 +0c +0b +00 +c0 +55 +00 +00 +01 +0c +0b +00 +c4 +55 +00 +00 +01 +0c +0b +00 +c8 +55 +00 +00 +01 +0c +0b +00 +cc +55 +00 +00 +01 +0c +0b +00 +d0 +55 +00 +00 +01 +0c +0b +00 +d4 +55 +00 +00 +01 +0c +0b +00 +d8 +55 +00 +00 +01 +0c +0b +00 +dc +55 +00 +00 +01 +0c +0b +00 +e0 +55 +00 +00 +01 +0c +0b +00 +e4 +55 +00 +00 +01 +0c +0b +00 +e8 +55 +00 +00 +01 +0c +0b +00 +ec +55 +00 +00 +01 +0c +0b +00 +f0 +55 +00 +00 +01 +0c +0b +00 +f4 +55 +00 +00 +01 +0c +0b +00 +f8 +55 +00 +00 +01 +0c +0b +00 +fc +55 +00 +00 +01 +0c +0b +00 +00 +56 +00 +00 +01 +0c +0b +00 +04 +56 +00 +00 +01 +0c +0b +00 +08 +56 +00 +00 +01 +0c +0b +00 +0c +56 +00 +00 +01 +0c +0b +00 +10 +56 +00 +00 +01 +0c +0b +00 +14 +56 +00 +00 +01 +0c +0b +00 +18 +56 +00 +00 +01 +0c +0b +00 +1c +56 +00 +00 +01 +0c +0b +00 +20 +56 +00 +00 +01 +0c +0b +00 +24 +56 +00 +00 +01 +0c +0b +00 +28 +56 +00 +00 +01 +0c +0b +00 +2c +56 +00 +00 +01 +0c +0b +00 +30 +56 +00 +00 +01 +0c +0b +00 +34 +56 +00 +00 +01 +0c +0b +00 +38 +56 +00 +00 +01 +0c +0b +00 +3c +56 +00 +00 +01 +0c +0b +00 +40 +56 +00 +00 +01 +0c +0b +00 +44 +56 +00 +00 +01 +0c +0b +00 +48 +56 +00 +00 +01 +0c +0b +00 +4c +56 +00 +00 +01 +0c +0b +00 +50 +56 +00 +00 +01 +0c +0b +00 +54 +56 +00 +00 +01 +0c +0b +00 +58 +56 +00 +00 +01 +0c +0b +00 +5c +56 +00 +00 +01 +0c +0b +00 +60 +56 +00 +00 +01 +0c +0b +00 +64 +56 +00 +00 +01 +0c +0b +00 +68 +56 +00 +00 +01 +0c +0b +00 +6c +56 +00 +00 +01 +0c +0b +00 +70 +56 +00 +00 +01 +0c +0b +00 +74 +56 +00 +00 +01 +0c +0b +00 +78 +56 +00 +00 +01 +0c +0b +00 +7c +56 +00 +00 +01 +0c +0b +00 +80 +56 +00 +00 +01 +0c +0b +00 +84 +56 +00 +00 +01 +0c +0b +00 +88 +56 +00 +00 +01 +0c +0b +00 +8c +56 +00 +00 +01 +0c +0b +00 +90 +56 +00 +00 +01 +0c +0b +00 +94 +56 +00 +00 +01 +0c +0b +00 +98 +56 +00 +00 +01 +0c +0b +00 +9c +56 +00 +00 +01 +0c +0b +00 +a0 +56 +00 +00 +01 +0c +0b +00 +a4 +56 +00 +00 +01 +0c +0b +00 +a8 +56 +00 +00 +01 +0c +0b +00 +ac +56 +00 +00 +01 +0c +0b +00 +b0 +56 +00 +00 +01 +0c +0b +00 +b4 +56 +00 +00 +01 +0c +0b +00 +b8 +56 +00 +00 +01 +0c +0b +00 +bc +56 +00 +00 +01 +0c +0b +00 +c0 +56 +00 +00 +01 +0c +0b +00 +c4 +56 +00 +00 +01 +0c +0b +00 +c8 +56 +00 +00 +01 +0c +0b +00 +cc +56 +00 +00 +01 +0c +0b +00 +d0 +56 +00 +00 +01 +0c +0b +00 +d4 +56 +00 +00 +01 +0c +0b +00 +d8 +56 +00 +00 +01 +0c +0b +00 +dc +56 +00 +00 +01 +0c +0b +00 +e0 +56 +00 +00 +01 +0c +0b +00 +e4 +56 +00 +00 +01 +0c +0b +00 +e8 +56 +00 +00 +01 +0c +0b +00 +ec +56 +00 +00 +01 +0c +0b +00 +f0 +56 +00 +00 +01 +0c +0b +00 +f4 +56 +00 +00 +01 +0c +0b +00 +f8 +56 +00 +00 +01 +0c +0b +00 +fc +56 +00 +00 +01 +0c +0b +00 +00 +57 +00 +00 +01 +0c +0b +00 +04 +57 +00 +00 +01 +0c +0b +00 +08 +57 +00 +00 +01 +0c +0b +00 +0c +57 +00 +00 +01 +0c +0b +00 +10 +57 +00 +00 +01 +0c +0b +00 +14 +57 +00 +00 +01 +0c +0b +00 +18 +57 +00 +00 +01 +0c +0b +00 +1c +57 +00 +00 +01 +0c +0b +00 +20 +57 +00 +00 +01 +0c +0b +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +61 +74 +61 +00 +2e +72 +6f +64 +61 +74 +61 +00 +2e +72 +65 +6c +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +2e +72 +6f +64 +61 +74 +61 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +79 +61 +73 +6d +5f +69 +6e +74 +65 +72 +6e +61 +6c +5f +65 +72 +72 +6f +72 +5f +00 +79 +61 +73 +6d +5f +65 +78 +70 +72 +5f +63 +6f +70 +79 +00 +79 +61 +73 +6d +5f +65 +78 +70 +72 +5f +65 +78 +70 +72 +00 +79 +61 +73 +6d +5f +65 +78 +70 +72 +5f +6e +65 +77 +00 +79 +61 +73 +6d +5f +73 +79 +6d +72 +65 +63 +5f +64 +65 +66 +69 +6e +65 +5f +6c +61 +62 +65 +6c +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +4c +54 +58 +5f +6d +6f +64 +65 +5f +62 +69 +74 +73 +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +62 +63 +5f +6e +65 +77 +5f +6a +6d +70 +00 +79 +61 +73 +6d +5f +65 +61 +5f +67 +65 +74 +5f +64 +69 +73 +70 +00 +79 +61 +73 +6d +5f +65 +78 +70 +72 +5f +5f +63 +6f +6e +74 +61 +69 +6e +73 +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +67 +65 +74 +5f +72 +65 +67 +5f +73 +69 +7a +65 +00 +79 +61 +73 +6d +5f +5f +65 +72 +72 +6f +72 +00 +79 +61 +73 +6d +5f +69 +6e +74 +6e +75 +6d +5f +6e +65 +77 +5f +75 +69 +6e +74 +00 +79 +61 +73 +6d +5f +65 +78 +70 +72 +5f +69 +6e +74 +00 +79 +61 +73 +6d +5f +65 +61 +5f +64 +65 +6c +65 +74 +65 +00 +79 +61 +73 +6d +5f +65 +78 +70 +72 +5f +64 +65 +6c +65 +74 +65 +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +65 +61 +5f +6e +65 +77 +5f +72 +65 +67 +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +65 +61 +5f +73 +65 +74 +5f +64 +69 +73 +70 +6f +6e +6c +79 +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +65 +61 +5f +6e +65 +77 +5f +69 +6d +6d +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +73 +65 +74 +5f +72 +65 +78 +5f +66 +72 +6f +6d +5f +72 +65 +67 +00 +79 +61 +73 +6d +5f +78 +66 +72 +65 +65 +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +62 +63 +5f +6e +65 +77 +5f +69 +6e +73 +6e +00 +79 +61 +73 +6d +5f +5f +77 +61 +72 +6e +69 +6e +67 +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +70 +61 +72 +73 +65 +5f +69 +6e +73 +6e +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +70 +61 +72 +73 +65 +5f +63 +70 +75 +00 +79 +61 +73 +6d +5f +78 +38 +36 +5f +5f +70 +61 +72 +73 +65 +5f +63 +68 +65 +63 +6b +5f +69 +64 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +e9 +d3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cc +d3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5a +d3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +63 +d3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7c +d3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4a +d3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +28 +d3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a7 +d3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +95 +d3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +18 +d3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e7 +d2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7d +d2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +45 +d2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a9 +d2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +df +d1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4f +d1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +91 +d1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3f +d1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +75 +d1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b4 +d1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +37 +d1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +59 +d1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +16 +d1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2a +d1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ff +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0e +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0e +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a4 +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ea +cf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2a +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +88 +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e0 +cf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +71 +cf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +71 +cf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +71 +cf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +46 +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dc +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +63 +cf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +45 +cf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c0 +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +37 +cf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fd +ce +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9b +ce +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e1 +ce +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e5 +ce +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +78 +ce +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8b +ce +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8d +cf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a9 +cf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fd +ce +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ea +cf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c5 +cf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +71 +cf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +45 +cf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +19 +cf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3c +56 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +32 +ce +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7e +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +34 +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +24 +ce +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +06 +ce +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9a +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +18 +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f8 +cd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +da +cd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +da +cd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +da +cd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b6 +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6c +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cc +cd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ae +cd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d2 +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +50 +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a0 +cd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a9 +ce +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +67 +ce +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4b +ce +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +32 +ce +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +06 +ce +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +da +cd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c5 +ce +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +62 +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ae +cd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +82 +cd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +54 +55 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +46 +cd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +35 +cd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +24 +cd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f0 +cc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ca +cc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +31 +cc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5e +cc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3b +cc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +21 +cc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +cc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f8 +cb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +81 +cc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d5 +cb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c7 +cb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ad +cb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9d +cc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4f +d2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9f +cb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b9 +cc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4b +cb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2a +cb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e9 +ca +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9c +ca +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8b +ca +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7a +ca +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +61 +ca +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +57 +ca +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +40 +ca +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2f +ca +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +16 +ca +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0c +ca +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bf +ca +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3f +c9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +65 +c9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +49 +c9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2f +c9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +c9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9d +c9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +81 +c9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f9 +c8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d0 +c8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +17 +c9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +da +c8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c0 +c8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a8 +c8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +10 +c8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +52 +c8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +c8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +36 +c8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6e +c8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f8 +c7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1a +c8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +c7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +eb +c7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a4 +c7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +93 +c7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +82 +c7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +71 +c7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c0 +c7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3b +c6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +44 +c6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +60 +c6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2b +c6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +c6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7c +c6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +98 +c6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f6 +c5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bb +c5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +13 +c6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +c5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c5 +c5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9b +c5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ab +c5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +48 +c5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1e +c5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +37 +c5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +61 +c5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c0 +c4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +af +c4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9e +c4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6a +c4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +59 +c4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +18 +c4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +07 +c4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c6 +c3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b5 +c3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f6 +c3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6f +c3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5e +c3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +43 +c3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a4 +c3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +92 +c3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +33 +c3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +48 +c4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +01 +c3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f2 +c2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4d +c3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1b +c3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ea +c2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d2 +c2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e2 +c2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c0 +c2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8d +c4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e9 +c4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7e +c2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0d +c5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fb +c4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +73 +c2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +54 +c2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6b +c2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +84 +c5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3d +c7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +23 +c7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +60 +c7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +07 +c7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +eb +c6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cf +c6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b4 +c6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +48 +54 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +ff +c1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +97 +c8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b9 +c9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b6 +c1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a8 +c1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +80 +c1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +db +c9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f5 +c9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6d +c1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d8 +ca +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1b +c1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0c +cb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3a +cb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +29 +c1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f1 +c0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +08 +c1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e7 +cb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ad +cb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +67 +cb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +81 +cb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a0 +53 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +df +cc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +13 +cd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +69 +cd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ee +d0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f8 +d1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +14 +d2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +28 +c0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +61 +d2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2e +d2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1d +c0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fe +bf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +15 +c0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bd +bf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +93 +bf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +84 +bf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7a +bf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4a +bf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +63 +bf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +da +be +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c9 +be +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f6 +be +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +67 +be +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +58 +be +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4e +be +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8a +be +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +25 +be +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1b +be +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c5 +bd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +04 +be +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +37 +be +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cf +bd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a1 +bd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b5 +bd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +52 +bd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +bd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +db +bc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d1 +bc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +94 +bc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ed +bc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ba +bc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +84 +bc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +25 +bd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3e +bc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +30 +bc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +08 +bc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +50 +bc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f8 +bb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9e +bc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6c +bc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f0 +bb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +16 +bc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cc +bb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e3 +bb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b5 +bb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a4 +bb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +41 +bd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6e +bd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +51 +bb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e1 +bd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8a +bd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3e +bb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +03 +bb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f1 +ba +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e7 +ba +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +98 +ba +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d0 +ba +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b4 +ba +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a2 +ba +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +78 +ba +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +88 +ba +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +45 +ba +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +34 +ba +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +23 +ba +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +12 +ba +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +61 +ba +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cc +b9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bb +b9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +87 +b9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +75 +b9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6b +b9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +54 +b9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +43 +b9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +de +b8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cc +b8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c2 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ab +b8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fa +b8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +88 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7e +b8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4b +b8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +39 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2f +b8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +18 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +eb +b7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +be +b7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +91 +b7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7f +b7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +75 +b7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5e +b7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +31 +b7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +20 +b7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f3 +b6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0f +b7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c6 +b6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e2 +b6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d0 +b6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b6 +b6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4d +b7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ad +b7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +da +b7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +07 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9a +b8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +67 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +16 +b6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +16 +b9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a5 +b5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +40 +b5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +01 +b5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +78 +b5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5c +b5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f1 +b4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ba +b4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +18 +b5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7e +b4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0b +b5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d6 +b4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +54 +b4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +62 +b4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +94 +b5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c1 +b5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c9 +b3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9e +b4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a7 +b3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b1 +b3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8c +b4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +39 +b4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1f +b4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7b +b3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +b4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e9 +b3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +b3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +51 +b3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5f +b3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +89 +b3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0d +b3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fb +b2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f1 +b2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +da +b2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ad +b2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9c +b2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6f +b2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0a +b2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f9 +b1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +26 +b2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +42 +b2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c4 +b1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b5 +b1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d6 +b1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +b1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ad +b1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +95 +b1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a5 +b1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5e +b2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4d +b1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3c +b1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0f +b1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2b +b1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +de +b0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +83 +b1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +69 +b1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cb +b0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8b +b2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +76 +b0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +49 +b0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +38 +b0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0b +b0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f9 +af +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +af +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +af +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +27 +b0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +65 +b0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7e +af +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6d +af +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5c +af +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2f +af +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1e +af +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0d +af +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4b +af +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b2 +ae +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +36 +b2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8c +ae +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a1 +ae +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ce +ae +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +17 +ae +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +ae +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fb +ad +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ac +ad +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e4 +ad +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c8 +ad +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b6 +ad +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8c +ad +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9c +ad +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +59 +ad +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2c +ad +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1b +ad +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0a +ad +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f8 +ac +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ee +ac +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bb +ac +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +aa +ac +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7d +ac +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +49 +ac +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +38 +ac +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +27 +ac +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6c +ac +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +99 +ac +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +ac +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +48 +ad +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +75 +ad +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7c +ab +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +69 +ab +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7b +ae +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5f +ae +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4d +ae +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +36 +ab +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +33 +ae +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8a +ab +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +23 +ab +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4d +ab +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +aa +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9f +aa +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8d +aa +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +83 +aa +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bb +aa +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5a +aa +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +50 +aa +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f8 +bd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1d +aa +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6c +aa +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +39 +aa +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +27 +aa +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fd +a9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0d +aa +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e6 +a9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d5 +a9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a8 +a9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +97 +a9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +32 +a9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +21 +a9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +10 +a9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e3 +a8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d2 +a8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7e +be +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a5 +a8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +94 +a8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +83 +a8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +72 +a8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c1 +a8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ff +a8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4e +a9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6a +a9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e0 +bf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d9 +a7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c7 +a7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bd +a7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a6 +a7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +89 +a7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +61 +a7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +01 +a8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4e +a7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +35 +a8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4f +a8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +61 +a8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +43 +a7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1b +a8 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +12 +a7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +32 +a7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +86 +a9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c4 +a9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +aa +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7e +a6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4b +a6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +62 +a6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9c +ab +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +04 +ab +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b6 +ab +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d0 +ab +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +13 +a6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +16 +ac +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ea +ab +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +04 +ac +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9e +a6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e9 +a5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +a6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +33 +a6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b3 +a5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fc +ae +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ea +ae +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a0 +a5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b4 +af +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6a +a5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9a +af +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c6 +af +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5f +a5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +40 +a5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +57 +a5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +20 +a5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +92 +b0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0d +a5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ac +b0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fe +b0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +02 +a5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ec +b0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +da +a4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f1 +a4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c9 +b2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +29 +b3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f7 +b5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9e +b6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6a +b6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dd +b5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +84 +b6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +36 +b6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +50 +b6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d4 +52 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +32 +b9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +aa +b9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +30 +a4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ef +b9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +01 +ba +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1d +a4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e7 +a3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1f +bb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +93 +bb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +79 +bb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5f +bb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ab +a3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cb +a3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +82 +a3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b8 +be +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a6 +be +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6f +a3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +39 +bf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +39 +a3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +12 +bf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +27 +bf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2e +a3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0f +a3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +26 +a3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ac +bf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c7 +a2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dc +d3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b6 +a2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cd +d1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +16 +a2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b6 +a1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dc +a1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c0 +a1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a6 +a1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3a +a1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2b +a1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +56 +a1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +72 +a1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +23 +a1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0b +a1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1b +a1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f9 +a0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e7 +a0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dd +a0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c6 +a0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8e +a1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a3 +a0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +95 +a0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f8 +a1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +25 +a2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3e +a2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4e +a2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3d +a0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +35 +a2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1c +a2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0b +a2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c3 +9e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cc +9e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +9e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b3 +9e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +91 +9e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +04 +9f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +20 +9f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7e +9e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +27 +9e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9b +9e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5f +9e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +31 +9e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +04 +9e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +17 +9e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ab +9d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d1 +9d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b5 +9d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9b +9d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +42 +9d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4b +9d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +67 +9d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +32 +9d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +83 +9d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ec +9c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1a +9d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +08 +9d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f6 +9c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cc +9c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dc +9c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8c +9c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7b +9c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b5 +9c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ed +9d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +43 +9e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f8 +9b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cb +9b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8e +9f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b8 +9b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +65 +9f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b7 +9f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ad +9b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3c +9f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +85 +9b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9c +9b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e0 +9f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +02 +a0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +17 +a0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0e +9b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c4 +9a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b3 +9a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a2 +9a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +91 +9a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +34 +9a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +23 +9a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +99 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +de +99 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ab +99 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9a +99 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +89 +99 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +40 +99 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f7 +98 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c3 +98 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +96 +98 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4d +98 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +44 +98 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3c +98 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4d +98 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +34 +98 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +06 +98 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ed +97 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e5 +97 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +06 +98 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +22 +98 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d3 +97 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f4 +97 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cb +97 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +db +97 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2e +97 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +70 +97 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1e +97 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +54 +97 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8c +97 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +16 +97 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +38 +97 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f5 +96 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +97 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a3 +96 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +91 +96 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +80 +96 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6f +96 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5e +96 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4d +96 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +de +96 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b5 +97 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +69 +98 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +da +98 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9a +95 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7f +95 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b6 +95 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d2 +95 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6f +95 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +40 +95 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +08 +96 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +22 +96 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ee +95 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3c +96 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +04 +95 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +24 +95 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +85 +98 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b2 +98 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e6 +98 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8d +94 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +13 +99 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2f +99 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7a +94 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4d +94 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5c +99 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +78 +99 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3a +94 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0d +94 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fa +99 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c7 +99 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fa +93 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cd +93 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +57 +9a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +80 +9a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ba +93 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8d +93 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f2 +9a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e0 +9a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7a +93 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +be +92 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +35 +93 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0f +93 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e9 +92 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cd +92 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9c +92 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +af +92 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +07 +93 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +53 +93 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2d +93 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +79 +91 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +95 +91 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4c +91 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +68 +91 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +56 +91 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3c +91 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fa +97 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ae +90 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7a +90 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4d +90 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +19 +90 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +08 +90 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3c +90 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +69 +90 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9d +90 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +51 +8f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2b +8f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +23 +8f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +51 +8f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1b +8f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +8f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c7 +8e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ed +8e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d1 +8e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f1 +8e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a7 +8e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b7 +8e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +55 +a2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +79 +8e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6d +8e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +35 +8f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +8f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +58 +8e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +84 +8e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4c +8e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +63 +8e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +16 +98 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5d +98 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b2 +8d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ce +8d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +85 +8d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a1 +8d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8f +8d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +75 +8d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5d +8d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +71 +c5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1b +8d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +78 +c5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ee +8c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0a +8d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +37 +8d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4c +8d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dd +8c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9f +8c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +38 +8c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7c +8c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cb +8c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5a +8c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b9 +8c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +10 +52 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +11 +8c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ff +8d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ea +8d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fe +8b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +14 +8e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b7 +8b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +96 +8e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +36 +8e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a4 +8b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6d +8f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b1 +8f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f7 +8f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e5 +8f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cb +8f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8f +8f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +50 +51 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +5e +8b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +24 +91 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4b +8b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d1 +90 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +08 +91 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +40 +8b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f3 +90 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +18 +8b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2f +8b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ef +8a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b1 +91 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d3 +91 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dc +8a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f5 +91 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e1 +92 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +73 +8a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3a +92 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +17 +92 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5d +92 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8a +8a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +49 +8a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +60 +8a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +80 +92 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +a2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fb +89 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a5 +89 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6a +89 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +60 +89 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +07 +cd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +11 +89 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +89 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ef +88 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +de +88 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2d +89 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ee +87 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f7 +87 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +13 +88 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +de +87 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bc +87 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2f +88 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4b +88 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a9 +87 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +80 +87 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c6 +87 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8a +87 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +70 +87 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d4 +9a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e6 +86 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ef +86 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0b +87 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d6 +86 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b4 +86 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +27 +87 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3c +87 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a1 +86 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +86 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +12 +86 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2e +86 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f9 +85 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +85 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4a +86 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +66 +86 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c4 +85 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9b +85 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e1 +85 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a5 +85 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8b +85 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +65 +85 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +be +86 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +82 +86 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +52 +85 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b9 +84 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +df +84 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c3 +84 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a9 +84 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +83 +84 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +17 +85 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fb +84 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +73 +84 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4a +84 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +91 +84 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +54 +84 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3a +84 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a8 +83 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ce +83 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b2 +83 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +98 +83 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +72 +83 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +06 +84 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ea +83 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +62 +83 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c9 +82 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ef +82 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d3 +82 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b9 +82 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +93 +82 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +27 +83 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0b +83 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +83 +82 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5a +82 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a1 +82 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +64 +82 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4a +82 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +24 +82 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +80 +83 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +43 +83 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +11 +82 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +81 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +32 +82 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f2 +81 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d8 +81 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +22 +84 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2c +81 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +52 +81 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +36 +81 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1c +81 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f6 +80 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8a +81 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6e +81 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e6 +80 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bd +80 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +04 +81 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c7 +80 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ad +80 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +95 +80 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d4 +9f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b4 +c7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +47 +7f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6d +7f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +51 +7f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +37 +7f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +11 +7f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a5 +7f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +89 +7f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +01 +7f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d8 +7e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1f +7f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e2 +7e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c8 +7e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b0 +7e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9f +7e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8e +7e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c5 +90 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +32 +7e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4e +7e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +21 +7e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +14 +7e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fb +7d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f1 +7d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +da +7d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c9 +7d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b8 +7d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7d +7e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d6 +7f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +30 +80 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +07 +80 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f2 +7f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ba +7f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +78 +50 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +66 +7d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4c +80 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +68 +80 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +53 +7d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +84 +80 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0c +7d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c0 +81 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a6 +81 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f9 +7c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cc +7c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +73 +85 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +33 +85 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b9 +7c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +58 +87 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +10 +7c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +80 +7b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2c +7c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +46 +7b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2c +7b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +10 +7b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +48 +7c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1a +7b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +02 +7b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c8 +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d6 +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a2 +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a2 +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +54 +7b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8e +7b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +68 +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +68 +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1a +7c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5f +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +44 +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +77 +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +36 +7c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3a +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +11 +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +86 +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8a +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ea +79 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +01 +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9e +79 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9e +79 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +52 +7c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +90 +79 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +72 +79 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +72 +79 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a2 +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6e +7c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +64 +79 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d8 +7b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bc +7b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a0 +7b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +66 +7b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2c +7b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f4 +7b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +10 +7b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ae +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +90 +4f +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +3c +c4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ba +79 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d6 +79 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +11 +79 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2d +79 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1f +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +44 +7a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9e +79 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +64 +7c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +46 +79 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +72 +79 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a8 +4e +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +f8 +78 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +be +78 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +82 +78 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a2 +78 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a7 +7d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8d +7d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +74 +7d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +34 +7d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1a +7d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +53 +78 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +da +7c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9a +7c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +80 +7c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d5 +78 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +17 +78 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2e +78 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6a +78 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +91 +77 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b7 +77 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9b +77 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +81 +77 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +69 +77 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +58 +77 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2b +77 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1a +77 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f8 +76 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +99 +76 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bf +76 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a3 +76 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +89 +76 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +71 +76 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +12 +76 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +38 +76 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1c +76 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +02 +76 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ea +75 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +85 +75 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6a +75 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bd +75 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a1 +75 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5a +75 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +39 +75 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +42 +75 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +74 +75 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +29 +75 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b3 +74 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d9 +74 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bd +74 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a3 +74 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f5 +74 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6f +74 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8b +74 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +79 +74 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5f +74 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +11 +75 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d9 +75 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +73 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fd +73 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e1 +73 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c7 +73 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +af +73 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5c +73 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +82 +73 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +66 +73 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4c +73 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +34 +73 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e1 +72 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +07 +73 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +eb +72 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d1 +72 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b9 +72 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +23 +73 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9e +73 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +42 +72 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5e +72 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +15 +72 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +31 +72 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1f +72 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +72 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b5 +71 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d1 +71 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +88 +71 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a4 +71 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +92 +71 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +78 +71 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ed +71 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +27 +71 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +16 +71 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e9 +70 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d8 +70 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +71 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a4 +70 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bb +70 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ae +70 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +94 +70 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6e +70 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +54 +71 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +43 +71 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5b +70 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +32 +70 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7c +70 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3c +70 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +22 +70 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9c +72 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f3 +6f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8b +72 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7a +72 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +6f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c9 +6f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e0 +6f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3b +74 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a0 +6f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2a +74 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +19 +74 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +95 +6f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +76 +6f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8d +6f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +54 +76 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2e +6f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0a +70 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b7 +6f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +64 +6f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4a +6f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fd +6e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +19 +6f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c9 +6e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b7 +6e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ad +6e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +96 +6e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e5 +6e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +db +76 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +39 +6e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2d +6e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +77 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +47 +77 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d5 +6d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ef +77 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e7 +78 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d3 +77 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ab +6d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c2 +6d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +77 +6d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4d +6d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +64 +6d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bb +88 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9f +88 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cd +88 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1e +6d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +83 +88 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +67 +88 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +85 +6d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f4 +6c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0b +6d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +35 +6d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b2 +6c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +49 +89 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7c +89 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9f +6c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ce +89 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ea +89 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +65 +6b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6e +6b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8a +6b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +55 +6b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +33 +6b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a6 +6b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c2 +6b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +20 +6b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e5 +6a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3d +6b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +01 +6b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ef +6a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c5 +6a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d5 +6a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +51 +6a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +71 +6a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e9 +69 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ae +6a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8c +6a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f7 +69 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bf +69 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d6 +69 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +de +6b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6b +69 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +23 +6c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fa +6b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +58 +69 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1d +69 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0c +69 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cd +68 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e9 +68 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +68 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bd +68 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a5 +68 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +94 +68 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +83 +68 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f9 +67 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +02 +68 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1e +68 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e9 +67 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c7 +67 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3a +68 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +56 +68 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b4 +67 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8b +67 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d1 +67 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +95 +67 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7b +67 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +72 +68 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2d +67 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1c +67 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0b +67 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +81 +66 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8a +66 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a6 +66 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +71 +66 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4f +66 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c2 +66 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +de +66 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3c +66 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +13 +66 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +59 +66 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1d +66 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +03 +66 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +90 +65 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b6 +65 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9a +65 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +80 +65 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +53 +65 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +37 +65 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ff +64 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1b +65 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +65 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e0 +64 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ea +64 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ac +64 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +59 +64 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7f +64 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +63 +64 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +49 +64 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9b +64 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +03 +64 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b0 +63 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d6 +63 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ba +63 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a0 +63 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f2 +63 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +42 +63 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +61 +63 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4c +63 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +32 +63 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1a +63 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +63 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3f +88 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8c +62 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ab +62 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c0 +62 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7c +62 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dc +62 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0f +62 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +96 +62 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +64 +62 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +41 +62 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +27 +62 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e2 +61 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fa +61 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2d +69 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b5 +61 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a4 +61 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6a +61 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bf +60 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b1 +60 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +55 +60 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7b +60 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5f +60 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +45 +60 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +11 +60 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2d +60 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +97 +60 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ed +60 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4e +61 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +25 +61 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +61 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d1 +60 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cc +4d +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +93 +61 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bc +5f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ca +61 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f8 +62 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +65 +5f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +88 +63 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +76 +63 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +52 +5f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +25 +5f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +31 +64 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1f +64 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +12 +5f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c8 +64 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e1 +5e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d3 +5e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +68 +65 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7f +5e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +55 +5e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6c +5e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +26 +5e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +13 +5e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3d +5e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ee +5f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d5 +5f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +db +5d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a7 +5f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8d +5f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +73 +5f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ba +5d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c8 +5d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +33 +5f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f3 +5e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b9 +5e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8b +5d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9f +5e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8d +5e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +78 +5d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a2 +5d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f2 +5d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d3 +5c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dc +5c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f8 +5c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c3 +5c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a1 +5c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +14 +5d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +30 +5d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8e +5c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +53 +5c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ab +5c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6f +5c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5d +5c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +33 +5c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +43 +5c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1c +5c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4c +5d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d2 +65 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +eb +65 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fa +66 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +95 +5b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +63 +67 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +49 +67 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +82 +5b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +47 +5b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +13 +5b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e6 +5a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ca +5a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b8 +5a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ae +5a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +97 +5a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +de +92 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c8 +c6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3c +5a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +25 +5a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4d +5a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c0 +59 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c9 +59 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e5 +59 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b0 +59 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +98 +59 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +86 +59 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7c +59 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +65 +59 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +01 +5a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +86 +5a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d5 +5a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +02 +5b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +36 +5b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +38 +58 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0b +58 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fa +57 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b4 +57 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +90 +57 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bf +57 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d4 +57 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9a +57 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +70 +57 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +80 +57 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e9 +57 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +27 +58 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +17 +57 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +54 +58 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +69 +58 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +04 +57 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7e +58 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bd +56 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +93 +58 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a8 +58 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +aa +56 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bd +58 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +48 +56 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +37 +56 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1f +cb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +08 +7e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +55 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +55 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +04 +55 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +72 +55 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +56 +55 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3a +55 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +13 +55 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e5 +54 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f5 +54 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8e +55 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b2 +54 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c6 +55 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +aa +55 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a7 +54 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +88 +54 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9f +54 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +04 +56 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6b +54 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5d +54 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +26 +56 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +30 +cb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +c2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +58 +62 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ce +53 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +85 +53 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a1 +53 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +58 +53 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +74 +53 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +62 +53 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +48 +53 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +14 +53 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +03 +53 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f2 +52 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +30 +53 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7b +52 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6c +52 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b3 +52 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +97 +52 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +64 +52 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4c +52 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5c +52 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e6 +51 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +51 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1e +52 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +02 +52 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cf +51 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b7 +51 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c7 +51 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a5 +51 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3a +52 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +70 +51 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +94 +51 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7a +51 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +60 +51 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +48 +51 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +29 +51 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e1 +52 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cf +52 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +16 +51 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d4 +50 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +48 +50 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6e +50 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +52 +50 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +38 +50 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +20 +50 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8a +50 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f8 +4f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b8 +50 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a6 +50 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ed +4f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ce +4f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e5 +4f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +68 +4f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0f +50 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bc +4f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a0 +4f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +84 +4f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4c +4f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f4 +4c +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +17 +4f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +4f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fb +4e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ac +4e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9b +4e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +52 +4e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +43 +4e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6e +4e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8a +4e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3b +4e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +23 +4e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +33 +4e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c8 +4e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ed +4d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +11 +4e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f7 +4d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dd +4d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e4 +4e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +33 +4f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +83 +4d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +37 +51 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f7 +50 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +70 +4d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bd +53 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1b +4d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0a +4d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f9 +4c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +4c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bb +4c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +aa +4c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +99 +4c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3f +4c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +65 +4c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +49 +4c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2f +4c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +df +4b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fb +4b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5e +4b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +84 +4b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +68 +4b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4e +4b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a0 +4b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1a +4b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +36 +4b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +24 +4b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0a +4b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f2 +4a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8d +4a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a9 +4a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c5 +4a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3c +4a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2b +4a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fe +49 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ed +49 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dc +49 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +af +49 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +93 +49 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +78 +49 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +67 +49 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +55 +49 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4b +49 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f0 +48 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0c +49 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c3 +48 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +df +48 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cd +48 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b3 +48 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9b +48 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +34 +49 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +54 +48 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +42 +48 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +38 +48 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +21 +48 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +10 +48 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f1 +47 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8a +48 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +70 +48 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e1 +47 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cb +49 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1a +4a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +58 +4a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +77 +47 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7c +4a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6a +4a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6c +47 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4d +47 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +64 +47 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e1 +4a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ce +4b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bc +4b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +01 +47 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +17 +4c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ac +46 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9b +46 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +48 +46 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6e +46 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +52 +46 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +38 +46 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +20 +46 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8a +46 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d9 +45 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c8 +45 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b7 +45 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8a +45 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +79 +45 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +14 +45 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +30 +45 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e7 +44 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +03 +45 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f1 +44 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +44 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4c +45 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +68 +45 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a6 +45 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1d +44 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +02 +44 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +55 +44 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +39 +44 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f2 +43 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +be +43 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +86 +43 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +da +43 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0c +44 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +73 +43 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1f +43 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0e +43 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3b +43 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +57 +43 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d4 +42 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a2 +43 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +90 +43 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c9 +42 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +aa +42 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c1 +42 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +98 +42 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +89 +42 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fd +42 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +eb +42 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +81 +42 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +62 +42 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +79 +42 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +18 +42 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +34 +42 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +eb +41 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +07 +42 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f5 +41 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +db +41 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a7 +41 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +96 +41 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +85 +41 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +74 +41 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +47 +41 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +36 +41 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +41 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dc +40 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +af +40 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cb +40 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f8 +40 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +25 +41 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +56 +40 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7a +40 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +46 +40 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9e +40 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8c +40 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3e +40 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +60 +40 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +21 +40 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +31 +40 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +63 +41 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c3 +41 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +50 +42 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a5 +3f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bf +44 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a5 +44 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8b +44 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +71 +44 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +69 +3f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +80 +3f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +71 +3e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ae +3e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ca +3e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +92 +3e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +80 +3e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +52 +3e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +62 +3e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +3e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1c +3f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f3 +3e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +17 +3e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +df +3d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f6 +3d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8c +3d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +36 +3e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c8 +3d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9a +3d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +69 +3d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7c +3d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +36 +3d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5d +cd +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +3d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ed +3c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d1 +3c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +25 +3d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e3 +b9 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5a +3c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b5 +3c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +95 +3c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7b +3c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +69 +3c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3b +3c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4b +3c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1f +3c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0e +3c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fd +3b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ec +3b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +db +3b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ae +3b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +80 +3b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +76 +3b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5f +3b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +35 +3b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +43 +3b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +92 +3b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2e +3b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +16 +3b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +26 +3b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b0 +3a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +82 +3a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +78 +3a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +61 +3a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +37 +3a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +45 +3a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +94 +3a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +30 +3a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +18 +3a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +28 +3a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f8 +39 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cc +3a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +3a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e5 +39 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +eb +50 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +aa +39 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1e +39 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +44 +39 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +28 +39 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0e +39 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f6 +38 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +60 +39 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ce +38 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8e +39 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7c +39 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c3 +38 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a4 +38 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bb +38 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3e +38 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e5 +38 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +92 +38 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +76 +38 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5a +38 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +22 +38 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1c +4c +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +69 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ed +37 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dc +37 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f9 +68 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +93 +37 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +af +37 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +34 +37 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5a +37 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +24 +37 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7e +37 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6c +37 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1c +37 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3e +37 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ff +36 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0f +37 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +36 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7c +4c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bb +36 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +aa +36 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +99 +36 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +36 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cb +37 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +38 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +34 +36 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +06 +3a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c6 +39 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +21 +36 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +04 +3b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +14 +35 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7a +35 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +51 +35 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +35 +35 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +23 +35 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f5 +34 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +35 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4b +9a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ac +34 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bf +35 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +96 +35 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ba +34 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +82 +34 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +99 +34 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4b +34 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d9 +34 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6b +34 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +59 +34 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +28 +34 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3b +34 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bd +33 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +90 +33 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ac +33 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d9 +33 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f5 +33 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ed +32 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c0 +32 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dc +32 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +33 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +25 +33 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +67 +32 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8b +32 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +57 +32 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +af +32 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9d +32 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4f +32 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +71 +32 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +32 +32 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +42 +32 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0d +32 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5b +33 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fa +31 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7f +33 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6d +33 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ef +31 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +41 +33 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c7 +31 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +de +31 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a2 +31 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1b +32 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ac +31 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +92 +31 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +77 +31 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +66 +31 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +55 +31 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +11 +34 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c9 +5f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0e +31 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fd +30 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e2 +30 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2a +31 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +44 +31 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d2 +30 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +88 +36 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +42 +36 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +02 +36 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +35 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +76 +36 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5c +36 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +40 +4b +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +ca +3b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +79 +30 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ac +3d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +52 +3d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +66 +30 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +30 +30 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0f +30 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1d +30 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0a +40 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bc +3f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f0 +3f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e0 +2f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d6 +3f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +45 +3f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cd +2f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f7 +2f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f5 +45 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0f +46 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +92 +2f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ff +47 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c2 +47 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a8 +47 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8e +47 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3b +47 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +21 +47 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e2 +46 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c8 +46 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +38 +4a +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +88 +4c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +4c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +18 +2f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +91 +4d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +2f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c5 +4d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +37 +4d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ab +4d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fa +2e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +51 +4d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c0 +2e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e0 +2e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +23 +5b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +87 +2e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5a +2e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2d +2e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bc +d2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +83 +2d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +53 +2d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +42 +2d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0e +2d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +31 +2d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +18 +2d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fe +2c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +83 +2d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c6 +2c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ac +2d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +76 +2d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d4 +2c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9c +2c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b3 +2c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c8 +2d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6e +2c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +2e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e4 +2d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +63 +2c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +44 +2c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5b +2c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +94 +2b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b5 +2b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ed +2b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d1 +2b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a3 +2b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +75 +2b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +85 +2b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +59 +2b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +48 +2b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ed +a0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +15 +2b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e6 +2c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +85 +2c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +32 +2c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +16 +2c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2c +2b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d9 +2a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f9 +2a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1c +2e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +49 +2e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +76 +2e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +18 +2a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a8 +d1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +eb +29 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +da +29 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a0 +3d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0c +29 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0c +29 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b7 +29 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +03 +29 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +28 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +28 +29 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9b +29 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +de +28 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6f +28 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6f +28 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6f +28 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +44 +29 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5a +2a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +61 +28 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +43 +28 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +60 +29 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3e +2a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +35 +28 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fb +27 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ec +d1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c7 +d1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b6 +27 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a5 +27 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +94 +27 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3c +27 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +df +27 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e3 +27 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +12 +27 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +29 +27 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8b +28 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a7 +28 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fb +27 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +28 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c3 +28 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6f +28 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +43 +28 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +17 +28 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +50 +49 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +7c +29 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +af +26 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +91 +29 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +32 +29 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a1 +26 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +83 +26 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ad +29 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +16 +29 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +75 +26 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +57 +26 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c9 +29 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +82 +27 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +49 +26 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2b +26 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +07 +2a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1d +26 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ff +25 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +34 +2a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6a +29 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f1 +25 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d3 +25 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +50 +2a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4e +29 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c5 +25 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c5 +d3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +84 +25 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +54 +c7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +31 +25 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +57 +25 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3b +25 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +21 +25 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +25 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +be +d3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dc +24 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6a +2d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +af +24 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9e +24 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8d +24 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +91 +90 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +60 +24 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +30 +90 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +33 +24 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +22 +24 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4f +24 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f5 +23 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +11 +24 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ff +23 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e5 +23 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7c +24 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cb +24 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +58 +23 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +61 +23 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7d +23 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +48 +23 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +30 +23 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1f +23 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0e +23 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d2 +96 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +cb +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +23 +ca +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a9 +22 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +56 +22 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7c +22 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +60 +22 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +46 +22 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +75 +cc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +52 +cc +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ec +21 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +12 +22 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f6 +21 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dc +21 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c4 +21 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2e +22 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8f +21 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b3 +21 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +99 +21 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7f +21 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +67 +21 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5a +21 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4d +21 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +98 +22 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c5 +22 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e1 +22 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fd +22 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f6 +20 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e1 +d3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0d +21 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f6 +20 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d3 +20 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +40 +21 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +29 +21 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cf +20 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b6 +20 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c2 +20 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +94 +20 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cd +23 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b3 +23 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +99 +23 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +69 +20 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7c +20 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f8 +24 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +73 +25 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +78 +27 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5c +27 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4a +27 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fe +26 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e2 +26 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c9 +26 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +af +26 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +83 +26 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +57 +26 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2b +26 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ff +25 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d3 +25 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a7 +25 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +68 +48 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +37 +2b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ba +2a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a0 +2a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +86 +2a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6c +2a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a4 +47 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +ec +30 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ba +30 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a1 +30 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +87 +30 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +47 +30 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a9 +2f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7c +2f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +63 +2f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +49 +2f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2f +2f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9c +2e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c4 +46 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +ea +53 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +25 +55 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c9 +54 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +76 +54 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +43 +54 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +29 +54 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +14 +54 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ff +53 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +46 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +59 +57 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3f +57 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +25 +57 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e5 +56 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cb +56 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8b +56 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +71 +56 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +34 +45 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +54 +59 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3a +59 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +20 +59 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +06 +59 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ec +58 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d2 +58 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +78 +44 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +0b +5c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f1 +5b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +5b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bd +5b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a3 +5b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +63 +5b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a4 +43 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +5c +6a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2d +6a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +17 +6a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +02 +6a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a8 +69 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +93 +69 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +79 +69 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +39 +69 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c4 +42 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +81 +6e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6f +6e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +59 +6e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +44 +6e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +20 +6e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +06 +6e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ec +6d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +90 +6d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d5 +6c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c0 +6c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +80 +6c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +66 +6c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4c +6c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e4 +41 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +1f +8c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +df +8b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c5 +8b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +85 +8b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6c +8b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fd +8a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bd +8a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a3 +8a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2a +8a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +10 +8a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d8 +40 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +89 +95 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +57 +95 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e9 +94 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cf +94 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b5 +94 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9b +94 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5b +94 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1b +94 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +db +93 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9b +93 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5b +93 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +08 +40 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +66 +9c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +54 +9c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +42 +9c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2d +9c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +18 +9c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d9 +9b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6a +9b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +59 +9b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +48 +9b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +37 +9b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +3e +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +b5 +a0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c9 +1e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7b +a0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bd +1e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6a +a0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +59 +a0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +48 +a0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +93 +1e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +aa +1e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5f +a2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +61 +1e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +86 +a2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +71 +a2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +56 +1e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +37 +1e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4e +1e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +78 +a7 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f7 +a6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dd +a6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c3 +a6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a9 +a6 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c1 +a5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +81 +a5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2e +a5 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bf +a4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a5 +a4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8b +a4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +72 +a4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +58 +a4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3e +a4 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fe +a3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +90 +a3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +50 +a3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fd +a2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e3 +a2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c8 +3d +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +af +c2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +95 +c2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +42 +c2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +28 +c2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0f +c2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +db +c1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c1 +c1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8e +c1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4e +c1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +34 +c1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +da +c0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c1 +c0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a7 +c0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8d +c0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +73 +c0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +59 +c0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3f +c0 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ec +bf +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e4 +3c +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +f3 +1d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e5 +1d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +32 +d3 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e7 +20 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f9 +d2 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d2 +1d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6a +1f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4e +20 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +34 +20 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9f +20 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +25 +1e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f3 +1d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +06 +1f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cf +1f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +78 +1e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b3 +1d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +51 +1f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ed +1e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +01 +20 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +1f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1a +20 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b5 +1f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0c +1e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +83 +1f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +38 +1f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1f +1f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9c +1f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d4 +1e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d5 +d1 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +3b +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +e4 +20 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a0 +1d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e5 +3a +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +c0 +3a +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +80 +3a +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +60 +3a +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +20 +3a +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +e0 +39 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +8c +1d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +55 +1d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +25 +1d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fd +1c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +03 +1d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f2 +1c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e1 +1c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d0 +1c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bf +1c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1c +1d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +19 +1d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +93 +1c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +17 +1c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +06 +1c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f5 +1b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +30 +1c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +1b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +93 +1b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +61 +1b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +48 +1b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +75 +1b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +38 +1b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +14 +1b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +04 +1b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d5 +1a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1d +1b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cd +1a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dc +1a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9e +1a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +be +1a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7e +1a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6d +1a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5c +1a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4b +1a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3a +1a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +08 +1a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +21 +1a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dc +19 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e5 +19 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f7 +19 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cc +19 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b4 +19 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3a +1a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8b +19 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +72 +19 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +68 +19 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +49 +19 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2a +19 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +19 +19 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +08 +19 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f7 +18 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9f +18 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a5 +18 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +94 +18 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +83 +18 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +72 +18 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +61 +18 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +50 +18 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3f +18 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2e +18 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1d +18 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +17 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dc +17 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cd +17 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c3 +17 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ac +17 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9b +17 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8a +17 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +79 +17 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f3 +17 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +34 +17 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +23 +17 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +12 +17 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cf +16 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c0 +16 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +af +16 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e8 +16 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +01 +17 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6d +16 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5c +16 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4b +16 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +02 +16 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +08 +16 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f7 +15 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e6 +15 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d5 +15 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c4 +15 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +21 +16 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +88 +15 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5e +15 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +34 +15 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f1 +14 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e2 +14 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d1 +14 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0a +15 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +95 +14 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +84 +14 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +73 +14 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +49 +14 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +38 +14 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +27 +14 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fd +13 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ba +13 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d3 +13 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8e +13 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +97 +13 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a9 +13 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7e +13 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4d +13 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3c +13 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2b +13 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +01 +13 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f0 +12 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1a +13 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +66 +13 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ec +13 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +16 +14 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +62 +14 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +57 +12 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c0 +14 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ae +14 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +44 +12 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +23 +15 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4d +15 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +cd +12 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +25 +12 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b3 +12 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +df +12 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0b +12 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f1 +11 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7f +12 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +99 +12 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +65 +12 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c0 +38 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +bf +11 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +95 +11 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +88 +11 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7b +11 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +59 +11 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4c +11 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3f +11 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +87 +1d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1f +11 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +32 +11 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6e +11 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ae +11 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d8 +11 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +77 +15 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a7 +10 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b3 +15 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a1 +15 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +98 +10 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3a +16 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +51 +10 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9e +16 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8c +16 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7a +16 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1e +10 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +35 +10 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f5 +0f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +68 +17 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4e +17 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e2 +0f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0c +18 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e6 +18 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +18 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +be +18 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +92 +0f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +43 +19 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4b +0f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b4 +19 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +50 +1b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +21 +0f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +38 +0f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9a +19 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4f +19 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +81 +19 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fb +0e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e4 +1a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +0f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a1 +1b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b2 +1b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e4 +1b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +96 +1c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +49 +1c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6e +1c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ae +1c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +65 +0e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a4 +1c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +59 +0e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +35 +1d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +46 +0e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +15 +0e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +18 +11 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2d +1d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a9 +0f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +06 +11 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +03 +10 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +0e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +79 +10 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c9 +10 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e0 +10 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6a +0f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +15 +0e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5f +10 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b2 +10 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f7 +10 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c3 +0f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +04 +0e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +59 +0f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c6 +0e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b5 +0e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +92 +0e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +81 +0e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +70 +0e +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +1e +11 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e0 +36 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +15 +11 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f1 +0d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c0 +36 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +e4 +0d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +99 +0d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9f +0d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ba +0d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8a +0d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +93 +0d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0e +0d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +40 +0d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b4 +0c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8e +0c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +36 +0d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +44 +0c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +01 +0c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +db +0b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5c +0d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9b +0b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +69 +0b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +48 +0b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +21 +0b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ed +0a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +de +0a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +06 +0b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +67 +0d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b7 +0a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6a +0d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a7 +0a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c6 +0c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a0 +0c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ed +0b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +71 +0a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +56 +0c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +71 +0b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4f +0d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8c +0a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3f +0a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c7 +0a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4f +0a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ad +0b +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +06 +0a +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d0 +0d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +db +09 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a6 +09 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +96 +09 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +86 +09 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +76 +09 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6c +09 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5c +09 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +52 +09 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2f +09 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2d +09 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dc +0d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e2 +08 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9f +08 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +33 +0d +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +56 +08 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +63 +08 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4e +08 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +44 +08 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +80 +08 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +92 +08 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ad +08 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +27 +08 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +30 +08 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2f +0c +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +07 +08 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b7 +07 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +91 +07 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8d +07 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +87 +07 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9c +07 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7b +07 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +75 +07 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +65 +07 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +81 +07 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +34 +07 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +28 +07 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2b +07 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0f +07 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f7 +05 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +dc +05 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c1 +05 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +76 +05 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5b +05 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +40 +05 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f5 +04 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +da +04 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +bf +04 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ec +03 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d6 +03 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ad +06 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d1 +06 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ab +06 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +8b +06 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7c +06 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6b +06 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +5a +06 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +49 +06 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +3d +06 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2c +06 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +17 +06 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +96 +05 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +15 +05 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +94 +04 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +81 +04 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +67 +04 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +4d +04 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +33 +04 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +2a +04 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fd +03 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +07 +04 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +9d +03 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f4 +03 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a7 +03 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +94 +03 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +64 +36 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +b6 +06 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +7a +03 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d5 +07 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +fe +07 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +22 +03 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +db +07 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0d +03 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +e7 +02 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f3 +07 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +40 +36 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +0b +36 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +e0 +35 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +a0 +35 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +80 +35 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +4c +35 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +32 +35 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +15 +35 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +35 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +e0 +34 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +b9 +02 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6b +02 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +47 +02 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d2 +01 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +89 +02 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +c1 +01 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a6 +01 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +a5 +02 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +81 +01 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +72 +01 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +6e +01 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +39 +01 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +11 +01 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +32 +01 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +08 +01 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +f6 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +b2 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +ac +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +46 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +d7 +34 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +bb +34 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +a0 +34 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +98 +34 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +60 +34 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +a0 +33 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +60 +33 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +38 +33 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +1c +33 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +33 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +e4 +32 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +c8 +32 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +ac +32 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +90 +32 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +74 +32 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +58 +32 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +20 +32 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +f0 +31 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +80 +31 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +54 +31 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +38 +31 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +31 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +c0 +30 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +80 +30 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +58 +30 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +20 +30 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +a0 +2f +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +60 +2f +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +2f +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +d0 +2e +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +b4 +2e +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +98 +2e +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +60 +2e +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +38 +2e +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +2e +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +d4 +2d +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +b8 +2d +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +9c +2d +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +80 +2d +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +64 +2d +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +48 +2d +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +2c +2d +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +10 +2d +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +a0 +2c +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +60 +2c +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +c0 +2b +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +e0 +2a +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +b8 +2a +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +80 +2a +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +54 +2a +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +2a +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +d0 +29 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +60 +29 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +20 +29 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +f8 +28 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +c0 +28 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +80 +28 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +54 +28 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +38 +28 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +a0 +27 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +e0 +26 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +a0 +26 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +20 +26 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +a0 +25 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +40 +25 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +14 +25 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +c0 +24 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +40 +24 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +80 +23 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +50 +23 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +e0 +22 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +b8 +22 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +80 +22 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +54 +22 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +40 +21 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +20 +21 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +40 +20 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +20 +1f +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +f8 +1e +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +c0 +1e +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +60 +1c +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +20 +1a +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +60 +19 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +80 +18 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +60 +16 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +20 +16 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +e0 +13 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +60 +13 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +a0 +12 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +c0 +0f +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +80 +0f +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +20 +0f +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +60 +0e +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +a0 +0d +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +a0 +09 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +80 +06 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +4c +06 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +c0 +05 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +8c +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +70 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +38 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +36 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +44 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +5d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +89 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +9a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +ae +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +c5 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +d1 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +e6 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +f4 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +03 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +14 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +29 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +43 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +58 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +73 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +7e +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +94 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +a2 +01 +00 +00 +b9 +02 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +b7 +01 +00 +00 +e4 +0d +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +cb +01 +00 +00 +8c +1d +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3b +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +94 +83 +01 +00 +45 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2b +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +dc +83 +01 +00 +e4 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +33 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +85 +01 +00 +60 +b2 +00 +00 +02 +00 +00 +00 +0d +0b +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +e9 +d3 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +15 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2c +d4 +00 +00 +68 +19 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +94 +ed +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +a0 +ed +00 +00 +24 +57 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +1f +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c4 +44 +01 +00 +d0 +3e +00 +00 +03 +00 +00 +00 +07 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf_test.sh new file mode 100755 index 0000000000..ed3766ec46 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elf_test.sh @@ -0,0 +1,4 @@ +#! /bin/sh +# copied from yasm/modules/objfmts/coff/tests/coff_test.sh ; s/coff/elf/g +${srcdir}/out_test.sh elf_test modules/objfmts/elf/tests "elf objfmt" "-f elf" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfabssect.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfabssect.asm new file mode 100644 index 0000000000..0c9c434858 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfabssect.asm @@ -0,0 +1,12 @@ +%line 1+1 elfabssect.asm +[absolute 0] +%line 1+0 elfabssect.asm +teststruc: +%line 2+1 elfabssect.asm + .testlabel resw 1 +teststruc_size: +%line 3+0 elfabssect.asm +[section .text] +;global teststruc +global teststruc.testlabel +global teststruc_size diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfabssect.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfabssect.hex new file mode 100644 index 0000000000..65d3974afe --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfabssect.hex @@ -0,0 +1,424 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +74 +65 +73 +74 +73 +74 +72 +75 +63 +2e +74 +65 +73 +74 +6c +61 +62 +65 +6c +00 +74 +65 +73 +74 +73 +74 +72 +75 +63 +5f +73 +69 +7a +65 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +f1 +ff +17 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +10 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +64 +00 +00 +00 +26 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8c +00 +00 +00 +50 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfcond.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfcond.asm new file mode 100644 index 0000000000..482b068202 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfcond.asm @@ -0,0 +1,4 @@ +%ifidn __YASM_OBJFMT__,elf +SECTION .booga progbits +%endif + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfcond.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfcond.hex new file mode 100644 index 0000000000..85e0c031fd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfcond.hex @@ -0,0 +1,416 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +06 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +62 +6f +6f +67 +61 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1e +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +28 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0e +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +68 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +16 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +00 +00 +00 +40 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfequabs.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfequabs.asm new file mode 100644 index 0000000000..39f62a28e3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfequabs.asm @@ -0,0 +1,10 @@ +global label +absolute 5000h +label: + +section .text +global absval +absval equ 1000h + +jmp absval +jmp label diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfequabs.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfequabs.hex new file mode 100644 index 0000000000..514f7d294c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfequabs.hex @@ -0,0 +1,496 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +06 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e9 +fc +0f +00 +00 +e9 +fc +4f +00 +00 +00 +00 +01 +00 +00 +00 +02 +02 +00 +00 +06 +00 +00 +00 +02 +02 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +2d +00 +6c +61 +62 +65 +6c +00 +61 +62 +73 +76 +61 +6c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +50 +00 +00 +00 +00 +00 +00 +10 +00 +f1 +ff +09 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +10 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5c +00 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +88 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +98 +00 +00 +00 +60 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4c +00 +00 +00 +10 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobal.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobal.asm new file mode 100644 index 0000000000..7e3c73467a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobal.asm @@ -0,0 +1,10 @@ +; Note: you should be able to link elfreloc.o with elfglobal.o to make a +; program that calls function with eax=constant, thus exiting err=0 +GLOBAL constant +GLOBAL function + +constant EQU 48 + +function: + sub eax, constant + ret diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobal.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobal.hex new file mode 100644 index 0000000000..603d55db67 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobal.hex @@ -0,0 +1,408 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +83 +e8 +30 +c3 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +63 +6f +6e +73 +74 +61 +6e +74 +00 +66 +75 +6e +63 +74 +69 +6f +6e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +30 +00 +00 +00 +00 +00 +00 +00 +10 +00 +f1 +ff +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +68 +00 +00 +00 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +50 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobext.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobext.asm new file mode 100644 index 0000000000..7315b49c82 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobext.asm @@ -0,0 +1,16 @@ +[bits 32] + +[global hashlookup:function] +[global hashtable2:data] +[global hashtable:data (hashtable.end-hashtable)] +[common dwordarray 128:4] + +[section .text] +hashlookup + +[section .data] +hashtable2 + db 5 +hashtable + db 1,2,3 +.end diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobext.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobext.hex new file mode 100644 index 0000000000..15a366b6f2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobext.hex @@ -0,0 +1,544 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +06 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +05 +01 +02 +03 +00 +2e +74 +65 +78 +74 +00 +2e +64 +61 +74 +61 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +2d +00 +68 +61 +73 +68 +6c +6f +6f +6b +75 +70 +00 +68 +61 +73 +68 +74 +61 +62 +6c +65 +32 +00 +68 +61 +73 +68 +74 +61 +62 +6c +65 +00 +64 +77 +6f +72 +64 +61 +72 +72 +61 +79 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +05 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +04 +00 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +00 +05 +00 +19 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +11 +00 +05 +00 +23 +00 +00 +00 +04 +00 +00 +00 +80 +00 +00 +00 +10 +00 +f2 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1d +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +00 +00 +00 +2e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +15 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9c +00 +00 +00 +90 +00 +00 +00 +02 +00 +00 +00 +05 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobext2.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobext2.asm new file mode 100644 index 0000000000..6467aa34f8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobext2.asm @@ -0,0 +1,2 @@ +global foo +extern foo diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobext2.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobext2.hex new file mode 100644 index 0000000000..ca4b2db968 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfglobext2.hex @@ -0,0 +1,376 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +66 +6f +6f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +64 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +00 +00 +00 +40 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfmanysym.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfmanysym.asm new file mode 100755 index 0000000000..36d0a6d212 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfmanysym.asm @@ -0,0 +1,346 @@ +struc PPC_CPU_State + dummy: + gpr: + fpr: + cr: + fpscr: + xer: + xer_ca: + lr: + ctr: + + msr: + pvr: + + ibatu: + ibatl: + ibat_bl17: + + dbatu: + dbatl: + dbat_bl17: + + sdr1: + + sr: + + dar: + dsisr: + sprg: + srr0: + srr1: + + decr: + ear: + pir: + tb: + + hid: + + pc: + npc: + current_opc: + + exception_pending: + dec_exception: + ext_exception: + stop_exception: + singlestep_ignore: + align1: + align2: + align3: + + pagetable_base: + pagetable_hashmask: + reserve: + have_reservation: + + tlb_last: + tlb_pa: + tlb_va: + + effective_code_page: + physical_code_page: + pdec: + ptb: + + temp: + temp2: + x87cw: + pc_ofs: + current_code_base: +endstruc + +struc JITC + clientPages + + tlb_code_0_eff + tlb_data_0_eff + tlb_data_8_eff + tlb_code_0_phys + tlb_data_0_phys + tlb_data_8_phys + tlb_code_0_hits + tlb_data_0_hits + tlb_data_8_hits + tlb_code_0_misses + tlb_data_0_misses + tlb_data_8_misses + + nativeReg + + nativeRegState + + nativeFlags + + nativeFlagsState + nativeCarryState + + clientReg + + nativeRegsList + + LRUreg + MRUreg + + LRUpage + MRUpage + + freeFragmentsList + + freeClientPages + + translationCache +endstruc + +extern gCPU, gJITC, gMemory, gMemorySize, +extern jitc_error, ppc_isi_exception_asm, ppc_dsi_exception_asm +extern jitcDestroyAndFreeClientPage +extern io_mem_read_glue +extern io_mem_write_glue +extern io_mem_read64_glue +extern io_mem_write64_glue +extern io_mem_read128_glue +extern io_mem_write128_glue +extern io_mem_read128_native_glue +extern io_mem_write128_native_glue +global ppc_effective_to_physical_code, ppc_effective_to_physical_data +global ppc_write_effective_byte_asm +global ppc_write_effective_half_asm +global ppc_write_effective_word_asm +global ppc_write_effective_dword_asm +global ppc_write_effective_qword_asm +global ppc_write_effective_qword_sse_asm +global ppc_read_effective_byte_asm +global ppc_read_effective_half_z_asm +global ppc_read_effective_half_s_asm +global ppc_read_effective_word_asm +global ppc_read_effective_dword_asm +global ppc_read_effective_qword_asm +global ppc_read_effective_qword_sse_asm +global ppc_mmu_tlb_invalidate_all_asm +global ppc_mmu_tlb_invalidate_entry_asm +global ppc_opc_lswi_asm +global ppc_opc_stswi_asm +global ppc_opc_icbi_asm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +ppc_mmu_tlb_invalidate_all_asm: + mov edi, gJITC+tlb_code_0_eff + +ppc_mmu_tlb_invalidate_entry_asm: + +ppc_pte_protection: + +%macro bat_lookup 4 + %%npr: + %%ok: +%%bat_lookup_failed: +%endmacro + +%macro pg_table_lookup 3 +%%invalid: +%endmacro + +protection_fault_0_code: +protection_fault_0_data: +protection_fault_8_data: + +%macro tlb_lookup 2 +%%tlb_lookup_failed: +%endmacro + +ppc_effective_to_physical_code_ret: +ppc_effective_to_physical_code: + tlb_lookup 0, code + + bat_lookup i, 0, 0, code + bat_lookup i, 1, 0, code + bat_lookup i, 2, 0, code + bat_lookup i, 3, 0, code + + pg_table_lookup 0, 0, code + pg_table_lookup 0, 0, code + pg_table_lookup 0, 0, code + pg_table_lookup 0, 0, code + pg_table_lookup 0, 0, code + pg_table_lookup 0, 0, code + pg_table_lookup 0, 0, code + pg_table_lookup 0, 0, code + + pg_table_lookup (1<<6), 0, code + pg_table_lookup (1<<6), 0, code + pg_table_lookup (1<<6), 0, code + pg_table_lookup (1<<6), 0, code + pg_table_lookup (1<<6), 0, code + pg_table_lookup (1<<6), 0, code + pg_table_lookup (1<<6), 0, code + pg_table_lookup (1<<6), 0, code + +.noexec: +ppc_effective_to_physical_data_read_ret: +ppc_effective_to_physical_data_read: + tlb_lookup 0, data + + bat_lookup d, 0, 0, data + bat_lookup d, 1, 0, data + bat_lookup d, 2, 0, data + bat_lookup d, 3, 0, data + + pg_table_lookup 0, 0, data + pg_table_lookup 0, 0, data + pg_table_lookup 0, 0, data + pg_table_lookup 0, 0, data + pg_table_lookup 0, 0, data + pg_table_lookup 0, 0, data + pg_table_lookup 0, 0, data + pg_table_lookup 0, 0, data + + pg_table_lookup (1<<6), 0, data + pg_table_lookup (1<<6), 0, data + pg_table_lookup (1<<6), 0, data + pg_table_lookup (1<<6), 0, data + pg_table_lookup (1<<6), 0, data + pg_table_lookup (1<<6), 0, data + pg_table_lookup (1<<6), 0, data + pg_table_lookup (1<<6), 0, data + +ppc_effective_to_physical_data_write_ret: +ppc_effective_to_physical_data_write: + tlb_lookup 8, data + + bat_lookup d, 0, 8, data + bat_lookup d, 1, 8, data + bat_lookup d, 2, 8, data + bat_lookup d, 3, 8, data + + pg_table_lookup 0, 8, data + pg_table_lookup 0, 8, data + pg_table_lookup 0, 8, data + pg_table_lookup 0, 8, data + pg_table_lookup 0, 8, data + pg_table_lookup 0, 8, data + pg_table_lookup 0, 8, data + pg_table_lookup 0, 8, data + + pg_table_lookup (1<<6), 8, data + pg_table_lookup (1<<6), 8, data + pg_table_lookup (1<<6), 8, data + pg_table_lookup (1<<6), 8, data + pg_table_lookup (1<<6), 8, data + pg_table_lookup (1<<6), 8, data + pg_table_lookup (1<<6), 8, data + pg_table_lookup (1<<6), 8, data + +ppc_write_effective_byte_asm: +.mmio: +ppc_write_effective_half_asm: +.mmio: +.overlap: + .overlapped_mmio_1_back: +.overlapped_mmio_1: +.overlapped_mmio_2: +ppc_write_effective_word_asm: +.mmio: +.overlap: + .loop1: + .overlapped_mmio_1_back: + .loop2: +.overlapped_mmio_1: + .overlapped_mmio_1_loop: +.overlapped_mmio_2: + .overlapped_mmio_2_loop: +ppc_write_effective_dword_asm: +.mmio: + +.overlap: + .loop1: + .overlapped_mmio_1_back: + .loop2: +.overlapped_mmio_1: + .overlapped_mmio_1_loop: +.overlapped_mmio_2: + .overlapped_mmio_2_loop: +ppc_write_effective_qword_asm: +.mmio: + +ppc_write_effective_qword_sse_asm: +.mmio: +ppc_read_effective_byte_asm: +.mmio: +ppc_read_effective_half_z_asm: +.mmio: +.overlap: +.loop1: +.mmio1: +.mmio2: +ppc_read_effective_half_s_asm: +.mmio: +.overlap: +.loop1: + +.mmio1: +.mmio2: +ppc_read_effective_word_asm: +.mmio: +.overlap: + .loop1: + .overlapped_mmio_1_back: + .loop2: + +.overlapped_mmio_1: + .overlapped_mmio_1_loop: +.overlapped_mmio_2: + .overlapped_mmio_2_loop: +ppc_read_effective_dword_asm: +.mmio: +.overlap: + .loop1: + .overlapped_mmio_1_back: + .loop2: + +.overlapped_mmio_1: + .overlapped_mmio_1_loop: +.overlapped_mmio_2: + .overlapped_mmio_2_loop: +ppc_read_effective_qword_asm: +.mmio: + +ppc_read_effective_qword_sse_asm: +.mmio: +ppc_opc_stswi_asm: +.loop: + .ok1: +.back: +.mmio: +ppc_opc_lswi_asm: +.loop: + .ok1: +.back: + .loop2: +.ret: +.mmio: +ppc_opc_icbi_asm: +.destroy: +.ok: diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfmanysym.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfmanysym.hex new file mode 100644 index 0000000000..f185d3d0d5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfmanysym.hex @@ -0,0 +1,4464 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +10 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +06 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bf +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +aa +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +2d +00 +67 +43 +50 +55 +00 +67 +4a +49 +54 +43 +00 +67 +4d +65 +6d +6f +72 +79 +00 +67 +4d +65 +6d +6f +72 +79 +53 +69 +7a +65 +00 +6a +69 +74 +63 +5f +65 +72 +72 +6f +72 +00 +70 +70 +63 +5f +69 +73 +69 +5f +65 +78 +63 +65 +70 +74 +69 +6f +6e +5f +61 +73 +6d +00 +70 +70 +63 +5f +64 +73 +69 +5f +65 +78 +63 +65 +70 +74 +69 +6f +6e +5f +61 +73 +6d +00 +6a +69 +74 +63 +44 +65 +73 +74 +72 +6f +79 +41 +6e +64 +46 +72 +65 +65 +43 +6c +69 +65 +6e +74 +50 +61 +67 +65 +00 +69 +6f +5f +6d +65 +6d +5f +72 +65 +61 +64 +5f +67 +6c +75 +65 +00 +69 +6f +5f +6d +65 +6d +5f +77 +72 +69 +74 +65 +5f +67 +6c +75 +65 +00 +69 +6f +5f +6d +65 +6d +5f +72 +65 +61 +64 +36 +34 +5f +67 +6c +75 +65 +00 +69 +6f +5f +6d +65 +6d +5f +77 +72 +69 +74 +65 +36 +34 +5f +67 +6c +75 +65 +00 +69 +6f +5f +6d +65 +6d +5f +72 +65 +61 +64 +31 +32 +38 +5f +67 +6c +75 +65 +00 +69 +6f +5f +6d +65 +6d +5f +77 +72 +69 +74 +65 +31 +32 +38 +5f +67 +6c +75 +65 +00 +69 +6f +5f +6d +65 +6d +5f +72 +65 +61 +64 +31 +32 +38 +5f +6e +61 +74 +69 +76 +65 +5f +67 +6c +75 +65 +00 +69 +6f +5f +6d +65 +6d +5f +77 +72 +69 +74 +65 +31 +32 +38 +5f +6e +61 +74 +69 +76 +65 +5f +67 +6c +75 +65 +00 +70 +70 +63 +5f +65 +66 +66 +65 +63 +74 +69 +76 +65 +5f +74 +6f +5f +70 +68 +79 +73 +69 +63 +61 +6c +5f +63 +6f +64 +65 +00 +70 +70 +63 +5f +77 +72 +69 +74 +65 +5f +65 +66 +66 +65 +63 +74 +69 +76 +65 +5f +62 +79 +74 +65 +5f +61 +73 +6d +00 +70 +70 +63 +5f +77 +72 +69 +74 +65 +5f +65 +66 +66 +65 +63 +74 +69 +76 +65 +5f +68 +61 +6c +66 +5f +61 +73 +6d +00 +70 +70 +63 +5f +77 +72 +69 +74 +65 +5f +65 +66 +66 +65 +63 +74 +69 +76 +65 +5f +77 +6f +72 +64 +5f +61 +73 +6d +00 +70 +70 +63 +5f +77 +72 +69 +74 +65 +5f +65 +66 +66 +65 +63 +74 +69 +76 +65 +5f +64 +77 +6f +72 +64 +5f +61 +73 +6d +00 +70 +70 +63 +5f +77 +72 +69 +74 +65 +5f +65 +66 +66 +65 +63 +74 +69 +76 +65 +5f +71 +77 +6f +72 +64 +5f +61 +73 +6d +00 +70 +70 +63 +5f +77 +72 +69 +74 +65 +5f +65 +66 +66 +65 +63 +74 +69 +76 +65 +5f +71 +77 +6f +72 +64 +5f +73 +73 +65 +5f +61 +73 +6d +00 +70 +70 +63 +5f +72 +65 +61 +64 +5f +65 +66 +66 +65 +63 +74 +69 +76 +65 +5f +62 +79 +74 +65 +5f +61 +73 +6d +00 +70 +70 +63 +5f +72 +65 +61 +64 +5f +65 +66 +66 +65 +63 +74 +69 +76 +65 +5f +68 +61 +6c +66 +5f +7a +5f +61 +73 +6d +00 +70 +70 +63 +5f +72 +65 +61 +64 +5f +65 +66 +66 +65 +63 +74 +69 +76 +65 +5f +68 +61 +6c +66 +5f +73 +5f +61 +73 +6d +00 +70 +70 +63 +5f +72 +65 +61 +64 +5f +65 +66 +66 +65 +63 +74 +69 +76 +65 +5f +77 +6f +72 +64 +5f +61 +73 +6d +00 +70 +70 +63 +5f +72 +65 +61 +64 +5f +65 +66 +66 +65 +63 +74 +69 +76 +65 +5f +64 +77 +6f +72 +64 +5f +61 +73 +6d +00 +70 +70 +63 +5f +72 +65 +61 +64 +5f +65 +66 +66 +65 +63 +74 +69 +76 +65 +5f +71 +77 +6f +72 +64 +5f +61 +73 +6d +00 +70 +70 +63 +5f +72 +65 +61 +64 +5f +65 +66 +66 +65 +63 +74 +69 +76 +65 +5f +71 +77 +6f +72 +64 +5f +73 +73 +65 +5f +61 +73 +6d +00 +70 +70 +63 +5f +6d +6d +75 +5f +74 +6c +62 +5f +69 +6e +76 +61 +6c +69 +64 +61 +74 +65 +5f +61 +6c +6c +5f +61 +73 +6d +00 +70 +70 +63 +5f +6d +6d +75 +5f +74 +6c +62 +5f +69 +6e +76 +61 +6c +69 +64 +61 +74 +65 +5f +65 +6e +74 +72 +79 +5f +61 +73 +6d +00 +70 +70 +63 +5f +6f +70 +63 +5f +6c +73 +77 +69 +5f +61 +73 +6d +00 +70 +70 +63 +5f +6f +70 +63 +5f +73 +74 +73 +77 +69 +5f +61 +73 +6d +00 +70 +70 +63 +5f +6f +70 +63 +5f +69 +63 +62 +69 +5f +61 +73 +6d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +22 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +43 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +59 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +76 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +87 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +99 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +ac +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +d4 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +e9 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +04 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +20 +01 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +3f +01 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +5c +01 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +79 +01 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +96 +01 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +b4 +01 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +d2 +01 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +f4 +01 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +10 +02 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +2e +02 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +4c +02 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +68 +02 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +85 +02 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +a2 +02 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +c3 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +e2 +02 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +03 +03 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +14 +03 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +26 +03 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +00 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +00 +00 +00 +37 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b4 +03 +00 +00 +c0 +0c +00 +00 +02 +00 +00 +00 +a9 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +08 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfreloc-ext.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfreloc-ext.asm new file mode 100644 index 0000000000..9158fb4cd9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfreloc-ext.asm @@ -0,0 +1,4 @@ +EXTERN variable + mov eax, variable + mov ax, variable + mov al, variable diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfreloc-ext.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfreloc-ext.hex new file mode 100644 index 0000000000..4c1fce8517 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfreloc-ext.hex @@ -0,0 +1,464 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +06 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b8 +00 +00 +00 +00 +66 +b8 +00 +00 +b0 +00 +00 +01 +00 +00 +00 +01 +03 +00 +00 +07 +00 +00 +00 +14 +03 +00 +00 +0a +00 +00 +00 +16 +03 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +2d +00 +76 +61 +72 +69 +61 +62 +6c +65 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +64 +00 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +00 +00 +00 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9c +00 +00 +00 +40 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4c +00 +00 +00 +18 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfreloc.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfreloc.asm new file mode 100644 index 0000000000..df6ac03f0f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfreloc.asm @@ -0,0 +1,8 @@ +EXTERN constant +EXTERN function +GLOBAL main + +main: + mov eax, constant + call function + ret diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfreloc.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfreloc.hex new file mode 100644 index 0000000000..5a6932ed71 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfreloc.hex @@ -0,0 +1,512 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +06 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b8 +00 +00 +00 +00 +e8 +fc +ff +ff +ff +c3 +00 +01 +00 +00 +00 +01 +03 +00 +00 +06 +00 +00 +00 +02 +04 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +2d +00 +63 +6f +6e +73 +74 +61 +6e +74 +00 +66 +75 +6e +63 +74 +69 +6f +6e +00 +6d +61 +69 +6e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5c +00 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +88 +00 +00 +00 +1a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a4 +00 +00 +00 +60 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4c +00 +00 +00 +10 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfsectalign.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfsectalign.asm new file mode 100644 index 0000000000..7ed5cf89d3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfsectalign.asm @@ -0,0 +1,2 @@ +[section .data align=64] +[section .rodata align=32] diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfsectalign.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfsectalign.hex new file mode 100644 index 0000000000..a49e204c1f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfsectalign.hex @@ -0,0 +1,488 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +07 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +61 +74 +61 +00 +2e +72 +6f +64 +61 +74 +61 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +25 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +2f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +15 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1d +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +74 +00 +00 +00 +50 +00 +00 +00 +02 +00 +00 +00 +05 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfso.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfso.asm new file mode 100644 index 0000000000..5adb633963 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfso.asm @@ -0,0 +1,97 @@ +; test source file for assembling to ELF shared library +; build with: +; nasm -f elf elfso.asm +; ld -shared -o elfso.so elfso.o +; test with: +; gcc -o elfso elftest.c ./elfso.so +; ./elfso +; (assuming your gcc is ELF, and you're running bash) + +; This file should test the following: +; [1] Define and export a global text-section symbol +; [2] Define and export a global data-section symbol +; [3] Define and export a global BSS-section symbol +; [4] Define a non-global text-section symbol +; [5] Define a non-global data-section symbol +; [6] Define a non-global BSS-section symbol +; [7] Define a COMMON symbol +; [8] Define a NASM local label +; [9] Reference a NASM local label +; [10] Import an external symbol +; [11] Make a PC-relative call to an external symbol +; [12] Reference a text-section symbol in the text section +; [13] Reference a data-section symbol in the text section +; [14] Reference a BSS-section symbol in the text section +; [15] Reference a text-section symbol in the data section +; [16] Reference a data-section symbol in the data section +; [17] Reference a BSS-section symbol in the data section + + BITS 32 + GLOBAL lrotate:function ; [1] + GLOBAL greet:function ; [1] + GLOBAL asmstr:data asmstr.end-asmstr ; [2] + GLOBAL textptr:data 4 ; [2] + GLOBAL selfptr:data 4 ; [2] + GLOBAL integer:data 4 ; [3] + EXTERN printf ; [10] + COMMON commvar 4:4 ; [7] + EXTERN _GLOBAL_OFFSET_TABLE_ + + SECTION .text + +; prototype: long lrotate(long x, int num); +lrotate: ; [1] + push ebp + mov ebp,esp + mov eax,[ebp+8] + mov ecx,[ebp+12] +.label rol eax,1 ; [4] [8] + loop .label ; [9] [12] + mov esp,ebp + pop ebp + ret + +; prototype: void greet(void); +greet push ebx ; we'll use EBX for GOT, so save it + call .getgot +.getgot: pop ebx + add ebx,_GLOBAL_OFFSET_TABLE_ + $$ - .getgot wrt ..gotpc + mov eax,[ebx+integer wrt ..got] ; [14] + mov eax,[eax] + inc eax + mov [ebx+localint wrt ..gotoff],eax ; [14] + mov eax,[ebx+commvar wrt ..got] + push dword [eax] + mov eax,[ebx+localptr wrt ..gotoff] ; [13] + push dword [eax] + mov eax,[ebx+integer wrt ..got] ; [1] [14] + push dword [eax] + lea eax,[ebx+printfstr wrt ..gotoff] + push eax ; [13] + call printf wrt ..plt ; [11] + add esp,16 + pop ebx + ret + + SECTION .data + +; a string +asmstr db 'hello, world', 0 ; [2] +.end + +; a string for Printf +printfstr db "integer==%d, localint==%d, commvar=%d" + db 10, 0 + +; some pointers +localptr dd localint ; [5] [17] +textptr dd greet wrt ..sym ; [15] +selfptr dd selfptr wrt ..sym ; [16] + + SECTION .bss + +; an integer +integer resd 1 ; [3] + +; a local integer +localint resd 1 ; [6] diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfso.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfso.hex new file mode 100644 index 0000000000..206cce9c6d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfso.hex @@ -0,0 +1,1144 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +03 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +09 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +55 +89 +e5 +8b +45 +08 +8b +4d +0c +d1 +c0 +e2 +fc +89 +ec +5d +c3 +53 +e8 +00 +00 +00 +00 +5b +81 +c3 +03 +00 +00 +00 +8b +83 +00 +00 +00 +00 +8b +00 +40 +89 +83 +04 +00 +00 +00 +8b +83 +00 +00 +00 +00 +ff +30 +8b +83 +34 +00 +00 +00 +ff +30 +8b +83 +00 +00 +00 +00 +ff +30 +8d +83 +0d +00 +00 +00 +50 +e8 +fc +ff +ff +ff +83 +c4 +10 +5b +c3 +00 +00 +1a +00 +00 +00 +0a +13 +00 +00 +20 +00 +00 +00 +03 +10 +00 +00 +29 +00 +00 +00 +09 +02 +00 +00 +2f +00 +00 +00 +03 +12 +00 +00 +37 +00 +00 +00 +09 +03 +00 +00 +3f +00 +00 +00 +03 +10 +00 +00 +47 +00 +00 +00 +09 +03 +00 +00 +4d +00 +00 +00 +04 +11 +00 +00 +68 +65 +6c +6c +6f +2c +20 +77 +6f +72 +6c +64 +00 +69 +6e +74 +65 +67 +65 +72 +3d +3d +25 +64 +2c +20 +6c +6f +63 +61 +6c +69 +6e +74 +3d +3d +25 +64 +2c +20 +63 +6f +6d +6d +76 +61 +72 +3d +25 +64 +0a +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +01 +02 +00 +00 +38 +00 +00 +00 +01 +0c +00 +00 +3c +00 +00 +00 +01 +0f +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +61 +74 +61 +00 +2e +62 +73 +73 +00 +2e +72 +65 +6c +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +2e +64 +61 +74 +61 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +6c +72 +6f +74 +61 +74 +65 +00 +67 +72 +65 +65 +74 +00 +61 +73 +6d +73 +74 +72 +00 +74 +65 +78 +74 +70 +74 +72 +00 +73 +65 +6c +66 +70 +74 +72 +00 +69 +6e +74 +65 +67 +65 +72 +00 +70 +72 +69 +6e +74 +66 +00 +63 +6f +6d +6d +76 +61 +72 +00 +5f +47 +4c +4f +42 +41 +4c +5f +4f +46 +46 +53 +45 +54 +5f +54 +41 +42 +4c +45 +5f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +04 +00 +0b +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +12 +00 +04 +00 +11 +00 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +11 +00 +06 +00 +18 +00 +00 +00 +38 +00 +00 +00 +04 +00 +00 +00 +11 +00 +06 +00 +20 +00 +00 +00 +3c +00 +00 +00 +04 +00 +00 +00 +11 +00 +06 +00 +28 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +11 +00 +08 +00 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +37 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +00 +f2 +ff +3f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +36 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +01 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +26 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +01 +00 +00 +55 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c8 +01 +00 +00 +40 +01 +00 +00 +02 +00 +00 +00 +0b +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +56 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +98 +00 +00 +00 +40 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +d8 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +1c +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +01 +00 +00 +18 +00 +00 +00 +03 +00 +00 +00 +06 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +0d +00 +00 +00 +08 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftest.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftest.asm new file mode 100644 index 0000000000..f88457e69a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftest.asm @@ -0,0 +1,83 @@ +; test source file for assembling to ELF +; copied from cofftest.asm; s/_//g s/coff/elf/g +; build with (under Linux, for example): +; yasm -f elf elftest.asm +; gcc -o elftest elftest.c elftest.o + +; This file should test the following: +; [1] Define and export a global text-section symbol +; [2] Define and export a global data-section symbol +; [3] Define and export a global BSS-section symbol +; [4] Define a non-global text-section symbol +; [5] Define a non-global data-section symbol +; [6] Define a non-global BSS-section symbol +; [7] Define a COMMON symbol +; [8] Define a NASM local label +; [9] Reference a NASM local label +; [10] Import an external symbol +; [11] Make a PC-relative call to an external symbol +; [12] Reference a text-section symbol in the text section +; [13] Reference a data-section symbol in the text section +; [14] Reference a BSS-section symbol in the text section +; [15] Reference a text-section symbol in the data section +; [16] Reference a data-section symbol in the data section +; [17] Reference a BSS-section symbol in the data section + +[BITS 32] +[GLOBAL lrotate] ; [1] +[GLOBAL greet] ; [1] +[GLOBAL asmstr] ; [2] +[GLOBAL textptr] ; [2] +[GLOBAL selfptr] ; [2] +[GLOBAL integer] ; [3] +[EXTERN printf] ; [10] +[COMMON commvar 4] ; [7] + +[SECTION .text] + +; prototype: long lrotate(long x, int num); +lrotate: ; [1] + push ebp + mov ebp,esp + mov eax,[ebp+8] + mov ecx,[ebp+12] +.label rol eax,1 ; [4] [8] + loop .label ; [9] [12] + mov esp,ebp + pop ebp + ret + +; prototype: void greet(void); +greet mov eax,[integer] ; [14] + inc eax + mov [localint],eax ; [14] + push dword [commvar] + mov eax,[localptr] ; [13] + push dword [eax] + push dword [integer] ; [1] [14] + push dword printfstr ; [13] + call printf ; [11] + add esp,16 + ret + +[SECTION .data] + +; a string +asmstr db 'hello, world', 0 ; [2] + +; a string for Printf +printfstr db "integer==%d, localint==%d, commvar=%d" + db 10, 0 + +; some pointers +localptr dd localint ; [5] [17] +textptr dd greet ; [15] +selfptr dd selfptr ; [16] + +[SECTION .bss] + +; an integer +integer resd 1 ; [3] + +; a local integer +localint resd 1 ; [6] diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftest.c b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftest.c new file mode 100644 index 0000000000..6961071841 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftest.c @@ -0,0 +1,35 @@ +/* + * test source file for assembling to ELF + * copied from cofftest.c; s/coff/elf/g + * build with (under Linux, for example): + * yasm -f elf elftest.asm + * gcc -o elftest elftest.c elftest.o + */ + +#include + +extern int lrotate(long, int); +extern void greet(void); +extern char asmstr[]; +extern void *selfptr; +extern void *textptr; +extern int integer, commvar; + +int main(void) { + + printf("Testing lrotate: should get 0x00400000, 0x00000001\n"); + printf("lrotate(0x00040000, 4) = 0x%08lx\n", lrotate(0x40000,4)); + printf("lrotate(0x00040000, 14) = 0x%08lx\n", lrotate(0x40000,14)); + + printf("This string should read `hello, world': `%s'\n", asmstr); + + printf("The integers here should be 1234, 1235 and 4321:\n"); + integer = 1234; + commvar = 4321; + greet(); + + printf("These pointers should be equal: %p and %p\n", + &greet, textptr); + + printf("So should these: %p and %p\n", selfptr, &selfptr); +} diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftest.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftest.hex new file mode 100644 index 0000000000..45775269a7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftest.hex @@ -0,0 +1,1032 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +02 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +09 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +55 +89 +e5 +8b +45 +08 +8b +4d +0c +d1 +c0 +e2 +fc +89 +ec +5d +c3 +a1 +00 +00 +00 +00 +40 +a3 +04 +00 +00 +00 +ff +35 +00 +00 +00 +00 +a1 +34 +00 +00 +00 +ff +30 +ff +35 +00 +00 +00 +00 +68 +0d +00 +00 +00 +e8 +fc +ff +ff +ff +83 +c4 +10 +c3 +00 +00 +00 +12 +00 +00 +00 +01 +0e +00 +00 +18 +00 +00 +00 +01 +02 +00 +00 +1e +00 +00 +00 +01 +10 +00 +00 +23 +00 +00 +00 +01 +03 +00 +00 +2b +00 +00 +00 +01 +0e +00 +00 +30 +00 +00 +00 +01 +03 +00 +00 +35 +00 +00 +00 +02 +0f +00 +00 +68 +65 +6c +6c +6f +2c +20 +77 +6f +72 +6c +64 +00 +69 +6e +74 +65 +67 +65 +72 +3d +3d +25 +64 +2c +20 +6c +6f +63 +61 +6c +69 +6e +74 +3d +3d +25 +64 +2c +20 +63 +6f +6d +6d +76 +61 +72 +3d +25 +64 +0a +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +01 +02 +00 +00 +38 +00 +00 +00 +01 +0a +00 +00 +3c +00 +00 +00 +01 +0d +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +61 +74 +61 +00 +2e +62 +73 +73 +00 +2e +72 +65 +6c +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +2e +64 +61 +74 +61 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +6c +72 +6f +74 +61 +74 +65 +00 +67 +72 +65 +65 +74 +00 +61 +73 +6d +73 +74 +72 +00 +74 +65 +78 +74 +70 +74 +72 +00 +73 +65 +6c +66 +70 +74 +72 +00 +69 +6e +74 +65 +67 +65 +72 +00 +70 +72 +69 +6e +74 +66 +00 +63 +6f +6d +6d +76 +61 +72 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +0b +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +11 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +06 +00 +18 +00 +00 +00 +38 +00 +00 +00 +00 +00 +00 +00 +10 +00 +06 +00 +20 +00 +00 +00 +3c +00 +00 +00 +00 +00 +00 +00 +10 +00 +06 +00 +28 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +08 +00 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +37 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +10 +00 +f2 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +36 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +26 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +01 +00 +00 +3f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +01 +00 +00 +10 +01 +00 +00 +02 +00 +00 +00 +09 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +3d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +38 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +b8 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +1c +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f8 +00 +00 +00 +18 +00 +00 +00 +03 +00 +00 +00 +06 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +0d +00 +00 +00 +08 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftimes.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftimes.asm new file mode 100644 index 0000000000..20b8593016 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftimes.asm @@ -0,0 +1,12 @@ +[section .text] +mov eax, eax +mov ebx, ebx +[section .data] +times 0x1 mov eax, eax +mov ebx, ebx +[section .foo] +times 0x10 mov eax, eax +mov ebx, ebx +[section .bar] +times 0x10 mov eax, eax +times 0x10 mov ebx, ebx diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftimes.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftimes.hex new file mode 100644 index 0000000000..436d67dba5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftimes.hex @@ -0,0 +1,656 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +08 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +89 +c0 +89 +db +89 +c0 +89 +db +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +db +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +c0 +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +89 +db +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +61 +74 +61 +00 +2e +66 +6f +6f +00 +2e +62 +61 +72 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ac +00 +00 +00 +31 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e0 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e4 +00 +00 +00 +60 +00 +00 +00 +02 +00 +00 +00 +06 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +44 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +22 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +6a +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftypesize.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftypesize.asm new file mode 100644 index 0000000000..88a72da8ff --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftypesize.asm @@ -0,0 +1,33 @@ +weak weaksym +weaksym: + +weaksym2: +weak weaksym2 + +global a +type a function +size a 500 +a: + +type b object +b: +global b + +type c function +c: + +global d +d: +type d object + +e: +global e +type e object + +f: +type f object + +g: +global g + +h: diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftypesize.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftypesize.hex new file mode 100644 index 0000000000..c9f8d6e9fd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elftypesize.hex @@ -0,0 +1,552 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +77 +65 +61 +6b +73 +79 +6d +00 +77 +65 +61 +6b +73 +79 +6d +32 +00 +61 +00 +62 +00 +63 +00 +64 +00 +65 +00 +66 +00 +67 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +1e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +04 +00 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +04 +00 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +04 +00 +14 +00 +00 +00 +00 +00 +00 +00 +f4 +01 +00 +00 +12 +00 +04 +00 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +00 +04 +00 +1a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +00 +04 +00 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +00 +04 +00 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +64 +00 +00 +00 +22 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +88 +00 +00 +00 +d0 +00 +00 +00 +02 +00 +00 +00 +06 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfvisibility.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfvisibility.asm new file mode 100644 index 0000000000..8577b5de4a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfvisibility.asm @@ -0,0 +1,11 @@ +[section .text] + +[global ghidden:hidden] +[global ginternal:internal] +[global gprotected:protected] +[global gtoomany:hidden internal] + +ghidden: +ginternal: +gprotected: +gtoomany: diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfvisibility.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfvisibility.errwarn new file mode 100644 index 0000000000..968dc9bb97 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfvisibility.errwarn @@ -0,0 +1 @@ +-:6: warning: More than one symbol visibility provided; using last diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfvisibility.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfvisibility.hex new file mode 100644 index 0000000000..8da06880ed --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/elfvisibility.hex @@ -0,0 +1,456 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +67 +68 +69 +64 +64 +65 +6e +00 +67 +69 +6e +74 +65 +72 +6e +61 +6c +00 +67 +70 +72 +6f +74 +65 +63 +74 +65 +64 +00 +67 +74 +6f +6f +6d +61 +6e +79 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +02 +04 +00 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +04 +00 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +03 +04 +00 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +64 +00 +00 +00 +29 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +00 +00 +00 +70 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/Makefile.inc new file mode 100644 index 0000000000..883c214326 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/Makefile.inc @@ -0,0 +1,7 @@ +TESTS += modules/objfmts/elf/tests/gas32/elf_gas32_test.sh + +EXTRA_DIST += modules/objfmts/elf/tests/gas32/elf_gas32_test.sh +EXTRA_DIST += modules/objfmts/elf/tests/gas32/elf_gas32_ssym.asm +EXTRA_DIST += modules/objfmts/elf/tests/gas32/elf_gas32_ssym.hex +EXTRA_DIST += modules/objfmts/elf/tests/gas32/elf_gas32_got.asm +EXTRA_DIST += modules/objfmts/elf/tests/gas32/elf_gas32_got.hex diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_got.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_got.asm new file mode 100644 index 0000000000..22a60a5227 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_got.asm @@ -0,0 +1,13 @@ +.text + +.extern a + +.globl tst +tst: + call L1 +L1: + pop %eax + add $_GLOBAL_OFFSET_TABLE_+(.-L1), %eax + mov (a@GOT)(%eax), %eax + movl $5, (%eax) + ret diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_got.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_got.hex new file mode 100644 index 0000000000..c7060e62b6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_got.hex @@ -0,0 +1,544 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +06 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e8 +00 +00 +00 +00 +58 +05 +02 +00 +00 +00 +8b +80 +00 +00 +00 +00 +c7 +00 +05 +00 +00 +00 +c3 +07 +00 +00 +00 +0a +06 +00 +00 +0d +00 +00 +00 +03 +04 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +2d +00 +61 +00 +74 +73 +74 +00 +5f +47 +4c +4f +42 +41 +4c +5f +4f +46 +46 +53 +45 +54 +5f +54 +41 +42 +4c +45 +5f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +04 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +68 +00 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +94 +00 +00 +00 +1f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b4 +00 +00 +00 +70 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +58 +00 +00 +00 +10 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_ssym.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_ssym.asm new file mode 100644 index 0000000000..9bd042d0ab --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_ssym.asm @@ -0,0 +1,14 @@ +.text +foo: +movl %eax, foo@PLT +movl %eax, foo@GOTOFF +#movl %eax, foo@GOTPC +movl %eax, bar@TLSGD +movl %eax, bar@TLSLDM +movl %eax, bar@GOTTPOFF +movl %eax, bar@TPOFF +movl %eax, bar@NTPOFF +movl %eax, bar@DTPOFF +movl %eax, bar@GOTNTPOFF +movl %eax, bar@INDNTPOFF +movl %eax, foo@GOT diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_ssym.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_ssym.hex new file mode 100644 index 0000000000..61057e2faf --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_ssym.hex @@ -0,0 +1,592 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +06 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a3 +00 +00 +00 +00 +a3 +00 +00 +00 +00 +a3 +00 +00 +00 +00 +a3 +00 +00 +00 +00 +a3 +00 +00 +00 +00 +a3 +00 +00 +00 +00 +a3 +00 +00 +00 +00 +a3 +00 +00 +00 +00 +a3 +00 +00 +00 +00 +a3 +00 +00 +00 +00 +a3 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +02 +00 +00 +06 +00 +00 +00 +09 +03 +00 +00 +0b +00 +00 +00 +12 +04 +00 +00 +10 +00 +00 +00 +13 +04 +00 +00 +15 +00 +00 +00 +21 +04 +00 +00 +1a +00 +00 +00 +22 +04 +00 +00 +1f +00 +00 +00 +11 +04 +00 +00 +24 +00 +00 +00 +20 +04 +00 +00 +29 +00 +00 +00 +10 +04 +00 +00 +2e +00 +00 +00 +0f +04 +00 +00 +33 +00 +00 +00 +03 +02 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +2d +00 +62 +61 +72 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fc +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +50 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +37 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +00 +00 +00 +58 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_test.sh new file mode 100755 index 0000000000..4d346911f9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh elf_gas32_test modules/objfmts/elf/tests/gas32 "GAS elf-x86 objfmt" "-f elf32 -p gas" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/Makefile.inc new file mode 100644 index 0000000000..382744d1d6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/Makefile.inc @@ -0,0 +1,11 @@ +TESTS += modules/objfmts/elf/tests/gas64/elf_gas64_test.sh + +EXTRA_DIST += modules/objfmts/elf/tests/gas64/elf_gas64_test.sh +EXTRA_DIST += modules/objfmts/elf/tests/gas64/crosssect.asm +EXTRA_DIST += modules/objfmts/elf/tests/gas64/crosssect.hex +EXTRA_DIST += modules/objfmts/elf/tests/gas64/elf_gas64_curpos.asm +EXTRA_DIST += modules/objfmts/elf/tests/gas64/elf_gas64_curpos.hex +EXTRA_DIST += modules/objfmts/elf/tests/gas64/elf_gas64_reloc.asm +EXTRA_DIST += modules/objfmts/elf/tests/gas64/elf_gas64_reloc.hex +EXTRA_DIST += modules/objfmts/elf/tests/gas64/elf_gas64_ssym.asm +EXTRA_DIST += modules/objfmts/elf/tests/gas64/elf_gas64_ssym.hex diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/crosssect.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/crosssect.asm new file mode 100644 index 0000000000..4199979121 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/crosssect.asm @@ -0,0 +1,18 @@ +.section .rodata + .align 4 +_sys_srt: + .long 0 + +.text + .align 4,0x90 + .long _sys_srt-. + .long _sys_srt-_sys_info + #.long _sys_info-_sys_srt + #.long -(_sys_srt-_sys_info) + .long _sys_info-. + .long .-_sys_info + .long (_sys_srt-.)+(.-_sys_info) # GAS cannot handle this but we can + .long 0 + .long 65558 +_sys_info: + .long 0 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/crosssect.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/crosssect.hex new file mode 100644 index 0000000000..dd95c79db3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/crosssect.hex @@ -0,0 +1,832 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +07 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +00 +00 +00 +f0 +ff +ff +ff +00 +00 +00 +00 +00 +00 +00 +00 +16 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +e8 +ff +ff +ff +ff +ff +ff +ff +10 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +f4 +ff +ff +ff +ff +ff +ff +ff +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +72 +6f +64 +61 +74 +61 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2a +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ac +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1a +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e0 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e4 +00 +00 +00 +00 +00 +00 +00 +90 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +06 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a8 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_curpos.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_curpos.asm new file mode 100644 index 0000000000..60a893b32e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_curpos.asm @@ -0,0 +1,27 @@ +.globl bar +.globl foo + +.section .bar +bar: +.4byte foo-. +.4byte baz-. +call foo +call baz +foo: + +.section .data +baz: +.4byte foo-. +#.4byte .-foo # illegal +.4byte baz-. +.4byte .-baz +.4byte foo+4-. # with constant +.4byte .-baz+foo+4-. # both local and cross-segment (legal) +#.4byte baz+foo+4-.-. # ditto, slightly different - GAS gets confused on this +#.4byte (bar-.)+(foo-.) # illegal (too many cross-segment) +.4byte baz-.+baz-. # two from same segment + +.section .text +movl $5, foo-. +movl $(foo-.), %eax +call foo diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_curpos.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_curpos.hex new file mode 100644 index 0000000000..80e25a8f38 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_curpos.hex @@ -0,0 +1,1248 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +0a +00 +01 +00 +c7 +04 +25 +00 +00 +00 +00 +05 +00 +00 +00 +b8 +00 +00 +00 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +07 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +12 +00 +00 +00 +00 +00 +00 +00 +e8 +05 +00 +00 +00 +e8 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +02 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +00 +00 +00 +00 +fc +ff +ff +ff +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d8 +ff +ff +ff +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +07 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +07 +00 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +62 +61 +72 +00 +2e +64 +61 +74 +61 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +61 +2e +62 +61 +72 +00 +2e +72 +65 +6c +61 +2e +64 +61 +74 +61 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +62 +61 +72 +00 +66 +6f +6f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +10 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +10 +00 +06 +00 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +42 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +01 +00 +00 +00 +00 +00 +00 +4c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +32 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +01 +00 +00 +00 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3a +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9c +01 +00 +00 +00 +00 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +06 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +58 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1d +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b4 +00 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +06 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e4 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fc +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +08 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_reloc.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_reloc.asm new file mode 100644 index 0000000000..e015ce4b08 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_reloc.asm @@ -0,0 +1,37 @@ +.comm _ZEROVAR, 32, 16 +.comm _VAR, 16, 16 +.data +.org 0 +_ZEROVAR: +.org 0xa0 +.globl _VAR +.type _VAR, @object +.size _VAR, 16 +_VAR: +.4byte 0 +.4byte 0 +.4byte 0 +.4byte 0 +.org 0xc0 +_VAR2: +.org 0xe0 +.globl _VAR3 +_VAR3: + +.text +movq $0, %rax +movq _VAR, %rax +movq %rax, _VAR(%rip) +movq _VAR+8(%rip), %rcx +movlpd _VAR(%rip), %xmm1 + +movq _VAR2, %rax +movq %rax, _VAR2(%rip) +movq _VAR2+8(%rip), %rcx +movlpd _VAR2(%rip), %xmm1 + +movq _VAR3, %rax +movq %rax, _VAR3(%rip) +movq _VAR3+8(%rip), %rcx +movlpd _VAR3(%rip), %xmm1 + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_reloc.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_reloc.hex new file mode 100644 index 0000000000..906cce87ab --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_reloc.hex @@ -0,0 +1,1392 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +07 +00 +01 +00 +48 +c7 +c0 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +89 +05 +00 +00 +00 +00 +48 +8b +0d +00 +00 +00 +00 +66 +0f +12 +0d +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +89 +05 +00 +00 +00 +00 +48 +8b +0d +00 +00 +00 +00 +66 +0f +12 +0d +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +89 +05 +00 +00 +00 +00 +48 +8b +0d +00 +00 +00 +00 +66 +0f +12 +0d +00 +00 +00 +00 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +06 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +19 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +06 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +06 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +29 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +03 +00 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +bc +00 +00 +00 +00 +00 +00 +00 +37 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +c4 +00 +00 +00 +00 +00 +00 +00 +3f +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +bc +00 +00 +00 +00 +00 +00 +00 +47 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4e +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +07 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +55 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +07 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +5d +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +07 +00 +00 +00 +fc +ff +ff +ff +ff +ff +ff +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +61 +74 +61 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +2d +00 +5f +56 +41 +52 +00 +5f +5a +45 +52 +4f +56 +41 +52 +00 +5f +56 +41 +52 +33 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +10 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +11 +00 +06 +00 +a0 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +10 +00 +06 +00 +e0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a4 +02 +00 +00 +00 +00 +00 +00 +32 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d8 +02 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f0 +02 +00 +00 +00 +00 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +05 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +61 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a4 +00 +00 +00 +00 +00 +00 +00 +20 +01 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c4 +01 +00 +00 +00 +00 +00 +00 +e0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_ssym.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_ssym.asm new file mode 100644 index 0000000000..b7203f6211 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_ssym.asm @@ -0,0 +1,10 @@ +.text +foo: +movl %eax, foo@PLT +movl %eax, foo@GOTPCREL +movl %eax, bar@TLSGD +movl %eax, bar@TLSLD +movl %eax, bar@GOTTPOFF +movl %eax, bar@TPOFF +movl %eax, bar@DTPOFF +movl %eax, foo@GOT diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_ssym.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_ssym.hex new file mode 100644 index 0000000000..06e4c13821 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_ssym.hex @@ -0,0 +1,880 @@ +7f +45 +4c +46 +02 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f0 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +40 +00 +06 +00 +01 +00 +89 +04 +25 +00 +00 +00 +00 +89 +04 +25 +00 +00 +00 +00 +89 +04 +25 +00 +00 +00 +00 +89 +04 +25 +00 +00 +00 +00 +89 +04 +25 +00 +00 +00 +00 +89 +04 +25 +00 +00 +00 +00 +89 +04 +25 +00 +00 +00 +00 +89 +04 +25 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +00 +00 +00 +00 +09 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +13 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +14 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1f +00 +00 +00 +00 +00 +00 +00 +16 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +26 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +15 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +62 +61 +72 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +38 +01 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +64 +01 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1a +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +01 +00 +00 +00 +00 +00 +00 +78 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +38 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +00 +00 +00 +00 +00 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_test.sh new file mode 100755 index 0000000000..6696ba7e09 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gas64/elf_gas64_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh elf_gas64_test modules/objfmts/elf/tests/gas64 "GAS elf-amd64 objfmt" "-f elf64 -p gas" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/Makefile.inc new file mode 100644 index 0000000000..6bba8bd64f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/Makefile.inc @@ -0,0 +1,11 @@ +TESTS += modules/objfmts/elf/tests/gasx32/elf_gasx32_test.sh + +EXTRA_DIST += modules/objfmts/elf/tests/gasx32/elf_gasx32_test.sh +EXTRA_DIST += modules/objfmts/elf/tests/gasx32/crosssect.asm +EXTRA_DIST += modules/objfmts/elf/tests/gasx32/crosssect.hex +EXTRA_DIST += modules/objfmts/elf/tests/gasx32/elf_gasx32_curpos.asm +EXTRA_DIST += modules/objfmts/elf/tests/gasx32/elf_gasx32_curpos.hex +EXTRA_DIST += modules/objfmts/elf/tests/gasx32/elf_gasx32_reloc.asm +EXTRA_DIST += modules/objfmts/elf/tests/gasx32/elf_gasx32_reloc.hex +EXTRA_DIST += modules/objfmts/elf/tests/gasx32/elf_gasx32_ssym.asm +EXTRA_DIST += modules/objfmts/elf/tests/gasx32/elf_gasx32_ssym.hex diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/crosssect.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/crosssect.asm new file mode 100644 index 0000000000..4199979121 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/crosssect.asm @@ -0,0 +1,18 @@ +.section .rodata + .align 4 +_sys_srt: + .long 0 + +.text + .align 4,0x90 + .long _sys_srt-. + .long _sys_srt-_sys_info + #.long _sys_info-_sys_srt + #.long -(_sys_srt-_sys_info) + .long _sys_info-. + .long .-_sys_info + .long (_sys_srt-.)+(.-_sys_info) # GAS cannot handle this but we can + .long 0 + .long 65558 +_sys_info: + .long 0 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/crosssect.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/crosssect.hex new file mode 100644 index 0000000000..35893c4eea --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/crosssect.hex @@ -0,0 +1,568 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +07 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +00 +00 +00 +f0 +ff +ff +ff +00 +00 +00 +00 +00 +00 +00 +00 +16 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +04 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +02 +04 +00 +00 +e8 +ff +ff +ff +10 +00 +00 +00 +02 +04 +00 +00 +f4 +ff +ff +ff +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +72 +6f +64 +61 +74 +61 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +1c +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2a +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +88 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1a +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bc +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +00 +00 +00 +60 +00 +00 +00 +02 +00 +00 +00 +06 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +24 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +0c +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +84 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_curpos.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_curpos.asm new file mode 100644 index 0000000000..60a893b32e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_curpos.asm @@ -0,0 +1,27 @@ +.globl bar +.globl foo + +.section .bar +bar: +.4byte foo-. +.4byte baz-. +call foo +call baz +foo: + +.section .data +baz: +.4byte foo-. +#.4byte .-foo # illegal +.4byte baz-. +.4byte .-baz +.4byte foo+4-. # with constant +.4byte .-baz+foo+4-. # both local and cross-segment (legal) +#.4byte baz+foo+4-.-. # ditto, slightly different - GAS gets confused on this +#.4byte (bar-.)+(foo-.) # illegal (too many cross-segment) +.4byte baz-.+baz-. # two from same segment + +.section .text +movl $5, foo-. +movl $(foo-.), %eax +call foo diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_curpos.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_curpos.hex new file mode 100644 index 0000000000..45cb217f92 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_curpos.hex @@ -0,0 +1,848 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +0a +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c7 +04 +25 +00 +00 +00 +00 +05 +00 +00 +00 +b8 +00 +00 +00 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +02 +07 +00 +00 +03 +00 +00 +00 +0c +00 +00 +00 +02 +07 +00 +00 +01 +00 +00 +00 +11 +00 +00 +00 +02 +07 +00 +00 +fc +ff +ff +ff +12 +00 +00 +00 +00 +00 +00 +00 +e8 +05 +00 +00 +00 +e8 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +02 +02 +00 +00 +00 +00 +00 +00 +0e +00 +00 +00 +02 +02 +00 +00 +fc +ff +ff +ff +00 +00 +00 +00 +fc +ff +ff +ff +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d8 +ff +ff +ff +00 +00 +00 +00 +02 +07 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +02 +07 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +02 +07 +00 +00 +14 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +62 +61 +72 +00 +2e +64 +61 +74 +61 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +61 +2e +62 +61 +72 +00 +2e +72 +65 +6c +61 +2e +64 +61 +74 +61 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +62 +61 +72 +00 +66 +6f +6f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +06 +00 +07 +00 +00 +00 +12 +00 +00 +00 +00 +00 +00 +00 +10 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +42 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e4 +00 +00 +00 +4c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +32 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +01 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3a +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3c +01 +00 +00 +80 +00 +00 +00 +02 +00 +00 +00 +06 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +15 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +58 +00 +00 +00 +24 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +0c +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +00 +00 +00 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +1d +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +00 +00 +00 +18 +00 +00 +00 +03 +00 +00 +00 +06 +00 +00 +00 +04 +00 +00 +00 +0c +00 +00 +00 +0c +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +a8 +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +00 +00 +00 +24 +00 +00 +00 +03 +00 +00 +00 +08 +00 +00 +00 +04 +00 +00 +00 +0c +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_reloc.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_reloc.asm new file mode 100644 index 0000000000..e015ce4b08 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_reloc.asm @@ -0,0 +1,37 @@ +.comm _ZEROVAR, 32, 16 +.comm _VAR, 16, 16 +.data +.org 0 +_ZEROVAR: +.org 0xa0 +.globl _VAR +.type _VAR, @object +.size _VAR, 16 +_VAR: +.4byte 0 +.4byte 0 +.4byte 0 +.4byte 0 +.org 0xc0 +_VAR2: +.org 0xe0 +.globl _VAR3 +_VAR3: + +.text +movq $0, %rax +movq _VAR, %rax +movq %rax, _VAR(%rip) +movq _VAR+8(%rip), %rcx +movlpd _VAR(%rip), %xmm1 + +movq _VAR2, %rax +movq %rax, _VAR2(%rip) +movq _VAR2+8(%rip), %rcx +movlpd _VAR2(%rip), %xmm1 + +movq _VAR3, %rax +movq %rax, _VAR3(%rip) +movq _VAR3+8(%rip), %rcx +movlpd _VAR3(%rip), %xmm1 + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_reloc.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_reloc.hex new file mode 100644 index 0000000000..1b46fa18b3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_reloc.hex @@ -0,0 +1,1016 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e0 +02 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +07 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +c7 +c0 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +89 +05 +00 +00 +00 +00 +48 +8b +0d +00 +00 +00 +00 +66 +0f +12 +0d +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +89 +05 +00 +00 +00 +00 +48 +8b +0d +00 +00 +00 +00 +66 +0f +12 +0d +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +89 +05 +00 +00 +00 +00 +48 +8b +0d +00 +00 +00 +00 +66 +0f +12 +0d +00 +00 +00 +00 +00 +00 +00 +0b +00 +00 +00 +0a +06 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +02 +06 +00 +00 +fc +ff +ff +ff +19 +00 +00 +00 +02 +06 +00 +00 +04 +00 +00 +00 +21 +00 +00 +00 +02 +06 +00 +00 +fc +ff +ff +ff +29 +00 +00 +00 +0a +03 +00 +00 +c0 +00 +00 +00 +30 +00 +00 +00 +02 +03 +00 +00 +bc +00 +00 +00 +37 +00 +00 +00 +02 +03 +00 +00 +c4 +00 +00 +00 +3f +00 +00 +00 +02 +03 +00 +00 +bc +00 +00 +00 +47 +00 +00 +00 +0a +07 +00 +00 +00 +00 +00 +00 +4e +00 +00 +00 +02 +07 +00 +00 +fc +ff +ff +ff +55 +00 +00 +00 +02 +07 +00 +00 +04 +00 +00 +00 +5d +00 +00 +00 +02 +07 +00 +00 +fc +ff +ff +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +61 +74 +61 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +2d +00 +5f +56 +41 +52 +00 +5f +5a +45 +52 +4f +56 +41 +52 +00 +5f +56 +41 +52 +33 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +08 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +10 +00 +06 +00 +03 +00 +00 +00 +a0 +00 +00 +00 +10 +00 +00 +00 +11 +00 +06 +00 +11 +00 +00 +00 +e0 +00 +00 +00 +00 +00 +00 +00 +10 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +02 +00 +00 +32 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +02 +00 +00 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +02 +00 +00 +80 +00 +00 +00 +02 +00 +00 +00 +05 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +61 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a4 +00 +00 +00 +90 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +0c +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +34 +01 +00 +00 +e0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_ssym.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_ssym.asm new file mode 100644 index 0000000000..b7203f6211 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_ssym.asm @@ -0,0 +1,10 @@ +.text +foo: +movl %eax, foo@PLT +movl %eax, foo@GOTPCREL +movl %eax, bar@TLSGD +movl %eax, bar@TLSLD +movl %eax, bar@GOTTPOFF +movl %eax, bar@TPOFF +movl %eax, bar@DTPOFF +movl %eax, foo@GOT diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_ssym.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_ssym.hex new file mode 100644 index 0000000000..cac3990074 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_ssym.hex @@ -0,0 +1,592 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +06 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +89 +04 +25 +00 +00 +00 +00 +89 +04 +25 +00 +00 +00 +00 +89 +04 +25 +00 +00 +00 +00 +89 +04 +25 +00 +00 +00 +00 +89 +04 +25 +00 +00 +00 +00 +89 +04 +25 +00 +00 +00 +00 +89 +04 +25 +00 +00 +00 +00 +89 +04 +25 +00 +00 +00 +00 +03 +00 +00 +00 +04 +02 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +09 +02 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +13 +04 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +14 +04 +00 +00 +00 +00 +00 +00 +1f +00 +00 +00 +16 +04 +00 +00 +00 +00 +00 +00 +26 +00 +00 +00 +17 +04 +00 +00 +00 +00 +00 +00 +2d +00 +00 +00 +15 +04 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +03 +02 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +62 +61 +72 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +16 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d8 +00 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1a +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +01 +00 +00 +50 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +38 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +00 +00 +00 +60 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +0c +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_test.sh new file mode 100755 index 0000000000..f5372cb5c4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/gasx32/elf_gasx32_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh elf_gasx32_test modules/objfmts/elf/tests/gasx32 "GAS elf-x32 objfmt" "-f elfx32 -p gas" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/nasm-forceident.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/nasm-forceident.asm new file mode 100644 index 0000000000..dcd7705ad0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/nasm-forceident.asm @@ -0,0 +1,12 @@ +section ".text" + +section '.text' + +section $foo + +global $Test + +$Test: + mov ax, 0 + ret + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/nasm-forceident.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/nasm-forceident.hex new file mode 100644 index 0000000000..4dda868513 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/nasm-forceident.hex @@ -0,0 +1,448 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +06 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +66 +b8 +00 +00 +c3 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +24 +66 +6f +6f +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +2d +00 +54 +65 +73 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1c +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +26 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +00 +00 +00 +50 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/nasm-sectname.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/nasm-sectname.asm new file mode 100644 index 0000000000..12a2505e50 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/nasm-sectname.asm @@ -0,0 +1,4 @@ +; XXX: this test should really be in parsers/nasm/tests, not here. +section .note.GNU-stack +section "more$$&complex" + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/nasm-sectname.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/nasm-sectname.hex new file mode 100644 index 0000000000..a78e2e20a3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/nasm-sectname.hex @@ -0,0 +1,504 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +07 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +6e +6f +74 +65 +2e +47 +4e +55 +2d +73 +74 +61 +63 +6b +00 +6d +6f +72 +65 +24 +24 +26 +63 +6f +6d +70 +6c +65 +78 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +36 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +26 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +00 +00 +00 +50 +00 +00 +00 +02 +00 +00 +00 +05 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/Makefile.inc new file mode 100644 index 0000000000..2db20525a9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/Makefile.inc @@ -0,0 +1,11 @@ +TESTS += modules/objfmts/elf/tests/x32/elf_x32_test.sh + +EXTRA_DIST += modules/objfmts/elf/tests/x32/elf_x32_test.sh +EXTRA_DIST += modules/objfmts/elf/tests/x32/elf-rip.asm +EXTRA_DIST += modules/objfmts/elf/tests/x32/elf-rip.hex +EXTRA_DIST += modules/objfmts/elf/tests/x32/elfsox32.asm +EXTRA_DIST += modules/objfmts/elf/tests/x32/elfsox32.hex +EXTRA_DIST += modules/objfmts/elf/tests/x32/gotpcrel.asm +EXTRA_DIST += modules/objfmts/elf/tests/x32/gotpcrel.hex +EXTRA_DIST += modules/objfmts/elf/tests/x32/multiplefixup.asm +EXTRA_DIST += modules/objfmts/elf/tests/x32/multiplefixup.hex diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elf-rip.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elf-rip.asm new file mode 100644 index 0000000000..5f10f09665 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elf-rip.asm @@ -0,0 +1,7 @@ +[bits 64] +[extern sym] +mov eax, [rip] +mov eax, [rip+2] +mov eax, [rip+sym] +mov eax, [sym wrt rip] +call sym diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elf-rip.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elf-rip.hex new file mode 100644 index 0000000000..be5da687c1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elf-rip.hex @@ -0,0 +1,496 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +06 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8b +05 +00 +00 +00 +00 +8b +05 +02 +00 +00 +00 +8b +05 +00 +00 +00 +00 +8b +05 +00 +00 +00 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +0e +00 +00 +00 +0a +03 +00 +00 +00 +00 +00 +00 +14 +00 +00 +00 +02 +03 +00 +00 +fc +ff +ff +ff +19 +00 +00 +00 +02 +03 +00 +00 +fc +ff +ff +ff +00 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +73 +79 +6d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +00 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1a +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b8 +00 +00 +00 +40 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +1d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +24 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +0c +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elf_x32_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elf_x32_test.sh new file mode 100755 index 0000000000..396181669a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elf_x32_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh elf_x32_test modules/objfmts/elf/tests/x32 "elf-x32 objfmt" "-f elf -m x32" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elfsox32.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elfsox32.asm new file mode 100644 index 0000000000..931c7ffe15 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elfsox32.asm @@ -0,0 +1,90 @@ +; This code is UNTESTED, and almost certainly DOES NOT WORK! +; Do NOT use this as an example of how to write AMD64 shared libraries! +; This code is simply to test the AMD64 ELF WRT relocations. + +; This file should test the following: +; [1] Define and export a global text-section symbol +; [2] Define and export a global data-section symbol +; [3] Define and export a global BSS-section symbol +; [4] Define a non-global text-section symbol +; [5] Define a non-global data-section symbol +; [6] Define a non-global BSS-section symbol +; [7] Define a COMMON symbol +; [8] Define a NASM local label +; [9] Reference a NASM local label +; [10] Import an external symbol +; [11] Make a PC-relative call to an external symbol +; [12] Reference a text-section symbol in the text section +; [13] Reference a data-section symbol in the text section +; [14] Reference a BSS-section symbol in the text section +; [15] Reference a text-section symbol in the data section +; [16] Reference a data-section symbol in the data section +; [17] Reference a BSS-section symbol in the data section + + [BITS 64] + [GLOBAL lrotate:function] ; [1] + [GLOBAL greet:function] ; [1] + [GLOBAL asmstr:data asmstr.end-asmstr] ; [2] + [GLOBAL textptr:data 4] ; [2] + [GLOBAL selfptr:data 4] ; [2] + [GLOBAL integer:data 4] ; [3] + [EXTERN printf] ; [10] + [COMMON commvar 4:4] ; [7] + [EXTERN _GLOBAL_OFFSET_TABLE_] + + [SECTION .text] + +; prototype: long lrotate(long x, int num); +lrotate: ; [1] + push rbp + mov rbp,rsp + mov rax,[rbp+8] + mov rcx,[rbp+12] +.label rol rax,1 ; [4] [8] + loop .label ; [9] [12] + mov rsp,rbp + pop rbp + ret + +; prototype: void greet(void); +greet push rbx ; we'll use RBX for GOT, so save it + mov rbx,[integer wrt ..gotpcrel wrt rip] + mov rax,[rbx] ; [14] + inc rax + mov rbx,[_GLOBAL_OFFSET_TABLE_ wrt ..gotpcrel wrt rip] + mov [rbx+localint wrt ..got],eax ; [14] + mov rax,[rbx+commvar wrt ..got] + push qword [rax] + mov rax,[rbx+localptr wrt ..got] ; [13] + push qword [rax] + mov rax,[rbx+integer wrt ..got] ; [1] [14] + push qword [rax] + lea rax,[rbx+printfstr wrt ..got] + push rax ; [13] + call printf wrt ..plt ; [11] + add rsp,16 + pop rbx + ret + + [SECTION .data] + +; a string +asmstr db 'hello, world', 0 ; [2] +.end + +; a string for Printf +printfstr db "integer==%d, localint==%d, commvar=%d" + db 10, 0 + +; some pointers +localptr dd localint ; [5] [17] +textptr dd greet wrt ..sym ; [15] +selfptr dd selfptr wrt ..sym ; [16] + + [SECTION .bss] + +; an integer +integer resd 1 ; [3] + +; a local integer +localint resd 1 ; [6] diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elfsox32.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elfsox32.hex new file mode 100644 index 0000000000..d423b2de2c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/elfsox32.hex @@ -0,0 +1,1176 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +03 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +09 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +55 +48 +89 +e5 +48 +8b +45 +08 +48 +8b +4d +0c +48 +d1 +c0 +e2 +fb +48 +89 +ec +5d +c3 +53 +48 +8b +1d +00 +00 +00 +00 +48 +8b +03 +48 +ff +c0 +48 +8b +1d +00 +00 +00 +00 +89 +83 +00 +00 +00 +00 +48 +8b +83 +00 +00 +00 +00 +ff +30 +48 +8b +83 +00 +00 +00 +00 +ff +30 +48 +8b +83 +00 +00 +00 +00 +ff +30 +48 +8d +83 +00 +00 +00 +00 +50 +e8 +00 +00 +00 +00 +48 +83 +c4 +10 +5b +c3 +00 +1a +00 +00 +00 +09 +0f +00 +00 +fc +ff +ff +ff +27 +00 +00 +00 +09 +12 +00 +00 +fc +ff +ff +ff +2d +00 +00 +00 +03 +06 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +03 +11 +00 +00 +00 +00 +00 +00 +3d +00 +00 +00 +03 +05 +00 +00 +00 +00 +00 +00 +46 +00 +00 +00 +03 +0f +00 +00 +00 +00 +00 +00 +4f +00 +00 +00 +03 +04 +00 +00 +00 +00 +00 +00 +55 +00 +00 +00 +04 +10 +00 +00 +fc +ff +ff +ff +68 +65 +6c +6c +6f +2c +20 +77 +6f +72 +6c +64 +00 +69 +6e +74 +65 +67 +65 +72 +3d +3d +25 +64 +2c +20 +6c +6f +63 +61 +6c +69 +6e +74 +3d +3d +25 +64 +2c +20 +63 +6f +6d +6d +76 +61 +72 +3d +25 +64 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +0a +02 +00 +00 +04 +00 +00 +00 +38 +00 +00 +00 +0a +0b +00 +00 +00 +00 +00 +00 +3c +00 +00 +00 +0a +0e +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +61 +74 +61 +00 +2e +62 +73 +73 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +61 +2e +64 +61 +74 +61 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +2d +00 +6c +72 +6f +74 +61 +74 +65 +00 +67 +72 +65 +65 +74 +00 +61 +73 +6d +73 +74 +72 +00 +74 +65 +78 +74 +70 +74 +72 +00 +73 +65 +6c +66 +70 +74 +72 +00 +69 +6e +74 +65 +67 +65 +72 +00 +70 +72 +69 +6e +74 +66 +00 +63 +6f +6d +6d +76 +61 +72 +00 +5f +47 +4c +4f +42 +41 +4c +5f +4f +46 +46 +53 +45 +54 +5f +54 +41 +42 +4c +45 +5f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +04 +00 +0b +00 +00 +00 +16 +00 +00 +00 +00 +00 +00 +00 +12 +00 +04 +00 +11 +00 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +11 +00 +06 +00 +18 +00 +00 +00 +38 +00 +00 +00 +04 +00 +00 +00 +11 +00 +06 +00 +20 +00 +00 +00 +3c +00 +00 +00 +04 +00 +00 +00 +11 +00 +06 +00 +28 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +11 +00 +08 +00 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +37 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +00 +f2 +ff +3f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +38 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +64 +01 +00 +00 +42 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a8 +01 +00 +00 +55 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +30 +01 +00 +00 +02 +00 +00 +00 +0a +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +5f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +00 +00 +00 +60 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +0c +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +1d +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +01 +00 +00 +24 +00 +00 +00 +03 +00 +00 +00 +06 +00 +00 +00 +04 +00 +00 +00 +0c +00 +00 +00 +0d +00 +00 +00 +08 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/gotpcrel.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/gotpcrel.asm new file mode 100644 index 0000000000..c3d1238329 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/gotpcrel.asm @@ -0,0 +1,6 @@ +var: +mov rax, [var wrt ..got] +mov rax, [var wrt ..gotpcrel] ; should be error/warning? +mov rax, [rel var wrt ..got] ; automatic promotion to GOTPCREL +mov rax, [rel var wrt ..gotpcrel] + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/gotpcrel.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/gotpcrel.hex new file mode 100644 index 0000000000..695cf7d648 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/gotpcrel.hex @@ -0,0 +1,496 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +06 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +8b +05 +00 +00 +00 +00 +48 +8b +05 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +03 +02 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +09 +02 +00 +00 +00 +00 +00 +00 +13 +00 +00 +00 +09 +02 +00 +00 +fc +ff +ff +ff +1a +00 +00 +00 +09 +02 +00 +00 +fc +ff +ff +ff +00 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +00 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bc +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1a +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +00 +00 +00 +40 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +1e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +00 +00 +00 +30 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +0c +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/multiplefixup.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/multiplefixup.asm new file mode 100644 index 0000000000..ec253cbb97 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/multiplefixup.asm @@ -0,0 +1,8 @@ +[section .data] +foobar: + dq 42 +[section .text] +foo: + times 4 mov rax, [rel foobar] + times 4 mov rax, [foobar] + times 4 jmp foo diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/multiplefixup.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/multiplefixup.hex new file mode 100644 index 0000000000..a1874282d7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/elf/tests/x32/multiplefixup.hex @@ -0,0 +1,680 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +3e +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +07 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +8b +05 +00 +00 +00 +00 +48 +8b +05 +00 +00 +00 +00 +48 +8b +05 +00 +00 +00 +00 +48 +8b +05 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +48 +8b +04 +25 +00 +00 +00 +00 +eb +c2 +eb +c0 +eb +be +eb +bc +03 +00 +00 +00 +02 +04 +00 +00 +fc +ff +ff +ff +0a +00 +00 +00 +02 +04 +00 +00 +fc +ff +ff +ff +11 +00 +00 +00 +02 +04 +00 +00 +fc +ff +ff +ff +18 +00 +00 +00 +02 +04 +00 +00 +fc +ff +ff +ff +20 +00 +00 +00 +0a +04 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +0a +04 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +0a +04 +00 +00 +00 +00 +00 +00 +38 +00 +00 +00 +0a +04 +00 +00 +00 +00 +00 +00 +2a +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +61 +74 +61 +00 +2e +72 +65 +6c +61 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ec +00 +00 +00 +32 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +01 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +24 +01 +00 +00 +60 +00 +00 +00 +02 +00 +00 +00 +06 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +44 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +00 +00 +00 +60 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +0c +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +e4 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/CMakeLists.txt new file mode 100644 index 0000000000..cb5f4934f9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/CMakeLists.txt @@ -0,0 +1,5 @@ +YASM_ADD_MODULE(objfmt_macho + objfmts/macho/macho-objfmt.c + ) +list(APPEND YASM_MODULES objfmt_macho32) +list(APPEND YASM_MODULES objfmt_macho64) diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/Makefile.inc new file mode 100644 index 0000000000..39eff29731 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/Makefile.inc @@ -0,0 +1,7 @@ +libyasm_a_SOURCES += modules/objfmts/macho/macho-objfmt.c + +YASM_MODULES += objfmt_macho objfmt_macho32 objfmt_macho64 + +EXTRA_DIST += modules/objfmts/macho/tests/Makefile.inc + +include modules/objfmts/macho/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/macho-objfmt.c b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/macho-objfmt.c new file mode 100644 index 0000000000..0a48d9b905 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/macho-objfmt.c @@ -0,0 +1,1620 @@ +/* + * Mac OS X ABI Mach-O File Format + * + * Copyright (C) 2007 Henryk Richter, built upon xdf objfmt (C) Peter Johnson + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + */ +/* + notes: This implementation is rather basic. There are several implementation + issues to be sorted out for full compliance and error resilience. + Some examples are given below (nasm syntax). + + 1) section placement + Mach-O requires BSS sections to be placed last in object files. This + has to be done manually. + Example: + + section .text + mov rax,[qword foo] + section .data + dw 0 + section .bss + foo dw 0 + + 2) addressing issues + + 2.1) symbol relative relocation (i.e. mov eax,[foo wrt bar]) + Not implemented yet. + + 2.2) data referencing in 64 bit mode + While ELF allows 32 bit absolute relocations in 64 bit mode, Mach-O + does not. Therefore code like + lea rbx,[_foo] ;48 8d 1c 25 00 00 00 00 + mov rcx,[_bar] ;48 8b 0c 25 00 00 00 00 + with a 32 bit address field cannot be relocated into an address >= 0x100000000 (OSX actually + uses that). + + Actually, the only register where a 64 bit displacement is allowed in x86-64, is rax + as in the example 1). + + A plausible workaround is either classic PIC (like in C), which is in turn + not implemented in this object format. The recommended was is PC relative + code (called RIP-relative in x86-64). So instead of the lines above, just write: + lea rbx,[_foo wrt rip] + mov rcx,[_bar wrt rip] + + 2.3) section/data alignment + Normally, you specify sections with a specific alignment + and get your data layed out as desired. Unfortunately, the + linker in MacOS X seems to ignore the section alignment requests. + The workaround is an explicit alignment at the end of the text section. + + section .text + movdqa xmm0,[_foo wrt rip] + + align 16 + section .data align=16 + _foo dw 32,32,32,32,32,32,32,32 + + FIXME: perform that operation implicitly! + + 2.4) cross section symbol differences unsupported in current implementation + [extern foo] + [extern bar] + section .data + dq bar-foo + + Will currently produce an error though the necessary means are provided + by the Mach-O specification. + +*/ + +#include + +#include + +/* MACH-O DEFINES */ +/* Mach-O in-file header structure sizes (32 BIT, see below for 64 bit defs) */ +#define MACHO_HEADER_SIZE 28 +#define MACHO_SEGCMD_SIZE 56 +#define MACHO_SECTCMD_SIZE 68 +#define MACHO_SYMCMD_SIZE 24 +#define MACHO_NLIST_SIZE 12 +#define MACHO_RELINFO_SIZE 8 + +/* 64 bit sizes */ +#define MACHO_HEADER64_SIZE 32 +#define MACHO_SEGCMD64_SIZE 72 +#define MACHO_SECTCMD64_SIZE 80 +#define MACHO_NLIST64_SIZE 16 +#define MACHO_RELINFO64_SIZE 8 + + +/* Mach-O file header values */ +#define MH_MAGIC 0xfeedface +#define MH_MAGIC_64 0xfeedfacf + +/* CPU machine type */ +#define CPU_TYPE_I386 7 /* x86 platform */ +#define CPU_TYPE_X86_64 (CPU_TYPE_I386|CPU_ARCH_ABI64) +#define CPU_ARCH_ABI64 0x01000000 /* 64 bit ABI */ + +/* CPU machine subtype, e.g. processor */ +#define CPU_SUBTYPE_I386_ALL 3 /* all-x86 compatible */ +#define CPU_SUBTYPE_X86_64_ALL CPU_SUBTYPE_I386_ALL +#define CPU_SUBTYPE_386 3 +#define CPU_SUBTYPE_486 4 +#define CPU_SUBTYPE_486SX (4 + 128) +#define CPU_SUBTYPE_586 5 +#define CPU_SUBTYPE_INTEL(f, m) ((f) + ((m) << 4)) +#define CPU_SUBTYPE_PENT CPU_SUBTYPE_INTEL(5, 0) +#define CPU_SUBTYPE_PENTPRO CPU_SUBTYPE_INTEL(6, 1) +#define CPU_SUBTYPE_PENTII_M3 CPU_SUBTYPE_INTEL(6, 3) +#define CPU_SUBTYPE_PENTII_M5 CPU_SUBTYPE_INTEL(6, 5) +#define CPU_SUBTYPE_PENTIUM_4 CPU_SUBTYPE_INTEL(10, 0) + +#define CPU_SUBTYPE_INTEL_FAMILY(x) ((x) & 15) +#define CPU_SUBTYPE_INTEL_FAMILY_MAX 15 + +#define CPU_SUBTYPE_INTEL_MODEL(x) ((x) >> 4) +#define CPU_SUBTYPE_INTEL_MODEL_ALL 0 + +#define MH_OBJECT 0x1 /* object file */ + +#define LC_SEGMENT 0x1 /* segment load command */ +#define LC_SYMTAB 0x2 /* symbol table load command */ +#define LC_SEGMENT_64 0x19 /* segment load command */ + + +#define VM_PROT_NONE 0x00 +#define VM_PROT_READ 0x01 +#define VM_PROT_WRITE 0x02 +#define VM_PROT_EXECUTE 0x04 + +#define VM_PROT_DEFAULT (VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE) +#define VM_PROT_ALL (VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE) + +#define SECTION_TYPE 0x000000ff /* section type mask */ +#define SECTION_ATTRIBUTES 0xffffff00UL/* section attributes mask */ + +#define S_REGULAR 0x0 /* standard section */ +#define S_ZEROFILL 0x1 /* zerofill, in-memory only */ +#define S_CSTRING_LITERALS 0x2 /* literal C strings */ +#define S_4BYTE_LITERALS 0x3 /* only 4-byte literals */ +#define S_8BYTE_LITERALS 0x4 /* only 8-byte literals */ +#define S_LITERAL_POINTERS 0x5 /* only pointers to literals */ +#define S_NON_LAZY_SYMBOL_POINTERS 0x6 /* only non-lazy symbol pointers */ +#define S_LAZY_SYMBOL_POINTERS 0x7 /* only lazy symbol pointers */ +#define S_SYMBOL_STUBS 0x8 /* only symbol stubs; byte size of + * stub in the reserved2 field */ +#define S_MOD_INIT_FUNC_POINTERS 0x9 /* only function pointers for init */ +#define S_MOD_TERM_FUNC_POINTERS 0xa /* only function pointers for term */ +#define S_COALESCED 0xb /* symbols that are to be coalesced */ +#define S_GB_ZEROFILL 0xc /* >4GB zero fill on demand section */ +#define S_INTERPOSING 0xd /* only pairs of function pointers for + * interposing */ +#define S_16BYTE_LITERALS 0xe /* only 16 byte literals */ + +#define S_ATTR_DEBUG 0x02000000 /* a debug section */ +#define SECTION_ATTRIBUTES_SYS 0x00ffff00 /* system setable attributes */ +#define S_ATTR_SOME_INSTRUCTIONS 0x00000400 /* section contains some + * machine instructions */ +#define S_ATTR_EXT_RELOC 0x00000200 /* section has external + * relocation entries */ +#define S_ATTR_LOC_RELOC 0x00000100 /* section has local + * relocation entries */ + +#define SECTION_ATTRIBUTES_USR 0xff000000UL /* User setable attributes */ +#define S_ATTR_PURE_INSTRUCTIONS 0x80000000UL /* only true machine insns */ +#define S_ATTR_NO_TOC 0x40000000UL /* coalesced symbols that are + * not to be in a ranlib table + * of contents */ +#define S_ATTR_STRIP_STATIC_SYMS 0x20000000UL /* ok to strip static symbols + * in this section in files + * with the MH_DYLDLINK flag */ +#define S_ATTR_NO_DEAD_STRIP 0x10000000UL /* no dead stripping */ +#define S_ATTR_LIVE_SUPPORT 0x08000000UL /* blocks are live if they + * reference live blocks */ +#define S_ATTR_SELF_MODIFYING_CODE 0x04000000UL /* Used with i386 code stubs + * written on by dyld */ + +/* macho references symbols in different ways whether they are linked at + * runtime (LAZY, read library functions) or at link time (NON_LAZY, mostly + * data) + * + * TODO: proper support for dynamically linkable modules would require the + * __import sections as well as the dsymtab command + */ +#define REFERENCE_FLAG_UNDEFINED_NON_LAZY 0x0 +#define REFERENCE_FLAG_UNDEFINED_LAZY 0x1 + +#define align(x, y) \ + (((x) + (y) - 1) & ~((y) - 1)) /* align x to multiple of y */ + +#define align32(x) \ + align(x, 4) /* align x to 32 bit boundary */ + +#define macho_MAGIC 0x87654322 + +/* Symbol table type field bit masks */ +#define N_STAB 0xe0 /* mask indicating stab entry */ +#define N_PEXT 0x10 /* private external bit */ +#define N_TYPE 0x0e /* mask for all the type bits */ +#define N_EXT 0x01 /* external (global) bit */ + +/* Symbol table type field values */ +#define N_UNDF 0x00 /* undefined */ +#define N_ABS 0x02 /* absolute address */ +#define N_SECT 0x0e /* symbol is defined in a section */ + +#define NO_SECT 0 /* no section for symbol in nlist */ + +#define REGULAR_OUTBUF_SIZE 1024 + + +typedef struct macho_reloc { + yasm_reloc reloc; + int pcrel; + int length; + int ext; + enum reloc_type_x86_64 { + /* x86 relocations */ + GENERIC_RELOC_VANILLA = 0, /* generic relocation */ + GENERIC_RELOC_PAIR = 1, /* Only follows a GENERIC_RELOC_SECTDIFF */ + GENERIC_RELOC_SECTDIFF = 2, + GENERIC_RELOC_PB_LA_PTR = 3, /* prebound lazy pointer */ + GENERIC_RELOC_LOCAL_SECTDIFF = 4, + + /* x86-64 relocations */ + X86_64_RELOC_UNSIGNED = 0, /* for absolute addresses */ + X86_64_RELOC_SIGNED = 1, /* for signed 32-bit displacement */ + X86_64_RELOC_BRANCH = 2, /* a CALL/JMP insn with 32-bit disp */ + X86_64_RELOC_GOT_LOAD = 3, /* a MOVQ load of a GOT entry */ + X86_64_RELOC_GOT = 4, /* other GOT references */ + X86_64_RELOC_SUBTRACTOR = 5, /* must be followed by a X86_64_RELOC_UNSIGNED */ + X86_64_RELOC_SIGNED_1 = 6, /* signed 32-bit disp, -1 addend */ + X86_64_RELOC_SIGNED_2 = 7, /* signed 32-bit disp, -2 addend */ + X86_64_RELOC_SIGNED_4 = 8 /* signed 32-bit disp, -4 addend */ + } type; +} macho_reloc; + +typedef struct macho_section_data { + /*@dependent@*/ yasm_symrec *sym; /* symbol created for this section */ + long scnum; /* section number (0=first section) */ + /*@only@*/ char *segname; /* segment name in file */ + /*@only@*/ char *sectname; /* section name in file */ + unsigned long flags; /* S_* flags */ + unsigned long size; /* size of raw data (section data) in bytes */ + unsigned long offset; /* offset in raw data within file in bytes */ + unsigned long vmoff; /* memory offset */ + unsigned long nreloc; /* number of relocation entries */ + unsigned int extreloc; /* external relocations present (0/1) */ +} macho_section_data; + + +typedef struct macho_symrec_data { + unsigned long index; /* index in output order */ + yasm_intnum *value; /* valid after writing symtable to file */ + unsigned long length; /* length + 1 (plus auto underscore) */ +} macho_symrec_data; + + +typedef struct yasm_objfmt_macho { + yasm_objfmt_base objfmt; /* base structure */ + + long parse_scnum; /* sect numbering in parser */ + int bits; /* 32 / 64 */ + + yasm_symrec *gotpcrel_sym; /* ..gotpcrel */ +} yasm_objfmt_macho; + + +typedef struct macho_objfmt_output_info { + yasm_object *object; + yasm_objfmt_macho *objfmt_macho; + yasm_errwarns *errwarns; + /*@dependent@ */ FILE *f; + /*@only@ */ unsigned char *buf; + yasm_section *sect; + /*@dependent@ */ macho_section_data *msd; + + unsigned int is_64; /* write object in 64 bit mode */ + + /* vmsize and filesize available after traversing section count routine */ + unsigned long vmsize; /* raw size of all sections (including BSS) */ + unsigned long filesize; /* size of sections in file (excluding BSS) */ + unsigned long offset; /* offset within file */ + + /* forward offset tracking */ + unsigned long rel_base; /* first relocation in file */ + unsigned long s_reloff; /* in-file offset to relocations */ + + unsigned long indx; /* current symbol size in bytes (name length+1) */ + unsigned long symindex; /* current symbol index in output order */ + int all_syms; /* outputting all symbols? */ + unsigned long strlength; /* length of all strings */ +} macho_objfmt_output_info; + + +static void macho_section_data_destroy(/*@only@*/ void *d); +static void macho_section_data_print(void *data, FILE *f, int indent_level); + +static const yasm_assoc_data_callback macho_section_data_cb = { + macho_section_data_destroy, + macho_section_data_print +}; + +static void macho_symrec_data_destroy(/*@only@*/ void *d); +static void macho_symrec_data_print(void *data, FILE *f, int indent_level); + +static const yasm_assoc_data_callback macho_symrec_data_cb = { + macho_symrec_data_destroy, + macho_symrec_data_print +}; + +yasm_objfmt_module yasm_macho_LTX_objfmt; +yasm_objfmt_module yasm_macho32_LTX_objfmt; +yasm_objfmt_module yasm_macho64_LTX_objfmt; + +static yasm_objfmt * +macho_objfmt_create_common(yasm_object *object, yasm_objfmt_module *module, + int bits_pref) +{ + yasm_objfmt_macho *objfmt_macho = yasm_xmalloc(sizeof(yasm_objfmt_macho)); + + objfmt_macho->objfmt.module = module; + + /* Only support x86 arch for now */ + if (yasm__strcasecmp(yasm_arch_keyword(object->arch), "x86") != 0) { + yasm_xfree(objfmt_macho); + return NULL; + } + + /* Support x86 and amd64 machines of x86 arch */ + if (yasm__strcasecmp(yasm_arch_get_machine(object->arch), "x86") == 0 && + (bits_pref == 0 || bits_pref == 32)) { + objfmt_macho->bits = 32; + objfmt_macho->gotpcrel_sym = NULL; + } else if (yasm__strcasecmp(yasm_arch_get_machine(object->arch), + "amd64") == 0 && + (bits_pref == 0 || bits_pref == 64)) { + objfmt_macho->bits = 64; + /* FIXME: misuse of NULL bytecode */ + objfmt_macho->gotpcrel_sym = + yasm_symtab_define_label(object->symtab, "..gotpcrel", NULL, 0, 0); + } else { + yasm_xfree(objfmt_macho); + return NULL; + } + + objfmt_macho->parse_scnum = 0; /* section numbering starts at 0 */ + return (yasm_objfmt *)objfmt_macho; +} + +static yasm_objfmt * +macho_objfmt_create(yasm_object *object) +{ + yasm_objfmt *objfmt; + yasm_objfmt_macho *objfmt_macho; + + objfmt = macho_objfmt_create_common(object, &yasm_macho_LTX_objfmt, 0); + if (objfmt) { + objfmt_macho = (yasm_objfmt_macho *)objfmt; + /* Figure out which bitness of object format to use */ + if (objfmt_macho->bits == 32) + objfmt_macho->objfmt.module = &yasm_macho32_LTX_objfmt; + else if (objfmt_macho->bits == 64) + objfmt_macho->objfmt.module = &yasm_macho64_LTX_objfmt; + } + return objfmt; +} + +static yasm_objfmt * +macho32_objfmt_create(yasm_object *object) +{ + return macho_objfmt_create_common(object, &yasm_macho32_LTX_objfmt, 32); +} + +static yasm_objfmt * +macho64_objfmt_create(yasm_object *object) +{ + return macho_objfmt_create_common(object, &yasm_macho64_LTX_objfmt, 64); +} + +static int +macho_objfmt_output_value(yasm_value *value, unsigned char *buf, + unsigned int destsize, unsigned long offset, + yasm_bytecode *bc, int warn, /*@null@*/ void *d) +{ + /*@null@*/ macho_objfmt_output_info *info = (macho_objfmt_output_info *)d; + yasm_objfmt_macho *objfmt_macho; + /*@dependent@*/ /*@null@*/ yasm_intnum *intn; + unsigned long intn_minus = 0, intn_plus = 0; + int retval; + unsigned int valsize = value->size; + macho_reloc *reloc = NULL; + + assert(info != NULL); + objfmt_macho = info->objfmt_macho; + + if (value->abs) + value->abs = yasm_expr_simplify(value->abs, 1); + + /* Try to output constant and PC-relative section-local first. + * Note this does NOT output any value with a SEG, WRT, external, + * cross-section, or non-PC-relative reference (those are handled below). + */ + switch (yasm_value_output_basic(value, buf, destsize, bc, warn, + info->object->arch)) { + case -1: + return 1; + case 0: + break; + default: + return 0; + } + + if (value->section_rel) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("macho: relocation too complex for current implementation")); + return 1; + } + + if (value->rel) { + yasm_sym_vis vis = yasm_symrec_get_visibility(value->rel); + + reloc = yasm_xcalloc(sizeof(macho_reloc), 1); + reloc->reloc.addr = yasm_intnum_create_uint(bc->offset + offset); + reloc->reloc.sym = value->rel; + switch (valsize) { + case 64: + reloc->length = 3; + break; + case 32: + reloc->length = 2; + break; + case 16: + reloc->length = 1; + break; + case 8: + reloc->length = 0; + break; + default: + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("macho: relocation size unsupported")); + yasm_xfree(reloc); + return 1; + } + reloc->pcrel = 0; + reloc->ext = 0; + reloc->type = GENERIC_RELOC_VANILLA; + /* R_ABS */ + + if (value->rshift > 0) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("macho: shifted relocations not supported")); + yasm_xfree(reloc); + return 1; + } + + if (value->seg_of) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("macho: SEG not supported")); + yasm_xfree(reloc); + return 1; + } + + if (value->curpos_rel && objfmt_macho->gotpcrel_sym && + value->wrt == objfmt_macho->gotpcrel_sym) { + reloc->type = X86_64_RELOC_GOT; + value->wrt = NULL; + } else if (value->wrt) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("macho: invalid WRT")); + yasm_xfree(reloc); + return 1; + } + + if (value->curpos_rel) { + reloc->pcrel = 1; + if (!info->is_64) { + /* Adjust to start of section, so subtract out the bytecode + * offset. + */ + intn_minus = bc->offset; + } else { + /* Add in the offset plus value size to end up with 0. */ + intn_plus = offset+destsize; + if (reloc->type == X86_64_RELOC_GOT) { + /* XXX: This is a hack */ + if (offset >= 2 && buf[-2] == 0x8B) + reloc->type = X86_64_RELOC_GOT_LOAD; + } else if (value->jump_target) + reloc->type = X86_64_RELOC_BRANCH; + else + reloc->type = X86_64_RELOC_SIGNED; + } + } else if (info->is_64) { + if (valsize == 32) { + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("macho: sorry, cannot apply 32 bit absolute relocations in 64 bit mode, consider \"[_symbol wrt rip]\" for mem access, \"qword\" and \"dq _foo\" for pointers.")); + return 1; + } + reloc->type = X86_64_RELOC_UNSIGNED; + } + + /* It seems that x86-64 objects need to have all extern relocs? */ + if (info->is_64) + reloc->ext = 1; + + if ((vis & YASM_SYM_EXTERN) || (vis & YASM_SYM_COMMON)) { + reloc->ext = 1; + info->msd->extreloc = 1; /* section has external relocations */ + } else if (!info->is_64) { + /*@dependent@*/ /*@null@*/ yasm_bytecode *sym_precbc; + + /* Local symbols need valued to their actual address */ + if (yasm_symrec_get_label(value->rel, &sym_precbc)) { + yasm_section *sym_sect = yasm_bc_get_section(sym_precbc); + /*@null@*/ macho_section_data *msd; + msd = yasm_section_get_data(sym_sect, &macho_section_data_cb); + assert(msd != NULL); + intn_plus += msd->vmoff + yasm_bc_next_offset(sym_precbc); + } + } + + info->msd->nreloc++; + /*printf("reloc %s type %d ",yasm_symrec_get_name(reloc->reloc.sym),reloc->type);*/ + yasm_section_add_reloc(info->sect, (yasm_reloc *)reloc, yasm_xfree); + } + + if (intn_minus <= intn_plus) + intn = yasm_intnum_create_uint(intn_plus-intn_minus); + else { + intn = yasm_intnum_create_uint(intn_minus-intn_plus); + yasm_intnum_calc(intn, YASM_EXPR_NEG, NULL); + } + + if (value->abs) { + yasm_intnum *intn2 = yasm_expr_get_intnum(&value->abs, 0); + + if (!intn2) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("macho: relocation too complex")); + yasm_intnum_destroy(intn); + return 1; + } + yasm_intnum_calc(intn, YASM_EXPR_ADD, intn2); + } + + retval = yasm_arch_intnum_tobytes(info->object->arch, intn, buf, destsize, + valsize, 0, bc, warn); + /*printf("val %ld\n",yasm_intnum_get_int(intn));*/ + yasm_intnum_destroy(intn); + return retval; +} + +static int +macho_objfmt_output_bytecode(yasm_bytecode *bc, /*@null@*/ void *d) +{ + /*@null@*/ macho_objfmt_output_info *info = (macho_objfmt_output_info *)d; + /*@null@*/ /*@only@*/ unsigned char *bigbuf; + unsigned long size = REGULAR_OUTBUF_SIZE; + int gap; + + assert(info != NULL); + + bigbuf = yasm_bc_tobytes(bc, info->buf, &size, &gap, info, + macho_objfmt_output_value, NULL); + + /* Don't bother doing anything else if size ended up being 0. */ + if (size == 0) { + if (bigbuf) + yasm_xfree(bigbuf); + return 0; + } + + /* Warn that gaps are converted to 0 and write out the 0's. */ + if (gap) { + unsigned long left; + + yasm_warn_set(YASM_WARN_UNINIT_CONTENTS, + N_("uninitialized space: zeroing")); + /* Write out in chunks */ + memset(info->buf, 0, REGULAR_OUTBUF_SIZE); + left = size; + while (left > REGULAR_OUTBUF_SIZE) { + fwrite(info->buf, REGULAR_OUTBUF_SIZE, 1, info->f); + left -= REGULAR_OUTBUF_SIZE; + } + fwrite(info->buf, left, 1, info->f); + } else { + /* Output buf (or bigbuf if non-NULL) to file */ + fwrite(bigbuf ? bigbuf : info->buf, (size_t) size, 1, info->f); + } + + /* If bigbuf was allocated, free it */ + if (bigbuf) + yasm_xfree(bigbuf); + + return 0; +} + +static int +macho_objfmt_output_section(yasm_section *sect, /*@null@ */ void *d) +{ + /*@null@ */ macho_objfmt_output_info *info = + (macho_objfmt_output_info *) d; + /*@dependent@ *//*@null@ */ macho_section_data *msd; + + assert(info != NULL); + msd = yasm_section_get_data(sect, &macho_section_data_cb); + assert(msd != NULL); + + if (!(msd->flags & S_ZEROFILL)) { + /* Output non-BSS sections */ + info->sect = sect; + info->msd = msd; + yasm_section_bcs_traverse(sect, info->errwarns, info, + macho_objfmt_output_bytecode); + } + return 0; +} + +static int +macho_objfmt_output_relocs(yasm_section *sect, /*@null@*/ void *d) +{ + /*@null@*/ macho_objfmt_output_info *info = (macho_objfmt_output_info *)d; + /*@dependent@*/ /*@null@*/ macho_section_data *msd; + macho_reloc *reloc; + + reloc = (macho_reloc *)yasm_section_relocs_first(sect); + while (reloc) { + unsigned char *localbuf = info->buf; + /*@null@*/ macho_symrec_data *xsymd; + unsigned long symnum; + + xsymd = yasm_symrec_get_data(reloc->reloc.sym, &macho_symrec_data_cb); + yasm_intnum_get_sized(reloc->reloc.addr, localbuf, 4, 32, 0, 0, 0); + localbuf += 4; /* address of relocation */ + + if (reloc->ext) + symnum = xsymd->index; + else { + /* find section where the symbol relates to */ + /*@dependent@*/ /*@null@*/ yasm_section *dsect; + /*@dependent@*/ /*@null@*/ yasm_bytecode *precbc; + symnum = 0; /* default to absolute */ + if (yasm_symrec_get_label(reloc->reloc.sym, &precbc) && + (dsect = yasm_bc_get_section(precbc)) && + (msd = yasm_section_get_data(dsect, &macho_section_data_cb))) + symnum = msd->scnum+1; + } + YASM_WRITE_32_L(localbuf, + (symnum & 0x00ffffff) | + (((unsigned long)reloc->pcrel & 1) << 24) | + (((unsigned long)reloc->length & 3) << 25) | + (((unsigned long)reloc->ext & 1) << 27) | + (((unsigned long)reloc->type & 0xf) << 28)); + fwrite(info->buf, 8, 1, info->f); + reloc = (macho_reloc *)yasm_section_reloc_next((yasm_reloc *)reloc); + } + + return 0; +} + +static int +exp2_to_bits(unsigned long val) +{ + int ret = 0; + + while (val) { + val >>= 1; + ret++; + } + ret = (ret > 0) ? ret - 1 : 0; + + return ret; +} + +static int +macho_objfmt_is_section_label(yasm_symrec *sym) +{ + /*@dependent@*/ /*@null@*/ yasm_section *sect; + /*@dependent@*/ /*@null@*/ yasm_bytecode *precbc; + + /* Look at symrec for value/scnum/etc. */ + if (yasm_symrec_get_label(sym, &precbc)) { + if (precbc) + sect = yasm_bc_get_section(precbc); + else + sect = NULL; + /* it's a label: get value and offset. + * If there is not a section, leave as debugging symbol. + */ + if (sect) { + /*@dependent@*/ /*@null@*/ macho_section_data *msd; + + msd = yasm_section_get_data(sect, &macho_section_data_cb); + if (msd) { + if (msd->sym == sym) + return 1; /* don't store section names */ + } + } + } + return 0; +} + +static int +macho_objfmt_output_secthead(yasm_section *sect, /*@null@*/ void *d) +{ + /*@null@*/ macho_objfmt_output_info *info = (macho_objfmt_output_info *)d; + /*@dependent@*/ /*@null@*/ macho_section_data *msd; + unsigned char *localbuf; + + assert(info != NULL); + msd = yasm_section_get_data(sect, &macho_section_data_cb); + assert(msd != NULL); + + localbuf = info->buf; + + memset(localbuf, 0, 16); + strncpy((char *)localbuf, msd->sectname, 16); + localbuf += 16; + memset(localbuf, 0, 16); + strncpy((char *)localbuf, msd->segname, 16); + localbuf += 16; + /* section address, size depend on 32/64 bit mode */ + YASM_WRITE_32_L(localbuf, msd->vmoff); /* address in memory */ + if (info->is_64) + YASM_WRITE_32_L(localbuf, 0); /* 64-bit mode: upper 32 bits = 0 */ + YASM_WRITE_32_L(localbuf, msd->size); /* size in memory */ + if (info->is_64) + YASM_WRITE_32_L(localbuf, 0); /* 64-bit mode: upper 32 bits = 0 */ + + /* offset,align,reloff,nreloc,flags,reserved1,reserved2 are 32 bit */ + if ((msd->flags & SECTION_TYPE) != S_ZEROFILL) { + YASM_WRITE_32_L(localbuf, msd->offset); + YASM_WRITE_32_L(localbuf, exp2_to_bits(yasm_section_get_align(sect))); + if (msd->nreloc) { + msd->flags |= S_ATTR_LOC_RELOC; + if (msd->extreloc) + msd->flags |= S_ATTR_EXT_RELOC; + YASM_WRITE_32_L(localbuf, + align32((long)(info->rel_base + info->s_reloff))); + YASM_WRITE_32_L(localbuf, msd->nreloc); /* nreloc */ + } else { + YASM_WRITE_32_L(localbuf, 0); + YASM_WRITE_32_L(localbuf, 0); + } + + info->s_reloff += msd->nreloc * MACHO_RELINFO_SIZE; /* nreloc */ + } else { + YASM_WRITE_32_L(localbuf, 0); /* these are zero in BSS */ + YASM_WRITE_32_L(localbuf, 0); + YASM_WRITE_32_L(localbuf, 0); + YASM_WRITE_32_L(localbuf, 0); + } + + YASM_WRITE_32_L(localbuf, msd->flags); /* flags */ + YASM_WRITE_32_L(localbuf, 0); /* reserved 1 */ + YASM_WRITE_32_L(localbuf, 0); /* reserved 2 */ + + if (info->is_64) + fwrite(info->buf, MACHO_SECTCMD64_SIZE, 1, info->f); + else + fwrite(info->buf, MACHO_SECTCMD_SIZE, 1, info->f); + + return 0; +} + + +static int +macho_objfmt_count_sym(yasm_symrec *sym, /*@null@*/ void *d) +{ + /*@null@*/ macho_objfmt_output_info *info = (macho_objfmt_output_info *)d; + /*@only@*/ char *name; + yasm_sym_vis vis = yasm_symrec_get_visibility(sym); + + assert(info != NULL); + if (info->all_syms || + vis & (YASM_SYM_GLOBAL | YASM_SYM_COMMON | YASM_SYM_EXTERN)) { + if (0 == macho_objfmt_is_section_label(sym)) { + /* Save index in symrec data */ + macho_symrec_data *sym_data = + yasm_symrec_get_data(sym, &macho_symrec_data_cb); + if (!sym_data) { + sym_data = yasm_xcalloc(sizeof(macho_symrec_data), 1); + yasm_symrec_add_data(sym, &macho_symrec_data_cb, sym_data); + } + sym_data->index = info->symindex; + info->symindex++; + + name = yasm_symrec_get_global_name(sym, info->object); + /*printf("%s\n",name); */ + /* name length + delimiter */ + sym_data->length = (unsigned long)strlen(name) + 1; + info->strlength += sym_data->length; + info->indx++; + yasm_xfree(name); + } + } + return 0; +} + + +static int +macho_objfmt_output_symtable(yasm_symrec *sym, /*@null@*/ void *d) +{ + /*@null@*/ macho_objfmt_output_info *info = (macho_objfmt_output_info *)d; + yasm_sym_vis vis = yasm_symrec_get_visibility(sym); + + assert(info != NULL); + + if (info->all_syms || + vis & (YASM_SYM_GLOBAL | YASM_SYM_COMMON | YASM_SYM_EXTERN)) { + const yasm_expr *equ_val; + const yasm_intnum *intn; + unsigned long value = 0; + long scnum = -3; /* -3 = debugging symbol */ + /*@dependent@*/ /*@null@*/ yasm_section *sect; + /*@dependent@*/ /*@null@*/ yasm_bytecode *precbc; + unsigned char *localbuf; + yasm_intnum *val; + unsigned int long_int_bytes = (info->is_64) ? 8 : 4; + unsigned int n_type = 0, n_sect = 0, n_desc = 0; + macho_symrec_data *symd; + + val = yasm_intnum_create_uint(0); + + symd = yasm_symrec_get_data(sym, &macho_symrec_data_cb); + + /* Look at symrec for value/scnum/etc. */ + if (yasm_symrec_get_label(sym, &precbc)) { + if (precbc) + sect = yasm_bc_get_section(precbc); + else + sect = NULL; + /* it's a label: get value and offset. + * If there is not a section, leave as debugging symbol. + */ + if (sect) { + /*@dependent@*/ /*@null@*/ macho_section_data *msd; + + msd = yasm_section_get_data(sect, &macho_section_data_cb); + if (msd) { + if (msd->sym == sym) { + /* don't store section names */ + yasm_intnum_destroy(val); + return 0; + } + scnum = msd->scnum; + n_type = N_SECT; + } else + yasm_internal_error(N_("didn't understand section")); + if (precbc) + value += yasm_bc_next_offset(precbc); + /* all values are subject to correction: base offset is first + * raw section, therefore add section offset + */ + if (msd) + value += msd->vmoff; + yasm_intnum_set_uint(val, value); + /*printf("%s offset %lx\n",name,value);*/ + } + } else if ((equ_val = yasm_symrec_get_equ(sym))) { + yasm_expr *equ_val_copy = yasm_expr_copy(equ_val); + + intn = yasm_expr_get_intnum(&equ_val_copy, 1); + if (!intn) { + if (vis & YASM_SYM_GLOBAL) { + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("global EQU value not an integer expression")); + yasm_errwarn_propagate(info->errwarns, equ_val->line); + } + } else + value = yasm_intnum_get_uint(intn); + yasm_expr_destroy(equ_val_copy); + yasm_intnum_set_uint(val, value); + n_type = N_ABS; + scnum = -2; /* -2 = absolute symbol */ + } + + if (vis & YASM_SYM_EXTERN) { + n_type = N_EXT; + scnum = -1; + /*n_desc = REFERENCE_FLAG_UNDEFINED_LAZY; * FIXME: see definition of REFERENCE_FLAG_* above */ + } else if (vis & YASM_SYM_COMMON) { + yasm_expr **csize = yasm_symrec_get_common_size(sym); + n_type = N_UNDF | N_EXT; + if (csize) { + intn = yasm_expr_get_intnum(csize, 1); + if (!intn) { + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("COMMON data size not an integer expression")); + yasm_errwarn_propagate(info->errwarns, (*csize)->line); + } else + yasm_intnum_set_uint(val, yasm_intnum_get_uint(intn)); + } + /*printf("common symbol %s val %lu\n", name, yasm_intnum_get_uint(val));*/ + } else if (vis & YASM_SYM_GLOBAL) { + yasm_valparamhead *valparams = + yasm_symrec_get_objext_valparams(sym); + + struct macho_global_data { + unsigned long flag; /* N_PEXT */ + } data; + + data.flag = 0; + + if (valparams) { + static const yasm_dir_help help[] = { + { "private_extern", 0, yasm_dir_helper_flag_set, + offsetof(struct macho_global_data, flag), N_PEXT }, + }; + yasm_dir_helper(sym, yasm_vps_first(valparams), + yasm_symrec_get_decl_line(sym), help, NELEMS(help), + &data, yasm_dir_helper_valparam_warn); + } + + n_type |= N_EXT | data.flag; + } + + localbuf = info->buf; + YASM_WRITE_32_L(localbuf, info->indx); /* offset in string table */ + YASM_WRITE_8(localbuf, n_type); /* type of symbol entry */ + n_sect = (scnum >= 0) ? scnum + 1 : NO_SECT; + YASM_WRITE_8(localbuf, n_sect); /* referring section where symbol is found */ + YASM_WRITE_16_L(localbuf, n_desc); /* extra description */ + yasm_intnum_get_sized(val, localbuf, long_int_bytes, ((long_int_bytes) << 3), 0, 0, 0); /* value/argument */ + localbuf += long_int_bytes; + if (symd) + symd->value = val; + else + yasm_intnum_destroy(val); + + info->indx += symd->length; + + fwrite(info->buf, 8 + long_int_bytes, 1, info->f); + } + + return 0; +} + + +static int +macho_objfmt_output_str(yasm_symrec *sym, /*@null@*/ void *d) +{ + /*@null@*/ macho_objfmt_output_info *info = (macho_objfmt_output_info *)d; + yasm_sym_vis vis = yasm_symrec_get_visibility(sym); + + assert(info != NULL); + + if (info->all_syms || + vis & (YASM_SYM_GLOBAL | YASM_SYM_COMMON | YASM_SYM_EXTERN)) { + if (0 == macho_objfmt_is_section_label(sym)) { + /*@only@*/ char *name = + yasm_symrec_get_global_name(sym, info->object); + size_t len = strlen(name); + + fwrite(name, len + 1, 1, info->f); + yasm_xfree(name); + } + } + return 0; +} + +static int +macho_objfmt_calc_sectsize(yasm_section *sect, /*@null@ */ void *d) +{ + /*@null@ */ macho_objfmt_output_info *info = + (macho_objfmt_output_info *) d; + /*@dependent@ *//*@null@ */ macho_section_data *msd; + unsigned long align; + + assert(info != NULL); + msd = yasm_section_get_data(sect, &macho_section_data_cb); + assert(msd != NULL); + + msd->size = yasm_bc_next_offset(yasm_section_bcs_last(sect)); + if (!(msd->flags & S_ZEROFILL)) { + msd->offset = info->offset; + info->offset += msd->size; + info->filesize += msd->size; + } + + /* accumulate size in memory */ + msd->vmoff = info->vmsize; + info->vmsize += msd->size; + + /* align both start and end of section */ + align = yasm_section_get_align(sect); + if (align != 0) { + unsigned long delta = msd->vmoff % align; + if (delta > 0) { + msd->vmoff += align - delta; + info->vmsize += align - delta; + } + } + + return 0; +} + +/* write object */ +static void +macho_objfmt_output(yasm_object *object, FILE *f, int all_syms, + yasm_errwarns *errwarns) +{ + yasm_objfmt_macho *objfmt_macho = (yasm_objfmt_macho *)object->objfmt; + macho_objfmt_output_info info; + unsigned char *localbuf; + unsigned long symtab_count = 0; + unsigned long headsize; + unsigned int macho_segcmdsize, macho_sectcmdsize, macho_nlistsize; + unsigned int macho_segcmd; + unsigned int head_ncmds, head_sizeofcmds; + unsigned long fileoffset, fileoff_sections; + yasm_intnum *val; + unsigned long long_int_bytes; + const char pad_data[3] = "\0\0\0"; + + info.object = object; + info.objfmt_macho = objfmt_macho; + info.errwarns = errwarns; + info.f = f; + info.buf = yasm_xmalloc(REGULAR_OUTBUF_SIZE); + + if (objfmt_macho->parse_scnum == 0) { + yasm_internal_error(N_("no sections defined")); + /*@notreached@*/ + return; + } + + val = yasm_intnum_create_uint(0); + + /* + * MACH-O Header, Seg CMD, Sect CMDs, Sym Tab, Reloc Data + */ + info.is_64 = (objfmt_macho->bits == 32) ? 0 : 1; + if (info.is_64) { + /* this works only when SYMBOLS and SECTIONS present */ + headsize = + MACHO_HEADER64_SIZE + MACHO_SEGCMD64_SIZE + + (MACHO_SECTCMD64_SIZE * (objfmt_macho->parse_scnum)) + + MACHO_SYMCMD_SIZE; + macho_segcmd = LC_SEGMENT_64; + macho_segcmdsize = MACHO_SEGCMD64_SIZE; + macho_sectcmdsize = MACHO_SECTCMD64_SIZE; + macho_nlistsize = MACHO_NLIST64_SIZE; + long_int_bytes = 8; + } else { + headsize = + MACHO_HEADER_SIZE + MACHO_SEGCMD_SIZE + + (MACHO_SECTCMD_SIZE * (objfmt_macho->parse_scnum)) + + MACHO_SYMCMD_SIZE; + macho_segcmd = LC_SEGMENT; + macho_segcmdsize = MACHO_SEGCMD_SIZE; + macho_sectcmdsize = MACHO_SECTCMD_SIZE; + macho_nlistsize = MACHO_NLIST_SIZE; + long_int_bytes = 4; + } + + /* Get number of symbols */ + info.symindex = 0; + info.indx = 0; + info.strlength = 1; /* string table starts with a zero byte */ + info.all_syms = all_syms || info.is_64; + /*info.all_syms = 1; * force all syms into symbol table */ + yasm_symtab_traverse(object->symtab, &info, macho_objfmt_count_sym); + symtab_count = info.indx; + + /* write raw section data first */ + if (fseek(f, (long)headsize, SEEK_SET) < 0) { + yasm__fatal(N_("could not seek on output file")); + /*@notreached@ */ + return; + } + + /* get size of sections in memory (including BSS) and size of sections + * in file (without BSS) + */ + info.vmsize = 0; + info.filesize = 0; + info.offset = headsize; + yasm_object_sections_traverse(object, &info, macho_objfmt_calc_sectsize); + + /* output sections to file */ + yasm_object_sections_traverse(object, &info, macho_objfmt_output_section); + + fileoff_sections = ftell(f); + + /* Write headers */ + if (fseek(f, 0, SEEK_SET) < 0) { + yasm__fatal(N_("could not seek on output file")); + /*@notreached@*/ + return; + } + + localbuf = info.buf; + + /* header size is common to 32 bit and 64 bit variants */ + if (info.is_64) { + YASM_WRITE_32_L(localbuf, MH_MAGIC_64); /* magic number */ + /* i386 64-bit ABI */ + YASM_WRITE_32_L(localbuf, CPU_ARCH_ABI64 | CPU_TYPE_I386); + } else { + YASM_WRITE_32_L(localbuf, MH_MAGIC); /* magic number */ + YASM_WRITE_32_L(localbuf, CPU_TYPE_I386); /* i386 32-bit ABI */ + } + /* i386 all cpu subtype compatible */ + YASM_WRITE_32_L(localbuf, CPU_SUBTYPE_I386_ALL); + YASM_WRITE_32_L(localbuf, MH_OBJECT); /* MACH file type */ + + /* calculate number of commands and their size, put to stream */ + head_ncmds = 0; + head_sizeofcmds = 0; + if (objfmt_macho->parse_scnum > 0) { + head_ncmds++; + head_sizeofcmds += + macho_segcmdsize + macho_sectcmdsize * objfmt_macho->parse_scnum; + } + if (symtab_count > 0) { + head_ncmds++; + head_sizeofcmds += MACHO_SYMCMD_SIZE; + } + + YASM_WRITE_32_L(localbuf, head_ncmds); + YASM_WRITE_32_L(localbuf, head_sizeofcmds); + YASM_WRITE_32_L(localbuf, 0); /* no flags (yet) */ + if (info.is_64) { + YASM_WRITE_32_L(localbuf, 0); /* reserved in 64 bit */ + fileoffset = MACHO_HEADER64_SIZE + head_sizeofcmds; + } else { + /* initial offset to first section */ + fileoffset = MACHO_HEADER_SIZE + head_sizeofcmds; + } + + /* --------------- write segment header command ---------------- */ + YASM_WRITE_32_L(localbuf, macho_segcmd); /* command LC_SEGMENT */ + /* size of load command including section load commands */ + YASM_WRITE_32_L(localbuf, + macho_segcmdsize + + macho_sectcmdsize * objfmt_macho->parse_scnum); + /* in an MH_OBJECT file all sections are in one unnamed (name all zeros) + * segment (16x0) + */ + YASM_WRITE_32_L(localbuf, 0); + YASM_WRITE_32_L(localbuf, 0); + YASM_WRITE_32_L(localbuf, 0); + YASM_WRITE_32_L(localbuf, 0); + + /* in-memory offset, in-memory size */ + yasm_intnum_set_uint(val, 0); /* offset in memory (vmaddr) */ + yasm_intnum_get_sized(val, localbuf, long_int_bytes, + ((long_int_bytes) << 3), 0, 0, 0); + localbuf += long_int_bytes; + yasm_intnum_set_uint(val, info.vmsize); /* size in memory (vmsize) */ + yasm_intnum_get_sized(val, localbuf, long_int_bytes, + ((long_int_bytes) << 3), 0, 0, 0); + localbuf += long_int_bytes; + /* offset in file to first section */ + yasm_intnum_set_uint(val, fileoffset); + yasm_intnum_get_sized(val, localbuf, long_int_bytes, + ((long_int_bytes) << 3), 0, 0, 0); + localbuf += long_int_bytes; + yasm_intnum_set_uint(val, info.filesize); /* overall size in file */ + yasm_intnum_get_sized(val, localbuf, long_int_bytes, + ((long_int_bytes) << 3), 0, 0, 0); + localbuf += long_int_bytes; + + YASM_WRITE_32_L(localbuf, VM_PROT_DEFAULT); /* VM protection, maximum */ + YASM_WRITE_32_L(localbuf, VM_PROT_DEFAULT); /* VM protection, initial */ + /* number of sections */ + YASM_WRITE_32_L(localbuf, objfmt_macho->parse_scnum); + YASM_WRITE_32_L(localbuf, 0); /* no flags */ + + /* write MACH-O header and segment command to outfile */ + fwrite(info.buf, (size_t) (localbuf - info.buf), 1, f); + + /* next: section headers */ + /* offset to relocs for first section */ + info.rel_base = align32((long)fileoff_sections); + info.s_reloff = 0; /* offset for relocs of following sections */ + yasm_object_sections_traverse(object, &info, macho_objfmt_output_secthead); + + localbuf = info.buf; + /* write out symbol command */ + YASM_WRITE_32_L(localbuf, LC_SYMTAB); /* cmd == LC_SYMTAB */ + YASM_WRITE_32_L(localbuf, MACHO_SYMCMD_SIZE); + /* symbol table offset */ + YASM_WRITE_32_L(localbuf, info.rel_base + info.s_reloff); + YASM_WRITE_32_L(localbuf, symtab_count); /* number of symbols */ + + YASM_WRITE_32_L(localbuf, macho_nlistsize * symtab_count + info.rel_base + + info.s_reloff); /* string table offset */ + YASM_WRITE_32_L(localbuf, info.strlength); /* string table size */ + /* write symbol command */ + fwrite(info.buf, (size_t)(localbuf - info.buf), 1, f); + + /*printf("num symbols %d, vmsize %d, filesize %d\n",symtab_count, + info.vmsize, info.filesize ); */ + + /* get back to end of raw section data */ + if (fseek(f, (long)fileoff_sections, SEEK_SET) < 0) { + yasm__fatal(N_("could not seek on output file")); + /*@notreached@*/ + return; + } + + /* padding to long boundary */ + if ((info.rel_base - fileoff_sections) > 0) { + fwrite(pad_data, info.rel_base - fileoff_sections, 1, f); + } + + /* relocation data */ + yasm_object_sections_traverse(object, &info, macho_objfmt_output_relocs); + + /* symbol table (NLIST) */ + info.indx = 1; /* restart symbol table indices */ + yasm_symtab_traverse(object->symtab, &info, macho_objfmt_output_symtable); + + /* symbol strings */ + fwrite(pad_data, 1, 1, f); + yasm_symtab_traverse(object->symtab, &info, macho_objfmt_output_str); + + yasm_intnum_destroy(val); + yasm_xfree(info.buf); +} + +static void +macho_objfmt_destroy(yasm_objfmt *objfmt) +{ + yasm_xfree(objfmt); +} + +static void +macho_objfmt_init_new_section(yasm_section *sect, unsigned long line) +{ + yasm_object *object = yasm_section_get_object(sect); + const char *sectname = yasm_section_get_name(sect); + yasm_objfmt_macho *objfmt_macho = (yasm_objfmt_macho *)object->objfmt; + macho_section_data *data; + yasm_symrec *sym; + + data = yasm_xmalloc(sizeof(macho_section_data)); + data->scnum = objfmt_macho->parse_scnum++; + data->segname = NULL; + data->sectname = NULL; + data->flags = S_REGULAR; + data->size = 0; + data->offset = 0; + data->vmoff = 0; + data->nreloc = 0; + data->extreloc = 0; + yasm_section_add_data(sect, &macho_section_data_cb, data); + + sym = yasm_symtab_define_label(object->symtab, sectname, + yasm_section_bcs_first(sect), 1, line); + data->sym = sym; +} + +static yasm_section * +macho_objfmt_add_default_section(yasm_object *object) +{ + yasm_section *retval; + macho_section_data *msd; + int isnew; + + retval = yasm_object_get_general(object, "LC_SEGMENT.__TEXT.__text", 0, 1, + 0, &isnew, 0); + if (isnew) { + msd = yasm_section_get_data(retval, &macho_section_data_cb); + msd->segname = yasm__xstrdup("__TEXT"); + msd->sectname = yasm__xstrdup("__text"); + msd->flags = S_ATTR_PURE_INSTRUCTIONS; + yasm_section_set_align(retval, 0, 0); + yasm_section_set_default(retval, 1); + } + return retval; +} + +static /*@observer@*/ /*@null@*/ yasm_section * +macho_objfmt_section_switch(yasm_object *object, yasm_valparamhead *valparams, + /*@unused@*/ /*@null@*/ + yasm_valparamhead *objext_valparams, + unsigned long line) +{ + yasm_valparam *vp; + yasm_section *retval; + int isnew; + /*@only@*/ char *f_sectname; + unsigned long flags; + unsigned long align; + int flags_override = 0; + const char *sectname; + char *realname; + int resonly = 0; + macho_section_data *msd; + size_t i; + + static const struct { + const char *in; + const char *seg; + const char *sect; + unsigned long flags; + unsigned long align; + } section_name_translation[] = { + {".text", "__TEXT", "__text", S_ATTR_PURE_INSTRUCTIONS, 0}, + {".const", "__TEXT", "__const", S_REGULAR, 0}, + {".static_const", "__TEXT", "__static_const", S_REGULAR, 0}, + {".cstring", "__TEXT", "__cstring", S_CSTRING_LITERALS, 0}, + {".literal4", "__TEXT", "__literal4", S_4BYTE_LITERALS, 4}, + {".literal8", "__TEXT", "__literal8", S_8BYTE_LITERALS, 8}, + {".literal16", "__TEXT", "__literal16", S_16BYTE_LITERALS, 16}, + {".constructor", "__TEXT", "__constructor", S_REGULAR, 0}, + {".destructor", "__TEXT", "__destructor", S_REGULAR, 0}, + {".fvmlib_init0", "__TEXT", "__fvmlib_init0", S_REGULAR, 0}, + {".fvmlib_init1", "__TEXT", "__fvmlib_init1", S_REGULAR, 0}, + {".mod_init_func", "__DATA", "__mod_init_func", + S_MOD_INIT_FUNC_POINTERS, 4}, + {".mod_term_func", "__DATA", "__mod_term_func", + S_MOD_TERM_FUNC_POINTERS, 4}, + {".dyld", "__DATA", "__dyld", S_REGULAR, 0}, + {".data", "__DATA", "__data", S_REGULAR, 0}, + {".static_data", "__DATA", "__static_data", S_REGULAR, 0}, + {".const_data", "__DATA", "__const", S_REGULAR, 0}, + {".rodata", "__DATA", "__const", S_REGULAR, 0}, + {".bss", "__DATA", "__bss", S_ZEROFILL, 0}, + {".objc_class_names", "__TEXT", "__cstring", S_CSTRING_LITERALS, 0}, + {".objc_meth_var_types","__TEXT", "__cstring", S_CSTRING_LITERALS, 0}, + {".objc_meth_var_names","__TEXT", "__cstring", S_CSTRING_LITERALS, 0}, + {".objc_selector_strs", "__OBJC", "__selector_strs", + S_CSTRING_LITERALS, 0}, + {".objc_class", "__OBJC", "__class", + S_ATTR_NO_DEAD_STRIP, 0}, + {".objc_meta_class", "__OBJC", "__meta_class", + S_ATTR_NO_DEAD_STRIP, 0}, + {".objc_string_object", "__OBJC", "__string_object", + S_ATTR_NO_DEAD_STRIP, 0}, + {".objc_protocol", "__OBJC", "__protocol", + S_ATTR_NO_DEAD_STRIP, 0}, + {".objc_cat_cls_meth", "__OBJC", "__cat_cls_meth", + S_ATTR_NO_DEAD_STRIP, 0}, + {".objc_cat_inst_meth", "__OBJC", "__cat_inst_meth", + S_ATTR_NO_DEAD_STRIP, 0}, + {".objc_cls_meth", "__OBJC", "__cls_meth", + S_ATTR_NO_DEAD_STRIP, 0}, + {".objc_inst_meth", "__OBJC", "__inst_meth", + S_ATTR_NO_DEAD_STRIP, 0}, + {".objc_message_refs", "__OBJC", "__message_refs", + S_LITERAL_POINTERS|S_ATTR_NO_DEAD_STRIP, 4}, + {".objc_cls_refs", "__OBJC", "__cls_refs", + S_LITERAL_POINTERS|S_ATTR_NO_DEAD_STRIP, 4}, + {".objc_module_info", "__OBJC", "__module_info", + S_ATTR_NO_DEAD_STRIP, 0}, + {".objc_symbols", "__OBJC", "__symbols", + S_ATTR_NO_DEAD_STRIP, 0}, + {".objc_category", "__OBJC", "__category", + S_ATTR_NO_DEAD_STRIP, 0}, + {".objc_class_vars", "__OBJC", "__class_vars", + S_ATTR_NO_DEAD_STRIP, 0}, + {".objc_instance_vars", "__OBJC", "__instance_vars", + S_ATTR_NO_DEAD_STRIP, 0} + }; + + struct macho_section_switch_data { + /*@only@*/ /*@null@*/ char *f_segname; + /*@only@*/ /*@null@*/ yasm_intnum *align_intn; + } data; + + static const yasm_dir_help help[] = { + { "segname", 1, yasm_dir_helper_string, + offsetof(struct macho_section_switch_data, f_segname), 0 }, + { "align", 1, yasm_dir_helper_intn, + offsetof(struct macho_section_switch_data, align_intn), 0 } + }; + + data.f_segname = NULL; + data.align_intn = NULL; + + vp = yasm_vps_first(valparams); + sectname = yasm_vp_string(vp); + if (!sectname) + return NULL; + vp = yasm_vps_next(vp); + + /* translate .text,.data,.bss to __text,__data,__bss... */ + for (i=0; ival && (s = yasm_vp_string(vp))) { + /* Treat as SEGNAME, SECTNAME */ + if (strlen(sectname) > 16) + yasm_warn_set(YASM_WARN_GENERAL, + N_("segment name is too long, max 16 chars; truncating")); + data.f_segname = yasm__xstrndup(sectname, 16); + if (strlen(s) > 16) + yasm_warn_set(YASM_WARN_GENERAL, + N_("section name is too long, max 16 chars; truncating")); + f_sectname = yasm__xstrndup(s, 16); + flags = S_REGULAR; + align = 0; + + sectname = s; + vp = yasm_vps_next(vp); + } else { + data.f_segname = NULL; + if (strlen(sectname) > 16) + yasm_warn_set(YASM_WARN_GENERAL, + N_("section name is too long, max 16 chars; truncating")); + f_sectname = yasm__xstrndup(sectname, 16); + flags = S_ATTR_SOME_INSTRUCTIONS; + align = 0; + } + } else { + data.f_segname = yasm__xstrdup(section_name_translation[i].seg); + f_sectname = yasm__xstrdup(section_name_translation[i].sect); + flags = section_name_translation[i].flags; + align = section_name_translation[i].align; + } + + flags_override = yasm_dir_helper(object, vp, line, help, NELEMS(help), + &data, yasm_dir_helper_valparam_warn); + if (flags_override < 0) + return NULL; /* error occurred */ + + if (data.align_intn) { + align = yasm_intnum_get_uint(data.align_intn); + yasm_intnum_destroy(data.align_intn); + + /* Alignments must be a power of two. */ + if (!is_exp2(align)) { + yasm_error_set(YASM_ERROR_VALUE, + N_("argument to `%s' is not a power of two"), + vp->val); + return NULL; + } + + /* Check to see if alignment is supported size */ + if (align > 16384) { + yasm_error_set(YASM_ERROR_VALUE, + N_("macho implementation does not support alignments > 16384")); + return NULL; + } + } + + if (!data.f_segname) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("Unknown section name, defaulting to __TEXT segment")); + data.f_segname = yasm__xstrdup("__TEXT"); + } + + /* Build a unique sectname from f_segname and f_sectname. */ + realname = yasm_xmalloc(strlen("LC_SEGMENT") + 1 + strlen(data.f_segname) + 1 + + strlen(f_sectname) + 1); + sprintf(realname, "LC_SEGMENT.%s.%s", data.f_segname, f_sectname); + retval = yasm_object_get_general(object, realname, align, 1, resonly, + &isnew, line); + yasm_xfree(realname); + + msd = yasm_section_get_data(retval, &macho_section_data_cb); + + if (isnew || yasm_section_is_default(retval)) { + yasm_section_set_default(retval, 0); + msd->segname = data.f_segname; + msd->sectname = f_sectname; + msd->flags = flags; + yasm_section_set_align(retval, align, line); + } else if (flags_override) { + /* align is the only value used from overrides. */ + if (yasm_section_get_align(retval) != align) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("section flags ignored on section redeclaration")); + } + } + return retval; +} + +static /*@observer@*/ /*@null@*/ yasm_symrec * +macho_objfmt_get_special_sym(yasm_object *object, const char *name, + const char *parser) +{ + yasm_objfmt_macho *objfmt_macho = (yasm_objfmt_macho *)object->objfmt; + if (yasm__strcasecmp(name, "gotpcrel") == 0) { + return objfmt_macho->gotpcrel_sym; + } + return NULL; +} + +static void +macho_section_data_destroy(void *data) +{ + macho_section_data *msd = (macho_section_data *) data; + yasm_xfree(msd->segname); + yasm_xfree(msd->sectname); + yasm_xfree(data); +} + +static void +macho_section_data_print(void *data, FILE *f, int indent_level) +{ + macho_section_data *msd = (macho_section_data *) data; + + fprintf(f, "%*ssym=\n", indent_level, ""); + yasm_symrec_print(msd->sym, f, indent_level + 1); + fprintf(f, "%*sscnum=%ld\n", indent_level, "", msd->scnum); + fprintf(f, "%*sflags=0x%lx\n", indent_level, "", msd->flags); + fprintf(f, "%*ssize=%lu\n", indent_level, "", msd->size); + fprintf(f, "%*snreloc=%lu\n", indent_level, "", msd->nreloc); + fprintf(f, "%*soffset=%lu\n", indent_level, "", msd->offset); + fprintf(f, "%*sextreloc=%u\n", indent_level, "", msd->extreloc); +} + +static void +macho_symrec_data_destroy(void *data) +{ + yasm_xfree(data); +} + +static void +macho_symrec_data_print(void *data, FILE *f, int indent_level) +{ + macho_symrec_data *msd = (macho_symrec_data *)data; + + fprintf(f, "%*sindex=%ld\n", indent_level, "", msd->index); + fprintf(f, "%*svalue=", indent_level, ""); + if (msd->value) + fprintf(f, "%ld\n", yasm_intnum_get_int(msd->value)); + else + fprintf(f, "nil\n"); +} + + +/* Define valid debug formats to use with this object format */ +static const char *macho_objfmt_dbgfmt_keywords[] = { + "null", + NULL +}; + +/* Define objfmt structure -- see objfmt.h for details */ +yasm_objfmt_module yasm_macho_LTX_objfmt = { + "Mac OS X ABI Mach-O File Format", + "macho", + "o", + 32, + 0, + macho_objfmt_dbgfmt_keywords, + "null", + NULL, /* no directives */ + NULL, /* no standard macros */ + macho_objfmt_create, + macho_objfmt_output, + macho_objfmt_destroy, + macho_objfmt_add_default_section, + macho_objfmt_init_new_section, + macho_objfmt_section_switch, + macho_objfmt_get_special_sym +}; + +yasm_objfmt_module yasm_macho32_LTX_objfmt = { + "Mac OS X ABI Mach-O File Format (32-bit)", + "macho32", + "o", + 32, + 0, + macho_objfmt_dbgfmt_keywords, + "null", + NULL, /* no directives */ + NULL, /* no standard macros */ + macho32_objfmt_create, + macho_objfmt_output, + macho_objfmt_destroy, + macho_objfmt_add_default_section, + macho_objfmt_init_new_section, + macho_objfmt_section_switch, + macho_objfmt_get_special_sym +}; + +yasm_objfmt_module yasm_macho64_LTX_objfmt = { + "Mac OS X ABI Mach-O File Format (64-bit)", + "macho64", + "o", + 64, + 0, + macho_objfmt_dbgfmt_keywords, + "null", + NULL, /* no directives */ + NULL, /* no standard macros */ + macho64_objfmt_create, + macho_objfmt_output, + macho_objfmt_destroy, + macho_objfmt_add_default_section, + macho_objfmt_init_new_section, + macho_objfmt_section_switch, + macho_objfmt_get_special_sym +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/Makefile.inc new file mode 100644 index 0000000000..e8b4dc1f57 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/Makefile.inc @@ -0,0 +1,9 @@ +EXTRA_DIST += modules/objfmts/macho/tests/gas32/Makefile.inc +EXTRA_DIST += modules/objfmts/macho/tests/gas64/Makefile.inc +EXTRA_DIST += modules/objfmts/macho/tests/nasm32/Makefile.inc +EXTRA_DIST += modules/objfmts/macho/tests/nasm64/Makefile.inc + +include modules/objfmts/macho/tests/gas32/Makefile.inc +include modules/objfmts/macho/tests/gas64/Makefile.inc +include modules/objfmts/macho/tests/nasm32/Makefile.inc +include modules/objfmts/macho/tests/nasm64/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas32/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas32/Makefile.inc new file mode 100644 index 0000000000..a02b3b3eaf --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas32/Makefile.inc @@ -0,0 +1,5 @@ +TESTS += modules/objfmts/macho/tests/gas32/gas_macho32_test.sh + +EXTRA_DIST += modules/objfmts/macho/tests/gas32/gas_macho32_test.sh +EXTRA_DIST += modules/objfmts/macho/tests/gas32/gas-macho32.asm +EXTRA_DIST += modules/objfmts/macho/tests/gas32/gas-macho32.hex diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas32/gas-macho32.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas32/gas-macho32.asm new file mode 100644 index 0000000000..fad1e000b4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas32/gas-macho32.asm @@ -0,0 +1,79 @@ +# test source file for assembling to MACH-O +# build with : +# yasm -f macho machotest.asm +# gcc -o machotest machotest.c machotest.o + +# This file should test the following: +# [1] Define and export a global text-section symbol +# [2] Define and export a global data-section symbol +# [3] Define and export a global BSS-section symbol +# [4] Define a non-global text-section symbol +# [5] Define a non-global data-section symbol +# [6] Define a non-global BSS-section symbol +# [7] Define a COMMON symbol +# [8] Define a NASM local label +# [9] Reference a NASM local label +# [10] Import an external symbol (note: printf replaced by another call) +# [11] Make a PC-relative call to an external symbol +# [12] Reference a text-section symbol in the text section +# [13] Reference a data-section symbol in the text section +# [14] Reference a BSS-section symbol in the text section +# [15] Reference a text-section symbol in the data section +# [16] Reference a data-section symbol in the data section +# [17] Reference a BSS-section symbol in the data section + +.globl _lrotate # [1] +.globl _greet # [1] +.globl _asmstr # [2] +.globl _textptr # [2] +.globl _selfptr # [2] +.globl _integer # [3] +#.extern _druck # [10] +.comm _commvar, 4 # [7] + +.text + +# prototype: long lrotate(long x, int num); +_lrotate: # [1] + pushl %ebp + movl %esp, %ebp + movl 8(%ebp), %eax + movl 12(%ebp), %ecx +Llabel: roll %eax # [4] [8] + loop Llabel # [9] [12] + movl %ebp, %esp + popl %ebp + ret + +# prototype: void greet(void); +_greet: + movl _integer, %eax # [14] + incl %eax + movl %eax, localint # [14] + pushl _commvar + movl localptr, %eax # [13] + pushl (%eax) + pushl _integer # [1] [14] + pushl _printfstr # [13] + calll _druck # [11] + addl 16, %esp + ret + +.data + +# a string +_asmstr: .asciz "hello, world" # [2] + +# a string for Printf +_printfstr: .asciz "integer==%d, localint==%d, commvar=%d\n" + +# some pointers +localptr: .long localint # [5] [17] +_textptr: .long _greet # [15] +_selfptr: .long _selfptr # [16] + +# an integer +.lcomm _integer, 4 # [3] + +# a local integer +.lcomm localint, 4 # [6] diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas32/gas-macho32.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas32/gas-macho32.hex new file mode 100644 index 0000000000..72cdabdeb3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas32/gas-macho32.hex @@ -0,0 +1,688 @@ +ce +fa +ed +fe +07 +00 +00 +00 +03 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +1c +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +89 +00 +00 +00 +38 +01 +00 +00 +81 +00 +00 +00 +07 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +5f +5f +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +54 +45 +58 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +41 +00 +00 +00 +38 +01 +00 +00 +00 +00 +00 +00 +bc +01 +00 +00 +07 +00 +00 +00 +00 +03 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +44 +41 +54 +41 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +41 +00 +00 +00 +40 +00 +00 +00 +79 +01 +00 +00 +00 +00 +00 +00 +f4 +01 +00 +00 +03 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +62 +73 +73 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +44 +41 +54 +41 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +81 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +18 +00 +00 +00 +0c +02 +00 +00 +08 +00 +00 +00 +6c +02 +00 +00 +44 +00 +00 +00 +55 +89 +e5 +8b +45 +08 +8b +4d +0c +d1 +c0 +e2 +fc +89 +ec +5d +c3 +a1 +81 +00 +00 +00 +40 +a3 +85 +00 +00 +00 +ff +35 +00 +00 +00 +00 +a1 +75 +00 +00 +00 +ff +30 +ff +35 +81 +00 +00 +00 +ff +35 +4e +00 +00 +00 +e8 +c6 +ff +ff +ff +03 +25 +10 +00 +00 +00 +c3 +68 +65 +6c +6c +6f +2c +20 +77 +6f +72 +6c +64 +00 +69 +6e +74 +65 +67 +65 +72 +3d +3d +25 +64 +2c +20 +6c +6f +63 +61 +6c +69 +6e +74 +3d +3d +25 +64 +2c +20 +63 +6f +6d +6d +76 +61 +72 +3d +25 +64 +0a +00 +85 +00 +00 +00 +11 +00 +00 +00 +7d +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +03 +00 +00 +04 +18 +00 +00 +00 +03 +00 +00 +04 +1e +00 +00 +00 +06 +00 +00 +0c +23 +00 +00 +00 +02 +00 +00 +04 +2b +00 +00 +00 +03 +00 +00 +04 +31 +00 +00 +00 +02 +00 +00 +04 +36 +00 +00 +00 +07 +00 +00 +0d +34 +00 +00 +00 +03 +00 +00 +04 +38 +00 +00 +00 +01 +00 +00 +04 +3c +00 +00 +00 +02 +00 +00 +04 +01 +00 +00 +00 +0f +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +0f +01 +00 +00 +11 +00 +00 +00 +11 +00 +00 +00 +0f +02 +00 +00 +41 +00 +00 +00 +19 +00 +00 +00 +0f +02 +00 +00 +79 +00 +00 +00 +22 +00 +00 +00 +0f +02 +00 +00 +7d +00 +00 +00 +2b +00 +00 +00 +0f +03 +00 +00 +81 +00 +00 +00 +34 +00 +00 +00 +01 +00 +00 +00 +04 +00 +00 +00 +3d +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +5f +6c +72 +6f +74 +61 +74 +65 +00 +5f +67 +72 +65 +65 +74 +00 +5f +61 +73 +6d +73 +74 +72 +00 +5f +74 +65 +78 +74 +70 +74 +72 +00 +5f +73 +65 +6c +66 +70 +74 +72 +00 +5f +69 +6e +74 +65 +67 +65 +72 +00 +5f +63 +6f +6d +6d +76 +61 +72 +00 +5f +64 +72 +75 +63 +6b +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas32/gas_macho32_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas32/gas_macho32_test.sh new file mode 100755 index 0000000000..45a1e10440 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas32/gas_macho32_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh macho_test modules/objfmts/macho/tests/gas32 "GAS 32-bit macho objfmt" "-f macho32 -p gas" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/Makefile.inc new file mode 100644 index 0000000000..ec99a219e2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/Makefile.inc @@ -0,0 +1,7 @@ +TESTS += modules/objfmts/macho/tests/gas64/gas_macho64_test.sh + +EXTRA_DIST += modules/objfmts/macho/tests/gas64/gas_macho64_test.sh +EXTRA_DIST += modules/objfmts/macho/tests/gas64/gas-macho64.asm +EXTRA_DIST += modules/objfmts/macho/tests/gas64/gas-macho64.hex +EXTRA_DIST += modules/objfmts/macho/tests/gas64/gas-macho64-pic.asm +EXTRA_DIST += modules/objfmts/macho/tests/gas64/gas-macho64-pic.hex diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64-pic.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64-pic.asm new file mode 100644 index 0000000000..c44502b30a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64-pic.asm @@ -0,0 +1,32 @@ +call _foo +# r_type=X86_64_RELOC_BRANCH, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +# E8 00 00 00 00 + +call _foo+4 +# r_type=X86_64_RELOC_BRANCH, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +# E8 04 00 00 00 + +movq _foo@GOTPCREL(%rip), %rax +# r_type=X86_64_RELOC_GOT_LOAD, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +# 48 8B 05 00 00 00 00 + +pushq _foo@GOTPCREL(%rip) +# r_type=X86_64_RELOC_GOT, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +# FF 35 00 00 00 00 + +movl _foo(%rip), %eax +# r_type=X86_64_RELOC_SIGNED, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +# 8B 05 00 00 00 00 + +movl _foo+4(%rip), %eax +# r_type=X86_64_RELOC_SIGNED, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +# 8B 05 04 00 00 00 + +movb $0x12, _foo(%rip) +# r_type=X86_64_RELOC_SIGNED, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +# C6 05 FF FF FF FF 12 + +movl $0x12345678, _foo(%rip) +# r_type=X86_64_RELOC_SIGNED, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +# C7 05 FC FF FF FF 78 56 34 12 + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64-pic.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64-pic.hex new file mode 100644 index 0000000000..83bb7bbfc6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64-pic.hex @@ -0,0 +1,346 @@ +cf +fa +ed +fe +07 +00 +00 +01 +03 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +b0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +98 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +5f +5f +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +54 +45 +58 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +08 +00 +00 +00 +00 +03 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +18 +00 +00 +00 +44 +01 +00 +00 +01 +00 +00 +00 +54 +01 +00 +00 +06 +00 +00 +00 +e8 +00 +00 +00 +00 +e8 +04 +00 +00 +00 +48 +8b +05 +00 +00 +00 +00 +ff +35 +00 +00 +00 +00 +8b +05 +00 +00 +00 +00 +8b +05 +04 +00 +00 +00 +c6 +05 +ff +ff +ff +ff +12 +c7 +05 +fc +ff +ff +ff +78 +56 +34 +12 +01 +00 +00 +00 +00 +00 +00 +2d +06 +00 +00 +00 +00 +00 +00 +2d +0d +00 +00 +00 +00 +00 +00 +3d +13 +00 +00 +00 +00 +00 +00 +4d +19 +00 +00 +00 +00 +00 +00 +1d +1f +00 +00 +00 +00 +00 +00 +1d +25 +00 +00 +00 +00 +00 +00 +1d +2c +00 +00 +00 +00 +00 +00 +1d +01 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +66 +6f +6f +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64.asm new file mode 100644 index 0000000000..1817e9b4fa --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64.asm @@ -0,0 +1,103 @@ + +call _foo +# r_type= X86_64_RELOC_BRANCH, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +# E8 00 00 00 00 + +call _foo+4 +# r_type=X86_64_RELOC_BRANCH, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +# E8 04 00 00 00 + +# TODO: movq _foo@GOTPCREL(%rip), %rax +# r_type=X86_64_RELOC_GOT_LOAD, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +# 48 8B 05 00 00 00 00 + +# TODO: pushq _foo@GOTPCREL(%rip) +# r_type=X86_64_RELOC_GOT, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +# FF 35 00 00 00 00 + +movl _foo(%rip), %eax +# r_type=X86_64_RELOC_SIGNED, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +# 8B 05 00 00 00 00 + +movl _foo+4(%rip), %eax +# r_type= X86_64_RELOC_SIGNED, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +# 8B 05 04 00 00 00 + +movb $0x12, _foo(%rip) +# r_type= X86_64_RELOC_SIGNED, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +# C6 05 FF FF FF FF 12 + +movl $0x12345678, _foo(%rip) +# r_type= X86_64_RELOC_SIGNED, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +# C7 05 FC FF FF FF 78 56 34 12 + +.quad _foo +# r_type=X86_64_RELOC_UNSIGNED,r_length=3, r_extern=1,r_pcrel=0, r_symbolnum=_foo +# 00 00 00 00 00 00 00 00 + +.quad _foo+4 +# r_type=X86_64_RELOC_UNSIGNED,r_length=3,r_extern=1,r_pcrel=0,r_symbolnum=_foo +# 04 00 00 00 00 00 00 00 + +# TODO: .quad _foo - _bar +# r_type=X86_64_RELOC_SUBTRACTOR,r_length=3,r_extern=1, r_pcrel=0,r_symbolnum=_bar +# r_type=X86_64_RELOC_UNSIGNED,r_length=3,r_extern=1, r_pcrel=0,r_symbolnum=_foo +# 00 00 00 00 00 00 00 00 + +# TODO: .quad _foo - _bar + 4 +# r_type=X86_64_RELOC_SUBTRACTOR,r_length=3, r_extern=1,r_pcrel=0,r_symbolnum=_bar +# r_type=X86_64_RELOC_UNSIGNED,r_length=3, r_extern=1,r_pcrel=0,r_symbolnum=_foo +# 04 00 00 00 00 00 00 00 + +# TODO: .long _foo - _bar +# r_type=X86_64_RELOC_SUBTRACTOR,r_length=2,r_extern=1,r_pcrel=0,r_symbolnum=_bar +# r_type=X86_64_RELOC_UNSIGNED,r_length=2,r_extern=1,r_pcrel=0,r_symbolnum=_foo +# 00 00 00 00 + +lea L1(%rip), %rax +# r_type=X86_64_RELOC_SIGNED, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_prev +# 48 8d 05 12 00 00 00 +# Assumes that _prev is the first nonlocal label 0x12 bytes before L1. + +lea L0(%rip), %rax +# r_type= X86_64_RELOC_SIGNED, r_length=2, r_extern=0, r_pcrel=1, r_symbolnum=3 +# 48 8d 05 56 00 00 00 +# Assumes that L0 is in third section, and has an address of 0x00000056 +# in .o file, and no previous nonlocal label. + +.quad L1 +# r_type=X86_64_RELOC_UNSIGNED,r_length=3,r_extern=1,r_pcrel=0, r_symbolnum= _prev +# 12 00 00 00 00 00 00 00 +# Assumes that _prev is the first nonlocal label 0x12 bytes before L1. + +.quad L0 +# r_type=X86_64_RELOC_UNSIGNED,r_length=3, r_extern=0, r_pcrel=0, r_symbolnum= 3 +# 56 00 00 00 00 00 00 00 +# Assumes that L0 is in third section, and has address of 0x00000056 +# in .o file, and no previous nonlocal label. + +# TODO: .quad _foo - . +# r_type=X86_64_RELOC_SUBTRACTOR,r_length=3,r_extern=1,r_pcrel=0,r_symbolnum=_prev +# r_type=X86_64_RELOC_UNSIGNED,r_length=3,r_extern=1,r_pcrel=0,r_symbolnum=_foo +# EE FF FF FF FF FF FF FF +# Assumes that _prev is the first nonlocal label 0x12 bytes +# before this .quad + +# TODO: .quad _foo - L1 +# r_type=X86_64_RELOC_SUBTRACTOR,r_length=3,r_extern=1,r_pcrel=0,r_symbolnum=_prev +# r_type=X86_64_RELOC_UNSIGNED,r_length=3,r_extern=1,r_pcrel=0,r_symbolnum=_foo +# EE FF FF FF FF FF FF FF +# Assumes that _prev is the first nonlocal label 0x12 bytes before L1. + +.quad L1 - _prev +# No relocations. This is an assembly time constant. +# 12 00 00 00 00 00 00 00 +# Assumes that _prev is the first nonlocal label 0x12 bytes before L + +.data +.org 0x56 +L0: +_prev: +.quad 0, 0 +.byte 0, 0 +L1: diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64.hex new file mode 100644 index 0000000000..e4fa4882ab --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas-macho64.hex @@ -0,0 +1,666 @@ +cf +fa +ed +fe +07 +00 +00 +01 +03 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c5 +00 +00 +00 +00 +00 +00 +00 +20 +01 +00 +00 +00 +00 +00 +00 +c5 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +07 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +5f +5f +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +54 +45 +58 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5d +00 +00 +00 +00 +00 +00 +00 +20 +01 +00 +00 +00 +00 +00 +00 +e8 +01 +00 +00 +0c +00 +00 +00 +00 +03 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +44 +41 +54 +41 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5d +00 +00 +00 +00 +00 +00 +00 +68 +00 +00 +00 +00 +00 +00 +00 +7d +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +18 +00 +00 +00 +48 +02 +00 +00 +04 +00 +00 +00 +88 +02 +00 +00 +12 +00 +00 +00 +e8 +00 +00 +00 +00 +e8 +04 +00 +00 +00 +8b +05 +00 +00 +00 +00 +8b +05 +04 +00 +00 +00 +c6 +05 +ff +ff +ff +ff +12 +c7 +05 +fc +ff +ff +ff +78 +56 +34 +12 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +48 +8d +05 +00 +00 +00 +00 +48 +8d +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +2d +06 +00 +00 +00 +00 +00 +00 +2d +0c +00 +00 +00 +00 +00 +00 +1d +12 +00 +00 +00 +00 +00 +00 +1d +18 +00 +00 +00 +00 +00 +00 +1d +1f +00 +00 +00 +00 +00 +00 +1d +27 +00 +00 +00 +00 +00 +00 +0e +2f +00 +00 +00 +00 +00 +00 +0e +3a +00 +00 +00 +01 +00 +00 +1d +41 +00 +00 +00 +02 +00 +00 +1d +45 +00 +00 +00 +01 +00 +00 +0e +4d +00 +00 +00 +02 +00 +00 +0e +01 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +0e +02 +00 +00 +c5 +00 +00 +00 +00 +00 +00 +00 +09 +00 +00 +00 +0e +02 +00 +00 +b3 +00 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +0e +02 +00 +00 +b3 +00 +00 +00 +00 +00 +00 +00 +00 +5f +66 +6f +6f +00 +4c +31 +00 +4c +30 +00 +5f +70 +72 +65 +76 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas_macho64_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas_macho64_test.sh new file mode 100755 index 0000000000..d3ead46c51 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/gas64/gas_macho64_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh macho_test modules/objfmts/macho/tests/gas64 "GAS 64-bit macho objfmt" "-f macho64 -p gas" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/Makefile.inc new file mode 100644 index 0000000000..2bba5de78e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/Makefile.inc @@ -0,0 +1,17 @@ +TESTS += modules/objfmts/macho/tests/nasm32/macho32_test.sh + +EXTRA_DIST += modules/objfmts/macho/tests/nasm32/macho32_test.sh +EXTRA_DIST += modules/objfmts/macho/tests/nasm32/machotest.c +EXTRA_DIST += modules/objfmts/macho/tests/nasm32/machotest.asm +EXTRA_DIST += modules/objfmts/macho/tests/nasm32/machotest.hex +EXTRA_DIST += modules/objfmts/macho/tests/nasm32/macho-reloc.asm +EXTRA_DIST += modules/objfmts/macho/tests/nasm32/macho-reloc.hex +EXTRA_DIST += modules/objfmts/macho/tests/nasm32/macho32-pext.asm +EXTRA_DIST += modules/objfmts/macho/tests/nasm32/macho32-pext.hex +EXTRA_DIST += modules/objfmts/macho/tests/nasm32/macho32-pic.asm +EXTRA_DIST += modules/objfmts/macho/tests/nasm32/macho32-pic.hex +EXTRA_DIST += modules/objfmts/macho/tests/nasm32/macho32-sect.asm +EXTRA_DIST += modules/objfmts/macho/tests/nasm32/macho32-sect.errwarn +EXTRA_DIST += modules/objfmts/macho/tests/nasm32/macho32-sect.hex +EXTRA_DIST += modules/objfmts/macho/tests/nasm32/macho32-size.asm +EXTRA_DIST += modules/objfmts/macho/tests/nasm32/macho32-size.hex diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho-reloc.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho-reloc.asm new file mode 100644 index 0000000000..4e8b690129 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho-reloc.asm @@ -0,0 +1,24 @@ +[SECTION .data] + +uhoh db 5 + +[GLOBAL blah] + +blah dw 5 +[SECTION .text] + +[EXTERN hi] +[EXTERN hi] +[EXTERN bye] + mov eax, hi+2 + mov eax, bye + mov eax, [hi] + mov eax, [bye+2] + mov eax, $$ + mov eax, $ + mov eax, $+4 + mov eax, $-$$ +;mov eax, uhoh wrt $$ +;mov eax, hi+bye +;mov eax, bye+$ +;mov eax, hi-$ diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho-reloc.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho-reloc.hex new file mode 100644 index 0000000000..7ef6e8a17a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho-reloc.hex @@ -0,0 +1,393 @@ +ce +fa +ed +fe +07 +00 +00 +00 +03 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +d8 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2b +00 +00 +00 +f4 +00 +00 +00 +2b +00 +00 +00 +07 +00 +00 +00 +07 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +5f +5f +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +54 +45 +58 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +f4 +00 +00 +00 +00 +00 +00 +00 +20 +01 +00 +00 +07 +00 +00 +00 +00 +03 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +44 +41 +54 +41 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +03 +00 +00 +00 +1c +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +18 +00 +00 +00 +58 +01 +00 +00 +03 +00 +00 +00 +7c +01 +00 +00 +0d +00 +00 +00 +b8 +02 +00 +00 +00 +b8 +00 +00 +00 +00 +a1 +00 +00 +00 +00 +a1 +02 +00 +00 +00 +b8 +00 +00 +00 +00 +b8 +19 +00 +00 +00 +b8 +22 +00 +00 +00 +b8 +23 +00 +00 +00 +05 +05 +00 +00 +01 +00 +00 +00 +01 +00 +00 +0c +06 +00 +00 +00 +02 +00 +00 +0c +0b +00 +00 +00 +01 +00 +00 +0c +10 +00 +00 +00 +02 +00 +00 +0c +15 +00 +00 +00 +01 +00 +00 +04 +1a +00 +00 +00 +01 +00 +00 +04 +1f +00 +00 +00 +01 +00 +00 +04 +01 +00 +00 +00 +0f +02 +00 +00 +29 +00 +00 +00 +06 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +09 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +62 +6c +61 +68 +00 +68 +69 +00 +62 +79 +65 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pext.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pext.asm new file mode 100644 index 0000000000..f881b4fc42 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pext.asm @@ -0,0 +1,4 @@ +[GLOBAL function:private_extern] + +function: + ret diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pext.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pext.hex new file mode 100644 index 0000000000..6a8eb4f40a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pext.hex @@ -0,0 +1,202 @@ +ce +fa +ed +fe +07 +00 +00 +00 +03 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +94 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +7c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +b0 +00 +00 +00 +01 +00 +00 +00 +07 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +5f +5f +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +54 +45 +58 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +b0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +18 +00 +00 +00 +b4 +00 +00 +00 +01 +00 +00 +00 +c0 +00 +00 +00 +0a +00 +00 +00 +c3 +00 +00 +00 +01 +00 +00 +00 +1f +01 +00 +00 +00 +00 +00 +00 +00 +66 +75 +6e +63 +74 +69 +6f +6e +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pic.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pic.asm new file mode 100644 index 0000000000..438923d130 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pic.asm @@ -0,0 +1,46 @@ +; At present, nasm doesn't seem to support PIC generation for Mach-O. +; The PIC support code below is a little tricky. +[extern func] + SECTION .rodata +const_base: + +%define GOTOFF(got,sym) (got) + (sym) - const_base + +%imacro get_GOT 1 + ; NOTE: this macro destroys ecx resister. + call %%geteip + add ecx, byte (%%ref - $) + jmp short %%adjust +%%geteip: + mov ecx, [esp] + ret +%%adjust: + push ebp + xor ebp,ebp ; ebp = 0 +%ifidni %1,ebx ; (%1 == ebx) + ; db 0x8D,0x9C + jmp near const_base = + ; lea ebx, [ecx+ebp*8+(const_base-%%ref)] ; 8D,9C,E9,(offset32) + db 0x8D,0x9C ; 8D,9C + jmp near const_base ; E9,(const_base-%%ref) +%%ref: +%else ; (%1 != ebx) + ; db 0x8D,0x8C + jmp near const_base = + ; lea ecx, [ecx+ebp*8+(const_base-%%ref)] ; 8D,8C,E9,(offset32) + db 0x8D,0x8C ; 8D,8C + jmp strict near const_base ; E9,(const_base-%%ref) +%%ref: mov %1, ecx +%endif ; (%1 == ebx) + pop ebp +%endmacro + +SECTION .text + +jmp const_base + +get_GOT ebx + +jmp const_base + +call func + +ret diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pic.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pic.hex new file mode 100644 index 0000000000..f81f708c04 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-pic.hex @@ -0,0 +1,338 @@ +ce +fa +ed +fe +07 +00 +00 +00 +03 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +d8 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +29 +00 +00 +00 +f4 +00 +00 +00 +29 +00 +00 +00 +07 +00 +00 +00 +07 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +5f +5f +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +54 +45 +58 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +29 +00 +00 +00 +f4 +00 +00 +00 +00 +00 +00 +00 +20 +01 +00 +00 +04 +00 +00 +00 +00 +03 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +63 +6f +6e +73 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +44 +41 +54 +41 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +29 +00 +00 +00 +00 +00 +00 +00 +1d +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +18 +00 +00 +00 +40 +01 +00 +00 +01 +00 +00 +00 +4c +01 +00 +00 +06 +00 +00 +00 +e9 +24 +00 +00 +00 +e8 +05 +00 +00 +00 +83 +c1 +13 +eb +04 +8b +0c +24 +c3 +55 +31 +ed +8d +9c +e9 +0c +00 +00 +00 +5d +e9 +06 +00 +00 +00 +e8 +d8 +ff +ff +ff +c3 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +05 +19 +00 +00 +00 +02 +00 +00 +05 +1f +00 +00 +00 +02 +00 +00 +05 +24 +00 +00 +00 +00 +00 +00 +0d +01 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +66 +75 +6e +63 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-sect.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-sect.asm new file mode 100644 index 0000000000..b02f02a462 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-sect.asm @@ -0,0 +1,9 @@ +section .data +section __x +section __y segname=__Y +section __Z, __z +section __Y __bar +section __reallylongname12345 +section __REALLYLONGSEGNAME __1 +section __2 __reallylongsectname +section __2REALLYLONGSEGNAME __2reallylongsectname diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-sect.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-sect.errwarn new file mode 100644 index 0000000000..620e8782fb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-sect.errwarn @@ -0,0 +1,7 @@ +-:2: warning: Unknown section name, defaulting to __TEXT segment +-:6: warning: section name is too long, max 16 chars; truncating +-:6: warning: Unknown section name, defaulting to __TEXT segment +-:7: warning: segment name is too long, max 16 chars; truncating +-:8: warning: section name is too long, max 16 chars; truncating +-:9: warning: segment name is too long, max 16 chars; truncating +-:9: warning: section name is too long, max 16 chars; truncating diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-sect.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-sect.hex new file mode 100644 index 0000000000..aeaec6f9f4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-sect.hex @@ -0,0 +1,789 @@ +ce +fa +ed +fe +07 +00 +00 +00 +03 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +e0 +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +e0 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fc +02 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +07 +00 +00 +00 +0a +00 +00 +00 +00 +00 +00 +00 +5f +5f +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +54 +45 +58 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +44 +41 +54 +41 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +78 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +54 +45 +58 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +79 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +59 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +7a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +5a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +62 +61 +72 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +59 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +72 +65 +61 +6c +6c +79 +6c +6f +6e +67 +6e +61 +6d +65 +5f +5f +54 +45 +58 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +31 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +52 +45 +41 +4c +4c +59 +4c +4f +4e +47 +53 +45 +47 +4e +00 +00 +00 +00 +00 +00 +00 +00 +14 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +72 +65 +61 +6c +6c +79 +6c +6f +6e +67 +73 +65 +63 +74 +5f +5f +32 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +32 +72 +65 +61 +6c +6c +79 +6c +6f +6e +67 +73 +65 +63 +5f +5f +32 +52 +45 +41 +4c +4c +59 +4c +4f +4e +47 +53 +45 +47 +00 +00 +00 +00 +00 +00 +00 +00 +14 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +18 +00 +00 +00 +14 +03 +00 +00 +00 +00 +00 +00 +14 +03 +00 +00 +01 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-size.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-size.asm new file mode 100644 index 0000000000..f8cd50fa4f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-size.asm @@ -0,0 +1,60 @@ + section .data align=16 + + align 16 + + mmx_yuy2_00ff dw 000ffh, 000ffh, 000ffh, 000ffh + + section .text + +; -- Import/Export ------------------------------------------------------ + + global mb_yuy2yuv_mmx + + struc macroblock_yuy2_param + .dsty: resd 1 + .dstu: resd 1 + .dstv: resd 1 + .dypitch: resd 1 + .dcpitch: resd 1 + .src: resd 1 + .spitch: resd 1 + endstruc + +; ----------------------------------------------------------------------- +; -= mb_yuy2yuv_mmx =- +; +; extern "C" int __fastcall mb_yuy2yuv_mmx( macroblock_param *param ); +; ----------------------------------------------------------------------- + + align 16 + +mb_yuy2yuv_mmx: + + push ebx + push edx + + push esi + push edi + push ebp + + mov esi, [ecx + macroblock_yuy2_param.src] + mov edx, [ecx + macroblock_yuy2_param.spitch] + + mov edi, [ecx + macroblock_yuy2_param.dsty] + mov eax, [ecx + macroblock_yuy2_param.dstu] + mov ebx, [ecx + macroblock_yuy2_param.dstv] + + mov ebp, [ecx + macroblock_yuy2_param.dypitch] + mov ecx, [ecx + macroblock_yuy2_param.dcpitch] + + movq mm6, [mmx_yuy2_00ff] + + pop ebp + pop edi + pop esi + + pop edx + pop ebx + + retn + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-size.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-size.hex new file mode 100644 index 0000000000..2ed324eac8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32-size.hex @@ -0,0 +1,328 @@ +ce +fa +ed +fe +07 +00 +00 +00 +03 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +d8 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +38 +00 +00 +00 +f4 +00 +00 +00 +2e +00 +00 +00 +07 +00 +00 +00 +07 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +5f +5f +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +54 +45 +58 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +26 +00 +00 +00 +f4 +00 +00 +00 +04 +00 +00 +00 +24 +01 +00 +00 +01 +00 +00 +00 +00 +01 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +44 +41 +54 +41 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +08 +00 +00 +00 +1a +01 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +18 +00 +00 +00 +2c +01 +00 +00 +01 +00 +00 +00 +38 +01 +00 +00 +10 +00 +00 +00 +53 +52 +56 +57 +55 +8b +71 +14 +8b +51 +18 +8b +39 +8b +41 +04 +8b +59 +08 +8b +69 +0c +8b +49 +10 +0f +6f +35 +30 +00 +00 +00 +5d +5f +5e +5a +5b +c3 +ff +00 +ff +00 +ff +00 +ff +00 +00 +00 +1c +00 +00 +00 +02 +00 +00 +04 +01 +00 +00 +00 +0f +01 +00 +00 +00 +00 +00 +00 +00 +6d +62 +5f +79 +75 +79 +32 +79 +75 +76 +5f +6d +6d +78 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32_test.sh new file mode 100755 index 0000000000..e5fdcc951a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/macho32_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh macho_test modules/objfmts/macho/tests/nasm32 "32-bit macho objfmt" "-f macho32" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/machotest.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/machotest.asm new file mode 100644 index 0000000000..660f71406e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/machotest.asm @@ -0,0 +1,87 @@ +; test source file for assembling to MACH-O +; build with : +; yasm -f macho machotest.asm +; gcc -o machotest machotest.c machotest.o + +; This file should test the following: +; [1] Define and export a global text-section symbol +; [2] Define and export a global data-section symbol +; [3] Define and export a global BSS-section symbol +; [4] Define a non-global text-section symbol +; [5] Define a non-global data-section symbol +; [6] Define a non-global BSS-section symbol +; [7] Define a COMMON symbol +; [8] Define a NASM local label +; [9] Reference a NASM local label +; [10] Import an external symbol (note: printf replaced by another call) +; [11] Make a PC-relative call to an external symbol +; [12] Reference a text-section symbol in the text section +; [13] Reference a data-section symbol in the text section +; [14] Reference a BSS-section symbol in the text section +; [15] Reference a text-section symbol in the data section +; [16] Reference a data-section symbol in the data section +; [17] Reference a BSS-section symbol in the data section + +[BITS 32] +[GLOBAL _lrotate] ; [1] +[GLOBAL _greet] ; [1] +[GLOBAL _asmstr] ; [2] +[GLOBAL _textptr] ; [2] +[GLOBAL _selfptr] ; [2] +[GLOBAL _integer] ; [3] +[EXTERN _druck] ; [10] +[COMMON _commvar 4] ; [7] + +[SECTION .text] + +; prototype: long lrotate(long x, int num); +_lrotate: ; [1] + push ebp + mov ebp,esp + mov eax,[ebp+8] + mov ecx,[ebp+12] +.label rol eax,1 ; [4] [8] + loop .label ; [9] [12] + mov esp,ebp + pop ebp + ret + +; prototype: void greet(void); +_greet + mov eax,[_integer] ; [14] + inc eax + mov [localint],eax ; [14] + push dword [_commvar] + mov eax,[localptr] ; [13] + push dword [eax] + push dword [_integer] ; [1] [14] + push dword _printfstr ; [13] + call _druck ; [11] + add esp,16 + ret + +; some internal calls + call _greet + call _lrotate.label + +[SECTION .data] + +; a string +_asmstr db 'hello, world', 0 ; [2] + +; a string for Printf +_printfstr db "integer==%d, localint==%d, commvar=%d" + db 10, 0 + +; some pointers +localptr dd localint ; [5] [17] +_textptr dd _greet ; [15] +_selfptr dd _selfptr ; [16] + +[SECTION .bss] + +; an integer +_integer resd 1 ; [3] + +; a local integer +localint resd 1 ; [6] diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/machotest.c b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/machotest.c new file mode 100644 index 0000000000..42fc92c054 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/machotest.c @@ -0,0 +1,45 @@ +/* + * test source file for assembling to ELF + * copied from cofftest.c; s/coff/elf/g + * build with (under Linux, for example): + * yasm -f elf elftest.asm + * gcc -o elftest elftest.c elftest.o + */ + +#include + +extern int lrotate(long, int); +extern void greet(void); +extern char asmstr[]; +extern void *selfptr; +extern void *textptr; +extern int integer, commvar; + +int main(void) { + + printf("Testing lrotate: should get 0x00400000, 0x00000001\n"); + printf("lrotate(0x00040000, 4) = 0x%08lx\n", lrotate(0x40000,4)); + printf("lrotate(0x00040000, 14) = 0x%08lx\n", lrotate(0x40000,14)); + + printf("This string should read `hello, world': `%s'\n", asmstr); + + printf("The integers here should be 1234, 1235 and 4321:\n"); + integer = 1234; + commvar = 4321; + greet(); + + printf("These pointers should be equal: %p and %p\n", + &greet, textptr); + + printf("So should these: %p and %p\n", selfptr, &selfptr); +} + +/* + there is no support for dynamically linkable objects in current + mach-o module. Therefore put "printf" statement here and redirect + the asm call to druck() +*/ +void druck( char *string, int a, int b, int c ) +{ + printf(string,a,b,c); +} diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/machotest.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/machotest.hex new file mode 100644 index 0000000000..e6791e4e37 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm32/machotest.hex @@ -0,0 +1,692 @@ +ce +fa +ed +fe +07 +00 +00 +00 +03 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +1c +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +04 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8f +00 +00 +00 +38 +01 +00 +00 +87 +00 +00 +00 +07 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +5f +5f +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +54 +45 +58 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +47 +00 +00 +00 +38 +01 +00 +00 +00 +00 +00 +00 +c0 +01 +00 +00 +07 +00 +00 +00 +00 +03 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +44 +41 +54 +41 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +47 +00 +00 +00 +40 +00 +00 +00 +7f +01 +00 +00 +00 +00 +00 +00 +f8 +01 +00 +00 +03 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +62 +73 +73 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +44 +41 +54 +41 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +87 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +18 +00 +00 +00 +10 +02 +00 +00 +08 +00 +00 +00 +70 +02 +00 +00 +44 +00 +00 +00 +55 +89 +e5 +8b +45 +08 +8b +4d +0c +d1 +c0 +e2 +fc +89 +ec +5d +c3 +a1 +87 +00 +00 +00 +40 +a3 +8b +00 +00 +00 +ff +35 +00 +00 +00 +00 +a1 +7b +00 +00 +00 +ff +30 +ff +35 +87 +00 +00 +00 +68 +54 +00 +00 +00 +e8 +c7 +ff +ff +ff +83 +c4 +10 +c3 +e8 +cf +ff +ff +ff +e8 +c2 +ff +ff +ff +68 +65 +6c +6c +6f +2c +20 +77 +6f +72 +6c +64 +00 +69 +6e +74 +65 +67 +65 +72 +3d +3d +25 +64 +2c +20 +6c +6f +63 +61 +6c +69 +6e +74 +3d +3d +25 +64 +2c +20 +63 +6f +6d +6d +76 +61 +72 +3d +25 +64 +0a +00 +8b +00 +00 +00 +11 +00 +00 +00 +83 +00 +00 +00 +00 +12 +00 +00 +00 +03 +00 +00 +04 +18 +00 +00 +00 +03 +00 +00 +04 +1e +00 +00 +00 +07 +00 +00 +0c +23 +00 +00 +00 +02 +00 +00 +04 +2b +00 +00 +00 +03 +00 +00 +04 +30 +00 +00 +00 +02 +00 +00 +04 +35 +00 +00 +00 +06 +00 +00 +0d +34 +00 +00 +00 +03 +00 +00 +04 +38 +00 +00 +00 +01 +00 +00 +04 +3c +00 +00 +00 +02 +00 +00 +04 +01 +00 +00 +00 +0f +01 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +0f +01 +00 +00 +11 +00 +00 +00 +11 +00 +00 +00 +0f +02 +00 +00 +47 +00 +00 +00 +19 +00 +00 +00 +0f +02 +00 +00 +7f +00 +00 +00 +22 +00 +00 +00 +0f +02 +00 +00 +83 +00 +00 +00 +2b +00 +00 +00 +0f +03 +00 +00 +87 +00 +00 +00 +34 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +3b +00 +00 +00 +01 +00 +00 +00 +04 +00 +00 +00 +00 +5f +6c +72 +6f +74 +61 +74 +65 +00 +5f +67 +72 +65 +65 +74 +00 +5f +61 +73 +6d +73 +74 +72 +00 +5f +74 +65 +78 +74 +70 +74 +72 +00 +5f +73 +65 +6c +66 +70 +74 +72 +00 +5f +69 +6e +74 +65 +67 +65 +72 +00 +5f +64 +72 +75 +63 +6b +00 +5f +63 +6f +6d +6d +76 +61 +72 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/Makefile.inc new file mode 100644 index 0000000000..93ec45e921 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/Makefile.inc @@ -0,0 +1,10 @@ +TESTS += modules/objfmts/macho/tests/nasm64/macho64_test.sh + +EXTRA_DIST += modules/objfmts/macho/tests/nasm64/nasm-macho64-pic.asm +EXTRA_DIST += modules/objfmts/macho/tests/nasm64/nasm-macho64-pic.hex +EXTRA_DIST += modules/objfmts/macho/tests/nasm64/macho64_test.sh +EXTRA_DIST += modules/objfmts/macho/tests/nasm64/machotest64.c +EXTRA_DIST += modules/objfmts/macho/tests/nasm64/machotest64.asm +EXTRA_DIST += modules/objfmts/macho/tests/nasm64/machotest64.hex +EXTRA_DIST += modules/objfmts/macho/tests/nasm64/macho-reloc64-err.asm +EXTRA_DIST += modules/objfmts/macho/tests/nasm64/macho-reloc64-err.errwarn diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/macho-reloc64-err.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/macho-reloc64-err.asm new file mode 100644 index 0000000000..06595a5662 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/macho-reloc64-err.asm @@ -0,0 +1,32 @@ +[BITS 64] +[SECTION .data] + +uhoh db 5 + +[GLOBAL blah] + +blah dw 5 +[GLOBAL aha] +aha dq blah +aha2 dq blah+4 +aha3 dq blah-uhoh + +[SECTION .text] + +[EXTERN hi] +[EXTERN hi] +[EXTERN bye] +[BITS 64] + mov rax, hi+2 + mov rax, bye + mov rax, [qword hi] + mov rdi, [rip+ hi] + mov rax, [bye+2] + mov rax, $$ + mov rax, $ + mov rax, $+4 + mov rax, $-$$ +mov eax, uhoh wrt $$ +;mov eax, hi+bye +;mov eax, bye+$ +;mov eax, hi-$ diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/macho-reloc64-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/macho-reloc64-err.errwarn new file mode 100644 index 0000000000..1a11883371 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/macho-reloc64-err.errwarn @@ -0,0 +1,8 @@ +-:20: error: macho: sorry, cannot apply 32 bit absolute relocations in 64 bit mode, consider "[_symbol wrt rip]" for mem access, "qword" and "dq _foo" for pointers. +-:21: error: macho: sorry, cannot apply 32 bit absolute relocations in 64 bit mode, consider "[_symbol wrt rip]" for mem access, "qword" and "dq _foo" for pointers. +-:23: error: macho: sorry, cannot apply 32 bit absolute relocations in 64 bit mode, consider "[_symbol wrt rip]" for mem access, "qword" and "dq _foo" for pointers. +-:24: error: macho: sorry, cannot apply 32 bit absolute relocations in 64 bit mode, consider "[_symbol wrt rip]" for mem access, "qword" and "dq _foo" for pointers. +-:25: error: macho: sorry, cannot apply 32 bit absolute relocations in 64 bit mode, consider "[_symbol wrt rip]" for mem access, "qword" and "dq _foo" for pointers. +-:26: error: macho: sorry, cannot apply 32 bit absolute relocations in 64 bit mode, consider "[_symbol wrt rip]" for mem access, "qword" and "dq _foo" for pointers. +-:27: error: macho: sorry, cannot apply 32 bit absolute relocations in 64 bit mode, consider "[_symbol wrt rip]" for mem access, "qword" and "dq _foo" for pointers. +-:29: error: macho: invalid WRT diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/macho64_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/macho64_test.sh new file mode 100755 index 0000000000..f7c0bfbb70 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/macho64_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh macho_test modules/objfmts/macho/tests/nasm64 "64-bit macho objfmt" "-f macho64" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/machotest64.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/machotest64.asm new file mode 100644 index 0000000000..e19e4fd60b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/machotest64.asm @@ -0,0 +1,111 @@ +; test source file for assembling to MACH-O +; build with : +; yasm -f macho -m amd64 machotest64.asm +; gcc -m64 -o machotest64 machotest64.c machotest64.o + +; This file should test the following: +; [1] Define and export a global text-section symbol +; [2] Define and export a global data-section symbol +; [3] Define and export a global BSS-section symbol +; [4] Define a non-global text-section symbol +; [5] Define a non-global data-section symbol +; [6] Define a non-global BSS-section symbol +; [7] Define a COMMON symbol +; [8] Define a NASM local label +; [9] Reference a NASM local label +; [10] Import an external symbol (note: printf replaced by another call) +; [11] Make a PC-relative call to an external symbol +; [12] Reference a text-section symbol in the text section +; [13] Reference a data-section symbol in the text section +; [14] Reference a BSS-section symbol in the text section +; [15] Reference a text-section symbol in the data section +; [16] Reference a data-section symbol in the data section +; [17] Reference a BSS-section symbol in the data section +; [18] Perform a 64 Bit relocation in the text section + +[BITS 64] +[GLOBAL _lrotate] ; [1] +[GLOBAL _greet] ; [1] +[GLOBAL _asmstr] ; [2] +[GLOBAL _textptr] ; [2] +[GLOBAL _selfptr] ; [2] +[GLOBAL _integer] ; [3] +[EXTERN _druck] ; [10] +[COMMON _commvar 4] ; [7] +[GLOBAL _getstr] ; +[GLOBAL _readgreet] ; + +[SECTION .text] + +; prototype: long lrotate(long x, int num); +_lrotate: ; [1] + push rcx + mov rax,rdi + mov rcx,rsi +.label rol rax,1 ; [4] [8] + loop .label ; [9] [12] + pop rcx + ret + +_getstr: + mov rax,qword _asmstr + ret + +_readgreet: + mov rax,[qword localint] ; [18] + ret + +_retrievelabel: + mov rax,[qword localptr] + ret + +; prototype: void greet(void); +; calls "void druck(a,b,c,d); +_greet mov rax,[_integer wrt rip] ; [14] + inc rax + mov [localint wrt rip],rax ; [14] + push rdi + push rsi + push rdx + push rcx + mov rdi,qword _printfstr + mov rsi,[_integer wrt rip] + mov rdx,[localptr wrt rip] + mov rdx,[rdx] + mov rcx,[_commvar wrt rip] + call _druck + pop rcx + pop rdx + pop rsi + pop rdi + ret + +; some internal calls + call _greet + call _retrievelabel + +[SECTION .data] + +; a string for Printf +_printfstr db "integer==%d, localint==%d, commvar=%d" + db 10, 0 + +; some pointers +localptr dq localint ; [5] [17] +_textptr dq _greet ; [15] +_selfptr dq _selfptr ; [16] + +;[section .data2 align=16] + +; a string +_asmstr db 'hello, world', 0 ; [2] + + + +[SECTION .bss] + +; an integer +_integer resq 1 ; [3] + +; a local integer +localint resq 1 ; [6] diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/machotest64.c b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/machotest64.c new file mode 100644 index 0000000000..c0f1e3c42e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/machotest64.c @@ -0,0 +1,56 @@ +/* + * test source file for assembling to Mach-O + * copied from cofftest.c, adapted to current limitations + * in Mach-O module + * build with (under OSX Tiger/Leopard, for example): + * yasm -f macho -m amd64 machotest64.asm + * gcc -m64 -o machotest64 machotest64.c machotest64.o + */ + +#include + +extern long lrotate(long, long); +extern void greet(void); +extern long readgreet(void); +extern char asmstr[]; +extern void *selfptr; +extern void *textptr; +extern int integer, commvar; +extern char *getstr(void); + +int main(void) { + + printf("Testing lrotate: should get 0x0000000000400000, 0x0000000000000001\n"); + printf("lrotate(0x00040000, 4 ) = 0x%016lx\n", lrotate(0x40000,4)); + printf("lrotate(0x00040000, 46) = 0x%016lx\n", lrotate(0x40000,46)); + + printf("This string should read `hello, world': `%s'\n", asmstr); + { + long a,b; + a = (long)asmstr; + b = (long)getstr(); + printf("The pointers %lx and %lx should be equal\n",a,b); + } + printf("This string should read `hello, world': `%s'\n", getstr()); + + printf("The integers here should be 1234, 1235 and 4321:\n"); + integer = 1234; + commvar = 4321; + greet(); + printf("The absolute addressing to the asm-local integer should yield in 1235:\n%ld\n",readgreet()); + + printf("These pointers should be equal: %p and %p\n", + &greet, textptr); + + printf("So should these: %p and %p\n", selfptr, &selfptr); +} + +/* + there is no support for dynamically linkable objects in current + mach-o module. Therefore put "printf" statement here and redirect + the asm call to druck() +*/ +void druck( char *string, int a, int b, int c ) +{ + printf(string,a,b,c); +} diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/machotest64.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/machotest64.hex new file mode 100644 index 0000000000..213951869c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/machotest64.hex @@ -0,0 +1,1058 @@ +cf +fa +ed +fe +07 +00 +00 +01 +03 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +50 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +38 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d6 +00 +00 +00 +00 +00 +00 +00 +70 +01 +00 +00 +00 +00 +00 +00 +c6 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +5f +5f +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +54 +45 +58 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7a +00 +00 +00 +00 +00 +00 +00 +70 +01 +00 +00 +00 +00 +00 +00 +38 +02 +00 +00 +0a +00 +00 +00 +00 +03 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +44 +41 +54 +41 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7a +00 +00 +00 +00 +00 +00 +00 +4c +00 +00 +00 +00 +00 +00 +00 +ea +01 +00 +00 +00 +00 +00 +00 +88 +02 +00 +00 +03 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +62 +73 +73 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +44 +41 +54 +41 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c6 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +18 +00 +00 +00 +a0 +02 +00 +00 +0f +00 +00 +00 +90 +03 +00 +00 +92 +00 +00 +00 +51 +48 +89 +f8 +48 +89 +f1 +48 +d1 +c0 +e2 +fb +59 +c3 +48 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +c3 +48 +a1 +00 +00 +00 +00 +00 +00 +00 +00 +c3 +48 +a1 +00 +00 +00 +00 +00 +00 +00 +00 +c3 +48 +8b +05 +00 +00 +00 +00 +48 +ff +c0 +48 +89 +05 +00 +00 +00 +00 +57 +56 +52 +51 +48 +bf +00 +00 +00 +00 +00 +00 +00 +00 +48 +8b +35 +00 +00 +00 +00 +48 +8b +15 +00 +00 +00 +00 +48 +8b +12 +48 +8b +0d +00 +00 +00 +00 +e8 +00 +00 +00 +00 +59 +5a +5e +5f +c3 +e8 +ba +ff +ff +ff +e8 +aa +ff +ff +ff +69 +6e +74 +65 +67 +65 +72 +3d +3d +25 +64 +2c +20 +6c +6f +63 +61 +6c +69 +6e +74 +3d +3d +25 +64 +2c +20 +63 +6f +6d +6d +76 +61 +72 +3d +25 +64 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +68 +65 +6c +6c +6f +2c +20 +77 +6f +72 +6c +64 +00 +00 +00 +10 +00 +00 +00 +02 +00 +00 +0e +1b +00 +00 +00 +0b +00 +00 +0e +26 +00 +00 +00 +0d +00 +00 +0e +32 +00 +00 +00 +05 +00 +00 +1d +3c +00 +00 +00 +0b +00 +00 +1d +46 +00 +00 +00 +0e +00 +00 +0e +51 +00 +00 +00 +05 +00 +00 +1d +58 +00 +00 +00 +0d +00 +00 +1d +62 +00 +00 +00 +07 +00 +00 +1d +67 +00 +00 +00 +06 +00 +00 +2d +27 +00 +00 +00 +0b +00 +00 +0e +2f +00 +00 +00 +01 +00 +00 +0e +37 +00 +00 +00 +04 +00 +00 +0e +01 +00 +00 +00 +0f +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +0f +01 +00 +00 +2f +00 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +0f +02 +00 +00 +b9 +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +0f +02 +00 +00 +a9 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +0f +02 +00 +00 +b1 +00 +00 +00 +00 +00 +00 +00 +2b +00 +00 +00 +0f +03 +00 +00 +c6 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3b +00 +00 +00 +01 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +44 +00 +00 +00 +0f +01 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +4c +00 +00 +00 +0f +01 +00 +00 +19 +00 +00 +00 +00 +00 +00 +00 +57 +00 +00 +00 +0e +01 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +66 +00 +00 +00 +0e +03 +00 +00 +ce +00 +00 +00 +00 +00 +00 +00 +6f +00 +00 +00 +0e +01 +00 +00 +24 +00 +00 +00 +00 +00 +00 +00 +7e +00 +00 +00 +0e +02 +00 +00 +a1 +00 +00 +00 +00 +00 +00 +00 +87 +00 +00 +00 +0e +02 +00 +00 +7a +00 +00 +00 +00 +00 +00 +00 +00 +5f +6c +72 +6f +74 +61 +74 +65 +00 +5f +67 +72 +65 +65 +74 +00 +5f +61 +73 +6d +73 +74 +72 +00 +5f +74 +65 +78 +74 +70 +74 +72 +00 +5f +73 +65 +6c +66 +70 +74 +72 +00 +5f +69 +6e +74 +65 +67 +65 +72 +00 +5f +64 +72 +75 +63 +6b +00 +5f +63 +6f +6d +6d +76 +61 +72 +00 +5f +67 +65 +74 +73 +74 +72 +00 +5f +72 +65 +61 +64 +67 +72 +65 +65 +74 +00 +5f +6c +72 +6f +74 +61 +74 +65 +2e +6c +61 +62 +65 +6c +00 +6c +6f +63 +61 +6c +69 +6e +74 +00 +5f +72 +65 +74 +72 +69 +65 +76 +65 +6c +61 +62 +65 +6c +00 +6c +6f +63 +61 +6c +70 +74 +72 +00 +5f +70 +72 +69 +6e +74 +66 +73 +74 +72 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/nasm-macho64-pic.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/nasm-macho64-pic.asm new file mode 100644 index 0000000000..7b46163eab --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/nasm-macho64-pic.asm @@ -0,0 +1,34 @@ +[extern _foo] + +call _foo +; r_type=X86_64_RELOC_BRANCH, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +; E8 00 00 00 00 + +call _foo+4 +; r_type=X86_64_RELOC_BRANCH, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +; E8 04 00 00 00 + +mov rax, [rel _foo wrt ..gotpcrel] +; r_type=X86_64_RELOC_GOT_LOAD, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +; 48 8B 05 00 00 00 00 + +push qword [rel _foo wrt ..gotpcrel] +; r_type=X86_64_RELOC_GOT, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +; FF 35 00 00 00 00 + +mov eax, [rel _foo] +; r_type=X86_64_RELOC_SIGNED, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +; 8B 05 00 00 00 00 + +mov eax, [rel _foo+4] +; r_type=X86_64_RELOC_SIGNED, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +; 8B 05 04 00 00 00 + +mov [rel _foo], byte 12h +; r_type=X86_64_RELOC_SIGNED, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +; C6 05 FF FF FF FF 12 + +mov dword [rel _foo], 0x12345678 +; r_type=X86_64_RELOC_SIGNED, r_length=2, r_extern=1, r_pcrel=1, r_symbolnum=_foo +; C7 05 FC FF FF FF 78 56 34 12 + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/nasm-macho64-pic.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/nasm-macho64-pic.hex new file mode 100644 index 0000000000..83bb7bbfc6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/macho/tests/nasm64/nasm-macho64-pic.hex @@ -0,0 +1,346 @@ +cf +fa +ed +fe +07 +00 +00 +01 +03 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +b0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +98 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +5f +5f +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +5f +54 +45 +58 +54 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +04 +01 +00 +00 +08 +00 +00 +00 +00 +03 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +18 +00 +00 +00 +44 +01 +00 +00 +01 +00 +00 +00 +54 +01 +00 +00 +06 +00 +00 +00 +e8 +00 +00 +00 +00 +e8 +04 +00 +00 +00 +48 +8b +05 +00 +00 +00 +00 +ff +35 +00 +00 +00 +00 +8b +05 +00 +00 +00 +00 +8b +05 +04 +00 +00 +00 +c6 +05 +ff +ff +ff +ff +12 +c7 +05 +fc +ff +ff +ff +78 +56 +34 +12 +01 +00 +00 +00 +00 +00 +00 +2d +06 +00 +00 +00 +00 +00 +00 +2d +0d +00 +00 +00 +00 +00 +00 +3d +13 +00 +00 +00 +00 +00 +00 +4d +19 +00 +00 +00 +00 +00 +00 +1d +1f +00 +00 +00 +00 +00 +00 +1d +25 +00 +00 +00 +00 +00 +00 +1d +2c +00 +00 +00 +00 +00 +00 +1d +01 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +66 +6f +6f +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/CMakeLists.txt new file mode 100644 index 0000000000..6cf9157d82 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/CMakeLists.txt @@ -0,0 +1,3 @@ +YASM_ADD_MODULE(objfmt_rdf + objfmts/rdf/rdf-objfmt.c + ) diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/Makefile.inc new file mode 100644 index 0000000000..f5e01e1508 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/Makefile.inc @@ -0,0 +1,7 @@ +libyasm_a_SOURCES += modules/objfmts/rdf/rdf-objfmt.c + +YASM_MODULES += objfmt_rdf + +EXTRA_DIST += modules/objfmts/rdf/tests/Makefile.inc + +include modules/objfmts/rdf/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/rdf-objfmt.c b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/rdf-objfmt.c new file mode 100644 index 0000000000..eb3c66688c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/rdf-objfmt.c @@ -0,0 +1,1088 @@ +/* + * Relocatable Dynamic Object File Format (RDOFF) version 2 format + * + * Copyright (C) 2006-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + + +#define REGULAR_OUTBUF_SIZE 1024 + +#define RDF_MAGIC "RDOFF2" + +/* Maximum size of an import/export label (including trailing zero) */ +#define EXIM_LABEL_MAX 64 + +/* Maximum size of library or module name (including trailing zero) */ +#define MODLIB_NAME_MAX 128 + +/* Maximum number of segments that we can handle in one file */ +#define RDF_MAXSEGS 64 + +/* Record types that may present the RDOFF header */ +#define RDFREC_GENERIC 0 +#define RDFREC_RELOC 1 +#define RDFREC_IMPORT 2 +#define RDFREC_GLOBAL 3 +#define RDFREC_DLL 4 +#define RDFREC_BSS 5 +#define RDFREC_SEGRELOC 6 +#define RDFREC_FARIMPORT 7 +#define RDFREC_MODNAME 8 +#define RDFREC_COMMON 10 + +/* Flags for ExportRec/ImportRec */ +#define SYM_DATA 1 +#define SYM_FUNCTION 2 + +/* Flags for ExportRec */ +#define SYM_GLOBAL 4 + +/* Flags for ImportRec */ +#define SYM_IMPORT 8 +#define SYM_FAR 16 + +typedef struct rdf_reloc { + yasm_reloc reloc; + enum { + RDF_RELOC_NORM, /* normal */ + RDF_RELOC_REL, /* relative to current position */ + RDF_RELOC_SEG /* segment containing symbol */ + } type; /* type of relocation */ + unsigned int size; + unsigned int refseg; +} rdf_reloc; + +typedef struct rdf_section_data { + /*@dependent@*/ yasm_symrec *sym; /* symbol created for this section */ + long scnum; /* section number (0=first section) */ + enum { + RDF_SECT_BSS = 0, + RDF_SECT_CODE = 1, + RDF_SECT_DATA = 2, + RDF_SECT_COMMENT = 3, + RDF_SECT_LCOMMENT = 4, + RDF_SECT_PCOMMENT = 5, + RDF_SECT_SYMDEBUG = 6, + RDF_SECT_LINEDEBUG = 7 + } type; /* section type */ + unsigned int reserved; /* reserved data */ + unsigned long size; /* size of raw data (section data) in bytes */ + + unsigned char *raw_data; /* raw section data, only used during output */ +} rdf_section_data; + +typedef struct rdf_symrec_data { + unsigned int segment; /* assigned RDF "segment" index */ +} rdf_symrec_data; + +typedef STAILQ_HEAD(xdf_str_head, xdf_str) xdf_str_head; +typedef struct xdf_str { + STAILQ_ENTRY(xdf_str) link; + /*@owned@*/ char *str; +} xdf_str; + +typedef struct yasm_objfmt_rdf { + yasm_objfmt_base objfmt; /* base structure */ + + long parse_scnum; /* sect numbering in parser */ + + /*@owned@*/ xdf_str_head module_names; + /*@owned@*/ xdf_str_head library_names; +} yasm_objfmt_rdf; + +typedef struct rdf_objfmt_output_info { + yasm_object *object; + yasm_objfmt_rdf *objfmt_rdf; + yasm_errwarns *errwarns; + /*@dependent@*/ FILE *f; + /*@only@*/ unsigned char *buf; + yasm_section *sect; + /*@dependent@*/ rdf_section_data *rsd; + + unsigned long indx; /* symbol "segment" (extern/common only) */ + + unsigned long bss_size; /* total BSS size */ +} rdf_objfmt_output_info; + +static void rdf_section_data_destroy(/*@only@*/ void *d); +static void rdf_section_data_print(void *data, FILE *f, int indent_level); + +static const yasm_assoc_data_callback rdf_section_data_cb = { + rdf_section_data_destroy, + rdf_section_data_print +}; + +static void rdf_symrec_data_destroy(/*@only@*/ void *d); +static void rdf_symrec_data_print(void *data, FILE *f, int indent_level); + +static const yasm_assoc_data_callback rdf_symrec_data_cb = { + rdf_symrec_data_destroy, + rdf_symrec_data_print +}; + +yasm_objfmt_module yasm_rdf_LTX_objfmt; + + +static /*@dependent@*/ rdf_symrec_data * +rdf_objfmt_sym_set_data(yasm_symrec *sym, unsigned int segment) +{ + rdf_symrec_data *rsymd = yasm_xmalloc(sizeof(rdf_symrec_data)); + + rsymd->segment = segment; + + yasm_symrec_add_data(sym, &rdf_symrec_data_cb, rsymd); + return rsymd; +} + +static yasm_objfmt * +rdf_objfmt_create(yasm_object *object) +{ + yasm_objfmt_rdf *objfmt_rdf = yasm_xmalloc(sizeof(yasm_objfmt_rdf)); + + /* We theoretically support all arches, so don't check. + * Really we only support byte-addressable ones. + */ + + objfmt_rdf->parse_scnum = 0; /* section numbering starts at 0 */ + + STAILQ_INIT(&objfmt_rdf->module_names); + STAILQ_INIT(&objfmt_rdf->library_names); + + objfmt_rdf->objfmt.module = &yasm_rdf_LTX_objfmt; + + return (yasm_objfmt *)objfmt_rdf; +} + +static int +rdf_objfmt_output_value(yasm_value *value, unsigned char *buf, + unsigned int destsize, unsigned long offset, + yasm_bytecode *bc, int warn, /*@null@*/ void *d) +{ + /*@null@*/ rdf_objfmt_output_info *info = (rdf_objfmt_output_info *)d; + /*@dependent@*/ /*@null@*/ yasm_intnum *intn; + unsigned long intn_minus; + unsigned long intn_plus; + int retval; + unsigned int valsize = value->size; + + assert(info != NULL); + + if (value->abs) + value->abs = yasm_expr_simplify(value->abs, 1); + + /* Try to output constant and PC-relative section-local first. + * Note this does NOT output any value with a SEG, WRT, external, + * cross-section, or non-PC-relative reference (those are handled below). + */ + switch (yasm_value_output_basic(value, buf, destsize, bc, warn, + info->object->arch)) { + case -1: + return 1; + case 0: + break; + default: + return 0; + } + + if (value->section_rel) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("rdf: relocation too complex")); + return 1; + } + + if (value->rel && value->wrt) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("rdf: WRT not supported")); + return 1; + } + + intn_minus = 0; + intn_plus = 0; + if (value->rel) { + rdf_reloc *reloc; + /*@null@*/ rdf_symrec_data *rsymd; + /*@dependent@*/ yasm_bytecode *precbc; + + reloc = yasm_xmalloc(sizeof(rdf_reloc)); + reloc->reloc.addr = yasm_intnum_create_uint(bc->offset + offset); + reloc->reloc.sym = value->rel; + reloc->size = valsize/8; + + if (value->seg_of) + reloc->type = RDF_RELOC_SEG; + else if (value->curpos_rel) { + reloc->type = RDF_RELOC_REL; + /* Adjust to start of section, so subtract out the bytecode + * offset. + */ + intn_minus = bc->offset; + } else + reloc->type = RDF_RELOC_NORM; + + if (yasm_symrec_get_label(value->rel, &precbc)) { + /* local, set the value to be the offset, and the refseg to the + * segment number. + */ + /*@dependent@*/ /*@null@*/ rdf_section_data *csectd; + /*@dependent@*/ yasm_section *sect; + + sect = yasm_bc_get_section(precbc); + csectd = yasm_section_get_data(sect, &rdf_section_data_cb); + if (!csectd) + yasm_internal_error(N_("didn't understand section")); + reloc->refseg = csectd->scnum; + intn_plus = yasm_bc_next_offset(precbc); + } else { + /* must be common/external */ + rsymd = yasm_symrec_get_data(reloc->reloc.sym, + &rdf_symrec_data_cb); + if (!rsymd) + yasm_internal_error( + N_("rdf: no symbol data for relocated symbol")); + reloc->refseg = rsymd->segment; + } + + yasm_section_add_reloc(info->sect, (yasm_reloc *)reloc, yasm_xfree); + } + + if (intn_minus > 0) { + intn = yasm_intnum_create_uint(intn_minus); + yasm_intnum_calc(intn, YASM_EXPR_NEG, NULL); + } else + intn = yasm_intnum_create_uint(intn_plus); + + if (value->abs) { + yasm_intnum *intn2 = yasm_expr_get_intnum(&value->abs, 0); + if (!intn2) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("rdf: relocation too complex")); + yasm_intnum_destroy(intn); + return 1; + } + yasm_intnum_calc(intn, YASM_EXPR_ADD, intn2); + } + + retval = yasm_arch_intnum_tobytes(info->object->arch, intn, buf, destsize, + valsize, 0, bc, warn); + yasm_intnum_destroy(intn); + return retval; +} + +static int +rdf_objfmt_output_bytecode(yasm_bytecode *bc, /*@null@*/ void *d) +{ + /*@null@*/ rdf_objfmt_output_info *info = (rdf_objfmt_output_info *)d; + /*@null@*/ /*@only@*/ unsigned char *bigbuf; + unsigned long size = REGULAR_OUTBUF_SIZE; + int gap; + + assert(info != NULL); + + bigbuf = yasm_bc_tobytes(bc, info->buf, &size, &gap, info, + rdf_objfmt_output_value, NULL); + + /* Don't bother doing anything else if size ended up being 0. */ + if (size == 0) { + if (bigbuf) + yasm_xfree(bigbuf); + return 0; + } + + /* Warn that gaps are converted to 0 and write out the 0's. */ + if (gap) { + yasm_warn_set(YASM_WARN_UNINIT_CONTENTS, + N_("uninitialized space: zeroing")); + /* Write out in chunks */ + memset(&info->rsd->raw_data[info->rsd->size], 0, size); + } else { + /* Output buf (or bigbuf if non-NULL) to file */ + memcpy(&info->rsd->raw_data[info->rsd->size], + bigbuf ? bigbuf : info->buf, (size_t)size); + } + + info->rsd->size += size; + + /* If bigbuf was allocated, free it */ + if (bigbuf) + yasm_xfree(bigbuf); + + return 0; +} + +static int +rdf_objfmt_output_section_mem(yasm_section *sect, /*@null@*/ void *d) +{ + /*@null@*/ rdf_objfmt_output_info *info = (rdf_objfmt_output_info *)d; + /*@dependent@*/ /*@null@*/ rdf_section_data *rsd; + unsigned long size; + + assert(info != NULL); + rsd = yasm_section_get_data(sect, &rdf_section_data_cb); + assert(rsd != NULL); + + size = yasm_bc_next_offset(yasm_section_bcs_last(sect)); + + if (rsd->type == RDF_SECT_BSS) { + /* Don't output BSS sections, but remember length + * TODO: Check for non-reserve bytecodes? + */ + info->bss_size += size; + return 0; + } + + /* Empty? Go on to next section */ + if (size == 0) + return 0; + + /* See UGH comment in output() for why we're doing this */ + rsd->raw_data = yasm_xmalloc(size); + rsd->size = 0; + + info->sect = sect; + info->rsd = rsd; + yasm_section_bcs_traverse(sect, info->errwarns, info, + rdf_objfmt_output_bytecode); + + /* Sanity check final section size */ + if (rsd->size != size) + yasm_internal_error( + N_("rdf: section computed size did not match actual size")); + + return 0; +} + +static int +rdf_objfmt_output_section_reloc(yasm_section *sect, /*@null@*/ void *d) +{ + /*@null@*/ rdf_objfmt_output_info *info = (rdf_objfmt_output_info *)d; + /*@dependent@*/ /*@null@*/ rdf_section_data *rsd; + rdf_reloc *reloc; + + assert(info != NULL); + rsd = yasm_section_get_data(sect, &rdf_section_data_cb); + assert(rsd != NULL); + + if (rsd->type == RDF_SECT_BSS) { + /* Don't output BSS sections. */ + return 0; + } + + /* Empty? Go on to next section */ + if (rsd->size == 0) + return 0; + + reloc = (rdf_reloc *)yasm_section_relocs_first(sect); + while (reloc) { + unsigned char *localbuf = info->buf; + + if (reloc->type == RDF_RELOC_SEG) + YASM_WRITE_8(localbuf, RDFREC_SEGRELOC); + else + YASM_WRITE_8(localbuf, RDFREC_RELOC); + YASM_WRITE_8(localbuf, 8); /* record length */ + /* Section number, +0x40 if relative reloc */ + YASM_WRITE_8(localbuf, rsd->scnum + + (reloc->type == RDF_RELOC_REL ? 0x40 : 0)); + yasm_intnum_get_sized(reloc->reloc.addr, localbuf, 4, 32, 0, 0, 0); + localbuf += 4; /* offset of relocation */ + YASM_WRITE_8(localbuf, reloc->size); /* size of relocation */ + YASM_WRITE_16_L(localbuf, reloc->refseg); /* relocated symbol */ + fwrite(info->buf, 10, 1, info->f); + + reloc = (rdf_reloc *)yasm_section_reloc_next((yasm_reloc *)reloc); + } + + return 0; +} + +static int +rdf_objfmt_output_section_file(yasm_section *sect, /*@null@*/ void *d) +{ + /*@null@*/ rdf_objfmt_output_info *info = (rdf_objfmt_output_info *)d; + /*@dependent@*/ /*@null@*/ rdf_section_data *rsd; + unsigned char *localbuf; + + assert(info != NULL); + rsd = yasm_section_get_data(sect, &rdf_section_data_cb); + assert(rsd != NULL); + + if (rsd->type == RDF_SECT_BSS) { + /* Don't output BSS sections. */ + return 0; + } + + /* Empty? Go on to next section */ + if (rsd->size == 0) + return 0; + + /* Section header */ + localbuf = info->buf; + YASM_WRITE_16_L(localbuf, rsd->type); /* type */ + YASM_WRITE_16_L(localbuf, rsd->scnum); /* number */ + YASM_WRITE_16_L(localbuf, rsd->reserved); /* reserved */ + YASM_WRITE_32_L(localbuf, rsd->size); /* length */ + fwrite(info->buf, 10, 1, info->f); + + /* Section data */ + fwrite(rsd->raw_data, rsd->size, 1, info->f); + + /* Free section data */ + yasm_xfree(rsd->raw_data); + rsd->raw_data = NULL; + + return 0; +} + +#define FLAG_EXT 0x1000 +#define FLAG_GLOB 0x2000 +#define FLAG_SET 0x4000 +#define FLAG_CLR 0x8000 +#define FLAG_MASK 0x0fff + +static int +rdf_helper_flag(void *obj, yasm_valparam *vp, unsigned long line, void *d, + uintptr_t flag) +{ + yasm_symrec *sym = (yasm_symrec *)obj; + yasm_sym_vis vis = yasm_symrec_get_visibility(sym); + unsigned int *flags = (unsigned int *)d; + + if (((vis & YASM_SYM_GLOBAL) && (flag & FLAG_GLOB)) || + ((vis & YASM_SYM_EXTERN) && (flag & FLAG_EXT))) { + if (flag & FLAG_SET) + *flags |= flag & FLAG_MASK; + else if (flag & FLAG_CLR) + *flags &= ~(flag & FLAG_MASK); + } + return 0; +} + +static unsigned int +rdf_parse_flags(yasm_symrec *sym) +{ + /*@dependent@*/ /*@null@*/ yasm_valparamhead *objext_valparams = + yasm_symrec_get_objext_valparams(sym); + unsigned int flags = 0; + + static const yasm_dir_help help[] = { + { "data", 0, rdf_helper_flag, 0, + FLAG_EXT|FLAG_GLOB|FLAG_SET|SYM_DATA }, + { "object", 0, rdf_helper_flag, 0, + FLAG_EXT|FLAG_GLOB|FLAG_SET|SYM_DATA }, + { "proc", 0, rdf_helper_flag, 0, + FLAG_EXT|FLAG_GLOB|FLAG_SET|SYM_FUNCTION }, + { "function", 0, rdf_helper_flag, 0, + FLAG_EXT|FLAG_GLOB|FLAG_SET|SYM_FUNCTION }, + { "import", 0, rdf_helper_flag, 0, FLAG_EXT|FLAG_SET|SYM_IMPORT }, + { "export", 0, rdf_helper_flag, 0, FLAG_GLOB|FLAG_SET|SYM_GLOBAL }, + { "far", 0, rdf_helper_flag, 0, FLAG_EXT|FLAG_SET|SYM_FAR }, + { "near", 0, rdf_helper_flag, 0, FLAG_EXT|FLAG_CLR|SYM_FAR } + }; + + if (!objext_valparams) + return 0; + + yasm_dir_helper(sym, yasm_vps_first(objext_valparams), 0, help, + NELEMS(help), &flags, yasm_dir_helper_valparam_warn); + + return flags; +} + +static int +rdf_objfmt_output_sym(yasm_symrec *sym, /*@null@*/ void *d) +{ + /*@null@*/ rdf_objfmt_output_info *info = (rdf_objfmt_output_info *)d; + yasm_sym_vis vis = yasm_symrec_get_visibility(sym); + /*@only@*/ char *name; + size_t len; + unsigned long value = 0; + unsigned int scnum = 0; + /*@dependent@*/ /*@null@*/ yasm_section *sect; + /*@dependent@*/ /*@null@*/ yasm_bytecode *precbc; + unsigned char *localbuf; + + assert(info != NULL); + + if (vis == YASM_SYM_LOCAL || vis == YASM_SYM_DLOCAL) + return 0; /* skip local syms */ + + /* Look at symrec for value/scnum/etc. */ + if (yasm_symrec_get_label(sym, &precbc)) { + /*@dependent@*/ /*@null@*/ rdf_section_data *csectd; + + if (precbc) + sect = yasm_bc_get_section(precbc); + else + sect = NULL; + if (!sect) + return 0; + + /* it's a label: get value and offset. */ + csectd = yasm_section_get_data(sect, &rdf_section_data_cb); + if (csectd) + scnum = csectd->scnum; + else + yasm_internal_error(N_("didn't understand section")); + value = yasm_bc_next_offset(precbc); + } else if (yasm_symrec_get_equ(sym)) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("rdf does not support exporting EQU/absolute values")); + yasm_errwarn_propagate(info->errwarns, yasm_symrec_get_decl_line(sym)); + return 0; + } + + name = yasm_symrec_get_global_name(sym, info->object); + len = strlen(name); + + if (len > EXIM_LABEL_MAX-1) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("label name too long, truncating to %d bytes"), + EXIM_LABEL_MAX); + len = EXIM_LABEL_MAX-1; + } + + localbuf = info->buf; + if (vis & YASM_SYM_GLOBAL) { + YASM_WRITE_8(localbuf, RDFREC_GLOBAL); + YASM_WRITE_8(localbuf, 6+len+1); /* record length */ + YASM_WRITE_8(localbuf, rdf_parse_flags(sym)); /* flags */ + YASM_WRITE_8(localbuf, scnum); /* segment referred to */ + YASM_WRITE_32_L(localbuf, value); /* offset */ + } else { + /* Save symbol segment in symrec data (for later reloc gen) */ + scnum = info->indx++; + rdf_objfmt_sym_set_data(sym, scnum); + + if (vis & YASM_SYM_COMMON) { + /*@dependent@*/ /*@null@*/ yasm_expr **csize_expr; + const yasm_intnum *intn; + /*@dependent@*/ /*@null@*/ yasm_valparamhead *objext_valparams = + yasm_symrec_get_objext_valparams(sym); + unsigned long addralign = 0; + + YASM_WRITE_8(localbuf, RDFREC_COMMON); + YASM_WRITE_8(localbuf, 8+len+1); /* record length */ + YASM_WRITE_16_L(localbuf, scnum); /* segment allocated */ + + /* size */ + csize_expr = yasm_symrec_get_common_size(sym); + assert(csize_expr != NULL); + intn = yasm_expr_get_intnum(csize_expr, 1); + if (!intn) { + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("COMMON data size not an integer expression")); + } else + value = yasm_intnum_get_uint(intn); + YASM_WRITE_32_L(localbuf, value); + + /* alignment */ + if (objext_valparams) { + yasm_valparam *vp = yasm_vps_first(objext_valparams); + for (; vp; vp = yasm_vps_next(vp)) { + if (!vp->val) { + /*@only@*/ /*@null@*/ yasm_expr *align_expr; + /*@dependent@*/ /*@null@*/ + const yasm_intnum *align_intn; + + if (!(align_expr = yasm_vp_expr(vp, + info->object->symtab, + yasm_symrec_get_decl_line(sym))) || + !(align_intn = yasm_expr_get_intnum(&align_expr, + 0))) { + yasm_error_set(YASM_ERROR_VALUE, + N_("argument to `%s' is not an integer"), + vp->val); + if (align_expr) + yasm_expr_destroy(align_expr); + continue; + } + addralign = yasm_intnum_get_uint(align_intn); + yasm_expr_destroy(align_expr); + + /* Alignments must be a power of two. */ + if (!is_exp2(addralign)) { + yasm_error_set(YASM_ERROR_VALUE, + N_("alignment constraint is not a power of two")); + continue; + } + } else + yasm_warn_set(YASM_WARN_GENERAL, + N_("Unrecognized qualifier `%s'"), vp->val); + } + } + YASM_WRITE_16_L(localbuf, addralign); + } else if (vis & YASM_SYM_EXTERN) { + unsigned int flags = rdf_parse_flags(sym); + if (flags & SYM_FAR) { + YASM_WRITE_8(localbuf, RDFREC_FARIMPORT); + flags &= ~SYM_FAR; + } else + YASM_WRITE_8(localbuf, RDFREC_IMPORT); + YASM_WRITE_8(localbuf, 3+len+1); /* record length */ + YASM_WRITE_8(localbuf, flags); /* flags */ + YASM_WRITE_16_L(localbuf, scnum); /* segment allocated */ + } + } + + /* Symbol name */ + memcpy(localbuf, name, len); + localbuf += len; + YASM_WRITE_8(localbuf, 0); /* 0-terminated name */ + yasm_xfree(name); + + fwrite(info->buf, (unsigned long)(localbuf-info->buf), 1, info->f); + + yasm_errwarn_propagate(info->errwarns, yasm_symrec_get_decl_line(sym)); + return 0; +} + +static void +rdf_objfmt_output(yasm_object *object, FILE *f, int all_syms, + yasm_errwarns *errwarns) +{ + yasm_objfmt_rdf *objfmt_rdf = (yasm_objfmt_rdf *)object->objfmt; + rdf_objfmt_output_info info; + unsigned char *localbuf; + long headerlen, filelen; + xdf_str *cur; + size_t len; + + info.object = object; + info.objfmt_rdf = objfmt_rdf; + info.errwarns = errwarns; + info.f = f; + info.buf = yasm_xmalloc(REGULAR_OUTBUF_SIZE); + info.bss_size = 0; + + /* Allocate space for file header by seeking forward */ + if (fseek(f, (long)strlen(RDF_MAGIC)+8, SEEK_SET) < 0) { + yasm__fatal(N_("could not seek on output file")); + /*@notreached@*/ + return; + } + + /* Output custom header records (library and module, etc) */ + cur = STAILQ_FIRST(&objfmt_rdf->module_names); + while (cur) { + len = strlen(cur->str)+1; + localbuf = info.buf; + YASM_WRITE_8(localbuf, RDFREC_MODNAME); /* record type */ + YASM_WRITE_8(localbuf, len); /* record length */ + fwrite(info.buf, 2, 1, f); + fwrite(cur->str, len, 1, f); + cur = STAILQ_NEXT(cur, link); + } + + cur = STAILQ_FIRST(&objfmt_rdf->library_names); + while (cur) { + len = strlen(cur->str)+1; + localbuf = info.buf; + YASM_WRITE_8(localbuf, RDFREC_DLL); /* record type */ + YASM_WRITE_8(localbuf, len); /* record length */ + fwrite(info.buf, 2, 1, f); + fwrite(cur->str, len, 1, f); + cur = STAILQ_NEXT(cur, link); + } + + /* Output symbol table */ + info.indx = objfmt_rdf->parse_scnum; + yasm_symtab_traverse(object->symtab, &info, rdf_objfmt_output_sym); + + /* UGH! Due to the fact the relocs go at the beginning of the file, and + * we only know if we have relocs when we output the sections, we have + * to output the section data before we have output the relocs. But + * we also don't know how much space to preallocate for relocs, so.... + * we output into memory buffers first (thus the UGH). + * + * Stupid object format design, if you ask me (basically all other + * object formats put the relocs *after* the section data to avoid this + * exact problem). + * + * We also calculate the total size of all BSS sections here. + */ + if (yasm_object_sections_traverse(object, &info, + rdf_objfmt_output_section_mem)) + return; + + /* Output all relocs */ + if (yasm_object_sections_traverse(object, &info, + rdf_objfmt_output_section_reloc)) + return; + + /* Output BSS record */ + if (info.bss_size > 0) { + localbuf = info.buf; + YASM_WRITE_8(localbuf, RDFREC_BSS); /* record type */ + YASM_WRITE_8(localbuf, 4); /* record length */ + YASM_WRITE_32_L(localbuf, info.bss_size); /* total BSS size */ + fwrite(info.buf, 6, 1, f); + } + + /* Determine header length */ + headerlen = ftell(f); + if (headerlen == -1) { + yasm__fatal(N_("could not get file position on output file")); + /*@notreached@*/ + return; + } + + /* Section data (to file) */ + if (yasm_object_sections_traverse(object, &info, + rdf_objfmt_output_section_file)) + return; + + /* NULL section to end file */ + memset(info.buf, 0, 10); + fwrite(info.buf, 10, 1, f); + + /* Determine object length */ + filelen = ftell(f); + if (filelen == -1) { + yasm__fatal(N_("could not get file position on output file")); + /*@notreached@*/ + return; + } + + /* Write file header */ + if (fseek(f, 0, SEEK_SET) < 0) { + yasm__fatal(N_("could not seek on output file")); + /*@notreached@*/ + return; + } + + fwrite(RDF_MAGIC, strlen(RDF_MAGIC), 1, f); + localbuf = info.buf; + YASM_WRITE_32_L(localbuf, filelen-10); /* object size */ + YASM_WRITE_32_L(localbuf, headerlen-14); /* header size */ + fwrite(info.buf, 8, 1, f); + + yasm_xfree(info.buf); +} + +static void +rdf_objfmt_destroy(yasm_objfmt *objfmt) +{ + yasm_objfmt_rdf *objfmt_rdf = (yasm_objfmt_rdf *)objfmt; + xdf_str *cur, *next; + + cur = STAILQ_FIRST(&objfmt_rdf->module_names); + while (cur) { + next = STAILQ_NEXT(cur, link); + yasm_xfree(cur->str); + yasm_xfree(cur); + cur = next; + } + + cur = STAILQ_FIRST(&objfmt_rdf->library_names); + while (cur) { + next = STAILQ_NEXT(cur, link); + yasm_xfree(cur->str); + yasm_xfree(cur); + cur = next; + } + + yasm_xfree(objfmt); +} + +static void +rdf_objfmt_init_new_section(yasm_section *sect, unsigned long line) +{ + yasm_object *object = yasm_section_get_object(sect); + const char *sectname = yasm_section_get_name(sect); + yasm_objfmt_rdf *objfmt_rdf = (yasm_objfmt_rdf *)object->objfmt; + rdf_section_data *data; + yasm_symrec *sym; + + data = yasm_xmalloc(sizeof(rdf_section_data)); + data->scnum = objfmt_rdf->parse_scnum++; + data->type = 0; + data->reserved = 0; + data->size = 0; + data->raw_data = NULL; + yasm_section_add_data(sect, &rdf_section_data_cb, data); + + sym = yasm_symtab_define_label(object->symtab, sectname, + yasm_section_bcs_first(sect), 1, line); + data->sym = sym; +} + +static yasm_section * +rdf_objfmt_add_default_section(yasm_object *object) +{ + yasm_section *retval; + rdf_section_data *rsd; + int isnew; + + retval = yasm_object_get_general(object, ".text", 0, 1, 0, &isnew, 0); + if (isnew) { + rsd = yasm_section_get_data(retval, &rdf_section_data_cb); + rsd->type = RDF_SECT_CODE; + rsd->reserved = 0; + yasm_section_set_default(retval, 1); + } + return retval; +} + +static int +rdf_helper_set_type(void *obj, yasm_valparam *vp, unsigned long line, + void *d, uintptr_t newtype) +{ + unsigned int *type = (unsigned int *)d; + *type = newtype; + return 0; +} + +struct rdf_section_switch_data { + /*@only@*/ /*@null@*/ yasm_intnum *reserved_intn; + unsigned int type; +}; + +static int +rdf_helper_set_reserved(void *obj, yasm_valparam *vp, unsigned long line, + void *d) +{ + struct rdf_section_switch_data *data = (struct rdf_section_switch_data *)d; + + if (!vp->val && vp->type == YASM_PARAM_EXPR) + return yasm_dir_helper_intn(obj, vp, line, &data->reserved_intn, 0); + else + return yasm_dir_helper_valparam_warn(obj, vp, line, d); +} + +static /*@observer@*/ /*@null@*/ yasm_section * +rdf_objfmt_section_switch(yasm_object *object, yasm_valparamhead *valparams, + /*@unused@*/ /*@null@*/ + yasm_valparamhead *objext_valparams, + unsigned long line) +{ + yasm_valparam *vp = yasm_vps_first(valparams); + yasm_section *retval; + int isnew; + unsigned int reserved = 0; + int flags_override = 0; + const char *sectname; + rdf_section_data *rsd; + + struct rdf_section_switch_data data; + + static const yasm_dir_help help[] = { + { "bss", 0, rdf_helper_set_type, + offsetof(struct rdf_section_switch_data, type), RDF_SECT_BSS }, + { "code", 0, rdf_helper_set_type, + offsetof(struct rdf_section_switch_data, type), RDF_SECT_CODE }, + { "text", 0, rdf_helper_set_type, + offsetof(struct rdf_section_switch_data, type), RDF_SECT_CODE }, + { "data", 0, rdf_helper_set_type, + offsetof(struct rdf_section_switch_data, type), RDF_SECT_DATA }, + { "comment", 0, rdf_helper_set_type, + offsetof(struct rdf_section_switch_data, type), RDF_SECT_COMMENT }, + { "lcomment", 0, rdf_helper_set_type, + offsetof(struct rdf_section_switch_data, type), RDF_SECT_LCOMMENT }, + { "pcomment", 0, rdf_helper_set_type, + offsetof(struct rdf_section_switch_data, type), RDF_SECT_PCOMMENT }, + { "symdebug", 0, rdf_helper_set_type, + offsetof(struct rdf_section_switch_data, type), RDF_SECT_SYMDEBUG }, + { "linedebug", 0, rdf_helper_set_type, + offsetof(struct rdf_section_switch_data, type), RDF_SECT_LINEDEBUG }, + { "reserved", 1, yasm_dir_helper_intn, + offsetof(struct rdf_section_switch_data, reserved_intn), 0 } + }; + + data.reserved_intn = NULL; + data.type = 0xffff; + + vp = yasm_vps_first(valparams); + sectname = yasm_vp_string(vp); + if (!sectname) + return NULL; + vp = yasm_vps_next(vp); + + if (strcmp(sectname, ".text") == 0) + data.type = RDF_SECT_CODE; + else if (strcmp(sectname, ".data") == 0) + data.type = RDF_SECT_DATA; + else if (strcmp(sectname, ".bss") == 0) + data.type = RDF_SECT_BSS; + + flags_override = yasm_dir_helper(object, vp, line, help, NELEMS(help), + &data, rdf_helper_set_reserved); + if (flags_override < 0) + return NULL; /* error occurred */ + + if (data.type == 0xffff) { + yasm_error_set(YASM_ERROR_VALUE, + N_("new segment declared without type code")); + data.type = RDF_SECT_DATA; + } + + if (data.reserved_intn) { + reserved = yasm_intnum_get_uint(data.reserved_intn); + yasm_intnum_destroy(data.reserved_intn); + } + + retval = yasm_object_get_general(object, sectname, 0, 1, + data.type == RDF_SECT_BSS, &isnew, line); + + rsd = yasm_section_get_data(retval, &rdf_section_data_cb); + + if (isnew || yasm_section_is_default(retval)) { + yasm_section_set_default(retval, 0); + rsd->type = data.type; + rsd->reserved = reserved; + } else if (flags_override) + yasm_warn_set(YASM_WARN_GENERAL, + N_("section flags ignored on section redeclaration")); + return retval; +} + +static /*@observer@*/ /*@null@*/ yasm_symrec * +rdf_objfmt_get_special_sym(yasm_object *object, const char *name, + const char *parser) +{ + return NULL; +} + +static void +rdf_section_data_destroy(void *data) +{ + rdf_section_data *rsd = (rdf_section_data *)data; + if (rsd->raw_data) + yasm_xfree(rsd->raw_data); + yasm_xfree(data); +} + +static void +rdf_section_data_print(void *data, FILE *f, int indent_level) +{ + rdf_section_data *rsd = (rdf_section_data *)data; + + fprintf(f, "%*ssym=\n", indent_level, ""); + yasm_symrec_print(rsd->sym, f, indent_level+1); + fprintf(f, "%*sscnum=%ld\n", indent_level, "", rsd->scnum); + fprintf(f, "%*stype=0x%x\n", indent_level, "", rsd->type); + fprintf(f, "%*sreserved=0x%x\n", indent_level, "", rsd->reserved); + fprintf(f, "%*ssize=%ld\n", indent_level, "", rsd->size); +} + +static void +rdf_symrec_data_destroy(void *data) +{ + yasm_xfree(data); +} + +static void +rdf_symrec_data_print(void *data, FILE *f, int indent_level) +{ + rdf_symrec_data *rsymd = (rdf_symrec_data *)data; + + fprintf(f, "%*ssymtab segment=%u\n", indent_level, "", rsymd->segment); +} + +static void +rdf_objfmt_add_libmodule(yasm_object *object, char *name, int lib) +{ + yasm_objfmt_rdf *objfmt_rdf = (yasm_objfmt_rdf *)object->objfmt; + xdf_str *str; + + /* Add to list */ + str = yasm_xmalloc(sizeof(xdf_str)); + str->str = name; + if (lib) + STAILQ_INSERT_TAIL(&objfmt_rdf->library_names, str, link); + else + STAILQ_INSERT_TAIL(&objfmt_rdf->module_names, str, link); + + if (strlen(str->str) > MODLIB_NAME_MAX-1) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("name too long, truncating to %d bytes"), + MODLIB_NAME_MAX); + str->str[MODLIB_NAME_MAX-1] = '\0'; + } +} + +static void +dir_library(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_valparam *vp = yasm_vps_first(valparams); + rdf_objfmt_add_libmodule(object, yasm__xstrdup(yasm_vp_string(vp)), 1); +} + +static void +dir_module(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_valparam *vp = yasm_vps_first(valparams); + rdf_objfmt_add_libmodule(object, yasm__xstrdup(yasm_vp_string(vp)), 0); +} + +/* Define valid debug formats to use with this object format */ +static const char *rdf_objfmt_dbgfmt_keywords[] = { + "null", + NULL +}; + +static const yasm_directive rdf_objfmt_directives[] = { + { "library", "nasm", dir_library, YASM_DIR_ARG_REQUIRED }, + { "module", "nasm", dir_module, YASM_DIR_ARG_REQUIRED }, + { NULL, NULL, NULL, 0 } +}; + +static const char *rdf_nasm_stdmac[] = { + "%imacro library 1+.nolist", + "[library %1]", + "%endmacro", + "%imacro module 1+.nolist", + "[module %1]", + "%endmacro", + NULL +}; + +static const yasm_stdmac rdf_objfmt_stdmacs[] = { + { "nasm", "nasm", rdf_nasm_stdmac }, + { NULL, NULL, NULL } +}; + +/* Define objfmt structure -- see objfmt.h for details */ +yasm_objfmt_module yasm_rdf_LTX_objfmt = { + "Relocatable Dynamic Object File Format (RDOFF) v2.0", + "rdf", + "rdf", + 32, + 0, + rdf_objfmt_dbgfmt_keywords, + "null", + rdf_objfmt_directives, + rdf_objfmt_stdmacs, + rdf_objfmt_create, + rdf_objfmt_output, + rdf_objfmt_destroy, + rdf_objfmt_add_default_section, + rdf_objfmt_init_new_section, + rdf_objfmt_section_switch, + rdf_objfmt_get_special_sym +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/Makefile.inc new file mode 100644 index 0000000000..c547e8fd1b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/Makefile.inc @@ -0,0 +1,23 @@ +TESTS += modules/objfmts/rdf/tests/rdf_test.sh + +EXTRA_DIST += modules/objfmts/rdf/tests/rdf_test.sh +EXTRA_DIST += modules/objfmts/rdf/tests/rdfabs.asm +EXTRA_DIST += modules/objfmts/rdf/tests/rdfabs.errwarn +EXTRA_DIST += modules/objfmts/rdf/tests/rdfabs.hex +EXTRA_DIST += modules/objfmts/rdf/tests/rdfext.asm +EXTRA_DIST += modules/objfmts/rdf/tests/rdfext.hex +EXTRA_DIST += modules/objfmts/rdf/tests/rdfseg.asm +EXTRA_DIST += modules/objfmts/rdf/tests/rdfseg.hex +EXTRA_DIST += modules/objfmts/rdf/tests/rdfseg2.asm +EXTRA_DIST += modules/objfmts/rdf/tests/rdfseg2.hex +EXTRA_DIST += modules/objfmts/rdf/tests/rdftest1.asm +EXTRA_DIST += modules/objfmts/rdf/tests/rdftest1.hex +EXTRA_DIST += modules/objfmts/rdf/tests/rdftest2.asm +EXTRA_DIST += modules/objfmts/rdf/tests/rdftest2.hex +EXTRA_DIST += modules/objfmts/rdf/tests/rdtlib.asm +EXTRA_DIST += modules/objfmts/rdf/tests/rdtlib.hex +EXTRA_DIST += modules/objfmts/rdf/tests/rdtmain.asm +EXTRA_DIST += modules/objfmts/rdf/tests/rdtmain.hex +EXTRA_DIST += modules/objfmts/rdf/tests/testlib.asm +EXTRA_DIST += modules/objfmts/rdf/tests/testlib.hex + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdf_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdf_test.sh new file mode 100755 index 0000000000..465843956c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdf_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh rdf_test modules/objfmts/rdf/tests "rdf objfmt" "-f rdf" ".rdf" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfabs.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfabs.asm new file mode 100644 index 0000000000..c6de90d437 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfabs.asm @@ -0,0 +1,7 @@ +absolute 0x5000 +label + +label2 equ 0x9999 + +global label +global label2 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfabs.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfabs.errwarn new file mode 100644 index 0000000000..ecaaa3b505 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfabs.errwarn @@ -0,0 +1,2 @@ +-:6: warning: rdf does not support exporting EQU/absolute values +-:7: warning: rdf does not support exporting EQU/absolute values diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfabs.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfabs.hex new file mode 100644 index 0000000000..ad42b02751 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfabs.hex @@ -0,0 +1,24 @@ +52 +44 +4f +46 +46 +32 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfext.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfext.asm new file mode 100644 index 0000000000..8bf5ea0fc8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfext.asm @@ -0,0 +1,63 @@ +module thismodule +module $thismodule +global foo:export +global bar:export proc +global bar2:export function +global baz:export data +global baz2:export object +extern extvar:import +extern func:proc +extern farfunc:far +library alib.rdl +common cvar 16:32 + +foo: +dd 0 +bar: +dd 0 +bar2: +dd 0 +call func +call farfunc ; generates a near call! +call far farfunc + +mov ax, seg farfunc +mov ax, farfunc +mov eax, farfunc + +mov eax, cvar + +section .data +baz: +dd 0 +baz2: +dd 0 + +section .bss +resb 4 + +;section a null + +section b text +dd 0 + +section c code +dd 0 + +section d data +dd 0 + +section e comment,5 ; after comma is reserved value +dd 0 + +section f lcomment +dd 0 + +section g pcomment,8 +dd 0 + +section h symdebug +dd 0 + +section i linedebug +dd 0 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfext.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfext.hex new file mode 100644 index 0000000000..13693134cd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfext.hex @@ -0,0 +1,447 @@ +52 +44 +4f +46 +46 +32 +b5 +01 +00 +00 +ec +00 +00 +00 +08 +0b +74 +68 +69 +73 +6d +6f +64 +75 +6c +65 +00 +08 +0c +24 +74 +68 +69 +73 +6d +6f +64 +75 +6c +65 +00 +04 +09 +61 +6c +69 +62 +2e +72 +64 +6c +00 +03 +0a +04 +00 +00 +00 +00 +00 +66 +6f +6f +00 +03 +0a +06 +00 +04 +00 +00 +00 +62 +61 +72 +00 +03 +0b +06 +00 +08 +00 +00 +00 +62 +61 +72 +32 +00 +03 +0a +05 +01 +00 +00 +00 +00 +62 +61 +7a +00 +03 +0b +05 +01 +04 +00 +00 +00 +62 +61 +7a +32 +00 +02 +0a +08 +0b +00 +65 +78 +74 +76 +61 +72 +00 +02 +08 +02 +0c +00 +66 +75 +6e +63 +00 +07 +0b +00 +0d +00 +66 +61 +72 +66 +75 +6e +63 +00 +0a +0d +0e +00 +10 +00 +00 +00 +20 +00 +63 +76 +61 +72 +00 +01 +08 +40 +0d +00 +00 +00 +04 +0c +00 +01 +08 +40 +12 +00 +00 +00 +04 +0d +00 +01 +08 +00 +17 +00 +00 +00 +04 +0d +00 +06 +08 +00 +1b +00 +00 +00 +02 +0d +00 +06 +08 +00 +1f +00 +00 +00 +02 +0d +00 +01 +08 +00 +23 +00 +00 +00 +02 +0d +00 +01 +08 +00 +26 +00 +00 +00 +04 +0d +00 +01 +08 +00 +2b +00 +00 +00 +04 +0e +00 +05 +04 +04 +00 +00 +00 +01 +00 +00 +00 +00 +00 +2f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e8 +ef +ff +ff +ff +e8 +ea +ff +ff +ff +9a +00 +00 +00 +00 +00 +00 +66 +b8 +00 +00 +66 +b8 +00 +00 +b8 +00 +00 +00 +00 +b8 +00 +00 +00 +00 +02 +00 +01 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +01 +00 +04 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +02 +00 +05 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +05 +00 +04 +00 +00 +00 +00 +00 +00 +00 +04 +00 +07 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +05 +00 +08 +00 +08 +00 +04 +00 +00 +00 +00 +00 +00 +00 +06 +00 +09 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +07 +00 +0a +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg.asm new file mode 100644 index 0000000000..4c6f587be9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg.asm @@ -0,0 +1,20 @@ + ;; program to test inter-segment production and linkage of RDF objects + + ;; [1] should produce segment base ref + ;; [2] should produce standard relocation + +[GLOBAL _main] +[EXTERN _puts: far] +[BITS 16] + +_main: + mov ax, seg _message ; 0000 [1] + mov ds, ax ; 0003 + mov dx, _message ; 0005 [2] + call far _puts ; 0008 [2][1] + xor ax,ax ; 000D + int 21h ; 000F + +[SECTION .data] +_message: db 'Hello, World', 10, 13, 0 + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg.hex new file mode 100644 index 0000000000..302ceb5b74 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg.hex @@ -0,0 +1,141 @@ +52 +44 +4f +46 +46 +32 +83 +00 +00 +00 +41 +00 +00 +00 +03 +0c +00 +00 +00 +00 +00 +00 +5f +6d +61 +69 +6e +00 +07 +09 +00 +02 +00 +5f +70 +75 +74 +73 +00 +06 +08 +00 +01 +00 +00 +00 +02 +01 +00 +01 +08 +00 +06 +00 +00 +00 +02 +01 +00 +01 +08 +00 +09 +00 +00 +00 +02 +02 +00 +06 +08 +00 +0b +00 +00 +00 +02 +02 +00 +01 +00 +00 +00 +00 +00 +11 +00 +00 +00 +b8 +00 +00 +8e +d8 +ba +00 +00 +9a +00 +00 +00 +00 +31 +c0 +cd +21 +02 +00 +01 +00 +00 +00 +0f +00 +00 +00 +48 +65 +6c +6c +6f +2c +20 +57 +6f +72 +6c +64 +0a +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg2.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg2.asm new file mode 100644 index 0000000000..2b9e4fd099 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg2.asm @@ -0,0 +1,12 @@ + ;; library function for rdfseg - this file is linked as a far segment + +[BITS 16] +[GLOBAL _puts] +_puts: + ;; can't remember how to print a string in DOS, but if anyone wants + ;; to actually test this program, it should be fairly easy to put + ;; in here! + + retf + + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg2.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg2.hex new file mode 100644 index 0000000000..157a99a5a5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdfseg2.hex @@ -0,0 +1,49 @@ +52 +44 +4f +46 +46 +32 +27 +00 +00 +00 +0e +00 +00 +00 +03 +0c +00 +00 +00 +00 +00 +00 +5f +70 +75 +74 +73 +00 +01 +00 +00 +00 +00 +00 +01 +00 +00 +00 +cb +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdftest1.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdftest1.asm new file mode 100644 index 0000000000..76f1e43e1a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdftest1.asm @@ -0,0 +1,54 @@ + ;; program to test RDOFF production and linkage + + ;; items to test include: + ;; [1] relocation within the same segment in each module + ;; [2] relocation to different segments in same module + ;; [3] relocation to same segment in different module + ;; [4] relocation to different segment in different module + ;; [5] relative relocation to same module + ;; [6] relative relocation to different module + ;; [7] correct generation of BSS addresses + +[SECTION .text] +[BITS 32] + +_main: + mov ax,localdata ; [2] (16 bit) => 66 b8 0000 + mov eax,localdata2 ; [2] (32 bit) => b8 0000000a + +[EXTERN _fardata] + + mov eax,[_fardata] ; [4] => a1 00000000 (+20) + mov cx,next ; [1] => 66 b9 0012 +next: + call localproc ; [5] => e8 00000019 + +[EXTERN _farproc] + mov eax,_farproc ; [3] => b8 00000000 (+40+0) + call _farproc ; [6] => e8 -$ (-0+40+0) (=1f) + + mov eax,localbss ; [7] => b8 00000000 + +[GLOBAL _term] +_term: xor ax,ax ; => 66 31 c0 + int 21h ; => cd 21 + jmp _term ; => e9 -0a (=fffffff6) + +localproc: + ret ; => c3 + +[GLOBAL _test1proc] +_test1proc: + call localproc ; [5] => e8 -$ (-0+0+?) (=-6=fffffffa) + ret ; => c3 + +[SECTION .data] +[GLOBAL localdata2] +localdata: db 'localdata',0 +localdata2: db 'localdata2',0 +farref: dd _fardata ; [3] => 0 (+20) +localref: dd _main ; [2] => 0 (+0) + +[SECTION .bss] +localbss: resw 4 ; reserve 8 bytes BSS + \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdftest1.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdftest1.hex new file mode 100644 index 0000000000..a8a86bc730 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdftest1.hex @@ -0,0 +1,301 @@ +52 +44 +4f +46 +46 +32 +23 +01 +00 +00 +b0 +00 +00 +00 +03 +11 +00 +01 +0a +00 +00 +00 +6c +6f +63 +61 +6c +64 +61 +74 +61 +32 +00 +02 +0c +00 +03 +00 +5f +66 +61 +72 +64 +61 +74 +61 +00 +02 +0c +00 +04 +00 +5f +66 +61 +72 +70 +72 +6f +63 +00 +03 +0c +00 +00 +26 +00 +00 +00 +5f +74 +65 +72 +6d +00 +03 +11 +00 +00 +2e +00 +00 +00 +5f +74 +65 +73 +74 +31 +70 +72 +6f +63 +00 +01 +08 +00 +02 +00 +00 +00 +02 +01 +00 +01 +08 +00 +05 +00 +00 +00 +04 +01 +00 +01 +08 +00 +0a +00 +00 +00 +04 +03 +00 +01 +08 +00 +10 +00 +00 +00 +02 +00 +00 +01 +08 +00 +18 +00 +00 +00 +04 +04 +00 +01 +08 +40 +1d +00 +00 +00 +04 +04 +00 +01 +08 +00 +22 +00 +00 +00 +04 +02 +00 +01 +08 +01 +15 +00 +00 +00 +04 +03 +00 +01 +08 +01 +19 +00 +00 +00 +04 +00 +00 +05 +04 +08 +00 +00 +00 +01 +00 +00 +00 +00 +00 +34 +00 +00 +00 +66 +b8 +00 +00 +b8 +0a +00 +00 +00 +a1 +00 +00 +00 +00 +66 +b9 +12 +00 +e8 +16 +00 +00 +00 +b8 +00 +00 +00 +00 +e8 +df +ff +ff +ff +b8 +00 +00 +00 +00 +66 +31 +c0 +cd +21 +eb +f9 +c3 +e8 +fa +ff +ff +ff +c3 +02 +00 +01 +00 +00 +00 +1d +00 +00 +00 +6c +6f +63 +61 +6c +64 +61 +74 +61 +00 +6c +6f +63 +61 +6c +64 +61 +74 +61 +32 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdftest2.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdftest2.asm new file mode 100644 index 0000000000..25b8c1892e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdftest2.asm @@ -0,0 +1,33 @@ + ;; rdftest2.asm - test linkage and generation of RDOFF files + +[SECTION .text] +[BITS 32] + +[GLOBAL _farproc] +[EXTERN _test1proc] +[EXTERN localdata2] +[EXTERN _term] +_farproc: + + mov bx,localdata2 ; [4] 0 => 66 bb 000a(+0) + mov eax,_term ; [3] 5 => b8 00000000(+26+0) + call _test1proc ; [6] A => e8 fffffff2(-40+0+31)(=ffffffe3) + + mov eax,_farproc ; [1] => b8 00000000(+40) + add eax,[_fardata] ; [2] => 03 05 00000000(+20) + + mov ebx,mybssdata ; [7] => bb 00000000(+08) + call myproc ; [5] => e8 00000001 + ret + +myproc: + add eax,ebx + ret + +[SECTION .data] +[GLOBAL _fardata] +_fardata: dw _term ; [4] +_localref: dd _farproc ; [2] + +[SECTION .bss] +mybssdata: resw 1 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdftest2.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdftest2.hex new file mode 100644 index 0000000000..1e6b89f924 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdftest2.hex @@ -0,0 +1,252 @@ +52 +44 +4f +46 +46 +32 +f2 +00 +00 +00 +a3 +00 +00 +00 +03 +0f +00 +00 +00 +00 +00 +00 +5f +66 +61 +72 +70 +72 +6f +63 +00 +02 +0e +00 +03 +00 +5f +74 +65 +73 +74 +31 +70 +72 +6f +63 +00 +02 +0e +00 +04 +00 +6c +6f +63 +61 +6c +64 +61 +74 +61 +32 +00 +02 +09 +00 +05 +00 +5f +74 +65 +72 +6d +00 +03 +0f +00 +01 +00 +00 +00 +00 +5f +66 +61 +72 +64 +61 +74 +61 +00 +01 +08 +00 +02 +00 +00 +00 +02 +04 +00 +01 +08 +00 +05 +00 +00 +00 +04 +05 +00 +01 +08 +40 +0a +00 +00 +00 +04 +03 +00 +01 +08 +00 +0f +00 +00 +00 +04 +00 +00 +01 +08 +00 +15 +00 +00 +00 +04 +01 +00 +01 +08 +00 +1a +00 +00 +00 +04 +02 +00 +01 +08 +01 +00 +00 +00 +00 +02 +05 +00 +01 +08 +01 +02 +00 +00 +00 +04 +00 +00 +05 +04 +02 +00 +00 +00 +01 +00 +00 +00 +00 +00 +27 +00 +00 +00 +66 +bb +00 +00 +b8 +00 +00 +00 +00 +e8 +f2 +ff +ff +ff +b8 +00 +00 +00 +00 +03 +05 +00 +00 +00 +00 +bb +00 +00 +00 +00 +e8 +01 +00 +00 +00 +c3 +01 +d8 +c3 +02 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdtlib.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdtlib.asm new file mode 100644 index 0000000000..6c2b8ec9a2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdtlib.asm @@ -0,0 +1,48 @@ + ;; library functions for rdtmain - test of rdx linking and execution + + ;; library function = _strcmp, defined as in C + +[SECTION .text] +[BITS 32] + +[GLOBAL _strcmp] +_strcmp: + push ebp + mov ebp,esp + + ;; ebp+8 = first paramater, ebp+12 = second + + mov esi,[ebp+8] + mov edi,[ebp+12] + +.loop: + mov cl,byte [esi] + mov dl,byte [edi] + cmp cl,dl + jb .below + ja .above + or cl,cl + jz .match + inc esi + inc edi + jmp .loop + +.below: + mov eax,-1 + pop ebp + ret + +.above: + mov eax,1 + pop ebp + ret + +.match: + xor eax,eax + pop ebp + ret + +[SECTION .data] +[GLOBAL _message] + +_message: db 'hello',0 \ No newline at end of file diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdtlib.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdtlib.hex new file mode 100644 index 0000000000..107b0ab5d8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdtlib.hex @@ -0,0 +1,128 @@ +52 +44 +4f +46 +46 +32 +76 +00 +00 +00 +21 +00 +00 +00 +03 +0e +00 +00 +00 +00 +00 +00 +5f +73 +74 +72 +63 +6d +70 +00 +03 +0f +00 +01 +00 +00 +00 +00 +5f +6d +65 +73 +73 +61 +67 +65 +00 +01 +00 +00 +00 +00 +00 +2d +00 +00 +00 +55 +89 +e5 +8b +75 +08 +8b +7d +0c +8a +0e +8a +17 +38 +d1 +72 +0a +77 +0f +08 +c9 +74 +12 +46 +47 +eb +ee +b8 +ff +ff +ff +ff +5d +c3 +b8 +01 +00 +00 +00 +5d +c3 +31 +c0 +5d +c3 +02 +00 +01 +00 +00 +00 +06 +00 +00 +00 +68 +65 +6c +6c +6f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdtmain.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdtmain.asm new file mode 100644 index 0000000000..626a2e2957 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdtmain.asm @@ -0,0 +1,47 @@ + ;; rdtmain - main part of test program for RDX execution. + ;; returns true (0) if its parameter equals the phrase "hello" + ;; "hello" is stored in the library part, to complicate the + ;; linkage. + + ;; assemble and link with the following commands: + ;; nasm -f rdf rdtmain.asm + ;; nasm -f rdf rdtlib.asm + ;; ldrdf rdtmain.rdf rdtlib.rdf -o rdxtest.rdx + + ;; run with 'rdx rdxtest.rdx [parameters]' on a Linux (or possibly + ;; other 32 bit OS) systems (x86 architectures only!) + ;; try using '&& echo Yes' afterwards to find out when it returns 0. + +[EXTERN _strcmp] ; strcmp is an imported function +[EXTERN _message] ; imported data +[SECTION .text] +[BITS 32] + + ;; main(int argc,char **argv) +[GLOBAL _main] +_main: + push ebp + mov ebp,esp + + ;; ebp+8 = argc, ebp+12 = argv + + cmp dword [ebp+8],2 + jb error ; cause error if < 1 parameters + + mov eax, [ebp+12] ; eax = argv + + mov ebx, [eax+4] ; ebx = argv[1] + mov ecx, _message ; ecx = "hello" + + push ecx + push ebx + call _strcmp ; compare strings + add esp,8 ; caller clears stack + + pop ebp + ret ; return return value of _strcmp + +error: + mov eax,2 ; return 2 on error + pop ebp + ret diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdtmain.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdtmain.hex new file mode 100644 index 0000000000..5af817d9e7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/rdtmain.hex @@ -0,0 +1,134 @@ +52 +44 +4f +46 +46 +32 +7c +00 +00 +00 +3d +00 +00 +00 +02 +0b +00 +01 +00 +5f +73 +74 +72 +63 +6d +70 +00 +02 +0c +00 +02 +00 +5f +6d +65 +73 +73 +61 +67 +65 +00 +03 +0c +00 +00 +00 +00 +00 +00 +5f +6d +61 +69 +6e +00 +01 +08 +00 +10 +00 +00 +00 +04 +02 +00 +01 +08 +40 +17 +00 +00 +00 +04 +01 +00 +01 +00 +00 +00 +00 +00 +27 +00 +00 +00 +55 +89 +e5 +83 +7d +08 +02 +72 +17 +8b +45 +0c +8b +58 +04 +b9 +00 +00 +00 +00 +51 +53 +e8 +e5 +ff +ff +ff +83 +c4 +08 +5d +c3 +b8 +02 +00 +00 +00 +5d +c3 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/testlib.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/testlib.asm new file mode 100644 index 0000000000..6ee3d89a8f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/testlib.asm @@ -0,0 +1,18 @@ +; program to test retrieval of and linkage to modules in libraries by +; ldrdf + +[SECTION .text] +[GLOBAL _main] +[EXTERN _strcmp] + +_main: + push dword string1 + push dword string2 + call _strcmp + add esp,8 ; doh! clear up stack ;-) + ret + +[SECTION .data] + +string1: db 'abc',0 ; try changing these strings and see +string2: db 'abd',0 ; what happens! diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/testlib.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/testlib.hex new file mode 100644 index 0000000000..0067d611f8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/rdf/tests/testlib.hex @@ -0,0 +1,128 @@ +52 +44 +4f +46 +46 +32 +76 +00 +00 +00 +39 +00 +00 +00 +03 +0c +00 +00 +00 +00 +00 +00 +5f +6d +61 +69 +6e +00 +02 +0b +00 +02 +00 +5f +73 +74 +72 +63 +6d +70 +00 +01 +08 +00 +01 +00 +00 +00 +04 +01 +00 +01 +08 +00 +06 +00 +00 +00 +04 +01 +00 +01 +08 +40 +0b +00 +00 +00 +04 +02 +00 +01 +00 +00 +00 +00 +00 +13 +00 +00 +00 +68 +00 +00 +00 +00 +68 +04 +00 +00 +00 +e8 +f1 +ff +ff +ff +83 +c4 +08 +c3 +02 +00 +01 +00 +00 +00 +08 +00 +00 +00 +61 +62 +63 +00 +61 +62 +64 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/Makefile.inc new file mode 100644 index 0000000000..5b3b16263e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/Makefile.inc @@ -0,0 +1,7 @@ +# Assume objfmt_coff is included + +YASM_MODULES += objfmt_win32 + +EXTRA_DIST += modules/objfmts/win32/tests/Makefile.inc + +include modules/objfmts/win32/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/Makefile.inc new file mode 100644 index 0000000000..3f2ab9437c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/Makefile.inc @@ -0,0 +1,21 @@ +TESTS += modules/objfmts/win32/tests/win32_test.sh + +EXTRA_DIST += modules/objfmts/win32/tests/export.asm +EXTRA_DIST += modules/objfmts/win32/tests/export.hex +EXTRA_DIST += modules/objfmts/win32/tests/win32_test.sh +EXTRA_DIST += modules/objfmts/win32/tests/win32-curpos.asm +EXTRA_DIST += modules/objfmts/win32/tests/win32-curpos.hex +EXTRA_DIST += modules/objfmts/win32/tests/win32-overdef.asm +EXTRA_DIST += modules/objfmts/win32/tests/win32-overdef.hex +EXTRA_DIST += modules/objfmts/win32/tests/win32-safeseh.asm +EXTRA_DIST += modules/objfmts/win32/tests/win32-safeseh.hex +EXTRA_DIST += modules/objfmts/win32/tests/win32-safeseh.masm +EXTRA_DIST += modules/objfmts/win32/tests/win32-segof.asm +EXTRA_DIST += modules/objfmts/win32/tests/win32-segof.hex +EXTRA_DIST += modules/objfmts/win32/tests/win32test.c +EXTRA_DIST += modules/objfmts/win32/tests/win32test.asm +EXTRA_DIST += modules/objfmts/win32/tests/win32test.hex + +EXTRA_DIST += modules/objfmts/win32/tests/gas/Makefile.inc + +include modules/objfmts/win32/tests/gas/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/export.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/export.asm new file mode 100644 index 0000000000..0db0505919 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/export.asm @@ -0,0 +1,5 @@ +export foo +export foo2 +global foo2 +foo: +foo2: diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/export.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/export.hex new file mode 100644 index 0000000000..33ca9ffbde --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/export.hex @@ -0,0 +1,273 @@ +4c +01 +02 +00 +00 +00 +00 +00 +7d +00 +00 +00 +08 +00 +00 +00 +00 +00 +0c +01 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +50 +60 +2e +64 +72 +65 +63 +74 +76 +65 +00 +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +64 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +42 +2d +65 +78 +70 +6f +72 +74 +3a +66 +6f +6f +20 +2d +65 +78 +70 +6f +72 +74 +3a +66 +6f +6f +32 +20 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +66 +65 +61 +74 +2e +30 +30 +01 +00 +00 +00 +ff +ff +00 +00 +03 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +64 +72 +65 +63 +74 +76 +65 +00 +00 +00 +00 +02 +00 +00 +00 +03 +01 +19 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +66 +6f +6f +32 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +02 +00 +04 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/Makefile.inc new file mode 100644 index 0000000000..f492cbac88 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/Makefile.inc @@ -0,0 +1,9 @@ +TESTS += modules/objfmts/win32/tests/gas/win32_gas_test.sh + +EXTRA_DIST += modules/objfmts/win32/tests/gas/win32_gas_test.sh +EXTRA_DIST += modules/objfmts/win32/tests/gas/win32at.asm +EXTRA_DIST += modules/objfmts/win32/tests/gas/win32at.hex +EXTRA_DIST += modules/objfmts/win32/tests/gas/win32def.asm +EXTRA_DIST += modules/objfmts/win32/tests/gas/win32def.hex +EXTRA_DIST += modules/objfmts/win32/tests/gas/win32secrel32.asm +EXTRA_DIST += modules/objfmts/win32/tests/gas/win32secrel32.hex diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32_gas_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32_gas_test.sh new file mode 100755 index 0000000000..4a1bbe9874 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32_gas_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh win32_gas_test modules/objfmts/win32/tests/gas "win32 objfmt" "-f win32 -p gas" ".obj" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32at.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32at.asm new file mode 100644 index 0000000000..f56520a210 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32at.asm @@ -0,0 +1,167 @@ +.section .rodata +L2586: +.ascii "myWindowClass\0" +.globl _g_szClassName +_g_szClassName: +.byte 109 +.byte 121 +.byte 87 +.byte 105 +.byte 110 +.byte 100 +.byte 111 +.byte 119 +.byte 67 +.byte 108 +.byte 97 +.byte 115 +.byte 115 +.byte 0 +.text +.align 4 +.globl _WndProc@16 +_WndProc@16: +pushl %ebp +movl %esp,%ebp +subl $8,%esp +L2588: +L2590: +movl 12(%ebp),%eax +movl %eax,-4(%ebp) +jmp L2592 +L2593: +pushl 8(%ebp) +call _DestroyWindow@4 +jmp L2591 +L2594: +pushl $0 +call _PostQuitMessage@4 +jmp L2591 +L2595: +pushl 20(%ebp) +pushl 16(%ebp) +pushl 12(%ebp) +pushl 8(%ebp) +call _DefWindowProcA@16 +movl %eax,-8(%ebp) +jmp L2589 +L2592: +cmpl $2,-4(%ebp) +je L2594 +cmpl $16,-4(%ebp) +je L2593 +jmp L2595 +L2591: +movl $0,-8(%ebp) +jmp L2589 +L2589: +movl -8(%ebp),%eax +leave +ret $16 +.section .rodata +L2600: +.ascii "Window Registration Failed!\0" +L2601: +.ascii "Error!\0" +L2602: +.ascii "The title of my window\0" +L2604: +.ascii "Window Creation Failed!\0" +.text +.align 4 +.globl _WinMain@16 +_WinMain@16: +pushl %ebp +movl %esp,%ebp +subl $84,%esp +L2596: +L2598: +movl $48,-48(%ebp) +movl $0,-44(%ebp) +movl $_WndProc@16,-40(%ebp) +movl $0,-36(%ebp) +movl $0,-32(%ebp) +movl 8(%ebp),%eax +movl %eax,-28(%ebp) +pushl $32512 +pushl $0 +call _LoadIconA@8 +movl %eax,-24(%ebp) +pushl $32512 +pushl $0 +call _LoadCursorA@8 +movl %eax,-20(%ebp) +movl $6,-16(%ebp) +movl $0,-12(%ebp) +movl $_g_szClassName,-8(%ebp) +pushl $32512 +pushl $0 +call _LoadIconA@8 +movl %eax,-4(%ebp) +leal -48(%ebp),%edx +pushl %edx +call _RegisterClassExA@4 +cmpw $0,%ax +jne L2599 +pushl $48 +pushl $L2601 +pushl $L2600 +pushl $0 +call _MessageBoxA@16 +movl $0,-84(%ebp) +jmp L2597 +L2599: +pushl $0 +pushl 8(%ebp) +pushl $0 +pushl $0 +pushl $120 +pushl $240 +pushl $-2147483648 +pushl $-2147483648 +pushl $13565952 +pushl $L2602 +pushl $_g_szClassName +pushl $512 +call _CreateWindowExA@48 +movl %eax,-52(%ebp) +cmpl $0,-52(%ebp) +jne L2603 +pushl $48 +pushl $L2601 +pushl $L2604 +pushl $0 +call _MessageBoxA@16 +movl $0,-84(%ebp) +jmp L2597 +L2603: +pushl 20(%ebp) +pushl -52(%ebp) +call _ShowWindow@8 +pushl -52(%ebp) +call _UpdateWindow@4 +L2605: +pushl $0 +pushl $0 +pushl $0 +leal -80(%ebp),%edx +pushl %edx +call _GetMessageA@16 +cmpl $0,%eax +jle L2606 +leal -80(%ebp),%eax +pushl %eax +call _TranslateMessage@4 +leal -80(%ebp),%eax +pushl %eax +call _DispatchMessageA@4 +jmp L2605 +L2606: +movl -72(%ebp),%eax +movl %eax,-84(%ebp) +jmp L2597 +L2597: +movl -84(%ebp),%eax +leave +ret $16 +.ident "PCC: pcc 0.9.9 (win32)" diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32at.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32at.hex new file mode 100644 index 0000000000..d7bf5a0c37 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32at.hex @@ -0,0 +1,1653 @@ +4c +01 +03 +00 +00 +00 +00 +00 +91 +03 +00 +00 +19 +00 +00 +00 +00 +00 +0c +01 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +99 +01 +00 +00 +8c +00 +00 +00 +25 +02 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +20 +00 +50 +60 +2e +72 +6f +64 +61 +74 +61 +00 +99 +01 +00 +00 +00 +00 +00 +00 +6e +00 +00 +00 +0b +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +40 +40 +2f +34 +00 +00 +00 +00 +00 +00 +07 +02 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +79 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +40 +40 +55 +89 +e5 +83 +ec +08 +8b +45 +0c +89 +45 +fc +eb +29 +ff +75 +08 +e8 +00 +00 +00 +00 +eb +2d +6a +00 +e8 +00 +00 +00 +00 +eb +24 +ff +75 +14 +ff +75 +10 +ff +75 +0c +ff +75 +08 +e8 +00 +00 +00 +00 +89 +45 +f8 +eb +17 +83 +7d +fc +02 +74 +db +83 +7d +fc +10 +74 +cb +eb +dc +c7 +45 +f8 +00 +00 +00 +00 +eb +00 +8b +45 +f8 +c9 +c2 +10 +00 +8d +76 +00 +55 +89 +e5 +83 +ec +54 +c7 +45 +d0 +30 +00 +00 +00 +c7 +45 +d4 +00 +00 +00 +00 +c7 +45 +d8 +00 +00 +00 +00 +c7 +45 +dc +00 +00 +00 +00 +c7 +45 +e0 +00 +00 +00 +00 +8b +45 +08 +89 +45 +e4 +68 +00 +7f +00 +00 +6a +00 +e8 +00 +00 +00 +00 +89 +45 +e8 +68 +00 +7f +00 +00 +6a +00 +e8 +00 +00 +00 +00 +89 +45 +ec +c7 +45 +f0 +06 +00 +00 +00 +c7 +45 +f4 +00 +00 +00 +00 +c7 +45 +f8 +0e +00 +00 +00 +68 +00 +7f +00 +00 +6a +00 +e8 +00 +00 +00 +00 +89 +45 +fc +8d +55 +d0 +52 +e8 +00 +00 +00 +00 +66 +83 +f8 +00 +75 +1f +6a +30 +68 +38 +00 +00 +00 +68 +1c +00 +00 +00 +6a +00 +e8 +00 +00 +00 +00 +c7 +45 +ac +00 +00 +00 +00 +e9 +9b +00 +00 +00 +6a +00 +ff +75 +08 +6a +00 +6a +00 +6a +78 +68 +f0 +00 +00 +00 +68 +00 +00 +00 +80 +68 +00 +00 +00 +80 +68 +00 +00 +cf +00 +68 +3f +00 +00 +00 +68 +0e +00 +00 +00 +68 +00 +02 +00 +00 +e8 +00 +00 +00 +00 +89 +45 +cc +83 +7d +cc +00 +75 +1c +6a +30 +68 +38 +00 +00 +00 +68 +56 +00 +00 +00 +6a +00 +e8 +00 +00 +00 +00 +c7 +45 +ac +00 +00 +00 +00 +eb +43 +ff +75 +14 +ff +75 +cc +e8 +00 +00 +00 +00 +ff +75 +cc +e8 +00 +00 +00 +00 +6a +00 +6a +00 +6a +00 +8d +55 +b0 +52 +e8 +00 +00 +00 +00 +83 +f8 +00 +7e +14 +8d +45 +b0 +50 +e8 +00 +00 +00 +00 +8d +45 +b0 +50 +e8 +00 +00 +00 +00 +eb +d8 +8b +45 +b8 +89 +45 +ac +eb +00 +8b +45 +ac +c9 +c2 +10 +00 +12 +00 +00 +00 +09 +00 +00 +00 +14 +00 +1b +00 +00 +00 +0a +00 +00 +00 +14 +00 +2e +00 +00 +00 +0b +00 +00 +00 +14 +00 +6f +00 +00 +00 +03 +00 +00 +00 +06 +00 +8f +00 +00 +00 +0d +00 +00 +00 +14 +00 +9e +00 +00 +00 +0e +00 +00 +00 +14 +00 +b6 +00 +00 +00 +05 +00 +00 +00 +06 +00 +c2 +00 +00 +00 +0d +00 +00 +00 +14 +00 +ce +00 +00 +00 +0f +00 +00 +00 +14 +00 +db +00 +00 +00 +05 +00 +00 +00 +06 +00 +e0 +00 +00 +00 +05 +00 +00 +00 +06 +00 +e7 +00 +00 +00 +10 +00 +00 +00 +14 +00 +17 +01 +00 +00 +05 +00 +00 +00 +06 +00 +1c +01 +00 +00 +05 +00 +00 +00 +06 +00 +26 +01 +00 +00 +11 +00 +00 +00 +14 +00 +36 +01 +00 +00 +05 +00 +00 +00 +06 +00 +3b +01 +00 +00 +05 +00 +00 +00 +06 +00 +42 +01 +00 +00 +10 +00 +00 +00 +14 +00 +56 +01 +00 +00 +12 +00 +00 +00 +14 +00 +5e +01 +00 +00 +13 +00 +00 +00 +14 +00 +6d +01 +00 +00 +14 +00 +00 +00 +14 +00 +7b +01 +00 +00 +15 +00 +00 +00 +14 +00 +84 +01 +00 +00 +16 +00 +00 +00 +14 +00 +6d +79 +57 +69 +6e +64 +6f +77 +43 +6c +61 +73 +73 +00 +6d +79 +57 +69 +6e +64 +6f +77 +43 +6c +61 +73 +73 +00 +57 +69 +6e +64 +6f +77 +20 +52 +65 +67 +69 +73 +74 +72 +61 +74 +69 +6f +6e +20 +46 +61 +69 +6c +65 +64 +21 +00 +45 +72 +72 +6f +72 +21 +00 +54 +68 +65 +20 +74 +69 +74 +6c +65 +20 +6f +66 +20 +6d +79 +20 +77 +69 +6e +64 +6f +77 +00 +57 +69 +6e +64 +6f +77 +20 +43 +72 +65 +61 +74 +69 +6f +6e +20 +46 +61 +69 +6c +65 +64 +21 +00 +00 +50 +43 +43 +3a +20 +70 +63 +63 +20 +30 +2e +39 +2e +39 +20 +28 +77 +69 +6e +33 +32 +29 +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +66 +65 +61 +74 +2e +30 +30 +01 +00 +00 +00 +ff +ff +00 +00 +03 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +99 +01 +00 +00 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +72 +6f +64 +61 +74 +61 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +01 +6e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +0e +00 +00 +00 +02 +00 +00 +00 +02 +00 +00 +00 +00 +00 +1e +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +2a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +3b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +4e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +61 +00 +00 +00 +58 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +6d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +7a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +89 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +9d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +ad +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +c1 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +cf +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +df +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +ef +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +03 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +17 +01 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +03 +01 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +01 +00 +00 +2e +72 +64 +61 +74 +61 +24 +7a +7a +7a +00 +5f +67 +5f +73 +7a +43 +6c +61 +73 +73 +4e +61 +6d +65 +00 +5f +57 +6e +64 +50 +72 +6f +63 +40 +31 +36 +00 +5f +44 +65 +73 +74 +72 +6f +79 +57 +69 +6e +64 +6f +77 +40 +34 +00 +5f +50 +6f +73 +74 +51 +75 +69 +74 +4d +65 +73 +73 +61 +67 +65 +40 +34 +00 +5f +44 +65 +66 +57 +69 +6e +64 +6f +77 +50 +72 +6f +63 +41 +40 +31 +36 +00 +5f +57 +69 +6e +4d +61 +69 +6e +40 +31 +36 +00 +5f +4c +6f +61 +64 +49 +63 +6f +6e +41 +40 +38 +00 +5f +4c +6f +61 +64 +43 +75 +72 +73 +6f +72 +41 +40 +38 +00 +5f +52 +65 +67 +69 +73 +74 +65 +72 +43 +6c +61 +73 +73 +45 +78 +41 +40 +34 +00 +5f +4d +65 +73 +73 +61 +67 +65 +42 +6f +78 +41 +40 +31 +36 +00 +5f +43 +72 +65 +61 +74 +65 +57 +69 +6e +64 +6f +77 +45 +78 +41 +40 +34 +38 +00 +5f +53 +68 +6f +77 +57 +69 +6e +64 +6f +77 +40 +38 +00 +5f +55 +70 +64 +61 +74 +65 +57 +69 +6e +64 +6f +77 +40 +34 +00 +5f +47 +65 +74 +4d +65 +73 +73 +61 +67 +65 +41 +40 +31 +36 +00 +5f +54 +72 +61 +6e +73 +6c +61 +74 +65 +4d +65 +73 +73 +61 +67 +65 +40 +34 +00 +5f +44 +69 +73 +70 +61 +74 +63 +68 +4d +65 +73 +73 +61 +67 +65 +41 +40 +34 +00 +2e +72 +64 +61 +74 +61 +24 +7a +7a +7a +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32def.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32def.asm new file mode 100644 index 0000000000..e4764668e1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32def.asm @@ -0,0 +1,7 @@ +.globl label +label: + +.def label +.scl 2 +.type 32 +.endef diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32def.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32def.hex new file mode 100644 index 0000000000..bfedd51ba5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32def.hex @@ -0,0 +1,172 @@ +4c +01 +01 +00 +00 +00 +00 +00 +3c +00 +00 +00 +06 +00 +00 +00 +00 +00 +0c +01 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +50 +60 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +66 +65 +61 +74 +2e +30 +30 +01 +00 +00 +00 +ff +ff +00 +00 +03 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +61 +62 +65 +6c +00 +00 +00 +00 +00 +00 +00 +01 +00 +20 +00 +02 +00 +04 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32secrel32.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32secrel32.asm new file mode 100644 index 0000000000..0e8a82f754 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32secrel32.asm @@ -0,0 +1,80 @@ +# [oformat win32] +.text + + .ascii ">>>>" +pre04: .ascii "<<<<" + .ascii ">>>>>" +pre0d: .ascii "<<<" + .ascii ">>>>>>" +pre16: .ascii "<<" + .ascii ">>>>>>>" +pre1f: .ascii "<" + +.data + + .ascii ">>>>" +sam04: .ascii "<<<<" + .ascii ">>>>>" +sam0d: .ascii "<<<" + .ascii ">>>>>>" +sam16: .ascii "<<" + .ascii ">>>>>>>" +sam1f: .ascii "<" + + .ascii ">>>>" + .secrel32 pre04 + .byte 0x11 + .secrel32 pre0d + .byte 0x11 + .secrel32 pre16 + .byte 0x11 + .secrel32 pre1f + .byte 0x11 + .ascii "<<<<<<<<" + + .ascii ">>>>" + .secrel32 sam04 + .byte 0x11 + .secrel32 sam0d + .byte 0x11 + .secrel32 sam16 + .byte 0x11 + .secrel32 sam1f + .byte 0x11 + .ascii "<<<<<<<<" + + .ascii ">>>>" + .secrel32 nex04 + .byte 0x11 + .secrel32 nex0d + .byte 0x11 + .secrel32 nex16 + .byte 0x11 + .secrel32 nex1f + .byte 0x11 + .ascii "<<<<<<<<" + + .ascii ">>>>" + .secrel32 ext24 + .byte 0x11 + .secrel32 ext2d + .byte 0x11 + .secrel32 ext36 + .byte 0x11 + .secrel32 ext3f + .byte 0x11 + .ascii "<<<<<<<<" + +.section .rdata + + .ascii ">>>>" +nex04: .ascii "<<<<" + .ascii ">>>>>" +nex0d: .ascii "<<<" + .ascii ">>>>>>" +nex16: .ascii "<<" + .ascii ">>>>>>>" +nex1f: .ascii "<" + .ascii ">>>>" + + .p2align 4,0 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32secrel32.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32secrel32.hex new file mode 100644 index 0000000000..28cc8643cd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/gas/win32secrel32.hex @@ -0,0 +1,778 @@ +4c +01 +03 +00 +00 +00 +00 +00 +1c +02 +00 +00 +0d +00 +00 +00 +00 +00 +0c +01 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +8c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +50 +60 +2e +64 +61 +74 +61 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +a0 +00 +00 +00 +ac +00 +00 +00 +4c +01 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +40 +00 +30 +c0 +2e +72 +64 +61 +74 +61 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +ec +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +50 +40 +3e +3e +3e +3e +3c +3c +3c +3c +3e +3e +3e +3e +3e +3c +3c +3c +3e +3e +3e +3e +3e +3e +3c +3c +3e +3e +3e +3e +3e +3e +3e +3c +3e +3e +3e +3e +3c +3c +3c +3c +3e +3e +3e +3e +3e +3c +3c +3c +3e +3e +3e +3e +3e +3e +3c +3c +3e +3e +3e +3e +3e +3e +3e +3c +3e +3e +3e +3e +04 +00 +00 +00 +11 +0d +00 +00 +00 +11 +16 +00 +00 +00 +11 +1f +00 +00 +00 +11 +3c +3c +3c +3c +3c +3c +3c +3c +3e +3e +3e +3e +04 +00 +00 +00 +11 +0d +00 +00 +00 +11 +16 +00 +00 +00 +11 +1f +00 +00 +00 +11 +3c +3c +3c +3c +3c +3c +3c +3c +3e +3e +3e +3e +04 +00 +00 +00 +11 +0d +00 +00 +00 +11 +16 +00 +00 +00 +11 +1f +00 +00 +00 +11 +3c +3c +3c +3c +3c +3c +3c +3c +3e +3e +3e +3e +00 +00 +00 +00 +11 +00 +00 +00 +00 +11 +00 +00 +00 +00 +11 +00 +00 +00 +00 +11 +3c +3c +3c +3c +3c +3c +3c +3c +24 +00 +00 +00 +03 +00 +00 +00 +0b +00 +29 +00 +00 +00 +03 +00 +00 +00 +0b +00 +2e +00 +00 +00 +03 +00 +00 +00 +0b +00 +33 +00 +00 +00 +03 +00 +00 +00 +0b +00 +44 +00 +00 +00 +05 +00 +00 +00 +0b +00 +49 +00 +00 +00 +05 +00 +00 +00 +0b +00 +4e +00 +00 +00 +05 +00 +00 +00 +0b +00 +53 +00 +00 +00 +05 +00 +00 +00 +0b +00 +64 +00 +00 +00 +0b +00 +00 +00 +0b +00 +69 +00 +00 +00 +0b +00 +00 +00 +0b +00 +6e +00 +00 +00 +0b +00 +00 +00 +0b +00 +73 +00 +00 +00 +0b +00 +00 +00 +0b +00 +84 +00 +00 +00 +07 +00 +00 +00 +0b +00 +89 +00 +00 +00 +08 +00 +00 +00 +0b +00 +8e +00 +00 +00 +09 +00 +00 +00 +0b +00 +93 +00 +00 +00 +0a +00 +00 +00 +0b +00 +3e +3e +3e +3e +3c +3c +3c +3c +3e +3e +3e +3e +3e +3c +3c +3c +3e +3e +3e +3e +3e +3e +3c +3c +3e +3e +3e +3e +3e +3e +3e +3c +3e +3e +3e +3e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +66 +65 +61 +74 +2e +30 +30 +01 +00 +00 +00 +ff +ff +00 +00 +03 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +01 +a0 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +65 +78 +74 +32 +34 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +65 +78 +74 +32 +64 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +65 +78 +74 +33 +36 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +65 +78 +74 +33 +66 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +2e +72 +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +03 +01 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-curpos.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-curpos.asm new file mode 100644 index 0000000000..4599e9cbb7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-curpos.asm @@ -0,0 +1,27 @@ +global bar +global foo + +section .bar +bar: +dd foo-$ +dd baz-$ +call foo +call baz +foo: + +section .data +baz: +dd foo-$ +;dd $-foo ; illegal +dd baz-$ +dd $-baz +dd foo+4-$ ; with constant +dd $-baz+foo+4-$ ; both local and cross-segment (legal) +dd baz+foo+4-$-$ ; ditto, slightly different +;dd (bar-$)+(foo-$) ; illegal (too many cross-segment) +dd baz-$+baz-$ ; two from same segment + +section .text +mov dword [foo-$], 5 +mov eax, foo-$ +call foo diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-curpos.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-curpos.hex new file mode 100644 index 0000000000..bcedd9d57b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-curpos.hex @@ -0,0 +1,498 @@ +4c +01 +03 +00 +00 +00 +00 +00 +28 +01 +00 +00 +0b +00 +00 +00 +00 +00 +0c +01 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +00 +00 +00 +8c +00 +00 +00 +a0 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +20 +00 +50 +60 +2e +62 +61 +72 +00 +00 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +be +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +20 +00 +00 +60 +2e +64 +61 +74 +61 +00 +00 +00 +26 +00 +00 +00 +00 +00 +00 +00 +1c +00 +00 +00 +e4 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +40 +00 +30 +c0 +c7 +05 +18 +00 +00 +00 +05 +00 +00 +00 +b8 +17 +00 +00 +00 +e8 +12 +00 +00 +00 +02 +00 +00 +00 +07 +00 +00 +00 +14 +00 +0b +00 +00 +00 +07 +00 +00 +00 +14 +00 +10 +00 +00 +00 +07 +00 +00 +00 +14 +00 +12 +00 +00 +00 +04 +00 +00 +00 +e8 +05 +00 +00 +00 +e8 +00 +00 +00 +00 +04 +00 +00 +00 +09 +00 +00 +00 +14 +00 +0e +00 +00 +00 +09 +00 +00 +00 +14 +00 +16 +00 +00 +00 +fc +ff +ff +ff +08 +00 +00 +00 +1a +00 +00 +00 +2a +00 +00 +00 +06 +00 +00 +00 +d0 +ff +ff +ff +00 +00 +00 +00 +07 +00 +00 +00 +14 +00 +0c +00 +00 +00 +07 +00 +00 +00 +14 +00 +10 +00 +00 +00 +07 +00 +00 +00 +14 +00 +14 +00 +00 +00 +07 +00 +00 +00 +14 +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +66 +65 +61 +74 +2e +30 +30 +01 +00 +00 +00 +ff +ff +00 +00 +03 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +14 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +62 +61 +72 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +02 +00 +66 +6f +6f +00 +00 +00 +00 +00 +12 +00 +00 +00 +02 +00 +00 +00 +02 +00 +2e +62 +61 +72 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +01 +12 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +03 +01 +1c +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-overdef.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-overdef.asm new file mode 100644 index 0000000000..e42d1f485c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-overdef.asm @@ -0,0 +1,2 @@ +section .text align=64 + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-overdef.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-overdef.hex new file mode 100644 index 0000000000..fe0d6d7313 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-overdef.hex @@ -0,0 +1,154 @@ +4c +01 +01 +00 +00 +00 +00 +00 +3c +00 +00 +00 +05 +00 +00 +00 +00 +00 +0c +01 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +70 +60 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +66 +65 +61 +74 +2e +30 +30 +01 +00 +00 +00 +ff +ff +00 +00 +03 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-safeseh.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-safeseh.asm new file mode 100644 index 0000000000..9edd8ede48 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-safeseh.asm @@ -0,0 +1,5 @@ +MyHandler: + ret +safeseh MyHandler +extern MyHandler3 +safeseh MyHandler3 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-safeseh.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-safeseh.hex new file mode 100644 index 0000000000..d9a4cb5ddd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-safeseh.hex @@ -0,0 +1,296 @@ +4c +01 +02 +00 +00 +00 +00 +00 +6d +00 +00 +00 +09 +00 +00 +00 +00 +00 +0c +01 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +64 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +50 +60 +2e +73 +78 +64 +61 +74 +61 +00 +01 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +65 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +c3 +05 +00 +00 +00 +08 +00 +00 +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +66 +65 +61 +74 +2e +30 +30 +01 +00 +00 +00 +ff +ff +00 +00 +03 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +01 +00 +20 +00 +03 +00 +2e +73 +78 +64 +61 +74 +61 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +01 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +02 +00 +19 +00 +00 +00 +4d +79 +48 +61 +6e +64 +6c +65 +72 +00 +4d +79 +48 +61 +6e +64 +6c +65 +72 +33 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-safeseh.masm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-safeseh.masm new file mode 100644 index 0000000000..f165b9c335 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-safeseh.masm @@ -0,0 +1,10 @@ +.386 +.model flat +_TEXT SEGMENT USE32 PUBLIC 'CODE' +MyHandler proc +.safeseh MyHandler +MyHandler endp +_TEXT ENDS +MyHandler3 proto +.safeseh MyHandler3 +end diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-segof.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-segof.asm new file mode 100644 index 0000000000..5535cd0ff6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-segof.asm @@ -0,0 +1,10 @@ +extern value +mov ax, seg value +mov ds, ax + +mov ax, seg local +mov es, ax + +section .data + +local: diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-segof.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-segof.hex new file mode 100644 index 0000000000..fd400133ac --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32-segof.hex @@ -0,0 +1,280 @@ +4c +01 +02 +00 +00 +00 +00 +00 +84 +00 +00 +00 +08 +00 +00 +00 +00 +00 +0c +01 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +64 +00 +00 +00 +70 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +20 +00 +50 +60 +2e +64 +61 +74 +61 +00 +00 +00 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +30 +c0 +66 +b8 +00 +00 +8e +d8 +66 +b8 +00 +00 +8e +c0 +02 +00 +00 +00 +05 +00 +00 +00 +0a +00 +08 +00 +00 +00 +06 +00 +00 +00 +0a +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +66 +65 +61 +74 +2e +30 +30 +01 +00 +00 +00 +ff +ff +00 +00 +03 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +0c +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +76 +61 +6c +75 +65 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +2e +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32_test.sh new file mode 100755 index 0000000000..6ffb349dca --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh win32_test modules/objfmts/win32/tests "win32 objfmt" "-f win32" ".obj" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32test.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32test.asm new file mode 100644 index 0000000000..17b93f9e03 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32test.asm @@ -0,0 +1,82 @@ +; test source file for assembling to COFF +; build with (under DJGPP, for example): +; yasm -f coff cofftest.asm +; gcc -o cofftest cofftest.c cofftest.o + +; This file should test the following: +; [1] Define and export a global text-section symbol +; [2] Define and export a global data-section symbol +; [3] Define and export a global BSS-section symbol +; [4] Define a non-global text-section symbol +; [5] Define a non-global data-section symbol +; [6] Define a non-global BSS-section symbol +; [7] Define a COMMON symbol +; [8] Define a NASM local label +; [9] Reference a NASM local label +; [10] Import an external symbol +; [11] Make a PC-relative call to an external symbol +; [12] Reference a text-section symbol in the text section +; [13] Reference a data-section symbol in the text section +; [14] Reference a BSS-section symbol in the text section +; [15] Reference a text-section symbol in the data section +; [16] Reference a data-section symbol in the data section +; [17] Reference a BSS-section symbol in the data section + +[BITS 32] +[GLOBAL _lrotate] ; [1] +[GLOBAL _greet] ; [1] +[GLOBAL _asmstr] ; [2] +[GLOBAL _textptr] ; [2] +[GLOBAL _selfptr] ; [2] +[GLOBAL _integer] ; [3] +[EXTERN _printf] ; [10] +[COMMON _commvar 4] ; [7] + +[SECTION .text] + +; prototype: long lrotate(long x, int num); +_lrotate: ; [1] + push ebp + mov ebp,esp + mov eax,[ebp+8] + mov ecx,[ebp+12] +.label rol eax,1 ; [4] [8] + loop .label ; [9] [12] + mov esp,ebp + pop ebp + ret + +; prototype: void greet(void); +_greet mov eax,[_integer] ; [14] + inc eax + mov [localint],eax ; [14] + push dword [_commvar] + mov eax,[localptr] ; [13] + push dword [eax] + push dword [_integer] ; [1] [14] + push dword _printfstr ; [13] + call _printf ; [11] + add esp,16 + ret + +[SECTION .data] + +; a string +_asmstr db 'hello, world', 0 ; [2] + +; a string for Printf +_printfstr db "integer==%d, localint==%d, commvar=%d" + db 10, 0 + +; some pointers +localptr dd localint ; [5] [17] +_textptr dd _greet ; [15] +_selfptr dd _selfptr ; [16] + +[SECTION .bss] + +; an integer +_integer resd 1 ; [3] + +; a local integer +localint resd 1 ; [6] diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32test.c b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32test.c new file mode 100644 index 0000000000..fa6a552d62 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32test.c @@ -0,0 +1,34 @@ +/* + * test source file for assembling to COFF + * build with (under DJGPP, for example): + * yasm -f coff cofftest.asm + * gcc -o cofftest cofftest.c cofftest.o + */ + +#include + +extern int lrotate(long, int); +extern void greet(void); +extern char asmstr[]; +extern void *selfptr; +extern void *textptr; +extern int integer, commvar; + +int main(void) { + + printf("Testing lrotate: should get 0x00400000, 0x00000001\n"); + printf("lrotate(0x00040000, 4) = 0x%08lx\n", lrotate(0x40000,4)); + printf("lrotate(0x00040000, 14) = 0x%08lx\n", lrotate(0x40000,14)); + + printf("This string should read `hello, world': `%s'\n", asmstr); + + printf("The integers here should be 1234, 1235 and 4321:\n"); + integer = 1234; + commvar = 4321; + greet(); + + printf("These pointers should be equal: %p and %p\n", + &greet, textptr); + + printf("So should these: %p and %p\n", selfptr, &selfptr); +} diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32test.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32test.hex new file mode 100644 index 0000000000..2548ee0019 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win32/tests/win32test.hex @@ -0,0 +1,675 @@ +4c +01 +03 +00 +00 +00 +00 +00 +6d +01 +00 +00 +11 +00 +00 +00 +00 +00 +0c +01 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3d +00 +00 +00 +8c +00 +00 +00 +c9 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +20 +00 +50 +60 +2e +64 +61 +74 +61 +00 +00 +00 +3d +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +0f +01 +00 +00 +4f +01 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +40 +00 +30 +c0 +2e +62 +73 +73 +00 +00 +00 +00 +7d +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +30 +c0 +55 +89 +e5 +8b +45 +08 +8b +4d +0c +d1 +c0 +e2 +fc +89 +ec +5d +c3 +a1 +00 +00 +00 +00 +40 +a3 +04 +00 +00 +00 +ff +35 +00 +00 +00 +00 +a1 +34 +00 +00 +00 +ff +30 +ff +35 +00 +00 +00 +00 +68 +0d +00 +00 +00 +e8 +00 +00 +00 +00 +83 +c4 +10 +c3 +12 +00 +00 +00 +0f +00 +00 +00 +06 +00 +18 +00 +00 +00 +0f +00 +00 +00 +06 +00 +1e +00 +00 +00 +0c +00 +00 +00 +06 +00 +23 +00 +00 +00 +0d +00 +00 +00 +06 +00 +2b +00 +00 +00 +0f +00 +00 +00 +06 +00 +30 +00 +00 +00 +0d +00 +00 +00 +06 +00 +35 +00 +00 +00 +0b +00 +00 +00 +14 +00 +68 +65 +6c +6c +6f +2c +20 +77 +6f +72 +6c +64 +00 +69 +6e +74 +65 +67 +65 +72 +3d +3d +25 +64 +2c +20 +6c +6f +63 +61 +6c +69 +6e +74 +3d +3d +25 +64 +2c +20 +63 +6f +6d +6d +76 +61 +72 +3d +25 +64 +0a +00 +04 +00 +00 +00 +11 +00 +00 +00 +3c +00 +00 +00 +34 +00 +00 +00 +0f +00 +00 +00 +06 +00 +38 +00 +00 +00 +03 +00 +00 +00 +06 +00 +3c +00 +00 +00 +0d +00 +00 +00 +06 +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +66 +65 +61 +74 +2e +30 +30 +01 +00 +00 +00 +ff +ff +00 +00 +03 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +3d +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +6c +72 +6f +74 +61 +74 +65 +00 +00 +00 +00 +01 +00 +00 +00 +02 +00 +5f +67 +72 +65 +65 +74 +00 +00 +11 +00 +00 +00 +01 +00 +00 +00 +02 +00 +5f +61 +73 +6d +73 +74 +72 +00 +00 +00 +00 +00 +02 +00 +00 +00 +02 +00 +5f +74 +65 +78 +74 +70 +74 +72 +38 +00 +00 +00 +02 +00 +00 +00 +02 +00 +5f +73 +65 +6c +66 +70 +74 +72 +3c +00 +00 +00 +02 +00 +00 +00 +02 +00 +5f +69 +6e +74 +65 +67 +65 +72 +00 +00 +00 +00 +03 +00 +00 +00 +02 +00 +5f +70 +72 +69 +6e +74 +66 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +5f +63 +6f +6d +6d +76 +61 +72 +04 +00 +00 +00 +00 +00 +00 +00 +02 +00 +2e +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +01 +40 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +62 +73 +73 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +03 +01 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/Makefile.inc new file mode 100644 index 0000000000..545c847ef6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/Makefile.inc @@ -0,0 +1,7 @@ +# Assume objfmt_coff is included + +YASM_MODULES += objfmt_win64 objfmt_x64 + +EXTRA_DIST += modules/objfmts/win64/tests/Makefile.inc + +include modules/objfmts/win64/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/Makefile.inc new file mode 100644 index 0000000000..4062fc33b5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/Makefile.inc @@ -0,0 +1,37 @@ +TESTS += modules/objfmts/win64/tests/win64_test.sh + +EXTRA_DIST += modules/objfmts/win64/tests/win64_test.sh +EXTRA_DIST += modules/objfmts/win64/tests/sce1.asm +EXTRA_DIST += modules/objfmts/win64/tests/sce1.hex +EXTRA_DIST += modules/objfmts/win64/tests/sce1-err.asm +EXTRA_DIST += modules/objfmts/win64/tests/sce1-err.errwarn +EXTRA_DIST += modules/objfmts/win64/tests/sce2.asm +EXTRA_DIST += modules/objfmts/win64/tests/sce2.hex +EXTRA_DIST += modules/objfmts/win64/tests/sce2-err.asm +EXTRA_DIST += modules/objfmts/win64/tests/sce2-err.errwarn +EXTRA_DIST += modules/objfmts/win64/tests/sce3.asm +EXTRA_DIST += modules/objfmts/win64/tests/sce3.hex +EXTRA_DIST += modules/objfmts/win64/tests/sce3.masm +EXTRA_DIST += modules/objfmts/win64/tests/sce4.asm +EXTRA_DIST += modules/objfmts/win64/tests/sce4.hex +EXTRA_DIST += modules/objfmts/win64/tests/sce4.masm +EXTRA_DIST += modules/objfmts/win64/tests/sce4-err.asm +EXTRA_DIST += modules/objfmts/win64/tests/sce4-err.errwarn +EXTRA_DIST += modules/objfmts/win64/tests/win64-abs.asm +EXTRA_DIST += modules/objfmts/win64/tests/win64-abs.hex +EXTRA_DIST += modules/objfmts/win64/tests/win64-curpos.asm +EXTRA_DIST += modules/objfmts/win64/tests/win64-curpos.hex +EXTRA_DIST += modules/objfmts/win64/tests/win64-dataref.asm +EXTRA_DIST += modules/objfmts/win64/tests/win64-dataref.hex +EXTRA_DIST += modules/objfmts/win64/tests/win64-dataref.masm +EXTRA_DIST += modules/objfmts/win64/tests/win64-dataref2.asm +EXTRA_DIST += modules/objfmts/win64/tests/win64-dataref2.hex +EXTRA_DIST += modules/objfmts/win64/tests/win64-dataref2.masm +EXTRA_DIST += modules/objfmts/win64/tests/win64-function.asm +EXTRA_DIST += modules/objfmts/win64/tests/win64-function.hex +EXTRA_DIST += modules/objfmts/win64/tests/win64-imagebase.hex +EXTRA_DIST += modules/objfmts/win64/tests/win64-imagebase.asm + +EXTRA_DIST += modules/objfmts/win64/tests/gas/Makefile.inc + +include modules/objfmts/win64/tests/gas/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/gas/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/gas/Makefile.inc new file mode 100644 index 0000000000..0faeec7856 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/gas/Makefile.inc @@ -0,0 +1,5 @@ +TESTS += modules/objfmts/win64/tests/gas/win64_gas_test.sh + +EXTRA_DIST += modules/objfmts/win64/tests/gas/win64_gas_test.sh +EXTRA_DIST += modules/objfmts/win64/tests/gas/win64-gas-sce.asm +EXTRA_DIST += modules/objfmts/win64/tests/gas/win64-gas-sce.hex diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/gas/win64-gas-sce.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/gas/win64-gas-sce.asm new file mode 100644 index 0000000000..3a75ee4cae --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/gas/win64-gas-sce.asm @@ -0,0 +1,11 @@ +PROC_FRAME sample +rex_push_reg %rbp +rex_push_eflags +alloc_stack 16 +save_reg %rsi, 0x18 +save_xmm128 %xmm7, 0x20 +push_frame 16 +set_frame %rdi +set_frame %rdi, 16 +END_PROLOGUE +ENDPROC_FRAME diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/gas/win64-gas-sce.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/gas/win64-gas-sce.hex new file mode 100644 index 0000000000..4721c514f9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/gas/win64-gas-sce.hex @@ -0,0 +1,399 @@ +64 +86 +03 +00 +00 +00 +00 +00 +e9 +00 +00 +00 +09 +00 +00 +00 +00 +00 +04 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1b +00 +00 +00 +8c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +50 +60 +2e +78 +64 +61 +74 +61 +00 +00 +1b +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +a7 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +40 +40 +2e +70 +64 +61 +74 +61 +00 +00 +33 +00 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +bf +00 +00 +00 +cb +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +40 +00 +30 +40 +48 +55 +48 +9c +48 +83 +ec +10 +48 +89 +74 +24 +18 +66 +0f +7f +7c +24 +20 +48 +89 +e7 +48 +8d +7c +24 +10 +01 +1b +0a +17 +1b +73 +16 +73 +13 +1a +13 +78 +02 +00 +0d +64 +03 +00 +08 +12 +04 +02 +02 +50 +00 +00 +00 +00 +1b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +03 +00 +04 +00 +00 +00 +04 +00 +00 +00 +03 +00 +08 +00 +00 +00 +05 +00 +00 +00 +03 +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +1b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +73 +61 +6d +70 +6c +65 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +78 +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +01 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +70 +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +03 +01 +0c +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/gas/win64_gas_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/gas/win64_gas_test.sh new file mode 100755 index 0000000000..efc7688277 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/gas/win64_gas_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh win64_gas_test modules/objfmts/win64/tests/gas "win64 objfmt" "-f win64 -p gas -r nasm" ".obj" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce1-err.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce1-err.asm new file mode 100644 index 0000000000..a356b5e324 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce1-err.asm @@ -0,0 +1,36 @@ +PROC_FRAME sample1 +[pushreg rbp] +[allocstack 040h] +[setframe rbp, 020h] +[savexmm128 xmm7, 020h] +[savereg rsi, 038h] +[savereg rdi, 010h] +;END_PROLOGUE +ENDPROC_FRAME + +PROC_FRAME sample2 +[pushreg rbp] +[allocstack 040h] +[setframe rbp, 020h] +[savexmm128 xmm7, 020h] +[savereg rsi, 038h] +[savereg rdi, 010h] +;END_PROLOGUE + +PROC_FRAME sample3 +[pushreg rbp] +[allocstack 040h] +[setframe rbp, 020h] +[savexmm128 xmm7, 020h] +[savereg rsi, 038h] +END_PROLOGUE +[savereg rdi, 010h] + +ENDPROC_FRAME + +END_PROLOGUE +[savereg rdi, 010h] + +PROC_FRAME sample4 +[pushreg rbp] + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce1-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce1-err.errwarn new file mode 100644 index 0000000000..bfb88c14a5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce1-err.errwarn @@ -0,0 +1,8 @@ +-:9: error: ended procedure without ending prologue +-:1: error: procedure started here +-:20: error: nested procedures not supported (didn't use [ENDPROC_FRAME]?) +-:11: error: previous procedure started here +-:27: error: [SAVEREG] after end of prologue +-:26: error: prologue ended here +-:31: error: [ENDPROLOG] without preceding [PROC_FRAME] +-:32: error: [SAVEREG] without preceding [PROC_FRAME] diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce1.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce1.asm new file mode 100644 index 0000000000..a021e82586 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce1.asm @@ -0,0 +1,44 @@ +PROC_FRAME sample + db 048h; emit a REX prefix, to enable hot-patching +push rbp +[pushreg rbp] +sub rsp, 040h +[allocstack 040h] +lea rbp, [rsp+020h] +[setframe rbp, 020h] +movdqa [rbp], xmm7 +[savexmm128 xmm7, 020h];the offset is from the base of the frame +;not the scaled offset of the frame +mov [rbp+018h], rsi +[savereg rsi, 018h] +mov [rsp+010h], rdi +[savereg rdi, 010h]; you can still use RSP as the base of the frame +; or any other register you choose +END_PROLOGUE + +; you can modify the stack pointer outside of the prologue (similar to alloca) +; because we have a frame pointer. +; if we didn't have a frame pointer, this would be illegal +; if we didn't make this modification, +; there would be no need for a frame pointer + +sub rsp, 060h + +; we can unwind from the following AV because of the frame pointer + +mov rax, 0 +mov rax, [rax] ; AV! + +; restore the registers that weren't saved with a push +; this isn't part of the official epilog, as described in section 2.5 + +movdqa xmm7, [rbp] +mov rsi, [rbp+018h] +mov rdi, [rbp-010h] + +; Here's the official epilog + +lea rsp, [rbp-020h] +pop rbp +ret +ENDPROC_FRAME diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce1.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce1.hex new file mode 100644 index 0000000000..d6b1427cd1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce1.hex @@ -0,0 +1,430 @@ +64 +86 +03 +00 +00 +00 +00 +00 +08 +01 +00 +00 +09 +00 +00 +00 +00 +00 +04 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3a +00 +00 +00 +8c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +50 +60 +2e +78 +64 +61 +74 +61 +00 +00 +3a +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +c6 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +40 +40 +2e +70 +64 +61 +74 +61 +00 +00 +52 +00 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +de +00 +00 +00 +ea +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +40 +00 +30 +40 +48 +55 +48 +83 +ec +40 +48 +8d +6c +24 +20 +66 +0f +7f +7d +00 +48 +89 +75 +18 +48 +89 +7c +24 +10 +48 +83 +ec +60 +48 +c7 +c0 +00 +00 +00 +00 +48 +8b +00 +66 +0f +6f +7d +00 +48 +8b +75 +18 +48 +8b +7d +f0 +48 +8d +65 +e0 +5d +c3 +01 +19 +09 +25 +19 +74 +02 +00 +14 +64 +03 +00 +10 +78 +02 +00 +0b +53 +06 +72 +02 +50 +00 +00 +00 +00 +00 +00 +3a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +03 +00 +04 +00 +00 +00 +04 +00 +00 +00 +03 +00 +08 +00 +00 +00 +05 +00 +00 +00 +03 +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +3a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +73 +61 +6d +70 +6c +65 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +78 +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +01 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +70 +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +03 +01 +0c +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce2-err.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce2-err.asm new file mode 100644 index 0000000000..b5ce95791d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce2-err.asm @@ -0,0 +1,3 @@ +PROC_FRAME sample4 +[pushreg rbp] + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce2-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce2-err.errwarn new file mode 100644 index 0000000000..73e186527a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce2-err.errwarn @@ -0,0 +1,2 @@ +-: error: end of file in procedure frame +-:1: error: procedure started here diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce2.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce2.asm new file mode 100644 index 0000000000..d76f946319 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce2.asm @@ -0,0 +1,29 @@ +struc kFrame +.Fill resq 1 ; fill to 8 mod 16 +.SavedRdi resq 1 ; saved register RDI +.SavedRsi resq 1 ; saved register RSI +endstruc + +struc sampleFrame +.Fill resq 1 ; fill to 8 mod 16 +.SavedRdi resq 1 ; Saved Register RDI +.SavedRsi resq 1 ; Saved Register RSI +endstruc + +PROC_FRAME sample2 +alloc_stack sampleFrame_size +save_reg rdi, sampleFrame.SavedRdi +save_reg rsi, sampleFrame.SavedRsi +END_PROLOGUE + +; function body + +mov rsi, [rsp+sampleFrame.SavedRsi] +mov rdi, [rsp+sampleFrame.SavedRdi] + +; Here's the official epilog + +add rsp, sampleFrame_size +ret +ENDPROC_FRAME + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce2.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce2.hex new file mode 100644 index 0000000000..1caa10c7a8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce2.hex @@ -0,0 +1,717 @@ +64 +86 +03 +00 +00 +00 +00 +00 +e3 +00 +00 +00 +13 +00 +00 +00 +00 +00 +04 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1d +00 +00 +00 +8c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +50 +60 +2e +78 +64 +61 +74 +61 +00 +00 +1d +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +a9 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +40 +40 +2e +70 +64 +61 +74 +61 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +b9 +00 +00 +00 +c5 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +40 +00 +30 +40 +48 +83 +ec +18 +48 +89 +7c +24 +08 +48 +89 +74 +24 +10 +48 +8b +74 +24 +10 +48 +8b +7c +24 +08 +48 +83 +c4 +18 +c3 +01 +0e +05 +00 +0e +64 +02 +00 +09 +74 +01 +00 +04 +22 +00 +00 +00 +00 +00 +00 +1d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0e +00 +00 +00 +03 +00 +04 +00 +00 +00 +0e +00 +00 +00 +03 +00 +08 +00 +00 +00 +0f +00 +00 +00 +03 +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +1d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6b +46 +72 +61 +6d +65 +00 +00 +00 +00 +00 +00 +ff +ff +00 +00 +03 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +ff +ff +00 +00 +03 +00 +00 +00 +00 +00 +10 +00 +00 +00 +08 +00 +00 +00 +ff +ff +00 +00 +03 +00 +00 +00 +00 +00 +20 +00 +00 +00 +10 +00 +00 +00 +ff +ff +00 +00 +03 +00 +00 +00 +00 +00 +30 +00 +00 +00 +18 +00 +00 +00 +ff +ff +00 +00 +03 +00 +00 +00 +00 +00 +3c +00 +00 +00 +00 +00 +00 +00 +ff +ff +00 +00 +03 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +ff +ff +00 +00 +03 +00 +00 +00 +00 +00 +59 +00 +00 +00 +08 +00 +00 +00 +ff +ff +00 +00 +03 +00 +00 +00 +00 +00 +6e +00 +00 +00 +10 +00 +00 +00 +ff +ff +00 +00 +03 +00 +00 +00 +00 +00 +83 +00 +00 +00 +18 +00 +00 +00 +ff +ff +00 +00 +03 +00 +73 +61 +6d +70 +6c +65 +32 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +78 +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +01 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +70 +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +03 +01 +0c +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +94 +00 +00 +00 +6b +46 +72 +61 +6d +65 +2e +46 +69 +6c +6c +00 +6b +46 +72 +61 +6d +65 +2e +53 +61 +76 +65 +64 +52 +64 +69 +00 +6b +46 +72 +61 +6d +65 +2e +53 +61 +76 +65 +64 +52 +73 +69 +00 +6b +46 +72 +61 +6d +65 +5f +73 +69 +7a +65 +00 +73 +61 +6d +70 +6c +65 +46 +72 +61 +6d +65 +00 +73 +61 +6d +70 +6c +65 +46 +72 +61 +6d +65 +2e +46 +69 +6c +6c +00 +73 +61 +6d +70 +6c +65 +46 +72 +61 +6d +65 +2e +53 +61 +76 +65 +64 +52 +64 +69 +00 +73 +61 +6d +70 +6c +65 +46 +72 +61 +6d +65 +2e +53 +61 +76 +65 +64 +52 +73 +69 +00 +73 +61 +6d +70 +6c +65 +46 +72 +61 +6d +65 +5f +73 +69 +7a +65 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce3.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce3.asm new file mode 100644 index 0000000000..788fe6bdfd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce3.asm @@ -0,0 +1,73 @@ +PROC_FRAME sample + db 048h; emit a REX prefix, to enable hot-patching +push rbp +[pushreg rbp] +sub rsp, 040h +[allocstack 040h] +lea rbp, [rsp+020h] +[setframe rbp, 020h] +movdqa [rbp], xmm7 +[savexmm128 xmm7, 020h];the offset is from the base of the frame +;not the scaled offset of the frame +mov [rbp+018h], rsi +[savereg rsi, 018h] +mov [rsp+010h], rdi +[savereg rdi, 010h]; you can still use RSP as the base of the frame +; or any other register you choose +END_PROLOGUE + +; you can modify the stack pointer outside of the prologue (similar to alloca) +; because we have a frame pointer. +; if we didn't have a frame pointer, this would be illegal +; if we didn't make this modification, +; there would be no need for a frame pointer + +sub rsp, 060h + +; we can unwind from the following AV because of the frame pointer + +mov rax, 0 +mov rax, [rax] ; AV! + +; restore the registers that weren't saved with a push +; this isn't part of the official epilog, as described in section 2.5 + +movdqa xmm7, [rbp] +mov rsi, [rbp+018h] +mov rdi, [rbp-010h] + +; Here's the official epilog + +lea rsp, [rbp-020h] +pop rbp +ret +ENDPROC_FRAME +struc kFrame +.Fill resq 1 ; fill to 8 mod 16 +.SavedRdi resq 1 ; saved register RDI +.SavedRsi resq 1 ; saved register RSI +endstruc + +struc sampleFrame +.Fill resq 1 ; fill to 8 mod 16 +.SavedRdi resq 1 ; Saved Register RDI +.SavedRsi resq 1 ; Saved Register RSI +endstruc + +PROC_FRAME sample2 +alloc_stack sampleFrame_size +save_reg rdi, sampleFrame.SavedRdi +save_reg rsi, sampleFrame.SavedRsi +END_PROLOGUE + +; function body + +mov rsi, [rsp+sampleFrame.SavedRsi] +mov rdi, [rsp+sampleFrame.SavedRdi] + +; Here's the official epilog + +add rsp, sampleFrame_size +ret +ENDPROC_FRAME + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce3.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce3.hex new file mode 100644 index 0000000000..cadf8b9438 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce3.hex @@ -0,0 +1,859 @@ +64 +86 +03 +00 +00 +00 +00 +00 +5f +01 +00 +00 +14 +00 +00 +00 +00 +00 +04 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +57 +00 +00 +00 +8c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +50 +60 +2e +78 +64 +61 +74 +61 +00 +00 +57 +00 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +e3 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +40 +40 +2e +70 +64 +61 +74 +61 +00 +00 +7f +00 +00 +00 +00 +00 +00 +00 +18 +00 +00 +00 +0b +01 +00 +00 +23 +01 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +40 +00 +30 +40 +48 +55 +48 +83 +ec +40 +48 +8d +6c +24 +20 +66 +0f +7f +7d +00 +48 +89 +75 +18 +48 +89 +7c +24 +10 +48 +83 +ec +60 +48 +c7 +c0 +00 +00 +00 +00 +48 +8b +00 +66 +0f +6f +7d +00 +48 +8b +75 +18 +48 +8b +7d +f0 +48 +8d +65 +e0 +5d +c3 +48 +83 +ec +18 +48 +89 +7c +24 +08 +48 +89 +74 +24 +10 +48 +8b +74 +24 +10 +48 +8b +7c +24 +08 +48 +83 +c4 +18 +c3 +01 +19 +09 +25 +19 +74 +02 +00 +14 +64 +03 +00 +10 +78 +02 +00 +0b +53 +06 +72 +02 +50 +00 +00 +01 +0e +05 +00 +0e +64 +02 +00 +09 +74 +01 +00 +04 +22 +00 +00 +00 +00 +00 +00 +3a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1d +00 +00 +00 +18 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +03 +00 +04 +00 +00 +00 +04 +00 +00 +00 +03 +00 +08 +00 +00 +00 +05 +00 +00 +00 +03 +00 +0c +00 +00 +00 +13 +00 +00 +00 +03 +00 +10 +00 +00 +00 +13 +00 +00 +00 +03 +00 +14 +00 +00 +00 +05 +00 +00 +00 +03 +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +57 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +73 +61 +6d +70 +6c +65 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +78 +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +01 +28 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +70 +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +03 +01 +18 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6b +46 +72 +61 +6d +65 +00 +00 +00 +00 +00 +00 +ff +ff +00 +00 +03 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +ff +ff +00 +00 +03 +00 +00 +00 +00 +00 +10 +00 +00 +00 +08 +00 +00 +00 +ff +ff +00 +00 +03 +00 +00 +00 +00 +00 +20 +00 +00 +00 +10 +00 +00 +00 +ff +ff +00 +00 +03 +00 +00 +00 +00 +00 +30 +00 +00 +00 +18 +00 +00 +00 +ff +ff +00 +00 +03 +00 +00 +00 +00 +00 +3c +00 +00 +00 +00 +00 +00 +00 +ff +ff +00 +00 +03 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +ff +ff +00 +00 +03 +00 +00 +00 +00 +00 +59 +00 +00 +00 +08 +00 +00 +00 +ff +ff +00 +00 +03 +00 +00 +00 +00 +00 +6e +00 +00 +00 +10 +00 +00 +00 +ff +ff +00 +00 +03 +00 +00 +00 +00 +00 +83 +00 +00 +00 +18 +00 +00 +00 +ff +ff +00 +00 +03 +00 +73 +61 +6d +70 +6c +65 +32 +00 +3a +00 +00 +00 +01 +00 +00 +00 +03 +00 +94 +00 +00 +00 +6b +46 +72 +61 +6d +65 +2e +46 +69 +6c +6c +00 +6b +46 +72 +61 +6d +65 +2e +53 +61 +76 +65 +64 +52 +64 +69 +00 +6b +46 +72 +61 +6d +65 +2e +53 +61 +76 +65 +64 +52 +73 +69 +00 +6b +46 +72 +61 +6d +65 +5f +73 +69 +7a +65 +00 +73 +61 +6d +70 +6c +65 +46 +72 +61 +6d +65 +00 +73 +61 +6d +70 +6c +65 +46 +72 +61 +6d +65 +2e +46 +69 +6c +6c +00 +73 +61 +6d +70 +6c +65 +46 +72 +61 +6d +65 +2e +53 +61 +76 +65 +64 +52 +64 +69 +00 +73 +61 +6d +70 +6c +65 +46 +72 +61 +6d +65 +2e +53 +61 +76 +65 +64 +52 +73 +69 +00 +73 +61 +6d +70 +6c +65 +46 +72 +61 +6d +65 +5f +73 +69 +7a +65 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce3.masm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce3.masm new file mode 100644 index 0000000000..7bac248f80 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce3.masm @@ -0,0 +1,74 @@ +include macamd64.inc + +_TEXT SEGMENT +sample PROC FRAME + db 048h; emit a REX prefix, to enable hot-patching +push rbp +.pushreg rbp +sub rsp, 040h +.allocstack 040h +lea rbp, [rsp+020h] +.setframe rbp, 020h +movdqa [rbp], xmm7 +.savexmm128 xmm7, 020h;the offset is from the base of the frame +;not the scaled offset of the frame +mov [rbp+018h], rsi +.savereg rsi, 018h +mov [rsp+010h], rdi +.savereg rdi, 010h; you can still use RSP as the base of the frame +; or any other register you choose +.endprolog + +; you can modify the stack pointer outside of the prologue (similar to alloca) +; because we have a frame pointer. +; if we didn't have a frame pointer, this would be illegal +; if we didn't make this modification, +; there would be no need for a frame pointer + +sub rsp, 060h + +; we can unwind from the following AV because of the frame pointer + +mov rax, 0 +mov rax, [rax] ; AV! + +; restore the registers that weren't saved with a push +; this isn't part of the official epilog, as described in section 2.5 + +movdqa xmm7, [rbp] +mov rsi, [rbp+018h] +mov rdi, [rbp-010h] + +; Here's the official epilog + +lea rsp, [rbp-020h] +pop rbp +ret +sample ENDP + + +sampleFrame struct +Fill dq ? ; fill to 8 mod 16 +SavedRdi dq ? ; Saved Register RDI +SavedRsi dq ? ; Saved Register RSI +sampleFrame ends + +sample2 PROC FRAME +alloc_stack(sizeof sampleFrame) +save_reg rdi, sampleFrame.SavedRdi +save_reg rsi, sampleFrame.SavedRsi +.endprolog + +; function body + +mov rsi, sampleFrame.SavedRsi[rsp] +mov rdi, sampleFrame.SavedRdi[rsp] + +; Here's the official epilog + +add rsp, (sizeof sampleFrame) +ret +sample2 ENDP + +_TEXT ENDS +end diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4-err.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4-err.asm new file mode 100644 index 0000000000..402f7e96e4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4-err.asm @@ -0,0 +1,24 @@ +; Negatives +PROC_FRAME sample +[allocstack 0-8] +[setframe rbp, 0-4] +[savexmm128 xmm7, 0-16] +[savereg rsi, 0-8] +END_PROLOGUE +ENDPROC_FRAME + +; Too positive +PROC_FRAME sample2 +[setframe rbp, 248] +END_PROLOGUE +ENDPROC_FRAME + +; Misaligned +PROC_FRAME sample3 +[allocstack 128-4] +[setframe rbp, 240-4] +[savexmm128 xmm7, 1024+8] +[savereg rsi, 1024+4] +END_PROLOGUE +ENDPROC_FRAME + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4-err.errwarn new file mode 100644 index 0000000000..b477ceb7b2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4-err.errwarn @@ -0,0 +1,9 @@ +-:2: error: frame offset of -4 bytes, must be between 0 and 240 +-:3: error: negative offset not allowed +-:5: error: negative offset not allowed +-:6: error: negative offset not allowed +-:11: error: frame offset of 248 bytes, must be between 0 and 240 +-:17: error: frame offset of 236 is not a multiple of 16 +-:18: error: offset of 124 is not a multiple of 8 +-:20: error: offset of 1032 is not a multiple of 16 +-:21: error: offset of 1028 is not a multiple of 8 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4.asm new file mode 100644 index 0000000000..4072b246ae --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4.asm @@ -0,0 +1,30 @@ +PROC_FRAME sample +[allocstack 8] ; smallest value +[setframe rbp, 0] ; smallest value +[savexmm128 xmm7, 16*64*1024-16]; last smaller-sized +[savereg rsi, 8*64*1024-8] ; last smaller-sized +END_PROLOGUE +ENDPROC_FRAME + +PROC_FRAME sample2 +[allocstack 128] ; last smaller-sized +[setframe rbp, 240] ; largest value +[savexmm128 xmm7, 16*64*1024] ; first larger-sized +[savereg rsi, 8*64*1024] ; first larger-sized +END_PROLOGUE +ENDPROC_FRAME + +PROC_FRAME sample3 +[allocstack 136] ; first medium-sized +END_PROLOGUE +ENDPROC_FRAME + +PROC_FRAME sample4 +[allocstack 8*64*1024-8] ; last medium-sized +END_PROLOGUE +ENDPROC_FRAME + +PROC_FRAME sample5 +[allocstack 8*64*1024] ; first larger-sized +END_PROLOGUE +ENDPROC_FRAME diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4.hex new file mode 100644 index 0000000000..9a57d50db9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4.hex @@ -0,0 +1,652 @@ +64 +86 +03 +00 +00 +00 +00 +00 +9e +01 +00 +00 +0d +00 +00 +00 +00 +00 +04 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +50 +60 +2e +78 +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +8c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +40 +40 +2e +70 +64 +61 +74 +61 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +3c +00 +00 +00 +cc +00 +00 +00 +08 +01 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +40 +00 +30 +40 +01 +00 +06 +05 +00 +64 +ff +ff +00 +78 +ff +ff +00 +53 +00 +02 +01 +00 +08 +f5 +00 +65 +00 +00 +08 +00 +00 +79 +00 +00 +10 +00 +00 +53 +00 +f2 +01 +00 +02 +00 +00 +01 +11 +00 +01 +00 +02 +00 +00 +01 +ff +ff +01 +00 +03 +00 +00 +11 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +03 +00 +04 +00 +00 +00 +04 +00 +00 +00 +03 +00 +08 +00 +00 +00 +05 +00 +00 +00 +03 +00 +0c +00 +00 +00 +09 +00 +00 +00 +03 +00 +10 +00 +00 +00 +09 +00 +00 +00 +03 +00 +14 +00 +00 +00 +05 +00 +00 +00 +03 +00 +18 +00 +00 +00 +0a +00 +00 +00 +03 +00 +1c +00 +00 +00 +0a +00 +00 +00 +03 +00 +20 +00 +00 +00 +05 +00 +00 +00 +03 +00 +24 +00 +00 +00 +0b +00 +00 +00 +03 +00 +28 +00 +00 +00 +0b +00 +00 +00 +03 +00 +2c +00 +00 +00 +05 +00 +00 +00 +03 +00 +30 +00 +00 +00 +0c +00 +00 +00 +03 +00 +34 +00 +00 +00 +0c +00 +00 +00 +03 +00 +38 +00 +00 +00 +05 +00 +00 +00 +03 +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +73 +61 +6d +70 +6c +65 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +78 +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +01 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +70 +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +03 +01 +3c +00 +00 +00 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +73 +61 +6d +70 +6c +65 +32 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +00 +73 +61 +6d +70 +6c +65 +33 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +00 +73 +61 +6d +70 +6c +65 +34 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +00 +73 +61 +6d +70 +6c +65 +35 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +00 +04 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4.masm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4.masm new file mode 100644 index 0000000000..1ffbf2f743 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/sce4.masm @@ -0,0 +1,36 @@ + +_TEXT SEGMENT + +sample PROC FRAME +.allocstack 8 ; smallest value +.setframe rbp, 0 ; smallest value +.savexmm128 xmm7, 16*64*1024-16 ; last smaller-sized +.savereg rsi, 8*64*1024-8 ; last smaller-sized +.endprolog +sample ENDP + +sample2 PROC FRAME +.allocstack 128 ; last smaller-sized +.setframe rbp, 240 ; largest value +.savexmm128 xmm7, 16*64*1024 ; first larger-sized +.savereg rsi, 8*64*1024 ; first larger-sized +.endprolog +sample2 ENDP + +sample3 PROC FRAME +.allocstack 136 ; first medium-sized +.endprolog +sample3 ENDP + +sample4 PROC FRAME +.allocstack 8*64*1024-8 ; last medium-sized +.endprolog +sample4 ENDP + +sample5 PROC FRAME +.allocstack 8*64*1024 ; first larger-sized +.endprolog +sample5 ENDP + +_TEXT ENDS +end diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-abs.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-abs.asm new file mode 100644 index 0000000000..b5c29ea209 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-abs.asm @@ -0,0 +1 @@ +mov rax, [rel 0x1000] diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-abs.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-abs.hex new file mode 100644 index 0000000000..7d4b35e958 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-abs.hex @@ -0,0 +1,171 @@ +64 +86 +01 +00 +00 +00 +00 +00 +4d +00 +00 +00 +05 +00 +00 +00 +00 +00 +04 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +3c +00 +00 +00 +43 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +20 +00 +50 +60 +48 +8b +05 +00 +10 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +07 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +61 +62 +73 +6f +6c +75 +74 +00 +00 +00 +00 +ff +ff +00 +00 +03 +00 +04 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-curpos.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-curpos.asm new file mode 100644 index 0000000000..4599e9cbb7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-curpos.asm @@ -0,0 +1,27 @@ +global bar +global foo + +section .bar +bar: +dd foo-$ +dd baz-$ +call foo +call baz +foo: + +section .data +baz: +dd foo-$ +;dd $-foo ; illegal +dd baz-$ +dd $-baz +dd foo+4-$ ; with constant +dd $-baz+foo+4-$ ; both local and cross-segment (legal) +dd baz+foo+4-$-$ ; ditto, slightly different +;dd (bar-$)+(foo-$) ; illegal (too many cross-segment) +dd baz-$+baz-$ ; two from same segment + +section .text +mov dword [foo-$], 5 +mov eax, foo-$ +call foo diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-curpos.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-curpos.hex new file mode 100644 index 0000000000..d7c51b104b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-curpos.hex @@ -0,0 +1,499 @@ +64 +86 +03 +00 +00 +00 +00 +00 +29 +01 +00 +00 +0b +00 +00 +00 +00 +00 +04 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +15 +00 +00 +00 +8c +00 +00 +00 +a1 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +20 +00 +50 +60 +2e +62 +61 +72 +00 +00 +00 +00 +15 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +bf +00 +00 +00 +d1 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +20 +00 +00 +60 +2e +64 +61 +74 +61 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +1c +00 +00 +00 +e5 +00 +00 +00 +01 +01 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +40 +00 +50 +c0 +c7 +04 +25 +07 +00 +00 +00 +05 +00 +00 +00 +b8 +05 +00 +00 +00 +e8 +00 +00 +00 +00 +03 +00 +00 +00 +05 +00 +00 +00 +04 +00 +0c +00 +00 +00 +05 +00 +00 +00 +04 +00 +11 +00 +00 +00 +05 +00 +00 +00 +04 +00 +12 +00 +00 +00 +04 +00 +00 +00 +e8 +05 +00 +00 +00 +e8 +00 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +04 +00 +0e +00 +00 +00 +08 +00 +00 +00 +04 +00 +04 +00 +00 +00 +fc +ff +ff +ff +08 +00 +00 +00 +08 +00 +00 +00 +18 +00 +00 +00 +f4 +ff +ff +ff +d0 +ff +ff +ff +00 +00 +00 +00 +05 +00 +00 +00 +04 +00 +0c +00 +00 +00 +05 +00 +00 +00 +04 +00 +10 +00 +00 +00 +05 +00 +00 +00 +04 +00 +14 +00 +00 +00 +05 +00 +00 +00 +04 +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +15 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +62 +61 +72 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +02 +00 +66 +6f +6f +00 +00 +00 +00 +00 +12 +00 +00 +00 +02 +00 +00 +00 +02 +00 +2e +62 +61 +72 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +01 +12 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +62 +61 +7a +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +03 +00 +2e +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +03 +01 +1c +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref.asm new file mode 100644 index 0000000000..d863dc5ace --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref.asm @@ -0,0 +1,151 @@ +BITS 64 + +global x86ident +global __savident +extern foobar ; :proc +extern foobar2 ; :abs +extern foobar3 ; :qword +extern foobar4 ; :byte + +[SECTION .data] +__savident dd 0 +savidentptr dd __savident +savidentptr2 dq __savident +x86identptr dd x86ident +x86identptr2 dq x86ident +foobarptr dd foobar +foobarptr2 dq foobar +foobar2ptr dd foobar2 +foobar2ptr2 dq foobar2 +foobar3ptr dd foobar3 +foobar3ptr2 dq foobar3 +xptr dd x +xptr2 dq x + +[SECTION .bss] +x resq 1 +y resq 1 + +[SECTION .text] +x86ident: + ; extern with :proc + ; This instruction generates a different relocation than + ; MASM does at present. + mov ebx, foobar ; WTF ML64.. this had [] + mov rcx, qword foobar + lea rdx, [foobar wrt rip] + mov rax, [foobar+rcx] + mov rax, qword foobar + mov rbx, qword foobar + movzx rax, byte [foobar wrt rip] + movzx rax, byte [foobar+rax] + + ; local "proc" + ; See note above + mov ebx, trap + mov rcx, qword trap + ; MASM generates a REL32 reloc for this even though it's in + ; the same section. I don't know why, as the call instruction + ; below doesn't cause a reloc, so the linker can't be moving + ; functions around within an object! + lea rdx, [trap wrt rip] + mov rax, [trap+rcx] + mov rax, qword trap + mov rbx, qword trap + ; MASM generates a REL32 reloc for this even though it's in + ; the same section. I don't know why, as the call instruction + ; below doesn't cause a reloc, so the linker can't be moving + ; functions around within an object! + movzx rax, byte [trap wrt rip] + movzx rax, byte [trap+rax] + + ; with :abs + ;mov ebx,[foobar2] + ;mov rcx,offset foobar2 + ;lea rdx, foobar2 + ;mov rax, qword ptr foobar2[rcx] + ;mov rax, foobar2 + ;mov rbx, foobar2 + ;movzx rax, byte ptr foobar2 + ;movzx rax, byte ptr foobar2[rax] + + ; with :qword + ; See note above + mov ebx, foobar3 + mov ebx, [foobar3 wrt rip] + mov rcx, qword foobar3 + lea rdx, [foobar3 wrt rip] + mov rax, [foobar3+rcx] + mov rax, [foobar3 wrt rip] + mov rbx, [foobar3 wrt rip] + movzx rax, byte [foobar3 wrt rip] + movzx rax, byte [foobar3+rax] + + ; local var (dword) + ; See note above + mov ebx, __savident + mov ebx,[__savident wrt rip] + mov rcx, qword __savident + lea rdx, [__savident wrt rip] + mov rax, [__savident+rcx] + mov rax, [__savident wrt rip] + mov rbx, [__savident wrt rip] + movzx rax, byte [__savident wrt rip] + movzx rax, byte [__savident+rax] + + ; local var (qword) + ; See note above + mov ebx, savidentptr2 + mov ebx, [savidentptr2 wrt rip] + mov rcx, qword savidentptr2 + lea rdx, [savidentptr2 wrt rip] + mov rax, [savidentptr2+rcx] + mov rax, [savidentptr2 wrt rip] + mov rbx, [savidentptr2 wrt rip] + movzx rax, byte [savidentptr2 wrt rip] + movzx rax, byte [savidentptr2+rax] + + ; bss local var (qword) + ; See note above + mov ebx, y + mov ebx, [y wrt rip] + mov rcx, qword y + lea rdx, [y wrt rip] + mov rax, [y+rcx] + mov rax, [y wrt rip] + mov rbx, [y wrt rip] + movzx rax, byte [y wrt rip] + movzx rax, byte [y+rax] + + call foobar + + call trap + + ret + +trap: sub rsp, 256 + int3 + add rsp, 256 +.end + +[SECTION .pdata] +dd trap +dd trap.end wrt trap +dd $$xdatasym + +[SECTION .xdata] +$$xdatasym: +db 1, 7, 2, 0, 7, 1, 0x20, 0 + +[SECTION _FOO] +foo_foobar3ptr dd foobar3 +foo_foobar3ptr2 dq foobar3 + mov ebx, [foobar3 wrt rip] + mov rcx, qword foobar3 + lea rdx, [foobar3 wrt rip] + mov rax, [foobar3+rcx] + mov rax, [foobar3 wrt rip] + mov rbx, [foobar3 wrt rip] + movzx rax, byte [foobar3 wrt rip] + movzx rax, byte [foobar3+rax] + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref.hex new file mode 100644 index 0000000000..fa604a6fce --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref.hex @@ -0,0 +1,2479 @@ +64 +86 +06 +00 +00 +00 +00 +00 +44 +06 +00 +00 +27 +00 +00 +00 +00 +00 +04 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +01 +00 +00 +04 +01 +00 +00 +a4 +02 +00 +00 +00 +00 +00 +00 +33 +00 +00 +00 +20 +00 +50 +60 +2e +64 +61 +74 +61 +00 +00 +00 +a0 +01 +00 +00 +00 +00 +00 +00 +4c +00 +00 +00 +a2 +04 +00 +00 +ee +04 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +40 +00 +50 +c0 +2e +62 +73 +73 +00 +00 +00 +00 +ec +01 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +50 +c0 +2e +70 +64 +61 +74 +61 +00 +00 +fc +01 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +66 +05 +00 +00 +72 +05 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +40 +00 +30 +40 +2e +78 +64 +61 +74 +61 +00 +00 +08 +02 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +90 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +40 +40 +5f +46 +4f +4f +00 +00 +00 +00 +10 +02 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +98 +05 +00 +00 +e0 +05 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +20 +00 +00 +60 +bb +00 +00 +00 +00 +48 +b9 +00 +00 +00 +00 +00 +00 +00 +00 +48 +8d +15 +00 +00 +00 +00 +48 +8b +81 +00 +00 +00 +00 +48 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +48 +bb +00 +00 +00 +00 +00 +00 +00 +00 +48 +0f +b6 +05 +00 +00 +00 +00 +48 +0f +b6 +80 +00 +00 +00 +00 +bb +00 +00 +00 +00 +48 +b9 +00 +00 +00 +00 +00 +00 +00 +00 +48 +8d +15 +3a +01 +00 +00 +48 +8b +81 +00 +00 +00 +00 +48 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +48 +bb +00 +00 +00 +00 +00 +00 +00 +00 +48 +0f +b6 +05 +17 +01 +00 +00 +48 +0f +b6 +80 +00 +00 +00 +00 +bb +00 +00 +00 +00 +8b +1d +00 +00 +00 +00 +48 +b9 +00 +00 +00 +00 +00 +00 +00 +00 +48 +8d +15 +00 +00 +00 +00 +48 +8b +81 +00 +00 +00 +00 +48 +8b +05 +00 +00 +00 +00 +48 +8b +1d +00 +00 +00 +00 +48 +0f +b6 +05 +00 +00 +00 +00 +48 +0f +b6 +80 +00 +00 +00 +00 +bb +00 +00 +00 +00 +8b +1d +00 +00 +00 +00 +48 +b9 +00 +00 +00 +00 +00 +00 +00 +00 +48 +8d +15 +00 +00 +00 +00 +48 +8b +81 +00 +00 +00 +00 +48 +8b +05 +00 +00 +00 +00 +48 +8b +1d +00 +00 +00 +00 +48 +0f +b6 +05 +00 +00 +00 +00 +48 +0f +b6 +80 +00 +00 +00 +00 +bb +00 +00 +00 +00 +8b +1d +00 +00 +00 +00 +48 +b9 +00 +00 +00 +00 +00 +00 +00 +00 +48 +8d +15 +00 +00 +00 +00 +48 +8b +81 +00 +00 +00 +00 +48 +8b +05 +00 +00 +00 +00 +48 +8b +1d +00 +00 +00 +00 +48 +0f +b6 +05 +00 +00 +00 +00 +48 +0f +b6 +80 +00 +00 +00 +00 +bb +00 +00 +00 +00 +8b +1d +00 +00 +00 +00 +48 +b9 +00 +00 +00 +00 +00 +00 +00 +00 +48 +8d +15 +00 +00 +00 +00 +48 +8b +81 +00 +00 +00 +00 +48 +8b +05 +00 +00 +00 +00 +48 +8b +1d +00 +00 +00 +00 +48 +0f +b6 +05 +00 +00 +00 +00 +48 +0f +b6 +80 +00 +00 +00 +00 +e8 +00 +00 +00 +00 +e8 +01 +00 +00 +00 +c3 +48 +81 +ec +00 +01 +00 +00 +cc +48 +81 +c4 +00 +01 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +02 +00 +07 +00 +00 +00 +06 +00 +00 +00 +01 +00 +12 +00 +00 +00 +06 +00 +00 +00 +04 +00 +19 +00 +00 +00 +06 +00 +00 +00 +02 +00 +1f +00 +00 +00 +06 +00 +00 +00 +01 +00 +29 +00 +00 +00 +06 +00 +00 +00 +01 +00 +35 +00 +00 +00 +06 +00 +00 +00 +04 +00 +3d +00 +00 +00 +06 +00 +00 +00 +02 +00 +42 +00 +00 +00 +1c +00 +00 +00 +02 +00 +48 +00 +00 +00 +1c +00 +00 +00 +01 +00 +5a +00 +00 +00 +1c +00 +00 +00 +02 +00 +60 +00 +00 +00 +1c +00 +00 +00 +01 +00 +6a +00 +00 +00 +1c +00 +00 +00 +01 +00 +7e +00 +00 +00 +1c +00 +00 +00 +02 +00 +83 +00 +00 +00 +08 +00 +00 +00 +02 +00 +89 +00 +00 +00 +08 +00 +00 +00 +04 +00 +8f +00 +00 +00 +08 +00 +00 +00 +01 +00 +9a +00 +00 +00 +08 +00 +00 +00 +04 +00 +a1 +00 +00 +00 +08 +00 +00 +00 +02 +00 +a8 +00 +00 +00 +08 +00 +00 +00 +04 +00 +af +00 +00 +00 +08 +00 +00 +00 +04 +00 +b7 +00 +00 +00 +08 +00 +00 +00 +04 +00 +bf +00 +00 +00 +08 +00 +00 +00 +02 +00 +c4 +00 +00 +00 +05 +00 +00 +00 +02 +00 +ca +00 +00 +00 +05 +00 +00 +00 +04 +00 +d0 +00 +00 +00 +05 +00 +00 +00 +01 +00 +db +00 +00 +00 +05 +00 +00 +00 +04 +00 +e2 +00 +00 +00 +05 +00 +00 +00 +02 +00 +e9 +00 +00 +00 +05 +00 +00 +00 +04 +00 +f0 +00 +00 +00 +05 +00 +00 +00 +04 +00 +f8 +00 +00 +00 +05 +00 +00 +00 +04 +00 +00 +01 +00 +00 +05 +00 +00 +00 +02 +00 +05 +01 +00 +00 +0d +00 +00 +00 +02 +00 +0b +01 +00 +00 +0d +00 +00 +00 +04 +00 +11 +01 +00 +00 +0d +00 +00 +00 +01 +00 +1c +01 +00 +00 +0d +00 +00 +00 +04 +00 +23 +01 +00 +00 +0d +00 +00 +00 +02 +00 +2a +01 +00 +00 +0d +00 +00 +00 +04 +00 +31 +01 +00 +00 +0d +00 +00 +00 +04 +00 +39 +01 +00 +00 +0d +00 +00 +00 +04 +00 +41 +01 +00 +00 +0d +00 +00 +00 +02 +00 +46 +01 +00 +00 +1b +00 +00 +00 +02 +00 +4c +01 +00 +00 +1b +00 +00 +00 +04 +00 +52 +01 +00 +00 +1b +00 +00 +00 +01 +00 +5d +01 +00 +00 +1b +00 +00 +00 +04 +00 +64 +01 +00 +00 +1b +00 +00 +00 +02 +00 +6b +01 +00 +00 +1b +00 +00 +00 +04 +00 +72 +01 +00 +00 +1b +00 +00 +00 +04 +00 +7a +01 +00 +00 +1b +00 +00 +00 +04 +00 +82 +01 +00 +00 +1b +00 +00 +00 +02 +00 +87 +01 +00 +00 +06 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +05 +00 +00 +00 +02 +00 +08 +00 +00 +00 +05 +00 +00 +00 +01 +00 +10 +00 +00 +00 +04 +00 +00 +00 +02 +00 +14 +00 +00 +00 +04 +00 +00 +00 +01 +00 +1c +00 +00 +00 +06 +00 +00 +00 +02 +00 +20 +00 +00 +00 +06 +00 +00 +00 +01 +00 +28 +00 +00 +00 +07 +00 +00 +00 +02 +00 +2c +00 +00 +00 +07 +00 +00 +00 +01 +00 +34 +00 +00 +00 +08 +00 +00 +00 +02 +00 +38 +00 +00 +00 +08 +00 +00 +00 +01 +00 +40 +00 +00 +00 +16 +00 +00 +00 +02 +00 +44 +00 +00 +00 +16 +00 +00 +00 +01 +00 +00 +00 +00 +00 +0f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1c +00 +00 +00 +03 +00 +04 +00 +00 +00 +1c +00 +00 +00 +03 +00 +08 +00 +00 +00 +20 +00 +00 +00 +03 +00 +01 +07 +02 +00 +07 +01 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8b +1d +00 +00 +00 +00 +48 +b9 +00 +00 +00 +00 +00 +00 +00 +00 +48 +8d +15 +00 +00 +00 +00 +48 +8b +81 +00 +00 +00 +00 +48 +8b +05 +00 +00 +00 +00 +48 +8b +1d +00 +00 +00 +00 +48 +0f +b6 +05 +00 +00 +00 +00 +48 +0f +b6 +80 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +02 +00 +04 +00 +00 +00 +08 +00 +00 +00 +01 +00 +0e +00 +00 +00 +08 +00 +00 +00 +04 +00 +14 +00 +00 +00 +08 +00 +00 +00 +01 +00 +1f +00 +00 +00 +08 +00 +00 +00 +04 +00 +26 +00 +00 +00 +08 +00 +00 +00 +02 +00 +2d +00 +00 +00 +08 +00 +00 +00 +04 +00 +34 +00 +00 +00 +08 +00 +00 +00 +04 +00 +3c +00 +00 +00 +08 +00 +00 +00 +04 +00 +44 +00 +00 +00 +08 +00 +00 +00 +02 +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +a0 +01 +00 +00 +33 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +38 +36 +69 +64 +65 +6e +74 +00 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +02 +00 +66 +6f +6f +62 +61 +72 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +66 +6f +6f +62 +61 +72 +32 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +66 +6f +6f +62 +61 +72 +33 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +66 +6f +6f +62 +61 +72 +34 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +2e +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +01 +4c +00 +00 +00 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +04 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +00 +00 +1b +00 +00 +00 +08 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +00 +00 +28 +00 +00 +00 +10 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +00 +00 +34 +00 +00 +00 +14 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +00 +00 +41 +00 +00 +00 +1c +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +00 +00 +4b +00 +00 +00 +20 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +00 +00 +56 +00 +00 +00 +28 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +00 +00 +61 +00 +00 +00 +2c +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +00 +00 +6d +00 +00 +00 +34 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +00 +00 +78 +00 +00 +00 +38 +00 +00 +00 +02 +00 +00 +00 +03 +00 +78 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +03 +00 +78 +70 +74 +72 +00 +00 +00 +00 +40 +00 +00 +00 +02 +00 +00 +00 +03 +00 +78 +70 +74 +72 +32 +00 +00 +00 +44 +00 +00 +00 +02 +00 +00 +00 +03 +00 +2e +62 +73 +73 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +03 +01 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +79 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +03 +00 +00 +00 +03 +00 +74 +72 +61 +70 +00 +00 +00 +00 +91 +01 +00 +00 +01 +00 +00 +00 +03 +00 +74 +72 +61 +70 +2e +65 +6e +64 +a0 +01 +00 +00 +01 +00 +00 +00 +03 +00 +2e +70 +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +03 +01 +0c +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +00 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +03 +00 +2e +78 +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +03 +01 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +46 +4f +4f +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +03 +01 +48 +00 +00 +00 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +03 +00 +00 +00 +00 +00 +9d +00 +00 +00 +04 +00 +00 +00 +06 +00 +00 +00 +03 +00 +ad +00 +00 +00 +5f +5f +73 +61 +76 +69 +64 +65 +6e +74 +00 +73 +61 +76 +69 +64 +65 +6e +74 +70 +74 +72 +00 +73 +61 +76 +69 +64 +65 +6e +74 +70 +74 +72 +32 +00 +78 +38 +36 +69 +64 +65 +6e +74 +70 +74 +72 +00 +78 +38 +36 +69 +64 +65 +6e +74 +70 +74 +72 +32 +00 +66 +6f +6f +62 +61 +72 +70 +74 +72 +00 +66 +6f +6f +62 +61 +72 +70 +74 +72 +32 +00 +66 +6f +6f +62 +61 +72 +32 +70 +74 +72 +00 +66 +6f +6f +62 +61 +72 +32 +70 +74 +72 +32 +00 +66 +6f +6f +62 +61 +72 +33 +70 +74 +72 +00 +66 +6f +6f +62 +61 +72 +33 +70 +74 +72 +32 +00 +24 +78 +64 +61 +74 +61 +73 +79 +6d +00 +66 +6f +6f +5f +66 +6f +6f +62 +61 +72 +33 +70 +74 +72 +00 +66 +6f +6f +5f +66 +6f +6f +62 +61 +72 +33 +70 +74 +72 +32 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref.masm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref.masm new file mode 100644 index 0000000000..63042be830 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref.masm @@ -0,0 +1,139 @@ +public x86ident +public __savident +extrn foobar : proc +extrn foobar2 : abs +extrn foobar3 : qword +extrn foobar4 : byte + +_DATA SEGMENT +__savident dd 0 +savidentptr dd __savident +savidentptr2 dq __savident +x86identptr dd x86ident +x86identptr2 dq x86ident +foobarptr dd foobar +foobarptr2 dq foobar +foobar2ptr dd foobar2 +foobar2ptr2 dq foobar2 +foobar3ptr dd foobar3 +foobar3ptr2 dq foobar3 +xptr dd x +xptr2 dq x +;dataptr dd offset _DATA +;dataptr2 dq offset _DATA +;codeptr dd offset _TEXT +;codeptr2 dq offset _TEXT + +_DATA ENDS +_BSS SEGMENT +x dq ? +y dq ? + +_BSS ENDS +_TEXT SEGMENT +x86ident: + ; extern with :proc + mov ebx,[foobar] + mov rcx,offset foobar + lea rdx, foobar + mov rax, qword ptr foobar[rcx] + mov rax, foobar + mov rbx, foobar + movzx rax, byte ptr foobar + movzx rax, byte ptr foobar[rax] + + ; local proc + mov ebx,[trap] + mov rcx,offset trap + ; See note in YASM file + lea rdx, trap + mov rax, qword ptr trap[rcx] + mov rax, trap + mov rbx, trap + ; See note in YASM file + movzx rax, byte ptr trap + movzx rax, byte ptr trap[rax] + + ; with :abs + ;mov ebx,[foobar2] + ;mov rcx,offset foobar2 + ;lea rdx, foobar2 + ;mov rax, qword ptr foobar2[rcx] + ;mov rax, foobar2 + ;mov rbx, foobar2 + ;movzx rax, byte ptr foobar2 + ;movzx rax, byte ptr foobar2[rax] + + ; with :qword + mov ebx, offset foobar3 + mov ebx, dword ptr [foobar3] + mov rcx,offset foobar3 + lea rdx, foobar3 + mov rax, qword ptr foobar3[rcx] + mov rax, foobar3 + mov rbx, foobar3 + movzx rax, byte ptr foobar3 + movzx rax, byte ptr foobar3[rax] + + ; local var (dword) + mov ebx, offset __savident + mov ebx,[__savident] + mov rcx,offset __savident + lea rdx, __savident + mov rax, qword ptr __savident[rcx] + mov rax, qword ptr __savident + mov rbx, qword ptr __savident + movzx rax, byte ptr __savident + movzx rax, byte ptr __savident[rax] + + ; local var (qword) + mov ebx, offset savidentptr2 + mov ebx, dword ptr [savidentptr2] + mov rcx,offset savidentptr2 + lea rdx, savidentptr2 + mov rax, savidentptr2[rcx] + mov rax, savidentptr2 + mov rbx, savidentptr2 + movzx rax, byte ptr savidentptr2 + movzx rax, byte ptr savidentptr2[rax] + + ; bss local var (qword) + mov ebx, offset y + mov ebx, dword ptr [y] + mov rcx,offset y + lea rdx, y + mov rax, y[rcx] + mov rax, y + mov rbx, y + movzx rax, byte ptr y + movzx rax, byte ptr y[rax] + + call foobar + + call trap + + ret + +trap proc public frame + sub rsp, 256 + .allocstack 256 + .endprolog + int 3 + add rsp, 256 +trap endp + +_TEXT ENDS + +_FOO SEGMENT +foo_foobar3ptr dd foobar3 +foo_foobar3ptr2 dq foobar3 + mov ebx, dword ptr [foobar3] + mov rcx,offset foobar3 + lea rdx, foobar3 + mov rax, qword ptr foobar3[rcx] + mov rax, foobar3 + mov rbx, foobar3 + movzx rax, byte ptr foobar3 + movzx rax, byte ptr foobar3[rax] +_FOO ENDS +END diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref2.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref2.asm new file mode 100644 index 0000000000..75bb4d09da --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref2.asm @@ -0,0 +1,17 @@ +bits 64 + +section .text + +bar: + +mov eax, [foo wrt rip] +shl dword [foo wrt rip], 5 +cmp dword [foo wrt rip], 16 +cmp word [foo wrt rip], 10000 +cmp dword [foo wrt rip], 10000000 +je bar + +section .data + +foo: +dd 5 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref2.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref2.hex new file mode 100644 index 0000000000..1b7a430c40 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref2.hex @@ -0,0 +1,343 @@ +64 +86 +02 +00 +00 +00 +00 +00 +c3 +00 +00 +00 +08 +00 +00 +00 +00 +00 +04 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +29 +00 +00 +00 +64 +00 +00 +00 +8d +00 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +20 +00 +50 +60 +2e +64 +61 +74 +61 +00 +00 +00 +29 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +bf +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +50 +c0 +8b +05 +00 +00 +00 +00 +c1 +25 +00 +00 +00 +00 +05 +83 +3d +00 +00 +00 +00 +10 +66 +81 +3d +00 +00 +00 +00 +10 +27 +81 +3d +00 +00 +00 +00 +80 +96 +98 +00 +74 +d7 +02 +00 +00 +00 +05 +00 +00 +00 +04 +00 +08 +00 +00 +00 +05 +00 +00 +00 +05 +00 +0f +00 +00 +00 +05 +00 +00 +00 +05 +00 +17 +00 +00 +00 +05 +00 +00 +00 +06 +00 +1f +00 +00 +00 +05 +00 +00 +00 +08 +00 +05 +00 +00 +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +29 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +62 +61 +72 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +00 +66 +6f +6f +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +00 +2e +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +01 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref2.masm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref2.masm new file mode 100644 index 0000000000..827db3e0c5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-dataref2.masm @@ -0,0 +1,17 @@ + +_DATA SEGMENT +foo dd 0 + +_DATA ENDS +_TEXT SEGMENT +bar: +mov eax, foo +shl foo, 5 +cmp foo, 16 +cmp word ptr foo, 10000 +cmp foo, 10000000 +je bar + +_TEXT ENDS + +END diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-function.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-function.asm new file mode 100644 index 0000000000..b1af165ca2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-function.asm @@ -0,0 +1,4 @@ +global _foo:function + +_foo: + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-function.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-function.hex new file mode 100644 index 0000000000..ad94a4dd3e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-function.hex @@ -0,0 +1,154 @@ +64 +86 +01 +00 +00 +00 +00 +00 +3c +00 +00 +00 +05 +00 +00 +00 +00 +00 +04 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +50 +60 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5f +66 +6f +6f +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +20 +00 +02 +00 +04 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-imagebase.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-imagebase.asm new file mode 100644 index 0000000000..bd63602617 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-imagebase.asm @@ -0,0 +1,17 @@ +[section .text] +handler: ret +func: ret +func_end: + +[section .pdata] + dd func + dd func_end + dd myunwnd + +[section .xdata] +myunwnd: + db 9,0,0,0 + dd handler + +[section .foo] + dd handler wrt ..imagebase diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-imagebase.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-imagebase.hex new file mode 100644 index 0000000000..b715eb43b7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64-imagebase.hex @@ -0,0 +1,512 @@ +64 +86 +04 +00 +00 +00 +00 +00 +00 +01 +00 +00 +0e +00 +00 +00 +00 +00 +04 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +b4 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +50 +60 +2e +70 +64 +61 +74 +61 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +b6 +00 +00 +00 +c2 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +40 +00 +30 +40 +2e +78 +64 +61 +74 +61 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +e0 +00 +00 +00 +e8 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +40 +00 +40 +40 +2e +66 +6f +6f +00 +00 +00 +00 +16 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +f2 +00 +00 +00 +f6 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +20 +00 +00 +60 +c3 +c3 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +03 +00 +04 +00 +00 +00 +06 +00 +00 +00 +03 +00 +08 +00 +00 +00 +09 +00 +00 +00 +03 +00 +09 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +03 +00 +2e +66 +69 +6c +65 +00 +00 +00 +00 +00 +00 +00 +fe +ff +00 +00 +67 +01 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +01 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +68 +61 +6e +64 +6c +65 +72 +00 +00 +00 +00 +00 +01 +00 +00 +00 +03 +00 +66 +75 +6e +63 +00 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +03 +00 +66 +75 +6e +63 +5f +65 +6e +64 +02 +00 +00 +00 +01 +00 +00 +00 +03 +00 +2e +70 +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +03 +01 +0c +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6d +79 +75 +6e +77 +6e +64 +00 +00 +00 +00 +00 +03 +00 +00 +00 +03 +00 +2e +78 +64 +61 +74 +61 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +03 +01 +08 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +66 +6f +6f +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +03 +01 +04 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64_test.sh new file mode 100755 index 0000000000..4616900fd3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/win64/tests/win64_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh win64_test modules/objfmts/win64/tests "win64 objfmt" "-f win64" ".obj" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/CMakeLists.txt new file mode 100644 index 0000000000..681ec2b094 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/CMakeLists.txt @@ -0,0 +1,3 @@ +YASM_ADD_MODULE(objfmt_xdf + objfmts/xdf/xdf-objfmt.c + ) diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/Makefile.inc new file mode 100644 index 0000000000..ffdc68b8fd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/Makefile.inc @@ -0,0 +1,7 @@ +libyasm_a_SOURCES += modules/objfmts/xdf/xdf-objfmt.c + +YASM_MODULES += objfmt_xdf + +EXTRA_DIST += modules/objfmts/xdf/tests/Makefile.inc + +include modules/objfmts/xdf/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/Makefile.inc new file mode 100644 index 0000000000..c39ba301ac --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/Makefile.inc @@ -0,0 +1,18 @@ +TESTS += modules/objfmts/xdf/tests/xdf_test.sh + +EXTRA_DIST += modules/objfmts/xdf/tests/xdf_test.sh +EXTRA_DIST += modules/objfmts/xdf/tests/xdf-overdef.asm +EXTRA_DIST += modules/objfmts/xdf/tests/xdf-overdef.hex +EXTRA_DIST += modules/objfmts/xdf/tests/xdflong.asm +EXTRA_DIST += modules/objfmts/xdf/tests/xdflong.hex +EXTRA_DIST += modules/objfmts/xdf/tests/xdflong.errwarn +EXTRA_DIST += modules/objfmts/xdf/tests/xdfother.asm +EXTRA_DIST += modules/objfmts/xdf/tests/xdfother.hex +EXTRA_DIST += modules/objfmts/xdf/tests/xdfprotect.asm +EXTRA_DIST += modules/objfmts/xdf/tests/xdfprotect.hex +EXTRA_DIST += modules/objfmts/xdf/tests/xdfsect.asm +EXTRA_DIST += modules/objfmts/xdf/tests/xdfsect.hex +EXTRA_DIST += modules/objfmts/xdf/tests/xdfsect-err.asm +EXTRA_DIST += modules/objfmts/xdf/tests/xdfsect-err.errwarn +EXTRA_DIST += modules/objfmts/xdf/tests/xdfvirtual.asm +EXTRA_DIST += modules/objfmts/xdf/tests/xdfvirtual.hex diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdf-overdef.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdf-overdef.asm new file mode 100644 index 0000000000..e42d1f485c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdf-overdef.asm @@ -0,0 +1,2 @@ +section .text align=64 + diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdf-overdef.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdf-overdef.hex new file mode 100644 index 0000000000..d98026d249 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdf-overdef.hex @@ -0,0 +1,78 @@ +22 +43 +65 +87 +01 +00 +00 +00 +01 +00 +00 +00 +3e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdf_test.sh b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdf_test.sh new file mode 100755 index 0000000000..ee9d5d5f5e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdf_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh xdf_test modules/objfmts/xdf/tests "xdf objfmt" "-f xdf" ".xdf" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdflong.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdflong.asm new file mode 100644 index 0000000000..01cf36eed9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdflong.asm @@ -0,0 +1,231 @@ +;; ######################################################################## +;; Macros +;; ######################################################################## + +; descriptor type, base, limit, p_dpl_s, g_db_a +%macro descriptor 5 + dw %3 ; Limit 15-0 + dw %2 ; Base 15-0 + db %2 >> 16 ; Base 23-16 + db ((%4 & 0xF) << 4) | (%1 & 0xF ) ; p_dpl_s_type + db (%5 << 4) | ((%3 & 0xF0000) >> 16) ; g_db_a limit 19:16 + db %2 >> 24 ; Base 31-24 +%endmacro + +; cdesc64 base, limit, dpl +%macro cdesc64 3 + descriptor 0xB, %1, %2, 0x9 | (%3 & 0x3) << 1, 0xD +%endmacro + +; gates type, offset, selector, p_dpl_s +%macro gates 4 + dw %2 ; Offset 15-00 + dw %3 ; Selector + db 0 ; Ist + db ((%4 & 0xF) << 4) | (%1 & 0xF) ; p_dpl_s_type + dw %2 >> 16 ; Offset 31-16 + dd %2 >> 32 ; Offset 63-32 +%endmacro + +; idesc64 offset, selector, ring +%macro idesc64 3 + gates 0xE, %1, %2, 0x8 | ((%3 & 0x3) << 1) +%endmacro + + +; pageDirectory2M addr, nx, a, pcd, pwt, u, w, p +%macro pageDirectory2M 8 + db %2 << 7 + dw %1 >> 40 + dd %1 >> 8 + db (%3 << 5) | (%4 << 4) | (%5 << 3) | (%6 << 2) | (%7 << 1) | %8 +%endmacro + +; pageEntry2M addr, nx, pat, g, d, a, pcd, pwt, u, w, p +%macro pageEntry2M 11 + db %2 << 7 + db %1 >> 48 + dd %1 >> 16 + dw (%3 << 12) | (%4 << 8) | (%5 << 6) | (%6 << 5) | (%7 << 4) | (%8 << 3) | (%9 << 2) | (%10 << 1) | %11 | 0x80 +%endmacro + + +;; ######################################################################## +;; Code Section +;; ######################################################################## + +SECTION CODE ABSOLUTE=0xFFFFFFFF00000000 FLAT USE64 + +test_code: + + ;; Your Code Goes Here + add r8, r15 + + hlt + +;; ######################################################################## +;; Setup Section +;; ######################################################################## + +SECTION SETUP ALIGN=16 FLAT USE16 + +setup: + + xor edx, edx ; Enable Var MTRRs + mov eax, 0x0806 ; WriteBack + mov ecx, 0x2FF + wrmsr + + mov ebx, cr0 + or ebx, 0x00000021 ; Protect Mode On, Int 16 for FPU + and ebx, 0x9FFFFFFF ; Turn Caches on + mov cr0, ebx + + mov edx, cr4 + or edx, 0x00000620 ; Enable PAE, SSE OSFXSR, SEE OSXMMEXCPT + mov cr4, edx + + mov edx, pageMapL4 ; load pagetables + mov cr3, edx + + mov ecx, 0x80000080 + rdmsr ; Read EFER + bts eax, 8 ; Enable Long Mode (LME=1) + wrmsr ; Write EFER + + bts ebx, 31 ; Enable Paging (PG=1) + mov cr0, ebx + + ;; At this point LME=1, PAE=1, PG=1, CS.L=0, CS.D=0 + + lgdt [pgdt] ; Set GDT + lidt [pidt] ; Set IDT + + jmp 0x8 : long_mode + +long_mode: + + BITS 64 + + mov rax, qword test_code ; jmp to testcode + jmp [rax] + + + +;; ######################################################################## +;; Long Mode IDT +;; ######################################################################## + +SECTION IDTP ALIGN=16 FLAT USE64 + + ;; cdesc32 base, limit, dpl +gdt0: dq 0 ; 0x0000 - Null descriptor + cdesc64 zero, 0xFFFFF, 0 ; 0x0008 - Code Selector +gdt_: + + ;; idesc64 offset, selector, dpl +idt0: idesc64 isrL, 0x0008, 0 ; 0x00, 0 #DE, Divide Error + idesc64 isrL, 0x0008, 0 ; 0x01, 1 #DB, Debug Fault + idesc64 isrL, 0x0008, 0 ; 0x02, 2, ---, NMI + idesc64 isrL, 0x0008, 0 ; 0x03, 3, #BP, Breakpoint + idesc64 isrL, 0x0008, 0 ; 0x04, 4, #OF, INTO detected Overflow + idesc64 isrL, 0x0008, 0 ; 0x05, 5, #BR, Bound Range Exceeded + idesc64 isrL, 0x0008, 0 ; 0x06, 6, #UD, Invalid Opcode + idesc64 isrL, 0x0008, 0 ; 0x07, 7, #NM, Device Not Available + idesc64 isrL, 0x0008, 0 ; 0x08, 8, #DF, Double Fault + idesc64 isrL, 0x0008, 0 ; 0x09 9, ---, Coprocessor Segment Overrun + idesc64 isrL, 0x0008, 0 ; 0x0A, 10, #TS, Invalid TSS + idesc64 isrL, 0x0008, 0 ; 0x0B, 11, #NP, Segment Not Present + idesc64 isrL, 0x0008, 0 ; 0x0C, 12, #SS, Stack Fault + idesc64 isrL, 0x0008, 0 ; 0x0D, 13, #GP, General Protection Fault + idesc64 isrL, 0x0008, 0 ; 0x0E, 14, #PF, Page Fault + idesc64 isrL, 0x0008, 0 ; 0x0F, 15, ---, Reserved + idesc64 isrL, 0x0008, 0 ; 0x10, 16, #MF, Floating Point Fault + idesc64 isrL, 0x0008, 0 ; 0x11, 17, #AC, Alignment Check + idesc64 isrL, 0x0008, 0 ; 0x12 18, #MC, Machine Check + idesc64 isrL, 0x0008, 0 ; 0x13, 19, #XF, SSE Fault +idt_: + +pgdt: dw (gdt_ - gdt0) ; Limit + dd gdt0 ; base + +pidt: dw (idt_ - idt0) ; Limit + dd idt0 ; base + +isrL: mov eax, 0xDEADBEEF ; Default Interrupt Handler + out 0x80, eax + hlt + +;; ######################################################################## +;; Real Mode IDT +;; ######################################################################## + +SECTION IDTR ABSOLUTE=0x00000000 FLAT USE16 + + ;; FORMAT IP:CS +zero: dw isrR, 0 ; 0x00, 0 #DE, Divide Error + dw isrR, 0 ; 0x01, 1 #DB, Debug Fault + dw isrR, 0 ; 0x02, 2, ---, NMI + dw isrR, 0 ; 0x03, 3, #BP, Breakpoint + dw isrR, 0 ; 0x04, 4, #OF, INTO detected Overflow + dw isrR, 0 ; 0x05, 5, #BR, Bound Range Exceeded + dw isrR, 0 ; 0x06, 6, #UD, Invalid Opcode + dw isrR, 0 ; 0x07, 7, #NM, Device Not Available + dw isrR, 0 ; 0x08, 8, #DF, Double Fault + dw isrR, 0 ; 0x09 9, ---, Coprocessor Segment Overrun + dw isrR, 0 ; 0x0A, 10, #TS, Invalid TSS + dw isrR, 0 ; 0x0B, 11, #NP, Segment Not Present + dw isrR, 0 ; 0x0C, 12, #SS, Stack Fault + dw isrR, 0 ; 0x0D, 13, #GP, General Protection Fault + dw isrR, 0 ; 0x0E, 14, #PF, Page Fault + dw isrR, 0 ; 0x0F, 15, ---, Reserved + dw isrR, 0 ; 0x10, 16, #MF, Floating Point Fault + dw isrR, 0 ; 0x11, 17, #AC, Alignment Check + dw isrR, 0 ; 0x12 18, #MC, Machine Check + dw isrR, 0 ; 0x13, 19, #XF, SSE Fault + +isrR: mov eax, 0xDEADBEEF ; Default Real Interrupt Handler + out 0x80, eax + hlt + +;; ######################################################################## +;; 2 Meg Page Tables +;; ######################################################################## + +SECTION PAGE ALIGN=4096 FLAT + +pageDirE: +%assign addr 0 +%rep 512 + ; pageEntry addr, nx, pat, g, d, a, pcd, pwt, u, w, p + pageEntry2M addr, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1 ; Accessed, WB, User, Writable, Present +%assign addr addr + 0x200000 +%endrep + +pageDirP: +%rep 512 + ; pageDirPointer addr, nx, a, pcd, pwt, u, w, p + pageDirectory2M pageDirE, 0, 1, 0, 0, 1, 1, 1 ; Accessed, WB, User, Writable, Present +%endrep + +pageMapL4: +%rep 512 + ; pageDirectory addr, nx, a, pcd, pwt, u, w, p + pageDirectory2M pageDirP, 0, 1, 0, 0, 1, 1, 1 ; Accessed, WB, User, Writable, Present +%endrep + +;; ######################################################################## +;; SMM Handler +;; ######################################################################## + +SECTION SMM ABSOLUTE=0x00038000 USE16 + + rsm + +;; ######################################################################## +;; Reset Vector +;; ######################################################################## + +SECTION RESET ABSOLUTE=0xFFFFFFF0 USE16 + + jmp far setup diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdflong.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdflong.errwarn new file mode 100644 index 0000000000..04a4ad40e5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdflong.errwarn @@ -0,0 +1 @@ +-:123: warning: value does not fit in 16 bit field diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdflong.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdflong.hex new file mode 100644 index 0000000000..237fce5c7f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdflong.hex @@ -0,0 +1,47856 @@ +22 +43 +65 +87 +08 +00 +00 +00 +17 +00 +00 +00 +3d +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +ff +ff +ff +ff +00 +00 +00 +00 +ff +ff +ff +ff +00 +00 +43 +00 +4d +03 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +12 +00 +51 +03 +00 +00 +6a +00 +00 +00 +bb +03 +00 +00 +05 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +42 +00 +0b +04 +00 +00 +14 +01 +00 +00 +1f +05 +00 +00 +41 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +13 +00 +2f +09 +00 +00 +5a +00 +00 +00 +89 +09 +00 +00 +14 +00 +00 +00 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +02 +00 +c9 +0a +00 +00 +00 +30 +00 +00 +c9 +3a +00 +00 +00 +08 +00 +00 +15 +00 +00 +00 +00 +80 +03 +00 +00 +00 +00 +00 +00 +80 +03 +00 +00 +00 +00 +00 +00 +00 +11 +00 +c9 +ba +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +16 +00 +00 +00 +f0 +ff +ff +ff +00 +00 +00 +00 +f0 +ff +ff +ff +00 +00 +00 +00 +00 +00 +11 +00 +cb +ba +00 +00 +05 +00 +00 +00 +d0 +ba +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +c6 +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +cb +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +d5 +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +db +02 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +20 +00 +00 +e1 +02 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +01 +00 +00 +eb +02 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +06 +01 +00 +00 +f0 +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +5e +00 +00 +00 +f5 +02 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +ff +02 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +04 +03 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +09 +03 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +10 +00 +00 +00 +0e +03 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +10 +00 +00 +00 +13 +03 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +0c +01 +00 +00 +18 +03 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +01 +00 +00 +1d +03 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +22 +03 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +50 +00 +00 +00 +27 +03 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +2c +03 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +31 +03 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +10 +00 +00 +3a +03 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +43 +03 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +47 +03 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +43 +4f +44 +45 +00 +74 +65 +73 +74 +5f +63 +6f +64 +65 +00 +53 +45 +54 +55 +50 +00 +73 +65 +74 +75 +70 +00 +70 +61 +67 +65 +4d +61 +70 +4c +34 +00 +70 +67 +64 +74 +00 +70 +69 +64 +74 +00 +6c +6f +6e +67 +5f +6d +6f +64 +65 +00 +49 +44 +54 +50 +00 +67 +64 +74 +30 +00 +7a +65 +72 +6f +00 +67 +64 +74 +5f +00 +69 +64 +74 +30 +00 +69 +73 +72 +4c +00 +69 +64 +74 +5f +00 +49 +44 +54 +52 +00 +69 +73 +72 +52 +00 +50 +41 +47 +45 +00 +70 +61 +67 +65 +44 +69 +72 +45 +00 +70 +61 +67 +65 +44 +69 +72 +50 +00 +53 +4d +4d +00 +52 +45 +53 +45 +54 +00 +4d +01 +f8 +f4 +66 +31 +d2 +66 +b8 +06 +08 +00 +00 +66 +b9 +ff +02 +00 +00 +0f +30 +0f +20 +c3 +66 +83 +cb +21 +66 +81 +e3 +ff +ff +ff +9f +0f +22 +c3 +0f +20 +e2 +66 +81 +ca +20 +06 +00 +00 +0f +22 +e2 +66 +ba +00 +00 +00 +00 +0f +22 +da +66 +b9 +80 +00 +00 +80 +0f +32 +66 +0f +ba +e8 +08 +0f +30 +66 +0f +ba +eb +1f +0f +22 +c3 +0f +01 +16 +00 +00 +0f +01 +1e +00 +00 +ea +00 +00 +08 +00 +48 +b8 +00 +00 +00 +00 +00 +00 +00 +00 +ff +20 +31 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +01 +04 +00 +00 +52 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +57 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +5a +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +60 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +01 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +ff +00 +00 +00 +9b +df +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +f0 +00 +00 +00 +00 +00 +b8 +ef +be +ad +de +e7 +80 +f4 +0a +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +0c +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +01 +10 +00 +0f +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +01 +18 +00 +10 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +16 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +18 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +1c +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +22 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +24 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +28 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +2e +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +30 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +34 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +3a +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +3c +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +40 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +46 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +48 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +4c +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +52 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +54 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +58 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +5e +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +60 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +64 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +6a +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +6c +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +70 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +76 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +78 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +7c +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +82 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +84 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +88 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +8e +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +90 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +94 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +9a +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +9c +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +a0 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +a6 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +a8 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +ac +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +b2 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +b4 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +b8 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +be +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +c0 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +c4 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +ca +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +cc +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +d0 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +d6 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +d8 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +dc +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +e2 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +e4 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +e8 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +ee +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +f0 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +f4 +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +fa +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +02 +10 +00 +fc +00 +00 +00 +0e +00 +00 +00 +00 +00 +00 +00 +01 +04 +20 +00 +02 +01 +00 +00 +0a +00 +00 +00 +00 +00 +00 +00 +01 +04 +00 +00 +08 +01 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +66 +b8 +ef +be +ad +de +66 +e7 +80 +f4 +00 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +04 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +08 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +0c +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +10 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +14 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +18 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +1c +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +20 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +24 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +28 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +2c +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +30 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +34 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +38 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +3c +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +40 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +44 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +48 +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +4c +00 +00 +00 +11 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +00 +00 +00 +00 +00 +00 +e7 +00 +00 +00 +20 +00 +00 +00 +e7 +00 +00 +00 +40 +00 +00 +00 +e7 +00 +00 +00 +60 +00 +00 +00 +e7 +00 +00 +00 +80 +00 +00 +00 +e7 +00 +00 +00 +a0 +00 +00 +00 +e7 +00 +00 +00 +c0 +00 +00 +00 +e7 +00 +00 +00 +e0 +00 +00 +00 +e7 +00 +00 +00 +00 +01 +00 +00 +e7 +00 +00 +00 +20 +01 +00 +00 +e7 +00 +00 +00 +40 +01 +00 +00 +e7 +00 +00 +00 +60 +01 +00 +00 +e7 +00 +00 +00 +80 +01 +00 +00 +e7 +00 +00 +00 +a0 +01 +00 +00 +e7 +00 +00 +00 +c0 +01 +00 +00 +e7 +00 +00 +00 +e0 +01 +00 +00 +e7 +00 +00 +00 +00 +02 +00 +00 +e7 +00 +00 +00 +20 +02 +00 +00 +e7 +00 +00 +00 +40 +02 +00 +00 +e7 +00 +00 +00 +60 +02 +00 +00 +e7 +00 +00 +00 +80 +02 +00 +00 +e7 +00 +00 +00 +a0 +02 +00 +00 +e7 +00 +00 +00 +c0 +02 +00 +00 +e7 +00 +00 +00 +e0 +02 +00 +00 +e7 +00 +00 +00 +00 +03 +00 +00 +e7 +00 +00 +00 +20 +03 +00 +00 +e7 +00 +00 +00 +40 +03 +00 +00 +e7 +00 +00 +00 +60 +03 +00 +00 +e7 +00 +00 +00 +80 +03 +00 +00 +e7 +00 +00 +00 +a0 +03 +00 +00 +e7 +00 +00 +00 +c0 +03 +00 +00 +e7 +00 +00 +00 +e0 +03 +00 +00 +e7 +00 +00 +00 +00 +04 +00 +00 +e7 +00 +00 +00 +20 +04 +00 +00 +e7 +00 +00 +00 +40 +04 +00 +00 +e7 +00 +00 +00 +60 +04 +00 +00 +e7 +00 +00 +00 +80 +04 +00 +00 +e7 +00 +00 +00 +a0 +04 +00 +00 +e7 +00 +00 +00 +c0 +04 +00 +00 +e7 +00 +00 +00 +e0 +04 +00 +00 +e7 +00 +00 +00 +00 +05 +00 +00 +e7 +00 +00 +00 +20 +05 +00 +00 +e7 +00 +00 +00 +40 +05 +00 +00 +e7 +00 +00 +00 +60 +05 +00 +00 +e7 +00 +00 +00 +80 +05 +00 +00 +e7 +00 +00 +00 +a0 +05 +00 +00 +e7 +00 +00 +00 +c0 +05 +00 +00 +e7 +00 +00 +00 +e0 +05 +00 +00 +e7 +00 +00 +00 +00 +06 +00 +00 +e7 +00 +00 +00 +20 +06 +00 +00 +e7 +00 +00 +00 +40 +06 +00 +00 +e7 +00 +00 +00 +60 +06 +00 +00 +e7 +00 +00 +00 +80 +06 +00 +00 +e7 +00 +00 +00 +a0 +06 +00 +00 +e7 +00 +00 +00 +c0 +06 +00 +00 +e7 +00 +00 +00 +e0 +06 +00 +00 +e7 +00 +00 +00 +00 +07 +00 +00 +e7 +00 +00 +00 +20 +07 +00 +00 +e7 +00 +00 +00 +40 +07 +00 +00 +e7 +00 +00 +00 +60 +07 +00 +00 +e7 +00 +00 +00 +80 +07 +00 +00 +e7 +00 +00 +00 +a0 +07 +00 +00 +e7 +00 +00 +00 +c0 +07 +00 +00 +e7 +00 +00 +00 +e0 +07 +00 +00 +e7 +00 +00 +00 +00 +08 +00 +00 +e7 +00 +00 +00 +20 +08 +00 +00 +e7 +00 +00 +00 +40 +08 +00 +00 +e7 +00 +00 +00 +60 +08 +00 +00 +e7 +00 +00 +00 +80 +08 +00 +00 +e7 +00 +00 +00 +a0 +08 +00 +00 +e7 +00 +00 +00 +c0 +08 +00 +00 +e7 +00 +00 +00 +e0 +08 +00 +00 +e7 +00 +00 +00 +00 +09 +00 +00 +e7 +00 +00 +00 +20 +09 +00 +00 +e7 +00 +00 +00 +40 +09 +00 +00 +e7 +00 +00 +00 +60 +09 +00 +00 +e7 +00 +00 +00 +80 +09 +00 +00 +e7 +00 +00 +00 +a0 +09 +00 +00 +e7 +00 +00 +00 +c0 +09 +00 +00 +e7 +00 +00 +00 +e0 +09 +00 +00 +e7 +00 +00 +00 +00 +0a +00 +00 +e7 +00 +00 +00 +20 +0a +00 +00 +e7 +00 +00 +00 +40 +0a +00 +00 +e7 +00 +00 +00 +60 +0a +00 +00 +e7 +00 +00 +00 +80 +0a +00 +00 +e7 +00 +00 +00 +a0 +0a +00 +00 +e7 +00 +00 +00 +c0 +0a +00 +00 +e7 +00 +00 +00 +e0 +0a +00 +00 +e7 +00 +00 +00 +00 +0b +00 +00 +e7 +00 +00 +00 +20 +0b +00 +00 +e7 +00 +00 +00 +40 +0b +00 +00 +e7 +00 +00 +00 +60 +0b +00 +00 +e7 +00 +00 +00 +80 +0b +00 +00 +e7 +00 +00 +00 +a0 +0b +00 +00 +e7 +00 +00 +00 +c0 +0b +00 +00 +e7 +00 +00 +00 +e0 +0b +00 +00 +e7 +00 +00 +00 +00 +0c +00 +00 +e7 +00 +00 +00 +20 +0c +00 +00 +e7 +00 +00 +00 +40 +0c +00 +00 +e7 +00 +00 +00 +60 +0c +00 +00 +e7 +00 +00 +00 +80 +0c +00 +00 +e7 +00 +00 +00 +a0 +0c +00 +00 +e7 +00 +00 +00 +c0 +0c +00 +00 +e7 +00 +00 +00 +e0 +0c +00 +00 +e7 +00 +00 +00 +00 +0d +00 +00 +e7 +00 +00 +00 +20 +0d +00 +00 +e7 +00 +00 +00 +40 +0d +00 +00 +e7 +00 +00 +00 +60 +0d +00 +00 +e7 +00 +00 +00 +80 +0d +00 +00 +e7 +00 +00 +00 +a0 +0d +00 +00 +e7 +00 +00 +00 +c0 +0d +00 +00 +e7 +00 +00 +00 +e0 +0d +00 +00 +e7 +00 +00 +00 +00 +0e +00 +00 +e7 +00 +00 +00 +20 +0e +00 +00 +e7 +00 +00 +00 +40 +0e +00 +00 +e7 +00 +00 +00 +60 +0e +00 +00 +e7 +00 +00 +00 +80 +0e +00 +00 +e7 +00 +00 +00 +a0 +0e +00 +00 +e7 +00 +00 +00 +c0 +0e +00 +00 +e7 +00 +00 +00 +e0 +0e +00 +00 +e7 +00 +00 +00 +00 +0f +00 +00 +e7 +00 +00 +00 +20 +0f +00 +00 +e7 +00 +00 +00 +40 +0f +00 +00 +e7 +00 +00 +00 +60 +0f +00 +00 +e7 +00 +00 +00 +80 +0f +00 +00 +e7 +00 +00 +00 +a0 +0f +00 +00 +e7 +00 +00 +00 +c0 +0f +00 +00 +e7 +00 +00 +00 +e0 +0f +00 +00 +e7 +00 +00 +00 +00 +10 +00 +00 +e7 +00 +00 +00 +20 +10 +00 +00 +e7 +00 +00 +00 +40 +10 +00 +00 +e7 +00 +00 +00 +60 +10 +00 +00 +e7 +00 +00 +00 +80 +10 +00 +00 +e7 +00 +00 +00 +a0 +10 +00 +00 +e7 +00 +00 +00 +c0 +10 +00 +00 +e7 +00 +00 +00 +e0 +10 +00 +00 +e7 +00 +00 +00 +00 +11 +00 +00 +e7 +00 +00 +00 +20 +11 +00 +00 +e7 +00 +00 +00 +40 +11 +00 +00 +e7 +00 +00 +00 +60 +11 +00 +00 +e7 +00 +00 +00 +80 +11 +00 +00 +e7 +00 +00 +00 +a0 +11 +00 +00 +e7 +00 +00 +00 +c0 +11 +00 +00 +e7 +00 +00 +00 +e0 +11 +00 +00 +e7 +00 +00 +00 +00 +12 +00 +00 +e7 +00 +00 +00 +20 +12 +00 +00 +e7 +00 +00 +00 +40 +12 +00 +00 +e7 +00 +00 +00 +60 +12 +00 +00 +e7 +00 +00 +00 +80 +12 +00 +00 +e7 +00 +00 +00 +a0 +12 +00 +00 +e7 +00 +00 +00 +c0 +12 +00 +00 +e7 +00 +00 +00 +e0 +12 +00 +00 +e7 +00 +00 +00 +00 +13 +00 +00 +e7 +00 +00 +00 +20 +13 +00 +00 +e7 +00 +00 +00 +40 +13 +00 +00 +e7 +00 +00 +00 +60 +13 +00 +00 +e7 +00 +00 +00 +80 +13 +00 +00 +e7 +00 +00 +00 +a0 +13 +00 +00 +e7 +00 +00 +00 +c0 +13 +00 +00 +e7 +00 +00 +00 +e0 +13 +00 +00 +e7 +00 +00 +00 +00 +14 +00 +00 +e7 +00 +00 +00 +20 +14 +00 +00 +e7 +00 +00 +00 +40 +14 +00 +00 +e7 +00 +00 +00 +60 +14 +00 +00 +e7 +00 +00 +00 +80 +14 +00 +00 +e7 +00 +00 +00 +a0 +14 +00 +00 +e7 +00 +00 +00 +c0 +14 +00 +00 +e7 +00 +00 +00 +e0 +14 +00 +00 +e7 +00 +00 +00 +00 +15 +00 +00 +e7 +00 +00 +00 +20 +15 +00 +00 +e7 +00 +00 +00 +40 +15 +00 +00 +e7 +00 +00 +00 +60 +15 +00 +00 +e7 +00 +00 +00 +80 +15 +00 +00 +e7 +00 +00 +00 +a0 +15 +00 +00 +e7 +00 +00 +00 +c0 +15 +00 +00 +e7 +00 +00 +00 +e0 +15 +00 +00 +e7 +00 +00 +00 +00 +16 +00 +00 +e7 +00 +00 +00 +20 +16 +00 +00 +e7 +00 +00 +00 +40 +16 +00 +00 +e7 +00 +00 +00 +60 +16 +00 +00 +e7 +00 +00 +00 +80 +16 +00 +00 +e7 +00 +00 +00 +a0 +16 +00 +00 +e7 +00 +00 +00 +c0 +16 +00 +00 +e7 +00 +00 +00 +e0 +16 +00 +00 +e7 +00 +00 +00 +00 +17 +00 +00 +e7 +00 +00 +00 +20 +17 +00 +00 +e7 +00 +00 +00 +40 +17 +00 +00 +e7 +00 +00 +00 +60 +17 +00 +00 +e7 +00 +00 +00 +80 +17 +00 +00 +e7 +00 +00 +00 +a0 +17 +00 +00 +e7 +00 +00 +00 +c0 +17 +00 +00 +e7 +00 +00 +00 +e0 +17 +00 +00 +e7 +00 +00 +00 +00 +18 +00 +00 +e7 +00 +00 +00 +20 +18 +00 +00 +e7 +00 +00 +00 +40 +18 +00 +00 +e7 +00 +00 +00 +60 +18 +00 +00 +e7 +00 +00 +00 +80 +18 +00 +00 +e7 +00 +00 +00 +a0 +18 +00 +00 +e7 +00 +00 +00 +c0 +18 +00 +00 +e7 +00 +00 +00 +e0 +18 +00 +00 +e7 +00 +00 +00 +00 +19 +00 +00 +e7 +00 +00 +00 +20 +19 +00 +00 +e7 +00 +00 +00 +40 +19 +00 +00 +e7 +00 +00 +00 +60 +19 +00 +00 +e7 +00 +00 +00 +80 +19 +00 +00 +e7 +00 +00 +00 +a0 +19 +00 +00 +e7 +00 +00 +00 +c0 +19 +00 +00 +e7 +00 +00 +00 +e0 +19 +00 +00 +e7 +00 +00 +00 +00 +1a +00 +00 +e7 +00 +00 +00 +20 +1a +00 +00 +e7 +00 +00 +00 +40 +1a +00 +00 +e7 +00 +00 +00 +60 +1a +00 +00 +e7 +00 +00 +00 +80 +1a +00 +00 +e7 +00 +00 +00 +a0 +1a +00 +00 +e7 +00 +00 +00 +c0 +1a +00 +00 +e7 +00 +00 +00 +e0 +1a +00 +00 +e7 +00 +00 +00 +00 +1b +00 +00 +e7 +00 +00 +00 +20 +1b +00 +00 +e7 +00 +00 +00 +40 +1b +00 +00 +e7 +00 +00 +00 +60 +1b +00 +00 +e7 +00 +00 +00 +80 +1b +00 +00 +e7 +00 +00 +00 +a0 +1b +00 +00 +e7 +00 +00 +00 +c0 +1b +00 +00 +e7 +00 +00 +00 +e0 +1b +00 +00 +e7 +00 +00 +00 +00 +1c +00 +00 +e7 +00 +00 +00 +20 +1c +00 +00 +e7 +00 +00 +00 +40 +1c +00 +00 +e7 +00 +00 +00 +60 +1c +00 +00 +e7 +00 +00 +00 +80 +1c +00 +00 +e7 +00 +00 +00 +a0 +1c +00 +00 +e7 +00 +00 +00 +c0 +1c +00 +00 +e7 +00 +00 +00 +e0 +1c +00 +00 +e7 +00 +00 +00 +00 +1d +00 +00 +e7 +00 +00 +00 +20 +1d +00 +00 +e7 +00 +00 +00 +40 +1d +00 +00 +e7 +00 +00 +00 +60 +1d +00 +00 +e7 +00 +00 +00 +80 +1d +00 +00 +e7 +00 +00 +00 +a0 +1d +00 +00 +e7 +00 +00 +00 +c0 +1d +00 +00 +e7 +00 +00 +00 +e0 +1d +00 +00 +e7 +00 +00 +00 +00 +1e +00 +00 +e7 +00 +00 +00 +20 +1e +00 +00 +e7 +00 +00 +00 +40 +1e +00 +00 +e7 +00 +00 +00 +60 +1e +00 +00 +e7 +00 +00 +00 +80 +1e +00 +00 +e7 +00 +00 +00 +a0 +1e +00 +00 +e7 +00 +00 +00 +c0 +1e +00 +00 +e7 +00 +00 +00 +e0 +1e +00 +00 +e7 +00 +00 +00 +00 +1f +00 +00 +e7 +00 +00 +00 +20 +1f +00 +00 +e7 +00 +00 +00 +40 +1f +00 +00 +e7 +00 +00 +00 +60 +1f +00 +00 +e7 +00 +00 +00 +80 +1f +00 +00 +e7 +00 +00 +00 +a0 +1f +00 +00 +e7 +00 +00 +00 +c0 +1f +00 +00 +e7 +00 +00 +00 +e0 +1f +00 +00 +e7 +00 +00 +00 +00 +20 +00 +00 +e7 +00 +00 +00 +20 +20 +00 +00 +e7 +00 +00 +00 +40 +20 +00 +00 +e7 +00 +00 +00 +60 +20 +00 +00 +e7 +00 +00 +00 +80 +20 +00 +00 +e7 +00 +00 +00 +a0 +20 +00 +00 +e7 +00 +00 +00 +c0 +20 +00 +00 +e7 +00 +00 +00 +e0 +20 +00 +00 +e7 +00 +00 +00 +00 +21 +00 +00 +e7 +00 +00 +00 +20 +21 +00 +00 +e7 +00 +00 +00 +40 +21 +00 +00 +e7 +00 +00 +00 +60 +21 +00 +00 +e7 +00 +00 +00 +80 +21 +00 +00 +e7 +00 +00 +00 +a0 +21 +00 +00 +e7 +00 +00 +00 +c0 +21 +00 +00 +e7 +00 +00 +00 +e0 +21 +00 +00 +e7 +00 +00 +00 +00 +22 +00 +00 +e7 +00 +00 +00 +20 +22 +00 +00 +e7 +00 +00 +00 +40 +22 +00 +00 +e7 +00 +00 +00 +60 +22 +00 +00 +e7 +00 +00 +00 +80 +22 +00 +00 +e7 +00 +00 +00 +a0 +22 +00 +00 +e7 +00 +00 +00 +c0 +22 +00 +00 +e7 +00 +00 +00 +e0 +22 +00 +00 +e7 +00 +00 +00 +00 +23 +00 +00 +e7 +00 +00 +00 +20 +23 +00 +00 +e7 +00 +00 +00 +40 +23 +00 +00 +e7 +00 +00 +00 +60 +23 +00 +00 +e7 +00 +00 +00 +80 +23 +00 +00 +e7 +00 +00 +00 +a0 +23 +00 +00 +e7 +00 +00 +00 +c0 +23 +00 +00 +e7 +00 +00 +00 +e0 +23 +00 +00 +e7 +00 +00 +00 +00 +24 +00 +00 +e7 +00 +00 +00 +20 +24 +00 +00 +e7 +00 +00 +00 +40 +24 +00 +00 +e7 +00 +00 +00 +60 +24 +00 +00 +e7 +00 +00 +00 +80 +24 +00 +00 +e7 +00 +00 +00 +a0 +24 +00 +00 +e7 +00 +00 +00 +c0 +24 +00 +00 +e7 +00 +00 +00 +e0 +24 +00 +00 +e7 +00 +00 +00 +00 +25 +00 +00 +e7 +00 +00 +00 +20 +25 +00 +00 +e7 +00 +00 +00 +40 +25 +00 +00 +e7 +00 +00 +00 +60 +25 +00 +00 +e7 +00 +00 +00 +80 +25 +00 +00 +e7 +00 +00 +00 +a0 +25 +00 +00 +e7 +00 +00 +00 +c0 +25 +00 +00 +e7 +00 +00 +00 +e0 +25 +00 +00 +e7 +00 +00 +00 +00 +26 +00 +00 +e7 +00 +00 +00 +20 +26 +00 +00 +e7 +00 +00 +00 +40 +26 +00 +00 +e7 +00 +00 +00 +60 +26 +00 +00 +e7 +00 +00 +00 +80 +26 +00 +00 +e7 +00 +00 +00 +a0 +26 +00 +00 +e7 +00 +00 +00 +c0 +26 +00 +00 +e7 +00 +00 +00 +e0 +26 +00 +00 +e7 +00 +00 +00 +00 +27 +00 +00 +e7 +00 +00 +00 +20 +27 +00 +00 +e7 +00 +00 +00 +40 +27 +00 +00 +e7 +00 +00 +00 +60 +27 +00 +00 +e7 +00 +00 +00 +80 +27 +00 +00 +e7 +00 +00 +00 +a0 +27 +00 +00 +e7 +00 +00 +00 +c0 +27 +00 +00 +e7 +00 +00 +00 +e0 +27 +00 +00 +e7 +00 +00 +00 +00 +28 +00 +00 +e7 +00 +00 +00 +20 +28 +00 +00 +e7 +00 +00 +00 +40 +28 +00 +00 +e7 +00 +00 +00 +60 +28 +00 +00 +e7 +00 +00 +00 +80 +28 +00 +00 +e7 +00 +00 +00 +a0 +28 +00 +00 +e7 +00 +00 +00 +c0 +28 +00 +00 +e7 +00 +00 +00 +e0 +28 +00 +00 +e7 +00 +00 +00 +00 +29 +00 +00 +e7 +00 +00 +00 +20 +29 +00 +00 +e7 +00 +00 +00 +40 +29 +00 +00 +e7 +00 +00 +00 +60 +29 +00 +00 +e7 +00 +00 +00 +80 +29 +00 +00 +e7 +00 +00 +00 +a0 +29 +00 +00 +e7 +00 +00 +00 +c0 +29 +00 +00 +e7 +00 +00 +00 +e0 +29 +00 +00 +e7 +00 +00 +00 +00 +2a +00 +00 +e7 +00 +00 +00 +20 +2a +00 +00 +e7 +00 +00 +00 +40 +2a +00 +00 +e7 +00 +00 +00 +60 +2a +00 +00 +e7 +00 +00 +00 +80 +2a +00 +00 +e7 +00 +00 +00 +a0 +2a +00 +00 +e7 +00 +00 +00 +c0 +2a +00 +00 +e7 +00 +00 +00 +e0 +2a +00 +00 +e7 +00 +00 +00 +00 +2b +00 +00 +e7 +00 +00 +00 +20 +2b +00 +00 +e7 +00 +00 +00 +40 +2b +00 +00 +e7 +00 +00 +00 +60 +2b +00 +00 +e7 +00 +00 +00 +80 +2b +00 +00 +e7 +00 +00 +00 +a0 +2b +00 +00 +e7 +00 +00 +00 +c0 +2b +00 +00 +e7 +00 +00 +00 +e0 +2b +00 +00 +e7 +00 +00 +00 +00 +2c +00 +00 +e7 +00 +00 +00 +20 +2c +00 +00 +e7 +00 +00 +00 +40 +2c +00 +00 +e7 +00 +00 +00 +60 +2c +00 +00 +e7 +00 +00 +00 +80 +2c +00 +00 +e7 +00 +00 +00 +a0 +2c +00 +00 +e7 +00 +00 +00 +c0 +2c +00 +00 +e7 +00 +00 +00 +e0 +2c +00 +00 +e7 +00 +00 +00 +00 +2d +00 +00 +e7 +00 +00 +00 +20 +2d +00 +00 +e7 +00 +00 +00 +40 +2d +00 +00 +e7 +00 +00 +00 +60 +2d +00 +00 +e7 +00 +00 +00 +80 +2d +00 +00 +e7 +00 +00 +00 +a0 +2d +00 +00 +e7 +00 +00 +00 +c0 +2d +00 +00 +e7 +00 +00 +00 +e0 +2d +00 +00 +e7 +00 +00 +00 +00 +2e +00 +00 +e7 +00 +00 +00 +20 +2e +00 +00 +e7 +00 +00 +00 +40 +2e +00 +00 +e7 +00 +00 +00 +60 +2e +00 +00 +e7 +00 +00 +00 +80 +2e +00 +00 +e7 +00 +00 +00 +a0 +2e +00 +00 +e7 +00 +00 +00 +c0 +2e +00 +00 +e7 +00 +00 +00 +e0 +2e +00 +00 +e7 +00 +00 +00 +00 +2f +00 +00 +e7 +00 +00 +00 +20 +2f +00 +00 +e7 +00 +00 +00 +40 +2f +00 +00 +e7 +00 +00 +00 +60 +2f +00 +00 +e7 +00 +00 +00 +80 +2f +00 +00 +e7 +00 +00 +00 +a0 +2f +00 +00 +e7 +00 +00 +00 +c0 +2f +00 +00 +e7 +00 +00 +00 +e0 +2f +00 +00 +e7 +00 +00 +00 +00 +30 +00 +00 +e7 +00 +00 +00 +20 +30 +00 +00 +e7 +00 +00 +00 +40 +30 +00 +00 +e7 +00 +00 +00 +60 +30 +00 +00 +e7 +00 +00 +00 +80 +30 +00 +00 +e7 +00 +00 +00 +a0 +30 +00 +00 +e7 +00 +00 +00 +c0 +30 +00 +00 +e7 +00 +00 +00 +e0 +30 +00 +00 +e7 +00 +00 +00 +00 +31 +00 +00 +e7 +00 +00 +00 +20 +31 +00 +00 +e7 +00 +00 +00 +40 +31 +00 +00 +e7 +00 +00 +00 +60 +31 +00 +00 +e7 +00 +00 +00 +80 +31 +00 +00 +e7 +00 +00 +00 +a0 +31 +00 +00 +e7 +00 +00 +00 +c0 +31 +00 +00 +e7 +00 +00 +00 +e0 +31 +00 +00 +e7 +00 +00 +00 +00 +32 +00 +00 +e7 +00 +00 +00 +20 +32 +00 +00 +e7 +00 +00 +00 +40 +32 +00 +00 +e7 +00 +00 +00 +60 +32 +00 +00 +e7 +00 +00 +00 +80 +32 +00 +00 +e7 +00 +00 +00 +a0 +32 +00 +00 +e7 +00 +00 +00 +c0 +32 +00 +00 +e7 +00 +00 +00 +e0 +32 +00 +00 +e7 +00 +00 +00 +00 +33 +00 +00 +e7 +00 +00 +00 +20 +33 +00 +00 +e7 +00 +00 +00 +40 +33 +00 +00 +e7 +00 +00 +00 +60 +33 +00 +00 +e7 +00 +00 +00 +80 +33 +00 +00 +e7 +00 +00 +00 +a0 +33 +00 +00 +e7 +00 +00 +00 +c0 +33 +00 +00 +e7 +00 +00 +00 +e0 +33 +00 +00 +e7 +00 +00 +00 +00 +34 +00 +00 +e7 +00 +00 +00 +20 +34 +00 +00 +e7 +00 +00 +00 +40 +34 +00 +00 +e7 +00 +00 +00 +60 +34 +00 +00 +e7 +00 +00 +00 +80 +34 +00 +00 +e7 +00 +00 +00 +a0 +34 +00 +00 +e7 +00 +00 +00 +c0 +34 +00 +00 +e7 +00 +00 +00 +e0 +34 +00 +00 +e7 +00 +00 +00 +00 +35 +00 +00 +e7 +00 +00 +00 +20 +35 +00 +00 +e7 +00 +00 +00 +40 +35 +00 +00 +e7 +00 +00 +00 +60 +35 +00 +00 +e7 +00 +00 +00 +80 +35 +00 +00 +e7 +00 +00 +00 +a0 +35 +00 +00 +e7 +00 +00 +00 +c0 +35 +00 +00 +e7 +00 +00 +00 +e0 +35 +00 +00 +e7 +00 +00 +00 +00 +36 +00 +00 +e7 +00 +00 +00 +20 +36 +00 +00 +e7 +00 +00 +00 +40 +36 +00 +00 +e7 +00 +00 +00 +60 +36 +00 +00 +e7 +00 +00 +00 +80 +36 +00 +00 +e7 +00 +00 +00 +a0 +36 +00 +00 +e7 +00 +00 +00 +c0 +36 +00 +00 +e7 +00 +00 +00 +e0 +36 +00 +00 +e7 +00 +00 +00 +00 +37 +00 +00 +e7 +00 +00 +00 +20 +37 +00 +00 +e7 +00 +00 +00 +40 +37 +00 +00 +e7 +00 +00 +00 +60 +37 +00 +00 +e7 +00 +00 +00 +80 +37 +00 +00 +e7 +00 +00 +00 +a0 +37 +00 +00 +e7 +00 +00 +00 +c0 +37 +00 +00 +e7 +00 +00 +00 +e0 +37 +00 +00 +e7 +00 +00 +00 +00 +38 +00 +00 +e7 +00 +00 +00 +20 +38 +00 +00 +e7 +00 +00 +00 +40 +38 +00 +00 +e7 +00 +00 +00 +60 +38 +00 +00 +e7 +00 +00 +00 +80 +38 +00 +00 +e7 +00 +00 +00 +a0 +38 +00 +00 +e7 +00 +00 +00 +c0 +38 +00 +00 +e7 +00 +00 +00 +e0 +38 +00 +00 +e7 +00 +00 +00 +00 +39 +00 +00 +e7 +00 +00 +00 +20 +39 +00 +00 +e7 +00 +00 +00 +40 +39 +00 +00 +e7 +00 +00 +00 +60 +39 +00 +00 +e7 +00 +00 +00 +80 +39 +00 +00 +e7 +00 +00 +00 +a0 +39 +00 +00 +e7 +00 +00 +00 +c0 +39 +00 +00 +e7 +00 +00 +00 +e0 +39 +00 +00 +e7 +00 +00 +00 +00 +3a +00 +00 +e7 +00 +00 +00 +20 +3a +00 +00 +e7 +00 +00 +00 +40 +3a +00 +00 +e7 +00 +00 +00 +60 +3a +00 +00 +e7 +00 +00 +00 +80 +3a +00 +00 +e7 +00 +00 +00 +a0 +3a +00 +00 +e7 +00 +00 +00 +c0 +3a +00 +00 +e7 +00 +00 +00 +e0 +3a +00 +00 +e7 +00 +00 +00 +00 +3b +00 +00 +e7 +00 +00 +00 +20 +3b +00 +00 +e7 +00 +00 +00 +40 +3b +00 +00 +e7 +00 +00 +00 +60 +3b +00 +00 +e7 +00 +00 +00 +80 +3b +00 +00 +e7 +00 +00 +00 +a0 +3b +00 +00 +e7 +00 +00 +00 +c0 +3b +00 +00 +e7 +00 +00 +00 +e0 +3b +00 +00 +e7 +00 +00 +00 +00 +3c +00 +00 +e7 +00 +00 +00 +20 +3c +00 +00 +e7 +00 +00 +00 +40 +3c +00 +00 +e7 +00 +00 +00 +60 +3c +00 +00 +e7 +00 +00 +00 +80 +3c +00 +00 +e7 +00 +00 +00 +a0 +3c +00 +00 +e7 +00 +00 +00 +c0 +3c +00 +00 +e7 +00 +00 +00 +e0 +3c +00 +00 +e7 +00 +00 +00 +00 +3d +00 +00 +e7 +00 +00 +00 +20 +3d +00 +00 +e7 +00 +00 +00 +40 +3d +00 +00 +e7 +00 +00 +00 +60 +3d +00 +00 +e7 +00 +00 +00 +80 +3d +00 +00 +e7 +00 +00 +00 +a0 +3d +00 +00 +e7 +00 +00 +00 +c0 +3d +00 +00 +e7 +00 +00 +00 +e0 +3d +00 +00 +e7 +00 +00 +00 +00 +3e +00 +00 +e7 +00 +00 +00 +20 +3e +00 +00 +e7 +00 +00 +00 +40 +3e +00 +00 +e7 +00 +00 +00 +60 +3e +00 +00 +e7 +00 +00 +00 +80 +3e +00 +00 +e7 +00 +00 +00 +a0 +3e +00 +00 +e7 +00 +00 +00 +c0 +3e +00 +00 +e7 +00 +00 +00 +e0 +3e +00 +00 +e7 +00 +00 +00 +00 +3f +00 +00 +e7 +00 +00 +00 +20 +3f +00 +00 +e7 +00 +00 +00 +40 +3f +00 +00 +e7 +00 +00 +00 +60 +3f +00 +00 +e7 +00 +00 +00 +80 +3f +00 +00 +e7 +00 +00 +00 +a0 +3f +00 +00 +e7 +00 +00 +00 +c0 +3f +00 +00 +e7 +00 +00 +00 +e0 +3f +00 +00 +e7 +00 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +27 +01 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +10 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +11 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +12 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +13 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +14 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +15 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +16 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +17 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +18 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +19 +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +1a +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +1b +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +1c +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +1d +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +1e +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +1f +00 +00 +13 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +20 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +21 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +22 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +23 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +24 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +25 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +26 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +27 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +28 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +29 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +2a +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +2b +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +2c +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +2d +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +2e +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +01 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +03 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +09 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +0b +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +11 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +13 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +19 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +1b +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +21 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +23 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +29 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +2b +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +31 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +33 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +39 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +3b +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +41 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +43 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +49 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +4b +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +51 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +53 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +59 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +5b +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +61 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +63 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +69 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +6b +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +71 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +73 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +79 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +7b +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +81 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +83 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +89 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +8b +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +91 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +93 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +99 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +9b +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a1 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +a3 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +a9 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +ab +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b1 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +b3 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +b9 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +bb +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c1 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +c3 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +c9 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +cb +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d1 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +d3 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +d9 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +db +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e1 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +e3 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +e9 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +eb +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f1 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +f3 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +f9 +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +02 +28 +00 +fb +2f +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +01 +04 +08 +00 +0f +aa +ea +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +08 +02 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfother.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfother.asm new file mode 100644 index 0000000000..9b0c29f559 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfother.asm @@ -0,0 +1,24 @@ +extern var4 +extern farlabel +global equ2 + +equ1 equ 4000 +equ2 equ 5000 + +[section foo] +mov ax, bar +mov ds, ax +mov ax, [var2 wrt bar] + +mov ax, seg var4 +mov es, ax +mov ax, [es:var4] + +[section bar] +jmp far farlabel + +[section baz] +var2 dw 2 + +[section bss bss] +var3 resd 4 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfother.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfother.hex new file mode 100644 index 0000000000..428b4ee327 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfother.hex @@ -0,0 +1,578 @@ +22 +43 +65 +87 +05 +00 +00 +00 +0b +00 +00 +00 +b0 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +01 +00 +00 +19 +00 +00 +00 +d9 +01 +00 +00 +04 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +02 +00 +00 +07 +00 +00 +00 +20 +02 +00 +00 +02 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +02 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +88 +01 +00 +00 +00 +00 +00 +00 +ff +ff +ff +ff +00 +00 +00 +00 +8e +01 +00 +00 +01 +00 +00 +00 +ff +ff +ff +ff +00 +00 +00 +00 +93 +01 +00 +00 +01 +00 +00 +00 +fe +ff +ff +ff +88 +13 +00 +00 +9c +01 +00 +00 +06 +00 +00 +00 +fe +ff +ff +ff +a0 +0f +00 +00 +a1 +01 +00 +00 +04 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +a6 +01 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +aa +01 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +ae +01 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +b3 +01 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +b7 +01 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +bb +01 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +76 +61 +72 +34 +00 +66 +61 +72 +6c +61 +62 +65 +6c +00 +65 +71 +75 +32 +00 +65 +71 +75 +31 +00 +66 +6f +6f +00 +62 +61 +72 +00 +76 +61 +72 +32 +00 +62 +61 +7a +00 +62 +73 +73 +00 +76 +61 +72 +33 +00 +66 +b8 +00 +00 +8e +d8 +66 +a1 +00 +00 +00 +00 +66 +b8 +00 +00 +8e +c0 +26 +66 +a1 +00 +00 +00 +00 +02 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +08 +00 +00 +00 +07 +00 +00 +00 +06 +00 +00 +00 +02 +04 +00 +00 +0e +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +08 +02 +00 +00 +15 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +01 +04 +00 +00 +ea +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +01 +04 +00 +00 +05 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +08 +02 +00 +00 +02 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfprotect.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfprotect.asm new file mode 100644 index 0000000000..1a016f5ccb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfprotect.asm @@ -0,0 +1,178 @@ +;; ######################################################################## +;; Macros +;; ######################################################################## + +; descriptor type, base, limit, p_dpl_s, g_db_a +%macro descriptor 5 + dw (%3 & 0xFFFF) ; Limit 0-15 + dw (%2 & 0xFFFF) ; Base 0-15 + db ((%2 & 0xFF0000) >> 16) ; Base 16-23 + db ((%4 & 0xF) << 4) | (%1 & 0xF ) ; p_dpl_s_type + db (%5 << 4) | ((%3 & 0xF0000) >> 16) ; g_db_a limit 19:16 + db ((%2 & 0xFF000000) >> 24) ; Base 24-31 +%endmacro + +; cdesc32 base, limit, dpl +%macro cdesc32 3 + descriptor 0xB, %1, %2, 0x9 | (%3 & 0x3) << 1, 0xD +%endmacro + +; ddesc32 base, limit, dpl +%macro ddesc32 3 + descriptor 0x3, %1, %2, 0x9 | (%3 & 0x3) << 1, 0xD +%endmacro + +; gates type, offset, selector, p_dpl_s +%macro gates 4 + dw %2 ; Offset 0-15 + dw (%3 & 0xFFFF) ; Selector 0-15 + db 0 ; Reserved + db ((%4 & 0xF) << 4) | (%1 & 0xF) ; p_dpl_s_type + dw 0 ; Offset 16-31 +%endmacro + +%macro idesc32 3 + gates 0xE, %1, %2, 0x8 | ((%3 & 0x3) << 1) +%endmacro + + +;; ######################################################################## +;; Code Section +;; ######################################################################## + +SECTION CODE ABSOLUTE=0x00400000 FLAT USE32 + +test_code: + + ;; Your Code Goes Here + hlt + +;; ######################################################################## +;; Setup Section +;; ######################################################################## + +SECTION SETUP ALIGN=16 FLAT USE16 + +setup: + + mov edx, cr0 + or dl, 0x21 ; Protect Mode On, Int 16 for FPU + and edx, 0x9FFFFFFF ; Turn Caches on + mov cr0, edx + + xor edx, edx ; Enable Var MTRRs + mov eax, 0x0806 ; WriteBack + mov ecx, 0x2FF + wrmsr + + lgdt [pgdt] ; Set GDT + lidt [pidt] ; Set IDT + + jmp 0x8:protect_mode + +protect_mode: + + BITS 32 + + mov esp, 0x01000000 ; Get some stack space + mov ax, 0x0010 ; Set data selectors + mov ss, ax + mov ds, ax + mov es, ax + mov fs, ax + mov gs, ax + + jmp test_code ; Jmp to test code + +;; ######################################################################## +;; Protect Mode IDT +;; ######################################################################## + +SECTION IDTP ALIGN=16 FLAT USE32 + + ;; cdesc32 base, limit, dpl +gdt0: dq 0.0 ; 0x0000 - Null descriptor + cdesc32 0x00000000, 0xFFFFF, 0 ; 0x0008 - Code Selector + ddesc32 0x00000000, 0xFFFFF, 0 ; 0x0010 - Data Selector + cdesc32 0x00000000, 0xFFFFF, 3 ; 0x0018 - Code Select Ring 3 + ddesc32 0x00000000, 0xFFFFF, 3 ; 0x0020 - Data Select Ring 3 + + ;; idesc32 offset, selector, dpl +idt0: idesc32 isrP, 0x0008, 0 ; 0x00, 0 #DE, Divide Error + idesc32 isrP, 0x0008, 0 ; 0x01, 1 #DB, Debug Fault + idesc32 isrP, 0x0008, 0 ; 0x02, 2, ---, NMI + idesc32 isrP, 0x0008, 0 ; 0x03, 3, #BP, Breakpoint + idesc32 isrP, 0x0008, 0 ; 0x04, 4, #OF, INTO detected Overflow + idesc32 isrP, 0x0008, 0 ; 0x05, 5, #BR, Bound Range Exceeded + idesc32 isrP, 0x0008, 0 ; 0x06, 6, #UD, Invalid Opcode + idesc32 isrP, 0x0008, 0 ; 0x07, 7, #NM, Device Not Available + idesc32 isrP, 0x0008, 0 ; 0x08, 8, #DF, Double Fault + idesc32 isrP, 0x0008, 0 ; 0x09 9, ---, Coprocessor Segment Overrun + idesc32 isrP, 0x0008, 0 ; 0x0A, 10, #TS, Invalid TSS + idesc32 isrP, 0x0008, 0 ; 0x0B, 11, #NP, Segment Not Present + idesc32 isrP, 0x0008, 0 ; 0x0C, 12, #SS, Stack Fault + idesc32 isrP, 0x0008, 0 ; 0x0D, 13, #GP, General Protection Fault + idesc32 isrP, 0x0008, 0 ; 0x0E, 14, #PF, Page Fault + idesc32 isrP, 0x0008, 0 ; 0x0F, 15, ---, Reserved + idesc32 isrP, 0x0008, 0 ; 0x10, 16, #MF, Floating Point Fault + idesc32 isrP, 0x0008, 0 ; 0x11, 17, #AC, Alignment Check + idesc32 isrP, 0x0008, 0 ; 0x12 18, #MC, Machine Check + idesc32 isrP, 0x0008, 0 ; 0x13, 19, #XF, SSE Fault + +pgdt: dw 6 * 8 ; Limit + dd gdt0 ; base + +pidt: dw 20 * 8 ; Limit + dd idt0 ; base + +isrP: mov eax, 0xDEADBEEF ; Default Real Mode Interrupt Handler + out 0x80, eax + hlt + +;; ######################################################################## +;; Real Mode IDT +;; ######################################################################## + +SECTION IDTR ABSOLUTE=0x00000000 FLAT USE16 + + ;; FORMAT IP:CS + dw isrR, 0 ; 0x00, 0 #DE, Divide Error + dw isrR, 0 ; 0x01, 1 #DB, Debug Fault + dw isrR, 0 ; 0x02, 2, ---, NMI + dw isrR, 0 ; 0x03, 3, #BP, Breakpoint + dw isrR, 0 ; 0x04, 4, #OF, INTO detected Overflow + dw isrR, 0 ; 0x05, 5, #BR, Bound Range Exceeded + dw isrR, 0 ; 0x06, 6, #UD, Invalid Opcode + dw isrR, 0 ; 0x07, 7, #NM, Device Not Available + dw isrR, 0 ; 0x08, 8, #DF, Double Fault + dw isrR, 0 ; 0x09 9, ---, Coprocessor Segment Overrun + dw isrR, 0 ; 0x0A, 10, #TS, Invalid TSS + dw isrR, 0 ; 0x0B, 11, #NP, Segment Not Present + dw isrR, 0 ; 0x0C, 12, #SS, Stack Fault + dw isrR, 0 ; 0x0D, 13, #GP, General Protection Fault + dw isrR, 0 ; 0x0E, 14, #PF, Page Fault + dw isrR, 0 ; 0x0F, 15, ---, Reserved + dw isrR, 0 ; 0x10, 16, #MF, Floating Point Fault + dw isrR, 0 ; 0x11, 17, #AC, Alignment Check + dw isrR, 0 ; 0x12 18, #MC, Machine Check + dw isrR, 0 ; 0x13, 19, #XF, SSE Fault + +isrR: mov eax, 0xDEADBEEF ; Default Real Mode Interrupt Handler + out 0x80, eax + hlt + +;; ######################################################################## +;; SMM Handler +;; ######################################################################## + +SECTION SMM ABSOLUTE=0x00038000 USE16 + + rsm + +;; ######################################################################## +;; Reset Vector +;; ######################################################################## + +SECTION RESET ABSOLUTE=0xFFFFFFF0 USE16 + + jmp far setup diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfprotect.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfprotect.hex new file mode 100644 index 0000000000..bb7a376bac --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfprotect.hex @@ -0,0 +1,1806 @@ +22 +43 +65 +87 +07 +00 +00 +00 +10 +00 +00 +00 +78 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +23 +00 +88 +02 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +12 +00 +89 +02 +00 +00 +48 +00 +00 +00 +d1 +02 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +22 +00 +11 +03 +00 +00 +dc +00 +00 +00 +ed +03 +00 +00 +16 +00 +00 +00 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +13 +00 +4d +05 +00 +00 +5a +00 +00 +00 +a7 +05 +00 +00 +14 +00 +00 +00 +0e +00 +00 +00 +00 +80 +03 +00 +00 +00 +00 +00 +00 +80 +03 +00 +00 +00 +00 +00 +00 +00 +11 +00 +e7 +06 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +f0 +ff +ff +ff +00 +00 +00 +00 +f0 +ff +ff +ff +00 +00 +00 +00 +00 +00 +11 +00 +e9 +06 +00 +00 +05 +00 +00 +00 +ee +06 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +2e +02 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +33 +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +3d +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +43 +02 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +c8 +00 +00 +00 +49 +02 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +ce +00 +00 +00 +4e +02 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +30 +00 +00 +00 +53 +02 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +60 +02 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +65 +02 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +28 +00 +00 +00 +6a +02 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +d4 +00 +00 +00 +6f +02 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +74 +02 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +50 +00 +00 +00 +79 +02 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +7e +02 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +82 +02 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +43 +4f +44 +45 +00 +74 +65 +73 +74 +5f +63 +6f +64 +65 +00 +53 +45 +54 +55 +50 +00 +73 +65 +74 +75 +70 +00 +70 +67 +64 +74 +00 +70 +69 +64 +74 +00 +70 +72 +6f +74 +65 +63 +74 +5f +6d +6f +64 +65 +00 +49 +44 +54 +50 +00 +67 +64 +74 +30 +00 +69 +64 +74 +30 +00 +69 +73 +72 +50 +00 +49 +44 +54 +52 +00 +69 +73 +72 +52 +00 +53 +4d +4d +00 +52 +45 +53 +45 +54 +00 +f4 +0f +20 +c2 +80 +ca +21 +66 +81 +e2 +ff +ff +ff +9f +0f +22 +c2 +66 +31 +d2 +66 +b8 +06 +08 +00 +00 +66 +b9 +ff +02 +00 +00 +0f +30 +0f +01 +16 +00 +00 +0f +01 +1e +00 +00 +ea +00 +00 +08 +00 +bc +00 +00 +00 +01 +66 +b8 +10 +00 +8e +d0 +8e +d8 +8e +c0 +8e +e0 +8e +e8 +e9 +b8 +ff +ff +ff +24 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +29 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +2c +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +44 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +04 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +ff +00 +00 +00 +9b +df +00 +ff +ff +00 +00 +00 +93 +df +00 +ff +ff +00 +00 +00 +fb +df +00 +ff +ff +00 +00 +00 +f3 +df +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +00 +00 +08 +00 +00 +8e +00 +00 +30 +00 +00 +00 +00 +00 +a0 +00 +00 +00 +00 +00 +b8 +ef +be +ad +de +e7 +80 +f4 +28 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +30 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +38 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +40 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +48 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +50 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +58 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +60 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +68 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +70 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +78 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +80 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +88 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +90 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +98 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +a0 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +a8 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +b0 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +b8 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +c0 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +ca +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +01 +04 +00 +00 +d0 +00 +00 +00 +0a +00 +00 +00 +00 +00 +00 +00 +01 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +66 +b8 +ef +be +ad +de +66 +e7 +80 +f4 +00 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +04 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +08 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +0c +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +10 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +14 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +18 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +1c +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +20 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +24 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +28 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +2c +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +30 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +34 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +38 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +3c +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +40 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +44 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +48 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +4c +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +0f +aa +ea +00 +00 +00 +00 +01 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +01 +02 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +08 +02 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect-err.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect-err.asm new file mode 100644 index 0000000000..cca409a4ef --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect-err.asm @@ -0,0 +1,18 @@ +[section] +section 1 use16=5 +section 2 use32=5 +section 3 use64=5 +section 4 bss=5 +section 5 flat=5 +section 6 foo +section 7 foo=5 +section 8 absolute=foo +section 9 absolute="foo" +section 10 absolute +section 11 virtual=foo +section 12 virtual="foo" +section 13 virtual +section 14 align=foo +section 15 align="foo" +section 16 align +section 17 "bar" diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect-err.errwarn new file mode 100644 index 0000000000..84acc4c1e2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect-err.errwarn @@ -0,0 +1,20 @@ +-:1: error: directive `section' requires an argument +-:2: warning: Unrecognized qualifier `use16' +-:3: warning: Unrecognized qualifier `use32' +-:4: warning: Unrecognized qualifier `use64' +-:5: warning: Unrecognized qualifier `bss' +-:6: warning: Unrecognized qualifier `flat' +-:7: warning: Unrecognized qualifier `foo' +-:8: warning: Unrecognized qualifier `foo' +-:9: error: argument to `absolute' is not an integer +-:9: error: undefined symbol `foo' (first use) +-:9: error: (Each undefined symbol is reported only once.) +-:10: error: argument to `absolute' is not an integer +-:11: warning: Unrecognized qualifier `absolute' +-:12: error: argument to `virtual' is not an integer +-:13: error: argument to `virtual' is not an integer +-:14: warning: Unrecognized qualifier `virtual' +-:15: error: argument to `align' is not an integer +-:16: error: argument to `align' is not an integer +-:17: warning: Unrecognized qualifier `align' +-:18: warning: Unrecognized string qualifier diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect.asm new file mode 100644 index 0000000000..8d20155e4e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect.asm @@ -0,0 +1,13 @@ +section 1 +section 2 use16 +section 3 use32 +section 4 use64 +section 5 bss +section 6 flat +section 7 use16 flat +section 8 use32 bss +section 9 use64 absolute=0x5555 flat +section 10 flat virtual=0x1111 absolute=0x2222 +section 11 use32 align=4 +section 12 use16 absolute=0x1111 virtual=0x2222 align=4 flat bss +section 13 use16 use32 use64 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect.hex new file mode 100644 index 0000000000..4f0c0c1c92 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfsect.hex @@ -0,0 +1,836 @@ +22 +43 +65 +87 +0e +00 +00 +00 +0e +00 +00 +00 +34 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +09 +00 +00 +00 +55 +55 +00 +00 +00 +00 +00 +00 +55 +55 +00 +00 +00 +00 +00 +00 +00 +00 +43 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +22 +22 +00 +00 +00 +00 +00 +00 +11 +11 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +11 +11 +00 +00 +00 +00 +00 +00 +22 +22 +00 +00 +00 +00 +00 +00 +04 +00 +17 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +03 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +26 +03 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +28 +03 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +2a +03 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +2c +03 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +2e +03 +00 +00 +00 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +30 +03 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +32 +03 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +34 +03 +00 +00 +00 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +36 +03 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +00 +00 +00 +00 +38 +03 +00 +00 +00 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +3b +03 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +00 +00 +00 +00 +3e +03 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +00 +00 +00 +00 +41 +03 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +31 +00 +32 +00 +33 +00 +34 +00 +35 +00 +36 +00 +37 +00 +38 +00 +39 +00 +31 +30 +00 +31 +31 +00 +31 +32 +00 +31 +33 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfvirtual.asm b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfvirtual.asm new file mode 100644 index 0000000000..fb252a6646 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfvirtual.asm @@ -0,0 +1,4 @@ +[section .foo] +[section .bar absolute=0x5000] +[section .bar2 virtual=0xFFFFFFF0] +[section .baz absolute=0x1000 virtual=0x8000] diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfvirtual.hex b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfvirtual.hex new file mode 100644 index 0000000000..60ce78f695 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/tests/xdfvirtual.hex @@ -0,0 +1,323 @@ +22 +43 +65 +87 +05 +00 +00 +00 +05 +00 +00 +00 +33 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +50 +00 +00 +00 +00 +00 +00 +00 +50 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f0 +ff +ff +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +28 +01 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +2e +01 +00 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +33 +01 +00 +00 +00 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +38 +01 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +3e +01 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +66 +6f +6f +00 +2e +62 +61 +72 +00 +2e +62 +61 +72 +32 +00 +2e +62 +61 +7a +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/xdf-objfmt.c b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/xdf-objfmt.c new file mode 100644 index 0000000000..9ad0e60afa --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/xdf/xdf-objfmt.c @@ -0,0 +1,842 @@ +/* + * Extended Dynamic Object format + * + * Copyright (C) 2004-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + + +#define REGULAR_OUTBUF_SIZE 1024 + +#define XDF_MAGIC 0x87654322 + +#define XDF_SYM_EXTERN 1 +#define XDF_SYM_GLOBAL 2 +#define XDF_SYM_EQU 4 + +typedef struct xdf_reloc { + yasm_reloc reloc; + /*@null@*/ yasm_symrec *base; /* base symbol (for WRT) */ + enum { + XDF_RELOC_REL = 1, /* relative to segment */ + XDF_RELOC_WRT = 2, /* relative to symbol */ + XDF_RELOC_RIP = 4, /* RIP-relative */ + XDF_RELOC_SEG = 8 /* segment containing symbol */ + } type; /* type of relocation */ + enum { + XDF_RELOC_8 = 1, + XDF_RELOC_16 = 2, + XDF_RELOC_32 = 4, + XDF_RELOC_64 = 8 + } size; /* size of relocation */ + unsigned int shift; /* relocation shift (0,4,8,16,24,32) */ +} xdf_reloc; + +typedef struct xdf_section_data { + /*@dependent@*/ yasm_symrec *sym; /* symbol created for this section */ + yasm_intnum *addr; /* starting memory address */ + yasm_intnum *vaddr; /* starting virtual address */ + long scnum; /* section number (0=first section) */ + enum { + XDF_SECT_ABSOLUTE = 0x01, + XDF_SECT_FLAT = 0x02, + XDF_SECT_BSS = 0x04, + XDF_SECT_EQU = 0x08, + XDF_SECT_USE_16 = 0x10, + XDF_SECT_USE_32 = 0x20, + XDF_SECT_USE_64 = 0x40 + } flags; /* section flags */ + unsigned long scnptr; /* file ptr to raw data */ + unsigned long size; /* size of raw data (section data) in bytes */ + unsigned long relptr; /* file ptr to relocation */ + unsigned long nreloc; /* number of relocation entries >64k -> error */ +} xdf_section_data; + +typedef struct xdf_symrec_data { + unsigned long index; /* assigned XDF symbol table index */ +} xdf_symrec_data; + +typedef struct yasm_objfmt_xdf { + yasm_objfmt_base objfmt; /* base structure */ + + long parse_scnum; /* sect numbering in parser */ +} yasm_objfmt_xdf; + +typedef struct xdf_objfmt_output_info { + yasm_object *object; + yasm_objfmt_xdf *objfmt_xdf; + yasm_errwarns *errwarns; + /*@dependent@*/ FILE *f; + /*@only@*/ unsigned char *buf; + yasm_section *sect; + /*@dependent@*/ xdf_section_data *xsd; + + unsigned long indx; /* current symbol index */ + int all_syms; /* outputting all symbols? */ + unsigned long strtab_offset; /* current string table offset */ +} xdf_objfmt_output_info; + +static void xdf_section_data_destroy(/*@only@*/ void *d); +static void xdf_section_data_print(void *data, FILE *f, int indent_level); + +static const yasm_assoc_data_callback xdf_section_data_cb = { + xdf_section_data_destroy, + xdf_section_data_print +}; + +static void xdf_symrec_data_destroy(/*@only@*/ void *d); +static void xdf_symrec_data_print(void *data, FILE *f, int indent_level); + +static const yasm_assoc_data_callback xdf_symrec_data_cb = { + xdf_symrec_data_destroy, + xdf_symrec_data_print +}; + +yasm_objfmt_module yasm_xdf_LTX_objfmt; + + +static yasm_objfmt * +xdf_objfmt_create(yasm_object *object) +{ + yasm_objfmt_xdf *objfmt_xdf = yasm_xmalloc(sizeof(yasm_objfmt_xdf)); + + /* Only support x86 arch */ + if (yasm__strcasecmp(yasm_arch_keyword(object->arch), "x86") != 0) { + yasm_xfree(objfmt_xdf); + return NULL; + } + + /* Support x86 and amd64 machines of x86 arch */ + if (yasm__strcasecmp(yasm_arch_get_machine(object->arch), "x86") && + yasm__strcasecmp(yasm_arch_get_machine(object->arch), "amd64")) { + yasm_xfree(objfmt_xdf); + return NULL; + } + + objfmt_xdf->parse_scnum = 0; /* section numbering starts at 0 */ + + objfmt_xdf->objfmt.module = &yasm_xdf_LTX_objfmt; + + return (yasm_objfmt *)objfmt_xdf; +} + +static int +xdf_objfmt_output_value(yasm_value *value, unsigned char *buf, + unsigned int destsize, unsigned long offset, + yasm_bytecode *bc, int warn, /*@null@*/ void *d) +{ + /*@null@*/ xdf_objfmt_output_info *info = (xdf_objfmt_output_info *)d; + /*@dependent@*/ /*@null@*/ yasm_intnum *intn; + unsigned long intn_minus; + int retval; + unsigned int valsize = value->size; + + assert(info != NULL); + + if (value->abs) + value->abs = yasm_expr_simplify(value->abs, 1); + + /* Try to output constant and PC-relative section-local first. + * Note this does NOT output any value with a SEG, WRT, external, + * cross-section, or non-PC-relative reference (those are handled below). + */ + switch (yasm_value_output_basic(value, buf, destsize, bc, warn, + info->object->arch)) { + case -1: + return 1; + case 0: + break; + default: + return 0; + } + + if (value->section_rel) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("xdf: relocation too complex")); + return 1; + } + + intn_minus = 0; + if (value->rel) { + xdf_reloc *reloc; + + reloc = yasm_xmalloc(sizeof(xdf_reloc)); + reloc->reloc.addr = yasm_intnum_create_uint(bc->offset + offset); + reloc->reloc.sym = value->rel; + reloc->base = NULL; + reloc->size = valsize/8; + reloc->shift = value->rshift; + + if (value->seg_of) + reloc->type = XDF_RELOC_SEG; + else if (value->wrt) { + reloc->base = value->wrt; + reloc->type = XDF_RELOC_WRT; + } else if (value->curpos_rel) { + reloc->type = XDF_RELOC_RIP; + /* Adjust to start of section, so subtract out the bytecode + * offset. + */ + intn_minus = bc->offset; + } else + reloc->type = XDF_RELOC_REL; + info->xsd->nreloc++; + yasm_section_add_reloc(info->sect, (yasm_reloc *)reloc, yasm_xfree); + } + + if (intn_minus > 0) { + intn = yasm_intnum_create_uint(intn_minus); + yasm_intnum_calc(intn, YASM_EXPR_NEG, NULL); + } else + intn = yasm_intnum_create_uint(0); + + if (value->abs) { + yasm_intnum *intn2 = yasm_expr_get_intnum(&value->abs, 0); + if (!intn2) { + yasm_error_set(YASM_ERROR_TOO_COMPLEX, + N_("xdf: relocation too complex")); + yasm_intnum_destroy(intn); + return 1; + } + yasm_intnum_calc(intn, YASM_EXPR_ADD, intn2); + } + + retval = yasm_arch_intnum_tobytes(info->object->arch, intn, buf, destsize, + valsize, 0, bc, warn); + yasm_intnum_destroy(intn); + return retval; +} + +static int +xdf_objfmt_output_bytecode(yasm_bytecode *bc, /*@null@*/ void *d) +{ + /*@null@*/ xdf_objfmt_output_info *info = (xdf_objfmt_output_info *)d; + /*@null@*/ /*@only@*/ unsigned char *bigbuf; + unsigned long size = REGULAR_OUTBUF_SIZE; + int gap; + + assert(info != NULL); + + bigbuf = yasm_bc_tobytes(bc, info->buf, &size, &gap, info, + xdf_objfmt_output_value, NULL); + + /* Don't bother doing anything else if size ended up being 0. */ + if (size == 0) { + if (bigbuf) + yasm_xfree(bigbuf); + return 0; + } + + info->xsd->size += size; + + /* Warn that gaps are converted to 0 and write out the 0's. */ + if (gap) { + unsigned long left; + yasm_warn_set(YASM_WARN_UNINIT_CONTENTS, + N_("uninitialized space: zeroing")); + /* Write out in chunks */ + memset(info->buf, 0, REGULAR_OUTBUF_SIZE); + left = size; + while (left > REGULAR_OUTBUF_SIZE) { + fwrite(info->buf, REGULAR_OUTBUF_SIZE, 1, info->f); + left -= REGULAR_OUTBUF_SIZE; + } + fwrite(info->buf, left, 1, info->f); + } else { + /* Output buf (or bigbuf if non-NULL) to file */ + fwrite(bigbuf ? bigbuf : info->buf, (size_t)size, 1, info->f); + } + + /* If bigbuf was allocated, free it */ + if (bigbuf) + yasm_xfree(bigbuf); + + return 0; +} + +static int +xdf_objfmt_output_section(yasm_section *sect, /*@null@*/ void *d) +{ + /*@null@*/ xdf_objfmt_output_info *info = (xdf_objfmt_output_info *)d; + /*@dependent@*/ /*@null@*/ xdf_section_data *xsd; + long pos; + xdf_reloc *reloc; + + assert(info != NULL); + xsd = yasm_section_get_data(sect, &xdf_section_data_cb); + assert(xsd != NULL); + + if (xsd->flags & XDF_SECT_BSS) { + /* Don't output BSS sections. + * TODO: Check for non-reserve bytecodes? + */ + pos = 0; /* position = 0 because it's not in the file */ + xsd->size = yasm_bc_next_offset(yasm_section_bcs_last(sect)); + } else { + pos = ftell(info->f); + if (pos == -1) { + yasm__fatal(N_("could not get file position on output file")); + /*@notreached@*/ + return 1; + } + + info->sect = sect; + info->xsd = xsd; + yasm_section_bcs_traverse(sect, info->errwarns, info, + xdf_objfmt_output_bytecode); + + /* Sanity check final section size */ + if (xsd->size != yasm_bc_next_offset(yasm_section_bcs_last(sect))) + yasm_internal_error( + N_("xdf: section computed size did not match actual size")); + } + + /* Empty? Go on to next section */ + if (xsd->size == 0) + return 0; + + xsd->scnptr = (unsigned long)pos; + + /* No relocations to output? Go on to next section */ + if (xsd->nreloc == 0) + return 0; + + pos = ftell(info->f); + if (pos == -1) { + yasm__fatal(N_("could not get file position on output file")); + /*@notreached@*/ + return 1; + } + xsd->relptr = (unsigned long)pos; + + reloc = (xdf_reloc *)yasm_section_relocs_first(sect); + while (reloc) { + unsigned char *localbuf = info->buf; + /*@null@*/ xdf_symrec_data *xsymd; + + xsymd = yasm_symrec_get_data(reloc->reloc.sym, &xdf_symrec_data_cb); + if (!xsymd) + yasm_internal_error( + N_("xdf: no symbol data for relocated symbol")); + + yasm_intnum_get_sized(reloc->reloc.addr, localbuf, 4, 32, 0, 0, 0); + localbuf += 4; /* address of relocation */ + YASM_WRITE_32_L(localbuf, xsymd->index); /* relocated symbol */ + if (reloc->base) { + xsymd = yasm_symrec_get_data(reloc->base, &xdf_symrec_data_cb); + if (!xsymd) + yasm_internal_error( + N_("xdf: no symbol data for relocated base symbol")); + YASM_WRITE_32_L(localbuf, xsymd->index); /* base symbol */ + } else { + if (reloc->type == XDF_RELOC_WRT) + yasm_internal_error( + N_("xdf: no base symbol for WRT relocation")); + YASM_WRITE_32_L(localbuf, 0); /* no base symbol */ + } + YASM_WRITE_8(localbuf, reloc->type); /* type of relocation */ + YASM_WRITE_8(localbuf, reloc->size); /* size of relocation */ + YASM_WRITE_8(localbuf, reloc->shift); /* relocation shift */ + YASM_WRITE_8(localbuf, 0); /* flags */ + fwrite(info->buf, 16, 1, info->f); + + reloc = (xdf_reloc *)yasm_section_reloc_next((yasm_reloc *)reloc); + } + + return 0; +} + +static int +xdf_objfmt_output_secthead(yasm_section *sect, /*@null@*/ void *d) +{ + /*@null@*/ xdf_objfmt_output_info *info = (xdf_objfmt_output_info *)d; + /*@dependent@*/ /*@null@*/ xdf_section_data *xsd; + /*@null@*/ xdf_symrec_data *xsymd; + unsigned char *localbuf; + + assert(info != NULL); + xsd = yasm_section_get_data(sect, &xdf_section_data_cb); + assert(xsd != NULL); + + localbuf = info->buf; + xsymd = yasm_symrec_get_data(xsd->sym, &xdf_symrec_data_cb); + assert(xsymd != NULL); + + YASM_WRITE_32_L(localbuf, xsymd->index); /* section name symbol */ + if (xsd->addr) { + yasm_intnum_get_sized(xsd->addr, localbuf, 8, 64, 0, 0, 0); + localbuf += 8; /* physical address */ + } else { + YASM_WRITE_32_L(localbuf, 0); + YASM_WRITE_32_L(localbuf, 0); + } + if (xsd->vaddr) { + yasm_intnum_get_sized(xsd->vaddr, localbuf, 8, 64, 0, 0, 0); + localbuf += 8; /* virtual address */ + } else if (xsd->addr) { + yasm_intnum_get_sized(xsd->addr, localbuf, 8, 64, 0, 0, 0); + localbuf += 8; /* VA=PA */ + } else { + YASM_WRITE_32_L(localbuf, 0); + YASM_WRITE_32_L(localbuf, 0); + } + YASM_WRITE_16_L(localbuf, yasm_section_get_align(sect)); /* alignment */ + YASM_WRITE_16_L(localbuf, xsd->flags); /* flags */ + YASM_WRITE_32_L(localbuf, xsd->scnptr); /* file ptr to data */ + YASM_WRITE_32_L(localbuf, xsd->size); /* section size */ + YASM_WRITE_32_L(localbuf, xsd->relptr); /* file ptr to relocs */ + YASM_WRITE_32_L(localbuf, xsd->nreloc); /* num of relocation entries */ + fwrite(info->buf, 40, 1, info->f); + + return 0; +} + +static int +xdf_objfmt_count_sym(yasm_symrec *sym, /*@null@*/ void *d) +{ + /*@null@*/ xdf_objfmt_output_info *info = (xdf_objfmt_output_info *)d; + yasm_sym_vis vis = yasm_symrec_get_visibility(sym); + assert(info != NULL); + if (vis & YASM_SYM_COMMON) { + yasm_error_set(YASM_ERROR_GENERAL, + N_("XDF object format does not support common variables")); + yasm_errwarn_propagate(info->errwarns, yasm_symrec_get_decl_line(sym)); + return 0; + } + if (info->all_syms || + (vis != YASM_SYM_LOCAL && !(vis & YASM_SYM_DLOCAL))) { + /* Save index in symrec data */ + xdf_symrec_data *sym_data = yasm_xmalloc(sizeof(xdf_symrec_data)); + sym_data->index = info->indx; + yasm_symrec_add_data(sym, &xdf_symrec_data_cb, sym_data); + + info->indx++; + } + return 0; +} + +static int +xdf_objfmt_output_sym(yasm_symrec *sym, /*@null@*/ void *d) +{ + /*@null@*/ xdf_objfmt_output_info *info = (xdf_objfmt_output_info *)d; + yasm_sym_vis vis = yasm_symrec_get_visibility(sym); + + assert(info != NULL); + + if (info->all_syms || vis != YASM_SYM_LOCAL) { + /*@only@*/ char *name = yasm_symrec_get_global_name(sym, info->object); + const yasm_expr *equ_val; + const yasm_intnum *intn; + size_t len = strlen(name); + unsigned long value = 0; + long scnum = -3; /* -3 = debugging symbol */ + /*@dependent@*/ /*@null@*/ yasm_section *sect; + /*@dependent@*/ /*@null@*/ yasm_bytecode *precbc; + unsigned long flags = 0; + unsigned char *localbuf; + + if (vis & YASM_SYM_GLOBAL) + flags = XDF_SYM_GLOBAL; + + /* Look at symrec for value/scnum/etc. */ + if (yasm_symrec_get_label(sym, &precbc)) { + if (precbc) + sect = yasm_bc_get_section(precbc); + else + sect = NULL; + /* it's a label: get value and offset. + * If there is not a section, leave as debugging symbol. + */ + if (sect) { + /*@dependent@*/ /*@null@*/ xdf_section_data *csectd; + csectd = yasm_section_get_data(sect, &xdf_section_data_cb); + if (csectd) + scnum = csectd->scnum; + else + yasm_internal_error(N_("didn't understand section")); + if (precbc) + value += yasm_bc_next_offset(precbc); + } + } else if ((equ_val = yasm_symrec_get_equ(sym))) { + yasm_expr *equ_val_copy = yasm_expr_copy(equ_val); + intn = yasm_expr_get_intnum(&equ_val_copy, 1); + if (!intn) { + if (vis & YASM_SYM_GLOBAL) { + yasm_error_set(YASM_ERROR_NOT_CONSTANT, + N_("global EQU value not an integer expression")); + yasm_errwarn_propagate(info->errwarns, equ_val->line); + } + } else + value = yasm_intnum_get_uint(intn); + yasm_expr_destroy(equ_val_copy); + + flags |= XDF_SYM_EQU; + scnum = -2; /* -2 = absolute symbol */ + } else { + if (vis & YASM_SYM_EXTERN) { + flags = XDF_SYM_EXTERN; + scnum = -1; + } + } + + localbuf = info->buf; + YASM_WRITE_32_L(localbuf, scnum); /* section number */ + YASM_WRITE_32_L(localbuf, value); /* value */ + YASM_WRITE_32_L(localbuf, info->strtab_offset); + info->strtab_offset += (unsigned long)(len+1); + YASM_WRITE_32_L(localbuf, flags); /* flags */ + fwrite(info->buf, 16, 1, info->f); + yasm_xfree(name); + } + return 0; +} + +static int +xdf_objfmt_output_str(yasm_symrec *sym, /*@null@*/ void *d) +{ + /*@null@*/ xdf_objfmt_output_info *info = (xdf_objfmt_output_info *)d; + yasm_sym_vis vis = yasm_symrec_get_visibility(sym); + + assert(info != NULL); + + if (info->all_syms || vis != YASM_SYM_LOCAL) { + /*@only@*/ char *name = yasm_symrec_get_global_name(sym, info->object); + size_t len = strlen(name); + fwrite(name, len+1, 1, info->f); + yasm_xfree(name); + } + return 0; +} + +static void +xdf_objfmt_output(yasm_object *object, FILE *f, int all_syms, + yasm_errwarns *errwarns) +{ + yasm_objfmt_xdf *objfmt_xdf = (yasm_objfmt_xdf *)object->objfmt; + xdf_objfmt_output_info info; + unsigned char *localbuf; + unsigned long symtab_count = 0; + + info.object = object; + info.objfmt_xdf = objfmt_xdf; + info.errwarns = errwarns; + info.f = f; + info.buf = yasm_xmalloc(REGULAR_OUTBUF_SIZE); + + /* Allocate space for headers by seeking forward */ + if (fseek(f, (long)(16+40*(objfmt_xdf->parse_scnum)), SEEK_SET) < 0) { + yasm__fatal(N_("could not seek on output file")); + /*@notreached@*/ + return; + } + + /* Get number of symbols */ + info.indx = 0; + info.all_syms = 1; /* force all syms into symbol table */ + yasm_symtab_traverse(object->symtab, &info, xdf_objfmt_count_sym); + symtab_count = info.indx; + + /* Get file offset of start of string table */ + info.strtab_offset = 16+40*(objfmt_xdf->parse_scnum)+16*symtab_count; + + /* Output symbol table */ + yasm_symtab_traverse(object->symtab, &info, xdf_objfmt_output_sym); + + /* Output string table */ + yasm_symtab_traverse(object->symtab, &info, xdf_objfmt_output_str); + + /* Section data/relocs */ + if (yasm_object_sections_traverse(object, &info, + xdf_objfmt_output_section)) + return; + + /* Write headers */ + if (fseek(f, 0, SEEK_SET) < 0) { + yasm__fatal(N_("could not seek on output file")); + /*@notreached@*/ + return; + } + + localbuf = info.buf; + YASM_WRITE_32_L(localbuf, XDF_MAGIC); /* magic number */ + YASM_WRITE_32_L(localbuf, objfmt_xdf->parse_scnum); /* number of sects */ + YASM_WRITE_32_L(localbuf, symtab_count); /* number of symtabs */ + /* size of sect headers + symbol table + strings */ + YASM_WRITE_32_L(localbuf, info.strtab_offset-16); + fwrite(info.buf, 16, 1, f); + + yasm_object_sections_traverse(object, &info, xdf_objfmt_output_secthead); + + yasm_xfree(info.buf); +} + +static void +xdf_objfmt_destroy(yasm_objfmt *objfmt) +{ + yasm_xfree(objfmt); +} + +static void +xdf_objfmt_init_new_section(yasm_section *sect, unsigned long line) +{ + yasm_object *object = yasm_section_get_object(sect); + const char *sectname = yasm_section_get_name(sect); + yasm_objfmt_xdf *objfmt_xdf = (yasm_objfmt_xdf *)object->objfmt; + xdf_section_data *data; + yasm_symrec *sym; + + data = yasm_xmalloc(sizeof(xdf_section_data)); + data->scnum = objfmt_xdf->parse_scnum++; + data->flags = 0; + data->addr = NULL; + data->vaddr = NULL; + data->scnptr = 0; + data->size = 0; + data->relptr = 0; + data->nreloc = 0; + yasm_section_add_data(sect, &xdf_section_data_cb, data); + + sym = yasm_symtab_define_label(object->symtab, sectname, + yasm_section_bcs_first(sect), 1, line); + data->sym = sym; +} + +static yasm_section * +xdf_objfmt_add_default_section(yasm_object *object) +{ + yasm_section *retval; + int isnew; + + retval = yasm_object_get_general(object, ".text", 0, 1, 0, &isnew, 0); + if (isnew) + yasm_section_set_default(retval, 1); + return retval; +} + +static int +xdf_helper_use(void *obj, yasm_valparam *vp, unsigned long line, void *d, + uintptr_t bits) +{ + yasm_object *object = (yasm_object *)obj; + unsigned long *flags = (unsigned long *)d; + *flags &= ~(XDF_SECT_USE_16|XDF_SECT_USE_32|XDF_SECT_USE_64); + switch (bits) { + case 16: *flags |= XDF_SECT_USE_16; break; + case 32: *flags |= XDF_SECT_USE_32; break; + case 64: *flags |= XDF_SECT_USE_64; break; + }; + yasm_arch_set_var(object->arch, "mode_bits", bits); + return 0; +} + +static /*@observer@*/ /*@null@*/ yasm_section * +xdf_objfmt_section_switch(yasm_object *object, yasm_valparamhead *valparams, + /*@unused@*/ /*@null@*/ + yasm_valparamhead *objext_valparams, + unsigned long line) +{ + yasm_valparam *vp; + yasm_section *retval; + int isnew; + int flags_override = 0; + const char *sectname; + int resonly = 0; + xdf_section_data *xsd; + unsigned long align = 0; + + struct xdf_section_switch_data { + /*@only@*/ /*@null@*/ yasm_intnum *absaddr; + /*@only@*/ /*@null@*/ yasm_intnum *vaddr; + /*@only@*/ /*@null@*/ yasm_intnum *align_intn; + unsigned long flags; + } data; + + static const yasm_dir_help help[] = { + { "use16", 0, xdf_helper_use, + offsetof(struct xdf_section_switch_data, flags), 16 }, + { "use32", 0, xdf_helper_use, + offsetof(struct xdf_section_switch_data, flags), 32 }, + { "use64", 0, xdf_helper_use, + offsetof(struct xdf_section_switch_data, flags), 64 }, + { "bss", 0, yasm_dir_helper_flag_or, + offsetof(struct xdf_section_switch_data, flags), XDF_SECT_BSS }, + { "flat", 0, yasm_dir_helper_flag_or, + offsetof(struct xdf_section_switch_data, flags), XDF_SECT_FLAT }, + { "absolute", 1, yasm_dir_helper_intn, + offsetof(struct xdf_section_switch_data, absaddr), 0 }, + { "virtual", 1, yasm_dir_helper_intn, + offsetof(struct xdf_section_switch_data, vaddr), 0 }, + { "align", 1, yasm_dir_helper_intn, + offsetof(struct xdf_section_switch_data, align_intn), 0 } + }; + + data.absaddr = NULL; + data.vaddr = NULL; + data.align_intn = NULL; + data.flags = 0; + + vp = yasm_vps_first(valparams); + sectname = yasm_vp_string(vp); + if (!sectname) + return NULL; + vp = yasm_vps_next(vp); + + flags_override = yasm_dir_helper(object, vp, line, help, NELEMS(help), + &data, yasm_dir_helper_valparam_warn); + if (flags_override < 0) + return NULL; /* error occurred */ + + if (data.absaddr) + data.flags |= XDF_SECT_ABSOLUTE; + if (data.align_intn) { + align = yasm_intnum_get_uint(data.align_intn); + yasm_intnum_destroy(data.align_intn); + + /* Alignments must be a power of two. */ + if (!is_exp2(align)) { + yasm_error_set(YASM_ERROR_VALUE, + N_("argument to `%s' is not a power of two"), + "align"); + if (data.vaddr) + yasm_intnum_destroy(data.vaddr); + if (data.absaddr) + yasm_intnum_destroy(data.absaddr); + return NULL; + } + + /* Check to see if alignment is supported size */ + if (align > 4096) { + yasm_error_set(YASM_ERROR_VALUE, + N_("XDF does not support alignments > 4096")); + if (data.vaddr) + yasm_intnum_destroy(data.vaddr); + if (data.absaddr) + yasm_intnum_destroy(data.absaddr); + return NULL; + } + } + + retval = yasm_object_get_general(object, sectname, align, 1, resonly, + &isnew, line); + + xsd = yasm_section_get_data(retval, &xdf_section_data_cb); + + if (isnew || yasm_section_is_default(retval)) { + yasm_section_set_default(retval, 0); + xsd->flags = data.flags; + if (data.absaddr) { + if (xsd->addr) + yasm_intnum_destroy(xsd->addr); + xsd->addr = data.absaddr; + } + if (data.vaddr) { + if (xsd->vaddr) + yasm_intnum_destroy(xsd->vaddr); + xsd->vaddr = data.vaddr; + } + yasm_section_set_align(retval, align, line); + } else if (flags_override) + yasm_warn_set(YASM_WARN_GENERAL, + N_("section flags ignored on section redeclaration")); + return retval; +} + +static /*@observer@*/ /*@null@*/ yasm_symrec * +xdf_objfmt_get_special_sym(yasm_object *object, const char *name, + const char *parser) +{ + return NULL; +} + +static void +xdf_section_data_destroy(void *data) +{ + xdf_section_data *xsd = (xdf_section_data *)data; + if (xsd->addr) + yasm_intnum_destroy(xsd->addr); + if (xsd->vaddr) + yasm_intnum_destroy(xsd->vaddr); + yasm_xfree(data); +} + +static void +xdf_section_data_print(void *data, FILE *f, int indent_level) +{ + xdf_section_data *xsd = (xdf_section_data *)data; + + fprintf(f, "%*ssym=\n", indent_level, ""); + yasm_symrec_print(xsd->sym, f, indent_level+1); + fprintf(f, "%*sscnum=%ld\n", indent_level, "", xsd->scnum); + fprintf(f, "%*sflags=0x%x\n", indent_level, "", xsd->flags); + fprintf(f, "%*saddr=", indent_level, ""); + yasm_intnum_print(xsd->addr, f); + fprintf(f, "%*svaddr=", indent_level, ""); + yasm_intnum_print(xsd->vaddr, f); + fprintf(f, "%*sscnptr=0x%lx\n", indent_level, "", xsd->scnptr); + fprintf(f, "%*ssize=%ld\n", indent_level, "", xsd->size); + fprintf(f, "%*srelptr=0x%lx\n", indent_level, "", xsd->relptr); + fprintf(f, "%*snreloc=%ld\n", indent_level, "", xsd->nreloc); +} + +static void +xdf_symrec_data_destroy(void *data) +{ + yasm_xfree(data); +} + +static void +xdf_symrec_data_print(void *data, FILE *f, int indent_level) +{ + xdf_symrec_data *xsd = (xdf_symrec_data *)data; + + fprintf(f, "%*ssymtab index=%lu\n", indent_level, "", xsd->index); +} + +/* Define valid debug formats to use with this object format */ +static const char *xdf_objfmt_dbgfmt_keywords[] = { + "null", + NULL +}; + +/* Define objfmt structure -- see objfmt.h for details */ +yasm_objfmt_module yasm_xdf_LTX_objfmt = { + "Extended Dynamic Object", + "xdf", + "xdf", + 32, + 0, + xdf_objfmt_dbgfmt_keywords, + "null", + NULL, /* no directives */ + NULL, /* no standard macros */ + xdf_objfmt_create, + xdf_objfmt_output, + xdf_objfmt_destroy, + xdf_objfmt_add_default_section, + xdf_objfmt_init_new_section, + xdf_objfmt_section_switch, + xdf_objfmt_get_special_sym +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/objfmts/yasm_objfmts.xml b/third-party/yasm/yasm-1.3.0/modules/objfmts/yasm_objfmts.xml new file mode 100644 index 0000000000..f4c9a75b47 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/objfmts/yasm_objfmts.xml @@ -0,0 +1,168 @@ + + + + + + + Yasm Supported Object Formats + February 2007 + Yasm + + Peter + Johnson + +
peter@tortall.net
+
+
+ + + 2006 + Peter Johnson + +
+ + + yasm_objfmts + 7 + + + + yasm_objfmts + Yasm Supported Object Formats + + + + + yasm + + + + + + + + + + + Description + + The standard Yasm distribution includes a number of modules + for different object formats (Yasm's primary output). + + The object format is selected on the + + + yasm + 1 + + + command line by use of the command line + option. + + + + bin + + The bin object format produces a flat-format, + non-relocatable binary file. It is appropriate for producing DOS + .COM executables or things like boot blocks. It supports only 3 + sections and those sections are written in a predefined order to + the output file. + + + + coff + + The COFF object format is an older relocatable object format + used on older Unix and compatible systems, and also (more recently) + on the DJGPP development system for DOS. + + + + dbg + + The dbg object format is not a + real object format; the output file it creates + simply describes the sequence of calls made to it by Yasm and the + final object and symbol table information in a human-readable text + format (that in a normal object format would get processed into + that object format's particular binary representation). This + object format is not intended for real use, but rather for + debugging Yasm's internals. + + + + elf + + The ELF object format really comes in three flavors: + elf32 (for 32-bit targets), elf64 + (for 64-bit targets and elfx32 (for x32 targets). + ELF is a standard object format in common use on modern Unix and + compatible systems (e.g. Linux, FreeBSD). ELF has complex support + for relocatable and shared objects. + + + + macho + + The Mach-O object format really comes in two flavors: + macho32 (for 32-bit targets) and + macho64 (for 64-bit targets). Mach-O is used as + the object format on MacOS X. As Yasm currently only supports + x86 and AMD64 instruction sets, it can only generate Mach-O + objects for Intel-based Macs. + + + + rdf + + The RDOFF2 object format is a simple multi-section format + originally designed for NASM. It supports segment references but + not WRT references. It was designed primarily for simplicity and + has minimalistic headers for ease of loading and linking. A + complete toolchain (linker, librarian, and loader) is distributed + with NASM. + + + + win32 + + The Win32 object format produces object files compatible with + Microsoft compilers (such as Visual C++) that target the 32-bit x86 + Windows platform. The object format itself is an extended version + of COFF. + + + + win64 + + The Win64 object format produces object files compatible with + Microsoft compilers that target the 64-bit x64 + Windows platform. This format is very similar to the win32 object + format, but produces 64-bit objects. + + + + xdf + + The XDF object format is essentially a simplified version of + COFF. It's a multi-section relocatable format that supports 64-bit + physical and virtual addresses. + + + + See Also + + + yasm + 1 + , + + + yasm_arch + 7 + + +
diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/parsers/CMakeLists.txt new file mode 100644 index 0000000000..db1e371fc2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/CMakeLists.txt @@ -0,0 +1,2 @@ +INCLUDE(parsers/gas/CMakeLists.txt) +INCLUDE(parsers/nasm/CMakeLists.txt) diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/parsers/Makefile.inc new file mode 100644 index 0000000000..b432fa9ee0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/Makefile.inc @@ -0,0 +1,15 @@ +EXTRA_DIST += modules/parsers/gas/Makefile.inc +EXTRA_DIST += modules/parsers/nasm/Makefile.inc + +include modules/parsers/gas/Makefile.inc +include modules/parsers/nasm/Makefile.inc +include modules/parsers/tasm/Makefile.inc + +notrans_dist_man_MANS += yasm_parsers.7 + +if BUILD_MAN +yasm_parsers.7: modules/parsers/yasm_parsers.xml + $(XMLTO) -o $(top_builddir) man $(srcdir)/modules/parsers/yasm_parsers.xml +endif + +EXTRA_DIST += modules/parsers/yasm_parsers.xml diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/CMakeLists.txt new file mode 100644 index 0000000000..d4ecb3ea56 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/CMakeLists.txt @@ -0,0 +1,12 @@ +YASM_RE2C( + ${CMAKE_CURRENT_SOURCE_DIR}/parsers/gas/gas-token.re + ${CMAKE_CURRENT_BINARY_DIR}/gas-token.c + -b + ) + +YASM_ADD_MODULE(parser_gas + parsers/gas/gas-parser.c + parsers/gas/gas-parse.c + parsers/gas/gas-parse-intel.c + gas-token.c + ) diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/Makefile.inc new file mode 100644 index 0000000000..a0264cc694 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/Makefile.inc @@ -0,0 +1,19 @@ +libyasm_a_SOURCES += modules/parsers/gas/gas-parser.c +libyasm_a_SOURCES += modules/parsers/gas/gas-parser.h +libyasm_a_SOURCES += modules/parsers/gas/gas-parse.c +libyasm_a_SOURCES += modules/parsers/gas/gas-parse-intel.c +nodist_libyasm_a_SOURCES += gas-token.c + +YASM_MODULES += parser_gas parser_gnu + +gas-token.c: $(srcdir)/modules/parsers/gas/gas-token.re re2c$(EXEEXT) + $(top_builddir)/re2c$(EXEEXT) -b -o $@ $(srcdir)/modules/parsers/gas/gas-token.re + +BUILT_SOURCES += gas-token.c + +CLEANFILES += gas-token.c + +EXTRA_DIST += modules/parsers/gas/tests/Makefile.inc +EXTRA_DIST += modules/parsers/gas/gas-token.re + +include modules/parsers/gas/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-parse-intel.c b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-parse-intel.c new file mode 100644 index 0000000000..9d412fc7d3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-parse-intel.c @@ -0,0 +1,90 @@ +/* + * GAS-compatible parser Intel syntax support + * + * Copyright (C) 2010 Alexei Svitkine + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of other contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "modules/parsers/gas/gas-parser.h" +#include "modules/parsers/nasm/nasm-parser-struct.h" + +extern yasm_bytecode *gas_intel_syntax_parse_instr(yasm_parser_nasm *parser_nasm, unsigned char *instr); + +#define SET_FIELDS(to, from) \ + (to)->object = (from)->object; \ + (to)->locallabel_base = (from)->locallabel_base; \ + (to)->locallabel_base_len = (from)->locallabel_base_len; \ + (to)->preproc = (from)->preproc; \ + (to)->errwarns = (from)->errwarns; \ + (to)->linemap = (from)->linemap; \ + (to)->prev_bc = (from)->prev_bc; + +yasm_bytecode *parse_instr_intel(yasm_parser_gas *parser_gas) +{ + char *stok, *slim; + unsigned char *line; + size_t length; + + yasm_parser_nasm parser_nasm; + yasm_bytecode *bc; + + memset(&parser_nasm, 0, sizeof(parser_nasm)); + + yasm_arch_set_var(parser_gas->object->arch, "gas_intel_mode", 1); + SET_FIELDS(&parser_nasm, parser_gas); + parser_nasm.masm = 1; + + stok = (char *) parser_gas->s.tok; + slim = (char *) parser_gas->s.lim; + length = 0; + while (&stok[length] < slim && stok[length] != '\n') { + length++; + } + + if (&stok[length] == slim && parser_gas->line) { + line = yasm_xmalloc(length + parser_gas->lineleft + 1); + memcpy(line, parser_gas->s.tok, length); + memcpy(line + length, parser_gas->linepos, parser_gas->lineleft); + length += parser_gas->lineleft; + if (line[length - 1] == '\n') length--; + } else { + line = yasm_xmalloc(length + 1); + memcpy(line, parser_gas->s.tok, length); + } + line[length] = '\0'; + + bc = gas_intel_syntax_parse_instr(&parser_nasm, line); + + SET_FIELDS(parser_gas, &parser_nasm); + yasm_arch_set_var(parser_gas->object->arch, "gas_intel_mode", 0); + + yasm_xfree(line); + + return bc; +} diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-parse.c b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-parse.c new file mode 100644 index 0000000000..14c86a70f4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-parse.c @@ -0,0 +1,1766 @@ +/* + * GAS-compatible parser + * + * Copyright (C) 2005-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of other contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include +#include +#include + +#include "modules/parsers/gas/gas-parser.h" + +typedef struct dir_lookup { + const char *name; + yasm_bytecode * (*handler) (yasm_parser_gas *, unsigned int); + unsigned int param; + enum gas_parser_state newstate; +} dir_lookup; + +static void cpp_line_marker(yasm_parser_gas *parser_gas); +static void nasm_line_marker(yasm_parser_gas *parser_gas); +static yasm_bytecode *parse_instr(yasm_parser_gas *parser_gas); +static int parse_dirvals(yasm_parser_gas *parser_gas, yasm_valparamhead *vps); +static int parse_datavals(yasm_parser_gas *parser_gas, yasm_datavalhead *dvs); +static int parse_strvals(yasm_parser_gas *parser_gas, yasm_datavalhead *dvs); +static yasm_effaddr *parse_memaddr(yasm_parser_gas *parser_gas); +static yasm_insn_operand *parse_operand(yasm_parser_gas *parser_gas); +static yasm_expr *parse_expr(yasm_parser_gas *parser_gas); +static yasm_expr *parse_expr0(yasm_parser_gas *parser_gas); +static yasm_expr *parse_expr1(yasm_parser_gas *parser_gas); +static yasm_expr *parse_expr2(yasm_parser_gas *parser_gas); + +static void define_label(yasm_parser_gas *parser_gas, char *name, int local); +static void define_lcomm(yasm_parser_gas *parser_gas, /*@only@*/ char *name, + yasm_expr *size, /*@null@*/ yasm_expr *align); +static yasm_section *gas_get_section + (yasm_parser_gas *parser_gas, /*@only@*/ char *name, /*@null@*/ char *flags, + /*@null@*/ char *type, /*@null@*/ yasm_valparamhead *objext_valparams, + int builtin); +static void gas_switch_section + (yasm_parser_gas *parser_gas, /*@only@*/ const char *name, + /*@null@*/ char *flags, /*@null@*/ char *type, + /*@null@*/ yasm_valparamhead *objext_valparams, int builtin); +static yasm_bytecode *gas_parser_align + (yasm_parser_gas *parser_gas, yasm_section *sect, yasm_expr *boundval, + /*@null@*/ yasm_expr *fillval, /*@null@*/ yasm_expr *maxskipval, + int power2); +static yasm_bytecode *gas_parser_dir_fill + (yasm_parser_gas *parser_gas, /*@only@*/ yasm_expr *repeat, + /*@only@*/ /*@null@*/ yasm_expr *size, + /*@only@*/ /*@null@*/ yasm_expr *value); + +#define is_eol_tok(tok) ((tok) == '\n' || (tok) == ';' || (tok) == 0) +#define is_eol() is_eol_tok(curtok) + +#define get_next_token() (curtok = gas_parser_lex(&curval, parser_gas)) + +static void +get_peek_token(yasm_parser_gas *parser_gas) +{ + char savech = parser_gas->tokch; + if (parser_gas->peek_token != NONE) + yasm_internal_error(N_("can only have one token of lookahead")); + parser_gas->peek_token = + gas_parser_lex(&parser_gas->peek_tokval, parser_gas); + parser_gas->peek_tokch = parser_gas->tokch; + parser_gas->tokch = savech; +} + +static void +destroy_curtok_(yasm_parser_gas *parser_gas) +{ + if (curtok < 256) + ; + else switch ((enum tokentype)curtok) { + case INTNUM: + yasm_intnum_destroy(curval.intn); + break; + case FLTNUM: + yasm_floatnum_destroy(curval.flt); + break; + case ID: + case LABEL: + case STRING: + yasm_xfree(curval.str.contents); + break; + default: + break; + } + curtok = NONE; /* sanity */ +} +#define destroy_curtok() destroy_curtok_(parser_gas) + +/* Eat all remaining tokens to EOL, discarding all of them. If there's any + * intervening tokens, generates an error (junk at end of line). + */ +static void +demand_eol_(yasm_parser_gas *parser_gas) +{ + if (is_eol()) + return; + + yasm_error_set(YASM_ERROR_SYNTAX, + N_("junk at end of line, first unrecognized character is `%c'"), + parser_gas->tokch); + + do { + destroy_curtok(); + get_next_token(); + } while (!is_eol()); +} +#define demand_eol() demand_eol_(parser_gas) + +static int +expect_(yasm_parser_gas *parser_gas, int token) +{ + static char strch[] = "` '"; + const char *str; + + if (curtok == token) + return 1; + + switch (token) { + case INTNUM: str = "integer"; break; + case FLTNUM: str = "floating point value"; break; + case STRING: str = "string"; break; + case REG: str = "register"; break; + case REGGROUP: str = "register group"; break; + case SEGREG: str = "segment register"; break; + case TARGETMOD: str = "target modifier"; break; + case LEFT_OP: str = "<<"; break; + case RIGHT_OP: str = ">>"; break; + case ID: str = "identifier"; break; + case LABEL: str = "label"; break; + default: + strch[1] = token; + str = strch; + break; + } + yasm_error_set(YASM_ERROR_PARSE, "expected %s", str); + destroy_curtok(); + return 0; +} +#define expect(token) expect_(parser_gas, token) + +static yasm_bytecode * +parse_line(yasm_parser_gas *parser_gas) +{ + yasm_bytecode *bc; + yasm_expr *e; + yasm_valparamhead vps; + char *id; + const dir_lookup *dir; + + if (is_eol()) + return NULL; + + bc = parse_instr(parser_gas); + if (bc) + return bc; + + switch (curtok) { + case ID: + id = ID_val; + + /* See if it's a gas-specific directive */ + dir = (const dir_lookup *)HAMT_search(parser_gas->dirs, id); + if (dir) { + parser_gas->state = dir->newstate; + get_next_token(); /* ID */ + return dir->handler(parser_gas, dir->param); + } + + get_next_token(); /* ID */ + if (curtok == ':') { + /* Label */ + parser_gas->state = INITIAL; + get_next_token(); /* : */ + define_label(parser_gas, id, 0); + return parse_line(parser_gas); + } else if (curtok == '=') { + /* EQU */ + /* TODO: allow redefinition, assigning to . (same as .org) */ + parser_gas->state = INITIAL; + get_next_token(); /* = */ + e = parse_expr(parser_gas); + if (e) + yasm_symtab_define_equ(p_symtab, id, e, cur_line); + else + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expression expected after `%s'"), "="); + yasm_xfree(id); + return NULL; + } + + /* possibly a directive; try to parse it */ + parse_dirvals(parser_gas, &vps); + if (!yasm_object_directive(p_object, id, "gas", &vps, NULL, + cur_line)) { + yasm_vps_delete(&vps); + yasm_xfree(id); + return NULL; + } + yasm_vps_delete(&vps); + if (id[0] == '.') + yasm_warn_set(YASM_WARN_GENERAL, + N_("directive `%s' not recognized"), id); + else + yasm_error_set(YASM_ERROR_SYNTAX, + N_("instruction not recognized: `%s'"), id); + yasm_xfree(id); + return NULL; + case LABEL: + define_label(parser_gas, LABEL_val, 0); + get_next_token(); /* LABEL */ + return parse_line(parser_gas); + case CPP_LINE_MARKER: + get_next_token(); + cpp_line_marker(parser_gas); + return NULL; + case NASM_LINE_MARKER: + get_next_token(); + nasm_line_marker(parser_gas); + return NULL; + default: + yasm_error_set(YASM_ERROR_SYNTAX, + N_("label or instruction expected at start of line")); + return NULL; + } +} + +/* + Handle line markers generated by cpp. + + We expect a positive integer (line) followed by a string (filename). If we + fail to find either of these, we treat the line as a comment. There is a + possibility of false positives (mistaking a comment for a line marker, when + the comment is not intended as a line marker) but this cannot be avoided + without adding a filter to the input before passing it to cpp. + + This function is only called if the preprocessor was 'cpp', since the + CPP_LINE_MARKER token isn't generated for any other preprocessor. With any + other preprocessor, anything after a '#' is always treated as a comment. +*/ +static void +cpp_line_marker(yasm_parser_gas *parser_gas) +{ + yasm_valparamhead vps; + yasm_valparam *vp; + unsigned long line; + char *filename; + + /* Line number. */ + if (curtok != INTNUM) { + /* Skip over a comment. */ + while (curtok != '\n') + get_next_token(); + + return; + } + + if (yasm_intnum_sign(INTNUM_val) < 0) { + get_next_token(); /* INTNUM */ + yasm_error_set(YASM_ERROR_SYNTAX, + N_("line number is negative")); + return; + } + + line = yasm_intnum_get_uint(INTNUM_val); + + /* + Set to (line - 1) since the directive indicates that the *next* line + will have the number given. + + cpp should never produce line=0, but the if keeps us safe just incase. + */ + if (line != 0) + line--; + + yasm_intnum_destroy(INTNUM_val); + get_next_token(); /* INTNUM */ + + /* File name, in quotes. */ + if (curtok != STRING) { + /* Skip over a comment. */ + while (curtok != '\n') + get_next_token(); + + return; + } + + filename = STRING_val.contents; + get_next_token(); + + /* Set linemap. */ + yasm_linemap_set(parser_gas->linemap, filename, 0, line, 1); + + /* + The first line marker in the file (which should be on the first line + of the file) will give us the name of the source file. This information + needs to be passed on to the debug format module. + */ + if (parser_gas->seen_line_marker == 0) { + parser_gas->seen_line_marker = 1; + + yasm_vps_initialize(&vps); + vp = yasm_vp_create_string(NULL, filename); + yasm_vps_append(&vps, vp); + + yasm_object_directive(p_object, ".file", "gas", &vps, NULL, cur_line); + + yasm_vps_delete(&vps); + } else + yasm_xfree(filename); + + /* Skip flags. */ + while (1) { + switch (curtok) { + case INTNUM: + break; + + case '\n': + return; + + default: + yasm_error_set(YASM_ERROR_SYNTAX, + N_("junk at end of cpp line marker")); + return; + } + get_next_token(); + } +} + +/* + Handle line markers generated by the nasm preproc. + + We expect a positive integer (line) followed by a plus sign, followed by + another positive integer, followed by a string (filename). + + This function is only called if the preprocessor was 'nasm', since the + NASM_LINE_MARKER token isn't generated for any other preprocessor. +*/ +static void +nasm_line_marker(yasm_parser_gas *parser_gas) +{ + yasm_valparamhead vps; + yasm_valparam *vp; + unsigned long line, incr; + char *filename; + + /* Line number. */ + if (!expect(INTNUM)) return; + + if (yasm_intnum_sign(INTNUM_val) < 0) { + get_next_token(); /* INTNUM */ + yasm_error_set(YASM_ERROR_SYNTAX, + N_("line number is negative")); + return; + } + + line = yasm_intnum_get_uint(INTNUM_val); + + /* + Set to (line - 1) since the directive indicates that the *next* line + will have the number given. + + cpp should never produce line=0, but the if keeps us safe just incase. + */ + if (line != 0) + line--; + + yasm_intnum_destroy(INTNUM_val); + get_next_token(); /* INTNUM */ + + if (!expect('+')) return; + get_next_token(); /* + */ + + /* Line number increment. */ + if (!expect(INTNUM)) return; + + if (yasm_intnum_sign(INTNUM_val) < 0) { + get_next_token(); /* INTNUM */ + yasm_error_set(YASM_ERROR_SYNTAX, + N_("line increment is negative")); + return; + } + + incr = yasm_intnum_get_uint(INTNUM_val); + yasm_intnum_destroy(INTNUM_val); + + /* File name is not in quotes, so need to switch to a different tokenizer + * state. + */ + parser_gas->state = NASM_FILENAME; + get_next_token(); /* INTNUM */ + if (!expect(STRING)) { + parser_gas->state = INITIAL; + return; + } + + filename = STRING_val.contents; + + /* Set linemap. */ + yasm_linemap_set(parser_gas->linemap, filename, 0, line, incr); + + /* + The first line marker in the file (which should be on the first line + of the file) will give us the name of the source file. This information + needs to be passed on to the debug format module. + */ + if (parser_gas->seen_line_marker == 0) { + parser_gas->seen_line_marker = 1; + + yasm_vps_initialize(&vps); + vp = yasm_vp_create_string(NULL, filename); + yasm_vps_append(&vps, vp); + + yasm_object_directive(p_object, ".file", "gas", &vps, NULL, cur_line); + + yasm_vps_delete(&vps); + } else + yasm_xfree(filename); + + /* We need to poke back on the \n that was consumed by the tokenizer */ + parser_gas->peek_token = '\n'; + get_next_token(); +} + +/* Line directive */ +static yasm_bytecode * +dir_line(yasm_parser_gas *parser_gas, unsigned int param) +{ + if (!expect(INTNUM)) return NULL; + if (yasm_intnum_sign(INTNUM_val) < 0) { + get_next_token(); /* INTNUM */ + yasm_error_set(YASM_ERROR_SYNTAX, + N_("line number is negative")); + return NULL; + } + + parser_gas->dir_line = yasm_intnum_get_uint(INTNUM_val); + yasm_intnum_destroy(INTNUM_val); + get_next_token(); /* INTNUM */ + + if (parser_gas->dir_fileline == 3) { + /* Have both file and line */ + yasm_linemap_set(parser_gas->linemap, NULL, 0, + parser_gas->dir_line, 1); + } else if (parser_gas->dir_fileline == 1) { + /* Had previous file directive only */ + parser_gas->dir_fileline = 3; + yasm_linemap_set(parser_gas->linemap, parser_gas->dir_file, 0, + parser_gas->dir_line, 1); + } else { + /* Didn't see file yet */ + parser_gas->dir_fileline = 2; + } + return NULL; +} + +/* Alignment directives */ + +static yasm_bytecode * +dir_align(yasm_parser_gas *parser_gas, unsigned int param) +{ + yasm_expr *bound, *fill=NULL, *maxskip=NULL; + + bound = parse_expr(parser_gas); + if (!bound) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_(".align directive must specify alignment")); + return NULL; + } + + if (curtok == ',') { + get_next_token(); /* ',' */ + fill = parse_expr(parser_gas); + if (curtok == ',') { + get_next_token(); /* ',' */ + maxskip = parse_expr(parser_gas); + } + } + + return gas_parser_align(parser_gas, cursect, bound, fill, maxskip, + (int)param); +} + +static yasm_bytecode * +dir_org(yasm_parser_gas *parser_gas, unsigned int param) +{ + yasm_intnum *start, *value=NULL; + yasm_bytecode *bc; + + /* TODO: support expr instead of intnum */ + if (!expect(INTNUM)) return NULL; + start = INTNUM_val; + get_next_token(); /* INTNUM */ + + if (curtok == ',') { + get_next_token(); /* ',' */ + /* TODO: support expr instead of intnum */ + if (!expect(INTNUM)) return NULL; + value = INTNUM_val; + get_next_token(); /* INTNUM */ + } + if (value) { + bc = yasm_bc_create_org(yasm_intnum_get_uint(start), + yasm_intnum_get_uint(value), cur_line); + yasm_intnum_destroy(value); + } else + bc = yasm_bc_create_org(yasm_intnum_get_uint(start), 0, + cur_line); + yasm_intnum_destroy(start); + return bc; +} + +/* Data visibility directives */ + +static yasm_bytecode * +dir_local(yasm_parser_gas *parser_gas, unsigned int param) +{ + if (!expect(ID)) return NULL; + yasm_symtab_declare(p_symtab, ID_val, YASM_SYM_DLOCAL, cur_line); + yasm_xfree(ID_val); + get_next_token(); /* ID */ + return NULL; +} + +static yasm_bytecode * +dir_comm(yasm_parser_gas *parser_gas, unsigned int is_lcomm) +{ + yasm_expr *align = NULL; + /*@null@*/ /*@dependent@*/ yasm_symrec *sym; + char *id; + yasm_expr *e; + + if (!expect(ID)) return NULL; + id = ID_val; + get_next_token(); /* ID */ + if (!expect(',')) { + yasm_xfree(id); + return NULL; + } + get_next_token(); /* , */ + e = parse_expr(parser_gas); + if (!e) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("size expected for `%s'"), + ".COMM"); + return NULL; + } + if (curtok == ',') { + /* Optional alignment expression */ + get_next_token(); /* ',' */ + align = parse_expr(parser_gas); + } + /* If already explicitly declared local, treat like LCOMM */ + if (is_lcomm + || ((sym = yasm_symtab_get(p_symtab, id)) + && yasm_symrec_get_visibility(sym) == YASM_SYM_DLOCAL)) { + define_lcomm(parser_gas, id, e, align); + } else if (align) { + /* Give third parameter as objext valparam */ + yasm_valparamhead *extvps = yasm_vps_create(); + yasm_valparam *vp = yasm_vp_create_expr(NULL, align); + yasm_vps_append(extvps, vp); + + sym = yasm_symtab_declare(p_symtab, id, YASM_SYM_COMMON, + cur_line); + yasm_symrec_set_common_size(sym, e); + yasm_symrec_set_objext_valparams(sym, extvps); + + yasm_xfree(id); + } else { + sym = yasm_symtab_declare(p_symtab, id, YASM_SYM_COMMON, + cur_line); + yasm_symrec_set_common_size(sym, e); + yasm_xfree(id); + } + return NULL; +} + +/* Integer data definition directives */ + +static yasm_bytecode * +dir_ascii(yasm_parser_gas *parser_gas, unsigned int withzero) +{ + yasm_datavalhead dvs; + if (!parse_strvals(parser_gas, &dvs)) + return NULL; + return yasm_bc_create_data(&dvs, 1, (int)withzero, p_object->arch, + cur_line); +} + +static yasm_bytecode * +dir_data(yasm_parser_gas *parser_gas, unsigned int size) +{ + yasm_datavalhead dvs; + if (!parse_datavals(parser_gas, &dvs)) + return NULL; + return yasm_bc_create_data(&dvs, size, 0, p_object->arch, cur_line); +} + +static yasm_bytecode * +dir_leb128(yasm_parser_gas *parser_gas, unsigned int sign) +{ + yasm_datavalhead dvs; + if (!parse_datavals(parser_gas, &dvs)) + return NULL; + return yasm_bc_create_leb128(&dvs, (int)sign, cur_line); +} + +/* Empty space / fill data definition directives */ + +static yasm_bytecode * +dir_zero(yasm_parser_gas *parser_gas, unsigned int param) +{ + yasm_bytecode *bc; + yasm_datavalhead dvs; + yasm_expr *e = parse_expr(parser_gas); + if (!e) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expression expected after `%s'"), ".ZERO"); + return NULL; + } + + yasm_dvs_initialize(&dvs); + yasm_dvs_append(&dvs, yasm_dv_create_expr( + p_expr_new_ident(yasm_expr_int(yasm_intnum_create_uint(0))))); + bc = yasm_bc_create_data(&dvs, 1, 0, p_object->arch, cur_line); + yasm_bc_set_multiple(bc, e); + return bc; +} + +static yasm_bytecode * +dir_skip(yasm_parser_gas *parser_gas, unsigned int param) +{ + yasm_expr *e, *e_val; + yasm_bytecode *bc; + yasm_datavalhead dvs; + + e = parse_expr(parser_gas); + if (!e) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expression expected after `%s'"), ".SKIP"); + return NULL; + } + if (curtok != ',') + return yasm_bc_create_reserve(e, 1, cur_line); + get_next_token(); /* ',' */ + e_val = parse_expr(parser_gas); + yasm_dvs_initialize(&dvs); + yasm_dvs_append(&dvs, yasm_dv_create_expr(e_val)); + bc = yasm_bc_create_data(&dvs, 1, 0, p_object->arch, cur_line); + + yasm_bc_set_multiple(bc, e); + return bc; +} + +/* fill data definition directive */ +static yasm_bytecode * +dir_fill(yasm_parser_gas *parser_gas, unsigned int param) +{ + yasm_expr *sz=NULL, *val=NULL; + yasm_expr *e = parse_expr(parser_gas); + if (!e) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expression expected after `%s'"), ".FILL"); + return NULL; + } + if (curtok == ',') { + get_next_token(); /* ',' */ + sz = parse_expr(parser_gas); + if (curtok == ',') { + get_next_token(); /* ',' */ + val = parse_expr(parser_gas); + } + } + return gas_parser_dir_fill(parser_gas, e, sz, val); +} + +/* Section directives */ + +static yasm_bytecode * +dir_bss_section(yasm_parser_gas *parser_gas, unsigned int param) +{ + gas_switch_section(parser_gas, ".bss", NULL, NULL, NULL, 1); + return NULL; +} + +static yasm_bytecode * +dir_data_section(yasm_parser_gas *parser_gas, unsigned int param) +{ + gas_switch_section(parser_gas, ".data", NULL, NULL, NULL, 1); + return NULL; +} + +static yasm_bytecode * +dir_text_section(yasm_parser_gas *parser_gas, unsigned int param) +{ + gas_switch_section(parser_gas, ".text", NULL, NULL, NULL, 1); + return NULL; +} + +static yasm_bytecode * +dir_section(yasm_parser_gas *parser_gas, unsigned int param) +{ + /* DIR_SECTION ID ',' STRING ',' '@' ID ',' dirvals */ + char *sectname, *flags = NULL, *type = NULL; + yasm_valparamhead vps; + int have_vps = 0; + + if (!expect(ID)) return NULL; + sectname = ID_val; + get_next_token(); /* ID */ + + if (curtok == ',') { + get_next_token(); /* ',' */ + if (!expect(STRING)) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("flag string expected")); + yasm_xfree(sectname); + return NULL; + } + flags = STRING_val.contents; + get_next_token(); /* STRING */ + } + + if (curtok == ',') { + get_next_token(); /* ',' */ + if (!expect('@')) { + yasm_xfree(sectname); + yasm_xfree(flags); + return NULL; + } + get_next_token(); /* '@' */ + if (!expect(ID)) { + yasm_xfree(sectname); + yasm_xfree(flags); + return NULL; + } + type = ID_val; + get_next_token(); /* ID */ + } + + if (curtok == ',') { + get_next_token(); /* ',' */ + if (parse_dirvals(parser_gas, &vps)) + have_vps = 1; + } + + gas_switch_section(parser_gas, sectname, flags, type, + have_vps ? &vps : NULL, 0); + yasm_xfree(sectname); + yasm_xfree(flags); + return NULL; +} + +/* Other directives */ + +static yasm_bytecode * +dir_equ(yasm_parser_gas *parser_gas, unsigned int param) +{ + yasm_expr *e; + char *id; + + /* ID ',' expr */ + if (!expect(ID)) return NULL; + id = ID_val; + get_next_token(); /* ID */ + if (!expect(',')) { + yasm_xfree(id); + return NULL; + } + get_next_token(); /* ',' */ + e = parse_expr(parser_gas); + if (e) + yasm_symtab_define_equ(p_symtab, id, e, cur_line); + else + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expression expected after `%s'"), ","); + yasm_xfree(id); + return NULL; +} + +static yasm_bytecode * +dir_file(yasm_parser_gas *parser_gas, unsigned int param) +{ + yasm_valparamhead vps; + yasm_valparam *vp; + + if (curtok == STRING) { + /* No file number; this form also sets the assembler's + * internal line number. + */ + char *filename = STRING_val.contents; + + get_next_token(); /* STRING */ + if (parser_gas->dir_fileline == 3) { + /* Have both file and line */ + const char *old_fn; + unsigned long old_line; + + yasm_linemap_lookup(parser_gas->linemap, cur_line, &old_fn, + &old_line); + yasm_linemap_set(parser_gas->linemap, filename, 0, old_line, + 1); + } else if (parser_gas->dir_fileline == 2) { + /* Had previous line directive only */ + parser_gas->dir_fileline = 3; + yasm_linemap_set(parser_gas->linemap, filename, 0, + parser_gas->dir_line, 1); + } else { + /* Didn't see line yet, save file */ + parser_gas->dir_fileline = 1; + if (parser_gas->dir_file) + yasm_xfree(parser_gas->dir_file); + parser_gas->dir_file = yasm__xstrdup(filename); + } + + /* Pass change along to debug format */ + yasm_vps_initialize(&vps); + vp = yasm_vp_create_string(NULL, filename); + yasm_vps_append(&vps, vp); + + yasm_object_directive(p_object, ".file", "gas", &vps, NULL, + cur_line); + + yasm_vps_delete(&vps); + return NULL; + } + + /* fileno filename form */ + yasm_vps_initialize(&vps); + + if (!expect(INTNUM)) return NULL; + vp = yasm_vp_create_expr(NULL, + p_expr_new_ident(yasm_expr_int(INTNUM_val))); + yasm_vps_append(&vps, vp); + get_next_token(); /* INTNUM */ + + if (!expect(STRING)) { + yasm_vps_delete(&vps); + return NULL; + } + vp = yasm_vp_create_string(NULL, STRING_val.contents); + yasm_vps_append(&vps, vp); + get_next_token(); /* STRING */ + + yasm_object_directive(p_object, ".file", "gas", &vps, NULL, + cur_line); + + yasm_vps_delete(&vps); + return NULL; +} + + +static yasm_bytecode * +dir_intel_syntax(yasm_parser_gas *parser_gas, unsigned int param) +{ + parser_gas->intel_syntax = 1; + + do { + destroy_curtok(); + get_next_token(); + } while (!is_eol()); + return NULL; +} + +static yasm_bytecode * +dir_att_syntax(yasm_parser_gas *parser_gas, unsigned int param) +{ + parser_gas->intel_syntax = 0; + return NULL; +} + +static yasm_bytecode * +parse_instr(yasm_parser_gas *parser_gas) +{ + yasm_bytecode *bc; + char *id; + uintptr_t prefix; + + if (parser_gas->intel_syntax) { + bc = parse_instr_intel(parser_gas); + if (bc) { + yasm_warn_disable(YASM_WARN_UNREC_CHAR); + do { + destroy_curtok(); + get_next_token(); + } while (!is_eol()); + yasm_warn_enable(YASM_WARN_UNREC_CHAR); + } + return bc; + } + + if (curtok != ID) + return NULL; + + id = ID_val; + + /* instructions/prefixes must start with a letter */ + if (!isalpha(id[0])) + return NULL; + + /* check to be sure it's not a label or equ */ + get_peek_token(parser_gas); + if (parser_gas->peek_token == ':' || parser_gas->peek_token == '=') + return NULL; + + switch (yasm_arch_parse_check_insnprefix + (p_object->arch, ID_val, ID_len, cur_line, &bc, &prefix)) { + case YASM_ARCH_INSN: + { + yasm_insn *insn; + + /* Propagate errors in case we got a warning from the arch */ + yasm_errwarn_propagate(parser_gas->errwarns, cur_line); + + insn = yasm_bc_get_insn(bc); + + yasm_xfree(id); + get_next_token(); /* ID */ + if (is_eol()) + return bc; /* no operands */ + + /* parse operands */ + for (;;) { + yasm_insn_operand *op = parse_operand(parser_gas); + if (!op) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expression syntax error")); + yasm_bc_destroy(bc); + return NULL; + } + yasm_insn_ops_append(insn, op); + + if (is_eol()) + break; + if (!expect(',')) { + yasm_bc_destroy(bc); + return NULL; + } + get_next_token(); + } + return bc; + } + case YASM_ARCH_PREFIX: + /* Propagate errors in case we got a warning from the arch */ + yasm_errwarn_propagate(parser_gas->errwarns, cur_line); + + yasm_xfree(id); + get_next_token(); /* ID */ + bc = parse_instr(parser_gas); + if (!bc) + bc = yasm_arch_create_empty_insn(p_object->arch, cur_line); + yasm_insn_add_prefix(yasm_bc_get_insn(bc), prefix); + return bc; + default: + break; + } + + /* Check for segment register used as prefix */ + switch (yasm_arch_parse_check_regtmod(p_object->arch, ID_val, ID_len, + &prefix)) { + case YASM_ARCH_SEGREG: + yasm_xfree(id); + get_next_token(); /* ID */ + bc = parse_instr(parser_gas); + if (!bc) + bc = yasm_arch_create_empty_insn(p_object->arch, cur_line); + yasm_insn_add_seg_prefix(yasm_bc_get_insn(bc), prefix); + return bc; + default: + return NULL; + } +} + +static int +parse_dirvals(yasm_parser_gas *parser_gas, yasm_valparamhead *vps) +{ + yasm_valparam *vp; + yasm_expr *e; + int num = 0; + + yasm_vps_initialize(vps); + + for (;;) { + switch (curtok) { + case ID: + get_peek_token(parser_gas); + switch (parser_gas->peek_token) { + case '+': case '-': + case '|': case '^': case '&': case '!': + case '*': case '/': case '%': case LEFT_OP: case RIGHT_OP: + e = parse_expr(parser_gas); + vp = yasm_vp_create_expr(NULL, e); + break; + default: + /* Just an ID */ + vp = yasm_vp_create_id(NULL, ID_val, '\0'); + get_next_token(); /* ID */ + break; + } + break; + case STRING: + vp = yasm_vp_create_string(NULL, STRING_val.contents); + get_next_token(); /* STRING */ + break; + case REG: + e = p_expr_new_ident(yasm_expr_reg(REG_val)); + vp = yasm_vp_create_expr(NULL, e); + get_next_token(); /* REG */ + break; + case '@': + /* XXX: is throwing it away *really* the right thing? */ + get_next_token(); /* @ */ + continue; + default: + e = parse_expr(parser_gas); + if (!e) + return num; + vp = yasm_vp_create_expr(NULL, e); + break; + } + yasm_vps_append(vps, vp); + num++; + if (curtok == ',') + get_next_token(); /* ',' */ + } + return num; +} + +static int +parse_datavals(yasm_parser_gas *parser_gas, yasm_datavalhead *dvs) +{ + yasm_expr *e; + yasm_dataval *dv; + int num = 0; + + yasm_dvs_initialize(dvs); + + for (;;) { + e = parse_expr(parser_gas); + if (!e) { + yasm_dvs_delete(dvs); + yasm_dvs_initialize(dvs); + return 0; + } + dv = yasm_dv_create_expr(e); + yasm_dvs_append(dvs, dv); + num++; + if (curtok != ',') + break; + get_next_token(); /* ',' */ + } + return num; +} + +static int +parse_strvals(yasm_parser_gas *parser_gas, yasm_datavalhead *dvs) +{ + yasm_dataval *dv; + int num = 0; + + yasm_dvs_initialize(dvs); + + for (;;) { + if (!expect(STRING)) { + yasm_dvs_delete(dvs); + yasm_dvs_initialize(dvs); + return 0; + } + dv = yasm_dv_create_string(STRING_val.contents, STRING_val.len); + yasm_dvs_append(dvs, dv); + get_next_token(); /* STRING */ + num++; + if (curtok != ',') + break; + get_next_token(); /* ',' */ + } + return num; +} + +/* instruction operands */ +/* memory addresses */ +static yasm_effaddr * +parse_memaddr(yasm_parser_gas *parser_gas) +{ + yasm_effaddr *ea = NULL; + yasm_expr *e1, *e2; + int strong = 0; + + if (curtok == SEGREG) { + uintptr_t segreg = SEGREG_val; + get_next_token(); /* SEGREG */ + if (!expect(':')) return NULL; + get_next_token(); /* ':' */ + ea = parse_memaddr(parser_gas); + if (!ea) + return NULL; + yasm_ea_set_segreg(ea, segreg); + return ea; + } + + /* We want to parse a leading expression, except when it's actually + * just a memory address (with no preceding expression) such as + * (REG...) or (,...). + */ + get_peek_token(parser_gas); + if (curtok != '(' || (parser_gas->peek_token != REG + && parser_gas->peek_token != ',')) + e1 = parse_expr(parser_gas); + else + e1 = NULL; + + if (curtok == '(') { + int havereg = 0; + uintptr_t reg = 0; + yasm_intnum *scale = NULL; + + get_next_token(); /* '(' */ + + /* base register */ + if (curtok == REG) { + e2 = p_expr_new_ident(yasm_expr_reg(REG_val)); + get_next_token(); /* REG */ + } else + e2 = p_expr_new_ident(yasm_expr_int(yasm_intnum_create_uint(0))); + + if (curtok == ')') + goto done; + + if (!expect(',')) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("invalid memory expression")); + if (e1) yasm_expr_destroy(e1); + yasm_expr_destroy(e2); + return NULL; + } + get_next_token(); /* ',' */ + + if (curtok == ')') + goto done; + + /* index register */ + if (curtok == REG) { + reg = REG_val; + havereg = 1; + get_next_token(); /* REG */ + if (curtok != ',') { + scale = yasm_intnum_create_uint(1); + goto done; + } + get_next_token(); /* ',' */ + } + + /* scale */ + if (!expect(INTNUM)) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("non-integer scale")); + if (e1) yasm_expr_destroy(e1); + yasm_expr_destroy(e2); + return NULL; + } + scale = INTNUM_val; + get_next_token(); /* INTNUM */ + +done: + if (!expect(')')) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("invalid memory expression")); + if (scale) yasm_intnum_destroy(scale); + if (e1) yasm_expr_destroy(e1); + yasm_expr_destroy(e2); + return NULL; + } + get_next_token(); /* ')' */ + + if (scale) { + if (!havereg) { + if (yasm_intnum_get_uint(scale) != 1) + yasm_warn_set(YASM_WARN_GENERAL, + N_("scale factor of %u without an index register"), + yasm_intnum_get_uint(scale)); + yasm_intnum_destroy(scale); + } else + e2 = p_expr_new(yasm_expr_expr(e2), YASM_EXPR_ADD, + yasm_expr_expr(p_expr_new(yasm_expr_reg(reg), YASM_EXPR_MUL, + yasm_expr_int(scale)))); + } + + if (e1) { + /* Ordering is critical here to correctly detecting presence of + * RIP in RIP-relative expressions. + */ + e1 = p_expr_new_tree(e2, YASM_EXPR_ADD, e1); + } else + e1 = e2; + strong = 1; + } + + if (!e1) + return NULL; + ea = yasm_arch_ea_create(p_object->arch, e1); + if (strong) + ea->strong = 1; + return ea; +} + +static yasm_insn_operand * +parse_operand(yasm_parser_gas *parser_gas) +{ + yasm_effaddr *ea; + yasm_insn_operand *op; + uintptr_t reg; + + switch (curtok) { + case REG: + reg = REG_val; + get_next_token(); /* REG */ + return yasm_operand_create_reg(reg); + case SEGREG: + /* need to see if it's really a memory address */ + get_peek_token(parser_gas); + if (parser_gas->peek_token == ':') { + ea = parse_memaddr(parser_gas); + if (!ea) + return NULL; + return yasm_operand_create_mem(ea); + } + reg = SEGREG_val; + get_next_token(); /* SEGREG */ + return yasm_operand_create_segreg(reg); + case REGGROUP: + { + unsigned long regindex; + reg = REGGROUP_val; + get_next_token(); /* REGGROUP */ + if (curtok != '(') + return yasm_operand_create_reg(reg); + get_next_token(); /* '(' */ + if (!expect(INTNUM)) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("integer register index expected")); + return NULL; + } + regindex = yasm_intnum_get_uint(INTNUM_val); + get_next_token(); /* INTNUM */ + if (!expect(')')) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("missing closing parenthesis for register index")); + return NULL; + } + get_next_token(); /* ')' */ + reg = yasm_arch_reggroup_get_reg(p_object->arch, reg, regindex); + if (reg == 0) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("bad register index `%u'"), + regindex); + return NULL; + } + return yasm_operand_create_reg(reg); + } + case '$': + { + yasm_expr *e; + get_next_token(); /* '$' */ + e = parse_expr(parser_gas); + if (!e) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expression missing after `%s'"), "$"); + return NULL; + } + return yasm_operand_create_imm(e); + } + case '*': + get_next_token(); /* '*' */ + if (curtok == REG) { + op = yasm_operand_create_reg(REG_val); + get_next_token(); /* REG */ + } else { + ea = parse_memaddr(parser_gas); + if (!ea) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expression missing after `%s'"), "*"); + return NULL; + } + op = yasm_operand_create_mem(ea); + } + op->deref = 1; + return op; + default: + ea = parse_memaddr(parser_gas); + if (!ea) + return NULL; + return yasm_operand_create_mem(ea); + } +} + +/* Expression grammar parsed is: + * + * expr : expr0 [ {+,-} expr0...] + * expr0 : expr1 [ {|,^,&,!} expr1...] + * expr1 : expr2 [ {*,/,%,<<,>>} expr2...] + * expr2 : { ~,+,- } expr2 + * | (expr) + * | symbol + * | number + */ + +static yasm_expr * +parse_expr(yasm_parser_gas *parser_gas) +{ + yasm_expr *e, *f; + e = parse_expr0(parser_gas); + if (!e) + return NULL; + + while (curtok == '+' || curtok == '-') { + int op = curtok; + get_next_token(); + f = parse_expr0(parser_gas); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + switch (op) { + case '+': e = p_expr_new_tree(e, YASM_EXPR_ADD, f); break; + case '-': e = p_expr_new_tree(e, YASM_EXPR_SUB, f); break; + } + } + return e; +} + +static yasm_expr * +parse_expr0(yasm_parser_gas *parser_gas) +{ + yasm_expr *e, *f; + e = parse_expr1(parser_gas); + if (!e) + return NULL; + + while (curtok == '|' || curtok == '^' || curtok == '&' || curtok == '!') { + int op = curtok; + get_next_token(); + f = parse_expr1(parser_gas); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + switch (op) { + case '|': e = p_expr_new_tree(e, YASM_EXPR_OR, f); break; + case '^': e = p_expr_new_tree(e, YASM_EXPR_XOR, f); break; + case '&': e = p_expr_new_tree(e, YASM_EXPR_AND, f); break; + case '!': e = p_expr_new_tree(e, YASM_EXPR_NOR, f); break; + } + } + return e; +} + +static yasm_expr * +parse_expr1(yasm_parser_gas *parser_gas) +{ + yasm_expr *e, *f; + e = parse_expr2(parser_gas); + if (!e) + return NULL; + + while (curtok == '*' || curtok == '/' || curtok == '%' || curtok == LEFT_OP + || curtok == RIGHT_OP) { + int op = curtok; + get_next_token(); + f = parse_expr2(parser_gas); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + switch (op) { + case '*': e = p_expr_new_tree(e, YASM_EXPR_MUL, f); break; + case '/': e = p_expr_new_tree(e, YASM_EXPR_DIV, f); break; + case '%': e = p_expr_new_tree(e, YASM_EXPR_MOD, f); break; + case LEFT_OP: e = p_expr_new_tree(e, YASM_EXPR_SHL, f); break; + case RIGHT_OP: e = p_expr_new_tree(e, YASM_EXPR_SHR, f); break; + } + } + return e; +} + +static yasm_expr * +parse_expr2(yasm_parser_gas *parser_gas) +{ + yasm_expr *e; + yasm_symrec *sym; + + switch (curtok) { + case '+': + get_next_token(); + return parse_expr2(parser_gas); + case '-': + get_next_token(); + e = parse_expr2(parser_gas); + if (!e) + return NULL; + return p_expr_new_branch(YASM_EXPR_NEG, e); + case '~': + get_next_token(); + e = parse_expr2(parser_gas); + if (!e) + return NULL; + return p_expr_new_branch(YASM_EXPR_NOT, e); + case '(': + get_next_token(); + e = parse_expr(parser_gas); + if (!e) + return NULL; + if (!expect(')')) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("missing parenthesis")); + return NULL; + } + get_next_token(); + return e; + case INTNUM: + e = p_expr_new_ident(yasm_expr_int(INTNUM_val)); + get_next_token(); + return e; + case FLTNUM: + e = p_expr_new_ident(yasm_expr_float(FLTNUM_val)); + get_next_token(); + return e; + case ID: + { + char *name = ID_val; + get_next_token(); /* ID */ + + /* "." references the current assembly position */ + if (name[1] == '\0' && name[0] == '.') + sym = yasm_symtab_define_curpos(p_symtab, ".", + parser_gas->prev_bc, cur_line); + else + sym = yasm_symtab_use(p_symtab, name, cur_line); + yasm_xfree(name); + + if (curtok == '@') { + yasm_symrec *wrt; + /* TODO: this is needed for shared objects, e.g. sym@PLT */ + get_next_token(); /* '@' */ + if (!expect(ID)) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expected identifier after `@'")); + return NULL; + } + wrt = yasm_objfmt_get_special_sym(p_object, ID_val, "gas"); + yasm_xfree(ID_val); + get_next_token(); /* ID */ + if (!wrt) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("unrecognized identifier after `@'")); + return p_expr_new_ident(yasm_expr_sym(sym)); + } + return p_expr_new(yasm_expr_sym(sym), YASM_EXPR_WRT, + yasm_expr_sym(wrt)); + } + + return p_expr_new_ident(yasm_expr_sym(sym)); + } + default: + return NULL; + } +} + +static void +define_label(yasm_parser_gas *parser_gas, char *name, int local) +{ + if (!local) { + if (parser_gas->locallabel_base) + yasm_xfree(parser_gas->locallabel_base); + parser_gas->locallabel_base_len = strlen(name); + parser_gas->locallabel_base = + yasm_xmalloc(parser_gas->locallabel_base_len+1); + strcpy(parser_gas->locallabel_base, name); + } + + yasm_symtab_define_label(p_symtab, name, parser_gas->prev_bc, 1, + cur_line); + yasm_xfree(name); +} + +static void +define_lcomm(yasm_parser_gas *parser_gas, /*@only@*/ char *name, + yasm_expr *size, /*@null@*/ yasm_expr *align) +{ + /* Put into .bss section. */ + /*@dependent@*/ yasm_section *bss = + gas_get_section(parser_gas, yasm__xstrdup(".bss"), NULL, NULL, NULL, 1); + + if (align) { + /* XXX: assume alignment is in bytes, not power-of-two */ + yasm_section_bcs_append(bss, gas_parser_align(parser_gas, bss, align, + NULL, NULL, 0)); + } + + yasm_symtab_define_label(p_symtab, name, yasm_section_bcs_last(bss), 1, + cur_line); + yasm_section_bcs_append(bss, yasm_bc_create_reserve(size, 1, cur_line)); + yasm_xfree(name); +} + +static yasm_section * +gas_get_section(yasm_parser_gas *parser_gas, char *name, + /*@null@*/ char *flags, /*@null@*/ char *type, + /*@null@*/ yasm_valparamhead *objext_valparams, + int builtin) +{ + yasm_valparamhead vps; + yasm_valparam *vp; + char *gasflags; + yasm_section *new_section; + + yasm_vps_initialize(&vps); + vp = yasm_vp_create_id(NULL, name, '\0'); + yasm_vps_append(&vps, vp); + + if (!builtin) { + if (flags) + gasflags = yasm__xstrdup(flags); + else + gasflags = yasm__xstrdup(""); + vp = yasm_vp_create_string(yasm__xstrdup("gasflags"), gasflags); + yasm_vps_append(&vps, vp); + if (type) { + vp = yasm_vp_create_id(NULL, type, '\0'); + yasm_vps_append(&vps, vp); + } + } + + new_section = yasm_objfmt_section_switch(p_object, &vps, objext_valparams, + cur_line); + + yasm_vps_delete(&vps); + return new_section; +} + +static void +gas_switch_section(yasm_parser_gas *parser_gas, const char *name, + /*@null@*/ char *flags, /*@null@*/ char *type, + /*@null@*/ yasm_valparamhead *objext_valparams, + int builtin) +{ + yasm_section *new_section; + + new_section = gas_get_section(parser_gas, yasm__xstrdup(name), flags, type, + objext_valparams, builtin); + if (new_section) { + cursect = new_section; + parser_gas->prev_bc = yasm_section_bcs_last(new_section); + } else + yasm_error_set(YASM_ERROR_GENERAL, N_("invalid section name `%s'"), + name); + + if (objext_valparams) + yasm_vps_delete(objext_valparams); +} + +static yasm_bytecode * +gas_parser_align(yasm_parser_gas *parser_gas, yasm_section *sect, + yasm_expr *boundval, /*@null@*/ yasm_expr *fillval, + /*@null@*/ yasm_expr *maxskipval, int power2) +{ + yasm_intnum *boundintn; + + /* Convert power of two to number of bytes if necessary */ + if (power2) + boundval = yasm_expr_create(YASM_EXPR_SHL, + yasm_expr_int(yasm_intnum_create_uint(1)), + yasm_expr_expr(boundval), cur_line); + + /* Largest .align in the section specifies section alignment. */ + boundintn = yasm_expr_get_intnum(&boundval, 0); + if (boundintn) { + unsigned long boundint = yasm_intnum_get_uint(boundintn); + + /* Alignments must be a power of two. */ + if (is_exp2(boundint)) { + if (boundint > yasm_section_get_align(sect)) + yasm_section_set_align(sect, boundint, cur_line); + } + } + + return yasm_bc_create_align(boundval, fillval, maxskipval, + yasm_section_is_code(sect) ? + yasm_arch_get_fill(p_object->arch) : NULL, + cur_line); +} + +static yasm_bytecode * +gas_parser_dir_fill(yasm_parser_gas *parser_gas, /*@only@*/ yasm_expr *repeat, + /*@only@*/ /*@null@*/ yasm_expr *size, + /*@only@*/ /*@null@*/ yasm_expr *value) +{ + yasm_datavalhead dvs; + yasm_bytecode *bc; + unsigned int ssize; + + if (size) { + /*@dependent@*/ /*@null@*/ yasm_intnum *intn; + intn = yasm_expr_get_intnum(&size, 0); + if (!intn) { + yasm_error_set(YASM_ERROR_NOT_ABSOLUTE, + N_("size must be an absolute expression")); + yasm_expr_destroy(repeat); + yasm_expr_destroy(size); + if (value) + yasm_expr_destroy(value); + return NULL; + } + ssize = yasm_intnum_get_uint(intn); + } else + ssize = 1; + + if (!value) + value = yasm_expr_create_ident( + yasm_expr_int(yasm_intnum_create_uint(0)), cur_line); + + yasm_dvs_initialize(&dvs); + yasm_dvs_append(&dvs, yasm_dv_create_expr(value)); + bc = yasm_bc_create_data(&dvs, ssize, 0, p_object->arch, cur_line); + + yasm_bc_set_multiple(bc, repeat); + + return bc; +} + +static dir_lookup dirs_static[] = { + /* FIXME: Whether this is power-of-two or not depends on arch and objfmt. */ + {".align", dir_align, 0, INITIAL}, + {".p2align", dir_align, 1, INITIAL}, + {".balign", dir_align, 0, INITIAL}, + {".org", dir_org, 0, INITIAL}, + /* data visibility directives */ + {".local", dir_local, 0, INITIAL}, + {".comm", dir_comm, 0, INITIAL}, + {".lcomm", dir_comm, 1, INITIAL}, + /* integer data declaration directives */ + {".byte", dir_data, 1, INITIAL}, + {".2byte", dir_data, 2, INITIAL}, + {".4byte", dir_data, 4, INITIAL}, + {".8byte", dir_data, 8, INITIAL}, + {".16byte", dir_data, 16, INITIAL}, + /* TODO: These should depend on arch */ + {".short", dir_data, 2, INITIAL}, + {".int", dir_data, 4, INITIAL}, + {".long", dir_data, 4, INITIAL}, + {".hword", dir_data, 2, INITIAL}, + {".quad", dir_data, 8, INITIAL}, + {".octa", dir_data, 16, INITIAL}, + /* XXX: At least on x86, this is 2 bytes */ + {".value", dir_data, 2, INITIAL}, + /* ASCII data declaration directives */ + {".ascii", dir_ascii, 0, INITIAL}, /* no terminating zero */ + {".asciz", dir_ascii, 1, INITIAL}, /* add terminating zero */ + {".string", dir_ascii, 1, INITIAL}, /* add terminating zero */ + /* LEB128 integer data declaration directives */ + {".sleb128", dir_leb128, 1, INITIAL}, /* signed */ + {".uleb128", dir_leb128, 0, INITIAL}, /* unsigned */ + /* floating point data declaration directives */ + {".float", dir_data, 4, INITIAL}, + {".single", dir_data, 4, INITIAL}, + {".double", dir_data, 8, INITIAL}, + {".tfloat", dir_data, 10, INITIAL}, + /* section directives */ + {".bss", dir_bss_section, 0, INITIAL}, + {".data", dir_data_section, 0, INITIAL}, + {".text", dir_text_section, 0, INITIAL}, + {".section", dir_section, 0, SECTION_DIRECTIVE}, + /* empty space/fill directives */ + {".skip", dir_skip, 0, INITIAL}, + {".space", dir_skip, 0, INITIAL}, + {".fill", dir_fill, 0, INITIAL}, + {".zero", dir_zero, 0, INITIAL}, + /* syntax directives */ + {".intel_syntax", dir_intel_syntax, 0, INITIAL}, + {".att_syntax", dir_att_syntax, 0, INITIAL}, + /* other directives */ + {".equ", dir_equ, 0, INITIAL}, + {".file", dir_file, 0, INITIAL}, + {".line", dir_line, 0, INITIAL}, + {".set", dir_equ, 0, INITIAL} +}; + +static void +no_delete(void *data) +{ +} + +void +gas_parser_parse(yasm_parser_gas *parser_gas) +{ + dir_lookup word; + unsigned int i; + int replace = 1; + + word.name = ".word"; + word.handler = dir_data; + word.param = yasm_arch_wordsize(p_object->arch)/8; + word.newstate = INITIAL; + + /* Create directive lookup */ + parser_gas->dirs = HAMT_create(1, yasm_internal_error_); + HAMT_insert(parser_gas->dirs, word.name, &word, &replace, no_delete); + for (i=0; idirs, dirs_static[i].name, + &dirs_static[i], &replace, no_delete); + } + + while (get_next_token() != 0) { + yasm_bytecode *bc = NULL, *temp_bc; + + if (!is_eol()) { + bc = parse_line(parser_gas); + demand_eol(); + } + + yasm_errwarn_propagate(parser_gas->errwarns, cur_line); + + temp_bc = yasm_section_bcs_append(cursect, bc); + if (temp_bc) + parser_gas->prev_bc = temp_bc; + if (curtok == ';') + continue; /* don't advance line number until \n */ + if (parser_gas->save_input) + yasm_linemap_add_source(parser_gas->linemap, + temp_bc, + (char *)parser_gas->save_line[parser_gas->save_last ^ 1]); + yasm_linemap_goto_next(parser_gas->linemap); + parser_gas->dir_line++; /* keep track for .line followed by .file */ + } + + HAMT_destroy(parser_gas->dirs, no_delete); +} diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-parser.c b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-parser.c new file mode 100644 index 0000000000..088bcdad0a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-parser.c @@ -0,0 +1,133 @@ +/* + * GAS-compatible parser + * + * Copyright (C) 2005-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of other contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "gas-parser.h" + + +static void +gas_parser_do_parse(yasm_object *object, yasm_preproc *pp, + int save_input, yasm_linemap *linemap, + yasm_errwarns *errwarns) +{ + yasm_parser_gas parser_gas; + int i; + + parser_gas.object = object; + parser_gas.linemap = linemap; + + parser_gas.locallabel_base = (char *)NULL; + parser_gas.locallabel_base_len = 0; + + parser_gas.dir_fileline = 0; + parser_gas.dir_file = NULL; + parser_gas.dir_line = 0; + parser_gas.seen_line_marker = 0; + + parser_gas.preproc = pp; + parser_gas.errwarns = errwarns; + + parser_gas.prev_bc = yasm_section_bcs_first(object->cur_section); + + parser_gas.save_input = save_input; + parser_gas.save_last = 0; + + parser_gas.peek_token = NONE; + + parser_gas.line = NULL; + + /* initialize scanner structure */ + yasm_scanner_initialize(&parser_gas.s); + + parser_gas.state = INITIAL; + + for (i=0; i<10; i++) + parser_gas.local[i] = 0; + + parser_gas.intel_syntax = 0; + + parser_gas.is_cpp_preproc = + yasm__strcasecmp(((yasm_preproc_base*)pp)->module->keyword, "cpp") == 0; + parser_gas.is_nasm_preproc = + yasm__strcasecmp(((yasm_preproc_base*)pp)->module->keyword, "nasm") == 0; + + gas_parser_parse(&parser_gas); + + /* Check for ending inside a comment */ + if (parser_gas.state == COMMENT) { + yasm_warn_set(YASM_WARN_GENERAL, N_("end of file in comment")); + /* XXX: Minus two to compensate for already having moved past the EOF + * in the linemap. + */ + yasm_errwarn_propagate(errwarns, + yasm_linemap_get_current(parser_gas.linemap)-2); + } + + yasm_scanner_delete(&parser_gas.s); + + /* Free locallabel base if necessary */ + if (parser_gas.locallabel_base) + yasm_xfree(parser_gas.locallabel_base); + + if (parser_gas.dir_file) + yasm_xfree(parser_gas.dir_file); + + /* Convert all undefined symbols into extern symbols */ + yasm_symtab_parser_finalize(object->symtab, 1, errwarns); +} + +/* Define valid preprocessors to use with this parser */ +static const char *gas_parser_preproc_keywords[] = { + "gas", + "raw", + "cpp", + "nasm", + NULL +}; + +/* Define parser structure -- see parser.h for details */ +yasm_parser_module yasm_gas_LTX_parser = { + "GNU AS (GAS)-compatible parser", + "gas", + gas_parser_preproc_keywords, + "gas", + NULL, /* No standard macros */ + gas_parser_do_parse +}; +yasm_parser_module yasm_gnu_LTX_parser = { + "GNU AS (GAS)-compatible parser", + "gnu", + gas_parser_preproc_keywords, + "gas", + NULL, /* No standard macros */ + gas_parser_do_parse +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-parser.h b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-parser.h new file mode 100644 index 0000000000..99659e964a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-parser.h @@ -0,0 +1,163 @@ +/* + * GAS-compatible parser header file + * + * Copyright (C) 2005-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of other contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + */ +#ifndef YASM_GAS_PARSER_H +#define YASM_GAS_PARSER_H + +#define YYCTYPE unsigned char + +#define MAX_SAVED_LINE_LEN 80 + +enum tokentype { + INTNUM = 258, + FLTNUM, + STRING, + REG, + REGGROUP, + SEGREG, + TARGETMOD, + LEFT_OP, + RIGHT_OP, + ID, + LABEL, + CPP_LINE_MARKER, + NASM_LINE_MARKER, + NONE +}; + +typedef union { + unsigned int int_info; + yasm_intnum *intn; + yasm_floatnum *flt; + yasm_bytecode *bc; + uintptr_t arch_data; + struct { + char *contents; + size_t len; + } str; +} yystype; +#define YYSTYPE yystype + +enum gas_parser_state { + INITIAL, + COMMENT, + SECTION_DIRECTIVE, + NASM_FILENAME +}; + +typedef struct yasm_parser_gas { + /*@only@*/ yasm_object *object; + + /* last "base" label for local (.) labels */ + /*@null@*/ char *locallabel_base; + size_t locallabel_base_len; + + /* .line/.file: we have to see both to start setting linemap versions */ + int dir_fileline; + /*@null@*/ char *dir_file; + unsigned long dir_line; + + /* Have we seen a line marker? */ + int seen_line_marker; + + /*@dependent@*/ yasm_preproc *preproc; + /*@dependent@*/ yasm_errwarns *errwarns; + + /*@dependent@*/ yasm_linemap *linemap; + + /*@null@*/ yasm_bytecode *prev_bc; + yasm_bytecode *temp_bc; + + int save_input; + YYCTYPE save_line[2][MAX_SAVED_LINE_LEN]; + int save_last; + + /* Line data storage used in preproc_input(). */ + char *line, *linepos; + size_t lineleft; + + yasm_scanner s; + enum gas_parser_state state; + + int token; /* enum tokentype or any character */ + yystype tokval; + char tokch; /* first character of token */ + + /* one token of lookahead; used sparingly */ + int peek_token; /* NONE if none */ + yystype peek_tokval; + char peek_tokch; + + /* Index of local labels; what's stored here is the /next/ index, + * so these are all 0 at start. + */ + unsigned long local[10]; + + /* Parser-handled directives HAMT lookup */ + HAMT *dirs; + + int intel_syntax; + + int is_nasm_preproc; + int is_cpp_preproc; +} yasm_parser_gas; + +/* shorter access names to commonly used parser_gas fields */ +#define p_object (parser_gas->object) +#define p_symtab (parser_gas->object->symtab) +#define cursect (parser_gas->object->cur_section) +#define curtok (parser_gas->token) +#define curval (parser_gas->tokval) + +#define INTNUM_val (curval.intn) +#define FLTNUM_val (curval.flt) +#define STRING_val (curval.str) +#define REG_val (curval.arch_data) +#define REGGROUP_val (curval.arch_data) +#define SEGREG_val (curval.arch_data) +#define TARGETMOD_val (curval.arch_data) +#define ID_val (curval.str.contents) +#define ID_len (curval.str.len) +#define LABEL_val (curval.str.contents) +#define LABEL_len (curval.str.len) + +#define cur_line (yasm_linemap_get_current(parser_gas->linemap)) + +#define p_expr_new(l,o,r) yasm_expr_create(o,l,r,cur_line) +#define p_expr_new_tree(l,o,r) yasm_expr_create_tree(l,o,r,cur_line) +#define p_expr_new_branch(o,r) yasm_expr_create_branch(o,r,cur_line) +#define p_expr_new_ident(r) yasm_expr_create_ident(r,cur_line) + +yasm_bytecode *parse_instr_intel(yasm_parser_gas *parser_gas); + +void gas_parser_parse(yasm_parser_gas *parser_gas); +void gas_parser_cleanup(yasm_parser_gas *parser_gas); +int gas_parser_lex(YYSTYPE *lvalp, yasm_parser_gas *parser_gas); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-token.re b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-token.re new file mode 100644 index 0000000000..1a8673db55 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/gas-token.re @@ -0,0 +1,559 @@ +/* + * GAS-compatible re2c lexer + * + * Copyright (C) 2005-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the names of other contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "modules/parsers/gas/gas-parser.h" + + +#define BSIZE 8192 + +#define YYCURSOR cursor +#define YYLIMIT (s->lim) +#define YYMARKER (s->ptr) +#define YYFILL(n) {cursor = fill(parser_gas, cursor);} + +#define RETURN(i) do {s->cur = cursor; parser_gas->tokch = s->tok[0]; \ + return i;} while (0) + +#define SCANINIT() {s->tok = cursor;} + +#define TOK ((char *)s->tok) +#define TOKLEN (size_t)(cursor-s->tok) + +/* Bridge function to convert byte-oriented parser with line-oriented + * preprocessor. + */ +static size_t +preproc_input(yasm_parser_gas *parser_gas, /*@out@*/ YYCTYPE *buf, + size_t max_size) +{ + size_t tot=0; + while (max_size > 0) { + size_t n; + + if (!parser_gas->line) { + parser_gas->line = yasm_preproc_get_line(parser_gas->preproc); + if (!parser_gas->line) + return tot; /* EOF */ + parser_gas->linepos = parser_gas->line; + parser_gas->lineleft = strlen(parser_gas->line) + 1; + parser_gas->line[parser_gas->lineleft-1] = '\n'; + } + + n = parser_gas->lineleftlineleft : max_size; + strncpy((char *)buf+tot, parser_gas->linepos, n); + + if (n == parser_gas->lineleft) { + yasm_xfree(parser_gas->line); + parser_gas->line = NULL; + } else { + parser_gas->lineleft -= n; + parser_gas->linepos += n; + } + + tot += n; + max_size -= n; + } + return tot; +} +#if 0 +static size_t +fill_input(void *d, unsigned char *buf, size_t max) +{ + return yasm_preproc_input((yasm_preproc *)d, (char *)buf, max); +} +#endif +static YYCTYPE * +fill(yasm_parser_gas *parser_gas, YYCTYPE *cursor) +{ + yasm_scanner *s = &parser_gas->s; + int first = 0; + if(!s->eof){ + size_t cnt = s->tok - s->bot; + if(cnt){ + memmove(s->bot, s->tok, (size_t)(s->lim - s->tok)); + s->tok = s->bot; + s->ptr -= cnt; + cursor -= cnt; + s->lim -= cnt; + } + if (!s->bot) + first = 1; + if((s->top - s->lim) < BSIZE){ + YYCTYPE *buf = yasm_xmalloc((size_t)(s->lim - s->bot) + BSIZE); + memcpy(buf, s->tok, (size_t)(s->lim - s->tok)); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + cursor = &buf[cursor - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[BSIZE]; + if (s->bot) + yasm_xfree(s->bot); + s->bot = buf; + } + if((cnt = preproc_input(parser_gas, s->lim, BSIZE)) == 0) { + s->eof = &s->lim[cnt]; *s->eof++ = '\n'; + } + s->lim += cnt; + if (first && parser_gas->save_input) { + int i; + YYCTYPE *saveline; + parser_gas->save_last ^= 1; + saveline = parser_gas->save_line[parser_gas->save_last]; + /* save next line into cur_line */ + for (i=0; i<79 && &s->tok[i] < s->lim && s->tok[i] != '\n'; i++) + saveline[i] = s->tok[i]; + saveline[i] = '\0'; + } + } + return cursor; +} + +static YYCTYPE * +save_line(yasm_parser_gas *parser_gas, YYCTYPE *cursor) +{ + yasm_scanner *s = &parser_gas->s; + int i = 0; + YYCTYPE *saveline; + + parser_gas->save_last ^= 1; + saveline = parser_gas->save_line[parser_gas->save_last]; + + /* save next line into cur_line */ + if ((YYLIMIT - YYCURSOR) < 80) + YYFILL(80); + for (i=0; i<79 && &cursor[i] < s->lim && cursor[i] != '\n'; i++) + saveline[i] = cursor[i]; + saveline[i] = '\0'; + return cursor; +} + +/* starting size of string buffer */ +#define STRBUF_ALLOC_SIZE 128 + +/* string buffer used when parsing strings/character constants */ +static YYCTYPE *strbuf = NULL; + +/* length of strbuf (including terminating NULL character) */ +static size_t strbuf_size = 0; + +static void +strbuf_append(size_t count, YYCTYPE *cursor, yasm_scanner *s, int ch) +{ + if (count >= strbuf_size) { + strbuf = yasm_xrealloc(strbuf, strbuf_size + STRBUF_ALLOC_SIZE); + strbuf_size += STRBUF_ALLOC_SIZE; + } + strbuf[count] = ch; +} + +/*!re2c + any = [\000-\377]; + digit = [0-9]; + iletter = [a-zA-Z]; + bindigit = [01]; + octdigit = [0-7]; + hexdigit = [0-9a-fA-F]; + ws = [ \t\r]; + dquot = ["]; +*/ + + +int +gas_parser_lex(YYSTYPE *lvalp, yasm_parser_gas *parser_gas) +{ + yasm_scanner *s = &parser_gas->s; + YYCTYPE *cursor = s->cur; + size_t count; + YYCTYPE savech; + + /* Handle one token of lookahead */ + if (parser_gas->peek_token != NONE) { + int tok = parser_gas->peek_token; + *lvalp = parser_gas->peek_tokval; /* structure copy */ + parser_gas->tokch = parser_gas->peek_tokch; + parser_gas->peek_token = NONE; + return tok; + } + + /* Catch EOF */ + if (s->eof && cursor == s->eof) + return 0; + + /* Jump to proper "exclusive" states */ + switch (parser_gas->state) { + case COMMENT: + goto comment; + case SECTION_DIRECTIVE: + goto section_directive; + case NASM_FILENAME: + goto nasm_filename; + default: + break; + } + +scan: + SCANINIT(); + + /*!re2c + /* standard decimal integer */ + ([1-9] digit*) | "0" { + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + lvalp->intn = yasm_intnum_create_dec(TOK); + s->tok[TOKLEN] = savech; + RETURN(INTNUM); + } + + /* 0b10010011 - binary number */ + '0b' bindigit+ { + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + lvalp->intn = yasm_intnum_create_bin(TOK+2); + s->tok[TOKLEN] = savech; + RETURN(INTNUM); + } + + /* 0777 - octal number */ + "0" octdigit+ { + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + lvalp->intn = yasm_intnum_create_oct(TOK); + s->tok[TOKLEN] = savech; + RETURN(INTNUM); + } + + /* 0xAA - hexidecimal number */ + '0x' hexdigit+ { + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + /* skip 0 and x */ + lvalp->intn = yasm_intnum_create_hex(TOK+2); + s->tok[TOKLEN] = savech; + RETURN(INTNUM); + } + + /* floating point value */ + [-+]? digit* "." digit+ ('e' [-+]? digit+)? { + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + lvalp->flt = yasm_floatnum_create(TOK); + s->tok[TOKLEN] = savech; + RETURN(FLTNUM); + } + [-+]? digit+ "." digit* ('e' [-+]? digit+)? { + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + lvalp->flt = yasm_floatnum_create(TOK); + s->tok[TOKLEN] = savech; + RETURN(FLTNUM); + } + "0" [DdEeFfTt] [-+]? digit* ("." digit*)? ('e' [-+]? digit+)? { + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + lvalp->flt = yasm_floatnum_create(TOK+2); + s->tok[TOKLEN] = savech; + RETURN(FLTNUM); + } + + /* character constant values */ + ['] { + goto charconst; + } + + /* string constant values */ + dquot { + goto stringconst; + } + + /* operators */ + "<<" { RETURN(LEFT_OP); } + ">>" { RETURN(RIGHT_OP); } + "<" { RETURN(LEFT_OP); } + ">" { RETURN(RIGHT_OP); } + [-+|^!*&/~$():@=,] { RETURN(s->tok[0]); } + ";" { + parser_gas->state = INITIAL; + RETURN(s->tok[0]); + } + + /* identifier */ + [a-zA-Z_.][a-zA-Z0-9_$.]* { + lvalp->str.contents = yasm__xstrndup(TOK, TOKLEN); + lvalp->str.len = TOKLEN; + RETURN(ID); + } + + /* identifier with @ */ + [a-zA-Z_.]([a-zA-Z0-9_$.]*[@][a-zA-Z0-9_$.]*)+ { + /* if @ not part of ID, move the scanner cursor to the first @ */ + if (!((yasm_objfmt_base *)p_object->objfmt)->module->id_at_ok) + cursor = (unsigned char *)strchr(TOK, '@'); + lvalp->str.contents = yasm__xstrndup(TOK, TOKLEN); + lvalp->str.len = TOKLEN; + RETURN(ID); + } + + /* register or segment register */ + [%][a-zA-Z0-9]+ { + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + if (parser_gas->is_nasm_preproc && strcmp(TOK+1, "line") == 0) { + s->tok[TOKLEN] = savech; + RETURN(NASM_LINE_MARKER); + } + + switch (yasm_arch_parse_check_regtmod + (p_object->arch, TOK+1, TOKLEN-1, &lvalp->arch_data)) { + case YASM_ARCH_REG: + s->tok[TOKLEN] = savech; + RETURN(REG); + case YASM_ARCH_REGGROUP: + s->tok[TOKLEN] = savech; + RETURN(REGGROUP); + case YASM_ARCH_SEGREG: + s->tok[TOKLEN] = savech; + RETURN(SEGREG); + default: + break; + } + yasm_error_set(YASM_ERROR_GENERAL, + N_("Unrecognized register name `%s'"), s->tok); + s->tok[TOKLEN] = savech; + lvalp->arch_data = 0; + RETURN(REG); + } + + /* local label */ + [0-9] ':' { + /* increment label index */ + parser_gas->local[s->tok[0]-'0']++; + /* build local label name */ + lvalp->str.contents = yasm_xmalloc(30); + lvalp->str.len = + sprintf(lvalp->str.contents, "L%c\001%lu", s->tok[0], + parser_gas->local[s->tok[0]-'0']); + RETURN(LABEL); + } + + /* local label forward reference */ + [0-9] 'f' { + /* build local label name */ + lvalp->str.contents = yasm_xmalloc(30); + lvalp->str.len = + sprintf(lvalp->str.contents, "L%c\001%lu", s->tok[0], + parser_gas->local[s->tok[0]-'0']+1); + RETURN(ID); + } + + /* local label backward reference */ + [0-9] 'b' { + /* build local label name */ + lvalp->str.contents = yasm_xmalloc(30); + lvalp->str.len = + sprintf(lvalp->str.contents, "L%c\001%lu", s->tok[0], + parser_gas->local[s->tok[0]-'0']); + RETURN(ID); + } + + "/*" { parser_gas->state = COMMENT; goto comment; } + "#" { + if (parser_gas->is_cpp_preproc) + { + RETURN(CPP_LINE_MARKER); + } else + goto line_comment; + } + "//" { goto line_comment; } + + ws+ { goto scan; } + + "\n" { + if (parser_gas->save_input) + cursor = save_line(parser_gas, cursor); + parser_gas->state = INITIAL; + RETURN(s->tok[0]); + } + + any { + yasm_warn_set(YASM_WARN_UNREC_CHAR, + N_("ignoring unrecognized character `%s'"), + yasm__conv_unprint(s->tok[0])); + goto scan; + } + */ + + /* C-style comment; nesting not supported */ +comment: + SCANINIT(); + + /*!re2c + /* End of comment */ + "*/" { parser_gas->state = INITIAL; goto scan; } + + "\n" { + if (parser_gas->save_input) + cursor = save_line(parser_gas, cursor); + RETURN(s->tok[0]); + } + + any { + if (cursor == s->eof) + return 0; + goto comment; + } + */ + + /* Single line comment. */ +line_comment: + /*!re2c + (any \ [\n])* { goto scan; } + */ + + /* .section directive (the section name portion thereof) */ +section_directive: + SCANINIT(); + + /*!re2c + [a-zA-Z0-9_$.-]+ { + lvalp->str.contents = yasm__xstrndup(TOK, TOKLEN); + lvalp->str.len = TOKLEN; + parser_gas->state = INITIAL; + RETURN(ID); + } + + dquot { goto stringconst; } + + ws+ { goto section_directive; } + + "," { + parser_gas->state = INITIAL; + RETURN(s->tok[0]); + } + + "\n" { + if (parser_gas->save_input) + cursor = save_line(parser_gas, cursor); + parser_gas->state = INITIAL; + RETURN(s->tok[0]); + } + + any { + yasm_warn_set(YASM_WARN_UNREC_CHAR, + N_("ignoring unrecognized character `%s'"), + yasm__conv_unprint(s->tok[0])); + goto section_directive; + } + */ + + /* filename portion of nasm preproc %line */ +nasm_filename: + strbuf = yasm_xmalloc(STRBUF_ALLOC_SIZE); + strbuf_size = STRBUF_ALLOC_SIZE; + count = 0; + +nasm_filename_scan: + SCANINIT(); + + /*!re2c + "\n" { + strbuf_append(count++, cursor, s, '\0'); + lvalp->str.contents = (char *)strbuf; + lvalp->str.len = count; + parser_gas->state = INITIAL; + RETURN(STRING); + } + + ws+ { goto nasm_filename_scan; } + + any { + if (cursor == s->eof) { + strbuf_append(count++, cursor, s, '\0'); + lvalp->str.contents = (char *)strbuf; + lvalp->str.len = count; + parser_gas->state = INITIAL; + RETURN(STRING); + } + strbuf_append(count++, cursor, s, s->tok[0]); + goto nasm_filename_scan; + } + */ + + /* character constant values */ +charconst: + /*TODO*/ + + /* string constant values */ +stringconst: + strbuf = yasm_xmalloc(STRBUF_ALLOC_SIZE); + strbuf_size = STRBUF_ALLOC_SIZE; + count = 0; + +stringconst_scan: + SCANINIT(); + + /*!re2c + /* Handle escaped character by copying both and continuing. */ + "\\". { + if (cursor == s->eof) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("unexpected end of file in string")); + lvalp->str.contents = (char *)strbuf; + lvalp->str.len = count; + RETURN(STRING); + } + strbuf_append(count++, cursor, s, '\\'); + strbuf_append(count++, cursor, s, s->tok[1]); + goto stringconst_scan; + } + + dquot { + strbuf_append(count, cursor, s, '\0'); + yasm_unescape_cstring(strbuf, &count); + lvalp->str.contents = (char *)strbuf; + lvalp->str.len = count; + RETURN(STRING); + } + + any { + if (cursor == s->eof) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("unexpected end of file in string")); + lvalp->str.contents = (char *)strbuf; + lvalp->str.len = count; + RETURN(STRING); + } + strbuf_append(count++, cursor, s, s->tok[0]); + goto stringconst_scan; + } + */ +} diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/Makefile.inc new file mode 100644 index 0000000000..c288adcf28 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/Makefile.inc @@ -0,0 +1,48 @@ +TESTS += modules/parsers/gas/tests/gas_test.sh + +EXTRA_DIST += modules/parsers/gas/tests/gas_test.sh +EXTRA_DIST += modules/parsers/gas/tests/dataref-imm.asm +EXTRA_DIST += modules/parsers/gas/tests/dataref-imm.hex +EXTRA_DIST += modules/parsers/gas/tests/datavis.asm +EXTRA_DIST += modules/parsers/gas/tests/datavis.errwarn +EXTRA_DIST += modules/parsers/gas/tests/datavis.hex +EXTRA_DIST += modules/parsers/gas/tests/datavis2.asm +EXTRA_DIST += modules/parsers/gas/tests/datavis2.hex +EXTRA_DIST += modules/parsers/gas/tests/execsect.asm +EXTRA_DIST += modules/parsers/gas/tests/execsect.hex +EXTRA_DIST += modules/parsers/gas/tests/gas-fill.asm +EXTRA_DIST += modules/parsers/gas/tests/gas-fill.hex +EXTRA_DIST += modules/parsers/gas/tests/gas-float.asm +EXTRA_DIST += modules/parsers/gas/tests/gas-float.hex +EXTRA_DIST += modules/parsers/gas/tests/gas-instlabel.asm +EXTRA_DIST += modules/parsers/gas/tests/gas-instlabel.hex +EXTRA_DIST += modules/parsers/gas/tests/gas-line-err.asm +EXTRA_DIST += modules/parsers/gas/tests/gas-line-err.errwarn +EXTRA_DIST += modules/parsers/gas/tests/gas-line2-err.asm +EXTRA_DIST += modules/parsers/gas/tests/gas-line2-err.errwarn +EXTRA_DIST += modules/parsers/gas/tests/gas-push.asm +EXTRA_DIST += modules/parsers/gas/tests/gas-push.hex +EXTRA_DIST += modules/parsers/gas/tests/gas-segprefix.asm +EXTRA_DIST += modules/parsers/gas/tests/gas-segprefix.hex +EXTRA_DIST += modules/parsers/gas/tests/gas-semi.asm +EXTRA_DIST += modules/parsers/gas/tests/gas-semi.hex +EXTRA_DIST += modules/parsers/gas/tests/gassectalign.asm +EXTRA_DIST += modules/parsers/gas/tests/gassectalign.hex +EXTRA_DIST += modules/parsers/gas/tests/jmpcall.asm +EXTRA_DIST += modules/parsers/gas/tests/jmpcall.errwarn +EXTRA_DIST += modules/parsers/gas/tests/jmpcall.hex +EXTRA_DIST += modules/parsers/gas/tests/leb128.asm +EXTRA_DIST += modules/parsers/gas/tests/leb128.hex +EXTRA_DIST += modules/parsers/gas/tests/localcomm.asm +EXTRA_DIST += modules/parsers/gas/tests/localcomm.hex +EXTRA_DIST += modules/parsers/gas/tests/reggroup-err.asm +EXTRA_DIST += modules/parsers/gas/tests/reggroup-err.errwarn +EXTRA_DIST += modules/parsers/gas/tests/reggroup.asm +EXTRA_DIST += modules/parsers/gas/tests/reggroup.hex +EXTRA_DIST += modules/parsers/gas/tests/strzero.asm +EXTRA_DIST += modules/parsers/gas/tests/strzero.hex +EXTRA_DIST += modules/parsers/gas/tests/varinsn.asm +EXTRA_DIST += modules/parsers/gas/tests/varinsn.hex + +EXTRA_DIST += modules/parsers/gas/tests/bin/Makefile.inc +include modules/parsers/gas/tests/bin/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/Makefile.inc new file mode 100644 index 0000000000..5428d144ca --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/Makefile.inc @@ -0,0 +1,32 @@ +TESTS += modules/parsers/gas/tests/bin/gas_bin_test.sh + +EXTRA_DIST += modules/parsers/gas/tests/bin/gas_bin_test.sh +EXTRA_DIST += modules/parsers/gas/tests/bin/gas-comment.asm +EXTRA_DIST += modules/parsers/gas/tests/bin/gas-comment.errwarn +EXTRA_DIST += modules/parsers/gas/tests/bin/gas-comment.hex +EXTRA_DIST += modules/parsers/gas/tests/bin/gas-intel_syntax-noprefix.asm +EXTRA_DIST += modules/parsers/gas/tests/bin/gas-intel_syntax-noprefix.hex +EXTRA_DIST += modules/parsers/gas/tests/bin/gas-llabel.asm +EXTRA_DIST += modules/parsers/gas/tests/bin/gas-llabel.hex +EXTRA_DIST += modules/parsers/gas/tests/bin/gas-macro.asm +EXTRA_DIST += modules/parsers/gas/tests/bin/gas-macro.hex +EXTRA_DIST += modules/parsers/gas/tests/bin/gas-set.asm +EXTRA_DIST += modules/parsers/gas/tests/bin/gas-set.hex +EXTRA_DIST += modules/parsers/gas/tests/bin/gas-str.asm +EXTRA_DIST += modules/parsers/gas/tests/bin/gas-str.hex +EXTRA_DIST += modules/parsers/gas/tests/bin/rept-err.asm +EXTRA_DIST += modules/parsers/gas/tests/bin/rept-err.errwarn +EXTRA_DIST += modules/parsers/gas/tests/bin/reptempty.asm +EXTRA_DIST += modules/parsers/gas/tests/bin/reptempty.hex +EXTRA_DIST += modules/parsers/gas/tests/bin/reptlong.asm +EXTRA_DIST += modules/parsers/gas/tests/bin/reptlong.hex +EXTRA_DIST += modules/parsers/gas/tests/bin/reptnested.asm +EXTRA_DIST += modules/parsers/gas/tests/bin/reptnested.hex +EXTRA_DIST += modules/parsers/gas/tests/bin/reptsimple.asm +EXTRA_DIST += modules/parsers/gas/tests/bin/reptsimple.hex +EXTRA_DIST += modules/parsers/gas/tests/bin/reptwarn.asm +EXTRA_DIST += modules/parsers/gas/tests/bin/reptwarn.errwarn +EXTRA_DIST += modules/parsers/gas/tests/bin/reptwarn.hex +EXTRA_DIST += modules/parsers/gas/tests/bin/reptzero.asm +EXTRA_DIST += modules/parsers/gas/tests/bin/reptzero.hex + diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-comment.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-comment.asm new file mode 100644 index 0000000000..0c265f7dd4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-comment.asm @@ -0,0 +1,25 @@ +# This is a comment + +/* So is this */ + +// and so is this + +.byte 0 /* at end of line? */ + +.byte 0 /* at end of line, +multi-line? */ + +/* start of line? */ .byte 0 + +/* What about +a multi-line +comment? -- at start of line? +*/ .byte 0 + +.byte 0, /* in middle? */ 1 + +# Illegal; 1 seen on next line +#.byte 0, /* in middle, +#spanning lines? */ 1 + +/* EOF in comment? diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-comment.errwarn b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-comment.errwarn new file mode 100644 index 0000000000..6a29a1fd93 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-comment.errwarn @@ -0,0 +1 @@ +-:25: warning: end of file in comment diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-comment.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-comment.hex new file mode 100644 index 0000000000..93d7888d07 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-comment.hex @@ -0,0 +1,6 @@ +00 +00 +00 +00 +00 +01 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-intel_syntax-noprefix.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-intel_syntax-noprefix.asm new file mode 100644 index 0000000000..25c65076db --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-intel_syntax-noprefix.asm @@ -0,0 +1,19 @@ +.intel_syntax noprefix +.section .rodata +.LC0: +.string "Hello" +.text + lea ecx, 4 [esp] + and esp, -16 + push DWORD PTR [ecx-4] + push ebp + fstp st(0) + ffree st(1) + mov ebp, esp + push ecx + sub esp, 4 + mov DWORD PTR [esp], OFFSET FLAT:.LC0 + add esp, 4 + pop ebp + lea esp, [ecx-4] + ret diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-intel_syntax-noprefix.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-intel_syntax-noprefix.hex new file mode 100644 index 0000000000..fe0fdafadd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-intel_syntax-noprefix.hex @@ -0,0 +1,58 @@ +67 +66 +8d +4c +24 +04 +66 +83 +e4 +f0 +67 +66 +ff +71 +fc +66 +55 +dd +d8 +dd +c1 +66 +89 +e5 +66 +51 +66 +83 +ec +04 +67 +66 +c7 +04 +24 +34 +00 +00 +00 +66 +83 +c4 +04 +66 +5d +67 +66 +8d +61 +fc +c3 +00 +48 +65 +6c +6c +6f +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-llabel.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-llabel.asm new file mode 100644 index 0000000000..11f3f54528 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-llabel.asm @@ -0,0 +1,29 @@ +# Skelix by Xiaoming Mo (xiaoming.mo@skelix.org) +# Licence: GPLv2 + .text + #.globl start + .code16 +start: + jmp code +msg: + .string "Hello World!\x0" +code: + movw $0xb800,%ax + movw %ax, %es + xorw %ax, %ax + movw %ax, %ds + + movw $msg, %si + xorw %di, %di + cld + movb $0x07, %al +1: + cmpw $0, (%si) + je 1f + movsb + stosb + jmp 1b +1: jmp 1b +.org 0x1fe, 0x90 +.word 0xaa55 + diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-llabel.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-llabel.hex new file mode 100644 index 0000000000..4bef5c776b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-llabel.hex @@ -0,0 +1,512 @@ +eb +0e +48 +65 +6c +6c +6f +20 +57 +6f +72 +6c +64 +21 +00 +00 +b8 +00 +b8 +8e +c0 +31 +c0 +8e +d8 +be +02 +00 +31 +ff +fc +b0 +07 +83 +3c +00 +74 +04 +a4 +aa +eb +f7 +eb +fe +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +90 +55 +aa diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-macro.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-macro.asm new file mode 100644 index 0000000000..29b475cc90 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-macro.asm @@ -0,0 +1,25 @@ +.macro foo arg1, arg2 +.byte \arg1 +.byte \arg2 +.endm + +.macro bar x y +.byte \x-\y +.endm + +.macro def a=5 b +.byte \a + \b +.endm + +.macro nest x=9 +.macro zap y +.byte \y +.endm +zap \x +.endm + +foo 5 6 +bar 3, 2 +def ,3 +def 3 2 +nest diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-macro.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-macro.hex new file mode 100644 index 0000000000..0904d1cd82 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-macro.hex @@ -0,0 +1,6 @@ +05 +06 +01 +08 +05 +09 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-set.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-set.asm new file mode 100644 index 0000000000..6bce4a2f3c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-set.asm @@ -0,0 +1,34 @@ +.set bar,(foo-1) +.set foo,5 +.byte foo /* 0x5 */ +.byte bar /* 0x4 */ +.set foo,6 +.byte foo /* 0x6 */ +.byte bar /* 0x4 */ +.set bar,10 +.byte bar /* 0xa */ +.set bar,foo+1 +.byte bar /* 0x7 */ +.set bar,bar+1 +.byte bar /* 0x8 */ +.set bar,5 +.set bam,bar-1 +.set bar,1 +.byte bam /* 0x4 */ +.set bar, boo + 1 +.set boo, 5 +.set boo, 6 +.byte bar /* 0x6 */ +.set a, b+c +.set b, 0x1 +.set b, 0x2 +.set c, 0x10 +.set c, 0x20 +.byte a /* 0x11 */ +.set x, 5 +.set y, x+z +.set x, 10 +.set z, 1 +.byte y /* 0x6 */ +.set z, 0xfe +.byte z /* 0xfe */ diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-set.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-set.hex new file mode 100644 index 0000000000..54ccb308af --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-set.hex @@ -0,0 +1,12 @@ +05 +04 +06 +04 +0a +07 +08 +04 +06 +11 +06 +fe diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-str.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-str.asm new file mode 100644 index 0000000000..4d02a02c35 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-str.asm @@ -0,0 +1 @@ +.string "a\\" diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-str.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-str.hex new file mode 100644 index 0000000000..d4eaa8593d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas-str.hex @@ -0,0 +1,3 @@ +61 +5c +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas_bin_test.sh b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas_bin_test.sh new file mode 100755 index 0000000000..aa35a4e73e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/gas_bin_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh gas_bin_test modules/parsers/gas/tests/bin "gas-compat parser bin output" "-f bin -p gas" "" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/rept-err.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/rept-err.asm new file mode 100644 index 0000000000..88582f9320 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/rept-err.asm @@ -0,0 +1,4 @@ +.rept 6 +.endr +.rept 3 +.byte 0 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/rept-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/rept-err.errwarn new file mode 100644 index 0000000000..5682b14a30 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/rept-err.errwarn @@ -0,0 +1 @@ +-:3: error: rept without matching endr diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptempty.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptempty.asm new file mode 100644 index 0000000000..456008375d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptempty.asm @@ -0,0 +1,4 @@ +.byte 1 +.rept 2 +.endr +.byte 2 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptempty.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptempty.hex new file mode 100644 index 0000000000..26334819d4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptempty.hex @@ -0,0 +1,2 @@ +01 +02 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptlong.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptlong.asm new file mode 100644 index 0000000000..cc5e992ee6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptlong.asm @@ -0,0 +1,156 @@ +.byte 1 +.rept 5 +.byte 0 +.endr +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +# AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +.byte 2 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptlong.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptlong.hex new file mode 100644 index 0000000000..627e3d21c1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptlong.hex @@ -0,0 +1,7 @@ +01 +00 +00 +00 +00 +00 +02 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptnested.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptnested.asm new file mode 100644 index 0000000000..061cae026a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptnested.asm @@ -0,0 +1,7 @@ +.rept 3 +.byte 1 +.rept 2 +.byte 3 +.endr +.endr +.byte 5 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptnested.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptnested.hex new file mode 100644 index 0000000000..451c1d3154 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptnested.hex @@ -0,0 +1,10 @@ +01 +03 +03 +01 +03 +03 +01 +03 +03 +05 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptsimple.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptsimple.asm new file mode 100644 index 0000000000..cb7045a93e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptsimple.asm @@ -0,0 +1,5 @@ +.byte 1 +.rept 5 +.byte 0 +.endr +.byte 2 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptsimple.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptsimple.hex new file mode 100644 index 0000000000..627e3d21c1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptsimple.hex @@ -0,0 +1,7 @@ +01 +00 +00 +00 +00 +00 +02 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptwarn.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptwarn.asm new file mode 100644 index 0000000000..0935c49185 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptwarn.asm @@ -0,0 +1,11 @@ +.file "-" +.byte 1000 +.rept 3 +.byte 1000 + + +.byte 1000 +.endr + +.byte 1000 +.byte 1000 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptwarn.errwarn b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptwarn.errwarn new file mode 100644 index 0000000000..974f116110 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptwarn.errwarn @@ -0,0 +1,9 @@ +-:2: warning: value does not fit in 8 bit field +-:4: warning: value does not fit in 8 bit field +-:7: warning: value does not fit in 8 bit field +-:4: warning: value does not fit in 8 bit field +-:7: warning: value does not fit in 8 bit field +-:4: warning: value does not fit in 8 bit field +-:7: warning: value does not fit in 8 bit field +-:10: warning: value does not fit in 8 bit field +-:11: warning: value does not fit in 8 bit field diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptwarn.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptwarn.hex new file mode 100644 index 0000000000..91ee381367 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptwarn.hex @@ -0,0 +1,9 @@ +e8 +e8 +e8 +e8 +e8 +e8 +e8 +e8 +e8 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptzero.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptzero.asm new file mode 100644 index 0000000000..02749d2d70 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptzero.asm @@ -0,0 +1,6 @@ +.byte 1 +.rept 0 +.byte 2 +.byte 3 +.endr +.byte 4 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptzero.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptzero.hex new file mode 100644 index 0000000000..5b7f2e83f4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/bin/reptzero.hex @@ -0,0 +1,2 @@ +01 +04 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/dataref-imm.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/dataref-imm.asm new file mode 100644 index 0000000000..3bfff168ab --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/dataref-imm.asm @@ -0,0 +1,5 @@ +movl $(.data+160),%eax +.data +.long .text +.long .data +.long .bss diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/dataref-imm.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/dataref-imm.hex new file mode 100644 index 0000000000..84893dcada --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/dataref-imm.hex @@ -0,0 +1,592 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +08 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b8 +a0 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +03 +00 +00 +04 +00 +00 +00 +01 +02 +00 +00 +08 +00 +00 +00 +01 +04 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +61 +74 +61 +00 +2e +72 +65 +6c +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +2e +64 +61 +74 +61 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +2d +00 +2e +62 +73 +73 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +31 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +74 +00 +00 +00 +3b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +29 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b8 +00 +00 +00 +50 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +08 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +50 +00 +00 +00 +0c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5c +00 +00 +00 +18 +00 +00 +00 +03 +00 +00 +00 +06 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis.asm new file mode 100644 index 0000000000..1bae755e59 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis.asm @@ -0,0 +1,39 @@ +#.file "string" +.extern extsym2 +.global label1 +.globl label2 +.text + call extsym + call extsym2 +.data +label1: +.ascii "baz" +.asciz "foo" +.string "bar", "str2" +.byte 1, 2, 070, 0x12 +.byte + +.section .xx, "", @ progbits +.hword 0 +.short 5 +.word 10 +.long 15 +.int 30 +.quad 20 +.octa 40 + +.section .yy, "w", @nobits +.skip 4 +.skip 4, 1 + +.bss +label2: +.skip 4 +.skip 4, 1 + +.section .data2 +.float 0E1e10 +.double 0E-1.11 +.skip 4 +.skip 4, 1 +.tfloat 0E+3.14e2 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis.errwarn b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis.errwarn new file mode 100644 index 0000000000..3f7b1fe671 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis.errwarn @@ -0,0 +1 @@ +-:37: warning: uninitialized space declared in code/data section: zeroing diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis.hex new file mode 100644 index 0000000000..1d6f915fa0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis.hex @@ -0,0 +1,920 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e0 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +0b +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e8 +fc +ff +ff +ff +e8 +fc +ff +ff +ff +00 +00 +01 +00 +00 +00 +02 +0b +00 +00 +06 +00 +00 +00 +02 +08 +00 +00 +62 +61 +7a +66 +6f +6f +00 +62 +61 +72 +00 +73 +74 +72 +32 +00 +01 +02 +38 +12 +00 +00 +05 +00 +0a +00 +0f +00 +00 +00 +1e +00 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +28 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f9 +02 +15 +50 +c3 +f5 +28 +5c +8f +c2 +f1 +bf +00 +00 +00 +00 +01 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +9d +07 +40 +00 +2e +74 +65 +78 +74 +00 +2e +64 +61 +74 +61 +00 +2e +78 +78 +00 +2e +79 +79 +00 +2e +62 +73 +73 +00 +2e +64 +61 +74 +61 +32 +00 +2e +72 +65 +6c +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +65 +78 +74 +73 +79 +6d +32 +00 +6c +61 +62 +65 +6c +31 +00 +6c +61 +62 +65 +6c +32 +00 +65 +78 +74 +73 +79 +6d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +0b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +06 +00 +12 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +09 +00 +19 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3b +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b4 +00 +00 +00 +45 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2b +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fc +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +33 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1c +01 +00 +00 +c0 +00 +00 +00 +02 +00 +00 +00 +08 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4c +00 +00 +00 +10 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +5c +00 +00 +00 +14 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +00 +00 +00 +26 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +08 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +15 +00 +00 +00 +08 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +1a +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +96 +00 +00 +00 +1e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis2.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis2.asm new file mode 100644 index 0000000000..9d0d515510 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis2.asm @@ -0,0 +1,13 @@ + .section .eh_frame, "",@progbits +.EHCIE: + .4byte 0x10 + .4byte 0x0 + .2byte 1 + .8byte 4 + .byte 0x01, 0x00, 0x01, 0x78, 0x10, 0x00, 0x0c, 0x07 + .byte 0x08, 0x90, 0x01, 0x00 + + .section .debug_line, "" + .section .note.GNU-stack,"",@progbits + .ident "# : compiled with : " + .ident "second ident" diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis2.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis2.hex new file mode 100644 index 0000000000..8afb9678f9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/datavis2.hex @@ -0,0 +1,712 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +09 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +01 +00 +04 +00 +00 +00 +00 +00 +00 +00 +01 +00 +01 +78 +10 +00 +0c +07 +08 +90 +01 +00 +00 +23 +20 +3a +20 +63 +6f +6d +70 +69 +6c +65 +64 +20 +77 +69 +74 +68 +20 +3a +20 +00 +73 +65 +63 +6f +6e +64 +20 +69 +64 +65 +6e +74 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +65 +68 +5f +66 +72 +61 +6d +65 +00 +2e +64 +65 +62 +75 +67 +5f +6c +69 +6e +65 +00 +2e +6e +6f +74 +65 +2e +47 +4e +55 +2d +73 +74 +61 +63 +6b +00 +2e +63 +6f +6d +6d +65 +6e +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +46 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +00 +00 +00 +50 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +36 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d4 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3e +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d8 +00 +00 +00 +80 +00 +00 +00 +02 +00 +00 +00 +08 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +1e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +1d +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +2d +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5e +00 +00 +00 +23 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/execsect.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/execsect.asm new file mode 100644 index 0000000000..48ff6cb7b9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/execsect.asm @@ -0,0 +1,4 @@ +.section .foobar, "ax",@progbits +xorl %eax, %eax +.p2align 3 +xorl %eax, %eax diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/execsect.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/execsect.hex new file mode 100644 index 0000000000..f442222b67 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/execsect.hex @@ -0,0 +1,432 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +06 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +31 +c0 +8d +b6 +00 +00 +00 +00 +31 +c0 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +66 +6f +6f +62 +61 +72 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1f +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +4c +00 +00 +00 +29 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +00 +00 +00 +40 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +0a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-fill.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-fill.asm new file mode 100644 index 0000000000..09c601d79f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-fill.asm @@ -0,0 +1,6 @@ +.text +.fill 5 +.fill 3, 1 +.fill 4, 2 +.fill 4, 8, 0x11223344 +.fill 4, 4, 0x11223344 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-fill.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-fill.hex new file mode 100644 index 0000000000..7165467250 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-fill.hex @@ -0,0 +1,424 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +e0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +33 +22 +11 +00 +00 +00 +00 +44 +33 +22 +11 +00 +00 +00 +00 +44 +33 +22 +11 +00 +00 +00 +00 +44 +33 +22 +11 +00 +00 +00 +00 +44 +33 +22 +11 +44 +33 +22 +11 +44 +33 +22 +11 +44 +33 +22 +11 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +80 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a4 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a8 +00 +00 +00 +30 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-float.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-float.asm new file mode 100644 index 0000000000..7101eed6ea --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-float.asm @@ -0,0 +1,2 @@ +.double 0.1 +.double -.0 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-float.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-float.hex new file mode 100644 index 0000000000..4daadf4c67 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-float.hex @@ -0,0 +1,376 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +9a +99 +99 +99 +99 +99 +b9 +3f +00 +00 +00 +00 +00 +00 +00 +80 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +74 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +00 +00 +00 +30 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-instlabel.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-instlabel.asm new file mode 100644 index 0000000000..22c0c00aca --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-instlabel.asm @@ -0,0 +1,6 @@ + .globl SUB + .type SUB, @function +SUB: + +ADD = 5 + diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-instlabel.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-instlabel.hex new file mode 100644 index 0000000000..cba259186a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-instlabel.hex @@ -0,0 +1,376 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +b0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +53 +55 +42 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +64 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +00 +00 +00 +40 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-line-err.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-line-err.asm new file mode 100644 index 0000000000..ce5ea4c5d1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-line-err.asm @@ -0,0 +1,11 @@ +movw +.file "bar1.s" +movw +.line 600 +movw +.line 200 +movw +.file "bar2.s" +movw +.file 5 "bar3.s" +movw diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-line-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-line-err.errwarn new file mode 100644 index 0000000000..f08f8be8c1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-line-err.errwarn @@ -0,0 +1,6 @@ +-:1: error: invalid number of operands +-:3: error: invalid number of operands +bar1.s:601: error: invalid number of operands +bar1.s:201: error: invalid number of operands +bar2.s:203: error: invalid number of operands +bar2.s:205: error: invalid number of operands diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-line2-err.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-line2-err.asm new file mode 100644 index 0000000000..48b9e62301 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-line2-err.asm @@ -0,0 +1,5 @@ +movw +.line 600 +movw +.file "bar1.s" +movw diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-line2-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-line2-err.errwarn new file mode 100644 index 0000000000..5cd6b05bdc --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-line2-err.errwarn @@ -0,0 +1,3 @@ +-:1: error: invalid number of operands +-:3: error: invalid number of operands +bar1.s:603: error: invalid number of operands diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-push.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-push.asm new file mode 100644 index 0000000000..b5e2e1ba2a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-push.asm @@ -0,0 +1,3 @@ +push %gs +pushw %gs +pushl %gs diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-push.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-push.hex new file mode 100644 index 0000000000..305b468c6c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-push.hex @@ -0,0 +1,360 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +a8 +66 +0f +a8 +0f +a8 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +00 +00 +00 +30 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-segprefix.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-segprefix.asm new file mode 100644 index 0000000000..9295b90afa --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-segprefix.asm @@ -0,0 +1,2 @@ +.text +es pushl %ebp diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-segprefix.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-segprefix.hex new file mode 100644 index 0000000000..932e1ea64d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-segprefix.hex @@ -0,0 +1,360 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +26 +55 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +44 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +68 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +00 +00 +00 +30 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-semi.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-semi.asm new file mode 100644 index 0000000000..49c9a21727 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-semi.asm @@ -0,0 +1,5 @@ +pushl %eax;ret + +x: pushl %eax; ret +y: pushl %eax; z: ret + diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-semi.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-semi.hex new file mode 100644 index 0000000000..3a0857f5d7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas-semi.hex @@ -0,0 +1,408 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +c3 +50 +c3 +50 +c3 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +00 +00 +00 +60 +00 +00 +00 +02 +00 +00 +00 +06 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas_test.sh b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas_test.sh new file mode 100755 index 0000000000..f39d4d1748 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gas_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh gas_test modules/parsers/gas/tests "gas-compat parser" "-f elf -p gas" ".o" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gassectalign.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gassectalign.asm new file mode 100644 index 0000000000..6539d4ccb1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gassectalign.asm @@ -0,0 +1,7 @@ +.text +.align 8 +.data +.align 8 +.align 16 +.bss +.align 32 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gassectalign.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gassectalign.hex new file mode 100644 index 0000000000..f46f2cdf9b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/gassectalign.hex @@ -0,0 +1,472 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +07 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +61 +74 +61 +00 +2e +62 +73 +73 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +22 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +2c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +12 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1a +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +00 +00 +00 +50 +00 +00 +00 +02 +00 +00 +00 +05 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +08 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/jmpcall.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/jmpcall.asm new file mode 100644 index 0000000000..269ff22651 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/jmpcall.asm @@ -0,0 +1,13 @@ +#.text +label: + call *%eax + call %eax + call *(%eax) + call (%eax) + call label(,1) + call label + call label+5 + call *label + call *label(%eax) + jmp %fs:label + jmp *%fs:label diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/jmpcall.errwarn b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/jmpcall.errwarn new file mode 100644 index 0000000000..6c9ed60025 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/jmpcall.errwarn @@ -0,0 +1,4 @@ +-:4: warning: indirect call without `*' +-:6: warning: indirect call without `*' +-:7: warning: indirect call without `*' +-:12: warning: skipping prefixes on this instruction diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/jmpcall.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/jmpcall.hex new file mode 100644 index 0000000000..6677cf92a7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/jmpcall.hex @@ -0,0 +1,496 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +06 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +d0 +ff +d0 +ff +10 +ff +10 +ff +15 +00 +00 +00 +00 +e8 +ed +ff +ff +ff +e8 +ed +ff +ff +ff +ff +15 +00 +00 +00 +00 +ff +90 +00 +00 +00 +00 +eb +da +64 +ff +25 +00 +00 +00 +00 +00 +00 +00 +0a +00 +00 +00 +01 +03 +00 +00 +1a +00 +00 +00 +01 +03 +00 +00 +20 +00 +00 +00 +01 +03 +00 +00 +29 +00 +00 +00 +01 +03 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +90 +00 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +bc +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +00 +00 +00 +40 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +00 +00 +00 +20 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/leb128.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/leb128.asm new file mode 100644 index 0000000000..3cead76ad3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/leb128.asm @@ -0,0 +1,18 @@ +.data +.uleb128 0 +.uleb128 2 +.uleb128 127 +.uleb128 128 +.uleb128 129 +.uleb128 130 +.uleb128 12857 + +.sleb128 0 +.sleb128 2 +.sleb128 -2 +.sleb128 127 +.sleb128 -127 +.sleb128 128 +.sleb128 -128 +.sleb128 129 +.sleb128 -129 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/leb128.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/leb128.hex new file mode 100644 index 0000000000..bc1363b63c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/leb128.hex @@ -0,0 +1,448 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +06 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +7f +80 +01 +81 +01 +82 +01 +b9 +64 +00 +02 +7e +ff +00 +81 +7f +80 +01 +80 +7f +81 +01 +ff +7e +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +64 +61 +74 +61 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1d +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +5c +00 +00 +00 +27 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0d +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +15 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +88 +00 +00 +00 +40 +00 +00 +00 +02 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +01 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +1a +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/localcomm.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/localcomm.asm new file mode 100644 index 0000000000..17f33e6e75 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/localcomm.asm @@ -0,0 +1,18 @@ + .text + .local failmsg + .comm failmsg,100,32 + .local failed + .comm failed,1000,32 + .local from_dec_data + .comm from_dec_data,8,8 + .local op2static + .comm op2static,8,8 + .local op1static + .comm op1static,8,8 + .local spare + .comm spare,8,8 + .local result + .comm result,8,8 + .local conv_bv + .comm conv_bv,8,8 + diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/localcomm.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/localcomm.hex new file mode 100644 index 0000000000..93540bef84 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/localcomm.hex @@ -0,0 +1,544 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +01 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +06 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +62 +73 +73 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +90 +04 +00 +00 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +88 +04 +00 +00 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +80 +04 +00 +00 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +78 +04 +00 +00 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +70 +04 +00 +00 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +68 +04 +00 +00 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1c +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +26 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +68 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +14 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +00 +00 +00 +c0 +00 +00 +00 +02 +00 +00 +00 +0c +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +08 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +98 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +20 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/reggroup-err.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/reggroup-err.asm new file mode 100644 index 0000000000..fc6ca7983e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/reggroup-err.asm @@ -0,0 +1,5 @@ + fadd %st (2) + fadd %st (2), %st(0) + fadd %st (2), %st + fadd %st, %st + fadd %st (8) diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/reggroup-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/reggroup-err.errwarn new file mode 100644 index 0000000000..3f428a79b8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/reggroup-err.errwarn @@ -0,0 +1 @@ +-:5: error: bad register index `8' diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/reggroup.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/reggroup.asm new file mode 100644 index 0000000000..5c0d0bf298 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/reggroup.asm @@ -0,0 +1,5 @@ + fadd %st (2) + fadd %st (2), %st(0) + fadd %st (2), %st + fadd %st, %st +# fadd %st (8) diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/reggroup.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/reggroup.hex new file mode 100644 index 0000000000..e265ffb138 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/reggroup.hex @@ -0,0 +1,360 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d8 +c2 +d8 +c2 +d8 +c2 +d8 +c0 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +00 +00 +00 +30 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/strzero.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/strzero.asm new file mode 100644 index 0000000000..b23a35850f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/strzero.asm @@ -0,0 +1 @@ +.ascii "abc\000def" diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/strzero.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/strzero.hex new file mode 100644 index 0000000000..4cc7a10d8a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/strzero.hex @@ -0,0 +1,360 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +05 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +61 +62 +63 +00 +64 +65 +66 +00 +00 +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +00 +00 +2d +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +17 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0f +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +00 +00 +00 +30 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +07 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/varinsn.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/varinsn.asm new file mode 100644 index 0000000000..1b6b6a6030 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/varinsn.asm @@ -0,0 +1 @@ +movl %eax, movl diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/varinsn.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/varinsn.hex new file mode 100644 index 0000000000..5b454b7e60 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/gas/tests/varinsn.hex @@ -0,0 +1,448 @@ +7f +45 +4c +46 +01 +01 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +03 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d0 +00 +00 +00 +00 +00 +00 +00 +34 +00 +00 +00 +00 +00 +28 +00 +06 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +a3 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +01 +03 +00 +00 +00 +2e +74 +65 +78 +74 +00 +2e +72 +65 +6c +2e +74 +65 +78 +74 +00 +2e +73 +74 +72 +74 +61 +62 +00 +2e +73 +79 +6d +74 +61 +62 +00 +2e +73 +68 +73 +74 +72 +74 +61 +62 +00 +00 +00 +2d +00 +6d +6f +76 +6c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +04 +00 +f1 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +03 +00 +04 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +21 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +50 +00 +00 +00 +2b +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +11 +00 +00 +00 +03 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +00 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +19 +00 +00 +00 +02 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +84 +00 +00 +00 +40 +00 +00 +00 +02 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +10 +00 +00 +00 +01 +00 +00 +00 +01 +00 +00 +00 +06 +00 +00 +00 +00 +00 +00 +00 +40 +00 +00 +00 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +00 +00 +00 +00 +00 +00 +00 +07 +00 +00 +00 +09 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +48 +00 +00 +00 +08 +00 +00 +00 +03 +00 +00 +00 +04 +00 +00 +00 +04 +00 +00 +00 +08 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/CMakeLists.txt new file mode 100644 index 0000000000..7a060d2918 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/CMakeLists.txt @@ -0,0 +1,21 @@ +YASM_GENMACRO( + ${CMAKE_CURRENT_SOURCE_DIR}/parsers/nasm/nasm-std.mac + ${CMAKE_CURRENT_BINARY_DIR}/nasm-macros.c + nasm_standard_mac + ) + +SET_SOURCE_FILES_PROPERTIES(parsers/nasm/nasm-parser.c PROPERTIES + OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/nasm-macros.c + ) + +YASM_RE2C( + ${CMAKE_CURRENT_SOURCE_DIR}/parsers/nasm/nasm-token.re + ${CMAKE_CURRENT_BINARY_DIR}/nasm-token.c + -b + ) + +YASM_ADD_MODULE(parser_nasm + parsers/nasm/nasm-parser.c + parsers/nasm/nasm-parse.c + nasm-token.c + ) diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/Makefile.inc new file mode 100644 index 0000000000..ed58bb63a7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/Makefile.inc @@ -0,0 +1,29 @@ +libyasm_a_SOURCES += modules/parsers/nasm/nasm-parser.c +libyasm_a_SOURCES += modules/parsers/nasm/nasm-parser.h +libyasm_a_SOURCES += modules/parsers/nasm/nasm-parser-struct.h +libyasm_a_SOURCES += modules/parsers/nasm/nasm-parse.c +nodist_libyasm_a_SOURCES += nasm-token.c + +YASM_MODULES += parser_nasm parser_tasm + +nasm-token.c: $(srcdir)/modules/parsers/nasm/nasm-token.re re2c$(EXEEXT) + $(top_builddir)/re2c$(EXEEXT) -b -o $@ $(srcdir)/modules/parsers/nasm/nasm-token.re + +BUILT_SOURCES += nasm-token.c + +CLEANFILES += nasm-token.c + +EXTRA_DIST += modules/parsers/nasm/nasm-token.re + +$(top_srcdir)/modules/parsers/nasm/nasm-parser.c: nasm-macros.c + +nasm-macros.c: $(srcdir)/modules/parsers/nasm/nasm-std.mac genmacro$(EXEEXT) + $(top_builddir)/genmacro$(EXEEXT) $@ nasm_standard_mac $(srcdir)/modules/parsers/nasm/nasm-std.mac + +BUILT_SOURCES += nasm-macros.c +CLEANFILES += nasm-macros.c +EXTRA_DIST += modules/parsers/nasm/nasm-std.mac + +EXTRA_DIST += modules/parsers/nasm/tests/Makefile.inc + +include modules/parsers/nasm/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-parse.c b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-parse.c new file mode 100644 index 0000000000..44d3b5d707 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-parse.c @@ -0,0 +1,1680 @@ +/* + * NASM-compatible parser + * + * Copyright (C) 2001-2007 Peter Johnson, Michael Urman + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include + +#include "modules/parsers/nasm/nasm-parser.h" +#include "modules/preprocs/nasm/nasm.h" + +typedef enum { + NORM_EXPR, + DIR_EXPR, /* Can't have seg:off or WRT anywhere */ + DV_EXPR /* Can't have registers anywhere */ +} expr_type; + +static yasm_bytecode *parse_line(yasm_parser_nasm *parser_nasm); +static int parse_directive_valparams(yasm_parser_nasm *parser_nasm, + /*@out@*/ yasm_valparamhead *vps); +static yasm_bytecode *parse_times(yasm_parser_nasm *parser_nasm); +static yasm_bytecode *parse_exp(yasm_parser_nasm *parser_nasm); +static yasm_bytecode *parse_instr(yasm_parser_nasm *parser_nasm); +static yasm_insn_operand *parse_operand(yasm_parser_nasm *parser_nasm); +static yasm_insn_operand *parse_memaddr(yasm_parser_nasm *parser_nasm); +static yasm_expr *parse_expr(yasm_parser_nasm *parser_nasm, expr_type type); +static yasm_expr *parse_bexpr(yasm_parser_nasm *parser_nasm, expr_type type); +static yasm_expr *parse_expr0(yasm_parser_nasm *parser_nasm, expr_type type); +static yasm_expr *parse_expr1(yasm_parser_nasm *parser_nasm, expr_type type); +static yasm_expr *parse_expr2(yasm_parser_nasm *parser_nasm, expr_type type); +static yasm_expr *parse_expr3(yasm_parser_nasm *parser_nasm, expr_type type); +static yasm_expr *parse_expr4(yasm_parser_nasm *parser_nasm, expr_type type); +static yasm_expr *parse_expr5(yasm_parser_nasm *parser_nasm, expr_type type); +static yasm_expr *parse_expr6(yasm_parser_nasm *parser_nasm, expr_type type); + +static void nasm_parser_directive + (yasm_parser_nasm *parser_nasm, const char *name, + /*@null@*/ yasm_valparamhead *valparams, + /*@null@*/ yasm_valparamhead *objext_valparams); +static void set_nonlocal_label(yasm_parser_nasm *parser_nasm, const char *name); +static void define_label(yasm_parser_nasm *parser_nasm, /*@only@*/ char *name, + unsigned int size); + +static void yasm_ea_set_implicit_size_segment(yasm_parser_nasm *parser_nasm, + yasm_effaddr *ea, yasm_expr *e) +{ + if (parser_nasm->tasm) { + const char *segment = yasm_expr_segment(e); + ea->data_len = yasm_expr_size(e); + if (segment) { + const char *segreg = tasm_get_segment_register(segment); + if (segreg) + yasm_arch_parse_check_regtmod(p_object->arch, segreg, + strlen(segreg), &ea->segreg); + } + } +} + + +#define is_eol_tok(tok) ((tok) == 0) +#define is_eol() is_eol_tok(curtok) + +#define get_next_token() (curtok = nasm_parser_lex(&curval, parser_nasm)) + +static void +get_peek_token(yasm_parser_nasm *parser_nasm) +{ + char savech = parser_nasm->tokch; + if (parser_nasm->peek_token != NONE) + yasm_internal_error(N_("only can have one token of lookahead")); + parser_nasm->peek_token = + nasm_parser_lex(&parser_nasm->peek_tokval, parser_nasm); + parser_nasm->peek_tokch = parser_nasm->tokch; + parser_nasm->tokch = savech; +} + +static void +destroy_curtok_(yasm_parser_nasm *parser_nasm) +{ + if (curtok < 256) + ; + else switch ((enum tokentype)curtok) { + case INTNUM: + yasm_intnum_destroy(curval.intn); + break; + case FLTNUM: + yasm_floatnum_destroy(curval.flt); + break; + case DIRECTIVE_NAME: + case FILENAME: + case ID: + case LOCAL_ID: + case SPECIAL_ID: + case NONLOCAL_ID: + yasm_xfree(curval.str_val); + break; + case STRING: + yasm_xfree(curval.str.contents); + break; + case INSN: + yasm_bc_destroy(curval.bc); + break; + default: + break; + } + curtok = NONE; /* sanity */ +} +#define destroy_curtok() destroy_curtok_(parser_nasm) + +/* Eat all remaining tokens to EOL, discarding all of them. If there's any + * intervening tokens, generates an error (junk at end of line). + */ +static void +demand_eol_(yasm_parser_nasm *parser_nasm) +{ + if (is_eol()) + return; + + yasm_error_set(YASM_ERROR_SYNTAX, + N_("junk at end of line, first unrecognized character is `%c'"), + parser_nasm->tokch); + + do { + destroy_curtok(); + get_next_token(); + } while (!is_eol()); +} +#define demand_eol() demand_eol_(parser_nasm) + +static const char * +describe_token(int token) +{ + static char strch[] = "` '"; + const char *str; + + switch (token) { + case 0: str = "end of line"; break; + case INTNUM: str = "integer"; break; + case FLTNUM: str = "floating point value"; break; + case DIRECTIVE_NAME: str = "directive name"; break; + case FILENAME: str = "filename"; break; + case STRING: str = "string"; break; + case SIZE_OVERRIDE: str = "size override"; break; + case DECLARE_DATA: str = "DB/DW/etc."; break; + case RESERVE_SPACE: str = "RESB/RESW/etc."; break; + case INCBIN: str = "INCBIN"; break; + case EQU: str = "EQU"; break; + case TIMES: str = "TIMES"; break; + case SEG: str = "SEG"; break; + case WRT: str = "WRT"; break; + case NOSPLIT: str = "NOSPLIT"; break; + case STRICT: str = "STRICT"; break; + case INSN: str = "instruction"; break; + case PREFIX: str = "instruction prefix"; break; + case REG: str = "register"; break; + case REGGROUP: str = "register group"; break; + case SEGREG: str = "segment register"; break; + case TARGETMOD: str = "target modifier"; break; + case LEFT_OP: str = "<<"; break; + case RIGHT_OP: str = ">>"; break; + case SIGNDIV: str = "//"; break; + case SIGNMOD: str = "%%"; break; + case START_SECTION_ID: str = "$$"; break; + case ID: str = "identifier"; break; + case LOCAL_ID: str = ".identifier"; break; + case SPECIAL_ID: str = "..identifier"; break; + case NONLOCAL_ID: str = "..@identifier"; break; + case LINE: str = "%line"; break; + default: + strch[1] = token; + str = strch; + break; + } + + return str; +} + +static int +expect_(yasm_parser_nasm *parser_nasm, int token) +{ + if (curtok == token) + return 1; + + yasm_error_set(YASM_ERROR_PARSE, "expected %s", describe_token(token)); + destroy_curtok(); + return 0; +} +#define expect(token) expect_(parser_nasm, token) + +void +nasm_parser_parse(yasm_parser_nasm *parser_nasm) +{ + unsigned char *line; + while ((line = (unsigned char *) + yasm_preproc_get_line(parser_nasm->preproc)) != NULL) { + yasm_bytecode *bc = NULL, *temp_bc; + + parser_nasm->s.bot = line; + parser_nasm->s.tok = line; + parser_nasm->s.ptr = line; + parser_nasm->s.cur = line; + parser_nasm->s.lim = line + strlen((char *)line)+1; + parser_nasm->s.top = parser_nasm->s.lim; + + get_next_token(); + if (!is_eol()) { + bc = parse_line(parser_nasm); + demand_eol(); + } + + if (parser_nasm->abspos) { + /* If we're inside an absolute section, just add to the absolute + * position rather than appending bytecodes to a section. + * Only RES* are allowed in an absolute section, so this is easy. + */ + if (bc) { + /*@null@*/ const yasm_expr *numitems, *multiple; + unsigned int itemsize; + numitems = yasm_bc_reserve_numitems(bc, &itemsize); + if (numitems) { + yasm_expr *e; + e = yasm_expr_create(YASM_EXPR_MUL, + yasm_expr_expr(yasm_expr_copy(numitems)), + yasm_expr_int(yasm_intnum_create_uint(itemsize)), + cur_line); + multiple = yasm_bc_get_multiple_expr(bc); + if (multiple) + e = yasm_expr_create_tree(e, YASM_EXPR_MUL, + yasm_expr_copy(multiple), + cur_line); + parser_nasm->abspos = yasm_expr_create_tree( + parser_nasm->abspos, YASM_EXPR_ADD, e, cur_line); + } else + yasm_error_set(YASM_ERROR_SYNTAX, + N_("only RES* allowed within absolute section")); + yasm_bc_destroy(bc); + } + temp_bc = NULL; + } else if (bc) { + temp_bc = yasm_section_bcs_append(cursect, bc); + if (temp_bc) + parser_nasm->prev_bc = temp_bc; + } else + temp_bc = NULL; + yasm_errwarn_propagate(parser_nasm->errwarns, cur_line); + + if (parser_nasm->save_input) + yasm_linemap_add_source(parser_nasm->linemap, temp_bc, + (char *)line); + yasm_linemap_goto_next(parser_nasm->linemap); + yasm_xfree(line); + } +} + +/* All parse_* functions expect to be called with curtok being their first + * token. They should return with curtok being the token *after* their + * information. + */ + +static yasm_bytecode * +parse_line(yasm_parser_nasm *parser_nasm) +{ + yasm_bytecode *bc; + + bc = parse_exp(parser_nasm); + if (bc) + return bc; + + switch (curtok) { + case LINE: /* LINE INTNUM '+' INTNUM FILENAME */ + { + yasm_intnum *line, *incr; + char *filename; + + get_next_token(); + + if (!expect(INTNUM)) return NULL; + line = INTNUM_val; + get_next_token(); + + if (!expect('+')) return NULL; + get_next_token(); + + if (!expect(INTNUM)) return NULL; + incr = INTNUM_val; + get_next_token(); + + if (!expect(FILENAME)) return NULL; + filename = FILENAME_val; + get_next_token(); + + /* %line indicates the line number of the *next* line, so subtract + * out the increment when setting the line number. + */ + yasm_linemap_set(parser_nasm->linemap, filename, 0, + yasm_intnum_get_uint(line) - yasm_intnum_get_uint(incr), + yasm_intnum_get_uint(incr)); + yasm_intnum_destroy(line); + yasm_intnum_destroy(incr); + yasm_xfree(filename); + return NULL; + } + case '[': /* [ directive ] */ + { + char *dirname; + yasm_valparamhead dir_vps; + int have_vps = 1; + + parser_nasm->state = DIRECTIVE; + get_next_token(); + + if (!expect(DIRECTIVE_NAME)) + return NULL; + dirname = DIRECTIVE_NAME_val; + get_next_token(); + + /* ignore [warning]. TODO: actually implement */ + if (yasm__strcasecmp(dirname, "warning") == 0) { + yasm_warn_set(YASM_WARN_GENERAL, + N_("[warning] directive not supported; ignored")); + + /* throw away the rest of the directive tokens */ + while (!is_eol() && curtok != ']') + { + destroy_curtok(); + get_next_token(); + } + expect(']'); + get_next_token(); + return NULL; + } + + if (curtok == ']' || curtok == ':') + have_vps = 0; + else if (!parse_directive_valparams(parser_nasm, &dir_vps)) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("invalid arguments to [%s]"), dirname); + yasm_xfree(dirname); + return NULL; + } + if (curtok == ':') { + yasm_valparamhead ext_vps; + get_next_token(); + if (!parse_directive_valparams(parser_nasm, &ext_vps)) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("invalid arguments to [%s]"), dirname); + yasm_xfree(dirname); + return NULL; + } + nasm_parser_directive(parser_nasm, dirname, + have_vps ? &dir_vps : NULL, &ext_vps); + } else + nasm_parser_directive(parser_nasm, dirname, + have_vps ? &dir_vps : NULL, NULL); + yasm_xfree(dirname); + expect(']'); + get_next_token(); + return NULL; + } + case TIMES: /* TIMES expr exp */ + get_next_token(); + return parse_times(parser_nasm); + case ID: + case SPECIAL_ID: + case NONLOCAL_ID: + case LOCAL_ID: + { + char *name = ID_val; + int local = parser_nasm->tasm + ? (curtok == ID || curtok == LOCAL_ID || + (curtok == SPECIAL_ID && name[0] == '@')) + : (curtok != ID); + unsigned int size = 0; + + get_next_token(); + if (is_eol()) { + /* label alone on the line */ + yasm_warn_set(YASM_WARN_ORPHAN_LABEL, + N_("label alone on a line without a colon might be in error")); + if (!local) + set_nonlocal_label(parser_nasm, name); + define_label(parser_nasm, name, 0); + return NULL; + } + if (curtok == ':') + get_next_token(); + + if (curtok == EQU || (parser_nasm->tasm && curtok == '=')) { + /* label EQU expr */ + yasm_expr *e; + get_next_token(); + + if (parser_nasm->tasm && curtok == SIZE_OVERRIDE) { + size = SIZE_OVERRIDE_val; + get_next_token(); + } + + e = parse_expr(parser_nasm, NORM_EXPR); + if (!e) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expression expected after %s"), "EQU"); + yasm_xfree(name); + return NULL; + } + yasm_symtab_define_equ(p_symtab, name, e, cur_line); + yasm_xfree(name); + return NULL; + } + + if (parser_nasm->tasm && curtok == LABEL) + get_next_token(); + + if (parser_nasm->tasm && curtok == SIZE_OVERRIDE) { + size = SIZE_OVERRIDE_val; + get_next_token(); + } + + if (!local) + set_nonlocal_label(parser_nasm, name); + + if (is_eol()) { + define_label(parser_nasm, name, size); + return NULL; + } + if (curtok == TIMES) { + define_label(parser_nasm, name, size); + get_next_token(); + return parse_times(parser_nasm); + } + bc = parse_exp(parser_nasm); + if (!parser_nasm->tasm && !bc) + yasm_error_set(YASM_ERROR_SYNTAX, + N_("instruction expected after label")); + if (parser_nasm->tasm && bc && !size) + size = yasm_bc_elem_size(bc); + define_label(parser_nasm, name, size); + return bc; + } + default: + yasm_error_set(YASM_ERROR_SYNTAX, + N_("label or instruction expected at start of line")); + return NULL; + } +} + +static int +parse_directive_valparams(yasm_parser_nasm *parser_nasm, + /*@out@*/ yasm_valparamhead *vps) +{ + yasm_vps_initialize(vps); + for (;;) { + yasm_valparam *vp; + yasm_expr *e; + char *id = NULL; + + /* Look for value first */ + if (curtok == ID) { + get_peek_token(parser_nasm); + if (parser_nasm->peek_token == '=') { + id = ID_val; + get_next_token(); /* id */ + get_next_token(); /* '=' */ + } + } + + /* Look for parameter */ + switch (curtok) { + case STRING: + vp = yasm_vp_create_string(id, STRING_val.contents); + get_next_token(); + break; + case ID: + /* We need a peek token, but avoid error if we have one + * already; we need to work whether or not we hit the + * "value=" if test above. + * + * We cheat and peek ahead to see if this is just an ID or + * the ID is part of an expression. We assume a + or - means + * that it's part of an expression (e.g. "x+y" is parsed as + * the expression "x+y" and not as "x", "+y"). + */ + if (parser_nasm->peek_token == NONE) + get_peek_token(parser_nasm); + switch (parser_nasm->peek_token) { + case '|': case '^': case '&': case LEFT_OP: case RIGHT_OP: + case '+': case '-': + case '*': case '/': case '%': case SIGNDIV: case SIGNMOD: + break; + default: + /* Just an id */ + vp = yasm_vp_create_id(id, ID_val, '$'); + get_next_token(); + goto next; + } + /*@fallthrough@*/ + default: + e = parse_expr(parser_nasm, DIR_EXPR); + if (!e) { + yasm_vps_delete(vps); + return 0; + } + vp = yasm_vp_create_expr(id, e); + break; + } +next: + yasm_vps_append(vps, vp); + if (curtok == ',') + get_next_token(); + if (curtok == ']' || curtok == ':' || is_eol()) + return 1; + } +} + +static yasm_bytecode * +parse_times(yasm_parser_nasm *parser_nasm) +{ + yasm_expr *multiple; + yasm_bytecode *bc; + + multiple = parse_bexpr(parser_nasm, DV_EXPR); + if (!multiple) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("expression expected after %s"), + "TIMES"); + return NULL; + } + bc = parse_exp(parser_nasm); + if (!bc) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("instruction expected after TIMES expression")); + yasm_expr_destroy(multiple); + return NULL; + } + yasm_bc_set_multiple(bc, multiple); + return bc; +} + +static yasm_bytecode * +parse_exp(yasm_parser_nasm *parser_nasm) +{ + yasm_bytecode *bc; + + bc = parse_instr(parser_nasm); + if (bc) + return bc; + + switch (curtok) { + case DECLARE_DATA: + { + unsigned int size = DECLARE_DATA_val/8; + yasm_datavalhead dvs; + yasm_dataval *dv; + yasm_expr *e, *e2; + + get_next_token(); + + yasm_dvs_initialize(&dvs); + for (;;) { + if (curtok == STRING) { + /* Peek ahead to see if we're in an expr. If we're not, + * then generate a real string dataval. + */ + get_peek_token(parser_nasm); + if (parser_nasm->peek_token == ',' + || is_eol_tok(parser_nasm->peek_token)) { + dv = yasm_dv_create_string(STRING_val.contents, + STRING_val.len); + get_next_token(); + goto dv_done; + } + } + if (curtok == '?') { + yasm_dvs_delete(&dvs); + get_next_token(); + if (! is_eol_tok(curtok)) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("can not handle more than one '?'")); + return NULL; + } + return yasm_bc_create_reserve( + p_expr_new_ident(yasm_expr_int( + yasm_intnum_create_uint(1))), + size, cur_line); + } + if (!(e = parse_bexpr(parser_nasm, DV_EXPR))) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expression or string expected")); + yasm_dvs_delete(&dvs); + return NULL; + } + if (curtok == DUP) { + get_next_token(); + if (curtok != '(') { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expected ( after DUP")); + goto error; + } + get_next_token(); + if (curtok == '?') { + get_next_token(); + if (curtok != ')') { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expected ) after DUPlicated expression")); + goto error; + } + get_next_token(); + if (! is_eol_tok(curtok)) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("can not handle more than one '?'")); + goto error; + } + yasm_dvs_delete(&dvs); + return yasm_bc_create_reserve(e, size, cur_line); + } else if ((e2 = parse_bexpr(parser_nasm, DV_EXPR))) { + if (curtok != ')') { + yasm_expr_destroy(e2); + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expected ) after DUPlicated expression")); + goto error; + } + get_next_token(); + dv = yasm_dv_create_expr(e2); + yasm_dv_set_multiple(dv, e); + } else { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expression or string expected")); +error: + yasm_expr_destroy(e); + yasm_dvs_delete(&dvs); + return NULL; + } + } else + dv = yasm_dv_create_expr(e); +dv_done: + yasm_dvs_append(&dvs, dv); + if (is_eol()) + break; + if (!expect(',')) { + yasm_dvs_delete(&dvs); + return NULL; + } + get_next_token(); + if (is_eol()) /* allow trailing , on list */ + break; + } + return yasm_bc_create_data(&dvs, size, 0, p_object->arch, + cur_line); + } + case RESERVE_SPACE: + { + unsigned int size = RESERVE_SPACE_val/8; + yasm_expr *e; + get_next_token(); + e = parse_bexpr(parser_nasm, DV_EXPR); + if (!e) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expression expected after %s"), "RESx"); + return NULL; + } + return yasm_bc_create_reserve(e, size, cur_line); + } + case INCBIN: + { + char *filename; + yasm_expr *start = NULL, *maxlen = NULL; + + get_next_token(); + + if (!expect(STRING)) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("filename string expected after INCBIN")); + return NULL; + } + filename = STRING_val.contents; + get_next_token(); + + /* optional start expression */ + if (curtok == ',') + get_next_token(); + if (is_eol()) + goto incbin_done; + start = parse_bexpr(parser_nasm, DV_EXPR); + if (!start) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expression expected for INCBIN start")); + return NULL; + } + + /* optional maxlen expression */ + if (curtok == ',') + get_next_token(); + if (is_eol()) + goto incbin_done; + maxlen = parse_bexpr(parser_nasm, DV_EXPR); + if (!maxlen) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expression expected for INCBIN maximum length")); + return NULL; + } + +incbin_done: + return yasm_bc_create_incbin(filename, start, maxlen, + parser_nasm->linemap, cur_line); + } + default: + return NULL; + } +} + +static yasm_bytecode * +parse_instr(yasm_parser_nasm *parser_nasm) +{ + yasm_bytecode *bc; + + switch (curtok) { + case INSN: + { + yasm_insn *insn; + bc = INSN_val; + insn = yasm_bc_get_insn(bc); + + get_next_token(); + if (is_eol()) + return bc; /* no operands */ + + /* parse operands */ + for (;;) { + yasm_insn_operand *op = parse_operand(parser_nasm); + if (!op) { + if (insn->num_operands == 0) + yasm_error_set(YASM_ERROR_SYNTAX, + N_("unexpected %s after instruction"), + describe_token(curtok)); + else + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expected operand, got %s"), + describe_token(curtok)); + yasm_bc_destroy(bc); + return NULL; + } + yasm_insn_ops_append(insn, op); + + if (is_eol()) + break; + if (!expect(',')) { + yasm_bc_destroy(bc); + return NULL; + } + get_next_token(); + } + return bc; + } + case PREFIX: + { + uintptr_t prefix = PREFIX_val; + get_next_token(); + bc = parse_instr(parser_nasm); + if (!bc) + bc = yasm_arch_create_empty_insn(p_object->arch, cur_line); + yasm_insn_add_prefix(yasm_bc_get_insn(bc), prefix); + return bc; + } + case SEGREG: + { + uintptr_t segreg = SEGREG_val; + get_next_token(); + bc = parse_instr(parser_nasm); + if (!bc) + bc = yasm_arch_create_empty_insn(p_object->arch, cur_line); + yasm_insn_add_seg_prefix(yasm_bc_get_insn(bc), segreg); + return bc; + } + default: + return NULL; + } +} + +static yasm_insn_operand * +parse_operand(yasm_parser_nasm *parser_nasm) +{ + yasm_insn_operand *op; + switch (curtok) { + case '[': + { + get_next_token(); + op = parse_memaddr(parser_nasm); + + expect(']'); + get_next_token(); + + if (!op) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("memory address expected")); + return NULL; + } + + if (parser_nasm->tasm && !is_eol() && curtok != ',') { + yasm_expr *e = NULL, *f; + yasm_effaddr *ea; + + switch (op->type) { + case YASM_INSN__OPERAND_IMM: + e = op->data.val; + break; + case YASM_INSN__OPERAND_MEMORY: + if (op->data.ea->disp.rel) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("relative adressing not supported\n")); + return NULL; + } + e = yasm_expr_copy(op->data.ea->disp.abs); + yasm_arch_ea_destroy(p_object->arch, op->data.ea); + break; + case YASM_INSN__OPERAND_REG: + case YASM_INSN__OPERAND_SEGREG: + yasm_error_set(YASM_ERROR_SYNTAX, + N_("register adressing not supported\n")); + return NULL; + } + yasm_xfree(op); + f = parse_bexpr(parser_nasm, NORM_EXPR); + if (!f) { + yasm_expr_destroy(e); + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expected expression after ]")); + return NULL; + } + e = p_expr_new_tree(e, YASM_EXPR_ADD, f); + ea = yasm_arch_ea_create(p_object->arch, e); + yasm_ea_set_implicit_size_segment(parser_nasm, ea, e); + op = yasm_operand_create_mem(ea); + } + return op; + } + case OFFSET: + { + yasm_insn_operand *op2; + get_next_token(); + if (parser_nasm->masm && curtok == ID && !yasm__strcasecmp(ID_val, "flat")) { + get_next_token(); + if (curtok == ':') { + get_next_token(); + } + } + op = parse_operand(parser_nasm); + if (!op) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("memory address expected")); + return NULL; + } + if (op->type == YASM_INSN__OPERAND_IMM) + return op; + if (op->type != YASM_INSN__OPERAND_MEMORY) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("OFFSET applied to non-memory operand")); + return NULL; + } + if (op->data.ea->disp.rel) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("OFFSET applied to non-absolute memory operand")); + return NULL; + } + if (op->data.ea->disp.abs) + op2 = yasm_operand_create_imm(op->data.ea->disp.abs); + else + op2 = yasm_operand_create_imm(p_expr_new_ident( + yasm_expr_int(yasm_intnum_create_uint(0)))); + yasm_xfree(op); + return op2; + } + case SEGREG: + { + uintptr_t segreg = SEGREG_val; + get_next_token(); + if (parser_nasm->tasm && curtok == ':') { + get_next_token(); + op = parse_operand(parser_nasm); + if (!op) + return NULL; + if (op->type == YASM_INSN__OPERAND_IMM) { + yasm_effaddr *ea = yasm_arch_ea_create(p_object->arch, + op->data.val); + yasm_insn_operand *op2; + yasm_ea_set_implicit_size_segment(parser_nasm, ea, + op->data.val); + op2 = yasm_operand_create_mem(ea); + op2->size = op->size; + yasm_xfree(op); + op = op2; + } + if (op->type != YASM_INSN__OPERAND_MEMORY) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("segment applied to non-memory operand")); + return NULL; + } + yasm_ea_set_segreg(op->data.ea, segreg); + return op; + } + op = yasm_operand_create_segreg(segreg); + return op; + } + case REG: + op = yasm_operand_create_reg(REG_val); + get_next_token(); + return op; + case REGGROUP: + { + unsigned long regindex; + uintptr_t reg = REGGROUP_val; + get_next_token(); /* REGGROUP */ + if (curtok != '(') + return yasm_operand_create_reg(reg); + get_next_token(); /* '(' */ + if (!expect(INTNUM)) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("integer register index expected")); + return NULL; + } + regindex = yasm_intnum_get_uint(INTNUM_val); + get_next_token(); /* INTNUM */ + if (!expect(')')) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("missing closing parenthesis for register index")); + return NULL; + } + get_next_token(); /* ')' */ + reg = yasm_arch_reggroup_get_reg(p_object->arch, reg, regindex); + if (reg == 0) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("bad register index `%u'"), + regindex); + return NULL; + } + return yasm_operand_create_reg(reg); + } + case STRICT: + get_next_token(); + op = parse_operand(parser_nasm); + if (op) + op->strict = 1; + return op; + case SIZE_OVERRIDE: + { + unsigned int size = SIZE_OVERRIDE_val; + get_next_token(); + if (parser_nasm->masm && curtok == ID && !yasm__strcasecmp(ID_val, "ptr")) { + get_next_token(); + } + op = parse_operand(parser_nasm); + if (!op) + return NULL; + if (op->type == YASM_INSN__OPERAND_REG && + yasm_arch_get_reg_size(p_object->arch, op->data.reg) != size) + yasm_error_set(YASM_ERROR_TYPE, + N_("cannot override register size")); + else { + /* Silently override others unless a warning is turned on. + * This is to allow overrides such as: + * %define arg1 dword [bp+4] + * cmp word arg1, 2 + * Which expands to: + * cmp word dword [bp+4], 2 + */ + if (op->size != 0) { + if (op->size != size) + yasm_warn_set(YASM_WARN_SIZE_OVERRIDE, + N_("overriding operand size from %u-bit to %u-bit"), + op->size, size); + else + yasm_warn_set(YASM_WARN_SIZE_OVERRIDE, + N_("double operand size override")); + } + op->size = size; + } + return op; + } + case TARGETMOD: + { + uintptr_t tmod = TARGETMOD_val; + get_next_token(); + op = parse_operand(parser_nasm); + if (op) + op->targetmod = tmod; + return op; + } + case ID: + case LOCAL_ID: + case NONLOCAL_ID: + if (parser_nasm->tasm) { + get_peek_token(parser_nasm); + if (parser_nasm->peek_token == '[') { + yasm_symrec *sym = yasm_symtab_use(p_symtab, ID_val, + cur_line); + yasm_expr *e = p_expr_new_ident(yasm_expr_sym(sym)), *f; + yasm_effaddr *ea; + yasm_xfree(ID_val); + get_next_token(); + get_next_token(); + f = parse_bexpr(parser_nasm, NORM_EXPR); + if (!f) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expected expression after [")); + return NULL; + } + e = p_expr_new_tree(e, YASM_EXPR_ADD, f); + if (!expect(']')) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("missing closing bracket")); + return NULL; + } + get_next_token(); + ea = yasm_arch_ea_create(p_object->arch, e); + yasm_ea_set_implicit_size_segment(parser_nasm, ea, e); + op = yasm_operand_create_mem(ea); + return op; + } + } + /* Fallthrough */ + default: + { + yasm_expr *e = parse_bexpr(parser_nasm, NORM_EXPR); + if (!e) + return NULL; + if (curtok != ':') { + if (parser_nasm->tasm && yasm_expr_size(e)) { + yasm_effaddr *ea = yasm_arch_ea_create(p_object->arch, e); + yasm_ea_set_implicit_size_segment(parser_nasm, ea, e); + op = yasm_operand_create_mem(ea); + return op; + } else if (curtok == '[') { + yasm_expr *f; + yasm_effaddr *ea; + yasm_insn_operand *op2; + + op = parse_operand(parser_nasm); + if (!op) + return NULL; + + f = op->data.ea->disp.abs; + e = p_expr_new_tree(e, YASM_EXPR_ADD, f); + ea = yasm_arch_ea_create(p_object->arch, e); + yasm_ea_set_implicit_size_segment(parser_nasm, ea, e); + op2 = yasm_operand_create_mem(ea); + + yasm_xfree(op); + + return op2; + } else { + return yasm_operand_create_imm(e); + } + } else { + yasm_expr *off; + get_next_token(); + off = parse_bexpr(parser_nasm, NORM_EXPR); + if (!off) { + yasm_expr_destroy(e); + return NULL; + } + op = yasm_operand_create_imm(off); + op->seg = e; + return op; + } + } + } +} + +/* memory addresses */ +static yasm_insn_operand * +parse_memaddr(yasm_parser_nasm *parser_nasm) +{ + yasm_insn_operand *op; + switch (curtok) { + case SEGREG: + { + uintptr_t segreg = SEGREG_val; + get_next_token(); + if (!expect(':')) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("`:' required after segment register")); + return NULL; + } + get_next_token(); + op = parse_memaddr(parser_nasm); + if (op) + yasm_ea_set_segreg(op->data.ea, segreg); + return op; + } + case SIZE_OVERRIDE: + { + unsigned int size = SIZE_OVERRIDE_val; + get_next_token(); + op = parse_memaddr(parser_nasm); + if (op) + op->data.ea->disp.size = size; + return op; + } + case NOSPLIT: + get_next_token(); + op = parse_memaddr(parser_nasm); + if (op) + op->data.ea->nosplit = 1; + return op; + case REL: + get_next_token(); + op = parse_memaddr(parser_nasm); + if (op) { + op->data.ea->pc_rel = 1; + op->data.ea->not_pc_rel = 0; + } + return op; + case ABS: + get_next_token(); + op = parse_memaddr(parser_nasm); + if (op) { + op->data.ea->pc_rel = 0; + op->data.ea->not_pc_rel = 1; + } + return op; + default: + { + yasm_expr *e = parse_bexpr(parser_nasm, NORM_EXPR); + if (!e) + return NULL; + if (curtok != ':') { + yasm_effaddr *ea = yasm_arch_ea_create(p_object->arch, e); + yasm_ea_set_implicit_size_segment(parser_nasm, ea, e); + return yasm_operand_create_mem(ea); + } else { + yasm_effaddr *ea; + yasm_expr *off; + get_next_token(); + off = parse_bexpr(parser_nasm, NORM_EXPR); + if (!off) { + yasm_expr_destroy(e); + return NULL; + } + ea = yasm_arch_ea_create(p_object->arch, off); + yasm_ea_set_implicit_size_segment(parser_nasm, ea, off); + op = yasm_operand_create_mem(ea); + op->seg = e; + return op; + } + } + } +} + +/* Expression grammar parsed is: + * + * expr : bexpr [ : bexpr ] + * bexpr : expr0 [ WRT expr6 ] + * expr0 : expr1 [ {|} expr1...] + * expr1 : expr2 [ {^} expr2...] + * expr2 : expr3 [ {&} expr3...] + * expr3 : expr4 [ {<<,>>} expr4...] + * expr4 : expr5 [ {+,-} expr5...] + * expr5 : expr6 [ {*,/,%,//,%%} expr6...] + * expr6 : { ~,+,-,SEG } expr6 + * | (expr) + * | symbol + * | $ + * | number + */ + +#define parse_expr_common(leftfunc, tok, rightfunc, op) \ + do { \ + yasm_expr *e, *f; \ + e = leftfunc(parser_nasm, type); \ + if (!e) \ + return NULL; \ + \ + while (curtok == tok) { \ + get_next_token(); \ + f = rightfunc(parser_nasm, type); \ + if (!f) { \ + yasm_error_set(YASM_ERROR_SYNTAX, \ + N_("expected expression after %s"), \ + describe_token(op)); \ + yasm_expr_destroy(e); \ + return NULL; \ + } \ + e = p_expr_new_tree(e, op, f); \ + } \ + return e; \ + } while(0) + +static yasm_expr * +parse_expr(yasm_parser_nasm *parser_nasm, expr_type type) +{ + switch (type) { + case DIR_EXPR: + /* directive expressions can't handle seg:off or WRT */ + return parse_expr0(parser_nasm, type); + default: + parse_expr_common(parse_bexpr, ':', parse_bexpr, YASM_EXPR_SEGOFF); + } + /*@notreached@*/ + return NULL; +} + +static yasm_expr * +parse_bexpr(yasm_parser_nasm *parser_nasm, expr_type type) +{ + parse_expr_common(parse_expr0, WRT, parse_expr6, YASM_EXPR_WRT); +} + +static yasm_expr * +parse_expr0(yasm_parser_nasm *parser_nasm, expr_type type) +{ + parse_expr_common(parse_expr1, '|', parse_expr1, YASM_EXPR_OR); +} + +static yasm_expr * +parse_expr1(yasm_parser_nasm *parser_nasm, expr_type type) +{ + parse_expr_common(parse_expr2, '^', parse_expr2, YASM_EXPR_XOR); +} + +static yasm_expr * +parse_expr2(yasm_parser_nasm *parser_nasm, expr_type type) +{ + parse_expr_common(parse_expr3, '&', parse_expr3, YASM_EXPR_AND); +} + +static yasm_expr * +parse_expr3(yasm_parser_nasm *parser_nasm, expr_type type) +{ + yasm_expr *e, *f; + e = parse_expr4(parser_nasm, type); + if (!e) + return NULL; + + while (curtok == LEFT_OP || curtok == RIGHT_OP) { + int op = curtok; + get_next_token(); + f = parse_expr4(parser_nasm, type); + if (!f) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expected expression after %s"), + describe_token(op)); + yasm_expr_destroy(e); + return NULL; + } + + switch (op) { + case LEFT_OP: e = p_expr_new_tree(e, YASM_EXPR_SHL, f); break; + case RIGHT_OP: e = p_expr_new_tree(e, YASM_EXPR_SHR, f); break; + } + } + return e; +} + +static yasm_expr * +parse_expr4(yasm_parser_nasm *parser_nasm, expr_type type) +{ + yasm_expr *e, *f; + e = parse_expr5(parser_nasm, type); + if (!e) + return NULL; + + while (curtok == '+' || curtok == '-') { + int op = curtok; + get_next_token(); + f = parse_expr5(parser_nasm, type); + if (!f) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expected expression after %s"), + describe_token(op)); + yasm_expr_destroy(e); + return NULL; + } + + switch (op) { + case '+': e = p_expr_new_tree(e, YASM_EXPR_ADD, f); break; + case '-': e = p_expr_new_tree(e, YASM_EXPR_SUB, f); break; + } + } + return e; +} + +static yasm_expr * +parse_expr5(yasm_parser_nasm *parser_nasm, expr_type type) +{ + yasm_expr *e, *f; + e = parse_expr6(parser_nasm, type); + if (!e) + return NULL; + + while (curtok == '*' || curtok == '/' || curtok == '%' + || curtok == SIGNDIV || curtok == SIGNMOD) { + int op = curtok; + get_next_token(); + f = parse_expr6(parser_nasm, type); + if (!f) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expected expression after %s"), + describe_token(op)); + yasm_expr_destroy(e); + return NULL; + } + + switch (op) { + case '*': e = p_expr_new_tree(e, YASM_EXPR_MUL, f); break; + case '/': e = p_expr_new_tree(e, YASM_EXPR_DIV, f); break; + case '%': e = p_expr_new_tree(e, YASM_EXPR_MOD, f); break; + case SIGNDIV: e = p_expr_new_tree(e, YASM_EXPR_SIGNDIV, f); break; + case SIGNMOD: e = p_expr_new_tree(e, YASM_EXPR_SIGNMOD, f); break; + } + } + return e; +} + +static yasm_expr * +parse_expr6(yasm_parser_nasm *parser_nasm, expr_type type) +{ + yasm_expr *e; + yasm_symrec *sym; + + switch (curtok) { + case '+': + get_next_token(); + e = parse_expr6(parser_nasm, type); + if (!e) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expected expression after %s"), "`+'"); + } + return e; + case '-': + get_next_token(); + e = parse_expr6(parser_nasm, type); + if (!e) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expected expression after %s"), "`-'"); + return NULL; + } + return p_expr_new_branch(YASM_EXPR_NEG, e); + case '~': + get_next_token(); + e = parse_expr6(parser_nasm, type); + if (!e) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expected expression after %s"), "`~'"); + return NULL; + } + return p_expr_new_branch(YASM_EXPR_NOT, e); + case LOW: + get_next_token(); + e = parse_expr6(parser_nasm, type); + if (!e) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expected expression after %s"), "LOW"); + return NULL; + } + return p_expr_new_tree(e, YASM_EXPR_AND, + p_expr_new_ident(yasm_expr_int(yasm_intnum_create_uint(0xff)))); + case HIGH: + get_next_token(); + e = parse_expr6(parser_nasm, type); + if (!e) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expected expression after %s"), "HIGH"); + return NULL; + } + return p_expr_new_tree( + p_expr_new_tree(e, YASM_EXPR_SHR, + p_expr_new_ident(yasm_expr_int( + yasm_intnum_create_uint(8)))), + YASM_EXPR_AND, + p_expr_new_ident(yasm_expr_int(yasm_intnum_create_uint(0xff)))); + case SEG: + get_next_token(); + e = parse_expr6(parser_nasm, type); + if (!e) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expected expression after %s"), "SEG"); + return NULL; + } + return p_expr_new_branch(YASM_EXPR_SEG, e); + case '(': + get_next_token(); + e = parse_expr(parser_nasm, type); + if (!e) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("expected expression after %s"), "`('"); + return NULL; + } + if (!expect(')')) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("missing parenthesis")); + return NULL; + } + get_next_token(); + return e; + case INTNUM: + e = p_expr_new_ident(yasm_expr_int(INTNUM_val)); + get_next_token(); + return e; + case REG: + if (type == DV_EXPR) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("data values can't have registers")); + return NULL; + } + e = p_expr_new_ident(yasm_expr_reg(REG_val)); + get_next_token(); + return e; + } + + /* directives allow very little and handle IDs specially */ + if (type == DIR_EXPR) { + switch (curtok) { + case ID: + sym = yasm_symtab_use(p_symtab, ID_val, cur_line); + e = p_expr_new_ident(yasm_expr_sym(sym)); + yasm_xfree(ID_val); + break; + default: + return NULL; + } + } else switch (curtok) { + case FLTNUM: + e = p_expr_new_ident(yasm_expr_float(FLTNUM_val)); + break; + case STRING: + { + yasm_intnum *intn; + if (parser_nasm->tasm) + intn = yasm_intnum_create_charconst_tasm(STRING_val.contents); + else + intn = yasm_intnum_create_charconst_nasm(STRING_val.contents); + e = p_expr_new_ident(yasm_expr_int(intn)); + yasm_xfree(STRING_val.contents); + break; + } + case SPECIAL_ID: + sym = yasm_objfmt_get_special_sym(p_object, ID_val+2, "nasm"); + if (sym) { + e = p_expr_new_ident(yasm_expr_sym(sym)); + yasm_xfree(ID_val); + break; + } + /*@fallthrough@*/ + case ID: + case LOCAL_ID: + case NONLOCAL_ID: + sym = yasm_symtab_use(p_symtab, ID_val, cur_line); + e = p_expr_new_ident(yasm_expr_sym(sym)); + yasm_xfree(ID_val); + break; + case '$': + /* "$" references the current assembly position */ + if (parser_nasm->abspos) + e = yasm_expr_copy(parser_nasm->abspos); + else { + sym = yasm_symtab_define_curpos(p_symtab, "$", + parser_nasm->prev_bc, cur_line); + e = p_expr_new_ident(yasm_expr_sym(sym)); + } + break; + case START_SECTION_ID: + /* "$$" references the start of the current section */ + if (parser_nasm->absstart) + e = yasm_expr_copy(parser_nasm->absstart); + else { + sym = yasm_symtab_define_label(p_symtab, "$$", + yasm_section_bcs_first(cursect), 0, cur_line); + e = p_expr_new_ident(yasm_expr_sym(sym)); + } + break; + default: + return NULL; + } + + get_next_token(); + return e; +} + +static void +set_nonlocal_label(yasm_parser_nasm *parser_nasm, const char *name) +{ + if (!parser_nasm->tasm || tasm_locals) { + if (parser_nasm->locallabel_base) + yasm_xfree(parser_nasm->locallabel_base); + parser_nasm->locallabel_base_len = strlen(name); + parser_nasm->locallabel_base = + yasm_xmalloc(parser_nasm->locallabel_base_len+1); + strcpy(parser_nasm->locallabel_base, name); + } +} + +static void +define_label(yasm_parser_nasm *parser_nasm, char *name, unsigned int size) +{ + yasm_symrec *symrec; + + if (parser_nasm->abspos) + symrec = yasm_symtab_define_equ(p_symtab, name, + yasm_expr_copy(parser_nasm->abspos), + cur_line); + else + symrec = yasm_symtab_define_label(p_symtab, name, parser_nasm->prev_bc, + 1, cur_line); + + yasm_symrec_set_size(symrec, size); + yasm_symrec_set_segment(symrec, tasm_segment); + + yasm_xfree(name); +} + +static void +dir_align(yasm_object *object, yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams, unsigned long line) +{ + yasm_valparam *vp = yasm_vps_first(valparams); + yasm_expr *boundval = yasm_vp_expr(vp, object->symtab, line); + /*@depedent@*/ yasm_intnum *boundintn; + + /* Largest .align in the section specifies section alignment. + * Note: this doesn't match NASM behavior, but is a lot more + * intelligent! + */ + if (boundval && (boundintn = yasm_expr_get_intnum(&boundval, 0))) { + unsigned long boundint = yasm_intnum_get_uint(boundintn); + + /* Alignments must be a power of two. */ + if (is_exp2(boundint)) { + if (boundint > yasm_section_get_align(object->cur_section)) + yasm_section_set_align(object->cur_section, boundint, line); + } + } + + /* As this directive is called only when nop is used as fill, always + * use arch (nop) fill. + */ + yasm_section_bcs_append(object->cur_section, + yasm_bc_create_align(boundval, NULL, NULL, + /*yasm_section_is_code(object->cur_section) ?*/ + yasm_arch_get_fill(object->arch)/* : NULL*/, + line)); +} + +static void +nasm_parser_directive(yasm_parser_nasm *parser_nasm, const char *name, + yasm_valparamhead *valparams, + yasm_valparamhead *objext_valparams) +{ + unsigned long line = cur_line; + yasm_valparam *vp; + + if (!yasm_object_directive(p_object, name, "nasm", valparams, + objext_valparams, line)) + ; + else if (yasm__strcasecmp(name, "absolute") == 0) { + if (!valparams) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("directive `%s' requires an argument"), + "absolute"); + } else { + vp = yasm_vps_first(valparams); + if (parser_nasm->absstart) + yasm_expr_destroy(parser_nasm->absstart); + if (parser_nasm->abspos) + yasm_expr_destroy(parser_nasm->abspos); + parser_nasm->absstart = yasm_vp_expr(vp, p_object->symtab, line); + parser_nasm->abspos = yasm_expr_copy(parser_nasm->absstart); + cursect = NULL; + parser_nasm->prev_bc = NULL; + } + } else if (yasm__strcasecmp(name, "align") == 0) { + /* Really, we shouldn't end up with an align directive in an absolute + * section (as it's supposed to be only used for nop fill), but handle + * it gracefully anyway. + */ + if (parser_nasm->abspos) { + yasm_expr *boundval, *e; + vp = yasm_vps_first(valparams); + boundval = yasm_vp_expr(vp, p_object->symtab, line); + e = yasm_expr_create_tree( + yasm_expr_create_tree(yasm_expr_copy(parser_nasm->absstart), + YASM_EXPR_SUB, + yasm_expr_copy(parser_nasm->abspos), + cur_line), + YASM_EXPR_AND, + yasm_expr_create(YASM_EXPR_SUB, yasm_expr_expr(boundval), + yasm_expr_int(yasm_intnum_create_uint(1)), + cur_line), + cur_line); + parser_nasm->abspos = yasm_expr_create_tree( + parser_nasm->abspos, YASM_EXPR_ADD, e, cur_line); + } else if (!valparams) { + yasm_error_set(YASM_ERROR_SYNTAX, + N_("directive `%s' requires an argument"), "align"); + } else + dir_align(p_object, valparams, objext_valparams, line); + } else if (yasm__strcasecmp(name, "default") == 0) { + if (!valparams) + ; + else { + vp = yasm_vps_first(valparams); + while (vp) { + const char *id = yasm_vp_id(vp); + if (id) { + if (yasm__strcasecmp(id, "rel") == 0) + yasm_arch_set_var(p_object->arch, "default_rel", 1); + else if (yasm__strcasecmp(id, "abs") == 0) + yasm_arch_set_var(p_object->arch, "default_rel", 0); + else + yasm_error_set(YASM_ERROR_SYNTAX, + N_("unrecognized default `%s'"), id); + } else + yasm_error_set(YASM_ERROR_SYNTAX, + N_("unrecognized default value")); + vp = yasm_vps_next(vp); + } + } + } else + yasm_error_set(YASM_ERROR_SYNTAX, N_("unrecognized directive `%s'"), + name); + + if (parser_nasm->absstart && cursect) { + /* We switched to a new section. Get out of absolute section mode. */ + yasm_expr_destroy(parser_nasm->absstart); + parser_nasm->absstart = NULL; + if (parser_nasm->abspos) { + yasm_expr_destroy(parser_nasm->abspos); + parser_nasm->abspos = NULL; + } + } + + if (cursect) { + /* In case cursect changed or a bytecode was added, update prev_bc. */ + parser_nasm->prev_bc = yasm_section_bcs_last(cursect); + } + + if (valparams) + yasm_vps_delete(valparams); + if (objext_valparams) + yasm_vps_delete(objext_valparams); +} + +yasm_bytecode * +gas_intel_syntax_parse_instr(yasm_parser_nasm *parser_nasm, unsigned char *instr) +{ + yasm_bytecode *bc = NULL; + char *sinstr = (char *) instr; + + parser_nasm->s.bot = instr; + parser_nasm->s.tok = instr; + parser_nasm->s.ptr = instr; + parser_nasm->s.cur = instr; + parser_nasm->s.lim = instr + strlen(sinstr) + 1; + parser_nasm->s.top = parser_nasm->s.lim; + parser_nasm->peek_token = NONE; + + get_next_token(); + if (!is_eol()) { + bc = parse_instr(parser_nasm); + } + + return bc; +} diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-parser-struct.h b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-parser-struct.h new file mode 100644 index 0000000000..b9223510ba --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-parser-struct.h @@ -0,0 +1,85 @@ +/* + * NASM-compatible parser struct header file + * + * Copyright (C) 2002-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + */ +#ifndef YASM_NASM_PARSER_STRUCT_H +#define YASM_NASM_PARSER_STRUCT_H + +typedef union { + unsigned int int_info; + char *str_val; + yasm_intnum *intn; + yasm_floatnum *flt; + yasm_bytecode *bc; + uintptr_t arch_data; + struct { + char *contents; + size_t len; + } str; +} nasm_yystype; + +typedef struct yasm_parser_nasm { + int tasm; + int masm; + + /*@only@*/ yasm_object *object; + + /* last "base" label for local (.) labels */ + /*@null@*/ char *locallabel_base; + size_t locallabel_base_len; + + /*@dependent@*/ yasm_preproc *preproc; + /*@dependent@*/ yasm_errwarns *errwarns; + + /*@dependent@*/ yasm_linemap *linemap; + + /*@null@*/ yasm_bytecode *prev_bc; + + int save_input; + + yasm_scanner s; + int state; + + int token; /* enum tokentype or any character */ + nasm_yystype tokval; + char tokch; /* first character of token */ + + /* one token of lookahead; used sparingly */ + int peek_token; /* NONE if none */ + nasm_yystype peek_tokval; + char peek_tokch; + + /* Starting point of the absolute section. NULL if not in an absolute + * section. + */ + /*@null@*/ yasm_expr *absstart; + + /* Current location inside an absolute section (including the start). + * NULL if not in an absolute section. + */ + /*@null@*/ yasm_expr *abspos; +} yasm_parser_nasm; + +#endif diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-parser.c b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-parser.c new file mode 100644 index 0000000000..bd166929f7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-parser.c @@ -0,0 +1,140 @@ +/* + * NASM-compatible parser + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "nasm-parser.h" + + +static void +nasm_do_parse(yasm_object *object, yasm_preproc *pp, int save_input, + yasm_linemap *linemap, yasm_errwarns *errwarns, int tasm) +{ + yasm_parser_nasm parser_nasm; + + parser_nasm.tasm = tasm; + parser_nasm.masm = 0; + + parser_nasm.object = object; + parser_nasm.linemap = linemap; + + parser_nasm.locallabel_base = (char *)NULL; + parser_nasm.locallabel_base_len = 0; + + parser_nasm.preproc = pp; + parser_nasm.errwarns = errwarns; + + parser_nasm.prev_bc = yasm_section_bcs_first(object->cur_section); + + parser_nasm.save_input = save_input; + + parser_nasm.peek_token = NONE; + + parser_nasm.absstart = NULL; + parser_nasm.abspos = NULL; + + /* initialize scanner structure */ + yasm_scanner_initialize(&parser_nasm.s); + + parser_nasm.state = INITIAL; + + nasm_parser_parse(&parser_nasm); + + /*yasm_scanner_delete(&parser_nasm.s);*/ + + /* Free locallabel base if necessary */ + if (parser_nasm.locallabel_base) + yasm_xfree(parser_nasm.locallabel_base); + + /* Check for undefined symbols */ + yasm_symtab_parser_finalize(object->symtab, 0, errwarns); +} + +static void +nasm_parser_do_parse(yasm_object *object, yasm_preproc *pp, + int save_input, yasm_linemap *linemap, + yasm_errwarns *errwarns) +{ + nasm_do_parse(object, pp, save_input, linemap, errwarns, 0); +} + +#include "nasm-macros.c" + +/* Define valid preprocessors to use with this parser */ +static const char *nasm_parser_preproc_keywords[] = { + "raw", + "nasm", + NULL +}; + +static const yasm_stdmac nasm_parser_stdmacs[] = { + { "nasm", "nasm", nasm_standard_mac }, + { NULL, NULL, NULL } +}; + +/* Define parser structure -- see parser.h for details */ +yasm_parser_module yasm_nasm_LTX_parser = { + "NASM-compatible parser", + "nasm", + nasm_parser_preproc_keywords, + "nasm", + nasm_parser_stdmacs, + nasm_parser_do_parse +}; + +static void +tasm_parser_do_parse(yasm_object *object, yasm_preproc *pp, + int save_input, yasm_linemap *linemap, + yasm_errwarns *errwarns) +{ + yasm_symtab_set_case_sensitive(object->symtab, 0); + yasm_warn_disable(YASM_WARN_IMPLICIT_SIZE_OVERRIDE); + nasm_do_parse(object, pp, save_input, linemap, errwarns, 1); +} + +/* Define valid preprocessors to use with this parser */ +static const char *tasm_parser_preproc_keywords[] = { + "raw", + "tasm", + NULL +}; + +static const yasm_stdmac tasm_parser_stdmacs[] = { + { "tasm", "tasm", nasm_standard_mac }, + { NULL, NULL, NULL } +}; + +/* Define parser structure -- see parser.h for details */ +yasm_parser_module yasm_tasm_LTX_parser = { + "TASM-compatible parser", + "tasm", + tasm_parser_preproc_keywords, + "tasm", + tasm_parser_stdmacs, + tasm_parser_do_parse +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-parser.h b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-parser.h new file mode 100644 index 0000000000..dc19cfb5e0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-parser.h @@ -0,0 +1,123 @@ +/* + * NASM-compatible parser header file + * + * Copyright (C) 2002-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + */ +#ifndef YASM_NASM_PARSER_H +#define YASM_NASM_PARSER_H + +#include "nasm-parser-struct.h" + +#define YYCTYPE unsigned char + +#define MAX_SAVED_LINE_LEN 80 + +enum tokentype { + INTNUM = 258, + FLTNUM, + DIRECTIVE_NAME, + FILENAME, + STRING, + SIZE_OVERRIDE, + OFFSET, + DECLARE_DATA, + RESERVE_SPACE, + LABEL, + INCBIN, + EQU, + TIMES, + DUP, + SEG, + WRT, + ABS, + REL, + NOSPLIT, + STRICT, + INSN, + PREFIX, + REG, + REGGROUP, + SEGREG, + TARGETMOD, + LEFT_OP, + RIGHT_OP, + LOW, + HIGH, + SIGNDIV, + SIGNMOD, + START_SECTION_ID, + ID, + LOCAL_ID, + SPECIAL_ID, + NONLOCAL_ID, + LINE, + NONE /* special token for lookahead */ +}; + +enum nasm_parser_state { + INITIAL, + DIRECTIVE, + SECTION_DIRECTIVE, + DIRECTIVE2, + LINECHG, + LINECHG2, + INSTRUCTION +}; + +#define YYSTYPE nasm_yystype + +/* shorter access names to commonly used parser_nasm fields */ +#define p_object (parser_nasm->object) +#define p_symtab (parser_nasm->object->symtab) +#define cursect (parser_nasm->object->cur_section) +#define curtok (parser_nasm->token) +#define curval (parser_nasm->tokval) + +#define INTNUM_val (curval.intn) +#define FLTNUM_val (curval.flt) +#define DIRECTIVE_NAME_val (curval.str_val) +#define FILENAME_val (curval.str_val) +#define STRING_val (curval.str) +#define SIZE_OVERRIDE_val (curval.int_info) +#define DECLARE_DATA_val (curval.int_info) +#define RESERVE_SPACE_val (curval.int_info) +#define INSN_val (curval.bc) +#define PREFIX_val (curval.arch_data) +#define REG_val (curval.arch_data) +#define REGGROUP_val (curval.arch_data) +#define SEGREG_val (curval.arch_data) +#define TARGETMOD_val (curval.arch_data) +#define ID_val (curval.str_val) + +#define cur_line (yasm_linemap_get_current(parser_nasm->linemap)) + +#define p_expr_new_tree(l,o,r) yasm_expr_create_tree(l,o,r,cur_line) +#define p_expr_new_branch(o,r) yasm_expr_create_branch(o,r,cur_line) +#define p_expr_new_ident(r) yasm_expr_create_ident(r,cur_line) + +void nasm_parser_parse(yasm_parser_nasm *parser_nasm); +void nasm_parser_cleanup(yasm_parser_nasm *parser_nasm); +int nasm_parser_lex(YYSTYPE *lvalp, yasm_parser_nasm *parser_nasm); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-std.mac b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-std.mac new file mode 100644 index 0000000000..bb6e5c4e83 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-std.mac @@ -0,0 +1,109 @@ +; Standard macro set for NASM -*- nasm -*- + +; Note that although some user-level forms of directives are defined +; here, not all of them are: the user-level form of a format-specific +; directive should be defined in the module for that directive. + +; These two need to be defined, though the actual definitions will +; be constantly updated during preprocessing. +%define __FILE__ +%define __LINE__ + +%define __SECT__ [section .text] ; it ought to be defined, even if as nothing + +%imacro section 1+.nolist +%define __SECT__ [section %1] + __SECT__ +%endmacro +%imacro segment 1+.nolist +%define __SECT__ [segment %1] + __SECT__ +%endmacro + +%imacro absolute 1+.nolist +%define __SECT__ [absolute %1] + __SECT__ +%endmacro + +%imacro struc 1-2.nolist 0 +%push struc +%define %$strucname %1 +[absolute %2] +%$strucname: ; allow definition of `.member' to work sanely +%endmacro +%imacro endstruc 0.nolist +%{$strucname}_size EQU $ - %$strucname +%pop +__SECT__ +%endmacro + +%imacro istruc 1.nolist +%push istruc +%define %$strucname %1 +%$strucstart: +%endmacro +%imacro at 1-2+.nolist + times %1-($-%$strucstart) db 0 + %2 +%endmacro +%imacro iend 0.nolist + times %{$strucname}_size-($-%$strucstart) db 0 +%pop +%endmacro + +%imacro align 1-2+.nolist nop +%ifidni %2,nop + [align %1] +%else + times ($$-$) & ((%1)-1) %2 +%endif +%endmacro +%imacro alignb 1-2+.nolist resb 1 + times ($$-$) & ((%1)-1) %2 +%endmacro + +%imacro extern 1-*.nolist +%rep %0 +[extern %1] +%rotate 1 +%endrep +%endmacro + +%imacro bits 1+.nolist +[bits %1] +%endmacro + +%imacro use16 0.nolist +[bits 16] +%endmacro +%imacro use32 0.nolist +[bits 32] +%endmacro +%imacro use64 0.nolist +[bits 64] +%endmacro + +%imacro global 1-*.nolist +%rep %0 +[global %1] +%rotate 1 +%endrep +%endmacro + +%imacro common 1-*.nolist +%rep %0 +[common %1] +%rotate 1 +%endrep +%endmacro + +%imacro cpu 1+.nolist +[cpu %1] +%endmacro + +%imacro default 1+.nolist +[default %1] +%endmacro + +; NASM compatibility shim +%define __OUTPUT_FORMAT__ __YASM_OBJFMT__ diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-token.re b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-token.re new file mode 100644 index 0000000000..dba7137e90 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/nasm-token.re @@ -0,0 +1,795 @@ +/* + * NASM-compatible re2c lexer + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Portions based on re2c's example code. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "modules/parsers/nasm/nasm-parser.h" +#include "modules/preprocs/nasm/nasm.h" + + +#define YYCURSOR cursor +#define YYLIMIT (s->lim) +#define YYMARKER (s->ptr) +#define YYFILL(n) {} + +#define RETURN(i) {s->cur = cursor; parser_nasm->tokch = s->tok[0]; \ + return i;} + +#define SCANINIT() {s->tok = cursor;} + +#define TOK ((char *)s->tok) +#define TOKLEN (size_t)(cursor-s->tok) + + +/* starting size of string buffer */ +#define STRBUF_ALLOC_SIZE 128 + +/* string buffer used when parsing strings/character constants */ +static YYCTYPE *strbuf = NULL; + +/* length of strbuf (including terminating NULL character) */ +static size_t strbuf_size = 0; + +static int linechg_numcount; + +/*!re2c + any = [\001-\377]; + digit = [0-9]; + iletter = [a-zA-Z]; + bindigit = [01_]; + octdigit = [0-7_]; + hexdigit = [0-9a-fA-F_]; + ws = [ \t\r]; + quot = ["']; +*/ + +static int +handle_dot_label(YYSTYPE *lvalp, char *tok, size_t toklen, size_t zeropos, + yasm_parser_nasm *parser_nasm) +{ + /* check for special non-local labels like ..start */ + if (tok[zeropos+1] == '.') { + lvalp->str_val = yasm__xstrndup(tok+zeropos+(parser_nasm->tasm?2:0), + toklen-zeropos-(parser_nasm->tasm?2:0)); + /* check for special non-local ..@label */ + if (lvalp->str_val[zeropos+2] == '@') + return NONLOCAL_ID; + return SPECIAL_ID; + } + if (parser_nasm->masm && tok[zeropos] == '.') { + lvalp->str_val = yasm__xstrndup(tok + zeropos, toklen - zeropos); + return SPECIAL_ID; + } + if (parser_nasm->tasm && (!tasm_locals || + (tok[zeropos] == '.' && + tok[zeropos+1] != '@' && tok[zeropos+2] != '@'))) { + /* no locals on Tasm without the 'locals' directive */ + /* .foo is never local either, but .@@foo may be (local structure + * members) */ + lvalp->str_val = yasm__xstrndup(tok + zeropos, toklen - zeropos); + return SPECIAL_ID; + } + if (!parser_nasm->locallabel_base) { + lvalp->str_val = yasm__xstrndup(tok+zeropos, toklen-zeropos); + yasm_warn_set(YASM_WARN_GENERAL, + N_("no non-local label before `%s'"), + lvalp->str_val); + } else { + size_t len = toklen - zeropos + parser_nasm->locallabel_base_len; + lvalp->str_val = yasm_xmalloc(len + 1); + strcpy(lvalp->str_val, parser_nasm->locallabel_base); + strncat(lvalp->str_val, tok+zeropos, toklen-zeropos); + lvalp->str_val[len] = '\0'; + } + + return LOCAL_ID; +} + +int +nasm_parser_lex(YYSTYPE *lvalp, yasm_parser_nasm *parser_nasm) +{ + yasm_scanner *s = &parser_nasm->s; + YYCTYPE *cursor = s->cur; + YYCTYPE endch; + size_t count; + YYCTYPE savech; + + /* Handle one token of lookahead */ + if (parser_nasm->peek_token != NONE) { + int tok = parser_nasm->peek_token; + *lvalp = parser_nasm->peek_tokval; /* structure copy */ + parser_nasm->tokch = parser_nasm->peek_tokch; + parser_nasm->peek_token = NONE; + return tok; + } + + /* Catch EOL (EOF from the scanner perspective) */ + if (s->eof && cursor == s->eof) + return 0; + + /* Jump to proper "exclusive" states */ + switch (parser_nasm->state) { + case DIRECTIVE: + goto directive; + case SECTION_DIRECTIVE: + goto section_directive; + case DIRECTIVE2: + goto directive2; + case LINECHG: + goto linechg; + case LINECHG2: + goto linechg2; + default: + break; + } + +scan: + SCANINIT(); + if (*cursor == '\0') + goto endofinput; + + /*!re2c + /* standard decimal integer */ + digit+ { + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + lvalp->intn = yasm_intnum_create_dec(TOK); + s->tok[TOKLEN] = savech; + RETURN(INTNUM); + } + /* 10010011b - binary number */ + + [01] bindigit* 'b' { + s->tok[TOKLEN-1] = '\0'; /* strip off 'b' */ + lvalp->intn = yasm_intnum_create_bin(TOK); + RETURN(INTNUM); + } + + /* 777q or 777o - octal number */ + [0-7] octdigit* [qQoO] { + s->tok[TOKLEN-1] = '\0'; /* strip off 'q' or 'o' */ + lvalp->intn = yasm_intnum_create_oct(TOK); + RETURN(INTNUM); + } + + /* 0AAh form of hexidecimal number */ + digit hexdigit* 'h' { + s->tok[TOKLEN-1] = '\0'; /* strip off 'h' */ + lvalp->intn = yasm_intnum_create_hex(TOK); + RETURN(INTNUM); + } + + /* $0AA and 0xAA forms of hexidecimal number */ + (("$" digit) | '0x') hexdigit+ { + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + if (s->tok[1] == 'x' || s->tok[1] == 'X') + /* skip 0 and x */ + lvalp->intn = yasm_intnum_create_hex(TOK+2); + else + /* don't skip 0 */ + lvalp->intn = yasm_intnum_create_hex(TOK+1); + s->tok[TOKLEN] = savech; + RETURN(INTNUM); + } + + /* floating point value */ + digit+ "." digit* ('e' [-+]? digit+)? { + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + lvalp->flt = yasm_floatnum_create(TOK); + s->tok[TOKLEN] = savech; + RETURN(FLTNUM); + } + + /* string/character constant values */ + quot { + endch = s->tok[0]; + goto stringconst; + } + + /* %line linenum+lineinc filename */ + "%line" { + parser_nasm->state = LINECHG; + linechg_numcount = 0; + RETURN(LINE); + } + + /* size specifiers */ + 'byte' { lvalp->int_info = 8; RETURN(SIZE_OVERRIDE); } + 'hword' { + lvalp->int_info = yasm_arch_wordsize(p_object->arch)/2; + RETURN(SIZE_OVERRIDE); + } + 'word' { + lvalp->int_info = yasm_arch_wordsize(p_object->arch); + RETURN(SIZE_OVERRIDE); + } + 'dword' | 'long' { + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*2; + RETURN(SIZE_OVERRIDE); + } + 'qword' { + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*4; + RETURN(SIZE_OVERRIDE); + } + 'tword' { lvalp->int_info = 80; RETURN(SIZE_OVERRIDE); } + 'dqword' { + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*8; + RETURN(SIZE_OVERRIDE); + } + 'oword' { + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*8; + RETURN(SIZE_OVERRIDE); + } + 'yword' { + lvalp->int_info = 256; + RETURN(SIZE_OVERRIDE); + } + + /* pseudo-instructions */ + 'db' { + lvalp->int_info = 8; + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } + 'dhw' { + lvalp->int_info = yasm_arch_wordsize(p_object->arch)/2; + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } + 'dw' { + lvalp->int_info = yasm_arch_wordsize(p_object->arch); + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } + 'dd' { + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*2; + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } + 'dq' { + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*4; + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } + 'dt' { + lvalp->int_info = 80; + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } + 'ddq' { + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*8; + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } + 'do' { + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*8; + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } + 'dy' { + lvalp->int_info = 256; + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } + + 'resb' { + lvalp->int_info = 8; + parser_nasm->state = INSTRUCTION; + RETURN(RESERVE_SPACE); + } + 'reshw' { + lvalp->int_info = yasm_arch_wordsize(p_object->arch)/2; + parser_nasm->state = INSTRUCTION; + RETURN(RESERVE_SPACE); + } + 'resw' { + lvalp->int_info = yasm_arch_wordsize(p_object->arch); + parser_nasm->state = INSTRUCTION; + RETURN(RESERVE_SPACE); + } + 'resd' { + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*2; + parser_nasm->state = INSTRUCTION; + RETURN(RESERVE_SPACE); + } + 'resq' { + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*4; + parser_nasm->state = INSTRUCTION; + RETURN(RESERVE_SPACE); + } + 'rest' { + lvalp->int_info = 80; + parser_nasm->state = INSTRUCTION; + RETURN(RESERVE_SPACE); + } + 'resdq' { + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*8; + parser_nasm->state = INSTRUCTION; + RETURN(RESERVE_SPACE); + } + 'reso' { + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*8; + parser_nasm->state = INSTRUCTION; + RETURN(RESERVE_SPACE); + } + 'resy' { + lvalp->int_info = 256; + parser_nasm->state = INSTRUCTION; + RETURN(RESERVE_SPACE); + } + + 'incbin' { RETURN(INCBIN); } + + 'equ' { RETURN(EQU); } + + 'times' { RETURN(TIMES); } + + 'seg' { RETURN(SEG); } + 'wrt' { RETURN(WRT); } + + 'abs' { RETURN(ABS); } + 'rel' { RETURN(REL); } + + 'nosplit' { RETURN(NOSPLIT); } + 'strict' { RETURN(STRICT); } + + /* operators */ + "<<" { RETURN(LEFT_OP); } + ">>" { RETURN(RIGHT_OP); } + "//" { RETURN(SIGNDIV); } + "%%" { RETURN(SIGNMOD); } + "$$" { RETURN(START_SECTION_ID); } + [-+|^*&/%~$():=,\[?] { RETURN(s->tok[0]); } + "]" { RETURN(s->tok[0]); } + + /* local label (.label) */ + ("." | "@@") [a-zA-Z0-9_$#@~.?]+ { + RETURN(handle_dot_label(lvalp, TOK, TOKLEN, 0, parser_nasm)); + } + + /* forced identifier */ + "$" [a-zA-Z0-9_$#@~.?]+ { + if (TOK[1] == '.' || + (parser_nasm->tasm && TOK[1] == '@' && TOK[2] == '@')) { + /* handle like .label */ + RETURN(handle_dot_label(lvalp, TOK, TOKLEN, 1, parser_nasm)); + } + lvalp->str_val = yasm__xstrndup(TOK+1, TOKLEN-1); + RETURN(ID); + } + + /* identifier that may be a register, instruction, etc. */ + [a-zA-Z_?@][a-zA-Z0-9_$#@~.?]* { + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + if (parser_nasm->state != INSTRUCTION) { + uintptr_t prefix; + switch (yasm_arch_parse_check_insnprefix + (p_object->arch, TOK, TOKLEN, cur_line, &lvalp->bc, + &prefix)) { + case YASM_ARCH_INSN: + parser_nasm->state = INSTRUCTION; + s->tok[TOKLEN] = savech; + RETURN(INSN); + case YASM_ARCH_PREFIX: + lvalp->arch_data = prefix; + s->tok[TOKLEN] = savech; + RETURN(PREFIX); + default: + break; + } + } + switch (yasm_arch_parse_check_regtmod + (p_object->arch, TOK, TOKLEN, &lvalp->arch_data)) { + case YASM_ARCH_REG: + s->tok[TOKLEN] = savech; + RETURN(REG); + case YASM_ARCH_SEGREG: + s->tok[TOKLEN] = savech; + RETURN(SEGREG); + case YASM_ARCH_TARGETMOD: + s->tok[TOKLEN] = savech; + RETURN(TARGETMOD); + case YASM_ARCH_REGGROUP: + if (parser_nasm->masm) { + s->tok[TOKLEN] = savech; + RETURN(REGGROUP); + } + default: + break; + } + if (parser_nasm->masm) { + if (!yasm__strcasecmp(TOK, "offset")) { + s->tok[TOKLEN] = savech; + RETURN(OFFSET); + } + } else if (parser_nasm->tasm) { + if (!yasm__strcasecmp(TOK, "shl")) { + s->tok[TOKLEN] = savech; + RETURN(LEFT_OP); + } + if (!yasm__strcasecmp(TOK, "shr")) { + s->tok[TOKLEN] = savech; + RETURN(RIGHT_OP); + } + if (!yasm__strcasecmp(TOK, "and")) { + s->tok[TOKLEN] = savech; + RETURN('&'); + } + if (!yasm__strcasecmp(TOK, "or")) { + s->tok[TOKLEN] = savech; + RETURN('|'); + } + if (!yasm__strcasecmp(TOK, "not")) { + s->tok[TOKLEN] = savech; + RETURN('~'); + } + if (!yasm__strcasecmp(TOK, "low")) { + s->tok[TOKLEN] = savech; + RETURN(LOW); + } + if (!yasm__strcasecmp(TOK, "high")) { + s->tok[TOKLEN] = savech; + RETURN(HIGH); + } + if (!yasm__strcasecmp(TOK, "offset")) { + s->tok[TOKLEN] = savech; + RETURN(OFFSET); + } + if (!yasm__strcasecmp(TOK, "fword")) { + s->tok[TOKLEN] = savech; + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*2; + RETURN(SIZE_OVERRIDE); + } + if (!yasm__strcasecmp(TOK, "df")) { + s->tok[TOKLEN] = savech; + lvalp->int_info = yasm_arch_wordsize(p_object->arch)*3; + parser_nasm->state = INSTRUCTION; + RETURN(DECLARE_DATA); + } + if (!yasm__strcasecmp(TOK, "label")) { + s->tok[TOKLEN] = savech; + RETURN(LABEL); + } + if (!yasm__strcasecmp(TOK, "dup")) { + s->tok[TOKLEN] = savech; + RETURN(DUP); + } + } + /* Propagate errors in case we got a warning from the arch */ + yasm_errwarn_propagate(parser_nasm->errwarns, cur_line); + /* Just an identifier, return as such. */ + s->tok[TOKLEN] = savech; + lvalp->str_val = yasm__xstrndup(TOK, TOKLEN); + RETURN(ID); + } + + ";" (any \ [\000])* { goto scan; } + + ws+ { goto scan; } + + [\000] { goto endofinput; } + + any { + yasm_warn_set(YASM_WARN_UNREC_CHAR, + N_("ignoring unrecognized character `%s'"), + yasm__conv_unprint(s->tok[0])); + goto scan; + } + */ + + /* %line linenum+lineinc filename */ +linechg: + SCANINIT(); + if (*cursor == '\0') + goto endofinput; + + /*!re2c + digit+ { + linechg_numcount++; + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + lvalp->intn = yasm_intnum_create_dec(TOK); + s->tok[TOKLEN] = savech; + RETURN(INTNUM); + } + + [\000] { goto endofinput; } + + "+" { + RETURN(s->tok[0]); + } + + ws+ { + if (linechg_numcount == 2) { + parser_nasm->state = LINECHG2; + goto linechg2; + } + goto linechg; + } + + any { + yasm_warn_set(YASM_WARN_UNREC_CHAR, + N_("ignoring unrecognized character `%s'"), + yasm__conv_unprint(s->tok[0])); + goto linechg; + } + */ + +linechg2: + SCANINIT(); + if (*cursor == '\0') + goto endofinput; + + /*!re2c + [\000] { goto endofinput; } + + "\r" { goto linechg2; } + + (any \ [\000])+ { + parser_nasm->state = LINECHG; + lvalp->str_val = yasm__xstrndup(TOK, TOKLEN); + RETURN(FILENAME); + } + */ + + /* directive: [name value] */ +directive: + SCANINIT(); + if (*cursor == '\0') + goto endofinput; + + /*!re2c + [\]\000] { goto endofinput; } + + [a-zA-Z_][a-zA-Z_0-9]* { + lvalp->str_val = yasm__xstrndup(TOK, TOKLEN); + if (yasm__strcasecmp(lvalp->str_val, "section") == 0 || + yasm__strcasecmp(lvalp->str_val, "segment") == 0) + parser_nasm->state = SECTION_DIRECTIVE; + else + parser_nasm->state = DIRECTIVE2; + RETURN(DIRECTIVE_NAME); + } + + any { + yasm_warn_set(YASM_WARN_UNREC_CHAR, + N_("ignoring unrecognized character `%s'"), + yasm__conv_unprint(s->tok[0])); + goto directive; + } + */ + + /* section directive (the section name portion thereof) */ +section_directive: + SCANINIT(); + if (*cursor == '\0') + goto endofinput; + + /*!re2c + [a-zA-Z0-9_$#@~.?-]+ { + lvalp->str.contents = yasm__xstrndup(TOK, TOKLEN); + lvalp->str.len = TOKLEN; + parser_nasm->state = DIRECTIVE2; + RETURN(STRING); + } + + quot { + parser_nasm->state = DIRECTIVE2; + endch = s->tok[0]; + goto stringconst; + } + + ws+ { + parser_nasm->state = DIRECTIVE2; + goto section_directive; + } + + [\]\000] { goto endofinput; } + + any { + yasm_warn_set(YASM_WARN_UNREC_CHAR, + N_("ignoring unrecognized character `%s'"), + yasm__conv_unprint(s->tok[0])); + goto section_directive; + } + */ + + /* inner part of directive */ +directive2: + SCANINIT(); + if (*cursor == '\0') + goto endofinput; + + /*!re2c + /* standard decimal integer */ + digit+ { + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + lvalp->intn = yasm_intnum_create_dec(TOK); + s->tok[TOKLEN] = savech; + RETURN(INTNUM); + } + /* 10010011b - binary number */ + + [01] bindigit* 'b' { + s->tok[TOKLEN-1] = '\0'; /* strip off 'b' */ + lvalp->intn = yasm_intnum_create_bin(TOK); + RETURN(INTNUM); + } + + /* 777q or 777o - octal number */ + [0-7] octdigit* [qQoO] { + s->tok[TOKLEN-1] = '\0'; /* strip off 'q' or 'o' */ + lvalp->intn = yasm_intnum_create_oct(TOK); + RETURN(INTNUM); + } + + /* 0AAh form of hexidecimal number */ + digit hexdigit* 'h' { + s->tok[TOKLEN-1] = '\0'; /* strip off 'h' */ + lvalp->intn = yasm_intnum_create_hex(TOK); + RETURN(INTNUM); + } + + /* $0AA and 0xAA forms of hexidecimal number */ + (("$" digit) | '0x') hexdigit+ { + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + if (s->tok[1] == 'x' || s->tok[1] == 'X') + /* skip 0 and x */ + lvalp->intn = yasm_intnum_create_hex(TOK+2); + else + /* don't skip 0 */ + lvalp->intn = yasm_intnum_create_hex(TOK+1); + s->tok[TOKLEN] = savech; + RETURN(INTNUM); + } + + /* string/character constant values */ + quot { + endch = s->tok[0]; + goto stringconst; + } + + /* operators */ + "<<" { RETURN(LEFT_OP); } + ">>" { RETURN(RIGHT_OP); } + "//" { RETURN(SIGNDIV); } + "%%" { RETURN(SIGNMOD); } + [-+|^*&/%~$():=,\[] { RETURN(s->tok[0]); } + + /* handle ] for directives */ + "]" { goto endofinput; } + + /* forced identifier; within directive, don't strip '$', this is + * handled later. + */ + "$" [a-zA-Z0-9_$#@~.?]+ { + lvalp->str_val = yasm__xstrndup(TOK, TOKLEN); + RETURN(ID); + } + + /* identifier; within directive, no local label mechanism */ + [a-zA-Z_.?][a-zA-Z0-9_$#@~.?]* { + savech = s->tok[TOKLEN]; + s->tok[TOKLEN] = '\0'; + switch (yasm_arch_parse_check_regtmod + (p_object->arch, TOK, TOKLEN, &lvalp->arch_data)) { + case YASM_ARCH_REG: + s->tok[TOKLEN] = savech; + RETURN(REG); + default: + s->tok[TOKLEN] = savech; + } + /* Propagate errors in case we got a warning from the arch */ + yasm_errwarn_propagate(parser_nasm->errwarns, cur_line); + /* Just an identifier, return as such. */ + lvalp->str_val = yasm__xstrndup(TOK, TOKLEN); + RETURN(ID); + } + + ";" (any \ [\000])* { goto directive2; } + + ws+ { goto directive2; } + + [\000] { goto endofinput; } + + any { + yasm_warn_set(YASM_WARN_UNREC_CHAR, + N_("ignoring unrecognized character `%s'"), + yasm__conv_unprint(s->tok[0])); + goto scan; + } + */ + + /* string/character constant values */ +stringconst: + strbuf = yasm_xmalloc(STRBUF_ALLOC_SIZE); + strbuf_size = STRBUF_ALLOC_SIZE; + count = 0; + +stringconst_scan: + SCANINIT(); + if (*cursor == '\0') + goto stringconst_error; + + /*!re2c + [\000] { goto stringconst_error; } + + "''" | '""' { + if (endch != s->tok[0]) { + strbuf[count++] = s->tok[0]; + if (count >= strbuf_size) { + strbuf = yasm_xrealloc(strbuf, + strbuf_size + STRBUF_ALLOC_SIZE); + strbuf_size += STRBUF_ALLOC_SIZE; + } + } else if (!parser_nasm->tasm) { + YYCURSOR--; + goto stringconst_end; + } + strbuf[count++] = s->tok[0]; + if (count >= strbuf_size) { + strbuf = yasm_xrealloc(strbuf, strbuf_size + STRBUF_ALLOC_SIZE); + strbuf_size += STRBUF_ALLOC_SIZE; + } + goto stringconst_scan; + } + + any { + if (s->tok[0] == endch) + goto stringconst_end; + + strbuf[count++] = s->tok[0]; + if (count >= strbuf_size) { + strbuf = yasm_xrealloc(strbuf, strbuf_size + STRBUF_ALLOC_SIZE); + strbuf_size += STRBUF_ALLOC_SIZE; + } + + goto stringconst_scan; + } + */ + +stringconst_error: + yasm_error_set(YASM_ERROR_SYNTAX, N_("unterminated string")); + +stringconst_end: + strbuf[count] = '\0'; + lvalp->str.contents = (char *)strbuf; + lvalp->str.len = count; + RETURN(STRING); + +endofinput: + parser_nasm->state = INITIAL; + RETURN(s->tok[0]); +} diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/Makefile.inc new file mode 100644 index 0000000000..56d0b926e2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/Makefile.inc @@ -0,0 +1,51 @@ +TESTS += modules/parsers/nasm/tests/nasm_test.sh + +EXTRA_DIST += modules/parsers/nasm/tests/nasm_test.sh +EXTRA_DIST += modules/parsers/nasm/tests/alignnop16.asm +EXTRA_DIST += modules/parsers/nasm/tests/alignnop16.hex +EXTRA_DIST += modules/parsers/nasm/tests/alignnop32.asm +EXTRA_DIST += modules/parsers/nasm/tests/alignnop32.hex +EXTRA_DIST += modules/parsers/nasm/tests/charconstmath.asm +EXTRA_DIST += modules/parsers/nasm/tests/charconstmath.hex +EXTRA_DIST += modules/parsers/nasm/tests/dirwarning.asm +EXTRA_DIST += modules/parsers/nasm/tests/dirwarning.errwarn +EXTRA_DIST += modules/parsers/nasm/tests/dirwarning.hex +EXTRA_DIST += modules/parsers/nasm/tests/dy.asm +EXTRA_DIST += modules/parsers/nasm/tests/dy.hex +EXTRA_DIST += modules/parsers/nasm/tests/endcomma.asm +EXTRA_DIST += modules/parsers/nasm/tests/endcomma.hex +EXTRA_DIST += modules/parsers/nasm/tests/equcolon.asm +EXTRA_DIST += modules/parsers/nasm/tests/equcolon.hex +EXTRA_DIST += modules/parsers/nasm/tests/equlocal.asm +EXTRA_DIST += modules/parsers/nasm/tests/equlocal.hex +EXTRA_DIST += modules/parsers/nasm/tests/hexconst.asm +EXTRA_DIST += modules/parsers/nasm/tests/hexconst.hex +EXTRA_DIST += modules/parsers/nasm/tests/long.asm +EXTRA_DIST += modules/parsers/nasm/tests/long.hex +EXTRA_DIST += modules/parsers/nasm/tests/locallabel.asm +EXTRA_DIST += modules/parsers/nasm/tests/locallabel.hex +EXTRA_DIST += modules/parsers/nasm/tests/locallabel2.asm +EXTRA_DIST += modules/parsers/nasm/tests/locallabel2.hex +EXTRA_DIST += modules/parsers/nasm/tests/nasm-prefix.asm +EXTRA_DIST += modules/parsers/nasm/tests/nasm-prefix.hex +EXTRA_DIST += modules/parsers/nasm/tests/newsect.asm +EXTRA_DIST += modules/parsers/nasm/tests/newsect.hex +EXTRA_DIST += modules/parsers/nasm/tests/orphannowarn.asm +EXTRA_DIST += modules/parsers/nasm/tests/orphannowarn.hex +EXTRA_DIST += modules/parsers/nasm/tests/prevlocalwarn.asm +EXTRA_DIST += modules/parsers/nasm/tests/prevlocalwarn.errwarn +EXTRA_DIST += modules/parsers/nasm/tests/prevlocalwarn.hex +EXTRA_DIST += modules/parsers/nasm/tests/strucalign.asm +EXTRA_DIST += modules/parsers/nasm/tests/strucalign.hex +EXTRA_DIST += modules/parsers/nasm/tests/struczero.asm +EXTRA_DIST += modules/parsers/nasm/tests/struczero.hex +EXTRA_DIST += modules/parsers/nasm/tests/strucbase.asm +EXTRA_DIST += modules/parsers/nasm/tests/strucbase.hex +EXTRA_DIST += modules/parsers/nasm/tests/syntax-err.asm +EXTRA_DIST += modules/parsers/nasm/tests/syntax-err.errwarn +EXTRA_DIST += modules/parsers/nasm/tests/uscore.asm +EXTRA_DIST += modules/parsers/nasm/tests/uscore.hex + +EXTRA_DIST += modules/parsers/nasm/tests/worphan/Makefile.inc + +include modules/parsers/nasm/tests/worphan/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/alignnop16.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/alignnop16.asm new file mode 100644 index 0000000000..dd41361919 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/alignnop16.asm @@ -0,0 +1,4 @@ +bits 16 +mov eax,32 +align 16 +ret diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/alignnop16.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/alignnop16.hex new file mode 100644 index 0000000000..de32de77bd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/alignnop16.hex @@ -0,0 +1,17 @@ +66 +b8 +20 +00 +00 +00 +eb +08 +90 +90 +90 +90 +90 +90 +90 +90 +c3 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/alignnop32.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/alignnop32.asm new file mode 100644 index 0000000000..13410d06f1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/alignnop32.asm @@ -0,0 +1,4 @@ +bits 32 +mov eax,32 +align 16 +ret diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/alignnop32.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/alignnop32.hex new file mode 100644 index 0000000000..4af43b8cb7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/alignnop32.hex @@ -0,0 +1,17 @@ +b8 +20 +00 +00 +00 +eb +09 +90 +90 +90 +90 +90 +90 +90 +90 +90 +c3 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/charconstmath.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/charconstmath.asm new file mode 100644 index 0000000000..b673bab64f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/charconstmath.asm @@ -0,0 +1 @@ +db "string", " "+80h diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/charconstmath.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/charconstmath.hex new file mode 100644 index 0000000000..199e34ffa4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/charconstmath.hex @@ -0,0 +1,7 @@ +73 +74 +72 +69 +6e +67 +a0 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dirwarning.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dirwarning.asm new file mode 100644 index 0000000000..265d60a5bc --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dirwarning.asm @@ -0,0 +1 @@ +[warning -w] diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dirwarning.errwarn b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dirwarning.errwarn new file mode 100644 index 0000000000..366c8d6605 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dirwarning.errwarn @@ -0,0 +1 @@ +-:1: warning: [warning] directive not supported; ignored diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dirwarning.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dirwarning.hex new file mode 100644 index 0000000000..e69de29bb2 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dy.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dy.asm new file mode 100644 index 0000000000..5a74e2f40e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dy.asm @@ -0,0 +1,5 @@ +dy 0x0123456789abcdef00112233445566778899aabbccddeeff1111222233334444 +dw label +section .bss +resy 1 +label: diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dy.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dy.hex new file mode 100644 index 0000000000..ead24e69de --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/dy.hex @@ -0,0 +1,34 @@ +44 +44 +33 +33 +22 +22 +11 +11 +ff +ee +dd +cc +bb +aa +99 +88 +77 +66 +55 +44 +33 +22 +11 +00 +ef +cd +ab +89 +67 +45 +23 +01 +44 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/endcomma.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/endcomma.asm new file mode 100644 index 0000000000..8e09610aad --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/endcomma.asm @@ -0,0 +1,2 @@ +[bits 32] +db 1,2,3,4, diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/endcomma.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/endcomma.hex new file mode 100644 index 0000000000..68d6ef9f8d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/endcomma.hex @@ -0,0 +1,4 @@ +01 +02 +03 +04 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/equcolon.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/equcolon.asm new file mode 100644 index 0000000000..9963720421 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/equcolon.asm @@ -0,0 +1,3 @@ +equval: equ 5 +equval2 equ 7 +db equval, equval2 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/equcolon.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/equcolon.hex new file mode 100644 index 0000000000..3a4ad9a851 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/equcolon.hex @@ -0,0 +1,2 @@ +05 +07 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/equlocal.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/equlocal.asm new file mode 100644 index 0000000000..ca54062011 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/equlocal.asm @@ -0,0 +1,7 @@ +blah +.local equ 5 +blah2 +db blah.local +.local +nonlocal equ 6 +je .local diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/equlocal.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/equlocal.hex new file mode 100644 index 0000000000..0ee1d6e999 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/equlocal.hex @@ -0,0 +1,3 @@ +05 +74 +fe diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/hexconst.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/hexconst.asm new file mode 100644 index 0000000000..a0039b0255 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/hexconst.asm @@ -0,0 +1,2 @@ +dd 0x500 +dd 0X500 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/hexconst.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/hexconst.hex new file mode 100644 index 0000000000..90a00fe9ee --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/hexconst.hex @@ -0,0 +1,8 @@ +00 +05 +00 +00 +00 +05 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/locallabel.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/locallabel.asm new file mode 100644 index 0000000000..013de5308e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/locallabel.asm @@ -0,0 +1,21 @@ +label: +db 0 +.local: +db 0 +..@local1: +.local2: +dw label.local +dw label.local2 + +$label2: +db 0 +$.local: +db 0 +$..@local2: +$.local2: +dw label2.local +dw label2.local2 +dw $label2.local +dw $label2.local2 + + diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/locallabel.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/locallabel.hex new file mode 100644 index 0000000000..4aaba4ef76 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/locallabel.hex @@ -0,0 +1,16 @@ +00 +00 +01 +00 +02 +00 +00 +00 +07 +00 +08 +00 +07 +00 +08 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/locallabel2.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/locallabel2.asm new file mode 100644 index 0000000000..ea0f8c92b1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/locallabel2.asm @@ -0,0 +1,4 @@ +nl1: +nl2:db .0 - nl2 +.0: db .1 - nl2 +.1: diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/locallabel2.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/locallabel2.hex new file mode 100644 index 0000000000..26334819d4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/locallabel2.hex @@ -0,0 +1,2 @@ +01 +02 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/long.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/long.asm new file mode 100644 index 0000000000..562eddfb57 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/long.asm @@ -0,0 +1 @@ +mov [eax], long 0 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/long.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/long.hex new file mode 100644 index 0000000000..72e9cc5dda --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/long.hex @@ -0,0 +1,8 @@ +67 +66 +c7 +00 +00 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/nasm-prefix.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/nasm-prefix.asm new file mode 100644 index 0000000000..2bd7824f43 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/nasm-prefix.asm @@ -0,0 +1,5 @@ +es +mov ax, [bx] + +a32 +mov ax, [bx] diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/nasm-prefix.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/nasm-prefix.hex new file mode 100644 index 0000000000..24bdfef629 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/nasm-prefix.hex @@ -0,0 +1,6 @@ +26 +8b +07 +67 +8b +07 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/nasm_test.sh b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/nasm_test.sh new file mode 100755 index 0000000000..0ff39b6eb0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/nasm_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh nasm_test modules/parsers/nasm/tests "nasm-compat parser" "-f bin" "" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/newsect.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/newsect.asm new file mode 100644 index 0000000000..420e17ca13 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/newsect.asm @@ -0,0 +1,10 @@ +[absolute 0] +mytype: +.long resd 1 +mytype_size: +[section .text] +lbl: +..@6.strucstart: +times mytype.long-($-..@6.strucstart) db 0 +dd 'ABCD' +times mytype_size-($-..@6.strucstart) db 0 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/newsect.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/newsect.hex new file mode 100644 index 0000000000..7b68ada656 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/newsect.hex @@ -0,0 +1,4 @@ +41 +42 +43 +44 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/orphannowarn.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/orphannowarn.asm new file mode 100644 index 0000000000..ebf6c0b852 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/orphannowarn.asm @@ -0,0 +1,12 @@ +label: +label2 +label3 + + jmp label + jmp label2 + +equ2: equ 5 +equ3 equ 5 +label5: times 2 db 5 +label4 times 2 db 5 + diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/orphannowarn.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/orphannowarn.hex new file mode 100644 index 0000000000..3a32a007fa --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/orphannowarn.hex @@ -0,0 +1,8 @@ +eb +fe +eb +fc +05 +05 +05 +05 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/prevlocalwarn.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/prevlocalwarn.asm new file mode 100644 index 0000000000..2d068b3ab4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/prevlocalwarn.asm @@ -0,0 +1,5 @@ +[bits 16] +[section .text] + +.local: + xor ax, ax diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/prevlocalwarn.errwarn b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/prevlocalwarn.errwarn new file mode 100644 index 0000000000..c523eaef41 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/prevlocalwarn.errwarn @@ -0,0 +1 @@ +-:4: warning: no non-local label before `.local' diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/prevlocalwarn.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/prevlocalwarn.hex new file mode 100644 index 0000000000..53f450a3ac --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/prevlocalwarn.hex @@ -0,0 +1,2 @@ +31 +c0 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/strucalign.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/strucalign.asm new file mode 100644 index 0000000000..f3fbd48507 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/strucalign.asm @@ -0,0 +1,14 @@ +struc bug +times (64-$) resb 1 +.member: +times (128-($-$$)) resb 1 +.member2: +alignb 256 +.member3: +[align 512] +endstruc +dd bug +dd bug.member +dd bug.member2 +dd bug.member3 +dd bug_size diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/strucalign.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/strucalign.hex new file mode 100644 index 0000000000..d3baa2ae96 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/strucalign.hex @@ -0,0 +1,20 @@ +00 +00 +00 +00 +40 +00 +00 +00 +80 +00 +00 +00 +00 +01 +00 +00 +00 +02 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/strucbase.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/strucbase.asm new file mode 100644 index 0000000000..81e2fc03d2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/strucbase.asm @@ -0,0 +1,11 @@ +struc base, -7 +.a: resb 1 +.b: resb 1 +endstruc + +; Expect base and base.a to appear at -7, base.b at -6 +db base +db base.a +db base.b +; The size should be '2' here +db base_size diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/strucbase.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/strucbase.hex new file mode 100644 index 0000000000..5d48c5ea6c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/strucbase.hex @@ -0,0 +1,4 @@ +f9 +f9 +fa +02 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/struczero.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/struczero.asm new file mode 100644 index 0000000000..26bf13df55 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/struczero.asm @@ -0,0 +1,7 @@ +struc MYSTRUC +.zero resd 0 +endstruc + +foo: +mov eax, [ecx+MYSTRUC.zero] +ret diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/struczero.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/struczero.hex new file mode 100644 index 0000000000..769fb4e71e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/struczero.hex @@ -0,0 +1,5 @@ +67 +66 +8b +01 +c3 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/syntax-err.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/syntax-err.asm new file mode 100644 index 0000000000..f36010a7d6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/syntax-err.asm @@ -0,0 +1,17 @@ +global crc32 +crc32: resd 1 +cli: +mov ax, 5% +mov ax, % +mov ax, ~ +mov ax, + +mov ax, - +mov ax, ( +mov ax, ) +ret 5% +ret % +ret ~ +ret + +ret - +ret ( +ret ) diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/syntax-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/syntax-err.errwarn new file mode 100644 index 0000000000..2e52a0d130 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/syntax-err.errwarn @@ -0,0 +1,16 @@ +-:2: error: unexpected `:' after instruction +-:3: error: unexpected `:' after instruction +-:4: error: expected expression after `%' +-:5: error: expected operand, got `%' +-:6: error: expected expression after `~' +-:7: error: expected expression after `+' +-:8: error: expected expression after `-' +-:9: error: expected expression after `(' +-:10: error: expected operand, got `)' +-:11: error: expected expression after `%' +-:12: error: unexpected `%' after instruction +-:13: error: expected expression after `~' +-:14: error: expected expression after `+' +-:15: error: expected expression after `-' +-:16: error: expected expression after `(' +-:17: error: unexpected `)' after instruction diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/uscore.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/uscore.asm new file mode 100644 index 0000000000..0630597fb5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/uscore.asm @@ -0,0 +1,10 @@ +dq 0000_1111_2222_3333h +dq 0000111122223333h +dd 0x01_23_45_67 +dd 0x01234567 +dw 1_2_3_4q +dw 1234q +db 00_11_00_11b +db 00110011b +_0: +dw _0 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/uscore.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/uscore.hex new file mode 100644 index 0000000000..4793d1d83b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/uscore.hex @@ -0,0 +1,32 @@ +33 +33 +22 +22 +11 +11 +00 +00 +33 +33 +22 +22 +11 +11 +00 +00 +67 +45 +23 +01 +67 +45 +23 +01 +9c +02 +9c +02 +33 +33 +1e +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/Makefile.inc new file mode 100644 index 0000000000..f55b93d35b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/Makefile.inc @@ -0,0 +1,6 @@ +TESTS += modules/parsers/nasm/tests/worphan/nasm_worphan_test.sh + +EXTRA_DIST += modules/parsers/nasm/tests/worphan/nasm_worphan_test.sh +EXTRA_DIST += modules/parsers/nasm/tests/worphan/orphanwarn.asm +EXTRA_DIST += modules/parsers/nasm/tests/worphan/orphanwarn.errwarn +EXTRA_DIST += modules/parsers/nasm/tests/worphan/orphanwarn.hex diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/nasm_worphan_test.sh b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/nasm_worphan_test.sh new file mode 100755 index 0000000000..ebb6bcd298 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/nasm_worphan_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh nasm_test modules/parsers/nasm/tests/worphan "nasm-compat parser" "-Worphan-labels -f bin" "" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/orphanwarn.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/orphanwarn.asm new file mode 100644 index 0000000000..ebf6c0b852 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/orphanwarn.asm @@ -0,0 +1,12 @@ +label: +label2 +label3 + + jmp label + jmp label2 + +equ2: equ 5 +equ3 equ 5 +label5: times 2 db 5 +label4 times 2 db 5 + diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/orphanwarn.errwarn b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/orphanwarn.errwarn new file mode 100644 index 0000000000..0953e8111a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/orphanwarn.errwarn @@ -0,0 +1,2 @@ +-:2: warning: label alone on aline without a colon might be in error +-:3: warning: label alone on aline without a colon might be in error diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/orphanwarn.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/orphanwarn.hex new file mode 100644 index 0000000000..3a32a007fa --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/nasm/tests/worphan/orphanwarn.hex @@ -0,0 +1,8 @@ +eb +fe +eb +fc +05 +05 +05 +05 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/Makefile.inc new file mode 100644 index 0000000000..bf49f71e0f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/Makefile.inc @@ -0,0 +1,3 @@ +EXTRA_DIST += modules/parsers/tasm/tests/Makefile.inc + +include modules/parsers/tasm/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/Makefile.inc new file mode 100644 index 0000000000..d37e1e6317 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/Makefile.inc @@ -0,0 +1,43 @@ +TESTS += modules/parsers/tasm/tests/tasm_test.sh + +EXTRA_DIST += modules/parsers/tasm/tests/tasm_test.sh +EXTRA_DIST += modules/parsers/tasm/tests/array.asm +EXTRA_DIST += modules/parsers/tasm/tests/array.hex +EXTRA_DIST += modules/parsers/tasm/tests/case.asm +EXTRA_DIST += modules/parsers/tasm/tests/case.hex +EXTRA_DIST += modules/parsers/tasm/tests/charstr.asm +EXTRA_DIST += modules/parsers/tasm/tests/charstr.hex +EXTRA_DIST += modules/parsers/tasm/tests/dup.asm +EXTRA_DIST += modules/parsers/tasm/tests/dup.hex +EXTRA_DIST += modules/parsers/tasm/tests/equal.asm +EXTRA_DIST += modules/parsers/tasm/tests/equal.hex +EXTRA_DIST += modules/parsers/tasm/tests/expr.asm +EXTRA_DIST += modules/parsers/tasm/tests/expr.hex +EXTRA_DIST += modules/parsers/tasm/tests/irp.asm +EXTRA_DIST += modules/parsers/tasm/tests/irp.hex +EXTRA_DIST += modules/parsers/tasm/tests/label.asm +EXTRA_DIST += modules/parsers/tasm/tests/label.hex +EXTRA_DIST += modules/parsers/tasm/tests/les.asm +EXTRA_DIST += modules/parsers/tasm/tests/les.hex +EXTRA_DIST += modules/parsers/tasm/tests/lidt.asm +EXTRA_DIST += modules/parsers/tasm/tests/lidt.hex +EXTRA_DIST += modules/parsers/tasm/tests/macro.asm +EXTRA_DIST += modules/parsers/tasm/tests/macro.hex +EXTRA_DIST += modules/parsers/tasm/tests/offset.asm +EXTRA_DIST += modules/parsers/tasm/tests/offset.hex +EXTRA_DIST += modules/parsers/tasm/tests/quote.asm +EXTRA_DIST += modules/parsers/tasm/tests/quote.hex +EXTRA_DIST += modules/parsers/tasm/tests/res.asm +EXTRA_DIST += modules/parsers/tasm/tests/res.errwarn +EXTRA_DIST += modules/parsers/tasm/tests/res.hex +EXTRA_DIST += modules/parsers/tasm/tests/segment.asm +EXTRA_DIST += modules/parsers/tasm/tests/segment.hex +EXTRA_DIST += modules/parsers/tasm/tests/size.asm +EXTRA_DIST += modules/parsers/tasm/tests/size.hex +EXTRA_DIST += modules/parsers/tasm/tests/struc.asm +EXTRA_DIST += modules/parsers/tasm/tests/struc.errwarn +EXTRA_DIST += modules/parsers/tasm/tests/struc.hex + +EXTRA_DIST += modules/parsers/tasm/tests/exe/Makefile.inc + +include modules/parsers/tasm/tests/exe/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/array.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/array.asm new file mode 100644 index 0000000000..44842678f4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/array.asm @@ -0,0 +1,2 @@ +t db 0,1,2 +mov al,t[1] diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/array.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/array.hex new file mode 100644 index 0000000000..97758932a8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/array.hex @@ -0,0 +1,6 @@ +00 +01 +02 +a0 +01 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/case.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/case.asm new file mode 100644 index 0000000000..1549d4bfcb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/case.asm @@ -0,0 +1,3 @@ +a db 0 +B dw A +c dw b diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/case.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/case.hex new file mode 100644 index 0000000000..e2092e0988 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/case.hex @@ -0,0 +1,5 @@ +00 +00 +00 +01 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/charstr.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/charstr.asm new file mode 100644 index 0000000000..a753716c6d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/charstr.asm @@ -0,0 +1 @@ +mov eax,"1234" diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/charstr.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/charstr.hex new file mode 100644 index 0000000000..42deac4168 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/charstr.hex @@ -0,0 +1,6 @@ +66 +b8 +34 +33 +32 +31 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/dup.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/dup.asm new file mode 100644 index 0000000000..c19ea76288 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/dup.asm @@ -0,0 +1 @@ +a db 10 dup(1) diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/dup.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/dup.hex new file mode 100644 index 0000000000..5a51766a2c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/dup.hex @@ -0,0 +1,10 @@ +01 +01 +01 +01 +01 +01 +01 +01 +01 +01 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/equal.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/equal.asm new file mode 100644 index 0000000000..4b8919dc60 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/equal.asm @@ -0,0 +1 @@ +a = byte 1 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/equal.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/equal.hex new file mode 100644 index 0000000000..e69de29bb2 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/exe/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/exe/Makefile.inc new file mode 100644 index 0000000000..117012cc33 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/exe/Makefile.inc @@ -0,0 +1,6 @@ +TESTS += modules/parsers/tasm/tests/exe/tasm_exe_test.sh + +EXTRA_DIST += modules/parsers/tasm/tests/exe/tasm_exe_test.sh +EXTRA_DIST += modules/parsers/tasm/tests/exe/exe.asm +EXTRA_DIST += modules/parsers/tasm/tests/exe/exe.hex + diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/exe/exe.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/exe/exe.asm new file mode 100644 index 0000000000..f040a1cfc9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/exe/exe.asm @@ -0,0 +1,4 @@ +a db 1 +start proc +int 22 +start endp diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/exe/exe.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/exe/exe.hex new file mode 100644 index 0000000000..4547fbc75e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/exe/exe.hex @@ -0,0 +1,515 @@ +4d +5a +03 +00 +02 +00 +00 +00 +20 +00 +00 +00 +ff +ff +00 +00 +00 +00 +00 +00 +01 +00 +00 +00 +22 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +cd +16 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/exe/tasm_exe_test.sh b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/exe/tasm_exe_test.sh new file mode 100755 index 0000000000..15fdd55336 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/exe/tasm_exe_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh tasm_test modules/parsers/tasm/tests/exe "tasm-compat parser" "-f dosexe -p tasm" "" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/expr.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/expr.asm new file mode 100644 index 0000000000..f5958cae19 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/expr.asm @@ -0,0 +1,2 @@ +a db low ((1 shl 2) and (16 shr 2) or (high 0x5034)) +b db not 1 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/expr.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/expr.hex new file mode 100644 index 0000000000..c6b0047264 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/expr.hex @@ -0,0 +1,2 @@ +54 +fe diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/irp.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/irp.asm new file mode 100644 index 0000000000..d24cd29fb2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/irp.asm @@ -0,0 +1,3 @@ +irp i,<1,2,3> + mov ax,i +endm diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/irp.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/irp.hex new file mode 100644 index 0000000000..7bf091dbce --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/irp.hex @@ -0,0 +1,9 @@ +b8 +01 +00 +b8 +02 +00 +b8 +03 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/label.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/label.asm new file mode 100644 index 0000000000..ff72ba3e4f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/label.asm @@ -0,0 +1,2 @@ +a label byte +mov ax,offset a diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/label.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/label.hex new file mode 100644 index 0000000000..b74f90bd22 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/label.hex @@ -0,0 +1,3 @@ +b8 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/les.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/les.asm new file mode 100644 index 0000000000..bbcfd90aab --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/les.asm @@ -0,0 +1,2 @@ +a db 1 +les ax,a diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/les.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/les.hex new file mode 100644 index 0000000000..032eee748e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/les.hex @@ -0,0 +1,5 @@ +01 +c4 +06 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/lidt.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/lidt.asm new file mode 100644 index 0000000000..11cf0c6a53 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/lidt.asm @@ -0,0 +1,3 @@ +idtr dw 0 + dd 0 +lidt fword ptr idtr diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/lidt.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/lidt.hex new file mode 100644 index 0000000000..97fb3b7347 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/lidt.hex @@ -0,0 +1,11 @@ +00 +00 +00 +00 +00 +00 +0f +01 +1e +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/macro.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/macro.asm new file mode 100644 index 0000000000..75902391fb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/macro.asm @@ -0,0 +1,6 @@ +a macro reg,i + mov reg,i + endm + +a ax,0 +a bx,1 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/macro.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/macro.hex new file mode 100644 index 0000000000..92b4e4ae80 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/macro.hex @@ -0,0 +1,6 @@ +b8 +00 +00 +bb +01 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/offset.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/offset.asm new file mode 100644 index 0000000000..417fd2c3a5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/offset.asm @@ -0,0 +1,3 @@ +a db 1 +mov ax,offset a +mov ax,offset[a] diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/offset.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/offset.hex new file mode 100644 index 0000000000..3def1cf9f4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/offset.hex @@ -0,0 +1,7 @@ +01 +b8 +00 +00 +b8 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/quote.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/quote.asm new file mode 100644 index 0000000000..a269ba371e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/quote.asm @@ -0,0 +1,2 @@ +a db 'don''t' +b db """" diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/quote.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/quote.hex new file mode 100644 index 0000000000..eb41f7b4b6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/quote.hex @@ -0,0 +1,6 @@ +64 +6f +6e +27 +74 +22 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/res.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/res.asm new file mode 100644 index 0000000000..8cf0829a66 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/res.asm @@ -0,0 +1,2 @@ +a db ? +b db 2 dup (?) diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/res.errwarn b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/res.errwarn new file mode 100644 index 0000000000..490e1ad738 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/res.errwarn @@ -0,0 +1,2 @@ +-:1: warning: uninitialized space declared in code/data section: zeroing +-:2: warning: uninitialized space declared in code/data section: zeroing diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/res.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/res.hex new file mode 100644 index 0000000000..47f99ba3e4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/res.hex @@ -0,0 +1,3 @@ +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/segment.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/segment.asm new file mode 100644 index 0000000000..f0563ebd42 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/segment.asm @@ -0,0 +1,8 @@ +data segment + a db 0 +data ends + +assume es:data +code segment + mov byte ptr [a],1 +code ends diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/segment.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/segment.hex new file mode 100644 index 0000000000..667a69b213 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/segment.hex @@ -0,0 +1,7 @@ +00 +26 +c6 +06 +00 +00 +01 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/size.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/size.asm new file mode 100644 index 0000000000..405cc4077d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/size.asm @@ -0,0 +1,2 @@ +a db 0 +mov a,1 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/size.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/size.hex new file mode 100644 index 0000000000..401266a146 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/size.hex @@ -0,0 +1,6 @@ +00 +c6 +06 +00 +00 +01 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/struc.asm b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/struc.asm new file mode 100644 index 0000000000..5a88b6157b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/struc.asm @@ -0,0 +1,8 @@ +s struc + a db ? + b db ? +s ends + +v s <1,?> + +mov al,[v].b diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/struc.errwarn b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/struc.errwarn new file mode 100644 index 0000000000..4e18889217 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/struc.errwarn @@ -0,0 +1 @@ +-:6: warning: uninitialized space declared in code/data section: zeroing diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/struc.hex b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/struc.hex new file mode 100644 index 0000000000..d2ad956306 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/struc.hex @@ -0,0 +1,5 @@ +01 +00 +a0 +01 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/tasm_test.sh b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/tasm_test.sh new file mode 100755 index 0000000000..35ef736081 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/tasm/tests/tasm_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh tasm_test modules/parsers/tasm/tests "tasm-compat parser" "-f bin -p tasm" "" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/parsers/yasm_parsers.xml b/third-party/yasm/yasm-1.3.0/modules/parsers/yasm_parsers.xml new file mode 100644 index 0000000000..28aa2e2968 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/parsers/yasm_parsers.xml @@ -0,0 +1,112 @@ + + + + + + + Yasm Supported Parsers + October 2006 + Yasm + + Peter + Johnson + +
peter@tortall.net
+
+
+ + + 2006 + Peter Johnson + +
+ + + yasm_parsers + 7 + + + + yasm_parsers + Yasm Supported Parsers (Assembler Syntaxes) + + + + + yasm + + + + + + + + + + + + + + Description + + The standard Yasm distribution includes a number of modules + for different parsers (assembler syntaxes). + + The parser is selected on the + + + yasm + 1 + + + command line by use of the command line + option. + + + + NASM Parser + + NASM syntax, selected with , is the + most full-featured syntax supported by Yasm. Yasm is nearly 100% + compatible with NASM for 16-bit and 32-bit x86 code. Yasm + additionally supports 64-bit AMD64 code with Yasm extensions to the + NASM syntax; see + + + yasm_arch + 7 + + + for details. NASM syntax is the Yasm default. + + + + GAS Parser + + The GNU Assembler (GAS) is the de-facto cross-platform + assembler for modern Unix systems, and is used as the backend for + the GCC compiler. Yasm's support for GAS syntax is moderately + good, although immature: not all directives are supported, and only + 32-bit x86 and AMD64 architectures are supported. Nearly all of + the GAS preprocessor is also supported. Yasm's GAS syntax support + is good enough to handle essentially all x86 and AMD64 GCC compiler + output. The GAS parser can be selected with . + + + + See Also + + + yasm + 1 + , + + + yasm_arch + 7 + + +
diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/preprocs/CMakeLists.txt new file mode 100644 index 0000000000..59640272a5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/CMakeLists.txt @@ -0,0 +1,4 @@ +INCLUDE(preprocs/nasm/CMakeLists.txt) +INCLUDE(preprocs/raw/CMakeLists.txt) +INCLUDE(preprocs/cpp/CMakeLists.txt) +INCLUDE(preprocs/gas/CMakeLists.txt) diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/preprocs/Makefile.inc new file mode 100644 index 0000000000..acf0683887 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/Makefile.inc @@ -0,0 +1,11 @@ +EXTRA_DIST += modules/preprocs/tasm/Makefile.inc +EXTRA_DIST += modules/preprocs/nasm/Makefile.inc +EXTRA_DIST += modules/preprocs/raw/Makefile.inc +EXTRA_DIST += modules/preprocs/cpp/Makefile.inc +EXTRA_DIST += modules/preprocs/gas/Makefile.inc + +include modules/preprocs/tasm/Makefile.inc +include modules/preprocs/nasm/Makefile.inc +include modules/preprocs/raw/Makefile.inc +include modules/preprocs/cpp/Makefile.inc +include modules/preprocs/gas/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/cpp/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/preprocs/cpp/CMakeLists.txt new file mode 100644 index 0000000000..202787cba7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/cpp/CMakeLists.txt @@ -0,0 +1,3 @@ +YASM_ADD_MODULE(preproc_cpp + preprocs/cpp/cpp-preproc.c + ) diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/cpp/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/preprocs/cpp/Makefile.inc new file mode 100644 index 0000000000..30bd24b343 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/cpp/Makefile.inc @@ -0,0 +1,6 @@ +# Makefile for cpp module. +# Copied from raw preprocessor module. + +libyasm_a_SOURCES += modules/preprocs/cpp/cpp-preproc.c + +YASM_MODULES += preproc_cpp diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/cpp/cpp-preproc.c b/third-party/yasm/yasm-1.3.0/modules/preprocs/cpp/cpp-preproc.c new file mode 100644 index 0000000000..663f726cc7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/cpp/cpp-preproc.c @@ -0,0 +1,402 @@ +/* + * Invoke an external C preprocessor + * + * Copyright (C) 2007 Paul Barker + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 +#include + +/* TODO: Use autoconf to get the limit on the command line length. */ +#define CMDLINE_SIZE 32770 + +#define BSIZE 512 + +/* Pre-declare the preprocessor module object. */ +yasm_preproc_module yasm_cpp_LTX_preproc; + +/******************************************************************************* + Structures. +*******************************************************************************/ + +/* An entry in a list of arguments to pass to cpp. */ +typedef struct cpp_arg_entry { + TAILQ_ENTRY(cpp_arg_entry) entry; + + /* + The operator (eg "-I") and the parameter (eg "include/"). op is expected + to point to a string literal, whereas param is expected to be a copy of + the parameter which is free'd when no-longer needed (in + cpp_preproc_destroy()). + */ + const char *op; + char *param; +} cpp_arg_entry; + +typedef struct yasm_preproc_cpp { + yasm_preproc_base preproc; /* base structure */ + + /* List of arguments to pass to cpp. */ + TAILQ_HEAD(cpp_arg_head, cpp_arg_entry) cpp_args; + + char *filename; + FILE *f, *f_deps; + yasm_linemap *cur_lm; + yasm_errwarns *errwarns; + + int flags; +} yasm_preproc_cpp; + +/* Flag values for yasm_preproc_cpp->flags. */ +#define CPP_HAS_BEEN_INVOKED 0x01 +#define CPP_HAS_GENERATED_DEPS 0x02 + +/******************************************************************************* + Internal functions and helpers. +*******************************************************************************/ + +/* + Append a string to the command line, ensuring that we don't overflow the + buffer. +*/ +#define APPEND(s) do { \ + size_t _len = strlen(s); \ + if (p + _len >= limit) \ + yasm__fatal(N_("command line too long!")); \ + strcpy(p, s); \ + p += _len; \ +} while (0) + +/* + Put all the options together into a command line that can be used to invoke + cpp. +*/ +static char * +cpp_build_cmdline(yasm_preproc_cpp *pp, const char *extra) +{ + char *cmdline, *p, *limit; + cpp_arg_entry *arg; + + /* Initialize command line. */ + cmdline = p = yasm_xmalloc(strlen(CPP_PROG)+CMDLINE_SIZE); + limit = p + CMDLINE_SIZE; + strcpy(p, CPP_PROG); + p += strlen(CPP_PROG); + + arg = TAILQ_FIRST(&pp->cpp_args); + + /* Append arguments from the list. */ + while ( arg ) { + APPEND(" "); + APPEND(arg->op); + APPEND(" "); + APPEND(arg->param); + + arg = TAILQ_NEXT(arg, entry); + } + + /* Append extra arguments. */ + if (extra) { + APPEND(" "); + APPEND(extra); + } + /* Append final arguments. */ + APPEND(" -x assembler-with-cpp "); + APPEND(pp->filename); + + return cmdline; +} + +/* Invoke the c preprocessor. */ +static void +cpp_invoke(yasm_preproc_cpp *pp) +{ + char *cmdline; + + cmdline = cpp_build_cmdline(pp, NULL); + +#ifdef HAVE_POPEN + pp->f = popen(cmdline, "r"); + if (!pp->f) + yasm__fatal( N_("Failed to execute preprocessor") ); +#else + yasm__fatal( N_("Cannot execute preprocessor, no popen available") ); +#endif + + yasm_xfree(cmdline); +} + +/* Free memory used by the list of arguments. */ +static void +cpp_destroy_args(yasm_preproc_cpp *pp) +{ + cpp_arg_entry *arg; + + while ( (arg = TAILQ_FIRST(&pp->cpp_args)) ) { + TAILQ_REMOVE(&pp->cpp_args, arg, entry); + yasm_xfree(arg->param); + yasm_xfree(arg); + } +} + +/* Invoke the c preprocessor to generate dependency info. */ +static void +cpp_generate_deps(yasm_preproc_cpp *pp) +{ + char *cmdline; + + cmdline = cpp_build_cmdline(pp, "-M"); + +#ifdef HAVE_POPEN + pp->f_deps = popen(cmdline, "r"); + if (!pp->f_deps) + yasm__fatal( N_("Failed to execute preprocessor") ); +#else + yasm__fatal( N_("Cannot execute preprocessor, no popen available") ); +#endif + + yasm_xfree(cmdline); +} + +/******************************************************************************* + Interface functions. +*******************************************************************************/ +static yasm_preproc * +cpp_preproc_create(const char *in, yasm_symtab *symtab, yasm_linemap *lm, + yasm_errwarns *errwarns) +{ + yasm_preproc_cpp *pp = yasm_xmalloc(sizeof(yasm_preproc_cpp)); + void * iter; + const char * inc_dir; + + pp->preproc.module = &yasm_cpp_LTX_preproc; + pp->f = pp->f_deps = NULL; + pp->cur_lm = lm; + pp->errwarns = errwarns; + pp->flags = 0; + pp->filename = yasm__xstrdup(in); + + TAILQ_INIT(&pp->cpp_args); + + /* Iterate through the list of include dirs. */ + iter = NULL; + while ((inc_dir = yasm_get_include_dir(&iter)) != NULL) { + cpp_arg_entry *arg = yasm_xmalloc(sizeof(cpp_arg_entry)); + arg->op = "-I"; + arg->param = yasm__xstrdup(inc_dir); + + TAILQ_INSERT_TAIL(&pp->cpp_args, arg, entry); + } + + return (yasm_preproc *)pp; +} + +static void +cpp_preproc_destroy(yasm_preproc *preproc) +{ + yasm_preproc_cpp *pp = (yasm_preproc_cpp *)preproc; + + if (pp->f) { +#ifdef HAVE_POPEN + if (pclose(pp->f) != 0) + yasm__fatal( N_("Preprocessor exited with failure") ); +#endif + } + + cpp_destroy_args(pp); + + yasm_xfree(pp->filename); + yasm_xfree(pp); +} + +static char * +cpp_preproc_get_line(yasm_preproc *preproc) +{ + yasm_preproc_cpp *pp = (yasm_preproc_cpp *)preproc; + int bufsize = BSIZE; + char *buf, *p; + + if (! (pp->flags & CPP_HAS_BEEN_INVOKED) ) { + pp->flags |= CPP_HAS_BEEN_INVOKED; + + cpp_invoke(pp); + } + + /* + Once the preprocessor has been run, we're just dealing with a normal + file. + */ + + /* Loop to ensure entire line is read (don't want to limit line length). */ + buf = yasm_xmalloc((size_t)bufsize); + p = buf; + for (;;) { + if (!fgets(p, bufsize-(p-buf), pp->f)) { + if (ferror(pp->f)) { + yasm_error_set(YASM_ERROR_IO, + N_("error when reading from file")); + yasm_errwarn_propagate(pp->errwarns, + yasm_linemap_get_current(pp->cur_lm)); + } + break; + } + p += strlen(p); + if (p > buf && p[-1] == '\n') + break; + if ((p-buf) >= bufsize) { + /* Increase size of buffer */ + char *oldbuf = buf; + bufsize *= 2; + buf = yasm_xrealloc(buf, (size_t)bufsize); + p = buf + (p-oldbuf); + } + } + + if (p == buf) { + /* No data; must be at EOF */ + yasm_xfree(buf); + return NULL; + } + + /* Strip the line ending */ + buf[strcspn(buf, "\r\n")] = '\0'; + + return buf; +} + +static size_t +cpp_preproc_get_included_file(yasm_preproc *preproc, char *buf, + size_t max_size) +{ + char *p = buf; + int ch = '\0'; + size_t n = 0; + yasm_preproc_cpp *pp = (yasm_preproc_cpp *)preproc; + + if (! (pp->flags & CPP_HAS_GENERATED_DEPS) ) { + pp->flags |= CPP_HAS_GENERATED_DEPS; + + cpp_generate_deps(pp); + + /* Skip target name and first dependency. */ + while (ch != ':') + ch = fgetc(pp->f_deps); + + fgetc(pp->f_deps); /* Discard space after colon. */ + + while (ch != ' ' && ch != EOF) + ch = fgetc(pp->f_deps); + + if (ch == EOF) + return 0; + } + + while (n < max_size) { + ch = fgetc(pp->f_deps); + + if (ch == ' ' || ch == EOF) { + *p = '\0'; + return n; + } + + /* Eat any silly characters. */ + if (ch < ' ') + continue; + + *p++ = ch; + n++; + } + + /* Ensure the buffer is null-terminated. */ + *(p - 1) = '\0'; + return n; +} + +static void +cpp_preproc_add_include_file(yasm_preproc *preproc, const char *filename) +{ + yasm_preproc_cpp *pp = (yasm_preproc_cpp *)preproc; + + cpp_arg_entry *arg = yasm_xmalloc(sizeof(cpp_arg_entry)); + arg->op = "-include"; + arg->param = yasm__xstrdup(filename); + + TAILQ_INSERT_TAIL(&pp->cpp_args, arg, entry); +} + +static void +cpp_preproc_predefine_macro(yasm_preproc *preproc, const char *macronameval) +{ + yasm_preproc_cpp *pp = (yasm_preproc_cpp *)preproc; + + cpp_arg_entry *arg = yasm_xmalloc(sizeof(cpp_arg_entry)); + arg->op = "-D"; + arg->param = yasm__xstrdup(macronameval); + + TAILQ_INSERT_TAIL(&pp->cpp_args, arg, entry); +} + +static void +cpp_preproc_undefine_macro(yasm_preproc *preproc, const char *macroname) +{ + yasm_preproc_cpp *pp = (yasm_preproc_cpp *)preproc; + + cpp_arg_entry *arg = yasm_xmalloc(sizeof(cpp_arg_entry)); + arg->op = "-U"; + arg->param = yasm__xstrdup(macroname); + + TAILQ_INSERT_TAIL(&pp->cpp_args, arg, entry); +} + +static void +cpp_preproc_define_builtin(yasm_preproc *preproc, const char *macronameval) +{ + /* Handle a builtin as if it were a predefine. */ + cpp_preproc_predefine_macro(preproc, macronameval); +} + +static void +cpp_preproc_add_standard(yasm_preproc *preproc, const char **macros) +{ + /* TODO */ +} + +/******************************************************************************* + Preprocessor module object. +*******************************************************************************/ + +yasm_preproc_module yasm_cpp_LTX_preproc = { + "Run input through external C preprocessor", + "cpp", + cpp_preproc_create, + cpp_preproc_destroy, + cpp_preproc_get_line, + cpp_preproc_get_included_file, + cpp_preproc_add_include_file, + cpp_preproc_predefine_macro, + cpp_preproc_undefine_macro, + cpp_preproc_define_builtin, + cpp_preproc_add_standard +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/gas/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/preprocs/gas/CMakeLists.txt new file mode 100644 index 0000000000..e8d0914868 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/gas/CMakeLists.txt @@ -0,0 +1,4 @@ +YASM_ADD_MODULE(preproc_gas + preprocs/gas/gas-preproc.c + preprocs/gas/gas-eval.c + ) diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/gas/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/preprocs/gas/Makefile.inc new file mode 100644 index 0000000000..a7289a942c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/gas/Makefile.inc @@ -0,0 +1,9 @@ +libyasm_a_SOURCES += modules/preprocs/gas/gas-preproc.c +libyasm_a_SOURCES += modules/preprocs/gas/gas-eval.h +libyasm_a_SOURCES += modules/preprocs/gas/gas-eval.c + +YASM_MODULES += preproc_gas + +EXTRA_DIST += modules/preprocs/gas/tests/Makefile.inc + +include modules/preprocs/gas/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/gas/gas-eval.c b/third-party/yasm/yasm-1.3.0/modules/preprocs/gas/gas-eval.c new file mode 100644 index 0000000000..3625c7a9be --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/gas/gas-eval.c @@ -0,0 +1,444 @@ +/* eval.c expression evaluator for the Netwide Assembler + * + * The Netwide Assembler is copyright (C) 1996 Simon Tatham and + * Julian Hall. All rights reserved. The software is + * redistributable under the licence given in the file "Licence" + * distributed in the NASM archive. + * + * initial version 27/iii/95 by Simon Tatham + */ +#include +#include +#include +#include +#include +#include +#include + +#include "gas-eval.h" + +/* The assembler symbol table. */ +static yasm_symtab *symtab; + +static scanner scan; /* Address of scanner routine */ +static efunc error; /* Address of error reporting routine */ + +static struct tokenval *tokval; /* The current token */ +static int i; /* The t_type of tokval */ + +static void *scpriv; +static void *epriv; + +/* + * Recursive-descent parser. Called with a single boolean operand, + * which is TRUE if the evaluation is critical (i.e. unresolved + * symbols are an error condition). Must update the global `i' to + * reflect the token after the parsed string. May return NULL. + * + * evaluate() should report its own errors: on return it is assumed + * that if NULL has been returned, the error has already been + * reported. + */ + +/* + * Grammar parsed is: + * + * expr : bexpr [ WRT expr6 ] + * bexpr : rexp0 or expr0 depending on relative-mode setting + * rexp0 : rexp1 [ {||} rexp1...] + * rexp1 : rexp2 [ {^^} rexp2...] + * rexp2 : rexp3 [ {&&} rexp3...] + * rexp3 : expr0 [ {=,==,<>,!=,<,>,<=,>=} expr0 ] + * expr0 : expr1 [ {|} expr1...] + * expr1 : expr2 [ {^} expr2...] + * expr2 : expr3 [ {&} expr3...] + * expr3 : expr4 [ {<<,>>} expr4...] + * expr4 : expr5 [ {+,-} expr5...] + * expr5 : expr6 [ {*,/,%,//,%%} expr6...] + * expr6 : { ~,+,-,SEG } expr6 + * | (bexpr) + * | symbol + * | $ + * | number + */ + +static yasm_expr *rexp0(void), *rexp1(void), *rexp2(void), *rexp3(void); + +static yasm_expr *expr0(void), *expr1(void), *expr2(void), *expr3(void); +static yasm_expr *expr4(void), *expr5(void), *expr6(void); + +static yasm_expr *(*bexpr)(void); + +static yasm_expr *rexp0(void) +{ + yasm_expr *e, *f; + + e = rexp1(); + if (!e) + return NULL; + + while (i == TOKEN_DBL_OR) + { + i = scan(scpriv, tokval); + f = rexp1(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + e = yasm_expr_create_tree(e, YASM_EXPR_LOR, f, 0); + } + return e; +} + +static yasm_expr *rexp1(void) +{ + yasm_expr *e, *f; + + e = rexp2(); + if (!e) + return NULL; + + while (i == TOKEN_DBL_XOR) + { + i = scan(scpriv, tokval); + f = rexp2(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + e = yasm_expr_create_tree(e, YASM_EXPR_LXOR, f, 0); + } + return e; +} + +static yasm_expr *rexp2(void) +{ + yasm_expr *e, *f; + + e = rexp3(); + if (!e) + return NULL; + while (i == TOKEN_DBL_AND) + { + i = scan(scpriv, tokval); + f = rexp3(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + e = yasm_expr_create_tree(e, YASM_EXPR_LAND, f, 0); + } + return e; +} + +static yasm_expr *rexp3(void) +{ + yasm_expr *e, *f; + + e = expr0(); + if (!e) + return NULL; + + while (i == TOKEN_EQ || i == TOKEN_LT || i == TOKEN_GT || + i == TOKEN_NE || i == TOKEN_LE || i == TOKEN_GE) + { + int j = i; + i = scan(scpriv, tokval); + f = expr0(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + switch (j) + { + case TOKEN_EQ: + e = yasm_expr_create_tree(e, YASM_EXPR_EQ, f, 0); + break; + case TOKEN_LT: + e = yasm_expr_create_tree(e, YASM_EXPR_LT, f, 0); + break; + case TOKEN_GT: + e = yasm_expr_create_tree(e, YASM_EXPR_GT, f, 0); + break; + case TOKEN_NE: + e = yasm_expr_create_tree(e, YASM_EXPR_NE, f, 0); + break; + case TOKEN_LE: + e = yasm_expr_create_tree(e, YASM_EXPR_LE, f, 0); + break; + case TOKEN_GE: + e = yasm_expr_create_tree(e, YASM_EXPR_GE, f, 0); + break; + } + } + return e; +} + +static yasm_expr *expr0(void) +{ + yasm_expr *e, *f; + + e = expr1(); + if (!e) + return NULL; + + while (i == '|') + { + i = scan(scpriv, tokval); + f = expr1(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + e = yasm_expr_create_tree(e, YASM_EXPR_OR, f, 0); + } + return e; +} + +static yasm_expr *expr1(void) +{ + yasm_expr *e, *f; + + e = expr2(); + if (!e) + return NULL; + + while (i == '^') { + i = scan(scpriv, tokval); + f = expr2(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + e = yasm_expr_create_tree(e, YASM_EXPR_XOR, f, 0); + } + return e; +} + +static yasm_expr *expr2(void) +{ + yasm_expr *e, *f; + + e = expr3(); + if (!e) + return NULL; + + while (i == '&') { + i = scan(scpriv, tokval); + f = expr3(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + e = yasm_expr_create_tree(e, YASM_EXPR_AND, f, 0); + } + return e; +} + +static yasm_expr *expr3(void) +{ + yasm_expr *e, *f; + + e = expr4(); + if (!e) + return NULL; + + while (i == TOKEN_SHL || i == TOKEN_SHR) + { + int j = i; + i = scan(scpriv, tokval); + f = expr4(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + switch (j) { + case TOKEN_SHL: + e = yasm_expr_create_tree(e, YASM_EXPR_SHL, f, 0); + break; + case TOKEN_SHR: + e = yasm_expr_create_tree(e, YASM_EXPR_SHR, f, 0); + break; + } + } + return e; +} + +static yasm_expr *expr4(void) +{ + yasm_expr *e, *f; + + e = expr5(); + if (!e) + return NULL; + while (i == '+' || i == '-') + { + int j = i; + i = scan(scpriv, tokval); + f = expr5(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + switch (j) { + case '+': + e = yasm_expr_create_tree(e, YASM_EXPR_ADD, f, 0); + break; + case '-': + e = yasm_expr_create_tree(e, YASM_EXPR_SUB, f, 0); + break; + } + } + return e; +} + +static yasm_expr *expr5(void) +{ + yasm_expr *e, *f; + + e = expr6(); + if (!e) + return NULL; + while (i == '*' || i == '/' || i == '%' || + i == TOKEN_SDIV || i == TOKEN_SMOD) + { + int j = i; + i = scan(scpriv, tokval); + f = expr6(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + switch (j) { + case '*': + e = yasm_expr_create_tree(e, YASM_EXPR_MUL, f, 0); + break; + case '/': + e = yasm_expr_create_tree(e, YASM_EXPR_DIV, f, 0); + break; + case '%': + e = yasm_expr_create_tree(e, YASM_EXPR_MOD, f, 0); + break; + case TOKEN_SDIV: + e = yasm_expr_create_tree(e, YASM_EXPR_SIGNDIV, f, 0); + break; + case TOKEN_SMOD: + e = yasm_expr_create_tree(e, YASM_EXPR_SIGNMOD, f, 0); + break; + } + } + return e; +} + +static yasm_expr *expr6(void) +{ + yasm_expr *e = NULL; + + if (i == '-') { + i = scan(scpriv, tokval); + e = expr6(); + if (!e) + return NULL; + return yasm_expr_create_branch(YASM_EXPR_NEG, e, 0); + } else if (i == '+') { + i = scan(scpriv, tokval); + return expr6(); + } else if (i == '~') { + i = scan(scpriv, tokval); + e = expr6(); + if (!e) + return NULL; + return yasm_expr_create_branch(YASM_EXPR_NOT, e, 0); + } else if (i == TOKEN_SEG) { + i = scan(scpriv, tokval); + e = expr6(); + if (!e) + return NULL; + error(epriv, ERR_NONFATAL, "%s not supported", "SEG"); + return e; + } else if (i == '(') { + i = scan(scpriv, tokval); + e = bexpr(); + if (!e) + return NULL; + if (i != ')') { + error(epriv, ERR_NONFATAL, "expecting `)'"); + return NULL; + } + i = scan(scpriv, tokval); + return e; + } + else if (i == TOKEN_NUM || i == TOKEN_ID || + i == TOKEN_HERE || i == TOKEN_BASE) + { + switch (i) { + case TOKEN_NUM: + e = yasm_expr_create_ident(yasm_expr_int(tokval->t_integer), 0); + tokval->t_integer = NULL; + break; + case TOKEN_ID: + if (symtab) { + yasm_symrec *sym = + yasm_symtab_get(symtab, tokval->t_charptr); + if (sym) { + e = yasm_expr_create_ident(yasm_expr_sym(sym), 0); + } else { + error(epriv, ERR_NONFATAL, + "undefined symbol `%s' in preprocessor", + tokval->t_charptr); + e = yasm_expr_create_ident(yasm_expr_int( + yasm_intnum_create_int(1)), 0); + } + break; + } + /*fallthrough*/ + case TOKEN_HERE: + case TOKEN_BASE: + error(epriv, ERR_NONFATAL, + "cannot reference symbol `%s' in preprocessor", + (i == TOKEN_ID ? tokval->t_charptr : + i == TOKEN_HERE ? "$" : "$$")); + e = yasm_expr_create_ident(yasm_expr_int(yasm_intnum_create_int(1)), + 0); + break; + } + i = scan(scpriv, tokval); + return e; + } else { + error(epriv, ERR_NONFATAL, "expression syntax error"); + return NULL; + } +} + +yasm_expr *evaluate (scanner sc, void *scprivate, struct tokenval *tv, + void *eprivate, int critical, efunc report_error, + yasm_symtab *st) +{ + if (critical & CRITICAL) { + critical &= ~CRITICAL; + bexpr = rexp0; + } else + bexpr = expr0; + + scan = sc; + scpriv = scprivate; + tokval = tv; + error = report_error; + epriv = eprivate; + symtab = st; + + if (tokval->t_type == TOKEN_INVALID) + i = scan(scpriv, tokval); + else + i = tokval->t_type; + + return bexpr (); +} diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/gas/gas-eval.h b/third-party/yasm/yasm-1.3.0/modules/preprocs/gas/gas-eval.h new file mode 100644 index 0000000000..18dcc517a9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/gas/gas-eval.h @@ -0,0 +1,120 @@ +/* eval.h header file for eval.c + * + * The Netwide Assembler is copyright (C) 1996 Simon Tatham and + * Julian Hall. All rights reserved. The software is + * redistributable under the licence given in the file "Licence" + * distributed in the NASM archive. + */ + +#ifndef YASM_EVAL_H +#define YASM_EVAL_H + +/* + * ------------------------- + * Error reporting functions + * ------------------------- + */ + +/* + * An error reporting function should look like this. + */ +typedef void (*efunc) (void *private_data, int severity, const char *fmt, ...); + +/* + * These are the error severity codes which get passed as the first + * argument to an efunc. + */ + +#define ERR_DEBUG 0x00000008 /* put out debugging message */ +#define ERR_WARNING 0x00000000 /* warn only: no further action */ +#define ERR_NONFATAL 0x00000001 /* terminate assembly after phase */ +#define ERR_FATAL 0x00000002 /* instantly fatal: exit with error */ +#define ERR_PANIC 0x00000003 /* internal error: panic instantly + * and dump core for reference */ +#define ERR_MASK 0x0000000F /* mask off the above codes */ +#define ERR_NOFILE 0x00000010 /* don't give source file name/line */ +#define ERR_USAGE 0x00000020 /* print a usage message */ +#define ERR_PASS1 0x00000040 /* only print this error on pass one */ + +/* + * These codes define specific types of suppressible warning. + */ + +#define ERR_WARN_MASK 0x0000FF00 /* the mask for this feature */ +#define ERR_WARN_SHR 8 /* how far to shift right */ + +#define ERR_WARN_MNP 0x00000100 /* macro-num-parameters warning */ +#define ERR_WARN_MSR 0x00000200 /* macro self-reference */ +#define ERR_WARN_OL 0x00000300 /* orphan label (no colon, and + * alone on line) */ +#define ERR_WARN_NOV 0x00000400 /* numeric overflow */ +#define ERR_WARN_GNUELF 0x00000500 /* using GNU ELF extensions */ +#define ERR_WARN_MAX 5 /* the highest numbered one */ + +/* + * The expression evaluator must be passed a scanner function; a + * standard scanner is provided as part of nasmlib.c. The + * preprocessor will use a different one. Scanners, and the + * token-value structures they return, look like this. + * + * The return value from the scanner is always a copy of the + * `t_type' field in the structure. + */ +struct tokenval { + int t_type; + yasm_intnum *t_integer, *t_inttwo; + char *t_charptr; +}; +typedef int (*scanner) (void *private_data, struct tokenval *tv); + +/* + * Token types returned by the scanner, in addition to ordinary + * ASCII character values, and zero for end-of-string. + */ +enum { /* token types, other than chars */ + TOKEN_INVALID = -1, /* a placeholder value */ + TOKEN_EOS = 0, /* end of string */ + TOKEN_EQ = '=', TOKEN_GT = '>', TOKEN_LT = '<', /* aliases */ + TOKEN_ID = 256, TOKEN_NUM, TOKEN_REG, TOKEN_INSN, /* major token types */ + TOKEN_ERRNUM, /* numeric constant with error in */ + TOKEN_HERE, TOKEN_BASE, /* $ and $$ */ + TOKEN_SPECIAL, /* BYTE, WORD, DWORD, FAR, NEAR, etc */ + TOKEN_PREFIX, /* A32, O16, LOCK, REPNZ, TIMES, etc */ + TOKEN_SHL, TOKEN_SHR, /* << and >> */ + TOKEN_SDIV, TOKEN_SMOD, /* // and %% */ + TOKEN_GE, TOKEN_LE, TOKEN_NE, /* >=, <= and <> (!= is same as <>) */ + TOKEN_DBL_AND, TOKEN_DBL_OR, TOKEN_DBL_XOR, /* &&, || and ^^ */ + TOKEN_SEG, TOKEN_WRT, /* SEG and WRT */ + TOKEN_FLOAT /* floating-point constant */ +}; + +/* + * The actual expression evaluator function looks like this. When + * called, it expects the first token of its expression to already + * be in `*tv'; if it is not, set tv->t_type to TOKEN_INVALID and + * it will start by calling the scanner. + * + * `critical' is non-zero if the expression may not contain forward + * references. The evaluator will report its own error if this + * occurs; if `critical' is 1, the error will be "symbol not + * defined before use", whereas if `critical' is 2, the error will + * be "symbol undefined". + * + * If `critical' has bit 8 set (in addition to its main value: 0x101 + * and 0x102 correspond to 1 and 2) then an extended expression + * syntax is recognised, in which relational operators such as =, < + * and >= are accepted, as well as low-precedence logical operators + * &&, ^^ and ||. + */ +#define CRITICAL 0x100 +typedef yasm_expr *(*evalfunc) (scanner sc, void *scprivate, struct tokenval *tv, + int critical, efunc error, yasm_symtab *symtab); + +/* + * The evaluator itself. + */ +yasm_expr *evaluate (scanner sc, void *scprivate, struct tokenval *tv, + void *eprivate, int critical, efunc report_error, + yasm_symtab *symtab); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/gas/gas-preproc.c b/third-party/yasm/yasm-1.3.0/modules/preprocs/gas/gas-preproc.c new file mode 100644 index 0000000000..96dec82284 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/gas/gas-preproc.c @@ -0,0 +1,1409 @@ +/* + * GAS preprocessor (emulates GNU Assembler's preprocessor) + * + * Copyright (C) 2009 Alexei Svitkine + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 +#include + +#include +#include "modules/preprocs/gas/gas-eval.h" + +#define FALSE 0 +#define TRUE 1 +#define BSIZE 512 + +#ifndef MAXPATHLEN +#define MAXPATHLEN 1024 +#endif + +typedef struct buffered_line { + char *line; + int line_number; + SLIST_ENTRY(buffered_line) next; +} buffered_line; + +typedef struct included_file { + char *filename; + int lines_remaining; + SLIST_ENTRY(included_file) next; +} included_file; + +typedef struct macro_entry { + char *name; + int num_params; + char **params; + int num_lines; + char **lines; + STAILQ_ENTRY(macro_entry) next; +} macro_entry; + +typedef struct deferred_define { + char *name; + char *value; + SLIST_ENTRY(deferred_define) next; +} deferred_define; + +typedef struct expr_state { + const char *string; + char *symbol; + int string_cursor; +} expr_state; + +typedef struct yasm_preproc_gas { + yasm_preproc_base preproc; /* base structure */ + + FILE *in; + char *in_filename; + + yasm_symtab *defines; + SLIST_HEAD(deferred_defines_head, deferred_define) deferred_defines; + + int depth; + int skip_depth; + + int in_comment; + + expr_state expr; + + SLIST_HEAD(buffered_lines_head, buffered_line) buffered_lines; + SLIST_HEAD(included_files_head, included_file) included_files; + STAILQ_HEAD(macros_head, macro_entry) macros; + + int in_line_number; + int next_line_number; + int current_line_number; /* virtual (output) line number */ + + yasm_linemap *cur_lm; + yasm_errwarns *errwarns; + int fatal_error; + int detect_errors_only; +} yasm_preproc_gas; + +yasm_preproc_module yasm_gas_LTX_preproc; + +/* Forward declarations. */ + +static int substitute_values(yasm_preproc_gas *pp, char **line_ptr); + +/* String helpers. */ + +static const char *starts_with(const char *big, const char *little) +{ + while (*little) { + if (*little++ != *big++) { + return NULL; + } + } + return big; +} + +static void skip_whitespace(const char **line) +{ + while (isspace(**line)) { + (*line)++; + } +} + +static void skip_whitespace2(char **line) +{ + while (isspace(**line)) { + (*line)++; + } +} + +static const char *matches(const char *line, const char *directive) +{ + skip_whitespace(&line); + + if (*line == '.') { + line = starts_with(line + 1, directive); + if (line && (!*line || isspace(*line))) { + skip_whitespace(&line); + return line; + } + } + + return NULL; +} + +static int unquote(const char *arg, char *to, size_t to_size, char q, char expected, const char **remainder) +{ + const char *quote; + const char *end; + size_t len; + + skip_whitespace(&arg); + if (*arg != q) { + return -1; + } + + arg++; + + end = arg; + do { + quote = strchr(end, q); + if (!quote) { + return -2; + } + end = quote + 1; + } while (*(quote - 1) == '\\'); + + skip_whitespace(&end); + if (*end != expected) { + return -3; + } + + if (remainder) { + *remainder = end + 1; + } + + len = (size_t) (quote - arg); + if (len >= to_size) { + return -4; + } + + strncpy(to, arg, len); + to[len] = '\0'; + + return (int) len; +} + +/* Line-reading. */ + +static char *read_line_from_file(yasm_preproc_gas *pp, FILE *file) +{ + int bufsize = BSIZE; + char *buf; + char *p; + + buf = yasm_xmalloc((size_t)bufsize); + + /* Loop to ensure entire line is read (don't want to limit line length). */ + p = buf; + for (;;) { + if (!fgets(p, bufsize - (p - buf), file)) { + if (ferror(file)) { + yasm_error_set(YASM_ERROR_IO, N_("error when reading from file")); + yasm_errwarn_propagate(pp->errwarns, pp->current_line_number); + } + break; + } + p += strlen(p); + if (p > buf && p[-1] == '\n') { + break; + } + if ((p - buf) + 1 >= bufsize) { + /* Increase size of buffer */ + char *oldbuf = buf; + bufsize *= 2; + buf = yasm_xrealloc(buf, (size_t) bufsize); + p = buf + (p - oldbuf); + } + } + + if (p == buf) { + /* No data; must be at EOF */ + yasm_xfree(buf); + return NULL; + } + + /* Strip the line ending */ + buf[strcspn(buf, "\r\n")] = '\0'; + return buf; +} + +static char *read_line(yasm_preproc_gas *pp) +{ + char *line; + + if (!SLIST_EMPTY(&pp->included_files)) { + included_file *inc_file = SLIST_FIRST(&pp->included_files); + if (inc_file->lines_remaining <= 0) { + SLIST_REMOVE_HEAD(&pp->included_files, next); + yasm_xfree(inc_file->filename); + yasm_xfree(inc_file); + } + } + + if (!SLIST_EMPTY(&pp->buffered_lines)) { + buffered_line *bline = SLIST_FIRST(&pp->buffered_lines); + SLIST_REMOVE_HEAD(&pp->buffered_lines, next); + line = bline->line; + if (bline->line_number != -1) { + pp->next_line_number = bline->line_number; + } + yasm_xfree(bline); + if (!SLIST_EMPTY(&pp->included_files)) { + SLIST_FIRST(&pp->included_files)->lines_remaining--; + } + return line; + } + + line = read_line_from_file(pp, pp->in); + if (line) { + pp->in_line_number++; + pp->next_line_number = pp->in_line_number; + } + + return line; +} + +static const char *get_arg(yasm_preproc_gas *pp, const char *src, char *dest, size_t dest_size) +{ + const char *comma = strchr(src, ','); + if (comma) { + size_t len = (size_t) (comma - src); + if (len >= dest_size) { + len = dest_size - 1; + } + strncpy(dest, src, len); + dest[len] = '\0'; + comma++; + skip_whitespace(&comma); + } else { + yasm_error_set(YASM_ERROR_SYNTAX, N_("expected comma")); + yasm_errwarn_propagate(pp->errwarns, pp->current_line_number); + } + return comma; +} + +/* GAS expression evaluation. */ + +static char get_char(yasm_preproc_gas *pp) +{ + return pp->expr.string[pp->expr.string_cursor]; +} + +static const char *get_str(yasm_preproc_gas *pp) +{ + return pp->expr.string + pp->expr.string_cursor; +} + +static void next_char(yasm_preproc_gas *pp) +{ + pp->expr.string_cursor++; +} + +static int ishex(char c) +{ + c = tolower(c); + return isdigit(c) || (c >= 'a' && c <= 'f'); +} + +static void gas_scan_init(yasm_preproc_gas *pp, struct tokenval *tokval, const char *arg1) +{ + pp->expr.symbol = NULL; + pp->expr.string = arg1; + pp->expr.string_cursor = 0; + memset(tokval, 0, sizeof(struct tokenval)); + tokval->t_type = TOKEN_INVALID; +} + +static void gas_scan_cleanup(yasm_preproc_gas *pp, struct tokenval *tokval) +{ + if (tokval->t_integer) { + yasm_intnum_destroy(tokval->t_integer); + tokval->t_integer = NULL; + } + if (pp->expr.symbol) { + yasm_xfree(pp->expr.symbol); + pp->expr.symbol = NULL; + } +} + +static int gas_scan(void *preproc, struct tokenval *tokval) +{ + yasm_preproc_gas *pp = (yasm_preproc_gas *) preproc; + char c = get_char(pp); + const char *str; + + tokval->t_charptr = NULL; + + if (c == '\0') { + return tokval->t_type = TOKEN_EOS; + } + + if (isspace(c)) { + do { + next_char(pp); + c = get_char(pp); + } while (isspace(c)); + } + + if (isdigit(c)) { + int char_index = 0; + int value = 0; + + do { + value = value*10 + (c - '0'); + char_index++; + next_char(pp); + c = get_char(pp); + if (char_index == 1 && c == 'x' && value == 0) { + next_char(pp); + c = get_char(pp); + /* Hex notation. */ + while (ishex(c)) { + if (isdigit(c)) { + value = (value << 4) | (c - '0'); + } else { + value = (value << 4) | (tolower(c) - 'a' + 0xa); + } + next_char(pp); + c = get_char(pp); + } + break; + } + } while (isdigit(c)); + + if (tokval->t_integer) { + yasm_intnum_destroy(tokval->t_integer); + } + tokval->t_integer = yasm_intnum_create_int(value); + return tokval->t_type = TOKEN_NUM; + } + + tokval->t_type = TOKEN_INVALID; + str = get_str(pp); + + { + /* It should be tested whether GAS supports all of these or if there are missing ones. */ + unsigned i; + struct { + const char *op; + int token; + } ops[] = { + { "<<", TOKEN_SHL }, + { ">>", TOKEN_SHR }, + { "//", TOKEN_SDIV }, + { "%%", TOKEN_SMOD }, + { "==", TOKEN_EQ }, + { "!=", TOKEN_NE }, + { "<>", TOKEN_NE }, + { "<>", TOKEN_NE }, + { "<=", TOKEN_LE }, + { ">=", TOKEN_GE }, + { "&&", TOKEN_DBL_AND }, + { "^^", TOKEN_DBL_XOR }, + { "||", TOKEN_DBL_OR } + }; + for (i = 0; i < sizeof(ops)/sizeof(ops[0]); i++) { + if (!strcmp(str, ops[i].op)) { + tokval->t_type = ops[i].token; + break; + } + } + } + + if (tokval->t_type != TOKEN_INVALID) { + next_char(pp); + next_char(pp); + } else { + str = get_str(pp); + + next_char(pp); + tokval->t_type = c; + + /* Is it a symbol? If so we need to make it a TOKEN_ID. */ + if (isalpha(c) || c == '_' || c == '.') { + int symbol_length = 1; + + c = get_char(pp); + while (isalnum(c) || c == '$' || c == '_') { + symbol_length++; + next_char(pp); + c = get_char(pp); + } + + pp->expr.symbol = yasm_xrealloc(pp->expr.symbol, symbol_length + 1); + memcpy(pp->expr.symbol, str, symbol_length); + pp->expr.symbol[symbol_length] = '\0'; + + tokval->t_type = TOKEN_ID; + tokval->t_charptr = pp->expr.symbol; + } + } + + return tokval->t_type; +} + +static void gas_err(void *private_data, int severity, const char *fmt, ...) +{ + va_list args; + yasm_preproc_gas *pp = private_data; + + if (!pp->detect_errors_only) { + va_start(args, fmt); + yasm_error_set_va(YASM_ERROR_SYNTAX, N_(fmt), args); + yasm_errwarn_propagate(pp->errwarns, pp->current_line_number); + va_end(args); + } + + pp->fatal_error = 1; +} + +static long eval_expr(yasm_preproc_gas *pp, const char *arg1) +{ + struct tokenval tv; + yasm_expr *expr; + yasm_intnum *intn; + long value; + expr_state prev_state; + + if (!*arg1) { + return 0; + } + + prev_state = pp->expr; + gas_scan_init(pp, &tv, arg1); + expr = evaluate(gas_scan, pp, &tv, pp, CRITICAL, gas_err, pp->defines); + intn = yasm_expr_get_intnum(&expr, 0); + value = yasm_intnum_get_int(intn); + yasm_expr_destroy(expr); + gas_scan_cleanup(pp, &tv); + pp->expr = prev_state; + + return value; +} + +/* If-directive helpers. */ + +static int handle_if(yasm_preproc_gas *pp, int is_true) +{ + assert(pp->depth >= 0); + assert(pp->skip_depth == 0); + if (is_true) { + pp->depth++; + } else { + pp->skip_depth = 1; + } + return 1; +} + +static int handle_endif(yasm_preproc_gas *pp) +{ + if (pp->depth) { + pp->depth--; + } else { + yasm_error_set(YASM_ERROR_SYNTAX, N_("\".endif\" without \".if\"")); + yasm_errwarn_propagate(pp->errwarns, pp->current_line_number); + return 0; + } + return 1; +} + +static int handle_else(yasm_preproc_gas *pp, int is_elseif) +{ + if (!pp->depth) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("\".%s\" without \".if\""), is_elseif ? "elseif" : "else"); + yasm_errwarn_propagate(pp->errwarns, pp->current_line_number); + return 0; + } else { + pp->skip_depth = 1; + } + return 1; +} + +/* Directive-handling functions. */ + +static int eval_if(yasm_preproc_gas *pp, int negate, const char *arg1) +{ + long value; + if (!*arg1) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("expression is required in \".if\" statement")); + yasm_errwarn_propagate(pp->errwarns, pp->current_line_number); + return 0; + } + value = eval_expr(pp, arg1); + handle_if(pp, (negate ? !value : !!value)); + return 1; +} + +static int eval_else(yasm_preproc_gas *pp, int unused) +{ + return handle_else(pp, 0); +} + +static int eval_endif(yasm_preproc_gas *pp, int unused) +{ + return handle_endif(pp); +} + +static int eval_elseif(yasm_preproc_gas *pp, int unused, const char *arg1) +{ + if (!*arg1) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("expression is required in \".elseif\" statement")); + yasm_errwarn_propagate(pp->errwarns, pp->current_line_number); + return 0; + } + if (!handle_else(pp, 1)) { + return 0; + } + return eval_if(pp, 0, arg1); +} + +static int eval_ifb(yasm_preproc_gas *pp, int negate, const char *arg1) +{ + int is_blank = !*arg1; + return handle_if(pp, (negate ? !is_blank : is_blank)); +} + +static int eval_ifc(yasm_preproc_gas *pp, int negate, const char *args) +{ + char arg1[512], arg2[512]; + const char *remainder; + int len = unquote(args, arg1, sizeof(arg1), '\'', ',', &remainder); + if (len >= 0) { + len = unquote(remainder, arg2, sizeof(arg2), '\'', '\0', NULL); + if (len >= 0) { + int result = !strcmp(arg1, arg2); + return handle_if(pp, (negate ? !result : result)); + } + } else { + /* first argument was not single-quoted, assume non-quoted mode */ + remainder = get_arg(pp, args, arg1, sizeof(arg1)); + if (remainder) { + int result = !strcmp(arg1, remainder); + return handle_if(pp, (negate ? !result : result)); + } + } + yasm_error_set(YASM_ERROR_SYNTAX, N_("\"%s\" expects two single-quoted or unquoted arguments"), negate ? ".ifnc" : ".ifc"); + yasm_errwarn_propagate(pp->errwarns, pp->current_line_number); + return 0; +} + +static int eval_ifeqs(yasm_preproc_gas *pp, int negate, const char *args) +{ + char arg1[512], arg2[512]; + const char *remainder; + int len = unquote(args, arg1, sizeof(arg1), '"', ',', &remainder); + if (len >= 0) { + len = unquote(remainder, arg2, sizeof(arg2), '"', '\0', NULL); + if (len >= 0) { + int result = !strcmp(arg1, arg2); + return handle_if(pp, (negate ? !result : result)); + } + } + yasm_error_set(YASM_ERROR_SYNTAX, N_("\"%s\" expects two double-quoted arguments"), negate ? ".ifnes" : ".ifeqs"); + yasm_errwarn_propagate(pp->errwarns, pp->current_line_number); + return 1; +} + +static int eval_ifdef(yasm_preproc_gas *pp, int negate, const char *name) +{ + yasm_symrec *rec = yasm_symtab_get(pp->defines, name); + int result = (rec != NULL); + return handle_if(pp, (negate ? !result : result)); +} + +static int eval_ifge(yasm_preproc_gas *pp, int negate, const char *arg1) +{ + long value = eval_expr(pp, arg1); + int result = (value >= 0); + return handle_if(pp, (negate ? !result : result)); +} + +static int eval_ifgt(yasm_preproc_gas *pp, int negate, const char *arg1) +{ + long value = eval_expr(pp, arg1); + int result = (value > 0); + return handle_if(pp, (negate ? !result : result)); +} + +static int eval_include(yasm_preproc_gas *pp, int unused, const char *arg1) +{ + char *current_filename; + char filename[MAXPATHLEN]; + char *line; + int num_lines; + FILE *file; + buffered_line *prev_bline; + included_file *inc_file; + + if (unquote(arg1, filename, sizeof(filename), '"', '\0', NULL) < 0) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("string expected")); + yasm_errwarn_propagate(pp->errwarns, pp->current_line_number); + return 0; + } + + if (SLIST_EMPTY(&pp->included_files)) { + current_filename = pp->in_filename; + } else { + current_filename = SLIST_FIRST(&pp->included_files)->filename; + } + file = yasm_fopen_include(filename, current_filename, "r", NULL); + if (!file) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("unable to open included file \"%s\""), filename); + yasm_errwarn_propagate(pp->errwarns, pp->current_line_number); + return 0; + } + + num_lines = 0; + prev_bline = NULL; + line = read_line_from_file(pp, file); + while (line) { + buffered_line *bline = yasm_xmalloc(sizeof(buffered_line)); + bline->line = line; + bline->line_number = -1; + if (prev_bline) { + SLIST_INSERT_AFTER(prev_bline, bline, next); + } else { + SLIST_INSERT_HEAD(&pp->buffered_lines, bline, next); + } + prev_bline = bline; + line = read_line_from_file(pp, file); + num_lines++; + } + + inc_file = yasm_xmalloc(sizeof(included_file)); + inc_file->filename = yasm__xstrdup(filename); + inc_file->lines_remaining = num_lines; + SLIST_INSERT_HEAD(&pp->included_files, inc_file, next); + return 1; +} + +static int try_eval_expr(yasm_preproc_gas *pp, const char *value, long *result) +{ + int success; + + pp->detect_errors_only = 1; + *result = eval_expr(pp, value); + success = !pp->fatal_error; + pp->fatal_error = 0; + pp->detect_errors_only = 0; + + return success; +} + +static int remove_define(yasm_preproc_gas *pp, const char *name, int allow_redefine) +{ + yasm_symrec *rec = yasm_symtab_get(pp->defines, name); + if (rec) { + const yasm_symtab_iter *entry; + yasm_symtab *new_defines; + + if (!allow_redefine) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("symbol \"%s\" is already defined"), name); + yasm_errwarn_propagate(pp->errwarns, pp->current_line_number); + return 0; + } + + new_defines = yasm_symtab_create(); + + for (entry = yasm_symtab_first(pp->defines); entry; entry = yasm_symtab_next(entry)) { + yasm_symrec *entry_rec = yasm_symtab_iter_value(entry); + const char *rec_name = yasm_symrec_get_name(entry_rec); + if (strcmp(rec_name, name)) { + yasm_intnum *num = yasm_intnum_create_int(eval_expr(pp, rec_name)); + yasm_expr *expr = yasm_expr_create_ident(yasm_expr_int(num), 0); + yasm_symtab_define_equ(new_defines, rec_name, expr, 0); + } + } + + yasm_symtab_destroy(pp->defines); + pp->defines = new_defines; + } + return (rec != NULL); +} + +static void add_define(yasm_preproc_gas *pp, const char *name, long value, int allow_redefine, int substitute) +{ + deferred_define *def, *prev_def, *temp_def; + yasm_intnum *num; + yasm_expr *expr; + + remove_define(pp, name, allow_redefine); + + /* Add the new define. */ + num = yasm_intnum_create_int(value); + expr = yasm_expr_create_ident(yasm_expr_int(num), 0); + yasm_symtab_define_equ(pp->defines, name, expr, 0); + + /* Perform substitution on any deferred defines. */ + if (substitute) { + prev_def = NULL; + temp_def = NULL; + SLIST_FOREACH_SAFE(def, &pp->deferred_defines, next, temp_def) { + if (substitute_values(pp, &def->value)) { + /* Value was updated - check if it can be added to the symtab. */ + if (try_eval_expr(pp, def->value, &value)) { + add_define(pp, def->name, value, FALSE, FALSE); + if (prev_def) { + SLIST_NEXT(prev_def, next) = SLIST_NEXT(def, next); + } else { + SLIST_FIRST(&pp->deferred_defines) = SLIST_NEXT(def, next); + } + yasm_xfree(def->name); + yasm_xfree(def->value); + yasm_xfree(def); + continue; + } + } + prev_def = def; + } + } +} + +static int eval_set(yasm_preproc_gas *pp, int allow_redefine, const char *name, const char *value) +{ + if (!pp->skip_depth) { + long result; + + if (!try_eval_expr(pp, value, &result)) { + deferred_define *def; + remove_define(pp, name, allow_redefine); + def = yasm_xmalloc(sizeof(deferred_define)); + def->name = yasm__xstrdup(name); + def->value = yasm__xstrdup(value); + substitute_values(pp, &def->value); + SLIST_INSERT_HEAD(&pp->deferred_defines, def, next); + } else { + add_define(pp, name, result, allow_redefine, TRUE); + } + } + return 1; +} + +static int eval_macro(yasm_preproc_gas *pp, int unused, char *args) +{ + char *end; + char *line; + long nesting = 1; + macro_entry *macro = yasm_xmalloc(sizeof(macro_entry)); + + memset(macro, 0, sizeof(macro_entry)); + + end = args; + while (*end && !isspace(*end)) { + end++; + } + macro->name = yasm_xmalloc(end - args + 1); + memcpy(macro->name, args, end - args); + macro->name[end - args] = '\0'; + + skip_whitespace2(&end); + while (*end) { + args = end; + while (*end && !isspace(*end) && *end != ',') { + end++; + } + macro->num_params++; + macro->params = yasm_xrealloc(macro->params, macro->num_params*sizeof(char *)); + macro->params[macro->num_params - 1] = yasm_xmalloc(end - args + 1); + memcpy(macro->params[macro->num_params - 1], args, end - args); + macro->params[macro->num_params - 1][end - args] = '\0'; + skip_whitespace2(&end); + if (*end == ',') { + end++; + skip_whitespace2(&end); + } + } + + STAILQ_INSERT_TAIL(&pp->macros, macro, next); + + line = read_line(pp); + while (line) { + char *line2 = line; + skip_whitespace2(&line2); + if (starts_with(line2, ".macro")) { + nesting++; + } else if (starts_with(line, ".endm") && --nesting == 0) { + return 1; + } + macro->num_lines++; + macro->lines = yasm_xrealloc(macro->lines, macro->num_lines*sizeof(char *)); + macro->lines[macro->num_lines - 1] = line; + line = read_line(pp); + } + + yasm_error_set(YASM_ERROR_SYNTAX, N_("unexpected EOF in \".macro\" block")); + yasm_errwarn_propagate(pp->errwarns, yasm_linemap_get_current(pp->cur_lm)); + return 0; +} + +static int eval_endm(yasm_preproc_gas *pp, int unused) +{ + yasm_error_set(YASM_ERROR_SYNTAX, N_("\".endm\" without \".macro\"")); + yasm_errwarn_propagate(pp->errwarns, yasm_linemap_get_current(pp->cur_lm)); + return 0; +} + +static void get_param_value(macro_entry *macro, int param_index, const char *args, const char **value, int *length) +{ + int arg_index = 0; + const char *default_value = NULL; + const char *end, *eq = strstr(macro->params[param_index], "="); + + if (eq) { + default_value = eq + 1; + } + + skip_whitespace(&args); + end = args; + while (*end) { + args = end; + while (*end && !isspace(*end) && *end != ',') { + end++; + } + if (arg_index == param_index) { + if (end == args && default_value) { + *value = default_value; + *length = strlen(default_value); + } else { + *value = args; + *length = end - args; + } + return; + } + arg_index++; + skip_whitespace(&end); + if (*end == ',') { + end++; + skip_whitespace(&end); + } + } + + *value = default_value; + *length = (default_value ? strlen(default_value) : 0); +} + +static void expand_macro(yasm_preproc_gas *pp, macro_entry *macro, const char *args) +{ + int i, j; + buffered_line *prev_bline = NULL; + + for (i = 0; i < macro->num_lines; i++) { + buffered_line *bline = yasm_xmalloc(sizeof(buffered_line)); + struct tokenval tokval; + int prev_was_backslash = FALSE; + int line_length = strlen(macro->lines[i]); + char *work = yasm__xstrdup(macro->lines[i]); + expr_state prev_state = pp->expr; + + gas_scan_init(pp, &tokval, work); + while (gas_scan(pp, &tokval) != TOKEN_EOS) { + if (prev_was_backslash) { + if (tokval.t_type == TOKEN_ID) { + for (j = 0; j < macro->num_params; j++) { + char *end = strstr(macro->params[j], "="); + int len = (end ? (size_t)(end - macro->params[j]) + : strlen(macro->params[j])); + if (!strncmp(tokval.t_charptr, macro->params[j], len) + && tokval.t_charptr[len] == '\0') { + /* now, find matching argument. */ + const char *value; + char *line = work + (pp->expr.string - work); + int cursor = pp->expr.string_cursor; + int value_length, delta; + + get_param_value(macro, j, args, &value, &value_length); + + len++; /* leading slash */ + delta = value_length - len; + line_length += delta; + if (delta > 0) { + line = yasm_xrealloc(line, line_length + 1); + } + memmove(line + cursor - len + value_length, line + cursor, strlen(line + cursor) + 1); + memcpy(line + cursor - len, value, value_length); + pp->expr.string = work = line; + pp->expr.string_cursor += delta; + if (pp->expr.symbol) { + yasm_xfree(pp->expr.symbol); + pp->expr.symbol = NULL; + } + } + } + } + prev_was_backslash = FALSE; + } else if (tokval.t_type == '\\') { + prev_was_backslash = TRUE; + } + } + gas_scan_cleanup(pp, &tokval); + + bline->line = work + (pp->expr.string - work); + bline->line_number = -1; + pp->expr = prev_state; + + if (prev_bline) { + SLIST_INSERT_AFTER(prev_bline, bline, next); + } else { + SLIST_INSERT_HEAD(&pp->buffered_lines, bline, next); + } + prev_bline = bline; + } +} + +static int eval_rept(yasm_preproc_gas *pp, int unused, const char *arg1) +{ + long i, n = eval_expr(pp, arg1); + long num_lines = 0; + long nesting = 1; + char *line = read_line(pp); + buffered_line *prev_bline = NULL; + SLIST_HEAD(buffered_lines_head, buffered_line) lines; + int rept_start_file_line_number = pp->next_line_number - 1; + int rept_start_output_line_number = pp->current_line_number; + + SLIST_INIT(&lines); + + while (line) { + skip_whitespace2(&line); + if (starts_with(line, ".rept")) { + nesting++; + } else if (starts_with(line, ".endr") && --nesting == 0) { + for (i = 0; i < n; i++) { + buffered_line *current_line; + prev_bline = NULL; + SLIST_FOREACH(current_line, &lines, next) { + buffered_line *bline = yasm_xmalloc(sizeof(buffered_line)); + bline->line = yasm__xstrdup(current_line->line); + bline->line_number = current_line->line_number; + if (prev_bline) { + SLIST_INSERT_AFTER(prev_bline, bline, next); + } else { + SLIST_INSERT_HEAD(&pp->buffered_lines, bline, next); + } + prev_bline = bline; + } + } + if (!SLIST_EMPTY(&pp->included_files)) { + included_file *inc_file = SLIST_FIRST(&pp->included_files); + inc_file->lines_remaining += n * num_lines; + } + while (!SLIST_EMPTY(&lines)) { + buffered_line *bline = SLIST_FIRST(&lines); + SLIST_REMOVE_HEAD(&lines, next); + yasm_xfree(bline->line); + yasm_xfree(bline); + } + yasm_xfree(line); + return 1; + } + if (n > 0) { + buffered_line *bline = yasm_xmalloc(sizeof(buffered_line)); + bline->line = line; + bline->line_number = pp->next_line_number; + if (prev_bline) { + SLIST_INSERT_AFTER(prev_bline, bline, next); + } else { + SLIST_INSERT_HEAD(&lines, bline, next); + } + prev_bline = bline; + } else { + yasm_xfree(line); + } + line = read_line(pp); + num_lines++; + } + yasm_linemap_set(pp->cur_lm, pp->in_filename, rept_start_output_line_number, rept_start_file_line_number, 0); + yasm_error_set(YASM_ERROR_SYNTAX, N_("rept without matching endr")); + yasm_errwarn_propagate(pp->errwarns, rept_start_output_line_number); + return 0; +} + +static int eval_endr(yasm_preproc_gas *pp, int unused) +{ + yasm_error_set(YASM_ERROR_SYNTAX, N_("\".endr\" without \".rept\"")); + yasm_errwarn_propagate(pp->errwarns, pp->current_line_number); + return 0; +} + +/* Top-level line processing. */ + +typedef int (*pp_fn0_t)(yasm_preproc_gas *pp, int param); +typedef int (*pp_fn1_t)(yasm_preproc_gas *pp, int param, const char *arg1); +typedef int (*pp_fn2_t)(yasm_preproc_gas *pp, int param, const char *arg1, const char *arg2); + +#define FN(f) ((pp_fn0_t) &(f)) + +static void kill_comments(yasm_preproc_gas *pp, char *line) +{ + int next = 2; + char *cstart; + + skip_whitespace2(&line); + if (*line == '#' || !strncmp(line, "//", 2)) { + *line = '\0'; + return; + } + + if (pp->in_comment) { + cstart = line; + next = 0; + } else { + cstart = strstr(line, "/*"); + next = 2; + } + + while (cstart) { + char *cend = strstr(cstart + next, "*/"); + + if (!cend) { + *cstart = '\0'; + pp->in_comment = TRUE; + return; + } + + memmove(cstart, cend + 2, strlen(cend + 2) + 1); + pp->in_comment = FALSE; + cstart = strstr(cstart, "/*"); + next = 2; + } +} + +static int substitute_values(yasm_preproc_gas *pp, char **line_ptr) +{ + int changed = 0; + char *line = *line_ptr; + int line_length = strlen(line); + struct tokenval tokval; + expr_state prev_state = pp->expr; + + gas_scan_init(pp, &tokval, line); + while (gas_scan(pp, &tokval) != TOKEN_EOS) { + if (tokval.t_type == TOKEN_ID) { + yasm_symrec *rec = yasm_symtab_get(pp->defines, tokval.t_charptr); + if (rec) { + int cursor = pp->expr.string_cursor; + int len = strlen(tokval.t_charptr); + char value[64]; + int value_length = sprintf(value, "%ld", eval_expr(pp, tokval.t_charptr)); + int delta = value_length - len; + + line_length += delta; + if (delta > 0) { + line = yasm_xrealloc(line, line_length + 1); + } + memmove(line + cursor - len + value_length, line + cursor, strlen(line + cursor) + 1); + memcpy(line + cursor - len, value, value_length); + pp->expr.string = line; + pp->expr.string_cursor = cursor + delta; + changed = 1; + } + yasm_xfree(pp->expr.symbol); + pp->expr.symbol = NULL; + } + } + gas_scan_cleanup(pp, &tokval); + pp->expr = prev_state; + + if (changed) { + *line_ptr = line; + } + + return changed; +} + +static int process_line(yasm_preproc_gas *pp, char **line_ptr) +{ + macro_entry *macro; + size_t i; + char *line = *line_ptr; + struct { + const char *name; + int nargs; + pp_fn0_t fn; + int param; + } directives[] = { + {"else", 0, FN(eval_else), 0}, + {"elseif", 1, FN(eval_elseif), 0}, + {"endif", 0, FN(eval_endif), 0}, + {"if", 1, FN(eval_if), 0}, + {"ifb", 1, FN(eval_ifb), 0}, + {"ifc", 1, FN(eval_ifc), 0}, + {"ifdef", 1, FN(eval_ifdef), 0}, + {"ifeq", 1, FN(eval_if), 1}, + {"ifeqs", 1, FN(eval_ifeqs), 0}, + {"ifge", 1, FN(eval_ifge), 0}, + {"ifgt", 1, FN(eval_ifgt), 0}, + {"ifle", 1, FN(eval_ifgt), 1}, + {"iflt", 1, FN(eval_ifge), 1}, + {"ifnb", 1, FN(eval_ifb), 1}, + {"ifnc", 1, FN(eval_ifc), 1}, + {"ifndef", 1, FN(eval_ifdef), 1}, + {"ifnotdef", 1, FN(eval_ifdef), 1}, + {"ifne", 1, FN(eval_if), 0}, + {"ifnes", 1, FN(eval_ifeqs), 1}, + {"include", 1, FN(eval_include), 0}, + {"set", 2, FN(eval_set), 1}, + {"equ", 2, FN(eval_set), 1}, + {"equiv", 2, FN(eval_set), 0}, + {"macro", 1, FN(eval_macro), 0}, + {"endm", 0, FN(eval_endm), 0}, + {"rept", 1, FN(eval_rept), 0}, + {"endr", 1, FN(eval_endr), 0}, + }; + + kill_comments(pp, line); + skip_whitespace2(&line); + if (*line == '\0') { + return FALSE; + } + + /* See if this is a macro call. */ + STAILQ_FOREACH(macro, &pp->macros, next) { + const char *remainder = starts_with(line, macro->name); + if (remainder && (!*remainder || isspace(*remainder))) { + skip_whitespace2(&line); + expand_macro(pp, macro, remainder); + return FALSE; + } + } + + for (i = 0; i < sizeof(directives)/sizeof(directives[0]); i++) { + char buf1[1024]; + const char *remainder = matches(line, directives[i].name); + + if (remainder) { + if (pp->skip_depth) { + if (!strncmp("if", directives[i].name, 2)) { + pp->skip_depth++; + } else if (!strcmp("endif", directives[i].name)) { + pp->skip_depth--; + } else if (!strcmp("else", directives[i].name)) { + if (pp->skip_depth == 1) { + pp->skip_depth = 0; + pp->depth++; + } + } + return FALSE; + } else if (directives[i].nargs == 0) { + pp_fn0_t fn = (pp_fn0_t) directives[i].fn; + pp->fatal_error = !fn(pp, directives[i].param); + return FALSE; + } else if (directives[i].nargs == 1) { + pp_fn1_t fn = (pp_fn1_t) directives[i].fn; + skip_whitespace(&remainder); + pp->fatal_error = !fn(pp, directives[i].param, remainder); + return FALSE; + } else if (directives[i].nargs == 2) { + remainder = get_arg(pp, remainder, buf1, sizeof(buf1)); + if (!remainder || !*remainder || !*buf1) { + yasm_error_set(YASM_ERROR_SYNTAX, N_("\".%s\" expects two arguments"), directives[i].name); + yasm_errwarn_propagate(pp->errwarns, pp->current_line_number); + pp->fatal_error = 1; + } else { + pp_fn2_t fn = (pp_fn2_t) directives[i].fn; + pp->fatal_error = !fn(pp, directives[i].param, buf1, remainder); + } + return FALSE; + } + } + } + + if (pp->skip_depth == 0) { + substitute_values(pp, line_ptr); + return TRUE; + } + + return FALSE; +} + +/* Functions exported by the preprocessor. */ + +static yasm_preproc * +gas_preproc_create(const char *in_filename, yasm_symtab *symtab, + yasm_linemap *lm, yasm_errwarns *errwarns) +{ + FILE *f; + yasm_preproc_gas *pp = yasm_xmalloc(sizeof(yasm_preproc_gas)); + + if (strcmp(in_filename, "-") != 0) { + f = fopen(in_filename, "r"); + if (!f) { + yasm__fatal(N_("Could not open input file")); + } + } else { + f = stdin; + } + + pp->preproc.module = &yasm_gas_LTX_preproc; + pp->in = f; + pp->in_filename = yasm__xstrdup(in_filename); + pp->defines = yasm_symtab_create(); + SLIST_INIT(&pp->deferred_defines); + yasm_symtab_set_case_sensitive(pp->defines, 1); + pp->depth = 0; + pp->skip_depth = 0; + pp->in_comment = FALSE; + SLIST_INIT(&pp->buffered_lines); + SLIST_INIT(&pp->included_files); + STAILQ_INIT(&pp->macros); + pp->in_line_number = 0; + pp->next_line_number = 0; + pp->current_line_number = 0; + pp->cur_lm = lm; + pp->errwarns = errwarns; + pp->fatal_error = 0; + pp->detect_errors_only = 0; + + return (yasm_preproc *) pp; +} + +static void +gas_preproc_destroy(yasm_preproc *preproc) +{ + yasm_preproc_gas *pp = (yasm_preproc_gas *) preproc; + yasm_xfree(pp->in_filename); + yasm_symtab_destroy(pp->defines); + while (!SLIST_EMPTY(&pp->deferred_defines)) { + deferred_define *def = SLIST_FIRST(&pp->deferred_defines); + SLIST_REMOVE_HEAD(&pp->deferred_defines, next); + yasm_xfree(def->name); + yasm_xfree(def->value); + yasm_xfree(def); + } + while (!SLIST_EMPTY(&pp->buffered_lines)) { + buffered_line *bline = SLIST_FIRST(&pp->buffered_lines); + SLIST_REMOVE_HEAD(&pp->buffered_lines, next); + yasm_xfree(bline->line); + yasm_xfree(bline); + } + while (!SLIST_EMPTY(&pp->included_files)) { + included_file *inc_file = SLIST_FIRST(&pp->included_files); + SLIST_REMOVE_HEAD(&pp->included_files, next); + yasm_xfree(inc_file->filename); + yasm_xfree(inc_file); + } + while (!STAILQ_EMPTY(&pp->macros)) { + int i; + macro_entry *macro = STAILQ_FIRST(&pp->macros); + STAILQ_REMOVE_HEAD(&pp->macros, next); + yasm_xfree(macro->name); + for (i = 0; i < macro->num_params; i++) + yasm_xfree(macro->params[i]); + yasm_xfree(macro->params); + for (i = 0; i < macro->num_lines; i++) + yasm_xfree(macro->lines[i]); + yasm_xfree(macro->lines); + yasm_xfree(macro); + } + yasm_xfree(preproc); +} + +static char * +gas_preproc_get_line(yasm_preproc *preproc) +{ + yasm_preproc_gas *pp = (yasm_preproc_gas *)preproc; + int done = FALSE; + char *line = NULL; + + pp->current_line_number++; + + do { + if (line != NULL) { + yasm_xfree(line); + } + if (pp->fatal_error) { + return NULL; + } + line = read_line(pp); + if (line == NULL) { + if (pp->in_comment) { + yasm_linemap_set(pp->cur_lm, pp->in_filename, pp->current_line_number, pp->next_line_number, 0); + yasm_warn_set(YASM_WARN_GENERAL, N_("end of file in comment")); + yasm_errwarn_propagate(pp->errwarns, pp->current_line_number); + pp->in_comment = FALSE; + } + return NULL; + } + done = process_line(pp, &line); + } while (!done); + + yasm_linemap_set(pp->cur_lm, pp->in_filename, pp->current_line_number, pp->next_line_number, 0); + + return line; +} + +static size_t +gas_preproc_get_included_file(yasm_preproc *preproc, char *buf, + size_t max_size) +{ + /* TODO */ + return 0; +} + +static void +gas_preproc_add_include_file(yasm_preproc *preproc, const char *filename) +{ + yasm_preproc_gas *pp = (yasm_preproc_gas *) preproc; + eval_include(pp, 0, filename); +} + +static void +gas_preproc_predefine_macro(yasm_preproc *preproc, const char *macronameval) +{ + yasm_preproc_gas *pp = (yasm_preproc_gas *) preproc; + const char *eq = strstr(macronameval, "="); + char *name, *value; + if (eq) { + value = yasm__xstrdup(eq + 1); + name = yasm_xmalloc(eq - macronameval + 1); + memcpy(name, macronameval, eq - macronameval); + name[eq - macronameval] = '\0'; + } else { + name = yasm__xstrdup(macronameval); + value = yasm__xstrdup(""); + } + eval_set(pp, 1, name, value); + yasm_xfree(name); + yasm_xfree(value); +} + +static void +gas_preproc_undefine_macro(yasm_preproc *preproc, const char *macroname) +{ + /* TODO */ +} + +static void +gas_preproc_define_builtin(yasm_preproc *preproc, const char *macronameval) +{ + /* TODO */ +} + +static void +gas_preproc_add_standard(yasm_preproc *preproc, const char **macros) +{ + /* TODO */ +} + + +/* Define preproc structure -- see preproc.h for details */ +yasm_preproc_module yasm_gas_LTX_preproc = { + "GNU AS (GAS)-compatible preprocessor", + "gas", + gas_preproc_create, + gas_preproc_destroy, + gas_preproc_get_line, + gas_preproc_get_included_file, + gas_preproc_add_include_file, + gas_preproc_predefine_macro, + gas_preproc_undefine_macro, + gas_preproc_define_builtin, + gas_preproc_add_standard +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/gas/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/preprocs/gas/tests/Makefile.inc new file mode 100644 index 0000000000..c5e628a041 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/gas/tests/Makefile.inc @@ -0,0 +1,5 @@ +#TESTS += modules/preprocs/gas/tests/rawpp_test.sh + +#EXTRA_DIST += modules/preprocs/gas/tests/rawpp_test.sh +#EXTRA_DIST += modules/preprocs/gas/tests/longline.asm +#EXTRA_DIST += modules/preprocs/gas/tests/longline.hex diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/CMakeLists.txt new file mode 100644 index 0000000000..31e7a0345a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/CMakeLists.txt @@ -0,0 +1,24 @@ +add_executable(genversion preprocs/nasm/genversion.c) +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.mac + COMMAND $ ${CMAKE_CURRENT_BINARY_DIR}/version.mac + DEPENDS genversion + ) + +YASM_GENMACRO( + ${CMAKE_CURRENT_BINARY_DIR}/version.mac + ${CMAKE_CURRENT_BINARY_DIR}/nasm-version.c + nasm_version_mac + ) + +SET_SOURCE_FILES_PROPERTIES(preprocs/nasm/nasm-preproc.c PROPERTIES + OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/nasm-version.c + ) + +YASM_ADD_MODULE(preproc_nasm + preprocs/nasm/nasm-preproc.c + preprocs/nasm/nasm-pp.c + preprocs/nasm/nasmlib.c + preprocs/nasm/nasm-eval.c + ) + diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/Makefile.inc new file mode 100644 index 0000000000..ef29d479b2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/Makefile.inc @@ -0,0 +1,38 @@ +libyasm_a_SOURCES += modules/preprocs/nasm/nasm-preproc.c +libyasm_a_SOURCES += modules/preprocs/nasm/nasm-pp.h +libyasm_a_SOURCES += modules/preprocs/nasm/nasm-pp.c +libyasm_a_SOURCES += modules/preprocs/nasm/nasm.h +libyasm_a_SOURCES += modules/preprocs/nasm/nasmlib.h +libyasm_a_SOURCES += modules/preprocs/nasm/nasmlib.c +libyasm_a_SOURCES += modules/preprocs/nasm/nasm-eval.h +libyasm_a_SOURCES += modules/preprocs/nasm/nasm-eval.c + +YASM_MODULES += preproc_nasm preproc_tasm + +$(top_srcdir)/modules/preprocs/nasm/nasm-preproc.c: nasm-version.c + +nasm-version.c: version.mac genmacro$(EXEEXT) + $(top_builddir)/genmacro$(EXEEXT) $@ nasm_version_mac version.mac + +BUILT_SOURCES += nasm-version.c +CLEANFILES += nasm-version.c + +version.mac: genversion$(EXEEXT) + $(top_builddir)/genversion$(EXEEXT) $@ + +BUILT_SOURCES += version.mac +CLEANFILES += version.mac + +noinst_PROGRAMS += genversion + +genversion_SOURCES = +EXTRA_DIST += modules/preprocs/nasm/genversion.c +genversion_LDADD = genversion.$(OBJEXT) +genversion_LINK = $(CCLD_FOR_BUILD) -o $@ + +genversion.$(OBJEXT): modules/preprocs/nasm/genversion.c + $(CC_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) -c -o $@ `test -f modules/preprocs/nasm/genversion.c || echo '$(srcdir)/'`modules/preprocs/nasm/genversion.c + +EXTRA_DIST += modules/preprocs/nasm/tests/Makefile.inc + +include modules/preprocs/nasm/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/genversion.c b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/genversion.c new file mode 100644 index 0000000000..164b4d6b51 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/genversion.c @@ -0,0 +1,81 @@ +/* + * + * Generate version.mac + * + * Copyright (C) 2006-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 "config.h" /* for PACKAGE_VERSION */ + +#include +#include +#include +#include + +int +main(int argc, char *argv[]) +{ + FILE *out; + int major, minor, subminor, patchlevel, matched; + + if (argc != 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + return EXIT_FAILURE; + } + + matched = sscanf(PACKAGE_VERSION, "%d.%d.%d.%d", &major, &minor, &subminor, + &patchlevel); + + if (matched == 3) + patchlevel = 0; + else if (matched != 4) { + fprintf(stderr, "Version tokenizing error\n"); + return EXIT_FAILURE; + } + + out = fopen(argv[1], "wt"); + + if (!out) { + fprintf(stderr, "Could not open `%s'.\n", argv[1]); + return EXIT_FAILURE; + } + + fprintf(out, "; This file auto-generated by genversion.c" + " - don't edit it\n"); + + fprintf(out, "%%define __YASM_MAJOR__ %d\n", major); + fprintf(out, "%%define __YASM_MINOR__ %d\n", minor); + fprintf(out, "%%define __YASM_SUBMINOR__ %d\n", subminor); + fprintf(out, "%%define __YASM_BUILD__ %d\n", patchlevel); + fprintf(out, "%%define __YASM_PATCHLEVEL__ %d\n", patchlevel); + + /* Version id (hex number) */ + fprintf(out, "%%define __YASM_VERSION_ID__ 0%02x%02x%02x%02xh\n", major, + minor, subminor, patchlevel); + + /* Version string */ + fprintf(out, "%%define __YASM_VER__ \"%s\"\n", PACKAGE_VERSION); + fclose(out); + + return EXIT_SUCCESS; +} diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-eval.c b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-eval.c new file mode 100644 index 0000000000..e249484cd5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-eval.c @@ -0,0 +1,441 @@ +/* eval.c expression evaluator for the Netwide Assembler + * + * The Netwide Assembler is copyright (C) 1996 Simon Tatham and + * Julian Hall. All rights reserved. The software is + * redistributable under the licence given in the file "Licence" + * distributed in the NASM archive. + * + * initial version 27/iii/95 by Simon Tatham + */ +#include +#include +#include +#include +#include +#include +#include + +#include "nasm.h" +#include "nasmlib.h" +#include "nasm-eval.h" + +/* The assembler symbol table. */ +extern yasm_symtab *nasm_symtab; + +static scanner scan; /* Address of scanner routine */ +static efunc error; /* Address of error reporting routine */ + +static struct tokenval *tokval; /* The current token */ +static int i; /* The t_type of tokval */ + +static void *scpriv; + +/* + * Recursive-descent parser. Called with a single boolean operand, + * which is TRUE if the evaluation is critical (i.e. unresolved + * symbols are an error condition). Must update the global `i' to + * reflect the token after the parsed string. May return NULL. + * + * evaluate() should report its own errors: on return it is assumed + * that if NULL has been returned, the error has already been + * reported. + */ + +/* + * Grammar parsed is: + * + * expr : bexpr [ WRT expr6 ] + * bexpr : rexp0 or expr0 depending on relative-mode setting + * rexp0 : rexp1 [ {||} rexp1...] + * rexp1 : rexp2 [ {^^} rexp2...] + * rexp2 : rexp3 [ {&&} rexp3...] + * rexp3 : expr0 [ {=,==,<>,!=,<,>,<=,>=} expr0 ] + * expr0 : expr1 [ {|} expr1...] + * expr1 : expr2 [ {^} expr2...] + * expr2 : expr3 [ {&} expr3...] + * expr3 : expr4 [ {<<,>>} expr4...] + * expr4 : expr5 [ {+,-} expr5...] + * expr5 : expr6 [ {*,/,%,//,%%} expr6...] + * expr6 : { ~,+,-,SEG } expr6 + * | (bexpr) + * | symbol + * | $ + * | number + */ + +static yasm_expr *rexp0(void), *rexp1(void), *rexp2(void), *rexp3(void); + +static yasm_expr *expr0(void), *expr1(void), *expr2(void), *expr3(void); +static yasm_expr *expr4(void), *expr5(void), *expr6(void); + +static yasm_expr *(*bexpr)(void); + +static yasm_expr *rexp0(void) +{ + yasm_expr *e, *f; + + e = rexp1(); + if (!e) + return NULL; + + while (i == TOKEN_DBL_OR) + { + i = scan(scpriv, tokval); + f = rexp1(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + e = yasm_expr_create_tree(e, YASM_EXPR_LOR, f, 0); + } + return e; +} + +static yasm_expr *rexp1(void) +{ + yasm_expr *e, *f; + + e = rexp2(); + if (!e) + return NULL; + + while (i == TOKEN_DBL_XOR) + { + i = scan(scpriv, tokval); + f = rexp2(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + e = yasm_expr_create_tree(e, YASM_EXPR_LXOR, f, 0); + } + return e; +} + +static yasm_expr *rexp2(void) +{ + yasm_expr *e, *f; + + e = rexp3(); + if (!e) + return NULL; + while (i == TOKEN_DBL_AND) + { + i = scan(scpriv, tokval); + f = rexp3(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + e = yasm_expr_create_tree(e, YASM_EXPR_LAND, f, 0); + } + return e; +} + +static yasm_expr *rexp3(void) +{ + yasm_expr *e, *f; + + e = expr0(); + if (!e) + return NULL; + + while (i == TOKEN_EQ || i == TOKEN_LT || i == TOKEN_GT || + i == TOKEN_NE || i == TOKEN_LE || i == TOKEN_GE) + { + int j = i; + i = scan(scpriv, tokval); + f = expr0(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + switch (j) + { + case TOKEN_EQ: + e = yasm_expr_create_tree(e, YASM_EXPR_EQ, f, 0); + break; + case TOKEN_LT: + e = yasm_expr_create_tree(e, YASM_EXPR_LT, f, 0); + break; + case TOKEN_GT: + e = yasm_expr_create_tree(e, YASM_EXPR_GT, f, 0); + break; + case TOKEN_NE: + e = yasm_expr_create_tree(e, YASM_EXPR_NE, f, 0); + break; + case TOKEN_LE: + e = yasm_expr_create_tree(e, YASM_EXPR_LE, f, 0); + break; + case TOKEN_GE: + e = yasm_expr_create_tree(e, YASM_EXPR_GE, f, 0); + break; + } + } + return e; +} + +static yasm_expr *expr0(void) +{ + yasm_expr *e, *f; + + e = expr1(); + if (!e) + return NULL; + + while (i == '|') + { + i = scan(scpriv, tokval); + f = expr1(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + e = yasm_expr_create_tree(e, YASM_EXPR_OR, f, 0); + } + return e; +} + +static yasm_expr *expr1(void) +{ + yasm_expr *e, *f; + + e = expr2(); + if (!e) + return NULL; + + while (i == '^') { + i = scan(scpriv, tokval); + f = expr2(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + e = yasm_expr_create_tree(e, YASM_EXPR_XOR, f, 0); + } + return e; +} + +static yasm_expr *expr2(void) +{ + yasm_expr *e, *f; + + e = expr3(); + if (!e) + return NULL; + + while (i == '&') { + i = scan(scpriv, tokval); + f = expr3(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + e = yasm_expr_create_tree(e, YASM_EXPR_AND, f, 0); + } + return e; +} + +static yasm_expr *expr3(void) +{ + yasm_expr *e, *f; + + e = expr4(); + if (!e) + return NULL; + + while (i == TOKEN_SHL || i == TOKEN_SHR) + { + int j = i; + i = scan(scpriv, tokval); + f = expr4(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + + switch (j) { + case TOKEN_SHL: + e = yasm_expr_create_tree(e, YASM_EXPR_SHL, f, 0); + break; + case TOKEN_SHR: + e = yasm_expr_create_tree(e, YASM_EXPR_SHR, f, 0); + break; + } + } + return e; +} + +static yasm_expr *expr4(void) +{ + yasm_expr *e, *f; + + e = expr5(); + if (!e) + return NULL; + while (i == '+' || i == '-') + { + int j = i; + i = scan(scpriv, tokval); + f = expr5(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + switch (j) { + case '+': + e = yasm_expr_create_tree(e, YASM_EXPR_ADD, f, 0); + break; + case '-': + e = yasm_expr_create_tree(e, YASM_EXPR_SUB, f, 0); + break; + } + } + return e; +} + +static yasm_expr *expr5(void) +{ + yasm_expr *e, *f; + + e = expr6(); + if (!e) + return NULL; + while (i == '*' || i == '/' || i == '%' || + i == TOKEN_SDIV || i == TOKEN_SMOD) + { + int j = i; + i = scan(scpriv, tokval); + f = expr6(); + if (!f) { + yasm_expr_destroy(e); + return NULL; + } + switch (j) { + case '*': + e = yasm_expr_create_tree(e, YASM_EXPR_MUL, f, 0); + break; + case '/': + e = yasm_expr_create_tree(e, YASM_EXPR_DIV, f, 0); + break; + case '%': + e = yasm_expr_create_tree(e, YASM_EXPR_MOD, f, 0); + break; + case TOKEN_SDIV: + e = yasm_expr_create_tree(e, YASM_EXPR_SIGNDIV, f, 0); + break; + case TOKEN_SMOD: + e = yasm_expr_create_tree(e, YASM_EXPR_SIGNMOD, f, 0); + break; + } + } + return e; +} + +static yasm_expr *expr6(void) +{ + yasm_expr *e = NULL; + + if (i == '-') { + i = scan(scpriv, tokval); + e = expr6(); + if (!e) + return NULL; + return yasm_expr_create_branch(YASM_EXPR_NEG, e, 0); + } else if (i == '+') { + i = scan(scpriv, tokval); + return expr6(); + } else if (i == '~') { + i = scan(scpriv, tokval); + e = expr6(); + if (!e) + return NULL; + return yasm_expr_create_branch(YASM_EXPR_NOT, e, 0); + } else if (i == TOKEN_SEG) { + i = scan(scpriv, tokval); + e = expr6(); + if (!e) + return NULL; + error(ERR_NONFATAL, "%s not supported", "SEG"); + return e; + } else if (i == '(') { + i = scan(scpriv, tokval); + e = bexpr(); + if (!e) + return NULL; + if (i != ')') { + error(ERR_NONFATAL, "expecting `)'"); + return NULL; + } + i = scan(scpriv, tokval); + return e; + } + else if (i == TOKEN_NUM || i == TOKEN_ID || + i == TOKEN_HERE || i == TOKEN_BASE) + { + switch (i) { + case TOKEN_NUM: + e = yasm_expr_create_ident(yasm_expr_int(tokval->t_integer), 0); + break; + case TOKEN_ID: + if (nasm_symtab) { + yasm_symrec *sym = + yasm_symtab_get(nasm_symtab, tokval->t_charptr); + if (sym) { + e = yasm_expr_create_ident(yasm_expr_sym(sym), 0); + } else { + error(ERR_NONFATAL, + "undefined symbol `%s' in preprocessor", + tokval->t_charptr); + e = yasm_expr_create_ident(yasm_expr_int( + yasm_intnum_create_int(1)), 0); + } + break; + } + /*fallthrough*/ + case TOKEN_HERE: + case TOKEN_BASE: + error(ERR_NONFATAL, + "cannot reference symbol `%s' in preprocessor", + (i == TOKEN_ID ? tokval->t_charptr : + i == TOKEN_HERE ? "$" : "$$")); + e = yasm_expr_create_ident(yasm_expr_int(yasm_intnum_create_int(1)), + 0); + break; + } + i = scan(scpriv, tokval); + return e; + } else { + error(ERR_NONFATAL, "expression syntax error"); + return NULL; + } +} + +yasm_expr *nasm_evaluate (scanner sc, void *scprivate, struct tokenval *tv, + int critical, efunc report_error) +{ + if (critical & CRITICAL) { + critical &= ~CRITICAL; + bexpr = rexp0; + } else + bexpr = expr0; + + scan = sc; + scpriv = scprivate; + tokval = tv; + error = report_error; + + if (tokval->t_type == TOKEN_INVALID) + i = scan(scpriv, tokval); + else + i = tokval->t_type; + + return bexpr (); +} diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-eval.h b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-eval.h new file mode 100644 index 0000000000..f06937c5cc --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-eval.h @@ -0,0 +1,18 @@ +/* eval.h header file for eval.c + * + * The Netwide Assembler is copyright (C) 1996 Simon Tatham and + * Julian Hall. All rights reserved. The software is + * redistributable under the licence given in the file "Licence" + * distributed in the NASM archive. + */ + +#ifndef NASM_EVAL_H +#define NASM_EVAL_H + +/* + * The evaluator itself. + */ +yasm_expr *nasm_evaluate (scanner sc, void *scprivate, struct tokenval *tv, + int critical, efunc report_error); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-pp.c b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-pp.c new file mode 100644 index 0000000000..27a8cc6c93 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-pp.c @@ -0,0 +1,5317 @@ +/* -*- mode: c; c-file-style: "bsd" -*- */ +/* preproc.c macro preprocessor for the Netwide Assembler + * + * The Netwide Assembler is copyright (C) 1996 Simon Tatham and + * Julian Hall. All rights reserved. The software is + * redistributable under the licence given in the file "Licence" + * distributed in the NASM archive. + * + * initial version 18/iii/97 by Simon Tatham + */ + +/* Typical flow of text through preproc + * + * pp_getline gets tokenised lines, either + * + * from a macro expansion + * + * or + * { + * read_line gets raw text from stdmacpos, or predef, or current input file + * tokenise converts to tokens + * } + * + * expand_mmac_params is used to expand %1 etc., unless a macro is being + * defined or a false conditional is being processed + * (%0, %1, %+1, %-1, %%foo + * + * do_directive checks for directives + * + * expand_smacro is used to expand single line macros + * + * expand_mmacro is used to expand multi-line macros + * + * detoken is used to convert the line back to text + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "nasm.h" +#include "nasmlib.h" +#include "nasm-pp.h" + +typedef struct SMacro SMacro; +typedef struct MMacro MMacro; +typedef struct Context Context; +typedef struct Token Token; +typedef struct Blocks Blocks; +typedef struct Line Line; +typedef struct Include Include; +typedef struct Cond Cond; + +/* + * Store the definition of a single-line macro. + */ +struct SMacro +{ + SMacro *next; + char *name; + int level; + int casesense; + int nparam; + int in_progress; + Token *expansion; +}; + +/* + * Store the definition of a multi-line macro. This is also used to + * store the interiors of `%rep...%endrep' blocks, which are + * effectively self-re-invoking multi-line macros which simply + * don't have a name or bother to appear in the hash tables. %rep + * blocks are signified by having a NULL `name' field. + * + * In a MMacro describing a `%rep' block, the `in_progress' field + * isn't merely boolean, but gives the number of repeats left to + * run. + * + * The `next' field is used for storing MMacros in hash tables; the + * `next_active' field is for stacking them on istk entries. + * + * When a MMacro is being expanded, `params', `iline', `nparam', + * `paramlen', `rotate' and `unique' are local to the invocation. + */ +struct MMacro +{ + MMacro *next; + char *name; + int casesense; + long nparam_min, nparam_max; + int plus; /* is the last parameter greedy? */ + int nolist; /* is this macro listing-inhibited? */ + int in_progress; + Token *dlist; /* All defaults as one list */ + Token **defaults; /* Parameter default pointers */ + int ndefs; /* number of default parameters */ + Line *expansion; + + MMacro *next_active; + MMacro *rep_nest; /* used for nesting %rep */ + Token **params; /* actual parameters */ + Token *iline; /* invocation line */ + long nparam, rotate, *paramlen; + unsigned long unique; + int lineno; /* Current line number on expansion */ +}; + +/* + * The context stack is composed of a linked list of these. + */ +struct Context +{ + Context *next; + SMacro *localmac; + char *name; + unsigned long number; +}; + +/* + * This is the internal form which we break input lines up into. + * Typically stored in linked lists. + * + * Note that `type' serves a double meaning: TOK_SMAC_PARAM is not + * necessarily used as-is, but is intended to denote the number of + * the substituted parameter. So in the definition + * + * %define a(x,y) ( (x) & ~(y) ) + * + * the token representing `x' will have its type changed to + * TOK_SMAC_PARAM, but the one representing `y' will be + * TOK_SMAC_PARAM+1. + * + * TOK_INTERNAL_STRING is a dirty hack: it's a single string token + * which doesn't need quotes around it. Used in the pre-include + * mechanism as an alternative to trying to find a sensible type of + * quote to use on the filename we were passed. + */ +struct Token +{ + Token *next; + char *text; + SMacro *mac; /* associated macro for TOK_SMAC_END */ + int type; +}; +enum +{ + TOK_WHITESPACE = 1, TOK_COMMENT, TOK_ID, TOK_PREPROC_ID, TOK_STRING, + TOK_NUMBER, TOK_SMAC_END, TOK_OTHER, TOK_SMAC_PARAM, + TOK_INTERNAL_STRING +}; + +/* + * Multi-line macro definitions are stored as a linked list of + * these, which is essentially a container to allow several linked + * lists of Tokens. + * + * Note that in this module, linked lists are treated as stacks + * wherever possible. For this reason, Lines are _pushed_ on to the + * `expansion' field in MMacro structures, so that the linked list, + * if walked, would give the macro lines in reverse order; this + * means that we can walk the list when expanding a macro, and thus + * push the lines on to the `expansion' field in _istk_ in reverse + * order (so that when popped back off they are in the right + * order). It may seem cockeyed, and it relies on my design having + * an even number of steps in, but it works... + * + * Some of these structures, rather than being actual lines, are + * markers delimiting the end of the expansion of a given macro. + * This is for use in the cycle-tracking and %rep-handling code. + * Such structures have `finishes' non-NULL, and `first' NULL. All + * others have `finishes' NULL, but `first' may still be NULL if + * the line is blank. + */ +struct Line +{ + Line *next; + MMacro *finishes; + Token *first; +}; + +/* + * To handle an arbitrary level of file inclusion, we maintain a + * stack (ie linked list) of these things. + */ +struct Include +{ + Include *next; + FILE *fp; + Cond *conds; + Line *expansion; + char *fname; + int lineno, lineinc; + MMacro *mstk; /* stack of active macros/reps */ +}; + +/* + * Conditional assembly: we maintain a separate stack of these for + * each level of file inclusion. (The only reason we keep the + * stacks separate is to ensure that a stray `%endif' in a file + * included from within the true branch of a `%if' won't terminate + * it and cause confusion: instead, rightly, it'll cause an error.) + */ +struct Cond +{ + Cond *next; + int state; +}; +enum +{ + /* + * These states are for use just after %if or %elif: IF_TRUE + * means the condition has evaluated to truth so we are + * currently emitting, whereas IF_FALSE means we are not + * currently emitting but will start doing so if a %else comes + * up. In these states, all directives are admissible: %elif, + * %else and %endif. (And of course %if.) + */ + COND_IF_TRUE, COND_IF_FALSE, + /* + * These states come up after a %else: ELSE_TRUE means we're + * emitting, and ELSE_FALSE means we're not. In ELSE_* states, + * any %elif or %else will cause an error. + */ + COND_ELSE_TRUE, COND_ELSE_FALSE, + /* + * This state means that we're not emitting now, and also that + * nothing until %endif will be emitted at all. It's for use in + * two circumstances: (i) when we've had our moment of emission + * and have now started seeing %elifs, and (ii) when the + * condition construct in question is contained within a + * non-emitting branch of a larger condition construct. + */ + COND_NEVER +}; +#define emitting(x) ( (x) == COND_IF_TRUE || (x) == COND_ELSE_TRUE ) + +/* + * These defines are used as the possible return values for do_directive + */ +#define NO_DIRECTIVE_FOUND 0 +#define DIRECTIVE_FOUND 1 + +/* + * Condition codes. Note that we use c_ prefix not C_ because C_ is + * used in nasm.h for the "real" condition codes. At _this_ level, + * we treat CXZ and ECXZ as condition codes, albeit non-invertible + * ones, so we need a different enum... + */ +static const char *conditions[] = { + "a", "ae", "b", "be", "c", "cxz", "e", "ecxz", "g", "ge", "l", "le", + "na", "nae", "nb", "nbe", "nc", "ne", "ng", "nge", "nl", "nle", "no", + "np", "ns", "nz", "o", "p", "pe", "po", "s", "z" +}; +enum +{ + c_A, c_AE, c_B, c_BE, c_C, c_CXZ, c_E, c_ECXZ, c_G, c_GE, c_L, c_LE, + c_NA, c_NAE, c_NB, c_NBE, c_NC, c_NE, c_NG, c_NGE, c_NL, c_NLE, c_NO, + c_NP, c_NS, c_NZ, c_O, c_P, c_PE, c_PO, c_S, c_Z +}; +static int inverse_ccs[] = { + c_NA, c_NAE, c_NB, c_NBE, c_NC, -1, c_NE, -1, c_NG, c_NGE, c_NL, c_NLE, + c_A, c_AE, c_B, c_BE, c_C, c_E, c_G, c_GE, c_L, c_LE, c_O, c_P, c_S, + c_Z, c_NO, c_NP, c_PO, c_PE, c_NS, c_NZ +}; + +/* + * Directive names. + */ +static const char *directives[] = { + "%arg", + "%assign", "%clear", "%define", "%elif", "%elifctx", "%elifdef", + "%elifid", "%elifidn", "%elifidni", "%elifmacro", "%elifnctx", "%elifndef", + "%elifnid", "%elifnidn", "%elifnidni", "%elifnmacro", "%elifnnum", "%elifnstr", + "%elifnum", "%elifstr", "%else", "%endif", "%endm", "%endmacro", + "%endrep", "%endscope", "%error", "%exitrep", "%iassign", "%idefine", "%if", + "%ifctx", "%ifdef", "%ifid", "%ifidn", "%ifidni", "%ifmacro", "%ifnctx", + "%ifndef", "%ifnid", "%ifnidn", "%ifnidni", "%ifnmacro", "%ifnnum", + "%ifnstr", "%ifnum", "%ifstr", "%imacro", "%include", + "%ixdefine", "%line", + "%local", + "%macro", "%pop", "%push", "%rep", "%repl", "%rotate", + "%scope", "%stacksize", + "%strlen", "%substr", "%undef", "%xdefine" +}; +enum +{ + PP_ARG, + PP_ASSIGN, PP_CLEAR, PP_DEFINE, PP_ELIF, PP_ELIFCTX, PP_ELIFDEF, + PP_ELIFID, PP_ELIFIDN, PP_ELIFIDNI, PP_ELIFMACRO, PP_ELIFNCTX, PP_ELIFNDEF, + PP_ELIFNID, PP_ELIFNIDN, PP_ELIFNIDNI, PP_ELIFNMACRO, PP_ELIFNNUM, PP_ELIFNSTR, + PP_ELIFNUM, PP_ELIFSTR, PP_ELSE, PP_ENDIF, PP_ENDM, PP_ENDMACRO, + PP_ENDREP, PP_ENDSCOPE, PP_ERROR, PP_EXITREP, PP_IASSIGN, PP_IDEFINE, PP_IF, + PP_IFCTX, PP_IFDEF, PP_IFID, PP_IFIDN, PP_IFIDNI, PP_IFMACRO, PP_IFNCTX, + PP_IFNDEF, PP_IFNID, PP_IFNIDN, PP_IFNIDNI, PP_IFNMACRO, PP_IFNNUM, + PP_IFNSTR, PP_IFNUM, PP_IFSTR, PP_IMACRO, PP_INCLUDE, + PP_IXDEFINE, PP_LINE, + PP_LOCAL, + PP_MACRO, PP_POP, PP_PUSH, PP_REP, PP_REPL, PP_ROTATE, + PP_SCOPE, PP_STACKSIZE, + PP_STRLEN, PP_SUBSTR, PP_UNDEF, PP_XDEFINE +}; + +/* If this is a an IF, ELIF, ELSE or ENDIF keyword */ +static int is_condition(int arg) +{ + return ((arg >= PP_ELIF) && (arg <= PP_ENDIF)) || + ((arg >= PP_IF) && (arg <= PP_IFSTR)); +} + +/* For TASM compatibility we need to be able to recognise TASM compatible + * conditional compilation directives. Using the NASM pre-processor does + * not work, so we look for them specifically from the following list and + * then jam in the equivalent NASM directive into the input stream. + */ + +#ifndef MAX +# define MAX(a,b) ( ((a) > (b)) ? (a) : (b)) +#endif + +enum +{ + TM_ARG, TM_ELIF, TM_ELSE, TM_ENDIF, TM_IF, TM_IFDEF, TM_IFDIFI, + TM_IFNDEF, TM_INCLUDE, TM_LOCAL, + TM_REPT, TM_IRP, TM_MACRO, + TM_STRUC, TM_SEGMENT +}; + +static const char *tasm_directives[] = { + "arg", "elif", "else", "endif", "if", "ifdef", "ifdifi", + "ifndef", "include", "local" +}; + +static int StackSize = 4; +static const char *StackPointer = "ebp"; +static int ArgOffset = 8; +static int LocalOffset = 4; +static int Level = 0; + + +static Context *cstk; +static Include *istk; + +static FILE *first_fp = NULL; + +static efunc _error; /* Pointer to client-provided error reporting function */ +static evalfunc evaluate; + +static int pass; /* HACK: pass 0 = generate dependencies only */ + +static unsigned long unique; /* unique identifier numbers */ + +static Line *builtindef = NULL; +static Line *stddef = NULL; +static Line *predef = NULL; +static int first_line = 1; + +static ListGen *list; + +/* + * The number of hash values we use for the macro lookup tables. + * FIXME: We should *really* be able to configure this at run time, + * or even have the hash table automatically expanding when necessary. + */ +#define NHASH 4096 + +/* + * The current set of multi-line macros we have defined. + */ +static MMacro *mmacros[NHASH]; + +/* + * The current set of single-line macros we have defined. + */ +static SMacro *smacros[NHASH]; + +/* + * The multi-line macro we are currently defining, or the %rep + * block we are currently reading, if any. + */ +static MMacro *defining; + +/* + * The number of macro parameters to allocate space for at a time. + */ +#define PARAM_DELTA 16 + +/* + * Macros to make NASM ignore some TASM directives before the first include + * directive. + */ +static const char *tasm_compat_macros[] = +{ + "%idefine IDEAL", + "%idefine JUMPS", + "%idefine END", + "%idefine P8086 CPU 8086", + "%idefine P186 CPU 186", + "%idefine P286 CPU 286", + "%idefine P286N CPU 286", + "%idefine P286P CPU 286 Priv", + "%idefine P386 CPU 386", + "%idefine P386N CPU 386", + "%idefine P386P CPU 386 Priv", + "%idefine P486 CPU 486", + "%idefine P586 CPU 586", + "%idefine .8086 CPU 8086", + "%idefine .186 CPU 186", + "%idefine .286 CPU 286", + "%idefine .286C CPU 286", + "%idefine .286P CPU 286", + "%idefine .386 CPU 386", + "%idefine .386C CPU 386", + "%idefine .386P CPU 386", + "%idefine .486 CPU 486", + "%idefine .486C CPU 486", + "%idefine .486P CPU 486", + "%idefine .586 CPU 586", + "%idefine .586C CPU 586", + "%idefine .586P CPU 586", + "", + "%imacro TITLE 1", + "%endm", + "%imacro NAME 1", + "%endm", + "", + "%imacro EXTRN 1-*.nolist", + "%rep %0", + "[extern %1]", + "%rotate 1", + "%endrep", + "%endmacro", + "", + "%imacro PUBLIC 1-*.nolist", + "%rep %0", + "[global %1]", + "%rotate 1", + "%endrep", + "%endmacro", + "", + "; this is not needed", + "%idefine PTR", + NULL +}; + +static int nested_mac_count, nested_rep_count; + +/* + * Tokens are allocated in blocks to improve speed + */ +#define TOKEN_BLOCKSIZE 4096 +static Token *freeTokens = NULL; +struct Blocks { + Blocks *next; + void *chunk; +}; + +static Blocks blocks = { NULL, NULL }; + +/* + * Forward declarations. + */ +static Token *expand_mmac_params(Token * tline); +static Token *expand_smacro(Token * tline); +static Token *expand_id(Token * tline); +static Context *get_ctx(char *name, int all_contexts); +static void make_tok_num(Token * tok, yasm_intnum *val); +static void error(int severity, const char *fmt, ...); +static void *new_Block(size_t size); +static void delete_Blocks(void); +static Token *new_Token(Token * next, int type, const char *text, + size_t txtlen); +static Token *delete_Token(Token * t); +static Token *tokenise(char *line); + +/* + * Macros for safe checking of token pointers, avoid *(NULL) + */ +#define tok_type_(x,t) ((x) && (x)->type == (t)) +#define skip_white_(x) if (tok_type_((x), TOK_WHITESPACE)) (x)=(x)->next +#define tok_is_(x,v) (tok_type_((x), TOK_OTHER) && !strcmp((x)->text,(v))) +#define tok_isnt_(x,v) ((x) && ((x)->type!=TOK_OTHER || strcmp((x)->text,(v)))) + +/* Handle TASM specific directives, which do not contain a % in + * front of them. We do it here because I could not find any other + * place to do it for the moment, and it is a hack (ideally it would + * be nice to be able to use the NASM pre-processor to do it). + */ + +typedef struct TMEndItem { + int type; + void *data; + struct TMEndItem *next; +} TMEndItem; + +static TMEndItem *EndmStack = NULL, *EndsStack = NULL; + +char **TMParameters; + +struct TStrucField { + char *name; + char *type; + struct TStrucField *next; +}; +struct TStruc { + char *name; + struct TStrucField *fields, *lastField; + struct TStruc *next; +}; +static struct TStruc *TStrucs = NULL; +static int inTstruc = 0; + +struct TSegmentAssume { + char *segreg; + char *segment; +}; +struct TSegmentAssume *TAssumes; + +const char *tasm_get_segment_register(const char *segment) +{ + struct TSegmentAssume *assume; + if (!TAssumes) + return NULL; + for (assume = TAssumes; assume->segreg; assume++) { + if (!strcmp(assume->segment, segment)) + break; + } + return assume->segreg; +} + +static char * +check_tasm_directive(char *line) +{ + int i, j, k, m; + size_t len, len2; + char *p, *oldline, oldchar, *q, oldchar2; + TMEndItem *end; + + p = line; + + /* Skip whitespace */ + while (isspace(*p) && *p != 0 && *p != ';') + p++; + + /* Ignore nasm directives */ + if (*p == '%') + return line; + + /* Binary search for the directive name */ + len = 0; + while (!isspace(p[len]) && p[len] != 0 && p[len] != ';') + len++; + if (!len) + return line; + + oldchar = p[len]; + p[len] = 0; + i = -1; + j = elements(tasm_directives); + while (j - i > 1) + { + k = (j + i) / 2; + m = nasm_stricmp(p, tasm_directives[k]); + if (m == 0) + { + /* We have found a directive, so jam a % in front of it + * so that NASM will then recognise it as one if it's own. + */ + p[len] = oldchar; + len = strlen(p); + oldline = line; + if (k == TM_IFDIFI) + { + /* NASM does not recognise IFDIFI, so we convert it to + * %ifdef BOGUS. This is not used in NASM comaptible + * code, but does need to parse for the TASM macro + * package. + */ + line = nasm_malloc(13); + strcpy(line, "%ifdef BOGUS"); + } + else if (k == TM_INCLUDE) + { + /* add double quotes around file name */ + p += 7 + 1; + while (isspace(*p) && *p) + p++; + len = strlen(p); + line = nasm_malloc(1 + 7 + 1 + 1 + len + 1 + 1); + sprintf(line, "%%include \"%s\"", p); + } + else + { + line = nasm_malloc(len + 2); + line[0] = '%'; + memcpy(line + 1, p, len + 1); + } + nasm_free(oldline); + return line; + } + else if (m < 0) + { + j = k; + } + else + i = k; + } + + /* Not a simple directive */ + + if (!nasm_stricmp(p, "endm")) { + /* handle end of endm directive */ + char **parameter; + end = EndmStack; + /* undef parameters */ + if (!end) { + error(ERR_FATAL, "ENDM: not in an endm context"); + return line; + } + EndmStack = EndmStack->next; + nasm_free(line); + switch (end->type) { + case TM_MACRO: + len = 0; + for (parameter = end->data; *parameter; parameter++) + len += 6 + 1 + strlen(*parameter) + 1; + len += 5 + 1; + line = nasm_malloc(len); + p = line; + for (parameter = end->data; *parameter; parameter++) { + p += sprintf(p, "%%undef %s\n", *parameter); + nasm_free(*parameter); + } + nasm_free(end->data); + nasm_free(end); + sprintf(p, "%%endm"); + return line; + case TM_REPT: + nasm_free(end); + return nasm_strdup("%endrep"); + case TM_IRP: { + char **data; + const char *irp_format = + "%%undef %s\n" + "%%rotate 1\n" + "%%endrep\n" + "%%endm\n" + "irp %s\n" + "%%undef irp"; + data = end->data; + line = nasm_malloc(strlen(irp_format) - 4 + strlen(data[0]) + + strlen(data[1])); + sprintf(line, irp_format, data[0], data[1]); + nasm_free(data[0]); + nasm_free(data[1]); + nasm_free(data); + return line; + } + default: + error(ERR_FATAL, "ENDM: bogus endm context type %d\n",end->type); + return NULL; + } + } else if (!nasm_stricmp(p, "end")) { + nasm_free(line); + return nasm_strdup(""); + } else if (!nasm_stricmp(p, "rept")) { + /* handle repeat directive */ + end = nasm_malloc(sizeof(*end)); + end->type = TM_REPT; + end->next = EndmStack; + EndmStack = end; + memcpy(p, "%rep", 4); + p[len] = oldchar; + return line; + } else if (!nasm_stricmp(p, "locals")) { + tasm_locals = 1; + nasm_free(line); + return nasm_strdup(""); + } + + if (!oldchar) + return line; + + /* handle two-words directives */ + q = p + len + 1; + /* Skip whitespaces */ + while (isspace(*q) && *q) + q++; + + len2 = 0; + while (!isspace(q[len2]) && q[len2]!=',' && q[len2] != 0) + len2++; + oldchar2 = q[len2]; + q[len2] = '\0'; + + if (!nasm_stricmp(p, "irp")) { + /* handle indefinite repeat directive */ + const char *irp_format = + "%%imacro irp 0-*\n" + "%%rep %%0\n" + "%%define %s %%1\n"; + char **data; + + data = malloc(2*sizeof(char*)); + oldline = line; + line = nasm_malloc(strlen(irp_format) - 2 + len2 + 1); + sprintf(line,irp_format,q); + data[0] = nasm_strdup(q); + + if (!oldchar2) + error(ERR_FATAL, "%s: expected ", q + len2); + p = strchr(q + len2 + 1, '<'); + if (!p) + error(ERR_FATAL, "%s: expected ", q + len2); + p++; + q = strchr(p, '>'); + data[1] = nasm_strndup(p, q - p); + + end = nasm_malloc(sizeof(*end)); + end->type = TM_IRP; + end->next = EndmStack; + end->data = data; + EndmStack = end; + + nasm_free(oldline); + return line; + } else if (!nasm_stricmp(q, "macro")) { + char *name = p; + /* handle MACRO */ + /* count parameters */ + j = 1; + i = 0; + TMParameters = nasm_malloc(j*sizeof(*TMParameters)); + len = 0; + p = q + len2 + 1; + /* Skip whitespaces */ + while (isspace(*p) && *p) + p++; + while (*p) { + /* Get parameter name */ + for (q = p; !isspace(*q) && *q != ',' && *q; q++); + len2 = q-p; + if (len2 == 0) + error(ERR_FATAL, "'%s': expected parameter name", p); + TMParameters[i] = nasm_malloc(len2 + 1); + memcpy(TMParameters[i], p, len2); + TMParameters[i][len2] = '\0'; + len += len2; + i++; + if (i + 1 > j) { + j *= 2; + TMParameters = nasm_realloc(TMParameters, + j*sizeof(*TMParameters)); + } + if (i == 1000) + error(ERR_FATAL, "too many parameters for macro %s", name); + p = q; + while (isspace(*p) && *p) + p++; + if (!*p) + break; + if (*p != ',') + error(ERR_FATAL, "expected comma"); + p++; + while (isspace(*p) && *p) + p++; + } + TMParameters[i] = NULL; + TMParameters = nasm_realloc(TMParameters, + (i+1)*sizeof(*TMParameters)); + len += 1 + 6 + 1 + strlen(name) + 1 + 3; /* macro definition */ + len += i * (1 + 9 + 1 + 1 + 1 + 3 + 2); /* macro parameter definition */ + oldline = line; + p = line = nasm_malloc(len + 1); + p += sprintf(p, "%%imacro %s 0-*", name); + nasm_free(oldline); + for (j = 0; TMParameters[j]; j++) { + p += sprintf(p, "\n%%idefine %s %%{%-u}", TMParameters[j], j + 1); + } + end = nasm_malloc(sizeof(*end)); + end->type = TM_MACRO; + end->next = EndmStack; + end->data = TMParameters; + EndmStack = end; + return line; + } else if (!nasm_stricmp(q, "proc")) { + /* handle PROC */ + oldline = line; + line = nasm_malloc(2 + len + 1); + sprintf(line, "..%s",p); + nasm_free(oldline); + return line; + } else if (!nasm_stricmp(q, "struc")) { + /* handle struc */ + struct TStruc *struc; + if (inTstruc) { + error(ERR_FATAL, "STRUC: already in a struc context"); + return line; + } + oldline = line; + line = nasm_malloc(5 + 1 + len + 1); + sprintf(line, "struc %s", p); + struc = malloc(sizeof(*struc)); + struc->name = nasm_strdup(p); + struc->fields = NULL; + struc->lastField = NULL; + struc->next = TStrucs; + TStrucs = struc; + inTstruc = 1; + nasm_free(oldline); + end = nasm_malloc(sizeof(*end)); + end->type = TM_STRUC; + end->next = EndsStack; + EndsStack = end; + return line; + } else if (!nasm_stricmp(q, "segment")) { + /* handle SEGMENT */ + oldline = line; + line = nasm_strdup(oldchar2?q+len2+1:""); + if (tasm_segment) { + error(ERR_FATAL, "SEGMENT: already in a segment context"); + return line; + } + tasm_segment = nasm_strdup(p); + nasm_free(oldline); + end = nasm_malloc(sizeof(*end)); + end->type = TM_SEGMENT; + end->next = EndsStack; + EndsStack = end; + return line; + } else if (!nasm_stricmp(p, "ends") || !nasm_stricmp(q, "ends")) { + /* handle end of ends directive */ + end = EndsStack; + /* undef parameters */ + if (!end) { + error(ERR_FATAL, "ENDS: not in an ends context"); + return line; + } + EndsStack = EndsStack->next; + nasm_free(line); + switch (end->type) { + case TM_STRUC: + inTstruc = 0; + return nasm_strdup("endstruc"); + case TM_SEGMENT: + /* XXX: yes, we leak memory here, but that permits labels + * to avoid strduping... */ + tasm_segment = NULL; + return nasm_strdup(""); + default: + error(ERR_FATAL, "ENDS: bogus ends context type %d",end->type); + return NULL; + } + } else if (!nasm_stricmp(p, "endp") || !nasm_stricmp(q, "endp")) { + nasm_free(line); + return nasm_strdup(""); + } else if (!nasm_stricmp(p, "assume")) { + struct TSegmentAssume *assume; + /* handle ASSUME */ + if (!TAssumes) { + TAssumes = nasm_malloc(sizeof(*TAssumes)); + TAssumes[0].segreg = NULL; + } + i = 0; + q[len2] = oldchar2; + /* Skip whitespaces */ + while (isspace(*q) && *q) + q++; + while (*q && *q != ';') { + p = q; + for (; *q && *q != ';' && *q != ':' && !isspace(*q); q++); + if (!*q || *q == ';') + break; + /* segment register name */ + for (assume = TAssumes; assume->segreg; assume++) + if (strlen(assume->segreg) == (size_t)(q-p) && + !yasm__strncasecmp(assume->segreg, p, q-p)) + break; + if (!assume->segreg) { + i = assume - TAssumes + 1; + TAssumes = nasm_realloc(TAssumes, (i+1)*sizeof(*TAssumes)); + assume = TAssumes + i - 1; + assume->segreg = nasm_strndup(p, q-p); + assume[1].segreg = NULL; + } + for (; *q && *q != ';' && *q != ':' && isspace(*q); q++); + if (*q != ':') + error(ERR_FATAL, "expected `:' instead of `%c'", *q); + for (q++; *q && isspace(*q); q++); + + /* segment name */ + p = q; + for (; *q && *q != ';' && *q != ',' && !isspace(*q); q++); + assume->segment = nasm_strndup(p, q-p); + for (; *q && isspace(*q); q++); + if (*q && *q != ';' && *q != ',') + error(ERR_FATAL, "expected `,' instead of `%c'", *q); + + if (*q && *q != ';') + q++; + for (; *q && isspace(*q); q++); + } + TAssumes[i].segreg = NULL; + TAssumes = nasm_realloc(TAssumes, (i+1)*sizeof(*TAssumes)); + nasm_free(line); + return nasm_strdup(""); + } else if (inTstruc) { + struct TStrucField *field; + /* TODO: handle unnamed data */ + field = nasm_malloc(sizeof(*field)); + field->name = nasm_strdup(p); + /* TODO: type struc ! */ + field->type = nasm_strdup(q); + field->next = NULL; + if (!TStrucs->fields) + TStrucs->fields = field; + else if (TStrucs->lastField) + TStrucs->lastField->next = field; + TStrucs->lastField = field; + if (!oldchar2) { + error(ERR_FATAL, "Expected struc field initializer after %s %s", p, q); + return line; + } + oldline = line; + line = nasm_malloc(1 + len + 1 + len2 + 1 + strlen(q+len2+1) + 1); + sprintf(line, ".%s %s %s", p, q, q+len2+1); + nasm_free(oldline); + return line; + } + { + struct TStruc *struc; + for (struc = TStrucs; struc; struc = struc->next) { + if (!yasm__strcasecmp(q, struc->name)) { + char *r = q + len2 + 1, *s, *t, tasm_param[6]; + struct TStrucField *field = struc->fields; + int size, n; + if (!oldchar2) { + error(ERR_FATAL, "Expected struc field initializer after %s %s", p, q); + return line; + } + r = strchr(r, '<'); + if (!r) { + error(ERR_FATAL, "Expected < for struc field initializer in %s %s %s", p, q, r); + return line; + } + t = strchr(r + 1, '>'); + if (!t) { + error(ERR_FATAL, "Expected > for struc field initializer in %s %s %s", p, q, r); + return line; + } + *t = 0; + oldline = line; + size = len + len2 + 128; + line = nasm_malloc(size); + if (defining) + for (n=0;TMParameters[n];n++) + if (!strcmp(TMParameters[n],p)) { + sprintf(tasm_param,"%%{%d}",n+1); + p = tasm_param; + break; + } + n = sprintf(line, "%s: istruc %s\n", p, q); + /* use initialisers */ + while ((s = strchr(r + 1, ','))) { + if (!field) { + error(ERR_FATAL, "Too many initializers in structure %s %s", p, q); + return oldline; + } + *s = 0; + m = strlen(p) + 1 + strlen(field->name)*2 + 8 + + strlen(field->type) + 1 + strlen(r+1) + 2; + size += m; + line = nasm_realloc(line, size); + sprintf(line + n, "%s.%s: at .%s, %s %s\n", + p, field->name, field->name, field->type, r + 1); + n += m-1; + r = s; + field = field->next; + } + /* complete with last initializer and '?' */ + while(field) { + m = strlen(p) + 1 + strlen(field->name)*2 + 8 + + strlen(field->type) + 1 + (r ? strlen(r+1) : 1) + 2; + size += m; + line = nasm_realloc(line, size); + sprintf(line + n, "%s.%s: at .%s, %s %s\n", p, field->name, + field->name, field->type, r ? r + 1: "?"); + n += m-1; + r = NULL; + field = field->next; + } + line = nasm_realloc(line, n + 5); + sprintf(line + n, "iend"); + nasm_free(oldline); + return line; + } + } + } + + q[len2] = oldchar2; + p[len] = oldchar; + + return line; +} + +static Token * tasm_join_tokens(Token *tline) +{ + Token *t, *prev, *next; + for (prev = NULL, t = tline; t; prev = t, t = next) { + next = t->next; + if (t->type == TOK_OTHER && !strcmp(t->text,"&")) { + if (!prev) + error(ERR_FATAL, "no token before &"); + else if (!next) + error(ERR_FATAL, "no token after &"); + else if (prev->type != next->type) + error(ERR_FATAL, "can't handle different types of token around &"); + else if (!prev->text || !next->text) + error(ERR_FATAL, "can't handle empty token around &"); + else { + int lenp = strlen(prev->text); + int lenn = strlen(next->text); + prev->text = nasm_realloc(prev->text, lenp + lenn + 1); + strncpy(prev->text + lenp, next->text, lenn + 1); + (void) delete_Token(t); + prev->next = delete_Token(next); + t = prev; + next = t->next; + } + } + } + return tline; +} + +/* + * The pre-preprocessing stage... This function translates line + * number indications as they emerge from GNU cpp (`# lineno "file" + * flags') into NASM preprocessor line number indications (`%line + * lineno file'). + */ +static char * +prepreproc(char *line) +{ + int lineno; + size_t fnlen; + char *fname, *oldline; + char *c, *d, *ret; + Line *l, **lp; + + if (line[0] == '#' && line[1] == ' ') + { + oldline = line; + fname = oldline + 2; + lineno = atoi(fname); + fname += strspn(fname, "0123456789 "); + if (*fname == '"') + fname++; + fnlen = strcspn(fname, "\""); + line = nasm_malloc(20 + fnlen); + sprintf(line, "%%line %d %.*s", lineno, (int)fnlen, fname); + nasm_free(oldline); + } + if (tasm_compatible_mode) + line = check_tasm_directive(line); + + if (!(c = strchr(line, '\n'))) + return line; + + /* Turn multiline macros into several lines */ + *c = '\0'; + ret = nasm_strdup(line); + + lp = &istk->expansion; + do { + d = strchr(c+1, '\n'); + if (d) + *d = '\0'; + l = malloc(sizeof(*l)); + l -> first = tokenise(c+1); + l -> finishes = NULL; + l -> next = *lp; + *lp = l; + c = d; + lp = &l -> next; + } while (c); + nasm_free(line); + return ret; +} + +/* + * The hash function for macro lookups. Note that due to some + * macros having case-insensitive names, the hash function must be + * invariant under case changes. We implement this by applying a + * perfectly normal hash function to the uppercase of the string. + */ +static int +hash(char *s) +{ + unsigned int h = 0; + unsigned int i = 0; + /* + * Powers of three, mod 31. + */ + static const int multipliers[] = { + 1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, + 30, 28, 22, 4, 12, 5, 15, 14, 11, 2, 6, 18, 23, 7, 21 + }; + + + while (*s) + { + h += multipliers[i] * (unsigned char) (toupper(*s)); + s++; + if (++i >= elements(multipliers)) + i = 0; + } + h %= NHASH; + return h; +} + +/* + * Free a linked list of tokens. + */ +static void +free_tlist(Token * list_) +{ + while (list_) + { + list_ = delete_Token(list_); + } +} + +/* + * Free a linked list of lines. + */ +static void +free_llist(Line * list_) +{ + Line *l; + while (list_) + { + l = list_; + list_ = list_->next; + free_tlist(l->first); + nasm_free(l); + } +} + +/* + * Free an MMacro + */ +static void +free_mmacro(MMacro * m) +{ + nasm_free(m->name); + free_tlist(m->dlist); + nasm_free(m->defaults); + free_llist(m->expansion); + nasm_free(m); +} + +/* + * Pop the context stack. + */ +static void +ctx_pop(void) +{ + Context *c = cstk; + SMacro *smac, *s; + + cstk = cstk->next; + smac = c->localmac; + while (smac) + { + s = smac; + smac = smac->next; + nasm_free(s->name); + free_tlist(s->expansion); + nasm_free(s); + } + nasm_free(c->name); + nasm_free(c); +} + +#define BUF_DELTA 512 +/* + * Read a line from the top file in istk, handling multiple CR/LFs + * at the end of the line read, and handling spurious ^Zs. Will + * return lines from the standard macro set if this has not already + * been done. + */ +static char * +read_line(void) +{ + char *buffer, *p, *q; + int bufsize, continued_count; + + bufsize = BUF_DELTA; + buffer = nasm_malloc(BUF_DELTA); + p = buffer; + continued_count = 0; + while (1) + { + q = fgets(p, bufsize - (int)(p - buffer), istk->fp); + if (!q) + break; + p += strlen(p); + if (p > buffer && p[-1] == '\n') + { + /* Convert backslash-CRLF line continuation sequences into + nothing at all (for DOS and Windows) */ + if (((p - 2) > buffer) && (p[-3] == '\\') && (p[-2] == '\r')) { + p -= 3; + *p = 0; + continued_count++; + } + /* Also convert backslash-LF line continuation sequences into + nothing at all (for Unix) */ + else if (((p - 1) > buffer) && (p[-2] == '\\')) { + p -= 2; + *p = 0; + continued_count++; + } + else { + break; + } + } + if (p - buffer > bufsize - 10) + { + long offset = (long)(p - buffer); + bufsize += BUF_DELTA; + buffer = nasm_realloc(buffer, (size_t)bufsize); + p = buffer + offset; /* prevent stale-pointer problems */ + } + } + + if (!q && p == buffer) + { + nasm_free(buffer); + return NULL; + } + + nasm_src_set_linnum(nasm_src_get_linnum() + istk->lineinc + (continued_count * istk->lineinc)); + + /* + * Play safe: remove CRs as well as LFs, if any of either are + * present at the end of the line. + */ + while (--p >= buffer && (*p == '\n' || *p == '\r')) + *p = '\0'; + + /* + * Handle spurious ^Z, which may be inserted into source files + * by some file transfer utilities. + */ + buffer[strcspn(buffer, "\032")] = '\0'; + + list->line(LIST_READ, buffer); + + return buffer; +} + +/* + * Tokenise a line of text. This is a very simple process since we + * don't need to parse the value out of e.g. numeric tokens: we + * simply split one string into many. + */ +static Token * +tokenise(char *line) +{ + char *p = line; + int type; + Token *list_ = NULL; + Token *t, **tail = &list_; + + while (*line) + { + p = line; + if (*p == '%') + { + p++; + if ( isdigit(*p) || + ((*p == '-' || *p == '+') && isdigit(p[1])) || + ((*p == '+') && (isspace(p[1]) || !p[1]))) + { + do + { + p++; + } + while (isdigit(*p)); + type = TOK_PREPROC_ID; + } + else if (*p == '{') + { + p++; + while (*p && *p != '}') + { + p[-1] = *p; + p++; + } + p[-1] = '\0'; + if (*p) + p++; + type = TOK_PREPROC_ID; + } + else if (isidchar(*p) || + ((*p == '!' || *p == '%' || *p == '$') && + isidchar(p[1]))) + { + do + { + p++; + } + while (isidchar(*p)); + type = TOK_PREPROC_ID; + } + else + { + type = TOK_OTHER; + if (*p == '%') + p++; + } + } + else if (isidstart(*p) || (*p == '$' && isidstart(p[1]))) + { + type = TOK_ID; + p++; + while (*p && isidchar(*p)) + p++; + } + else if (*p == '\'' || *p == '"') + { + /* + * A string token. + */ + char c = *p; + p++; + type = TOK_STRING; + while (*p && *p != c) + p++; + + if (*p) + { + p++; + } + else + { + error(ERR_WARNING, "unterminated string"); + type = -1; + } + } + else if (isnumstart(*p)) + { + /* + * A number token. + */ + type = TOK_NUMBER; + p++; + while (*p && isnumchar(*p)) + p++; + } + else if (isspace(*p)) + { + type = TOK_WHITESPACE; + p++; + while (*p && isspace(*p)) + p++; + /* + * Whitespace just before end-of-line is discarded by + * pretending it's a comment; whitespace just before a + * comment gets lumped into the comment. + */ + if (!*p || *p == ';') + { + type = TOK_COMMENT; + while (*p) + p++; + } + } + else if (*p == ';') + { + type = TOK_COMMENT; + while (*p) + p++; + } + else + { + /* + * Anything else is an operator of some kind. We check + * for all the double-character operators (>>, <<, //, + * %%, <=, >=, ==, !=, <>, &&, ||, ^^), but anything + * else is a single-character operator. + */ + type = TOK_OTHER; + if ((p[0] == '>' && p[1] == '>') || + (p[0] == '<' && p[1] == '<') || + (p[0] == '/' && p[1] == '/') || + (p[0] == '<' && p[1] == '=') || + (p[0] == '>' && p[1] == '=') || + (p[0] == '=' && p[1] == '=') || + (p[0] == '!' && p[1] == '=') || + (p[0] == '<' && p[1] == '>') || + (p[0] == '&' && p[1] == '&') || + (p[0] == '|' && p[1] == '|') || + (p[0] == '^' && p[1] == '^')) + { + p++; + } + p++; + } + + /* Handle unterminated string */ + if (type == -1) + { + *tail = t = new_Token(NULL, TOK_STRING, line, (size_t)(p-line)+1); + t->text[p-line] = *line; + tail = &t->next; + } + else if (type != TOK_COMMENT) + { + *tail = t = new_Token(NULL, type, line, (size_t)(p - line)); + tail = &t->next; + } + line = p; + } + return list_; +} + +/* + * this function allocates a new managed block of memory and + * returns a pointer to the block. The managed blocks are + * deleted only all at once by the delete_Blocks function. + */ +static void * +new_Block(size_t size) +{ + Blocks *b = &blocks; + + /* first, get to the end of the linked list */ + while (b->next) + b = b->next; + /* now allocate the requested chunk */ + b->chunk = nasm_malloc(size); + + /* now allocate a new block for the next request */ + b->next = nasm_malloc(sizeof(Blocks)); + /* and initialize the contents of the new block */ + b->next->next = NULL; + b->next->chunk = NULL; + return b->chunk; +} + +/* + * this function deletes all managed blocks of memory + */ +static void +delete_Blocks(void) +{ + Blocks *a,*b = &blocks; + + /* + * keep in mind that the first block, pointed to by blocks + * is a static and not dynamically allocated, so we don't + * free it. + */ + while (b) + { + if (b->chunk) + nasm_free(b->chunk); + a = b; + b = b->next; + if (a != &blocks) + nasm_free(a); + } +} + +/* + * this function creates a new Token and passes a pointer to it + * back to the caller. It sets the type and text elements, and + * also the mac and next elements to NULL. + */ +static Token * +new_Token(Token * next, int type, const char *text, size_t txtlen) +{ + Token *t; + int i; + + if (freeTokens == NULL) + { + freeTokens = (Token *)new_Block(TOKEN_BLOCKSIZE * sizeof(Token)); + for (i = 0; i < TOKEN_BLOCKSIZE - 1; i++) + freeTokens[i].next = &freeTokens[i + 1]; + freeTokens[i].next = NULL; + } + t = freeTokens; + freeTokens = t->next; + t->next = next; + t->mac = NULL; + t->type = type; + if (type == TOK_WHITESPACE || text == NULL) + { + t->text = NULL; + } + else + { + if (txtlen == 0) + txtlen = strlen(text); + t->text = nasm_malloc(1 + txtlen); + strncpy(t->text, text, txtlen); + t->text[txtlen] = '\0'; + } + return t; +} + +static Token * +delete_Token(Token * t) +{ + Token *next = t->next; + nasm_free(t->text); + t->next = freeTokens; + freeTokens = t; + return next; +} + +/* + * Convert a line of tokens back into text. + * If expand_locals is not zero, identifiers of the form "%$*xxx" + * will be transformed into ..@ctxnum.xxx + */ +static char * +detoken(Token * tlist, int expand_locals) +{ + Token *t; + size_t len; + char *line, *p; + + len = 0; + for (t = tlist; t; t = t->next) + { + if (t->type == TOK_PREPROC_ID && t->text[1] == '!') + { + char *p2 = getenv(t->text + 2); + nasm_free(t->text); + if (p2) + t->text = nasm_strdup(p2); + else + t->text = NULL; + } + /* Expand local macros here and not during preprocessing */ + if (expand_locals && + t->type == TOK_PREPROC_ID && t->text && + t->text[0] == '%' && t->text[1] == '$') + { + Context *ctx = get_ctx(t->text, FALSE); + if (ctx) + { + char buffer[40]; + char *p2, *q = t->text + 2; + + q += strspn(q, "$"); + sprintf(buffer, "..@%lu.", ctx->number); + p2 = nasm_strcat(buffer, q); + nasm_free(t->text); + t->text = p2; + } + } + if (t->type == TOK_WHITESPACE) + { + len++; + } + else if (t->text) + { + len += strlen(t->text); + } + } + p = line = nasm_malloc(len + 1); + for (t = tlist; t; t = t->next) + { + if (t->type == TOK_WHITESPACE) + { + *p = ' '; + p++; + *p = '\0'; + } + else if (t->text) + { + strcpy(p, t->text); + p += strlen(p); + } + } + *p = '\0'; + return line; +} + +/* + * A scanner, suitable for use by the expression evaluator, which + * operates on a line of Tokens. Expects a pointer to a pointer to + * the first token in the line to be passed in as its private_data + * field. + */ +static int +ppscan(void *private_data, struct tokenval *tokval) +{ + Token **tlineptr = private_data; + Token *tline; + + do + { + tline = *tlineptr; + *tlineptr = tline ? tline->next : NULL; + } + while (tline && (tline->type == TOK_WHITESPACE || + tline->type == TOK_COMMENT)); + + if (!tline) + return tokval->t_type = TOKEN_EOS; + + if (tline->text[0] == '$' && !tline->text[1]) + return tokval->t_type = TOKEN_HERE; + if (tline->text[0] == '$' && tline->text[1] == '$' && !tline->text[2]) + return tokval->t_type = TOKEN_BASE; + + if (tline->type == TOK_ID) + { + tokval->t_charptr = tline->text; + if (tline->text[0] == '$') + { + tokval->t_charptr++; + return tokval->t_type = TOKEN_ID; + } + + /* + * This is the only special case we actually need to worry + * about in this restricted context. + */ + if (!nasm_stricmp(tline->text, "seg")) + return tokval->t_type = TOKEN_SEG; + + return tokval->t_type = TOKEN_ID; + } + + if (tline->type == TOK_NUMBER) + { + int rn_error; + + tokval->t_integer = nasm_readnum(tline->text, &rn_error); + if (rn_error) + return tokval->t_type = TOKEN_ERRNUM; + tokval->t_charptr = NULL; + return tokval->t_type = TOKEN_NUM; + } + + if (tline->type == TOK_STRING) + { + int rn_warn; + char q, *r; + size_t l; + + r = tline->text; + q = *r++; + l = strlen(r); + + if (l == 0 || r[l - 1] != q) + return tokval->t_type = TOKEN_ERRNUM; + tokval->t_integer = nasm_readstrnum(r, l - 1, &rn_warn); + if (rn_warn) + error(ERR_WARNING | ERR_PASS1, "character constant too long"); + tokval->t_charptr = NULL; + return tokval->t_type = TOKEN_NUM; + } + + if (tline->type == TOK_OTHER) + { + if (!strcmp(tline->text, "<<")) + return tokval->t_type = TOKEN_SHL; + if (!strcmp(tline->text, ">>")) + return tokval->t_type = TOKEN_SHR; + if (!strcmp(tline->text, "//")) + return tokval->t_type = TOKEN_SDIV; + if (!strcmp(tline->text, "%%")) + return tokval->t_type = TOKEN_SMOD; + if (!strcmp(tline->text, "==")) + return tokval->t_type = TOKEN_EQ; + if (!strcmp(tline->text, "<>")) + return tokval->t_type = TOKEN_NE; + if (!strcmp(tline->text, "!=")) + return tokval->t_type = TOKEN_NE; + if (!strcmp(tline->text, "<=")) + return tokval->t_type = TOKEN_LE; + if (!strcmp(tline->text, ">=")) + return tokval->t_type = TOKEN_GE; + if (!strcmp(tline->text, "&&")) + return tokval->t_type = TOKEN_DBL_AND; + if (!strcmp(tline->text, "^^")) + return tokval->t_type = TOKEN_DBL_XOR; + if (!strcmp(tline->text, "||")) + return tokval->t_type = TOKEN_DBL_OR; + } + + /* + * We have no other options: just return the first character of + * the token text. + */ + return tokval->t_type = tline->text[0]; +} + +/* + * Compare a string to the name of an existing macro; this is a + * simple wrapper which calls either strcmp or nasm_stricmp + * depending on the value of the `casesense' parameter. + */ +static int +mstrcmp(char *p, char *q, int casesense) +{ + return casesense ? strcmp(p, q) : nasm_stricmp(p, q); +} + +/* + * Return the Context structure associated with a %$ token. Return + * NULL, having _already_ reported an error condition, if the + * context stack isn't deep enough for the supplied number of $ + * signs. + * If all_contexts == TRUE, contexts that enclose current are + * also scanned for such smacro, until it is found; if not - + * only the context that directly results from the number of $'s + * in variable's name. + */ +static Context * +get_ctx(char *name, int all_contexts) +{ + Context *ctx; + SMacro *m; + size_t i; + + if (!name || name[0] != '%' || name[1] != '$') + return NULL; + + if (!cstk) + { + error(ERR_NONFATAL, "`%s': context stack is empty", name); + return NULL; + } + + for (i = strspn(name + 2, "$"), ctx = cstk; (i > 0) && ctx; i--) + { + ctx = ctx->next; +/* i--; Lino - 02/25/02 */ + } + if (!ctx) + { + error(ERR_NONFATAL, "`%s': context stack is only" + " %d level%s deep", name, i - 1, (i == 2 ? "" : "s")); + return NULL; + } + if (!all_contexts) + return ctx; + + do + { + /* Search for this smacro in found context */ + m = ctx->localmac; + while (m) + { + if (!mstrcmp(m->name, name, m->casesense)) + return ctx; + m = m->next; + } + ctx = ctx->next; + } + while (ctx); + return NULL; +} + +/* + * Open an include file. This routine must always return a valid + * file pointer if it returns - it's responsible for throwing an + * ERR_FATAL and bombing out completely if not. It should also try + * the include path one by one until it finds the file or reaches + * the end of the path. + */ +static FILE * +inc_fopen(char *file, char **newname) +{ + FILE *fp; + char *combine = NULL, *c; + char *pb, *p1, *p2, *file2 = NULL; + + /* Try to expand all %ENVVAR% in filename. Warn, and leave %string% + * intact, if ENVVAR is not set in the environment. + */ + pb = file; + p1 = pb; + for (;;) { + char *env; + while (*p1 != '\0' && *p1 != '%') + p1++; + if (*p1 == '\0') + break; + p2 = p1+1; + while (*p2 != '\0' && *p2 != '%') + p2++; + if (*p2 == '\0') + break; + /* Okay, we have a %...%, with p1 pointing to the first %, and p2 + * pointing to the second %. + */ + *p2 = '\0'; + env = getenv(p1+1); + if (!env) { + /* warn, restore %, and continue looking */ + error(ERR_WARNING, "environment variable `%s' does not exist", + p1+1); + *p2 = '%'; + p1 = p2+1; + continue; + } + /* need to expand */ + if (!file2) { + file2 = nasm_malloc(strlen(file)+strlen(env)+1); + file2[0] = '\0'; + } else + file2 = nasm_realloc(file2, strlen(file2)+strlen(env)+1); + *p1 = '\0'; + strcat(file2, pb); + strcat(file2, env); + pb = p2+1; + p1 = pb; + } + /* add tail end; string is long enough that we don't need to realloc */ + if (file2) + strcat(file2, pb); + + fp = yasm_fopen_include(file2 ? file2 : file, nasm_src_get_fname(), "r", + &combine); + if (!fp && tasm_compatible_mode) + { + char *thefile = file2 ? file2 : file; + /* try a few case combinations */ + do { + for (c = thefile; *c; c++) + *c = toupper(*c); + fp = yasm_fopen_include(thefile, nasm_src_get_fname(), "r", &combine); + if (fp) break; + *thefile = tolower(*thefile); + fp = yasm_fopen_include(thefile, nasm_src_get_fname(), "r", &combine); + if (fp) break; + for (c = thefile; *c; c++) + *c = tolower(*c); + fp = yasm_fopen_include(thefile, nasm_src_get_fname(), "r", &combine); + if (fp) break; + *thefile = toupper(*thefile); + fp = yasm_fopen_include(thefile, nasm_src_get_fname(), "r", &combine); + if (fp) break; + } while (0); + } + if (!fp) + error(ERR_FATAL, "unable to open include file `%s'", + file2 ? file2 : file); + nasm_preproc_add_dep(combine); + + if (file2) + nasm_free(file2); + + *newname = combine; + return fp; +} + +/* + * Determine if we should warn on defining a single-line macro of + * name `name', with `nparam' parameters. If nparam is 0 or -1, will + * return TRUE if _any_ single-line macro of that name is defined. + * Otherwise, will return TRUE if a single-line macro with either + * `nparam' or no parameters is defined. + * + * If a macro with precisely the right number of parameters is + * defined, or nparam is -1, the address of the definition structure + * will be returned in `defn'; otherwise NULL will be returned. If `defn' + * is NULL, no action will be taken regarding its contents, and no + * error will occur. + * + * Note that this is also called with nparam zero to resolve + * `ifdef'. + * + * If you already know which context macro belongs to, you can pass + * the context pointer as first parameter; if you won't but name begins + * with %$ the context will be automatically computed. If all_contexts + * is true, macro will be searched in outer contexts as well. + */ +static int +smacro_defined(Context * ctx, char *name, int nparam, SMacro ** defn, + int nocase) +{ + SMacro *m; + int highest_level = -1; + + if (ctx) + m = ctx->localmac; + else if (name[0] == '%' && name[1] == '$') + { + if (cstk) + ctx = get_ctx(name, FALSE); + if (!ctx) + return FALSE; /* got to return _something_ */ + m = ctx->localmac; + } + else + m = smacros[hash(name)]; + + while (m) + { + if (!mstrcmp(m->name, name, m->casesense && nocase) && + (nparam <= 0 || m->nparam == 0 || nparam == m->nparam) && (highest_level < 0 || m->level > highest_level)) + { + highest_level = m->level; + if (defn) + { + if (nparam == m->nparam || nparam == -1) + *defn = m; + else + *defn = NULL; + } + } + m = m->next; + } + + return highest_level >= 0; +} + +/* + * Count and mark off the parameters in a multi-line macro call. + * This is called both from within the multi-line macro expansion + * code, and also to mark off the default parameters when provided + * in a %macro definition line. + */ +static void +count_mmac_params(Token * t, int *nparam, Token *** params) +{ + int paramsize, brace; + + *nparam = paramsize = 0; + *params = NULL; + while (t) + { + if (*nparam+1 >= paramsize) + { + paramsize += PARAM_DELTA; + *params = nasm_realloc(*params, sizeof(**params) * paramsize); + } + skip_white_(t); + brace = FALSE; + if (tok_is_(t, "{")) + brace = TRUE; + (*params)[(*nparam)++] = t; + while (tok_isnt_(t, brace ? "}" : ",")) + t = t->next; + if (t) + { /* got a comma/brace */ + t = t->next; + if (brace) + { + /* + * Now we've found the closing brace, look further + * for the comma. + */ + skip_white_(t); + if (tok_isnt_(t, ",")) + { + error(ERR_NONFATAL, + "braces do not enclose all of macro parameter"); + while (tok_isnt_(t, ",")) + t = t->next; + } + if (t) + t = t->next; /* eat the comma */ + } + } + } +} + +/* + * Determine whether one of the various `if' conditions is true or + * not. + * + * We must free the tline we get passed. + */ +static int +if_condition(Token * tline, int i) +{ + int j, casesense; + Token *t, *tt, **tptr, *origline; + struct tokenval tokval; + yasm_expr *evalresult; + yasm_intnum *intn; + + origline = tline; + + switch (i) + { + case PP_IFCTX: + case PP_ELIFCTX: + case PP_IFNCTX: + case PP_ELIFNCTX: + j = FALSE; /* have we matched yet? */ + while (cstk && tline) + { + skip_white_(tline); + if (!tline || tline->type != TOK_ID) + { + error(ERR_NONFATAL, + "`%s' expects context identifiers", + directives[i]); + free_tlist(origline); + return -1; + } + if (!nasm_stricmp(tline->text, cstk->name)) + j = TRUE; + tline = tline->next; + } + if (i == PP_IFNCTX || i == PP_ELIFNCTX) + j = !j; + free_tlist(origline); + return j; + + case PP_IFDEF: + case PP_ELIFDEF: + case PP_IFNDEF: + case PP_ELIFNDEF: + j = FALSE; /* have we matched yet? */ + while (tline) + { + skip_white_(tline); + if (!tline || (tline->type != TOK_ID && + (tline->type != TOK_PREPROC_ID || + tline->text[1] != '$'))) + { + error(ERR_NONFATAL, + "`%s' expects macro identifiers", + directives[i]); + free_tlist(origline); + return -1; + } + if (smacro_defined(NULL, tline->text, 0, NULL, 1)) + j = TRUE; + tline = tline->next; + } + if (i == PP_IFNDEF || i == PP_ELIFNDEF) + j = !j; + free_tlist(origline); + return j; + + case PP_IFIDN: + case PP_ELIFIDN: + case PP_IFNIDN: + case PP_ELIFNIDN: + case PP_IFIDNI: + case PP_ELIFIDNI: + case PP_IFNIDNI: + case PP_ELIFNIDNI: + tline = expand_smacro(tline); + t = tt = tline; + while (tok_isnt_(tt, ",")) + tt = tt->next; + if (!tt) + { + error(ERR_NONFATAL, + "`%s' expects two comma-separated arguments", + directives[i]); + free_tlist(tline); + return -1; + } + tt = tt->next; + casesense = (i == PP_IFIDN || i == PP_ELIFIDN || + i == PP_IFNIDN || i == PP_ELIFNIDN); + j = TRUE; /* assume equality unless proved not */ + while ((t->type != TOK_OTHER || strcmp(t->text, ",")) && tt) + { + if (tt->type == TOK_OTHER && !strcmp(tt->text, ",")) + { + error(ERR_NONFATAL, "`%s': more than one comma on line", + directives[i]); + free_tlist(tline); + return -1; + } + if (t->type == TOK_WHITESPACE) + { + t = t->next; + continue; + } + if (tt->type == TOK_WHITESPACE) + { + tt = tt->next; + continue; + } + if (tt->type != t->type) + { + j = FALSE; /* found mismatching tokens */ + break; + } + /* Unify surrounding quotes for strings */ + if (t->type == TOK_STRING) + { + tt->text[0] = t->text[0]; + tt->text[strlen(tt->text) - 1] = t->text[0]; + } + if (mstrcmp(tt->text, t->text, casesense) != 0) + { + j = FALSE; /* found mismatching tokens */ + break; + } + + t = t->next; + tt = tt->next; + } + if ((t->type != TOK_OTHER || strcmp(t->text, ",")) || tt) + j = FALSE; /* trailing gunk on one end or other */ + if (i == PP_IFNIDN || i == PP_ELIFNIDN || + i == PP_IFNIDNI || i == PP_ELIFNIDNI) + j = !j; + free_tlist(tline); + return j; + + case PP_IFMACRO: + case PP_ELIFMACRO: + case PP_IFNMACRO: + case PP_ELIFNMACRO: + { + int found = 0; + MMacro searching, *mmac; + + tline = tline->next; + skip_white_(tline); + tline = expand_id(tline); + if (!tok_type_(tline, TOK_ID)) + { + error(ERR_NONFATAL, + "`%s' expects a macro name", + directives[i]); + return -1; + } + searching.name = nasm_strdup(tline->text); + searching.casesense = (i == PP_MACRO); + searching.plus = FALSE; + searching.nolist = FALSE; + searching.in_progress = FALSE; + searching.rep_nest = NULL; + searching.nparam_min = 0; + searching.nparam_max = INT_MAX; + tline = expand_smacro(tline->next); + skip_white_(tline); + if (!tline) + { + } else if (!tok_type_(tline, TOK_NUMBER)) + { + error(ERR_NONFATAL, + "`%s' expects a parameter count or nothing", + directives[i]); + } + else + { + intn = nasm_readnum(tline->text, &j); + searching.nparam_min = searching.nparam_max = + yasm_intnum_get_int(intn); + yasm_intnum_destroy(intn); + if (j) + error(ERR_NONFATAL, + "unable to parse parameter count `%s'", + tline->text); + } + if (tline && tok_is_(tline->next, "-")) + { + tline = tline->next->next; + if (tok_is_(tline, "*")) + searching.nparam_max = INT_MAX; + else if (!tok_type_(tline, TOK_NUMBER)) + error(ERR_NONFATAL, + "`%s' expects a parameter count after `-'", + directives[i]); + else + { + intn = nasm_readnum(tline->text, &j); + searching.nparam_max = yasm_intnum_get_int(intn); + yasm_intnum_destroy(intn); + if (j) + error(ERR_NONFATAL, + "unable to parse parameter count `%s'", + tline->text); + if (searching.nparam_min > searching.nparam_max) + error(ERR_NONFATAL, + "minimum parameter count exceeds maximum"); + } + } + if (tline && tok_is_(tline->next, "+")) + { + tline = tline->next; + searching.plus = TRUE; + } + mmac = mmacros[hash(searching.name)]; + while (mmac) + { + if (!strcmp(mmac->name, searching.name) && + (mmac->nparam_min <= searching.nparam_max + || searching.plus) + && (searching.nparam_min <= mmac->nparam_max + || mmac->plus)) + { + found = TRUE; + break; + } + mmac = mmac->next; + } + nasm_free(searching.name); + free_tlist(origline); + if (i == PP_IFNMACRO || i == PP_ELIFNMACRO) + found = !found; + return found; + } + + case PP_IFID: + case PP_ELIFID: + case PP_IFNID: + case PP_ELIFNID: + case PP_IFNUM: + case PP_ELIFNUM: + case PP_IFNNUM: + case PP_ELIFNNUM: + case PP_IFSTR: + case PP_ELIFSTR: + case PP_IFNSTR: + case PP_ELIFNSTR: + tline = expand_smacro(tline); + t = tline; + while (tok_type_(t, TOK_WHITESPACE)) + t = t->next; + j = FALSE; /* placate optimiser */ + if (t) + switch (i) + { + case PP_IFID: + case PP_ELIFID: + case PP_IFNID: + case PP_ELIFNID: + j = (t->type == TOK_ID); + break; + case PP_IFNUM: + case PP_ELIFNUM: + case PP_IFNNUM: + case PP_ELIFNNUM: + j = (t->type == TOK_NUMBER); + break; + case PP_IFSTR: + case PP_ELIFSTR: + case PP_IFNSTR: + case PP_ELIFNSTR: + j = (t->type == TOK_STRING); + break; + } + if (i == PP_IFNID || i == PP_ELIFNID || + i == PP_IFNNUM || i == PP_ELIFNNUM || + i == PP_IFNSTR || i == PP_ELIFNSTR) + j = !j; + free_tlist(tline); + return j; + + case PP_IF: + case PP_ELIF: + t = tline = expand_smacro(tline); + tptr = &t; + tokval.t_type = TOKEN_INVALID; + evalresult = evaluate(ppscan, tptr, &tokval, pass | CRITICAL, + error); + free_tlist(tline); + if (!evalresult) + return -1; + if (tokval.t_type) + error(ERR_WARNING, + "trailing garbage after expression ignored"); + intn = yasm_expr_get_intnum(&evalresult, 0); + if (!intn) + { + error(ERR_NONFATAL, + "non-constant value given to `%s'", directives[i]); + yasm_expr_destroy(evalresult); + return -1; + } + j = !yasm_intnum_is_zero(intn); + yasm_expr_destroy(evalresult); + return j; + + default: + error(ERR_FATAL, + "preprocessor directive `%s' not yet implemented", + directives[i]); + free_tlist(origline); + return -1; /* yeah, right */ + } +} + +/* + * Expand macros in a string. Used in %error and %include directives. + * First tokenise the string, apply "expand_smacro" and then de-tokenise back. + * The returned variable should ALWAYS be freed after usage. + */ +static void +expand_macros_in_string(char **p) +{ + Token *line = tokenise(*p); + line = expand_smacro(line); + *p = detoken(line, FALSE); +} + +/** + * find and process preprocessor directive in passed line + * Find out if a line contains a preprocessor directive, and deal + * with it if so. + * + * If a directive _is_ found, it is the responsibility of this routine + * (and not the caller) to free_tlist() the line. + * + * @param tline a pointer to the current tokeninzed line linked list + * @return DIRECTIVE_FOUND or NO_DIRECTIVE_FOUND + * + */ +static int +do_directive(Token * tline) +{ + int i, j, k, m, nparam, nolist; + int offset; + char *p, *mname, *newname; + Include *inc; + Context *ctx; + Cond *cond; + SMacro *smac, **smhead; + MMacro *mmac; + Token *t, *tt, *param_start, *macro_start, *last, **tptr, *origline; + Line *l; + struct tokenval tokval; + yasm_expr *evalresult; + MMacro *tmp_defining; /* Used when manipulating rep_nest */ + yasm_intnum *intn; + + origline = tline; + + skip_white_(tline); + if (!tok_type_(tline, TOK_PREPROC_ID) || + (tline->text[1] == '%' || tline->text[1] == '$' + || tline->text[1] == '!')) + return NO_DIRECTIVE_FOUND; + + i = -1; + j = elements(directives); + while (j - i > 1) + { + k = (j + i) / 2; + m = nasm_stricmp(tline->text, directives[k]); + if (m == 0) { + if (tasm_compatible_mode) { + i = k; + j = -2; + } else if (k != PP_ARG && k != PP_LOCAL && k != PP_STACKSIZE) { + i = k; + j = -2; + } + break; + } + else if (m < 0) { + j = k; + } + else + i = k; + } + + /* + * If we're in a non-emitting branch of a condition construct, + * or walking to the end of an already terminated %rep block, + * we should ignore all directives except for condition + * directives. + */ + if (((istk->conds && !emitting(istk->conds->state)) || + (istk->mstk && !istk->mstk->in_progress)) && + !is_condition(i)) + { + return NO_DIRECTIVE_FOUND; + } + + /* + * If we're defining a macro or reading a %rep block, we should + * ignore all directives except for %macro/%imacro (which + * generate an error), %endm/%endmacro, and (only if we're in a + * %rep block) %endrep. If we're in a %rep block, another %rep + * causes an error, so should be let through. + */ + if (defining && i != PP_MACRO && i != PP_IMACRO && + i != PP_ENDMACRO && i != PP_ENDM && + (defining->name || (i != PP_ENDREP && i != PP_REP))) + { + return NO_DIRECTIVE_FOUND; + } + + if (defining) { + if (i == PP_MACRO || i == PP_IMACRO) { + nested_mac_count++; + return NO_DIRECTIVE_FOUND; + } else if (nested_mac_count > 0) { + if (i == PP_ENDMACRO) { + nested_mac_count--; + return NO_DIRECTIVE_FOUND; + } + } + if (!defining->name) { + if (i == PP_REP) { + nested_rep_count++; + return NO_DIRECTIVE_FOUND; + } else if (nested_rep_count > 0) { + if (i == PP_ENDREP) { + nested_rep_count--; + return NO_DIRECTIVE_FOUND; + } + } + } + } + + if (j != -2) + { + error(ERR_NONFATAL, "unknown preprocessor directive `%s'", + tline->text); + return NO_DIRECTIVE_FOUND; /* didn't get it */ + } + + switch (i) + { + case PP_STACKSIZE: + /* Directive to tell NASM what the default stack size is. The + * default is for a 16-bit stack, and this can be overriden with + * %stacksize large. + * the following form: + * + * ARG arg1:WORD, arg2:DWORD, arg4:QWORD + */ + tline = tline->next; + if (tline && tline->type == TOK_WHITESPACE) + tline = tline->next; + if (!tline || tline->type != TOK_ID) + { + error(ERR_NONFATAL, "`%%stacksize' missing size parameter"); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + if (nasm_stricmp(tline->text, "flat") == 0) + { + /* All subsequent ARG directives are for a 32-bit stack */ + StackSize = 4; + StackPointer = "ebp"; + ArgOffset = 8; + LocalOffset = 4; + } + else if (nasm_stricmp(tline->text, "large") == 0) + { + /* All subsequent ARG directives are for a 16-bit stack, + * far function call. + */ + StackSize = 2; + StackPointer = "bp"; + ArgOffset = 4; + LocalOffset = 2; + } + else if (nasm_stricmp(tline->text, "small") == 0) + { + /* All subsequent ARG directives are for a 16-bit stack, + * far function call. We don't support near functions. + */ + StackSize = 2; + StackPointer = "bp"; + ArgOffset = 6; + LocalOffset = 2; + } + else + { + error(ERR_NONFATAL, "`%%stacksize' invalid size type"); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + free_tlist(origline); + return DIRECTIVE_FOUND; + + case PP_ARG: + /* TASM like ARG directive to define arguments to functions, in + * the following form: + * + * ARG arg1:WORD, arg2:DWORD, arg4:QWORD + */ + offset = ArgOffset; + do + { + char *arg, directive[256]; + int size = StackSize; + + /* Find the argument name */ + tline = tline->next; + if (tline && tline->type == TOK_WHITESPACE) + tline = tline->next; + if (!tline || tline->type != TOK_ID) + { + error(ERR_NONFATAL, "`%%arg' missing argument parameter"); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + arg = tline->text; + + /* Find the argument size type */ + tline = tline->next; + if (!tline || tline->type != TOK_OTHER + || tline->text[0] != ':') + { + error(ERR_NONFATAL, + "Syntax error processing `%%arg' directive"); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + tline = tline->next; + if (!tline || tline->type != TOK_ID) + { + error(ERR_NONFATAL, + "`%%arg' missing size type parameter"); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + + /* Allow macro expansion of type parameter */ + tt = tokenise(tline->text); + tt = expand_smacro(tt); + if (nasm_stricmp(tt->text, "byte") == 0) + { + size = MAX(StackSize, 1); + } + else if (nasm_stricmp(tt->text, "word") == 0) + { + size = MAX(StackSize, 2); + } + else if (nasm_stricmp(tt->text, "dword") == 0) + { + size = MAX(StackSize, 4); + } + else if (nasm_stricmp(tt->text, "qword") == 0) + { + size = MAX(StackSize, 8); + } + else if (nasm_stricmp(tt->text, "tword") == 0) + { + size = MAX(StackSize, 10); + } + else + { + error(ERR_NONFATAL, + "Invalid size type for `%%arg' missing directive"); + free_tlist(tt); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + free_tlist(tt); + + /* Now define the macro for the argument */ + sprintf(directive, "%%define %s (%s+%d)", arg, StackPointer, + offset); + do_directive(tokenise(directive)); + offset += size; + + /* Move to the next argument in the list */ + tline = tline->next; + if (tline && tline->type == TOK_WHITESPACE) + tline = tline->next; + } + while (tline && tline->type == TOK_OTHER + && tline->text[0] == ','); + free_tlist(origline); + return DIRECTIVE_FOUND; + + case PP_LOCAL: + /* TASM like LOCAL directive to define local variables for a + * function, in the following form: + * + * LOCAL local1:WORD, local2:DWORD, local4:QWORD = LocalSize + * + * The '= LocalSize' at the end is ignored by NASM, but is + * required by TASM to define the local parameter size (and used + * by the TASM macro package). + */ + offset = LocalOffset; + do + { + char *local, directive[256]; + int size = StackSize; + + /* Find the argument name */ + tline = tline->next; + if (tline && tline->type == TOK_WHITESPACE) + tline = tline->next; + if (!tline || tline->type != TOK_ID) + { + error(ERR_NONFATAL, + "`%%local' missing argument parameter"); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + local = tline->text; + + /* Find the argument size type */ + tline = tline->next; + if (!tline || tline->type != TOK_OTHER + || tline->text[0] != ':') + { + error(ERR_NONFATAL, + "Syntax error processing `%%local' directive"); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + tline = tline->next; + if (!tline || tline->type != TOK_ID) + { + error(ERR_NONFATAL, + "`%%local' missing size type parameter"); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + + /* Allow macro expansion of type parameter */ + tt = tokenise(tline->text); + tt = expand_smacro(tt); + if (nasm_stricmp(tt->text, "byte") == 0) + { + size = MAX(StackSize, 1); + } + else if (nasm_stricmp(tt->text, "word") == 0) + { + size = MAX(StackSize, 2); + } + else if (nasm_stricmp(tt->text, "dword") == 0) + { + size = MAX(StackSize, 4); + } + else if (nasm_stricmp(tt->text, "qword") == 0) + { + size = MAX(StackSize, 8); + } + else if (nasm_stricmp(tt->text, "tword") == 0) + { + size = MAX(StackSize, 10); + } + else + { + error(ERR_NONFATAL, + "Invalid size type for `%%local' missing directive"); + free_tlist(tt); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + free_tlist(tt); + + /* Now define the macro for the argument */ + sprintf(directive, "%%define %s (%s-%d)", local, StackPointer, + offset); + do_directive(tokenise(directive)); + offset += size; + + /* Now define the assign to setup the enter_c macro correctly */ + sprintf(directive, "%%assign %%$localsize %%$localsize+%d", + size); + do_directive(tokenise(directive)); + + /* Move to the next argument in the list */ + tline = tline->next; + if (tline && tline->type == TOK_WHITESPACE) + tline = tline->next; + } + while (tline && tline->type == TOK_OTHER + && tline->text[0] == ','); + free_tlist(origline); + return DIRECTIVE_FOUND; + + case PP_CLEAR: + if (tline->next) + error(ERR_WARNING, + "trailing garbage after `%%clear' ignored"); + for (j = 0; j < NHASH; j++) + { + while (mmacros[j]) + { + MMacro *m2 = mmacros[j]; + mmacros[j] = m2->next; + free_mmacro(m2); + } + while (smacros[j]) + { + SMacro *s = smacros[j]; + smacros[j] = smacros[j]->next; + nasm_free(s->name); + free_tlist(s->expansion); + nasm_free(s); + } + } + free_tlist(origline); + return DIRECTIVE_FOUND; + + case PP_INCLUDE: + tline = tline->next; + skip_white_(tline); + if (!tline || (tline->type != TOK_STRING && + tline->type != TOK_INTERNAL_STRING)) + { + error(ERR_NONFATAL, "`%%include' expects a file name"); + free_tlist(origline); + return DIRECTIVE_FOUND; /* but we did _something_ */ + } + if (tline->next) + error(ERR_WARNING, + "trailing garbage after `%%include' ignored"); + if (tline->type != TOK_INTERNAL_STRING) + { + p = tline->text + 1; /* point past the quote to the name */ + p[strlen(p) - 1] = '\0'; /* remove the trailing quote */ + } + else + p = tline->text; /* internal_string is easier */ + expand_macros_in_string(&p); + inc = nasm_malloc(sizeof(Include)); + inc->next = istk; + inc->conds = NULL; + inc->fp = inc_fopen(p, &newname); + inc->fname = nasm_src_set_fname(newname); + inc->lineno = nasm_src_set_linnum(0); + inc->lineinc = 1; + inc->expansion = NULL; + inc->mstk = NULL; + istk = inc; + list->uplevel(LIST_INCLUDE); + free_tlist(origline); + return DIRECTIVE_FOUND; + + case PP_PUSH: + tline = tline->next; + skip_white_(tline); + tline = expand_id(tline); + if (!tok_type_(tline, TOK_ID)) + { + error(ERR_NONFATAL, "`%%push' expects a context identifier"); + free_tlist(origline); + return DIRECTIVE_FOUND; /* but we did _something_ */ + } + if (tline->next) + error(ERR_WARNING, "trailing garbage after `%%push' ignored"); + ctx = nasm_malloc(sizeof(Context)); + ctx->next = cstk; + ctx->localmac = NULL; + ctx->name = nasm_strdup(tline->text); + ctx->number = unique++; + cstk = ctx; + free_tlist(origline); + break; + + case PP_REPL: + tline = tline->next; + skip_white_(tline); + tline = expand_id(tline); + if (!tok_type_(tline, TOK_ID)) + { + error(ERR_NONFATAL, "`%%repl' expects a context identifier"); + free_tlist(origline); + return DIRECTIVE_FOUND; /* but we did _something_ */ + } + if (tline->next) + error(ERR_WARNING, "trailing garbage after `%%repl' ignored"); + if (!cstk) + error(ERR_NONFATAL, "`%%repl': context stack is empty"); + else + { + nasm_free(cstk->name); + cstk->name = nasm_strdup(tline->text); + } + free_tlist(origline); + break; + + case PP_POP: + if (tline->next) + error(ERR_WARNING, "trailing garbage after `%%pop' ignored"); + if (!cstk) + error(ERR_NONFATAL, + "`%%pop': context stack is already empty"); + else + ctx_pop(); + free_tlist(origline); + break; + + case PP_SCOPE: + if (tline->next) + error(ERR_WARNING, "trailing garbage after `%%scope' ignored"); + Level++; + free_tlist(origline); + break; + + case PP_ENDSCOPE: + if (tline->next) + error(ERR_WARNING, "trailing garbage after `%%endscope' ignored"); + if (!Level) + error(ERR_NONFATAL, + "`%%endscope': already popped all levels"); + else + { + for (k = 0; k < NHASH; k++) + { + SMacro **smlast = &smacros[k]; + smac = smacros[k]; + while (smac) + { + if (smac->level < Level) + { + smlast = &smac->next; + smac = smac->next; + } + else + { + *smlast = smac->next; + nasm_free(smac->name); + free_tlist(smac->expansion); + nasm_free(smac); + smac = *smlast; + } + } + } + for (ctx = cstk; ctx; ctx = ctx->next) + { + SMacro **smlast = &ctx->localmac; + smac = ctx->localmac; + while (smac) + { + if (smac->level < Level) + { + smlast = &smac->next; + smac = smac->next; + } + else + { + *smlast = smac->next; + nasm_free(smac->name); + free_tlist(smac->expansion); + nasm_free(smac); + smac = *smlast; + } + } + } + Level--; + } + free_tlist(origline); + break; + + case PP_ERROR: + tline->next = expand_smacro(tline->next); + tline = tline->next; + skip_white_(tline); + if (tok_type_(tline, TOK_STRING)) + { + p = tline->text + 1; /* point past the quote to the name */ + p[strlen(p) - 1] = '\0'; /* remove the trailing quote */ + expand_macros_in_string(&p); + error(ERR_NONFATAL, "%s", p); + nasm_free(p); + } + else + { + p = detoken(tline, FALSE); + error(ERR_WARNING, "%s", p); + nasm_free(p); + } + free_tlist(origline); + break; + + case PP_IF: + case PP_IFCTX: + case PP_IFDEF: + case PP_IFID: + case PP_IFIDN: + case PP_IFIDNI: + case PP_IFMACRO: + case PP_IFNCTX: + case PP_IFNDEF: + case PP_IFNID: + case PP_IFNIDN: + case PP_IFNIDNI: + case PP_IFNMACRO: + case PP_IFNNUM: + case PP_IFNSTR: + case PP_IFNUM: + case PP_IFSTR: + if (istk->conds && !emitting(istk->conds->state)) + j = COND_NEVER; + else + { + j = if_condition(tline->next, i); + tline->next = NULL; /* it got freed */ + j = j < 0 ? COND_NEVER : j ? COND_IF_TRUE : COND_IF_FALSE; + } + free_tlist(origline); + cond = nasm_malloc(sizeof(Cond)); + cond->next = istk->conds; + cond->state = j; + istk->conds = cond; + return DIRECTIVE_FOUND; + + case PP_ELIF: + case PP_ELIFCTX: + case PP_ELIFDEF: + case PP_ELIFID: + case PP_ELIFIDN: + case PP_ELIFIDNI: + case PP_ELIFMACRO: + case PP_ELIFNCTX: + case PP_ELIFNDEF: + case PP_ELIFNID: + case PP_ELIFNIDN: + case PP_ELIFNIDNI: + case PP_ELIFNMACRO: + case PP_ELIFNNUM: + case PP_ELIFNSTR: + case PP_ELIFNUM: + case PP_ELIFSTR: + if (!istk->conds) + error(ERR_FATAL, "`%s': no matching `%%if'", directives[i]); + if (emitting(istk->conds->state) + || istk->conds->state == COND_NEVER) + istk->conds->state = COND_NEVER; + else + { + /* + * IMPORTANT: In the case of %if, we will already have + * called expand_mmac_params(); however, if we're + * processing an %elif we must have been in a + * non-emitting mode, which would have inhibited + * the normal invocation of expand_mmac_params(). Therefore, + * we have to do it explicitly here. + */ + j = if_condition(expand_mmac_params(tline->next), i); + tline->next = NULL; /* it got freed */ + istk->conds->state = + j < 0 ? COND_NEVER : j ? COND_IF_TRUE : COND_IF_FALSE; + } + free_tlist(origline); + return DIRECTIVE_FOUND; + + case PP_ELSE: + if (tline->next) + error(ERR_WARNING, "trailing garbage after `%%else' ignored"); + if (!istk->conds) + error(ERR_FATAL, "`%%else': no matching `%%if'"); + if (emitting(istk->conds->state) + || istk->conds->state == COND_NEVER) + istk->conds->state = COND_ELSE_FALSE; + else + istk->conds->state = COND_ELSE_TRUE; + free_tlist(origline); + return DIRECTIVE_FOUND; + + case PP_ENDIF: + if (tline->next) + error(ERR_WARNING, + "trailing garbage after `%%endif' ignored"); + if (!istk->conds) + error(ERR_FATAL, "`%%endif': no matching `%%if'"); + cond = istk->conds; + istk->conds = cond->next; + nasm_free(cond); + free_tlist(origline); + return DIRECTIVE_FOUND; + + case PP_MACRO: + case PP_IMACRO: + if (defining) + error(ERR_FATAL, + "`%%%smacro': already defining a macro", + (i == PP_IMACRO ? "i" : "")); + tline = tline->next; + skip_white_(tline); + tline = expand_id(tline); + if (!tok_type_(tline, TOK_ID)) + { + error(ERR_NONFATAL, + "`%%%smacro' expects a macro name", + (i == PP_IMACRO ? "i" : "")); + return DIRECTIVE_FOUND; + } + defining = nasm_malloc(sizeof(MMacro)); + defining->name = nasm_strdup(tline->text); + defining->casesense = (i == PP_MACRO); + defining->plus = FALSE; + defining->nolist = FALSE; + defining->in_progress = FALSE; + defining->rep_nest = NULL; + tline = expand_smacro(tline->next); + skip_white_(tline); + if (!tok_type_(tline, TOK_NUMBER)) + { + error(ERR_NONFATAL, + "`%%%smacro' expects a parameter count", + (i == PP_IMACRO ? "i" : "")); + defining->nparam_min = defining->nparam_max = 0; + } + else + { + intn = nasm_readnum(tline->text, &j); + defining->nparam_min = defining->nparam_max = + yasm_intnum_get_int(intn); + yasm_intnum_destroy(intn); + if (j) + error(ERR_NONFATAL, + "unable to parse parameter count `%s'", + tline->text); + } + if (tline && tok_is_(tline->next, "-")) + { + tline = tline->next->next; + if (tok_is_(tline, "*")) + defining->nparam_max = INT_MAX; + else if (!tok_type_(tline, TOK_NUMBER)) + error(ERR_NONFATAL, + "`%%%smacro' expects a parameter count after `-'", + (i == PP_IMACRO ? "i" : "")); + else + { + intn = nasm_readnum(tline->text, &j); + defining->nparam_max = yasm_intnum_get_int(intn); + yasm_intnum_destroy(intn); + if (j) + error(ERR_NONFATAL, + "unable to parse parameter count `%s'", + tline->text); + if (defining->nparam_min > defining->nparam_max) + error(ERR_NONFATAL, + "minimum parameter count exceeds maximum"); + } + } + if (tline && tok_is_(tline->next, "+")) + { + tline = tline->next; + defining->plus = TRUE; + } + if (tline && tok_type_(tline->next, TOK_ID) && + !nasm_stricmp(tline->next->text, ".nolist")) + { + tline = tline->next; + defining->nolist = TRUE; + } + mmac = mmacros[hash(defining->name)]; + while (mmac) + { + if (!strcmp(mmac->name, defining->name) && + (mmac->nparam_min <= defining->nparam_max + || defining->plus) + && (defining->nparam_min <= mmac->nparam_max + || mmac->plus)) + { + error(ERR_WARNING, + "redefining multi-line macro `%s'", + defining->name); + break; + } + mmac = mmac->next; + } + /* + * Handle default parameters. + */ + if (tline && tline->next) + { + defining->dlist = tline->next; + tline->next = NULL; + count_mmac_params(defining->dlist, &defining->ndefs, + &defining->defaults); + } + else + { + defining->dlist = NULL; + defining->defaults = NULL; + } + defining->expansion = NULL; + free_tlist(origline); + return DIRECTIVE_FOUND; + + case PP_ENDM: + case PP_ENDMACRO: + if (!defining) + { + error(ERR_NONFATAL, "`%s': not defining a macro", + tline->text); + return DIRECTIVE_FOUND; + } + k = hash(defining->name); + defining->next = mmacros[k]; + mmacros[k] = defining; + defining = NULL; + free_tlist(origline); + return DIRECTIVE_FOUND; + + case PP_ROTATE: + if (tline->next && tline->next->type == TOK_WHITESPACE) + tline = tline->next; + if (tline->next == NULL) + { + free_tlist(origline); + error(ERR_NONFATAL, "`%%rotate' missing rotate count"); + return DIRECTIVE_FOUND; + } + t = expand_smacro(tline->next); + tline->next = NULL; + free_tlist(origline); + tline = t; + tptr = &t; + tokval.t_type = TOKEN_INVALID; + evalresult = evaluate(ppscan, tptr, &tokval, pass, error); + free_tlist(tline); + if (!evalresult) + return DIRECTIVE_FOUND; + if (tokval.t_type) + error(ERR_WARNING, + "trailing garbage after expression ignored"); + intn = yasm_expr_get_intnum(&evalresult, 0); + if (!intn) + { + error(ERR_NONFATAL, "non-constant value given to `%%rotate'"); + yasm_expr_destroy(evalresult); + return DIRECTIVE_FOUND; + } + mmac = istk->mstk; + while (mmac && !mmac->name) /* avoid mistaking %reps for macros */ + mmac = mmac->next_active; + if (!mmac) + { + error(ERR_NONFATAL, + "`%%rotate' invoked outside a macro call"); + } + else if (mmac->nparam == 0) + { + error(ERR_NONFATAL, + "`%%rotate' invoked within macro without parameters"); + } + else + { + mmac->rotate = mmac->rotate + yasm_intnum_get_int(intn); + + if (mmac->rotate < 0) + mmac->rotate = + mmac->nparam - (-mmac->rotate) % mmac->nparam; + mmac->rotate %= mmac->nparam; + } + yasm_expr_destroy(evalresult); + return DIRECTIVE_FOUND; + + case PP_REP: + nolist = FALSE; + do { + tline = tline->next; + } while (tok_type_(tline, TOK_WHITESPACE)); + + if (tok_type_(tline, TOK_ID) && + nasm_stricmp(tline->text, ".nolist") == 0) + { + nolist = TRUE; + do { + tline = tline->next; + } while (tok_type_(tline, TOK_WHITESPACE)); + } + + if (tline) + { + t = expand_smacro(tline); + tptr = &t; + tokval.t_type = TOKEN_INVALID; + evalresult = evaluate(ppscan, tptr, &tokval, pass, error); + if (!evalresult) + { + free_tlist(origline); + return DIRECTIVE_FOUND; + } + if (tokval.t_type) + error(ERR_WARNING, + "trailing garbage after expression ignored"); + intn = yasm_expr_get_intnum(&evalresult, 0); + if (!intn) + { + error(ERR_NONFATAL, "non-constant value given to `%%rep'"); + yasm_expr_destroy(evalresult); + return DIRECTIVE_FOUND; + } + i = (int)yasm_intnum_get_int(intn) + 1; + yasm_expr_destroy(evalresult); + } + else + { + error(ERR_NONFATAL, "`%%rep' expects a repeat count"); + i = 0; + } + free_tlist(origline); + + tmp_defining = defining; + defining = nasm_malloc(sizeof(MMacro)); + defining->name = NULL; /* flags this macro as a %rep block */ + defining->casesense = 0; + defining->plus = FALSE; + defining->nolist = nolist; + defining->in_progress = i; + defining->nparam_min = defining->nparam_max = 0; + defining->defaults = NULL; + defining->dlist = NULL; + defining->expansion = NULL; + defining->next_active = istk->mstk; + defining->rep_nest = tmp_defining; + return DIRECTIVE_FOUND; + + case PP_ENDREP: + if (!defining || defining->name) + { + error(ERR_NONFATAL, "`%%endrep': no matching `%%rep'"); + return DIRECTIVE_FOUND; + } + + /* + * Now we have a "macro" defined - although it has no name + * and we won't be entering it in the hash tables - we must + * push a macro-end marker for it on to istk->expansion. + * After that, it will take care of propagating itself (a + * macro-end marker line for a macro which is really a %rep + * block will cause the macro to be re-expanded, complete + * with another macro-end marker to ensure the process + * continues) until the whole expansion is forcibly removed + * from istk->expansion by a %exitrep. + */ + l = nasm_malloc(sizeof(Line)); + l->next = istk->expansion; + l->finishes = defining; + l->first = NULL; + istk->expansion = l; + + istk->mstk = defining; + + list->uplevel(defining->nolist ? LIST_MACRO_NOLIST : LIST_MACRO); + tmp_defining = defining; + defining = defining->rep_nest; + free_tlist(origline); + return DIRECTIVE_FOUND; + + case PP_EXITREP: + /* + * We must search along istk->expansion until we hit a + * macro-end marker for a macro with no name. Then we set + * its `in_progress' flag to 0. + */ + for (l = istk->expansion; l; l = l->next) + if (l->finishes && !l->finishes->name) + break; + + if (l) + l->finishes->in_progress = 0; + else + error(ERR_NONFATAL, "`%%exitrep' not within `%%rep' block"); + free_tlist(origline); + return DIRECTIVE_FOUND; + + case PP_XDEFINE: + case PP_IXDEFINE: + case PP_DEFINE: + case PP_IDEFINE: + tline = tline->next; + skip_white_(tline); + tline = expand_id(tline); + if (!tline || (tline->type != TOK_ID && + (tline->type != TOK_PREPROC_ID || + tline->text[1] != '$'))) + { + error(ERR_NONFATAL, + "`%%%s%sdefine' expects a macro identifier", + ((i == PP_IDEFINE || i == PP_IXDEFINE) ? "i" : ""), + ((i == PP_XDEFINE || i == PP_IXDEFINE) ? "x" : "")); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + + ctx = get_ctx(tline->text, FALSE); + if (!ctx) + smhead = &smacros[hash(tline->text)]; + else + smhead = &ctx->localmac; + mname = tline->text; + last = tline; + param_start = tline = tline->next; + nparam = 0; + + /* Expand the macro definition now for %xdefine and %ixdefine */ + if ((i == PP_XDEFINE) || (i == PP_IXDEFINE)) + tline = expand_smacro(tline); + + if (tok_is_(tline, "(")) + { + /* + * This macro has parameters. + */ + + tline = tline->next; + while (1) + { + skip_white_(tline); + if (!tline) + { + error(ERR_NONFATAL, "parameter identifier expected"); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + if (tline->type != TOK_ID) + { + error(ERR_NONFATAL, + "`%s': parameter identifier expected", + tline->text); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + tline->type = TOK_SMAC_PARAM + nparam++; + tline = tline->next; + skip_white_(tline); + if (tok_is_(tline, ",")) + { + tline = tline->next; + continue; + } + if (!tok_is_(tline, ")")) + { + error(ERR_NONFATAL, + "`)' expected to terminate macro template"); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + break; + } + last = tline; + tline = tline->next; + } + if (tok_type_(tline, TOK_WHITESPACE)) + last = tline, tline = tline->next; + macro_start = NULL; + last->next = NULL; + t = tline; + while (t) + { + if (t->type == TOK_ID) + { + for (tt = param_start; tt; tt = tt->next) + if (tt->type >= TOK_SMAC_PARAM && + !strcmp(tt->text, t->text)) + t->type = tt->type; + } + tt = t->next; + t->next = macro_start; + macro_start = t; + t = tt; + } + /* + * Good. We now have a macro name, a parameter count, and a + * token list (in reverse order) for an expansion. We ought + * to be OK just to create an SMacro, store it, and let + * free_tlist have the rest of the line (which we have + * carefully re-terminated after chopping off the expansion + * from the end). + */ + if (smacro_defined(ctx, mname, nparam, &smac, i == PP_DEFINE)) + { + if (!smac) + { + error(ERR_WARNING, + "single-line macro `%s' defined both with and" + " without parameters", mname); + free_tlist(origline); + free_tlist(macro_start); + return DIRECTIVE_FOUND; + } + else if (smac->level == Level) + { + /* + * We're redefining in the same level, so we have to + * take over an existing SMacro structure. This means + * freeing what was already in it. + */ + nasm_free(smac->name); + free_tlist(smac->expansion); + } + else + { + smac = nasm_malloc(sizeof(SMacro)); + smac->next = *smhead; + *smhead = smac; + } + } + else + { + smac = nasm_malloc(sizeof(SMacro)); + smac->next = *smhead; + *smhead = smac; + } + smac->name = nasm_strdup(mname); + smac->casesense = ((i == PP_DEFINE) || (i == PP_XDEFINE)); + smac->nparam = nparam; + smac->level = Level; + smac->expansion = macro_start; + smac->in_progress = FALSE; + free_tlist(origline); + return DIRECTIVE_FOUND; + + case PP_UNDEF: + tline = tline->next; + skip_white_(tline); + tline = expand_id(tline); + if (!tline || (tline->type != TOK_ID && + (tline->type != TOK_PREPROC_ID || + tline->text[1] != '$'))) + { + error(ERR_NONFATAL, "`%%undef' expects a macro identifier"); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + if (tline->next) + { + error(ERR_WARNING, + "trailing garbage after macro name ignored"); + } + + /* Find the context that symbol belongs to */ + ctx = get_ctx(tline->text, FALSE); + if (!ctx) + smhead = &smacros[hash(tline->text)]; + else + smhead = &ctx->localmac; + + mname = tline->text; + + /* + * We now have a macro name... go hunt for it. + */ + while (smacro_defined(ctx, mname, -1, &smac, 1)) + { + /* Defined, so we need to find its predecessor and nuke it */ + SMacro **s; + for (s = smhead; *s && *s != smac; s = &(*s)->next); + if (*s) + { + *s = smac->next; + nasm_free(smac->name); + free_tlist(smac->expansion); + nasm_free(smac); + } + } + free_tlist(origline); + return DIRECTIVE_FOUND; + + case PP_STRLEN: + tline = tline->next; + skip_white_(tline); + tline = expand_id(tline); + if (!tline || (tline->type != TOK_ID && + (tline->type != TOK_PREPROC_ID || + tline->text[1] != '$'))) + { + error(ERR_NONFATAL, + "`%%strlen' expects a macro identifier as first parameter"); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + ctx = get_ctx(tline->text, FALSE); + if (!ctx) + smhead = &smacros[hash(tline->text)]; + else + smhead = &ctx->localmac; + mname = tline->text; + last = tline; + tline = expand_smacro(tline->next); + last->next = NULL; + + t = tline; + while (tok_type_(t, TOK_WHITESPACE)) + t = t->next; + /* t should now point to the string */ + if (t->type != TOK_STRING) + { + error(ERR_NONFATAL, + "`%%strlen` requires string as second parameter"); + free_tlist(tline); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + + macro_start = nasm_malloc(sizeof(*macro_start)); + macro_start->next = NULL; + make_tok_num(macro_start, + yasm_intnum_create_uint((unsigned long)(strlen(t->text) - 2))); + macro_start->mac = NULL; + + /* + * We now have a macro name, an implicit parameter count of + * zero, and a numeric token to use as an expansion. Create + * and store an SMacro. + */ + if (smacro_defined(ctx, mname, 0, &smac, i == PP_STRLEN)) + { + if (!smac) + error(ERR_WARNING, + "single-line macro `%s' defined both with and" + " without parameters", mname); + else + { + /* + * We're redefining, so we have to take over an + * existing SMacro structure. This means freeing + * what was already in it. + */ + nasm_free(smac->name); + free_tlist(smac->expansion); + } + } + else + { + smac = nasm_malloc(sizeof(SMacro)); + smac->next = *smhead; + *smhead = smac; + } + smac->name = nasm_strdup(mname); + smac->casesense = (i == PP_STRLEN); + smac->nparam = 0; + smac->level = 0; + smac->expansion = macro_start; + smac->in_progress = FALSE; + free_tlist(tline); + free_tlist(origline); + return DIRECTIVE_FOUND; + + case PP_SUBSTR: + tline = tline->next; + skip_white_(tline); + tline = expand_id(tline); + if (!tline || (tline->type != TOK_ID && + (tline->type != TOK_PREPROC_ID || + tline->text[1] != '$'))) + { + error(ERR_NONFATAL, + "`%%substr' expects a macro identifier as first parameter"); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + ctx = get_ctx(tline->text, FALSE); + if (!ctx) + smhead = &smacros[hash(tline->text)]; + else + smhead = &ctx->localmac; + mname = tline->text; + last = tline; + tline = expand_smacro(tline->next); + last->next = NULL; + + t = tline->next; + while (tok_type_(t, TOK_WHITESPACE)) + t = t->next; + + /* t should now point to the string */ + if (t->type != TOK_STRING) + { + error(ERR_NONFATAL, + "`%%substr` requires string as second parameter"); + free_tlist(tline); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + + tt = t->next; + tptr = &tt; + tokval.t_type = TOKEN_INVALID; + evalresult = evaluate(ppscan, tptr, &tokval, pass, error); + if (!evalresult) + { + free_tlist(tline); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + intn = yasm_expr_get_intnum(&evalresult, 0); + if (!intn) + { + error(ERR_NONFATAL, "non-constant value given to `%%substr`"); + free_tlist(tline); + free_tlist(origline); + yasm_expr_destroy(evalresult); + return DIRECTIVE_FOUND; + } + + macro_start = nasm_malloc(sizeof(*macro_start)); + macro_start->next = NULL; + macro_start->text = nasm_strdup("'''"); + if (yasm_intnum_sign(intn) == 1 + && yasm_intnum_get_uint(intn) < strlen(t->text) - 1) + { + macro_start->text[1] = t->text[yasm_intnum_get_uint(intn)]; + } + else + { + macro_start->text[2] = '\0'; + } + yasm_expr_destroy(evalresult); + macro_start->type = TOK_STRING; + macro_start->mac = NULL; + + /* + * We now have a macro name, an implicit parameter count of + * zero, and a numeric token to use as an expansion. Create + * and store an SMacro. + */ + if (smacro_defined(ctx, mname, 0, &smac, i == PP_SUBSTR)) + { + if (!smac) + error(ERR_WARNING, + "single-line macro `%s' defined both with and" + " without parameters", mname); + else + { + /* + * We're redefining, so we have to take over an + * existing SMacro structure. This means freeing + * what was already in it. + */ + nasm_free(smac->name); + free_tlist(smac->expansion); + } + } + else + { + smac = nasm_malloc(sizeof(SMacro)); + smac->next = *smhead; + *smhead = smac; + } + smac->name = nasm_strdup(mname); + smac->casesense = (i == PP_SUBSTR); + smac->nparam = 0; + smac->level = 0; + smac->expansion = macro_start; + smac->in_progress = FALSE; + free_tlist(tline); + free_tlist(origline); + return DIRECTIVE_FOUND; + + + case PP_ASSIGN: + case PP_IASSIGN: + tline = tline->next; + skip_white_(tline); + tline = expand_id(tline); + if (!tline || (tline->type != TOK_ID && + (tline->type != TOK_PREPROC_ID || + tline->text[1] != '$'))) + { + error(ERR_NONFATAL, + "`%%%sassign' expects a macro identifier", + (i == PP_IASSIGN ? "i" : "")); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + ctx = get_ctx(tline->text, FALSE); + if (!ctx) + smhead = &smacros[hash(tline->text)]; + else + smhead = &ctx->localmac; + mname = tline->text; + last = tline; + tline = expand_smacro(tline->next); + last->next = NULL; + + t = tline; + tptr = &t; + tokval.t_type = TOKEN_INVALID; + evalresult = evaluate(ppscan, tptr, &tokval, pass, error); + free_tlist(tline); + if (!evalresult) + { + free_tlist(origline); + return DIRECTIVE_FOUND; + } + + if (tokval.t_type) + error(ERR_WARNING, + "trailing garbage after expression ignored"); + + intn = yasm_expr_get_intnum(&evalresult, 0); + if (!intn) + { + error(ERR_NONFATAL, + "non-constant value given to `%%%sassign'", + (i == PP_IASSIGN ? "i" : "")); + free_tlist(origline); + yasm_expr_destroy(evalresult); + return DIRECTIVE_FOUND; + } + + macro_start = nasm_malloc(sizeof(*macro_start)); + macro_start->next = NULL; + make_tok_num(macro_start, yasm_intnum_copy(intn)); + yasm_expr_destroy(evalresult); + macro_start->mac = NULL; + + /* + * We now have a macro name, an implicit parameter count of + * zero, and a numeric token to use as an expansion. Create + * and store an SMacro. + */ + if (smacro_defined(ctx, mname, 0, &smac, i == PP_ASSIGN)) + { + if (!smac) + error(ERR_WARNING, + "single-line macro `%s' defined both with and" + " without parameters", mname); + else + { + /* + * We're redefining, so we have to take over an + * existing SMacro structure. This means freeing + * what was already in it. + */ + nasm_free(smac->name); + free_tlist(smac->expansion); + } + } + else + { + smac = nasm_malloc(sizeof(SMacro)); + smac->next = *smhead; + *smhead = smac; + } + smac->name = nasm_strdup(mname); + smac->casesense = (i == PP_ASSIGN); + smac->nparam = 0; + smac->level = 0; + smac->expansion = macro_start; + smac->in_progress = FALSE; + free_tlist(origline); + return DIRECTIVE_FOUND; + + case PP_LINE: + /* + * Syntax is `%line nnn[+mmm] [filename]' + */ + tline = tline->next; + skip_white_(tline); + if (!tok_type_(tline, TOK_NUMBER)) + { + error(ERR_NONFATAL, "`%%line' expects line number"); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + intn = nasm_readnum(tline->text, &j); + k = yasm_intnum_get_int(intn); + yasm_intnum_destroy(intn); + m = 1; + tline = tline->next; + if (tok_is_(tline, "+")) + { + tline = tline->next; + if (!tok_type_(tline, TOK_NUMBER)) + { + error(ERR_NONFATAL, "`%%line' expects line increment"); + free_tlist(origline); + return DIRECTIVE_FOUND; + } + intn = nasm_readnum(tline->text, &j); + m = yasm_intnum_get_int(intn); + yasm_intnum_destroy(intn); + tline = tline->next; + } + skip_white_(tline); + nasm_src_set_linnum(k); + istk->lineinc = m; + if (tline) + { + nasm_free(nasm_src_set_fname(detoken(tline, FALSE))); + } + free_tlist(origline); + return DIRECTIVE_FOUND; + + default: + error(ERR_FATAL, + "preprocessor directive `%s' not yet implemented", + directives[i]); + break; + } + return DIRECTIVE_FOUND; +} + +/* + * Ensure that a macro parameter contains a condition code and + * nothing else. Return the condition code index if so, or -1 + * otherwise. + */ +static int +find_cc(Token * t) +{ + Token *tt; + int i, j, k, m; + + skip_white_(t); + if (t->type != TOK_ID) + return -1; + tt = t->next; + skip_white_(tt); + if (tt && (tt->type != TOK_OTHER || strcmp(tt->text, ","))) + return -1; + + i = -1; + j = elements(conditions); + while (j - i > 1) + { + k = (j + i) / 2; + m = nasm_stricmp(t->text, conditions[k]); + if (m == 0) + { + i = k; + j = -2; + break; + } + else if (m < 0) + { + j = k; + } + else + i = k; + } + if (j != -2) + return -1; + return i; +} + +/* + * Expand MMacro-local things: parameter references (%0, %n, %+n, + * %-n) and MMacro-local identifiers (%%foo). + */ +static Token * +expand_mmac_params(Token * tline) +{ + Token *t, *tt, **tail, *thead; + + tail = &thead; + thead = NULL; + + while (tline) + { + if (tline->type == TOK_PREPROC_ID && + (((tline->text[1] == '+' || tline->text[1] == '-') + && tline->text[2]) || tline->text[1] == '%' + || (tline->text[1] >= '0' && tline->text[1] <= '9'))) + { + char *text = NULL; + int type = 0, cc; /* type = 0 to placate optimisers */ + char tmpbuf[30]; + char *second_text = NULL; + int n, i; + MMacro *mac; + + t = tline; + tline = tline->next; + + second_text = strchr(t->text, ':'); + + mac = istk->mstk; + while (mac && !mac->name) /* avoid mistaking %reps for macros */ + mac = mac->next_active; + if (!mac) + error(ERR_NONFATAL, "`%s': not in a macro call", t->text); + else + { + if (second_text) + { + int end = atoi(second_text+1)-1; + int is_fst = 1; + int k; + n = atoi(t->text + 1)-1; + if (end < 0) + end += mac->nparam; + + for (k = n; k <= end; k++) + { + if (k >= mac->nparam) + tt = NULL; + else + { + if (mac->nparam > 1) + k = (k + mac->rotate) % mac->nparam; + tt = mac->params[k]; + } + if (tt) + { + if (!is_fst && mac->paramlen[k]) + { + *tail = new_Token(NULL, TOK_OTHER, ",", 0); + tail = &(*tail)->next; + } + if (mac->paramlen[k]) + is_fst = 0; + for (i = 0; i < mac->paramlen[k]; i++) + { + *tail = + new_Token(NULL, tt->type, tt->text, + 0); + tail = &(*tail)->next; + tt = tt->next; + } + } + text = NULL; /* we've done it here */ + } + } + else + { + switch (t->text[1]) + { + /* + * We have to make a substitution of one of the + * forms %1, %-1, %+1, %%foo, %0. + */ + case '0': + type = TOK_NUMBER; + sprintf(tmpbuf, "%ld", mac->nparam); + text = nasm_strdup(tmpbuf); + break; + case '%': + type = TOK_ID; + sprintf(tmpbuf, "..@%lu.", mac->unique); + text = nasm_strcat(tmpbuf, t->text + 2); + break; + case '-': + n = atoi(t->text + 2) - 1; + if (n >= mac->nparam) + tt = NULL; + else + { + if (mac->nparam > 1) + n = (n + mac->rotate) % mac->nparam; + tt = mac->params[n]; + } + cc = find_cc(tt); + if (cc == -1) + { + error(ERR_NONFATAL, + "macro parameter %d is not a condition code", + n + 1); + text = NULL; + } + else + { + type = TOK_ID; + if (inverse_ccs[cc] == -1) + { + error(ERR_NONFATAL, + "condition code `%s' is not invertible", + conditions[cc]); + text = NULL; + } + else + text = + nasm_strdup(conditions[inverse_ccs + [cc]]); + } + break; + case '+': + n = atoi(t->text + 2) - 1; + if (n >= mac->nparam) + tt = NULL; + else + { + if (mac->nparam > 1) + n = (n + mac->rotate) % mac->nparam; + tt = mac->params[n]; + } + cc = find_cc(tt); + if (cc == -1) + { + error(ERR_NONFATAL, + "macro parameter %d is not a condition code", + n + 1); + text = NULL; + } + else + { + type = TOK_ID; + text = nasm_strdup(conditions[cc]); + } + break; + default: + n = atoi(t->text + 1) - 1; + if (n >= mac->nparam) + tt = NULL; + else + { + if (mac->nparam > 1) + n = (n + mac->rotate) % mac->nparam; + tt = mac->params[n]; + } + if (tt) + { + for (i = 0; i < mac->paramlen[n]; i++) + { + *tail = + new_Token(NULL, tt->type, tt->text, + 0); + tail = &(*tail)->next; + tt = tt->next; + } + } + text = NULL; /* we've done it here */ + break; + } + } + } + + if (!text) + { + delete_Token(t); + } + else + { + *tail = t; + tail = &t->next; + t->type = type; + nasm_free(t->text); + t->text = text; + t->mac = NULL; + } + continue; + } + else + { + t = *tail = tline; + tline = tline->next; + t->mac = NULL; + tail = &t->next; + } + } + *tail = NULL; + t = thead; + for (; t && (tt = t->next) != NULL; t = t->next) + switch (t->type) + { + case TOK_WHITESPACE: + if (tt->type == TOK_WHITESPACE) + { + t->next = delete_Token(tt); + } + break; + case TOK_ID: + if (tt->type == TOK_ID || tt->type == TOK_NUMBER) + { + char *tmp = nasm_strcat(t->text, tt->text); + nasm_free(t->text); + t->text = tmp; + t->next = delete_Token(tt); + } + break; + case TOK_NUMBER: + if (tt->type == TOK_NUMBER) + { + char *tmp = nasm_strcat(t->text, tt->text); + nasm_free(t->text); + t->text = tmp; + t->next = delete_Token(tt); + } + break; + } + + return thead; +} + +/* + * Expand all single-line macro calls made in the given line. + * Return the expanded version of the line. The original is deemed + * to be destroyed in the process. (In reality we'll just move + * Tokens from input to output a lot of the time, rather than + * actually bothering to destroy and replicate.) + */ +static Token * +expand_smacro(Token * tline) +{ + Token *t, *tt, *mstart, **tail, *thead; + SMacro *head = NULL, *m; + Token **params; + int *paramsize; + int nparam, sparam, brackets, rescan; + Token *org_tline = tline; + Context *ctx; + char *mname; + + /* + * Trick: we should avoid changing the start token pointer since it can + * be contained in "next" field of other token. Because of this + * we allocate a copy of first token and work with it; at the end of + * routine we copy it back + */ + if (org_tline) + { + tline = + new_Token(org_tline->next, org_tline->type, org_tline->text, + 0); + tline->mac = org_tline->mac; + nasm_free(org_tline->text); + org_tline->text = NULL; + } + + again: + tail = &thead; + thead = NULL; + + while (tline) + { /* main token loop */ + if ((mname = tline->text)) + { + /* if this token is a local macro, look in local context */ + if (tline->type == TOK_ID || tline->type == TOK_PREPROC_ID) + ctx = get_ctx(mname, TRUE); + else + ctx = NULL; + if (!ctx) + head = smacros[hash(mname)]; + else + head = ctx->localmac; + /* + * We've hit an identifier. As in is_mmacro below, we first + * check whether the identifier is a single-line macro at + * all, then think about checking for parameters if + * necessary. + */ + for (m = head; m; m = m->next) + if (!mstrcmp(m->name, mname, m->casesense)) + break; + if (m) + { + mstart = tline; + params = NULL; + paramsize = NULL; + if (m->nparam == 0) + { + /* + * Simple case: the macro is parameterless. Discard the + * one token that the macro call took, and push the + * expansion back on the to-do stack. + */ + if (!m->expansion) + { + if (!strcmp("__FILE__", m->name)) + { + long num = 0; + nasm_src_get(&num, &(tline->text)); + nasm_quote(&(tline->text)); + tline->type = TOK_STRING; + continue; + } + if (!strcmp("__LINE__", m->name)) + { + nasm_free(tline->text); + make_tok_num(tline, yasm_intnum_create_int(nasm_src_get_linnum())); + continue; + } + tline = delete_Token(tline); + continue; + } + } + else + { + /* + * Complicated case: at least one macro with this name + * exists and takes parameters. We must find the + * parameters in the call, count them, find the SMacro + * that corresponds to that form of the macro call, and + * substitute for the parameters when we expand. What a + * pain. + */ + /*tline = tline->next; + skip_white_(tline);*/ + do { + t = tline->next; + while (tok_type_(t, TOK_SMAC_END)) + { + t->mac->in_progress = FALSE; + t->text = NULL; + t = tline->next = delete_Token(t); + } + tline = t; + } while (tok_type_(tline, TOK_WHITESPACE)); + if (!tok_is_(tline, "(")) + { + /* + * This macro wasn't called with parameters: ignore + * the call. (Behaviour borrowed from gnu cpp.) + */ + tline = mstart; + m = NULL; + } + else + { + int paren = 0; + int white = 0; + brackets = 0; + nparam = 0; + sparam = PARAM_DELTA; + params = nasm_malloc(sparam * sizeof(Token *)); + params[0] = tline->next; + paramsize = nasm_malloc(sparam * sizeof(int)); + paramsize[0] = 0; + while (TRUE) + { /* parameter loop */ + /* + * For some unusual expansions + * which concatenates function call + */ + t = tline->next; + while (tok_type_(t, TOK_SMAC_END)) + { + t->mac->in_progress = FALSE; + t->text = NULL; + t = tline->next = delete_Token(t); + } + tline = t; + + if (!tline) + { + error(ERR_NONFATAL, + "macro call expects terminating `)'"); + break; + } + if (tline->type == TOK_WHITESPACE + && brackets <= 0) + { + if (paramsize[nparam]) + white++; + else + params[nparam] = tline->next; + continue; /* parameter loop */ + } + if (tline->type == TOK_OTHER + && tline->text[1] == 0) + { + char ch = tline->text[0]; + if (ch == ',' && !paren && brackets <= 0) + { + if (++nparam >= sparam) + { + sparam += PARAM_DELTA; + params = nasm_realloc(params, + sparam * sizeof(Token *)); + paramsize = nasm_realloc(paramsize, + sparam * sizeof(int)); + } + params[nparam] = tline->next; + paramsize[nparam] = 0; + white = 0; + continue; /* parameter loop */ + } + if (ch == '{' && + (brackets > 0 || (brackets == 0 && + !paramsize[nparam]))) + { + if (!(brackets++)) + { + params[nparam] = tline->next; + continue; /* parameter loop */ + } + } + if (ch == '}' && brackets > 0) + if (--brackets == 0) + { + brackets = -1; + continue; /* parameter loop */ + } + if (ch == '(' && !brackets) + paren++; + if (ch == ')' && brackets <= 0) + if (--paren < 0) + break; + } + if (brackets < 0) + { + brackets = 0; + error(ERR_NONFATAL, "braces do not " + "enclose all of macro parameter"); + } + paramsize[nparam] += white + 1; + white = 0; + } /* parameter loop */ + nparam++; + while (m && (m->nparam != nparam || + mstrcmp(m->name, mname, + m->casesense))) + m = m->next; + if (!m) + error(ERR_WARNING | ERR_WARN_MNP, + "macro `%s' exists, " + "but not taking %d parameters", + mstart->text, nparam); + } + } + if (m && m->in_progress) + m = NULL; + if (!m) /* in progess or didn't find '(' or wrong nparam */ + { + /* + * Design question: should we handle !tline, which + * indicates missing ')' here, or expand those + * macros anyway, which requires the (t) test a few + * lines down? + */ + nasm_free(params); + nasm_free(paramsize); + tline = mstart; + } + else + { + /* + * Expand the macro: we are placed on the last token of the + * call, so that we can easily split the call from the + * following tokens. We also start by pushing an SMAC_END + * token for the cycle removal. + */ + t = tline; + if (t) + { + tline = t->next; + t->next = NULL; + } + tt = new_Token(tline, TOK_SMAC_END, NULL, 0); + tt->mac = m; + m->in_progress = TRUE; + tline = tt; + for (t = m->expansion; t; t = t->next) + { + if (t->type >= TOK_SMAC_PARAM) + { + Token *pcopy = tline, **ptail = &pcopy; + Token *ttt, *pt; + int i; + + ttt = params[t->type - TOK_SMAC_PARAM]; + for (i = paramsize[t->type - TOK_SMAC_PARAM]; + --i >= 0;) + { + pt = *ptail = + new_Token(tline, ttt->type, ttt->text, + 0); + ptail = &pt->next; + ttt = ttt->next; + } + tline = pcopy; + } + else + { + tt = new_Token(tline, t->type, t->text, 0); + tline = tt; + } + } + + /* + * Having done that, get rid of the macro call, and clean + * up the parameters. + */ + nasm_free(params); + nasm_free(paramsize); + free_tlist(mstart); + continue; /* main token loop */ + } + } + } + + if (tline->type == TOK_SMAC_END) + { + tline->mac->in_progress = FALSE; + tline = delete_Token(tline); + } + else + { + t = *tail = tline; + tline = tline->next; + t->mac = NULL; + t->next = NULL; + tail = &t->next; + } + } + + /* + * Now scan the entire line and look for successive TOK_IDs that resulted + * after expansion (they can't be produced by tokenise()). The successive + * TOK_IDs should be concatenated. + * Also we look for %+ tokens and concatenate the tokens before and after + * them (without white spaces in between). + */ + t = thead; + rescan = 0; + while (t) + { + while (t && t->type != TOK_ID && t->type != TOK_PREPROC_ID) + t = t->next; + if (!t || !t->next) + break; + if (t->next->type == TOK_ID || + t->next->type == TOK_PREPROC_ID || + t->next->type == TOK_NUMBER) + { + char *p = nasm_strcat(t->text, t->next->text); + nasm_free(t->text); + t->next = delete_Token(t->next); + t->text = p; + rescan = 1; + } + else if (t->next->type == TOK_WHITESPACE && t->next->next && + t->next->next->type == TOK_PREPROC_ID && + strcmp(t->next->next->text, "%+") == 0) + { + /* free the next whitespace, the %+ token and next whitespace */ + int i; + for (i = 1; i <= 3; i++) + { + if (!t->next || (i != 2 && t->next->type != TOK_WHITESPACE)) + break; + t->next = delete_Token(t->next); + } /* endfor */ + } + else + t = t->next; + } + /* If we concatenaded something, re-scan the line for macros */ + if (rescan) + { + tline = thead; + goto again; + } + + if (org_tline) + { + if (thead) + { + *org_tline = *thead; + /* since we just gave text to org_line, don't free it */ + thead->text = NULL; + delete_Token(thead); + } + else + { + /* the expression expanded to empty line; + we can't return NULL for some reasons + we just set the line to a single WHITESPACE token. */ + memset(org_tline, 0, sizeof(*org_tline)); + org_tline->text = NULL; + org_tline->type = TOK_WHITESPACE; + } + thead = org_tline; + } + + return thead; +} + +/* + * Similar to expand_smacro but used exclusively with macro identifiers + * right before they are fetched in. The reason is that there can be + * identifiers consisting of several subparts. We consider that if there + * are more than one element forming the name, user wants a expansion, + * otherwise it will be left as-is. Example: + * + * %define %$abc cde + * + * the identifier %$abc will be left as-is so that the handler for %define + * will suck it and define the corresponding value. Other case: + * + * %define _%$abc cde + * + * In this case user wants name to be expanded *before* %define starts + * working, so we'll expand %$abc into something (if it has a value; + * otherwise it will be left as-is) then concatenate all successive + * PP_IDs into one. + */ +static Token * +expand_id(Token * tline) +{ + Token *cur, *oldnext = NULL; + + if (!tline || !tline->next) + return tline; + + cur = tline; + while (cur->next && + (cur->next->type == TOK_ID || + cur->next->type == TOK_PREPROC_ID || cur->next->type == TOK_NUMBER)) + cur = cur->next; + + /* If identifier consists of just one token, don't expand */ + if (cur == tline) + return tline; + + if (cur) + { + oldnext = cur->next; /* Detach the tail past identifier */ + cur->next = NULL; /* so that expand_smacro stops here */ + } + + tline = expand_smacro(tline); + + if (cur) + { + /* expand_smacro possibly changhed tline; re-scan for EOL */ + cur = tline; + while (cur && cur->next) + cur = cur->next; + if (cur) + cur->next = oldnext; + } + + return tline; +} + +/* + * Determine whether the given line constitutes a multi-line macro + * call, and return the MMacro structure called if so. Doesn't have + * to check for an initial label - that's taken care of in + * expand_mmacro - but must check numbers of parameters. Guaranteed + * to be called with tline->type == TOK_ID, so the putative macro + * name is easy to find. + */ +static MMacro * +is_mmacro(Token * tline, Token *** params_array) +{ + MMacro *head, *m; + Token **params; + int nparam; + + head = mmacros[hash(tline->text)]; + + /* + * Efficiency: first we see if any macro exists with the given + * name. If not, we can return NULL immediately. _Then_ we + * count the parameters, and then we look further along the + * list if necessary to find the proper MMacro. + */ + for (m = head; m; m = m->next) + if (!mstrcmp(m->name, tline->text, m->casesense)) + break; + if (!m) + return NULL; + + /* + * OK, we have a potential macro. Count and demarcate the + * parameters. + */ + count_mmac_params(tline->next, &nparam, ¶ms); + + /* + * So we know how many parameters we've got. Find the MMacro + * structure that handles this number. + */ + while (m) + { + if (m->nparam_min <= nparam && (m->plus || nparam <= m->nparam_max)) + { + /* + * This one is right. Just check if cycle removal + * prohibits us using it before we actually celebrate... + */ + if (m->in_progress) + { +#if 0 + error(ERR_NONFATAL, + "self-reference in multi-line macro `%s'", m->name); +#endif + nasm_free(params); + return NULL; + } + /* + * It's right, and we can use it. Add its default + * parameters to the end of our list if necessary. + */ + if (m->defaults && nparam < m->nparam_min + m->ndefs) + { + params = + nasm_realloc(params, + ((m->nparam_min + m->ndefs + 1) * sizeof(*params))); + while (nparam < m->nparam_min + m->ndefs) + { + params[nparam] = m->defaults[nparam - m->nparam_min]; + nparam++; + } + } + /* + * If we've gone over the maximum parameter count (and + * we're in Plus mode), ignore parameters beyond + * nparam_max. + */ + if (m->plus && nparam > m->nparam_max) + nparam = m->nparam_max; + /* + * Then terminate the parameter list, and leave. + */ + if (!params) + { /* need this special case */ + params = nasm_malloc(sizeof(*params)); + nparam = 0; + } + params[nparam] = NULL; + *params_array = params; + return m; + } + /* + * This one wasn't right: look for the next one with the + * same name. + */ + for (m = m->next; m; m = m->next) + if (!mstrcmp(m->name, tline->text, m->casesense)) + break; + } + + /* + * After all that, we didn't find one with the right number of + * parameters. Issue a warning, and fail to expand the macro. + */ + error(ERR_WARNING | ERR_WARN_MNP, + "macro `%s' exists, but not taking %d parameters", + tline->text, nparam); + nasm_free(params); + return NULL; +} + +/* + * Expand the multi-line macro call made by the given line, if + * there is one to be expanded. If there is, push the expansion on + * istk->expansion and return 1. Otherwise return 0. + */ +static int +expand_mmacro(Token * tline) +{ + Token *startline = tline; + Token *label = NULL; + int dont_prepend = 0; + Token **params, *t, *tt; + MMacro *m; + Line *l, *ll; + int i, nparam; + long *paramlen; + + t = tline; + skip_white_(t); +/* if (!tok_type_(t, TOK_ID)) Lino 02/25/02 */ + if (!tok_type_(t, TOK_ID) && !tok_type_(t, TOK_PREPROC_ID)) + return 0; + m = is_mmacro(t, ¶ms); + if (!m) + { + Token *last; + /* + * We have an id which isn't a macro call. We'll assume + * it might be a label; we'll also check to see if a + * colon follows it. Then, if there's another id after + * that lot, we'll check it again for macro-hood. + */ + label = last = t; + t = t->next; + if (tok_type_(t, TOK_WHITESPACE)) + last = t, t = t->next; + if (tok_is_(t, ":")) + { + dont_prepend = 1; + last = t, t = t->next; + if (tok_type_(t, TOK_WHITESPACE)) + last = t, t = t->next; + } + if (!tok_type_(t, TOK_ID) || (m = is_mmacro(t, ¶ms)) == NULL) + return 0; + last->next = NULL; + tline = t; + } + + /* + * Fix up the parameters: this involves stripping leading and + * trailing whitespace, then stripping braces if they are + * present. + */ + for (nparam = 0; params[nparam]; nparam++) + ; + paramlen = nparam ? nasm_malloc(nparam * sizeof(*paramlen)) : NULL; + + for (i = 0; params[i]; i++) + { + int brace = FALSE; + int comma = (!m->plus || i < nparam - 1); + + t = params[i]; + skip_white_(t); + if (tok_is_(t, "{")) + t = t->next, brace = TRUE, comma = FALSE; + params[i] = t; + paramlen[i] = 0; + while (t) + { + if (comma && t->type == TOK_OTHER && !strcmp(t->text, ",")) + break; /* ... because we have hit a comma */ + if (comma && t->type == TOK_WHITESPACE && tok_is_(t->next, ",")) + break; /* ... or a space then a comma */ + if (brace && t->type == TOK_OTHER && !strcmp(t->text, "}")) + break; /* ... or a brace */ + t = t->next; + paramlen[i]++; + } + } + + /* + * OK, we have a MMacro structure together with a set of + * parameters. We must now go through the expansion and push + * copies of each Line on to istk->expansion. Substitution of + * parameter tokens and macro-local tokens doesn't get done + * until the single-line macro substitution process; this is + * because delaying them allows us to change the semantics + * later through %rotate. + * + * First, push an end marker on to istk->expansion, mark this + * macro as in progress, and set up its invocation-specific + * variables. + */ + ll = nasm_malloc(sizeof(Line)); + ll->next = istk->expansion; + ll->finishes = m; + ll->first = NULL; + istk->expansion = ll; + + m->in_progress = TRUE; + m->params = params; + m->iline = tline; + m->nparam = nparam; + m->rotate = 0; + m->paramlen = paramlen; + m->unique = unique++; + m->lineno = 0; + + m->next_active = istk->mstk; + istk->mstk = m; + + for (l = m->expansion; l; l = l->next) + { + Token **tail; + + ll = nasm_malloc(sizeof(Line)); + ll->finishes = NULL; + ll->next = istk->expansion; + istk->expansion = ll; + tail = &ll->first; + + for (t = l->first; t; t = t->next) + { + Token *x = t; + if (t->type == TOK_PREPROC_ID && + t->text[1] == '0' && t->text[2] == '0') + { + dont_prepend = -1; + x = label; + if (!x) + continue; + } + tt = *tail = new_Token(NULL, x->type, x->text, 0); + tail = &tt->next; + } + *tail = NULL; + } + + /* + * If we had a label, push it on as the first line of + * the macro expansion. + */ + if (label) + { + if (dont_prepend < 0) + free_tlist(startline); + else + { + ll = nasm_malloc(sizeof(Line)); + ll->finishes = NULL; + ll->next = istk->expansion; + istk->expansion = ll; + ll->first = startline; + if (!dont_prepend) + { + while (label->next) + label = label->next; + label->next = tt = new_Token(NULL, TOK_OTHER, ":", 0); + } + } + } + + list->uplevel(m->nolist ? LIST_MACRO_NOLIST : LIST_MACRO); + + return 1; +} + +/* + * Since preprocessor always operates only on the line that didn't + * arrive yet, we should always use ERR_OFFBY1. Also since user + * won't want to see same error twice (preprocessing is done once + * per pass) we will want to show errors only during pass one. + */ +static void +error(int severity, const char *fmt, ...) +{ + va_list arg; + char buff[1024]; + + /* If we're in a dead branch of IF or something like it, ignore the error */ + if (istk && istk->conds && !emitting(istk->conds->state)) + return; + + va_start(arg, fmt); +#ifdef HAVE_VSNPRINTF + vsnprintf(buff, sizeof(buff), fmt, arg); +#else + vsprintf(buff, fmt, arg); +#endif + va_end(arg); + + if (istk && istk->mstk && istk->mstk->name) + _error(severity | ERR_PASS1, "(%s:%d) %s", istk->mstk->name, + istk->mstk->lineno, buff); + else + _error(severity | ERR_PASS1, "%s", buff); +} + +static void +pp_reset(FILE *f, const char *file, int apass, efunc errfunc, evalfunc eval, + ListGen * listgen) +{ + int h; + + first_fp = f; + _error = errfunc; + cstk = NULL; + istk = nasm_malloc(sizeof(Include)); + istk->next = NULL; + istk->conds = NULL; + istk->expansion = NULL; + istk->mstk = NULL; + istk->fp = f; + istk->fname = NULL; + nasm_free(nasm_src_set_fname(nasm_strdup(file))); + nasm_src_set_linnum(0); + istk->lineinc = 1; + defining = NULL; + nested_mac_count = 0; + nested_rep_count = 0; + for (h = 0; h < NHASH; h++) + { + mmacros[h] = NULL; + smacros[h] = NULL; + } + unique = 0; + if (tasm_compatible_mode) { + pp_extra_stdmac(tasm_compat_macros); + } + list = listgen; + evaluate = eval; + pass = apass; + first_line = 1; +} + +/* + * Nasty hack: here we push the contents of `predef' on + * to the top-level expansion stack, since this is the + * most convenient way to implement the pre-include and + * pre-define features. + */ +static void +poke_predef(Line *predef_lines) +{ + Line *pd, *l; + Token *head, **tail, *t; + + for (pd = predef_lines; pd; pd = pd->next) + { + head = NULL; + tail = &head; + for (t = pd->first; t; t = t->next) + { + *tail = new_Token(NULL, t->type, t->text, 0); + tail = &(*tail)->next; + } + l = nasm_malloc(sizeof(Line)); + l->next = istk->expansion; + l->first = head; + l->finishes = FALSE; + istk->expansion = l; + } +} + +static char * +pp_getline(void) +{ + char *line; + Token *tline; + + while (1) + { + /* + * Fetch a tokenised line, either from the macro-expansion + * buffer or from the input file. + */ + tline = NULL; + + if (first_line) + { + /* Reverse order */ + poke_predef(predef); + poke_predef(stddef); + poke_predef(builtindef); + first_line = 0; + } + + if (!istk) + return NULL; + while (istk->expansion && istk->expansion->finishes) + { + Line *l = istk->expansion; + if (!l->finishes->name && l->finishes->in_progress > 1) + { + Line *ll; + + /* + * This is a macro-end marker for a macro with no + * name, which means it's not really a macro at all + * but a %rep block, and the `in_progress' field is + * more than 1, meaning that we still need to + * repeat. (1 means the natural last repetition; 0 + * means termination by %exitrep.) We have + * therefore expanded up to the %endrep, and must + * push the whole block on to the expansion buffer + * again. We don't bother to remove the macro-end + * marker: we'd only have to generate another one + * if we did. + */ + l->finishes->in_progress--; + for (l = l->finishes->expansion; l; l = l->next) + { + Token *t, *tt, **tail; + + ll = nasm_malloc(sizeof(Line)); + ll->next = istk->expansion; + ll->finishes = NULL; + ll->first = NULL; + tail = &ll->first; + + for (t = l->first; t; t = t->next) + { + if (t->text || t->type == TOK_WHITESPACE) + { + tt = *tail = new_Token(NULL, t->type, t->text, 0); + tail = &tt->next; + } + } + + istk->expansion = ll; + } + } + else + { + /* + * Check whether a `%rep' was started and not ended + * within this macro expansion. This can happen and + * should be detected. It's a fatal error because + * I'm too confused to work out how to recover + * sensibly from it. + */ + if (defining) + { + if (defining->name) + error(ERR_PANIC, "defining with name in expansion"); + else if (istk->mstk->name) + error(ERR_FATAL, "`%%rep' without `%%endrep' within" + " expansion of macro `%s'", istk->mstk->name); + } + + /* + * FIXME: investigate the relationship at this point between + * istk->mstk and l->finishes + */ + { + MMacro *m = istk->mstk; + istk->mstk = m->next_active; + if (m->name) + { + /* + * This was a real macro call, not a %rep, and + * therefore the parameter information needs to + * be freed. + */ + nasm_free(m->params); + free_tlist(m->iline); + nasm_free(m->paramlen); + l->finishes->in_progress = FALSE; + } + else + free_mmacro(m); + } + istk->expansion = l->next; + nasm_free(l); + list->downlevel(LIST_MACRO); + } + } + while (1) + { /* until we get a line we can use */ + + if (istk->expansion) + { /* from a macro expansion */ + char *p; + Line *l = istk->expansion; + if (istk->mstk) + istk->mstk->lineno++; + tline = l->first; + istk->expansion = l->next; + nasm_free(l); + p = detoken(tline, FALSE); + list->line(LIST_MACRO, p); + nasm_free(p); + break; + } + line = read_line(); + if (line) + { /* from the current input file */ + line = prepreproc(line); + tline = tokenise(line); + nasm_free(line); + break; + } + /* + * The current file has ended; work down the istk + */ + { + Include *i = istk; + if (i->fp != first_fp) + fclose(i->fp); + if (i->conds) + error(ERR_FATAL, "expected `%%endif' before end of file"); + /* only set line and file name if there's a next node */ + if (i->next) + { + nasm_src_set_linnum(i->lineno); + nasm_free(nasm_src_set_fname(nasm_strdup(i->fname))); + } + istk = i->next; + list->downlevel(LIST_INCLUDE); + nasm_free(i); + if (!istk) + return NULL; + if (istk->expansion && istk->expansion->finishes) + break; + } + } + + /* + * We must expand MMacro parameters and MMacro-local labels + * _before_ we plunge into directive processing, to cope + * with things like `%define something %1' such as STRUC + * uses. Unless we're _defining_ a MMacro, in which case + * those tokens should be left alone to go into the + * definition; and unless we're in a non-emitting + * condition, in which case we don't want to meddle with + * anything. + */ + if (!defining && !(istk->conds && !emitting(istk->conds->state))) + tline = expand_mmac_params(tline); + + /* + * Check the line to see if it's a preprocessor directive. + */ + if (do_directive(tline) == DIRECTIVE_FOUND) + { + continue; + } + else if (defining) + { + /* + * We're defining a multi-line macro. We emit nothing + * at all, and just + * shove the tokenised line on to the macro definition. + */ + Line *l = nasm_malloc(sizeof(Line)); + l->next = defining->expansion; + l->first = tline; + l->finishes = FALSE; + defining->expansion = l; + continue; + } + else if (istk->conds && !emitting(istk->conds->state)) + { + /* + * We're in a non-emitting branch of a condition block. + * Emit nothing at all, not even a blank line: when we + * emerge from the condition we'll give a line-number + * directive so we keep our place correctly. + */ + free_tlist(tline); + continue; + } + else if (istk->mstk && !istk->mstk->in_progress) + { + /* + * We're in a %rep block which has been terminated, so + * we're walking through to the %endrep without + * emitting anything. Emit nothing at all, not even a + * blank line: when we emerge from the %rep block we'll + * give a line-number directive so we keep our place + * correctly. + */ + free_tlist(tline); + continue; + } + else + { + tline = expand_smacro(tline); + if (!expand_mmacro(tline)) + { + /* + * De-tokenise the line again, and emit it. + */ + if (tasm_compatible_mode) + tline = tasm_join_tokens(tline); + + line = detoken(tline, TRUE); + free_tlist(tline); + break; + } + else + { + continue; /* expand_mmacro calls free_tlist */ + } + } + } + + return line; +} + +static void +pp_cleanup(int pass_) +{ + int h; + + if (pass_ == 1) + { + if (defining) + { + error(ERR_NONFATAL, "end of file while still defining macro `%s'", + defining->name); + free_mmacro(defining); + } + return; + } + while (cstk) + ctx_pop(); + for (h = 0; h < NHASH; h++) + { + while (mmacros[h]) + { + MMacro *m = mmacros[h]; + mmacros[h] = mmacros[h]->next; + free_mmacro(m); + } + while (smacros[h]) + { + SMacro *s = smacros[h]; + smacros[h] = smacros[h]->next; + nasm_free(s->name); + free_tlist(s->expansion); + nasm_free(s); + } + } + while (istk) + { + Include *i = istk; + istk = istk->next; + if (i->fp != first_fp) + fclose(i->fp); + nasm_free(i->fname); + nasm_free(i); + } + while (cstk) + ctx_pop(); + if (pass_ == 0) + { + free_llist(builtindef); + free_llist(stddef); + free_llist(predef); + builtindef = NULL; + stddef = NULL; + predef = NULL; + freeTokens = NULL; + delete_Blocks(); + blocks.next = NULL; + blocks.chunk = NULL; + } +} + +void +pp_pre_include(const char *fname) +{ + Token *inc, *space, *name; + Line *l; + + name = new_Token(NULL, TOK_INTERNAL_STRING, fname, 0); + space = new_Token(name, TOK_WHITESPACE, NULL, 0); + inc = new_Token(space, TOK_PREPROC_ID, "%include", 0); + + l = nasm_malloc(sizeof(Line)); + l->next = predef; + l->first = inc; + l->finishes = FALSE; + predef = l; +} + +void +pp_pre_define(char *definition) +{ + Token *def, *space; + Line *l; + char *equals; + + equals = strchr(definition, '='); + space = new_Token(NULL, TOK_WHITESPACE, NULL, 0); + def = new_Token(space, TOK_PREPROC_ID, "%define", 0); + if (equals) + *equals = ' '; + space->next = tokenise(definition); + if (equals) + *equals = '='; + + l = nasm_malloc(sizeof(Line)); + l->next = predef; + l->first = def; + l->finishes = FALSE; + predef = l; +} + +void +pp_pre_undefine(char *definition) +{ + Token *def, *space; + Line *l; + + space = new_Token(NULL, TOK_WHITESPACE, NULL, 0); + def = new_Token(space, TOK_PREPROC_ID, "%undef", 0); + space->next = tokenise(definition); + + l = nasm_malloc(sizeof(Line)); + l->next = predef; + l->first = def; + l->finishes = FALSE; + predef = l; +} + +void +pp_builtin_define(char *definition) +{ + Token *def, *space; + Line *l; + char *equals; + + equals = strchr(definition, '='); + space = new_Token(NULL, TOK_WHITESPACE, NULL, 0); + def = new_Token(space, TOK_PREPROC_ID, "%define", 0); + if (equals) + *equals = ' '; + space->next = tokenise(definition); + if (equals) + *equals = '='; + + l = nasm_malloc(sizeof(Line)); + l->next = builtindef; + l->first = def; + l->finishes = FALSE; + builtindef = l; +} + +void +pp_extra_stdmac(const char **macros) +{ + const char **lp; + + for (lp=macros; *lp; lp++) + { + char *macro; + Token *t; + Line *l; + + macro = nasm_strdup(*lp); + t = tokenise(macro); + nasm_free(macro); + + l = nasm_malloc(sizeof(Line)); + l->next = stddef; + l->first = t; + l->finishes = FALSE; + stddef = l; + } +} + +static void +make_tok_num(Token * tok, yasm_intnum *val) +{ + tok->text = yasm_intnum_get_str(val); + tok->type = TOK_NUMBER; + yasm_intnum_destroy(val); +} + +Preproc nasmpp = { + pp_reset, + pp_getline, + pp_cleanup +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-pp.h b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-pp.h new file mode 100644 index 0000000000..a1990206f2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-pp.h @@ -0,0 +1,22 @@ +/* preproc.h header file for preproc.c + * + * The Netwide Assembler is copyright (C) 1996 Simon Tatham and + * Julian Hall. All rights reserved. The software is + * redistributable under the licence given in the file "Licence" + * distributed in the NASM archive. + */ + +#ifndef YASM_NASM_PREPROC_H +#define YASM_NASM_PREPROC_H + +void pp_pre_include (const char *); +void pp_pre_define (char *); +void pp_pre_undefine (char *); +void pp_builtin_define (char *); +void pp_extra_stdmac (const char **); + +extern Preproc nasmpp; + +void nasm_preproc_add_dep(char *); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-preproc.c b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-preproc.c new file mode 100644 index 0000000000..0b364b1f06 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm-preproc.c @@ -0,0 +1,342 @@ +/* + * Imported NASM preprocessor - glue code + * + * Copyright (C) 2002-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + +#include "nasm.h" +#include "nasmlib.h" +#include "nasm-pp.h" +#include "nasm-eval.h" + +typedef struct yasm_preproc_nasm { + yasm_preproc_base preproc; /* Base structure */ + + FILE *in; + char *line; + char *file_name; + long prior_linnum; + int lineinc; +} yasm_preproc_nasm; +yasm_symtab *nasm_symtab; +static yasm_linemap *cur_lm; +static yasm_errwarns *cur_errwarns; +int tasm_compatible_mode = 0; +int tasm_locals; +const char *tasm_segment; + +#include "nasm-version.c" + +typedef struct preproc_dep { + STAILQ_ENTRY(preproc_dep) link; + char *name; +} preproc_dep; + +static STAILQ_HEAD(preproc_dep_head, preproc_dep) *preproc_deps; +static int done_dep_preproc; + +yasm_preproc_module yasm_nasm_LTX_preproc; + +static void +nil_listgen_init(char *p, efunc e) +{ +} + +static void +nil_listgen_cleanup(void) +{ +} + +static void +nil_listgen_output(long v, const void *d, unsigned long v2) +{ +} + +static void +nil_listgen_line(int v, char *p) +{ +} + +static void +nil_listgen_uplevel(int v) +{ +} + +static void +nil_listgen_downlevel(int v) +{ +} + +static ListGen nil_list = { + nil_listgen_init, + nil_listgen_cleanup, + nil_listgen_output, + nil_listgen_line, + nil_listgen_uplevel, + nil_listgen_downlevel +}; + + +static void +nasm_efunc(int severity, const char *fmt, ...) +{ + va_list va; + + va_start(va, fmt); + switch (severity & ERR_MASK) { + case ERR_WARNING: + yasm_warn_set_va(YASM_WARN_PREPROC, fmt, va); + break; + case ERR_NONFATAL: + yasm_error_set_va(YASM_ERROR_GENERAL, fmt, va); + break; + case ERR_FATAL: + yasm_fatal(fmt, va); + /*@notreached@*/ + break; + case ERR_PANIC: + yasm_internal_error(fmt); /* FIXME */ + break; + case ERR_DEBUG: + break; + } + va_end(va); + yasm_errwarn_propagate(cur_errwarns, + yasm_linemap_poke(cur_lm, nasm_src_get_fname(), + (unsigned long)nasm_src_get_linnum())); +} + +static yasm_preproc * +nasm_preproc_create(const char *in_filename, yasm_symtab *symtab, + yasm_linemap *lm, yasm_errwarns *errwarns) +{ + FILE *f; + yasm_preproc_nasm *preproc_nasm = yasm_xmalloc(sizeof(yasm_preproc_nasm)); + + preproc_nasm->preproc.module = &yasm_nasm_LTX_preproc; + + if (strcmp(in_filename, "-") != 0) { + f = fopen(in_filename, "r"); + if (!f) + yasm__fatal( N_("Could not open input file") ); + } + else + f = stdin; + + preproc_nasm->in = f; + nasm_symtab = symtab; + cur_lm = lm; + cur_errwarns = errwarns; + preproc_deps = NULL; + done_dep_preproc = 0; + preproc_nasm->line = NULL; + preproc_nasm->file_name = NULL; + preproc_nasm->prior_linnum = 0; + preproc_nasm->lineinc = 0; + nasmpp.reset(f, in_filename, 2, nasm_efunc, nasm_evaluate, &nil_list); + + pp_extra_stdmac(nasm_version_mac); + + return (yasm_preproc *)preproc_nasm; +} + +static void +nasm_preproc_destroy(yasm_preproc *preproc) +{ + yasm_preproc_nasm *preproc_nasm = (yasm_preproc_nasm *)preproc; + nasmpp.cleanup(0); + if (preproc_nasm->line) + yasm_xfree(preproc_nasm->line); + if (preproc_nasm->file_name) + yasm_xfree(preproc_nasm->file_name); + yasm_xfree(preproc); + if (preproc_deps) + yasm_xfree(preproc_deps); +} + +static char * +nasm_preproc_get_line(yasm_preproc *preproc) +{ + yasm_preproc_nasm *preproc_nasm = (yasm_preproc_nasm *)preproc; + long linnum; + int altline; + char *line; + + if (preproc_nasm->line) { + char *retval = preproc_nasm->line; + preproc_nasm->line = NULL; + return retval; + } + + line = nasmpp.getline(); + if (!line) + { + nasmpp.cleanup(1); + return NULL; /* EOF */ + } + + linnum = preproc_nasm->prior_linnum += preproc_nasm->lineinc; + altline = nasm_src_get(&linnum, &preproc_nasm->file_name); + if (altline != 0) { + preproc_nasm->lineinc = + (altline != -1 || preproc_nasm->lineinc != 1); + preproc_nasm->line = line; + line = yasm_xmalloc(40+strlen(preproc_nasm->file_name)); + sprintf(line, "%%line %ld+%d %s", linnum, + preproc_nasm->lineinc, preproc_nasm->file_name); + preproc_nasm->prior_linnum = linnum; + } + + return line; +} + +void +nasm_preproc_add_dep(char *name) +{ + preproc_dep *dep; + + /* If not processing dependencies, simply return */ + if (!preproc_deps) + return; + + /* Save in preproc_deps */ + dep = yasm_xmalloc(sizeof(preproc_dep)); + dep->name = yasm__xstrdup(name); + STAILQ_INSERT_TAIL(preproc_deps, dep, link); +} + +static size_t +nasm_preproc_get_included_file(yasm_preproc *preproc, /*@out@*/ char *buf, + size_t max_size) +{ + if (!preproc_deps) { + preproc_deps = yasm_xmalloc(sizeof(struct preproc_dep_head)); + STAILQ_INIT(preproc_deps); + } + + for (;;) { + char *line; + + /* Pull first dep out of preproc_deps and return it if there is one */ + if (!STAILQ_EMPTY(preproc_deps)) { + char *name; + preproc_dep *dep = STAILQ_FIRST(preproc_deps); + STAILQ_REMOVE_HEAD(preproc_deps, link); + name = dep->name; + yasm_xfree(dep); + strncpy(buf, name, max_size); + buf[max_size-1] = '\0'; + yasm_xfree(name); + return strlen(buf); + } + + /* No more preprocessing to do */ + if (done_dep_preproc) { + return 0; + } + + /* Preprocess some more, throwing away the result */ + line = nasmpp.getline(); + if (line) + yasm_xfree(line); + else + done_dep_preproc = 1; + } +} + +static void +nasm_preproc_add_include_file(yasm_preproc *preproc, const char *filename) +{ + pp_pre_include(filename); +} + +static void +nasm_preproc_predefine_macro(yasm_preproc *preproc, const char *macronameval) +{ + char *mnv = yasm__xstrdup(macronameval); + pp_pre_define(mnv); + yasm_xfree(mnv); +} + +static void +nasm_preproc_undefine_macro(yasm_preproc *preproc, const char *macroname) +{ + char *mn = yasm__xstrdup(macroname); + pp_pre_undefine(mn); + yasm_xfree(mn); +} + +static void +nasm_preproc_define_builtin(yasm_preproc *preproc, const char *macronameval) +{ + char *mnv = yasm__xstrdup(macronameval); + pp_builtin_define(mnv); + yasm_xfree(mnv); +} + +static void +nasm_preproc_add_standard(yasm_preproc *preproc, const char **macros) +{ + pp_extra_stdmac(macros); +} + +/* Define preproc structure -- see preproc.h for details */ +yasm_preproc_module yasm_nasm_LTX_preproc = { + "Real NASM Preprocessor", + "nasm", + nasm_preproc_create, + nasm_preproc_destroy, + nasm_preproc_get_line, + nasm_preproc_get_included_file, + nasm_preproc_add_include_file, + nasm_preproc_predefine_macro, + nasm_preproc_undefine_macro, + nasm_preproc_define_builtin, + nasm_preproc_add_standard +}; + +static yasm_preproc * +tasm_preproc_create(const char *in_filename, yasm_symtab *symtab, + yasm_linemap *lm, yasm_errwarns *errwarns) +{ + tasm_compatible_mode = 1; + return nasm_preproc_create(in_filename, symtab, lm, errwarns); +} + +yasm_preproc_module yasm_tasm_LTX_preproc = { + "Real TASM Preprocessor", + "tasm", + tasm_preproc_create, + nasm_preproc_destroy, + nasm_preproc_get_line, + nasm_preproc_get_included_file, + nasm_preproc_add_include_file, + nasm_preproc_predefine_macro, + nasm_preproc_undefine_macro, + nasm_preproc_define_builtin, + nasm_preproc_add_standard +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm.h b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm.h new file mode 100644 index 0000000000..b3382ffe92 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasm.h @@ -0,0 +1,283 @@ +/* nasm.h main header file for the Netwide Assembler: inter-module interface + * + * The Netwide Assembler is copyright (C) 1996 Simon Tatham and + * Julian Hall. All rights reserved. The software is + * redistributable under the licence given in the file "Licence" + * distributed in the NASM archive. + * + * initial version: 27/iii/95 by Simon Tatham + */ +#ifndef YASM_NASM_H +#define YASM_NASM_H + +#ifndef NULL +#define NULL 0 +#endif + +#ifndef FALSE +#define FALSE 0 /* comes in handy */ +#endif +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FILENAME_MAX +#define FILENAME_MAX 256 +#endif + +#ifndef PREFIX_MAX +#define PREFIX_MAX 10 +#endif + +#ifndef POSTFIX_MAX +#define POSTFIX_MAX 10 +#endif + +#define IDLEN_MAX 4096 + +/* + * ------------------------- + * Error reporting functions + * ------------------------- + */ + +/* + * An error reporting function should look like this. + */ +typedef void (*efunc) (int severity, const char *fmt, ...); + +/* + * These are the error severity codes which get passed as the first + * argument to an efunc. + */ + +#define ERR_DEBUG 0x00000008 /* put out debugging message */ +#define ERR_WARNING 0x00000000 /* warn only: no further action */ +#define ERR_NONFATAL 0x00000001 /* terminate assembly after phase */ +#define ERR_FATAL 0x00000002 /* instantly fatal: exit with error */ +#define ERR_PANIC 0x00000003 /* internal error: panic instantly + * and dump core for reference */ +#define ERR_MASK 0x0000000F /* mask off the above codes */ +#define ERR_NOFILE 0x00000010 /* don't give source file name/line */ +#define ERR_USAGE 0x00000020 /* print a usage message */ +#define ERR_PASS1 0x00000040 /* only print this error on pass one */ + +/* + * These codes define specific types of suppressible warning. + */ + +#define ERR_WARN_MASK 0x0000FF00 /* the mask for this feature */ +#define ERR_WARN_SHR 8 /* how far to shift right */ + +#define ERR_WARN_MNP 0x00000100 /* macro-num-parameters warning */ +#define ERR_WARN_MSR 0x00000200 /* macro self-reference */ +#define ERR_WARN_OL 0x00000300 /* orphan label (no colon, and + * alone on line) */ +#define ERR_WARN_NOV 0x00000400 /* numeric overflow */ +#define ERR_WARN_GNUELF 0x00000500 /* using GNU ELF extensions */ +#define ERR_WARN_MAX 5 /* the highest numbered one */ + +/* + * ----------------------- + * Other function typedefs + * ----------------------- + */ + +/* + * List-file generators should look like this: + */ +typedef struct { + /* + * Called to initialise the listing file generator. Before this + * is called, the other routines will silently do nothing when + * called. The `char *' parameter is the file name to write the + * listing to. + */ + void (*init) (char *, efunc); + + /* + * Called to clear stuff up and close the listing file. + */ + void (*cleanup) (void); + + /* + * Called to output binary data. Parameters are: the offset; + * the data; the data type. Data types are similar to the + * output-format interface, only OUT_ADDRESS will _always_ be + * displayed as if it's relocatable, so ensure that any non- + * relocatable address has been converted to OUT_RAWDATA by + * then. Note that OUT_RAWDATA+0 is a valid data type, and is a + * dummy call used to give the listing generator an offset to + * work with when doing things like uplevel(LIST_TIMES) or + * uplevel(LIST_INCBIN). + */ + void (*output) (long, const void *, unsigned long); + + /* + * Called to send a text line to the listing generator. The + * `int' parameter is LIST_READ or LIST_MACRO depending on + * whether the line came directly from an input file or is the + * result of a multi-line macro expansion. + */ + void (*line) (int, char *); + + /* + * Called to change one of the various levelled mechanisms in + * the listing generator. LIST_INCLUDE and LIST_MACRO can be + * used to increase the nesting level of include files and + * macro expansions; LIST_TIMES and LIST_INCBIN switch on the + * two binary-output-suppression mechanisms for large-scale + * pseudo-instructions. + * + * LIST_MACRO_NOLIST is synonymous with LIST_MACRO except that + * it indicates the beginning of the expansion of a `nolist' + * macro, so anything under that level won't be expanded unless + * it includes another file. + */ + void (*uplevel) (int); + + /* + * Reverse the effects of uplevel. + */ + void (*downlevel) (int); +} ListGen; + +/* + * The expression evaluator must be passed a scanner function; a + * standard scanner is provided as part of nasmlib.c. The + * preprocessor will use a different one. Scanners, and the + * token-value structures they return, look like this. + * + * The return value from the scanner is always a copy of the + * `t_type' field in the structure. + */ +struct tokenval { + int t_type; + yasm_intnum *t_integer, *t_inttwo; + char *t_charptr; +}; +typedef int (*scanner) (void *private_data, struct tokenval *tv); + +/* + * Token types returned by the scanner, in addition to ordinary + * ASCII character values, and zero for end-of-string. + */ +enum { /* token types, other than chars */ + TOKEN_INVALID = -1, /* a placeholder value */ + TOKEN_EOS = 0, /* end of string */ + TOKEN_EQ = '=', TOKEN_GT = '>', TOKEN_LT = '<', /* aliases */ + TOKEN_ID = 256, TOKEN_NUM, TOKEN_REG, TOKEN_INSN, /* major token types */ + TOKEN_ERRNUM, /* numeric constant with error in */ + TOKEN_HERE, TOKEN_BASE, /* $ and $$ */ + TOKEN_SPECIAL, /* BYTE, WORD, DWORD, FAR, NEAR, etc */ + TOKEN_PREFIX, /* A32, O16, LOCK, REPNZ, TIMES, etc */ + TOKEN_SHL, TOKEN_SHR, /* << and >> */ + TOKEN_SDIV, TOKEN_SMOD, /* // and %% */ + TOKEN_GE, TOKEN_LE, TOKEN_NE, /* >=, <= and <> (!= is same as <>) */ + TOKEN_DBL_AND, TOKEN_DBL_OR, TOKEN_DBL_XOR, /* &&, || and ^^ */ + TOKEN_SEG, TOKEN_WRT, /* SEG and WRT */ + TOKEN_FLOAT /* floating-point constant */ +}; + +/* + * The actual expression evaluator function looks like this. When + * called, it expects the first token of its expression to already + * be in `*tv'; if it is not, set tv->t_type to TOKEN_INVALID and + * it will start by calling the scanner. + * + * `critical' is non-zero if the expression may not contain forward + * references. The evaluator will report its own error if this + * occurs; if `critical' is 1, the error will be "symbol not + * defined before use", whereas if `critical' is 2, the error will + * be "symbol undefined". + * + * If `critical' has bit 8 set (in addition to its main value: 0x101 + * and 0x102 correspond to 1 and 2) then an extended expression + * syntax is recognised, in which relational operators such as =, < + * and >= are accepted, as well as low-precedence logical operators + * &&, ^^ and ||. + */ +#define CRITICAL 0x100 +typedef yasm_expr *(*evalfunc) (scanner sc, void *scprivate, struct tokenval *tv, + int critical, efunc error); + +/* + * Preprocessors ought to look like this: + */ +typedef struct { + /* + * Called at the start of a pass; given a file name, the number + * of the pass, an error reporting function, an evaluator + * function, and a listing generator to talk to. + */ + void (*reset) (FILE *, const char *, int, efunc, evalfunc, ListGen *); + + /* + * Called to fetch a line of preprocessed source. The line + * returned has been malloc'ed, and so should be freed after + * use. + */ + char *(*getline) (void); + + /* + * Called at the end of a pass. + */ + void (*cleanup) (int); +} Preproc; + +/* + * ---------------------------------------------------------------- + * Some lexical properties of the NASM source language, included + * here because they are shared between the parser and preprocessor + * ---------------------------------------------------------------- + */ + +/* + * isidstart matches any character that may start an identifier, and isidchar + * matches any character that may appear at places other than the start of an + * identifier. E.g. a period may only appear at the start of an identifier + * (for local labels), whereas a number may appear anywhere *but* at the + * start. + */ + +#define isidstart(c) ( isalpha(c) || (c)=='_' || (c)=='.' || (c)=='?' \ + || (c)=='@' ) +#define isidchar(c) ( isidstart(c) || isdigit(c) || (c)=='$' || (c)=='#' \ + || (c)=='~' ) + +/* Ditto for numeric constants. */ + +#define isnumstart(c) ( isdigit(c) || (c)=='$' ) +#define isnumchar(c) ( isalnum(c) ) + +/* This returns the numeric value of a given 'digit'. */ + +#define numvalue(c) ((c)>='a' ? (c)-'a'+10 : (c)>='A' ? (c)-'A'+10 : (c)-'0') + +/* + * Data-type flags that get passed to listing-file routines. + */ +enum { + LIST_READ, LIST_MACRO, LIST_MACRO_NOLIST, LIST_INCLUDE, + LIST_INCBIN, LIST_TIMES +}; + +/* + * ----- + * Other + * ----- + */ + +/* + * This is a useful #define which I keep meaning to use more often: + * the number of elements of a statically defined array. + */ + +#define elements(x) ( sizeof(x) / sizeof(*(x)) ) + +extern int tasm_compatible_mode; +extern int tasm_locals; +extern const char *tasm_segment; +const char *tasm_get_segment_register(const char *segment); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasmlib.c b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasmlib.c new file mode 100644 index 0000000000..2ced911780 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasmlib.c @@ -0,0 +1,201 @@ +/* nasmlib.c library routines for the Netwide Assembler + * + * The Netwide Assembler is copyright (C) 1996 Simon Tatham and + * Julian Hall. All rights reserved. The software is + * redistributable under the licence given in the file "Licence" + * distributed in the NASM archive. + */ +#include +#include +#include +#include + +#include "nasm.h" +#include "nasmlib.h" +/*#include "insns.h"*/ /* For MAX_KEYWORD */ + +#define lib_isnumchar(c) ( isalnum(c) || (c) == '$') +#define numvalue(c) ((c)>='a' ? (c)-'a'+10 : (c)>='A' ? (c)-'A'+10 : (c)-'0') + +yasm_intnum *nasm_readnum (char *str, int *error) +{ + char *r = str, *q, *p; + long radix; + yasm_intnum *intn; + char save; + int digit; + int sign = 0; + + *error = FALSE; + + while (isspace(*r)) r++; /* find start of number */ + + /* + * If the number came from make_tok_num (as a result of an %assign), it + * might have a '-' built into it (rather than in a preceeding token). + */ + if (*r == '-') + { + r++; + sign = 1; + } + + q = r; + + while (lib_isnumchar(*q)) q++; /* find end of number */ + + /* + * If it begins 0x, 0X or $, or ends in H, it's in hex. if it + * ends in Q, it's octal. if it ends in B, it's binary. + * Otherwise, it's ordinary decimal. + */ + if (*r=='0' && (r[1]=='x' || r[1]=='X')) + radix = 16, r += 2; + else if (*r=='$') + radix = 16, r++; + else if (q[-1]=='H' || q[-1]=='h') + radix = 16 , q--; + else if (q[-1]=='Q' || q[-1]=='q' || q[-1]=='O' || q[-1]=='o') + radix = 8 , q--; + else if (q[-1]=='B' || q[-1]=='b') + radix = 2 , q--; + else + radix = 10; + + /* + * If this number has been found for us by something other than + * the ordinary scanners, then it might be malformed by having + * nothing between the prefix and the suffix. Check this case + * now. + */ + if (r >= q) { + *error = TRUE; + return yasm_intnum_create_uint(0); + } + + /* Check for valid number of that radix */ + p = r; + while (*p && p < q) { + if (*p<'0' || (*p>'9' && *p<'A') || (digit = numvalue(*p)) >= radix) + { + *error = TRUE; + return yasm_intnum_create_uint(0); + } + p++; + } + + /* Use intnum to actually do the conversion */ + save = *q; + *q = '\0'; + switch (radix) { + case 2: + intn = yasm_intnum_create_bin(r); + break; + case 8: + intn = yasm_intnum_create_oct(r); + break; + case 10: + intn = yasm_intnum_create_dec(r); + break; + case 16: + intn = yasm_intnum_create_hex(r); + break; + default: + *error = TRUE; + intn = yasm_intnum_create_uint(0); + break; + } + *q = save; + + if (sign) + yasm_intnum_calc(intn, YASM_EXPR_NEG, NULL); + return intn; +} + +yasm_intnum *nasm_readstrnum (char *str, size_t length, int *warn) +{ + char save; + yasm_intnum *intn; + + *warn = FALSE; + + save = str[length]; + str[length] = '\0'; + intn = yasm_intnum_create_charconst_nasm(str); + str[length] = save; + + return intn; +} + +static char *file_name = NULL; +static long line_number = 0; + +char *nasm_src_set_fname(char *newname) +{ + char *oldname = file_name; + file_name = newname; + return oldname; +} + +char *nasm_src_get_fname(void) +{ + return file_name; +} + +long nasm_src_set_linnum(long newline) +{ + long oldline = line_number; + line_number = newline; + return oldline; +} + +long nasm_src_get_linnum(void) +{ + return line_number; +} + +int nasm_src_get(long *xline, char **xname) +{ + if (!file_name || !*xname || strcmp(*xname, file_name)) + { + nasm_free(*xname); + *xname = file_name ? nasm_strdup(file_name) : NULL; + *xline = line_number; + return -2; + } + if (*xline != line_number) + { + long tmp = line_number - *xline; + *xline = line_number; + return tmp; + } + return 0; +} + +void nasm_quote(char **str) +{ + size_t ln=strlen(*str); + char q=(*str)[0]; + char *p; + if (ln>1 && (*str)[ln-1]==q && (q=='"' || q=='\'')) + return; + q = '"'; + if (strchr(*str,q)) + q = '\''; + p = nasm_malloc(ln+3); + strcpy(p+1, *str); + nasm_free(*str); + p[ln+1] = p[0] = q; + p[ln+2] = 0; + *str = p; +} + +char *nasm_strcat(const char *one, const char *two) +{ + char *rslt; + size_t l1=strlen(one); + rslt = nasm_malloc(l1+strlen(two)+1); + strcpy(rslt, one); + strcpy(rslt+l1, two); + return rslt; +} diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasmlib.h b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasmlib.h new file mode 100644 index 0000000000..c26c0668b5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/nasmlib.h @@ -0,0 +1,60 @@ +/* nasmlib.h header file for nasmlib.c + * + * The Netwide Assembler is copyright (C) 1996 Simon Tatham and + * Julian Hall. All rights reserved. The software is + * redistributable under the licence given in the file "Licence" + * distributed in the NASM archive. + */ + +#ifndef YASM_NASMLIB_H +#define YASM_NASMLIB_H + +/* + * Wrappers around malloc, realloc and free. nasm_malloc will + * fatal-error and die rather than return NULL; nasm_realloc will + * do likewise, and will also guarantee to work right on being + * passed a NULL pointer; nasm_free will do nothing if it is passed + * a NULL pointer. + */ +#define nasm_malloc yasm_xmalloc +#define nasm_realloc yasm_xrealloc +#ifdef WITH_DMALLOC +#define nasm_free(p) do { if (p) yasm_xfree(p); } while(0) +#else +#define nasm_free(p) yasm_xfree(p) +#endif +#define nasm_strdup yasm__xstrdup +#define nasm_strndup yasm__xstrndup +#define nasm_stricmp yasm__strcasecmp +#define nasm_strnicmp yasm__strncasecmp + +/* + * Convert a string into a number, using NASM number rules. Sets + * `*error' to TRUE if an error occurs, and FALSE otherwise. + */ +yasm_intnum *nasm_readnum(char *str, int *error); + +/* + * Convert a character constant into a number. Sets + * `*warn' to TRUE if an overflow occurs, and FALSE otherwise. + * str points to and length covers the middle of the string, + * without the quotes. + */ +yasm_intnum *nasm_readstrnum(char *str, size_t length, int *warn); + +char *nasm_src_set_fname(char *newname); +char *nasm_src_get_fname(void); +long nasm_src_set_linnum(long newline); +long nasm_src_get_linnum(void); +/* + * src_get may be used if you simply want to know the source file and line. + * It is also used if you maintain private status about the source location + * It return 0 if the information was the same as the last time you + * checked, -1 if the name changed and (new-old) if just the line changed. + */ +int nasm_src_get(long *xline, char **xname); + +void nasm_quote(char **str); +char *nasm_strcat(const char *one, const char *two); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/16args.asm b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/16args.asm new file mode 100644 index 0000000000..506db96c50 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/16args.asm @@ -0,0 +1,27 @@ +%define BLA16 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 + +%macro SUPERBLA16 16 +mov eax, %1 +mov eax, %2 +mov eax, %3 +mov eax, %4 +mov eax, %5 +mov eax, %6 +mov eax, %7 +mov eax, %8 +mov eax, %9 +mov eax, %10 +mov eax, %11 +mov eax, %12 +mov eax, %13 +mov eax, %14 +mov eax, %15 +mov eax, %16 +%endmacro + +SECTION .text + +yoyo: + +SUPERBLA16 BLA16 + diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/16args.hex b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/16args.hex new file mode 100644 index 0000000000..2eaa59dd2d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/16args.hex @@ -0,0 +1,96 @@ +66 +b8 +01 +00 +00 +00 +66 +b8 +02 +00 +00 +00 +66 +b8 +03 +00 +00 +00 +66 +b8 +04 +00 +00 +00 +66 +b8 +05 +00 +00 +00 +66 +b8 +06 +00 +00 +00 +66 +b8 +07 +00 +00 +00 +66 +b8 +08 +00 +00 +00 +66 +b8 +09 +00 +00 +00 +66 +b8 +0a +00 +00 +00 +66 +b8 +0b +00 +00 +00 +66 +b8 +0c +00 +00 +00 +66 +b8 +0d +00 +00 +00 +66 +b8 +0e +00 +00 +00 +66 +b8 +0f +00 +00 +00 +66 +b8 +10 +00 +00 +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/Makefile.inc new file mode 100644 index 0000000000..2d624eb59d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/Makefile.inc @@ -0,0 +1,24 @@ +TESTS += modules/preprocs/nasm/tests/nasmpp_test.sh + +EXTRA_DIST += modules/preprocs/nasm/tests/nasmpp_test.sh +EXTRA_DIST += modules/preprocs/nasm/tests/16args.asm +EXTRA_DIST += modules/preprocs/nasm/tests/16args.hex +EXTRA_DIST += modules/preprocs/nasm/tests/ifcritical-err.asm +EXTRA_DIST += modules/preprocs/nasm/tests/ifcritical-err.errwarn +EXTRA_DIST += modules/preprocs/nasm/tests/longline.asm +EXTRA_DIST += modules/preprocs/nasm/tests/longline.hex +EXTRA_DIST += modules/preprocs/nasm/tests/macroeof-err.asm +EXTRA_DIST += modules/preprocs/nasm/tests/macroeof-err.errwarn +EXTRA_DIST += modules/preprocs/nasm/tests/noinclude-err.asm +EXTRA_DIST += modules/preprocs/nasm/tests/noinclude-err.errwarn +EXTRA_DIST += modules/preprocs/nasm/tests/nasmpp-bigint.asm +EXTRA_DIST += modules/preprocs/nasm/tests/nasmpp-bigint.hex +EXTRA_DIST += modules/preprocs/nasm/tests/nasmpp-decimal.asm +EXTRA_DIST += modules/preprocs/nasm/tests/nasmpp-decimal.hex +EXTRA_DIST += modules/preprocs/nasm/tests/nasmpp-nested.asm +EXTRA_DIST += modules/preprocs/nasm/tests/nasmpp-nested.errwarn +EXTRA_DIST += modules/preprocs/nasm/tests/nasmpp-nested.hex +EXTRA_DIST += modules/preprocs/nasm/tests/orgsect.asm +EXTRA_DIST += modules/preprocs/nasm/tests/orgsect.hex +EXTRA_DIST += modules/preprocs/nasm/tests/scope-err.asm +EXTRA_DIST += modules/preprocs/nasm/tests/scope-err.errwarn diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/ifcritical-err.asm b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/ifcritical-err.asm new file mode 100644 index 0000000000..1290dd8377 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/ifcritical-err.asm @@ -0,0 +1,7 @@ +; This worked under NASM. Due to the once-parse model used by YASM, this no +; longer works. However, it should error, not crash! +teststring db "Hello, world" +teststringlen equ $-teststring +%if teststringlen>100 + db '5' +%endif diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/ifcritical-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/ifcritical-err.errwarn new file mode 100644 index 0000000000..73ca327cb5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/ifcritical-err.errwarn @@ -0,0 +1 @@ +-:5: error: non-constant value given to `%if' diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/longline.asm b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/longline.asm new file mode 100644 index 0000000000..212a30b76f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/longline.asm @@ -0,0 +1,2 @@ + db (((0x52<<3)^(((0x52>>5)&1)*0x11b)^(((0x52>>5)&2)*0x11b)^(((0x52>>5)&4)*0x11b)) ^ ((0x52<<2)^(((0x52>>6)&1)*0x11b)^(((0x52>>6)&2)*0x11b)) ^ ((0x52<<1)^(((0x52>>7)&1)*0x11b))), (((0x52<<3)^(((0x52>>5)&1)*0x11b)^(((0x52>>5)&2)*0x11b)^(((0x52>>5)&4)*0x11b)) ^ 0x52), (((0x52<<3)^(((0x52>>5)&1)*0x11b)^(((0x52>>5)&2)*0x11b)^(((0x52>>5)&4)*0x11b)) ^ ((0x52<<2)^(((0x52>>6)&1)*0x11b)^(((0x52>>6)&2)*0x11b)) ^ 0x52), (((0x52<<3)^(((0x52>>5)&1)*0x11b)^(((0x52>>5)&2)*0x11b)^(((0x52>>5)&4)*0x11b)) ^ ((0x52<<1)^(((0x52>>7)&1)*0x11b)) ^ 0x52), (((0x52<<3)^(((0x52>>5)&1)*0x11b)^(((0x52>>5)&2)*0x11b)^(((0x52>>5)&4)*0x11b)) ^ ((0x52<<2)^(((0x52>>6)&1)*0x11b)^(((0x52>>6)&2)*0x11b)) ^ ((0x52<<1)^(((0x52>>7)&1)*0x11b))), (((0x52<<3)^(((0x52>>5)&1)*0x11b)^(((0x52>>5)&2)*0x11b)^(((0x52>>5)&4)*0x11b)) ^ 0x52), (((0x52<<3)^(((0x52>>5)&1)*0x11b)^(((0x52>>5)&2)*0x11b)^(((0x52>>5)&4)*0x11b)) ^ ((0x52<<2)^(((0x52>>6)&1)*0x11b)^(((0x52>>6)&2)*0x11b)) ^ 0x52), (((0x52<<3)^(((0x52>>5)&1)*0x11b)^(((0x52>>5)&2)*0x11b)^(((0x52>>5)&4)*0x11b)) ^ ((0x52<<1)^(((0x52>>7)&1)*0x11b)) ^ 0x52),(((0x09<<3)^(((0x09>>5)&1)*0x11b)^(((0x09>>5)&2)*0x11b)^(((0x09>>5)&4)*0x11b)) ^ ((0x09<<2)^(((0x09>>6)&1)*0x11b)^(((0x09>>6)&2)*0x11b)) ^ ((0x09<<1)^(((0x09>>7)&1)*0x11b))), (((0x09<<3)^(((0x09>>5)&1)*0x11b)^(((0x09>>5)&2)*0x11b)^(((0x09>>5)&4)*0x11b)) ^ 0x09), (((0x09<<3)^(((0x09>>5)&1)*0x11b)^(((0x09>>5)&2)*0x11b)^(((0x09>>5)&4)*0x11b)) ^ ((0x09<<2)^(((0x09>>6)&1)*0x11b)^(((0x09>>6)&2)*0x11b)) ^ 0x09), (((0x09<<3)^(((0x09>>5)&1)*0x11b)^(((0x09>>5)&2)*0x11b)^(((0x09>>5)&4)*0x11b)) ^ ((0x09<<1)^(((0x09>>7)&1)*0x11b)) ^ 0x09), (((0x09<<3)^(((0x09>>5)&1)*0x11b)^(((0x09>>5)&2)*0x11b)^(((0x09>>5)&4)*0x11b)) ^ ((0x09<<2)^(((0x09>>6)&1)*0x11b)^(((0x09>>6)&2)*0x11b)) ^ ((0x09<<1)^(((0x09>>7)&1)*0x11b))), (((0x09<<3)^(((0x09>>5)&1)*0x11b)^(((0x09>>5)&2)*0x11b)^(((0x09>>5)&4)*0x11b)) ^ 0x09), (((0x09<<3)^(((0x09>>5)&1)*0x11b)^(((0x09>>5)&2)*0x11b)^(((0x09>>5)&4)*0x11b)) ^ ((0x09<<2)^(((0x09>>6)&1)*0x11b)^(((0x09>>6)&2)*0x11b)) ^ 0x09), (((0x09<<3)^(((0x09>>5)&1)*0x11b)^(((0x09>>5)&2)*0x11b)^(((0x09>>5)&4)*0x11b)) ^ ((0x09<<1)^(((0x09>>7)&1)*0x11b)) ^ 0x09),(((0x6a<<3)^(((0x6a>>5)&1)*0x11b)^(((0x6a>>5)&2)*0x11b)^(((0x6a>>5)&4)*0x11b)) ^ ((0x6a<<2)^(((0x6a>>6)&1)*0x11b)^(((0x6a>>6)&2)*0x11b)) ^ ((0x6a<<1)^(((0x6a>>7)&1)*0x11b))), (((0x6a<<3)^(((0x6a>>5)&1)*0x11b)^(((0x6a>>5)&2)*0x11b)^(((0x6a>>5)&4)*0x11b)) ^ 0x6a), (((0x6a<<3)^(((0x6a>>5)&1)*0x11b)^(((0x6a>>5)&2)*0x11b)^(((0x6a>>5)&4)*0x11b)) ^ ((0x6a<<2)^(((0x6a>>6)&1)*0x11b)^(((0x6a>>6)&2)*0x11b)) ^ 0x6a), (((0x6a<<3)^(((0x6a>>5)&1)*0x11b)^(((0x6a>>5)&2)*0x11b)^(((0x6a>>5)&4)*0x11b)) ^ ((0x6a<<1)^(((0x6a>>7)&1)*0x11b)) ^ 0x6a), (((0x6a<<3)^(((0x6a>>5)&1)*0x11b)^(((0x6a>>5)&2)*0x11b)^(((0x6a>>5)&4)*0x11b)) ^ ((0x6a<<2)^(((0x6a>>6)&1)*0x11b)^(((0x6a>>6)&2)*0x11b)) ^ ((0x6a<<1)^(((0x6a>>7)&1)*0x11b))), (((0x6a<<3)^(((0x6a>>5)&1)*0x11b)^(((0x6a>>5)&2)*0x11b)^(((0x6a>>5)&4)*0x11b)) ^ 0x6a), (((0x6a<<3)^(((0x6a>>5)&1)*0x11b)^(((0x6a>>5)&2)*0x11b)^(((0x6a>>5)&4)*0x11b)) ^ ((0x6a<<2)^(((0x6a>>6)&1)*0x11b)^(((0x6a>>6)&2)*0x11b)) ^ 0x6a), (((0x6a<<3)^(((0x6a>>5)&1)*0x11b)^(((0x6a>>5)&2)*0x11b)^(((0x6a>>5)&4)*0x11b)) ^ ((0x6a<<1)^(((0x6a>>7)&1)*0x11b)) ^ 0x6a),(((0xd5<<3)^(((0xd5>>5)&1)*0x11b)^(((0xd5>>5)&2)*0x11b)^(((0xd5>>5)&4)*0x11b)) ^ ((0xd5<<2)^(((0xd5>>6)&1)*0x11b)^(((0xd5>>6)&2)*0x11b)) ^ ((0xd5<<1)^(((0xd5>>7)&1)*0x11b))), (((0xd5<<3)^(((0xd5>>5)&1)*0x11b)^(((0xd5>>5)&2)*0x11b)^(((0xd5>>5)&4)*0x11b)) ^ 0xd5), (((0xd5<<3)^(((0xd5>>5)&1)*0x11b)^(((0xd5>>5)&2)*0x11b)^(((0xd5>>5)&4)*0x11b)) ^ ((0xd5<<2)^(((0xd5>>6)&1)*0x11b)^(((0xd5>>6)&2)*0x11b)) ^ 0xd5), (((0xd5<<3)^(((0xd5>>5)&1)*0x11b)^(((0xd5>>5)&2)*0x11b)^(((0xd5>>5)&4)*0x11b)) ^ ((0xd5<<1)^(((0xd5>>7)&1)*0x11b)) ^ 0xd5), (((0xd5<<3)^(((0xd5>>5)&1)*0x11b)^(((0xd5>>5)&2)*0x11b)^(((0xd5>>5)&4)*0x11b)) ^ ((0xd5<<2)^(((0xd5>>6)&1)*0x11b)^(((0xd5>>6)&2)*0x11b)) ^ ((0xd5<<1)^(((0xd5>>7)&1)*0x11b))), (((0xd5<<3)^(((0xd5>>5)&1)*0x11b)^(((0xd5>>5)&2)*0x11b)^(((0xd5>>5)&4)*0x11b)) ^ 0xd5), (((0xd5<<3)^(((0xd5>>5)&1)*0x11b)^(((0xd5>>5)&2)*0x11b)^(((0xd5>>5)&4)*0x11b)) ^ ((0xd5<<2)^(((0xd5>>6)&1)*0x11b)^(((0xd5>>6)&2)*0x11b)) ^ 0xd5), (((0xd5<<3)^(((0xd5>>5)&1)*0x11b)^(((0xd5>>5)&2)*0x11b)^(((0xd5>>5)&4)*0x11b)) ^ ((0xd5<<1)^(((0xd5>>7)&1)*0x11b)) ^ 0xd5),(((0x30<<3)^(((0x30>>5)&1)*0x11b)^(((0x30>>5)&2)*0x11b)^(((0x30>>5)&4)*0x11b)) ^ ((0x30<<2)^(((0x30>>6)&1)*0x11b)^(((0x30>>6)&2)*0x11b)) ^ ((0x30<<1)^(((0x30>>7)&1)*0x11b))), (((0x30<<3)^(((0x30>>5)&1)*0x11b)^(((0x30>>5)&2)*0x11b)^(((0x30>>5)&4)*0x11b)) ^ 0x30), (((0x30<<3)^(((0x30>>5)&1)*0x11b)^(((0x30>>5)&2)*0x11b)^(((0x30>>5)&4)*0x11b)) ^ ((0x30<<2)^(((0x30>>6)&1)*0x11b)^(((0x30>>6)&2)*0x11b)) ^ 0x30), (((0x30<<3)^(((0x30>>5)&1)*0x11b)^(((0x30>>5)&2)*0x11b)^(((0x30>>5)&4)*0x11b)) ^ ((0x30<<1)^(((0x30>>7)&1)*0x11b)) ^ 0x30), (((0x30<<3)^(((0x30>>5)&1)*0x11b)^(((0x30>>5)&2)*0x11b)^(((0x30>>5)&4)*0x11b)) ^ ((0x30<<2)^(((0x30>>6)&1)*0x11b)^(((0x30>>6)&2)*0x11b)) ^ ((0x30<<1)^(((0x30>>7)&1)*0x11b))), (((0x30<<3)^(((0x30>>5)&1)*0x11b)^(((0x30>>5)&2)*0x11b)^(((0x30>>5)&4)*0x11b)) ^ 0x30), (((0x30<<3)^(((0x30>>5)&1)*0x11b)^(((0x30>>5)&2)*0x11b)^(((0x30>>5)&4)*0x11b)) ^ ((0x30<<2)^(((0x30>>6)&1)*0x11b)^(((0x30>>6)&2)*0x11b)) ^ 0x30), (((0x30<<3)^(((0x30>>5)&1)*0x11b)^(((0x30>>5)&2)*0x11b)^(((0x30>>5)&4)*0x11b)) ^ ((0x30<<1)^(((0x30>>7)&1)*0x11b)) ^ 0x30),(((0x36<<3)^(((0x36>>5)&1)*0x11b)^(((0x36>>5)&2)*0x11b)^(((0x36>>5)&4)*0x11b)) ^ ((0x36<<2)^(((0x36>>6)&1)*0x11b)^(((0x36>>6)&2)*0x11b)) ^ ((0x36<<1)^(((0x36>>7)&1)*0x11b))), (((0x36<<3)^(((0x36>>5)&1)*0x11b)^(((0x36>>5)&2)*0x11b)^(((0x36>>5)&4)*0x11b)) ^ 0x36), (((0x36<<3)^(((0x36>>5)&1)*0x11b)^(((0x36>>5)&2)*0x11b)^(((0x36>>5)&4)*0x11b)) ^ ((0x36<<2)^(((0x36>>6)&1)*0x11b)^(((0x36>>6)&2)*0x11b)) ^ 0x36), (((0x36<<3)^(((0x36>>5)&1)*0x11b)^(((0x36>>5)&2)*0x11b)^(((0x36>>5)&4)*0x11b)) ^ ((0x36<<1)^(((0x36>>7)&1)*0x11b)) ^ 0x36), (((0x36<<3)^(((0x36>>5)&1)*0x11b)^(((0x36>>5)&2)*0x11b)^(((0x36>>5)&4)*0x11b)) ^ ((0x36<<2)^(((0x36>>6)&1)*0x11b)^(((0x36>>6)&2)*0x11b)) ^ ((0x36<<1)^(((0x36>>7)&1)*0x11b))), (((0x36<<3)^(((0x36>>5)&1)*0x11b)^(((0x36>>5)&2)*0x11b)^(((0x36>>5)&4)*0x11b)) ^ 0x36), (((0x36<<3)^(((0x36>>5)&1)*0x11b)^(((0x36>>5)&2)*0x11b)^(((0x36>>5)&4)*0x11b)) ^ ((0x36<<2)^(((0x36>>6)&1)*0x11b)^(((0x36>>6)&2)*0x11b)) ^ 0x36), (((0x36<<3)^(((0x36>>5)&1)*0x11b)^(((0x36>>5)&2)*0x11b)^(((0x36>>5)&4)*0x11b)) ^ ((0x36<<1)^(((0x36>>7)&1)*0x11b)) ^ 0x36),(((0xa5<<3)^(((0xa5>>5)&1)*0x11b)^(((0xa5>>5)&2)*0x11b)^(((0xa5>>5)&4)*0x11b)) ^ ((0xa5<<2)^(((0xa5>>6)&1)*0x11b)^(((0xa5>>6)&2)*0x11b)) ^ ((0xa5<<1)^(((0xa5>>7)&1)*0x11b))), (((0xa5<<3)^(((0xa5>>5)&1)*0x11b)^(((0xa5>>5)&2)*0x11b)^(((0xa5>>5)&4)*0x11b)) ^ 0xa5), (((0xa5<<3)^(((0xa5>>5)&1)*0x11b)^(((0xa5>>5)&2)*0x11b)^(((0xa5>>5)&4)*0x11b)) ^ ((0xa5<<2)^(((0xa5>>6)&1)*0x11b)^(((0xa5>>6)&2)*0x11b)) ^ 0xa5), (((0xa5<<3)^(((0xa5>>5)&1)*0x11b)^(((0xa5>>5)&2)*0x11b)^(((0xa5>>5)&4)*0x11b)) ^ ((0xa5<<1)^(((0xa5>>7)&1)*0x11b)) ^ 0xa5), (((0xa5<<3)^(((0xa5>>5)&1)*0x11b)^(((0xa5>>5)&2)*0x11b)^(((0xa5>>5)&4)*0x11b)) ^ ((0xa5<<2)^(((0xa5>>6)&1)*0x11b)^(((0xa5>>6)&2)*0x11b)) ^ ((0xa5<<1)^(((0xa5>>7)&1)*0x11b))), (((0xa5<<3)^(((0xa5>>5)&1)*0x11b)^(((0xa5>>5)&2)*0x11b)^(((0xa5>>5)&4)*0x11b)) ^ 0xa5), (((0xa5<<3)^(((0xa5>>5)&1)*0x11b)^(((0xa5>>5)&2)*0x11b)^(((0xa5>>5)&4)*0x11b)) ^ ((0xa5<<2)^(((0xa5>>6)&1)*0x11b)^(((0xa5>>6)&2)*0x11b)) ^ 0xa5), (((0xa5<<3)^(((0xa5>>5)&1)*0x11b)^(((0xa5>>5)&2)*0x11b)^(((0xa5>>5)&4)*0x11b)) ^ ((0xa5<<1)^(((0xa5>>7)&1)*0x11b)) ^ 0xa5),(((0x38<<3)^(((0x38>>5)&1)*0x11b)^(((0x38>>5)&2)*0x11b)^(((0x38>>5)&4)*0x11b)) ^ ((0x38<<2)^(((0x38>>6)&1)*0x11b)^(((0x38>>6)&2)*0x11b)) ^ ((0x38<<1)^(((0x38>>7)&1)*0x11b))), (((0x38<<3)^(((0x38>>5)&1)*0x11b)^(((0x38>>5)&2)*0x11b)^(((0x38>>5)&4)*0x11b)) ^ 0x38), (((0x38<<3)^(((0x38>>5)&1)*0x11b)^(((0x38>>5)&2)*0x11b)^(((0x38>>5)&4)*0x11b)) ^ ((0x38<<2)^(((0x38>>6)&1)*0x11b)^(((0x38>>6)&2)*0x11b)) ^ 0x38), (((0x38<<3)^(((0x38>>5)&1)*0x11b)^(((0x38>>5)&2)*0x11b)^(((0x38>>5)&4)*0x11b)) ^ ((0x38<<1)^(((0x38>>7)&1)*0x11b)) ^ 0x38), (((0x38<<3)^(((0x38>>5)&1)*0x11b)^(((0x38>>5)&2)*0x11b)^(((0x38>>5)&4)*0x11b)) ^ ((0x38<<2)^(((0x38>>6)&1)*0x11b)^(((0x38>>6)&2)*0x11b)) ^ ((0x38<<1)^(((0x38>>7)&1)*0x11b))), (((0x38<<3)^(((0x38>>5)&1)*0x11b)^(((0x38>>5)&2)*0x11b)^(((0x38>>5)&4)*0x11b)) ^ 0x38), (((0x38<<3)^(((0x38>>5)&1)*0x11b)^(((0x38>>5)&2)*0x11b)^(((0x38>>5)&4)*0x11b)) ^ ((0x38<<2)^(((0x38>>6)&1)*0x11b)^(((0x38>>6)&2)*0x11b)) ^ 0x38), (((0x38<<3)^(((0x38>>5)&1)*0x11b)^(((0x38>>5)&2)*0x11b)^(((0x38>>5)&4)*0x11b)) ^ ((0x38<<1)^(((0x38>>7)&1)*0x11b)) ^ 0x38) + diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/longline.hex b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/longline.hex new file mode 100644 index 0000000000..0a0968cc70 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/longline.hex @@ -0,0 +1,64 @@ +51 +f4 +a7 +50 +51 +f4 +a7 +50 +7e +41 +65 +53 +7e +41 +65 +53 +1a +17 +a4 +c3 +1a +17 +a4 +c3 +3a +27 +5e +96 +3a +27 +5e +96 +3b +ab +6b +cb +3b +ab +6b +cb +1f +9d +45 +f1 +1f +9d +45 +f1 +ac +fa +58 +ab +ac +fa +58 +ab +4b +e3 +03 +93 +4b +e3 +03 +93 diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/macroeof-err.asm b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/macroeof-err.asm new file mode 100644 index 0000000000..dd51488b06 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/macroeof-err.asm @@ -0,0 +1 @@ +%macro foo 0 diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/macroeof-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/macroeof-err.errwarn new file mode 100644 index 0000000000..c92f71e4a8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/macroeof-err.errwarn @@ -0,0 +1 @@ +-:1: error: end of file while still defining macro `foo' diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-bigint.asm b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-bigint.asm new file mode 100644 index 0000000000..4314661a46 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-bigint.asm @@ -0,0 +1,3 @@ +%if 0x100000000000000 > 0x1000000000000 +db 0 +%endif diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-bigint.hex b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-bigint.hex new file mode 100644 index 0000000000..164742d747 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-bigint.hex @@ -0,0 +1 @@ +00 diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-decimal.asm b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-decimal.asm new file mode 100644 index 0000000000..9bbf886896 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-decimal.asm @@ -0,0 +1,14 @@ +%macro testConcat 0 + + %push ctx + %assign %$x 0 + %rep 8 + + movd eax, mm%$x + %assign %$x %$x+1 + + %endrep %pop + +%endmacro + +testConcat diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-decimal.hex b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-decimal.hex new file mode 100644 index 0000000000..7ecac721f8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-decimal.hex @@ -0,0 +1,24 @@ +0f +7e +c0 +0f +7e +c8 +0f +7e +d0 +0f +7e +d8 +0f +7e +e0 +0f +7e +e8 +0f +7e +f0 +0f +7e +f8 diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-nested.asm b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-nested.asm new file mode 100644 index 0000000000..ed1551b87d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-nested.asm @@ -0,0 +1,29 @@ +%MACRO WORK_1 0 + %ASSIGN %%count1 4 + %error %%count1 + %REP %%count1 + %ENDREP +%ENDMACRO + +%MACRO WORK_2 0 + %ASSIGN %%count1 4 + %error %%count1 + %REP %%count1 + %REP 4 + %ENDREP + %ENDREP +%ENDMACRO + +%MACRO DONT_WORK_1 0 + %ASSIGN %%count1 4 + %ASSIGN %%count2 4 + %error %%count1 %%count2 + %REP %%count1 + %REP %%count2 + %ENDREP + %ENDREP +%ENDMACRO + +WORK_1 +WORK_2 +DONT_WORK_1 diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-nested.errwarn b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-nested.errwarn new file mode 100644 index 0000000000..31839e33df --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-nested.errwarn @@ -0,0 +1,3 @@ +-:27: warning: (WORK_1:2) 4 +-:28: warning: (WORK_2:2) 4 +-:29: warning: (DONT_WORK_1:3) 4 4 diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-nested.hex b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp-nested.hex new file mode 100644 index 0000000000..e69de29bb2 diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp_test.sh b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp_test.sh new file mode 100755 index 0000000000..c55c4204b6 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/nasmpp_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh nasmpp_test modules/preprocs/nasm/tests "nasm preproc" "-f bin" "" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/noinclude-err.asm b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/noinclude-err.asm new file mode 100644 index 0000000000..086253962e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/noinclude-err.asm @@ -0,0 +1 @@ +%include "doesnotexist.inc" diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/noinclude-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/noinclude-err.errwarn new file mode 100644 index 0000000000..68f7152e49 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/noinclude-err.errwarn @@ -0,0 +1 @@ +yasm: FATAL: unable to open include file `doesnotexist.inc' diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/orgsect.asm b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/orgsect.asm new file mode 100644 index 0000000000..d8e9c41700 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/orgsect.asm @@ -0,0 +1,7 @@ +ORG 100h +label: +db 5 +STRUC Foo +.bar resb 4 +ENDSTRUC +dw label diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/orgsect.hex b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/orgsect.hex new file mode 100644 index 0000000000..d055b67848 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/orgsect.hex @@ -0,0 +1,3 @@ +05 +00 +01 diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/scope-err.asm b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/scope-err.asm new file mode 100644 index 0000000000..0359532f57 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/scope-err.asm @@ -0,0 +1,13 @@ +%define a b +%error a +%scope +%define a c +%error a +%scope +%define a d +%error a +%endscope +%error a +%endscope +%error a +%endscope diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/scope-err.errwarn b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/scope-err.errwarn new file mode 100644 index 0000000000..32cea76ccb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/nasm/tests/scope-err.errwarn @@ -0,0 +1,6 @@ +-:2: warning: b +-:5: warning: c +-:8: warning: d +-:10: warning: c +-:12: warning: b +-:13: error: `%endscope': already popped all levels diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/CMakeLists.txt new file mode 100644 index 0000000000..fc3453861c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/CMakeLists.txt @@ -0,0 +1,3 @@ +YASM_ADD_MODULE(preproc_raw + preprocs/raw/raw-preproc.c + ) diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/Makefile.inc new file mode 100644 index 0000000000..5756ca91f3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/Makefile.inc @@ -0,0 +1,7 @@ +libyasm_a_SOURCES += modules/preprocs/raw/raw-preproc.c + +YASM_MODULES += preproc_raw + +EXTRA_DIST += modules/preprocs/raw/tests/Makefile.inc + +include modules/preprocs/raw/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/raw-preproc.c b/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/raw-preproc.c new file mode 100644 index 0000000000..15fd78361b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/raw-preproc.c @@ -0,0 +1,169 @@ +/* + * Raw preprocessor (preforms NO preprocessing) + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 + +#include + + +#define BSIZE 512 + +typedef struct yasm_preproc_raw { + yasm_preproc_base preproc; /* base structure */ + + FILE *in; + yasm_linemap *cur_lm; + yasm_errwarns *errwarns; +} yasm_preproc_raw; + +yasm_preproc_module yasm_raw_LTX_preproc; + +static yasm_preproc * +raw_preproc_create(const char *in_filename, yasm_symtab *symtab, + yasm_linemap *lm, yasm_errwarns *errwarns) +{ + FILE *f; + yasm_preproc_raw *preproc_raw = yasm_xmalloc(sizeof(yasm_preproc_raw)); + + if (strcmp(in_filename, "-") != 0) { + f = fopen(in_filename, "r"); + if (!f) + yasm__fatal( N_("Could not open input file") ); + } + else + f = stdin; + + preproc_raw->preproc.module = &yasm_raw_LTX_preproc; + preproc_raw->in = f; + preproc_raw->cur_lm = lm; + preproc_raw->errwarns = errwarns; + + return (yasm_preproc *)preproc_raw; +} + +static void +raw_preproc_destroy(yasm_preproc *preproc) +{ + yasm_xfree(preproc); +} + +static char * +raw_preproc_get_line(yasm_preproc *preproc) +{ + yasm_preproc_raw *preproc_raw = (yasm_preproc_raw *)preproc; + int bufsize = BSIZE; + char *buf = yasm_xmalloc((size_t)bufsize); + char *p; + + /* Loop to ensure entire line is read (don't want to limit line length). */ + p = buf; + for (;;) { + if (!fgets(p, bufsize-(p-buf), preproc_raw->in)) { + if (ferror(preproc_raw->in)) { + yasm_error_set(YASM_ERROR_IO, + N_("error when reading from file")); + yasm_errwarn_propagate(preproc_raw->errwarns, + yasm_linemap_get_current(preproc_raw->cur_lm)); + } + break; + } + p += strlen(p); + if (p > buf && p[-1] == '\n') + break; + if ((p-buf)+1 >= bufsize) { + /* Increase size of buffer */ + char *oldbuf = buf; + bufsize *= 2; + buf = yasm_xrealloc(buf, (size_t)bufsize); + p = buf + (p-oldbuf); + } + } + + if (p == buf) { + /* No data; must be at EOF */ + yasm_xfree(buf); + return NULL; + } + + /* Strip the line ending */ + buf[strcspn(buf, "\r\n")] = '\0'; + + return buf; +} + +static size_t +raw_preproc_get_included_file(yasm_preproc *preproc, char *buf, + size_t max_size) +{ + /* no included files */ + return 0; +} + +static void +raw_preproc_add_include_file(yasm_preproc *preproc, const char *filename) +{ + /* no pre-include files */ +} + +static void +raw_preproc_predefine_macro(yasm_preproc *preproc, const char *macronameval) +{ + /* no pre-defining macros */ +} + +static void +raw_preproc_undefine_macro(yasm_preproc *preproc, const char *macroname) +{ + /* no undefining macros */ +} + +static void +raw_preproc_define_builtin(yasm_preproc *preproc, const char *macronameval) +{ + /* no builtin defines */ +} + +static void +raw_preproc_add_standard(yasm_preproc *preproc, const char **macros) +{ + /* no standard macros */ +} + + +/* Define preproc structure -- see preproc.h for details */ +yasm_preproc_module yasm_raw_LTX_preproc = { + "Disable preprocessing", + "raw", + raw_preproc_create, + raw_preproc_destroy, + raw_preproc_get_line, + raw_preproc_get_included_file, + raw_preproc_add_include_file, + raw_preproc_predefine_macro, + raw_preproc_undefine_macro, + raw_preproc_define_builtin, + raw_preproc_add_standard +}; diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/tests/Makefile.inc new file mode 100644 index 0000000000..82923d516f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/tests/Makefile.inc @@ -0,0 +1,5 @@ +TESTS += modules/preprocs/raw/tests/rawpp_test.sh + +EXTRA_DIST += modules/preprocs/raw/tests/rawpp_test.sh +EXTRA_DIST += modules/preprocs/raw/tests/longline.asm +EXTRA_DIST += modules/preprocs/raw/tests/longline.hex diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/tests/longline.asm b/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/tests/longline.asm new file mode 100644 index 0000000000..2d5931a160 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/tests/longline.asm @@ -0,0 +1 @@ +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/tests/longline.hex b/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/tests/longline.hex new file mode 100644 index 0000000000..e69de29bb2 diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/tests/rawpp_test.sh b/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/tests/rawpp_test.sh new file mode 100755 index 0000000000..4033954559 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/raw/tests/rawpp_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh rawpp_test modules/preprocs/raw/tests "raw preproc" "-f bin -r raw" "" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/Makefile.inc new file mode 100644 index 0000000000..a946835123 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/Makefile.inc @@ -0,0 +1,3 @@ +EXTRA_DIST += modules/preprocs/tasm/tests/Makefile.inc + +include modules/preprocs/tasm/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/Makefile.inc new file mode 100644 index 0000000000..e2d56c193a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/Makefile.inc @@ -0,0 +1,7 @@ +TESTS += modules/preprocs/tasm/tests/tasmpp_test.sh + +EXTRA_DIST += modules/preprocs/tasm/tests/tasmpp_test.sh +EXTRA_DIST += modules/preprocs/tasm/tests/tasm-assume-comment.asm +EXTRA_DIST += modules/preprocs/tasm/tests/tasm-assume-comment.hex +EXTRA_DIST += modules/preprocs/tasm/tests/tasm-comment-instr.asm +EXTRA_DIST += modules/preprocs/tasm/tests/tasm-comment-instr.hex diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasm-assume-comment.asm b/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasm-assume-comment.asm new file mode 100644 index 0000000000..6b7cc1bfd0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasm-assume-comment.asm @@ -0,0 +1,3 @@ +assume cs:code,ds:code,es:code ; tiny model (CS=DS=ES) +assume ds:code,es:code; close comment +assume fs:code,gs:code diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasm-assume-comment.hex b/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasm-assume-comment.hex new file mode 100644 index 0000000000..e69de29bb2 diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasm-comment-instr.asm b/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasm-comment-instr.asm new file mode 100644 index 0000000000..d93001b1b3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasm-comment-instr.asm @@ -0,0 +1 @@ +ansi_normal db 0x27,'[0;40;37m$' diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasm-comment-instr.hex b/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasm-comment-instr.hex new file mode 100644 index 0000000000..594d68f088 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasm-comment-instr.hex @@ -0,0 +1,11 @@ +27 +5b +30 +3b +34 +30 +3b +33 +37 +6d +24 diff --git a/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasmpp_test.sh b/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasmpp_test.sh new file mode 100755 index 0000000000..622e5a07d9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/modules/preprocs/tasm/tests/tasmpp_test.sh @@ -0,0 +1,3 @@ +#! /bin/sh +${srcdir}/out_test.sh tasmpp_test modules/preprocs/tasm/tests "tasm preproc" "-f bin -p tasm" "" +exit $? diff --git a/third-party/yasm/yasm-1.3.0/out_test.sh b/third-party/yasm/yasm-1.3.0/out_test.sh new file mode 100755 index 0000000000..b9698e500c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/out_test.sh @@ -0,0 +1,104 @@ +#! /bin/sh + +YASM_TEST_SUITE=1 +export YASM_TEST_SUITE + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +mkdir results >/dev/null 2>&1 + +# +# Verify that all test cases match +# + +passedct=0 +failedct=0 + +echo $ECHO_N "Test $1: $ECHO_C" +for asm in ${srcdir}/$2/*.asm +do + a=`echo ${asm} | sed 's,^.*/,,;s,.asm$,,'` + o=${a}$5 + oh=${a}.hx + og=`echo ${asm} | sed 's,.asm$,.hex,'` + e=${a}.ew + eg=`echo ${asm} | sed 's,.asm$,.errwarn,'` + if test \! -f ${eg}; then + eg=/dev/null + fi + + # Run within a subshell to prevent signal messages from displaying. + sh -c "cat ${asm} | ./yasm $4 -o results/${o} - 2>results/${e}" >/dev/null 2>/dev/null + status=$? + if test $status -gt 128; then + # We should never get a coredump! + echo $ECHO_N "C$ECHO_C" + eval "failed$failedct='C: ${a} crashed!'" + failedct=`expr $failedct + 1` + elif test $status -gt 0; then + echo ${asm} | grep err >/dev/null + if test $? -gt 0; then + # YASM detected errors but shouldn't have! + echo $ECHO_N "E$ECHO_C" + eval "failed$failedct='E: ${a} returned an error code!'" + failedct=`expr $failedct + 1` + else + # We got errors, check to see if they match: + if diff -w ${eg} results/${e} >/dev/null; then + # Error/warnings match, it passes! + echo $ECHO_N ".$ECHO_C" + passedct=`expr $passedct + 1` + else + # Error/warnings don't match. + echo $ECHO_N "W$ECHO_C" + eval "failed$failedct='W: ${a} did not match errors and warnings!'" + failedct=`expr $failedct + 1` + fi + fi + else + echo ${asm} | grep -v err >/dev/null + if test $? -gt 0; then + # YASM didn't detect errors but should have! + echo $ECHO_N "E$ECHO_C" + eval "failed$failedct='E: ${a} did not return an error code!'" + failedct=`expr $failedct + 1` + else + ./test_hd results/${o} > results/${oh} + if diff -w ${og} results/${oh} >/dev/null; then + if diff -w ${eg} results/${e} >/dev/null; then + # Both object file and error/warnings match, it passes! + echo $ECHO_N ".$ECHO_C" + passedct=`expr $passedct + 1` + else + # Error/warnings don't match. + echo $ECHO_N "W$ECHO_C" + eval "failed$failedct='W: ${a} did not match errors and warnings!'" + failedct=`expr $failedct + 1` + fi + else + # Object file doesn't match. + echo $ECHO_N "O$ECHO_C" + eval "failed$failedct='O: ${a} did not match object file!'" + failedct=`expr $failedct + 1` + fi + fi + fi +done + +ct=`expr $failedct + $passedct` +per=`expr 100 \* $passedct / $ct` + +echo " +$passedct-$failedct/$ct $per%" +i=0 +while test $i -lt $failedct; do + eval "failure=\$failed$i" + echo " ** $failure" + i=`expr $i + 1` +done + +exit $failedct diff --git a/third-party/yasm/yasm-1.3.0/plugins/README b/third-party/yasm/yasm-1.3.0/plugins/README new file mode 100644 index 0000000000..63a6a53c2f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/plugins/README @@ -0,0 +1,22 @@ +These directories contain example yasm plugins. +Yasm is only capable of loading plugins when it was built using cmake. +To build yasm with cmake on Unix, from the yasm source tree, do: + mkdir objdir + cd objdir + cmake .. + make + +The plugins are written to be compiled against an *installed* yasm. +Plugins may be loaded on the yasm command line using the -N command line +option, e.g.: + yasm -N ./libdbgmod.so + yasm -N Release/dbgmod.dll + yasm -N /usr/local/lib/libx86mod +(the .so will be automatically appended) +If no directory path is specified, yasm will search in standard library +locations (e.g. LD_LIBRARY_PATH, the rpath of the yasm executable, etc) to +try to load the plugin. Thus the last example (after installing the plugin) +could likely be written: + yasm -N x86mod + +Plugins may override builtin modules like x86. diff --git a/third-party/yasm/yasm-1.3.0/plugins/dbg/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/plugins/dbg/CMakeLists.txt new file mode 100644 index 0000000000..3d4fe68154 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/plugins/dbg/CMakeLists.txt @@ -0,0 +1,56 @@ +PROJECT(dbgmod) +CMAKE_MINIMUM_REQUIRED(VERSION 2.4) + +SET (YASM_POSSIBLE_PATHS + "$ENV{ProgramFiles}/Yasm/Bin" + /usr/bin + /usr/local/bin + ) + +FIND_PROGRAM(YASM_PATH yasm + PATHS ${YASM_POSSIBLE_PATHS} + ) + +SET (YASM_POSSIBLE_INCLUDE_PATHS + "${YASM_PATH}" + "${YASM_PATH}/../include" + "$ENV{ProgramFiles}/Yasm/Include" + /usr/include + /usr/local/include + ) + +FIND_PATH(YASM_INCLUDE_PATH NAMES libyasm.h + DOC "The path to the libyasm include files" + PATHS ${YASM_POSSIBLE_INCLUDE_PATHS} + ) + +IF (NOT YASM_INCLUDE_PATH) + MESSAGE(FATAL_ERROR "Could not find yasm include files") +ENDIF (NOT YASM_INCLUDE_PATH) + +INCLUDE_DIRECTORIES(${YASM_INCLUDE_PATH}) + +SET (YASM_POSSIBLE_LIB_PATHS + "${YASM_PATH}" + "${YASM_PATH}/../lib" + "${YASM_INCLUDE_PATH}/../lib" + "$ENV{ProgramFiles}/Yasm/Lib" + /usr/lib + /usr/local/lib + ) + +FIND_LIBRARY(YASM_LIBRARY + NAMES yasm + DOC "The path to the libyasm library" + PATHS ${YASM_POSSIBLE_LIB_PATHS} + ) + +IF (NOT YASM_LIBRARY) + MESSAGE(FATAL_ERROR "Could not find yasm library") +ENDIF (NOT YASM_LIBRARY) + +ADD_LIBRARY(dbgmod MODULE + init_plugin.c + dbg-objfmt.c + ) +TARGET_LINK_LIBRARIES(dbgmod ${YASM_LIBRARY}) diff --git a/third-party/yasm/yasm-1.3.0/plugins/dbg/README b/third-party/yasm/yasm-1.3.0/plugins/dbg/README new file mode 100644 index 0000000000..d4fdbc58ef --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/plugins/dbg/README @@ -0,0 +1,21 @@ +This directory demonstrates how to build a basic plugin. +It does not need access to the yasm source, only an installed yasm. + +To build: + mkdir objdir + cd objdir + cmake .. + make + +Testing (on Windows): + yasm -N Release/dbgmod.dll -f dbg - + db 5 + ^Z + +Testing (on Unix): + yasm -N ./libdbgmod.so -f dbg - + db 5 + ^D + +Result lines will have PLUGIN prefixed to the function calls; this +demonstrates the plugin is being used rather than the builtin dbg module. diff --git a/third-party/yasm/yasm-1.3.0/plugins/dbg/dbg-objfmt.c b/third-party/yasm/yasm-1.3.0/plugins/dbg/dbg-objfmt.c new file mode 100644 index 0000000000..1aef7c201d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/plugins/dbg/dbg-objfmt.c @@ -0,0 +1,175 @@ +/* + * Debugging object format (used to debug object format module interface) + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 +#include + +#define N_(String) (String) + +typedef struct yasm_objfmt_dbg { + yasm_objfmt_base objfmt; /* base structure */ + + FILE *dbgfile; +} yasm_objfmt_dbg; + +yasm_objfmt_module yasm_dbg_LTX_objfmt; + + +static yasm_objfmt * +dbg_objfmt_create(yasm_object *object) +{ + yasm_objfmt_dbg *objfmt_dbg = yasm_xmalloc(sizeof(yasm_objfmt_dbg)); + + objfmt_dbg->objfmt.module = &yasm_dbg_LTX_objfmt; + + objfmt_dbg->dbgfile = tmpfile(); + if (!objfmt_dbg->dbgfile) { + fprintf(stderr, N_("could not open temporary file")); + return 0; + } + fprintf(objfmt_dbg->dbgfile, "PLUGIN create()\n"); + return (yasm_objfmt *)objfmt_dbg; +} + +static void +dbg_objfmt_output(yasm_object *object, FILE *f, int all_syms, + yasm_errwarns *errwarns) +{ + yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; + char buf[1024]; + size_t i; + + /* Copy temp file to real output file */ + rewind(objfmt_dbg->dbgfile); + while ((i = fread(buf, 1, 1024, objfmt_dbg->dbgfile))) { + if (fwrite(buf, 1, i, f) != i) + break; + } + + /* Reassign objfmt debug file to output file */ + fclose(objfmt_dbg->dbgfile); + objfmt_dbg->dbgfile = f; + + fprintf(objfmt_dbg->dbgfile, "PLUGIN output(f, object->\n"); + yasm_object_print(object, objfmt_dbg->dbgfile, 1); + fprintf(objfmt_dbg->dbgfile, "%d)\n", all_syms); + fprintf(objfmt_dbg->dbgfile, " Symbol Table:\n"); + yasm_symtab_print(object->symtab, objfmt_dbg->dbgfile, 1); +} + +static void +dbg_objfmt_destroy(yasm_objfmt *objfmt) +{ + yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)objfmt; + fprintf(objfmt_dbg->dbgfile, "PLUGIN destroy()\n"); + yasm_xfree(objfmt); +} + +static yasm_section * +dbg_objfmt_add_default_section(yasm_object *object) +{ + yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; + yasm_section *retval; + int isnew; + + retval = yasm_object_get_general(object, ".text", 0, 0, 0, &isnew, 0); + if (isnew) { + fprintf(objfmt_dbg->dbgfile, "(new) "); + yasm_symtab_define_label(object->symtab, ".text", + yasm_section_bcs_first(retval), 1, 0); + yasm_section_set_default(retval, 1); + } + return retval; +} + +static /*@observer@*/ /*@null@*/ yasm_section * +dbg_objfmt_section_switch(yasm_object *object, yasm_valparamhead *valparams, + /*@unused@*/ /*@null@*/ + yasm_valparamhead *objext_valparams, + unsigned long line) +{ + yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; + yasm_valparam *vp; + yasm_section *retval; + int isnew; + + fprintf(objfmt_dbg->dbgfile, "PLUGIN section_switch(headp, "); + yasm_vps_print(valparams, objfmt_dbg->dbgfile); + fprintf(objfmt_dbg->dbgfile, ", "); + yasm_vps_print(objext_valparams, objfmt_dbg->dbgfile); + fprintf(objfmt_dbg->dbgfile, ", %lu), returning ", line); + + vp = yasm_vps_first(valparams); + if (!yasm_vp_string(vp)) { + fprintf(objfmt_dbg->dbgfile, "NULL\n"); + return NULL; + } + retval = yasm_object_get_general(object, yasm_vp_string(vp), 0, 0, 0, + &isnew, line); + if (isnew) { + fprintf(objfmt_dbg->dbgfile, "(new) "); + yasm_symtab_define_label(object->symtab, vp->val, + yasm_section_bcs_first(retval), 1, line); + } + yasm_section_set_default(retval, 0); + fprintf(objfmt_dbg->dbgfile, "\"%s\" section\n", vp->val); + return retval; +} + +static /*@observer@*/ /*@null@*/ yasm_symrec * +dbg_objfmt_get_special_sym(yasm_object *object, const char *name, + const char *parser) +{ + yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; + fprintf(objfmt_dbg->dbgfile, + "PLUGIN get_special_sym(object, \"%s\", \"%s\")\n", + name, parser); + return NULL; +} + +/* Define valid debug formats to use with this object format */ +static const char *dbg_objfmt_dbgfmt_keywords[] = { + "null", + NULL +}; + +/* Define objfmt structure -- see objfmt.h for details */ +yasm_objfmt_module yasm_dbg_LTX_objfmt = { + "Trace of all info passed to object format module", + "dbg", + "dbg", + 32, + dbg_objfmt_dbgfmt_keywords, + "null", + NULL, /* no directives */ + NULL, /* no standard macros */ + dbg_objfmt_create, + dbg_objfmt_output, + dbg_objfmt_destroy, + dbg_objfmt_add_default_section, + dbg_objfmt_section_switch, + dbg_objfmt_get_special_sym +}; diff --git a/third-party/yasm/yasm-1.3.0/plugins/dbg/init_plugin.c b/third-party/yasm/yasm-1.3.0/plugins/dbg/init_plugin.c new file mode 100644 index 0000000000..e8e53dc5b7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/plugins/dbg/init_plugin.c @@ -0,0 +1,13 @@ +#include +#include + +extern yasm_arch_module yasm_dbg_LTX_objfmt; + +#ifdef _MSC_VER +__declspec(dllexport) +#endif +void +yasm_init_plugin(void) +{ + yasm_register_module(YASM_MODULE_OBJFMT, "dbg", &yasm_dbg_LTX_objfmt); +} diff --git a/third-party/yasm/yasm-1.3.0/plugins/x86/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/plugins/x86/CMakeLists.txt new file mode 100644 index 0000000000..d0e10daefa --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/plugins/x86/CMakeLists.txt @@ -0,0 +1,145 @@ +PROJECT(x86mod) +CMAKE_MINIMUM_REQUIRED(VERSION 2.4) + +SET(YASM_SOURCE_DIR "${PROJECT_SOURCE_DIR}/../.." + CACHE STRING "Location of Yasm source") + +IF (NOT YASM_SOURCE_DIR) + MESSAGE(FATAL_ERROR "YASM_SOURCE_DIR must be defined") +ENDIF (NOT YASM_SOURCE_DIR) + +SET(SOURCE_DIR "${YASM_SOURCE_DIR}/modules/arch/x86") + +SET (YASM_POSSIBLE_PATHS + "$ENV{ProgramFiles}/Yasm/Bin" + /usr/bin + /usr/local/bin + ) + +FIND_PROGRAM(YASM_PATH yasm + PATHS ${YASM_POSSIBLE_PATHS} + ) + +SET (GENPERF_POSSIBLE_PATHS + ${YASM_SOURCE_DIR}/objdir/tools/genperf + ${YASM_SOURCE_DIR}/objdir/tools/genperf/Debug + ${YASM_SOURCE_DIR}/objdir/tools/genperf/Release + ) + +FIND_PROGRAM(GENPERF_PATH genperf + DOC "The path to the yasm genperf executable" + PATHS ${GENPERF_POSSIBLE_PATHS} + ) + +IF (NOT GENPERF_PATH) + MESSAGE(FATAL_ERROR "Could not find genperf executable") +ENDIF (NOT GENPERF_PATH) + +SET (YASM_POSSIBLE_INCLUDE_PATHS + "${YASM_PATH}" + "${YASM_PATH}/../include" + "$ENV{ProgramFiles}/Yasm/Include" + /usr/include + /usr/local/include + ) + +FIND_PATH(YASM_INCLUDE_PATH NAMES libyasm.h + DOC "The path to the libyasm include files" + PATHS ${YASM_POSSIBLE_INCLUDE_PATHS} + ) + +IF (NOT YASM_INCLUDE_PATH) + MESSAGE(FATAL_ERROR "Could not find yasm include files") +ENDIF (NOT YASM_INCLUDE_PATH) + +INCLUDE_DIRECTORIES(${YASM_INCLUDE_PATH}) +INCLUDE_DIRECTORIES(${YASM_SOURCE_DIR}) + +SET (YASM_POSSIBLE_LIB_PATHS + "${YASM_PATH}" + "${YASM_PATH}/../lib" + "${YASM_INCLUDE_PATH}/../lib" + "$ENV{ProgramFiles}/Yasm/Lib" + /usr/lib + /usr/local/lib + ) + +FIND_LIBRARY(YASM_LIBRARY + NAMES yasm + DOC "The path to the libyasm library" + PATHS ${YASM_POSSIBLE_LIB_PATHS} + ) + +IF (NOT YASM_LIBRARY) + MESSAGE(FATAL_ERROR "Could not find yasm library") +ENDIF (NOT YASM_LIBRARY) + +INCLUDE(FindPythonInterp) + +IF (NOT PYTHON_EXECUTABLE) + MESSAGE(FATAL_ERROR "Could not find Python executable") +ENDIF (NOT PYTHON_EXECUTABLE) + +INCLUDE_DIRECTORIES(${SOURCE_DIR}) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) + +ADD_CUSTOM_COMMAND( + OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/x86insns.c + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.gperf + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.gperf + COMMAND ${PYTHON_EXECUTABLE} ${SOURCE_DIR}/gen_x86_insn.py + ${CMAKE_CURRENT_BINARY_DIR}/x86insns.c + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.gperf + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.gperf + MAIN_DEPENDENCY ${SOURCE_DIR}/gen_x86_insn.py + ) + +macro (YASM_GENPERF _in_NAME _out_NAME) + add_custom_command( + OUTPUT ${_out_NAME} + COMMAND ${GENPERF_PATH} ${_in_NAME} ${_out_NAME} + MAIN_DEPENDENCY ${_in_NAME} + ) +endmacro (YASM_GENPERF) + +YASM_GENPERF( + ${SOURCE_DIR}/x86cpu.gperf + ${CMAKE_CURRENT_BINARY_DIR}/x86cpu.c + ) + +YASM_GENPERF( + ${SOURCE_DIR}/x86regtmod.gperf + ${CMAKE_CURRENT_BINARY_DIR}/x86regtmod.c + ) + +YASM_GENPERF( + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.gperf + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.c + ) + +YASM_GENPERF( + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.gperf + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.c + ) + +SET(insn_DEPS + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.c + ${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.c + ${CMAKE_CURRENT_BINARY_DIR}/x86insns.c + ) + +SET_SOURCE_FILES_PROPERTIES(${SOURCE_DIR}/x86id.c PROPERTIES + OBJECT_DEPENDS "${insn_DEPS}" + ) + +ADD_LIBRARY(x86mod MODULE + init_plugin.c + ${SOURCE_DIR}/x86arch.c + ${SOURCE_DIR}/x86bc.c + ${SOURCE_DIR}/x86expr.c + ${SOURCE_DIR}/x86id.c + x86cpu.c + x86regtmod.c + ) +TARGET_LINK_LIBRARIES(x86mod ${YASM_LIBRARY}) diff --git a/third-party/yasm/yasm-1.3.0/plugins/x86/README b/third-party/yasm/yasm-1.3.0/plugins/x86/README new file mode 100644 index 0000000000..dddedd0d00 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/plugins/x86/README @@ -0,0 +1,19 @@ +This directory demonstrates how to build a yasm builtin module as a plugin. +This can be useful for integrating custom changes without +rebuilding/reinstalling yasm. + +It requires access to the yasm source. It defaults to assuming it is being +built inside of the yasm source tree. + +To build: + mkdir objdir + cd objdir + cmake .. + make + +Testing (on Windows): + yasm -N Release/x86mod.dll -f x86 ... + +Testing (on Unix): + yasm -N ./libx86mod.so -f x86 ... + diff --git a/third-party/yasm/yasm-1.3.0/plugins/x86/init_plugin.c b/third-party/yasm/yasm-1.3.0/plugins/x86/init_plugin.c new file mode 100644 index 0000000000..d2698b1927 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/plugins/x86/init_plugin.c @@ -0,0 +1,13 @@ +#include +#include + +extern yasm_arch_module yasm_x86_LTX_arch; + +#ifdef _MSC_VER +__declspec(dllexport) +#endif +void +yasm_init_plugin(void) +{ + yasm_register_module(YASM_MODULE_ARCH, "x86", &yasm_x86_LTX_arch); +} diff --git a/third-party/yasm/yasm-1.3.0/po/ChangeLog b/third-party/yasm/yasm-1.3.0/po/ChangeLog new file mode 100644 index 0000000000..3cafdef39a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/po/ChangeLog @@ -0,0 +1,9 @@ +2014-08-10 gettextize + + * Makefile.in.in: Upgrade to gettext-0.18.3. + * Rules-quot: Upgrade to gettext-0.18.3. + +2010-06-15 gettextize + + * Makefile.in.in: Upgrade to gettext-0.17. + diff --git a/third-party/yasm/yasm-1.3.0/po/Makefile.in.in b/third-party/yasm/yasm-1.3.0/po/Makefile.in.in new file mode 100644 index 0000000000..fabdc76c9c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/po/Makefile.in.in @@ -0,0 +1,454 @@ +# Makefile for PO directory in any package using GNU gettext. +# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU General Public +# License but which still want to provide support for the GNU gettext +# functionality. +# Please note that the actual code of GNU gettext is covered by the GNU +# General Public License and is *not* in the public domain. +# +# Origin: gettext-0.18.3 +GETTEXT_MACRO_VERSION = 0.18 + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ + +SED = @SED@ +SHELL = /bin/sh +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datarootdir = @datarootdir@ +datadir = @datadir@ +localedir = @localedir@ +gettextsrcdir = $(datadir)/gettext/po + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ + +# We use $(mkdir_p). +# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as +# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, +# @install_sh@ does not start with $(SHELL), so we add it. +# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined +# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake +# versions, $(mkinstalldirs) and $(install_sh) are unused. +mkinstalldirs = $(SHELL) @install_sh@ -d +install_sh = $(SHELL) @install_sh@ +MKDIR_P = @MKDIR_P@ +mkdir_p = @mkdir_p@ + +GMSGFMT_ = @GMSGFMT@ +GMSGFMT_no = @GMSGFMT@ +GMSGFMT_yes = @GMSGFMT_015@ +GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) +MSGFMT_ = @MSGFMT@ +MSGFMT_no = @MSGFMT@ +MSGFMT_yes = @MSGFMT_015@ +MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) +XGETTEXT_ = @XGETTEXT@ +XGETTEXT_no = @XGETTEXT@ +XGETTEXT_yes = @XGETTEXT_015@ +XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) +MSGMERGE = msgmerge +MSGMERGE_UPDATE = @MSGMERGE@ --update +MSGINIT = msginit +MSGCONV = msgconv +MSGFILTER = msgfilter + +POFILES = @POFILES@ +GMOFILES = @GMOFILES@ +UPDATEPOFILES = @UPDATEPOFILES@ +DUMMYPOFILES = @DUMMYPOFILES@ +DISTFILES.common = Makefile.in.in remove-potcdate.sin \ +$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) +DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ +$(POFILES) $(GMOFILES) \ +$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) + +POTFILES = \ + +CATALOGS = @CATALOGS@ + +# Makevars gets inserted here. (Don't remove this line!) + +.SUFFIXES: +.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update + +.po.mo: + @echo "$(MSGFMT) -c -o $@ $<"; \ + $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ + +.po.gmo: + @lang=`echo $* | sed -e 's,.*/,,'`; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \ + cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo + +.sin.sed: + sed -e '/^#/d' $< > t-$@ + mv t-$@ $@ + + +all: all-@USE_NLS@ + +all-yes: stamp-po +all-no: + +# Ensure that the gettext macros and this Makefile.in.in are in sync. +CHECK_MACRO_VERSION = \ + test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ + || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ + exit 1; \ + } + +# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no +# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because +# we don't want to bother translators with empty POT files). We assume that +# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. +# In this case, stamp-po is a nop (i.e. a phony target). + +# stamp-po is a timestamp denoting the last time at which the CATALOGS have +# been loosely updated. Its purpose is that when a developer or translator +# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, +# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent +# invocations of "make" will do nothing. This timestamp would not be necessary +# if updating the $(CATALOGS) would always touch them; however, the rule for +# $(POFILES) has been designed to not touch files that don't need to be +# changed. +stamp-po: $(srcdir)/$(DOMAIN).pot + @$(CHECK_MACRO_VERSION) + test ! -f $(srcdir)/$(DOMAIN).pot || \ + test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) + @test ! -f $(srcdir)/$(DOMAIN).pot || { \ + echo "touch stamp-po" && \ + echo timestamp > stamp-poT && \ + mv stamp-poT stamp-po; \ + } + +# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', +# otherwise packages like GCC can not be built if only parts of the source +# have been downloaded. + +# This target rebuilds $(DOMAIN).pot; it is an expensive operation. +# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. +# The determination of whether the package xyz is a GNU one is based on the +# heuristic whether some file in the top level directory mentions "GNU xyz". +# If GNU 'find' is available, we avoid grepping through monster files. +$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed + if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \ + LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f -size -10000000c -exec grep 'GNU @PACKAGE@' /dev/null '{}' ';' 2>/dev/null; \ + else \ + LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \ + fi; \ + } | grep -v 'libtool:' >/dev/null; then \ + package_gnu='GNU '; \ + else \ + package_gnu=''; \ + fi; \ + if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ + msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ + else \ + msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ + fi; \ + case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --msgid-bugs-address="$$msgid_bugs_address" \ + ;; \ + *) \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --package-name="$${package_gnu}@PACKAGE@" \ + --package-version='@VERSION@' \ + --msgid-bugs-address="$$msgid_bugs_address" \ + ;; \ + esac + test ! -f $(DOMAIN).po || { \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ + sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ + if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ + else \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + else \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + } + +# This rule has no dependencies: we don't need to update $(DOMAIN).pot at +# every "make" invocation, only create it when it is missing. +# Only "make $(DOMAIN).pot-update" or "make dist" will force an update. +$(srcdir)/$(DOMAIN).pot: + $(MAKE) $(DOMAIN).pot-update + +# This target rebuilds a PO file if $(DOMAIN).pot has changed. +# Note that a PO file is not touched if it doesn't need to be changed. +$(POFILES): $(srcdir)/$(DOMAIN).pot + @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ + if test -f "$(srcdir)/$${lang}.po"; then \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \ + cd $(srcdir) \ + && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ + $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ + *) \ + $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \ + esac; \ + }; \ + else \ + $(MAKE) $${lang}.po-create; \ + fi + + +install: install-exec install-data +install-exec: +install-data: install-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ + for file in $(DISTFILES.common) Makevars.template; do \ + $(INSTALL_DATA) $(srcdir)/$$file \ + $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + for file in Makevars; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +install-data-no: all +install-data-yes: all + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkdir_p) $(DESTDIR)$$dir; \ + if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ + $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ + echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ + fi; \ + done; \ + done + +install-strip: install + +installdirs: installdirs-exec installdirs-data +installdirs-exec: +installdirs-data: installdirs-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ + else \ + : ; \ + fi +installdirs-data-no: +installdirs-data-yes: + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkdir_p) $(DESTDIR)$$dir; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + fi; \ + done; \ + done + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: uninstall-exec uninstall-data +uninstall-exec: +uninstall-data: uninstall-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + for file in $(DISTFILES.common) Makevars.template; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +uninstall-data-no: +uninstall-data-yes: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + done; \ + done + +check: all + +info dvi ps pdf html tags TAGS ctags CTAGS ID: + +mostlyclean: + rm -f remove-potcdate.sed + rm -f stamp-poT + rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po + rm -fr *.o + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f stamp-po $(GMOFILES) + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: + $(MAKE) update-po + @$(MAKE) dist2 +# This is a separate target because 'update-po' must be executed before. +dist2: stamp-po $(DISTFILES) + dists="$(DISTFILES)"; \ + if test "$(PACKAGE)" = "gettext-tools"; then \ + dists="$$dists Makevars.template"; \ + fi; \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + dists="$$dists $(DOMAIN).pot stamp-po"; \ + fi; \ + if test -f $(srcdir)/ChangeLog; then \ + dists="$$dists ChangeLog"; \ + fi; \ + for i in 0 1 2 3 4 5 6 7 8 9; do \ + if test -f $(srcdir)/ChangeLog.$$i; then \ + dists="$$dists ChangeLog.$$i"; \ + fi; \ + done; \ + if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ + for file in $$dists; do \ + if test -f $$file; then \ + cp -p $$file $(distdir) || exit 1; \ + else \ + cp -p $(srcdir)/$$file $(distdir) || exit 1; \ + fi; \ + done + +update-po: Makefile + $(MAKE) $(DOMAIN).pot-update + test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) + $(MAKE) update-gmo + +# General rule for creating PO files. + +.nop.po-create: + @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ + echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ + exit 1 + +# General rule for updating PO files. + +.nop.po-update: + @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ + if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ + cd $(srcdir); \ + if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ + $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ + *) \ + $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ + esac; \ + }; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +$(DUMMYPOFILES): + +update-gmo: Makefile $(GMOFILES) + @: + +# Recreate Makefile by invoking config.status. Explicitly invoke the shell, +# because execution permission bits may not work on the current file system. +# Use @SHELL@, which is the shell determined by autoconf for the use by its +# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. +Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ + cd $(top_builddir) \ + && @SHELL@ ./config.status $(subdir)/$@.in po-directories + +force: + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/third-party/yasm/yasm-1.3.0/po/Makevars b/third-party/yasm/yasm-1.3.0/po/Makevars new file mode 100644 index 0000000000..589f9f1560 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/po/Makevars @@ -0,0 +1,53 @@ +# Makefile variables for PO directory in any package using GNU gettext. + +# Usually the message domain is the same as the package name. +DOMAIN = $(PACKAGE) + +# These two variables depend on the location of this directory. +subdir = po +top_builddir = .. + +# These options get passed to xgettext. +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ + +# This is the copyright holder that gets inserted into the header of the +# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding +# package. (Note that the msgstr strings, extracted from the package's +# sources, belong to the copyright holder of the package.) Translators are +# expected to transfer the copyright for their translations to this person +# or entity, or to disclaim their copyright. The empty string stands for +# the public domain; in this case the translators are expected to disclaim +# their copyright. +COPYRIGHT_HOLDER = Peter Johnson and other YASM developers + +# This is the email address or URL to which the translators shall report +# bugs in the untranslated strings: +# - Strings which are not entire sentences, see the maintainer guidelines +# in the GNU gettext documentation, section 'Preparing Strings'. +# - Strings which use unclear terms or require additional context to be +# understood. +# - Strings which make invalid assumptions about notation of date, time or +# money. +# - Pluralisation problems. +# - Incorrect English spelling. +# - Incorrect formatting. +# It can be your email address, or a mailing list address where translators +# can write to without being subscribed, or the URL of a web page through +# which the translators can contact you. +MSGID_BUGS_ADDRESS = bug-yasm@tortall.net + +# This is the list of locale categories, beyond LC_MESSAGES, for which the +# message catalogs shall be used. It is usually empty. +EXTRA_LOCALE_CATEGORIES = + +# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' +# context. Possible values are "yes" and "no". Set this to yes if the +# package uses functions taking also a message context, like pgettext(), or +# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. +USE_MSGCTXT = no + +# These options get passed to msgmerge. +# Useful options are in particular: +# --previous to keep previous msgids of translated messages, +# --quiet to reduce the verbosity. +MSGMERGE_OPTIONS = diff --git a/third-party/yasm/yasm-1.3.0/po/POTFILES.in b/third-party/yasm/yasm-1.3.0/po/POTFILES.in new file mode 100644 index 0000000000..dc17f9748f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/po/POTFILES.in @@ -0,0 +1,60 @@ +# List of source files containing translatable strings. +# To update, try "find . -name \*.c | xargs grep -c _\( | grep -v :0 | sort" +# Copyright (c) 2001 Peter Johnson + +frontends/yasm/yasm-options.c +frontends/yasm/yasm.c +libyasm/bc-align.c +libyasm/bc-data.c +libyasm/bc-incbin.c +libyasm/bc-org.c +libyasm/bc-reserve.c +libyasm/bitvect.c +libyasm/bytecode.c +libyasm/errwarn.c +libyasm/expr.c +libyasm/file.c +libyasm/floatnum.c +libyasm/hamt.c +libyasm/insn.c +libyasm/intnum.c +libyasm/section.c +libyasm/symrec.c +libyasm/valparam.c +libyasm/value.c +libyasm/xmalloc.c +modules/arch/lc3b/lc3barch.c +modules/arch/lc3b/lc3bbc.c +modules/arch/x86/x86arch.c +modules/arch/x86/x86bc.c +modules/arch/x86/x86expr.c +modules/arch/x86/x86id.c +modules/dbgfmts/codeview/cv-symline.c +modules/dbgfmts/codeview/cv-type.c +modules/dbgfmts/dwarf2/dwarf2-dbgfmt.c +modules/dbgfmts/dwarf2/dwarf2-info.c +modules/dbgfmts/dwarf2/dwarf2-line.c +modules/dbgfmts/stabs/stabs-dbgfmt.c +modules/listfmts/nasm/nasm-listfmt.c +modules/objfmts/bin/bin-objfmt.c +modules/objfmts/coff/coff-objfmt.c +modules/objfmts/coff/win64-except.c +modules/objfmts/dbg/dbg-objfmt.c +modules/objfmts/elf/elf-objfmt.c +modules/objfmts/elf/elf-x86-amd64.c +modules/objfmts/elf/elf-x86-x86.c +modules/objfmts/elf/elf.c +modules/objfmts/macho/macho-objfmt.c +modules/objfmts/rdf/rdf-objfmt.c +modules/objfmts/xdf/xdf-objfmt.c +modules/parsers/gas/gas-parse.c +modules/parsers/gas/gas-parser.c +modules/parsers/gas/gas-token.re +modules/parsers/nasm/nasm-parse.c +modules/parsers/nasm/nasm-token.re +modules/preprocs/cpp/cpp-preproc.c +modules/preprocs/gas/gas-preproc.c +modules/preprocs/gas/gas-eval.c +modules/preprocs/nasm/nasm-preproc.c +modules/preprocs/nasm/nasm-pp.c +modules/preprocs/raw/raw-preproc.c diff --git a/third-party/yasm/yasm-1.3.0/po/Rules-quot b/third-party/yasm/yasm-1.3.0/po/Rules-quot new file mode 100644 index 0000000000..5931e53923 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/po/Rules-quot @@ -0,0 +1,47 @@ +# Special Makefile rules for English message catalogs with quotation marks. + +DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot + +.SUFFIXES: .insert-header .po-update-en + +en@quot.po-create: + $(MAKE) en@quot.po-update +en@boldquot.po-create: + $(MAKE) en@boldquot.po-update + +en@quot.po-update: en@quot.po-update-en +en@boldquot.po-update: en@boldquot.po-update-en + +.insert-header.po-update-en: + @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ + if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + ll=`echo $$lang | sed -e 's/@.*//'`; \ + LC_ALL=C; export LC_ALL; \ + cd $(srcdir); \ + if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "creation of $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +en@quot.insert-header: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header + +en@boldquot.insert-header: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header + +mostlyclean: mostlyclean-quot +mostlyclean-quot: + rm -f *.insert-header diff --git a/third-party/yasm/yasm-1.3.0/po/boldquot.sed b/third-party/yasm/yasm-1.3.0/po/boldquot.sed new file mode 100644 index 0000000000..4b937aa517 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/po/boldquot.sed @@ -0,0 +1,10 @@ +s/"\([^"]*\)"/“\1”/g +s/`\([^`']*\)'/‘\1’/g +s/ '\([^`']*\)' / ‘\1’ /g +s/ '\([^`']*\)'$/ ‘\1’/g +s/^'\([^`']*\)' /‘\1’ /g +s/“”/""/g +s/“/“/g +s/”/”/g +s/‘/‘/g +s/’/’/g diff --git a/third-party/yasm/yasm-1.3.0/po/en@boldquot.header b/third-party/yasm/yasm-1.3.0/po/en@boldquot.header new file mode 100644 index 0000000000..fedb6a06d1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/po/en@boldquot.header @@ -0,0 +1,25 @@ +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# +# This catalog furthermore displays the text between the quotation marks in +# bold face, assuming the VT100/XTerm escape sequences. +# diff --git a/third-party/yasm/yasm-1.3.0/po/en@quot.header b/third-party/yasm/yasm-1.3.0/po/en@quot.header new file mode 100644 index 0000000000..a9647fc35c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/po/en@quot.header @@ -0,0 +1,22 @@ +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# diff --git a/third-party/yasm/yasm-1.3.0/po/insert-header.sin b/third-party/yasm/yasm-1.3.0/po/insert-header.sin new file mode 100644 index 0000000000..b26de01f6c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/po/insert-header.sin @@ -0,0 +1,23 @@ +# Sed script that inserts the file called HEADER before the header entry. +# +# At each occurrence of a line starting with "msgid ", we execute the following +# commands. At the first occurrence, insert the file. At the following +# occurrences, do nothing. The distinction between the first and the following +# occurrences is achieved by looking at the hold space. +/^msgid /{ +x +# Test if the hold space is empty. +s/m/m/ +ta +# Yes it was empty. First occurrence. Read the file. +r HEADER +# Output the file's contents by reading the next line. But don't lose the +# current line while doing this. +g +N +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/third-party/yasm/yasm-1.3.0/po/quot.sed b/third-party/yasm/yasm-1.3.0/po/quot.sed new file mode 100644 index 0000000000..0122c46318 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/po/quot.sed @@ -0,0 +1,6 @@ +s/"\([^"]*\)"/“\1”/g +s/`\([^`']*\)'/‘\1’/g +s/ '\([^`']*\)' / ‘\1’ /g +s/ '\([^`']*\)'$/ ‘\1’/g +s/^'\([^`']*\)' /‘\1’ /g +s/“”/""/g diff --git a/third-party/yasm/yasm-1.3.0/po/remove-potcdate.sin b/third-party/yasm/yasm-1.3.0/po/remove-potcdate.sin new file mode 100644 index 0000000000..2436c49e78 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/po/remove-potcdate.sin @@ -0,0 +1,19 @@ +# Sed script that remove the POT-Creation-Date line in the header entry +# from a POT file. +# +# The distinction between the first and the following occurrences of the +# pattern is achieved by looking at the hold space. +/^"POT-Creation-Date: .*"$/{ +x +# Test if the hold space is empty. +s/P/P/ +ta +# Yes it was empty. First occurrence. Remove the line. +g +d +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/third-party/yasm/yasm-1.3.0/po/stamp-po b/third-party/yasm/yasm-1.3.0/po/stamp-po new file mode 100644 index 0000000000..9788f70238 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/po/stamp-po @@ -0,0 +1 @@ +timestamp diff --git a/third-party/yasm/yasm-1.3.0/po/yasm.pot b/third-party/yasm/yasm-1.3.0/po/yasm.pot new file mode 100644 index 0000000000..82521a6da7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/po/yasm.pot @@ -0,0 +1,2425 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Peter Johnson and other YASM developers +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: yasm 1.3.0\n" +"Report-Msgid-Bugs-To: bug-yasm@tortall.net\n" +"POT-Creation-Date: 2014-08-10 22:26-0700\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: frontends/yasm/yasm-options.c:86 +#, c-format +msgid "option `--%s' needs an argument!" +msgstr "" + +#: frontends/yasm/yasm-options.c:106 frontends/yasm/yasm-options.c:144 +#, c-format +msgid "warning: unrecognized option `%s'" +msgstr "" + +#: frontends/yasm/yasm-options.c:125 +#, c-format +msgid "option `-%c' needs an argument!" +msgstr "" + +#: frontends/yasm/yasm-options.c:179 frontends/yasm/yasm-options.c:187 +msgid "param" +msgstr "" + +#: frontends/yasm/yasm.c:150 +msgid "show version text" +msgstr "" + +#: frontends/yasm/yasm.c:152 +msgid "show license text" +msgstr "" + +#: frontends/yasm/yasm.c:154 +msgid "show help text" +msgstr "" + +#: frontends/yasm/yasm.c:156 +msgid "select architecture (list with -a help)" +msgstr "" + +#: frontends/yasm/yasm.c:156 +msgid "arch" +msgstr "" + +#: frontends/yasm/yasm.c:158 +msgid "select parser (list with -p help)" +msgstr "" + +#: frontends/yasm/yasm.c:158 frontends/yasm/yasm.c:420 +#: frontends/yasm/yasm.c:466 frontends/yasm/yasm.c:698 +#: frontends/yasm/yasm.c:900 +msgid "parser" +msgstr "" + +#: frontends/yasm/yasm.c:160 +msgid "select preprocessor (list with -r help)" +msgstr "" + +#: frontends/yasm/yasm.c:160 +msgid "preproc" +msgstr "" + +#: frontends/yasm/yasm.c:162 +msgid "select object format (list with -f help)" +msgstr "" + +#: frontends/yasm/yasm.c:162 +msgid "format" +msgstr "" + +#: frontends/yasm/yasm.c:164 +msgid "select debugging format (list with -g help)" +msgstr "" + +#: frontends/yasm/yasm.c:164 +msgid "debug" +msgstr "" + +#: frontends/yasm/yasm.c:166 +msgid "select list format (list with -L help)" +msgstr "" + +#: frontends/yasm/yasm.c:166 +msgid "list" +msgstr "" + +#: frontends/yasm/yasm.c:168 +msgid "name of list-file output" +msgstr "" + +#: frontends/yasm/yasm.c:168 +msgid "listfile" +msgstr "" + +#: frontends/yasm/yasm.c:170 +msgid "name of object-file output" +msgstr "" + +#: frontends/yasm/yasm.c:170 frontends/yasm/yasm.c:172 +#: frontends/yasm/yasm.c:194 +msgid "filename" +msgstr "" + +#: frontends/yasm/yasm.c:172 +msgid "name of map-file output" +msgstr "" + +#: frontends/yasm/yasm.c:174 +msgid "select machine (list with -m help)" +msgstr "" + +#: frontends/yasm/yasm.c:174 frontends/yasm/yasm.c:414 +msgid "machine" +msgstr "" + +#: frontends/yasm/yasm.c:176 +msgid "treat all sized operands as if `strict' was used" +msgstr "" + +#: frontends/yasm/yasm.c:178 +msgid "inhibits warning messages" +msgstr "" + +#: frontends/yasm/yasm.c:180 +msgid "enables/disables warning" +msgstr "" + +#: frontends/yasm/yasm.c:182 +msgid "generate Makefile dependencies on stdout" +msgstr "" + +#: frontends/yasm/yasm.c:184 +msgid "redirect error messages to file" +msgstr "" + +#: frontends/yasm/yasm.c:184 +msgid "file" +msgstr "" + +#: frontends/yasm/yasm.c:186 +msgid "redirect error messages to stdout" +msgstr "" + +#: frontends/yasm/yasm.c:188 +msgid "preprocess only (writes output to stdout by default)" +msgstr "" + +#: frontends/yasm/yasm.c:190 frontends/yasm/yasm.c:192 +msgid "add include path" +msgstr "" + +#: frontends/yasm/yasm.c:190 frontends/yasm/yasm.c:192 +msgid "path" +msgstr "" + +#: frontends/yasm/yasm.c:194 +msgid "pre-include file" +msgstr "" + +#: frontends/yasm/yasm.c:196 frontends/yasm/yasm.c:198 +msgid "pre-define a macro, optionally to value" +msgstr "" + +#: frontends/yasm/yasm.c:196 frontends/yasm/yasm.c:198 +msgid "macro[=value]" +msgstr "" + +#: frontends/yasm/yasm.c:200 frontends/yasm/yasm.c:202 +msgid "undefine a macro" +msgstr "" + +#: frontends/yasm/yasm.c:200 frontends/yasm/yasm.c:202 +msgid "macro" +msgstr "" + +#: frontends/yasm/yasm.c:204 +msgid "select error/warning message style (`gnu' or `vc')" +msgstr "" + +#: frontends/yasm/yasm.c:204 +msgid "style" +msgstr "" + +#: frontends/yasm/yasm.c:206 +msgid "prepend argument to name of all external symbols" +msgstr "" + +#: frontends/yasm/yasm.c:206 +msgid "prefix" +msgstr "" + +#: frontends/yasm/yasm.c:208 frontends/yasm/yasm.c:210 +msgid "append argument to name of all external symbols" +msgstr "" + +#: frontends/yasm/yasm.c:208 frontends/yasm/yasm.c:210 +msgid "suffix" +msgstr "" + +#: frontends/yasm/yasm.c:213 +msgid "load plugin module" +msgstr "" + +#: frontends/yasm/yasm.c:213 +msgid "plugin" +msgstr "" + +#: frontends/yasm/yasm.c:227 +msgid "" +"usage: yasm [option]* file\n" +"Options:\n" +msgstr "" + +#: frontends/yasm/yasm.c:230 +msgid "" +"\n" +"Files are asm sources to be assembled.\n" +"\n" +"Sample invocation:\n" +" yasm -f elf -o object.o source.asm\n" +"\n" +"Report bugs to bug-yasm@tortall.net\n" +msgstr "" + +#: frontends/yasm/yasm.c:413 frontends/yasm/yasm.c:418 +#: frontends/yasm/yasm.c:464 +#, c-format +msgid "%s: `%s' is not a valid %s for %s `%s'" +msgstr "" + +#: frontends/yasm/yasm.c:414 frontends/yasm/yasm.c:419 +#: frontends/yasm/yasm.c:424 frontends/yasm/yasm.c:439 +#: frontends/yasm/yasm.c:464 frontends/yasm/yasm.c:608 +#: frontends/yasm/yasm.c:620 frontends/yasm/yasm.c:665 +#: frontends/yasm/yasm.c:675 frontends/yasm/yasm.c:697 +#: frontends/yasm/yasm.c:709 frontends/yasm/yasm.c:732 +#: frontends/yasm/yasm.c:743 frontends/yasm/yasm.c:881 +#: frontends/yasm/yasm.c:900 frontends/yasm/yasm.c:919 +#: frontends/yasm/yasm.c:939 frontends/yasm/yasm.c:963 +#: frontends/yasm/yasm.c:983 frontends/yasm/yasm.c:1366 libyasm/errwarn.c:180 +msgid "FATAL" +msgstr "" + +#: frontends/yasm/yasm.c:415 frontends/yasm/yasm.c:420 +#: frontends/yasm/yasm.c:676 frontends/yasm/yasm.c:685 +#: frontends/yasm/yasm.c:882 +msgid "architecture" +msgstr "" + +#: frontends/yasm/yasm.c:424 +#, c-format +msgid "%s: unknown architecture error" +msgstr "" + +#: frontends/yasm/yasm.c:465 frontends/yasm/yasm.c:710 +#: frontends/yasm/yasm.c:920 +msgid "preprocessor" +msgstr "" + +#: frontends/yasm/yasm.c:513 +#, c-format +msgid "warning: object format `%s' does not support map files" +msgstr "" + +#: frontends/yasm/yasm.c:608 +#, c-format +msgid "%s: could not initialize BitVector" +msgstr "" + +#: frontends/yasm/yasm.c:620 +#, c-format +msgid "%s: could not load standard modules" +msgstr "" + +#: frontends/yasm/yasm.c:665 frontends/yasm/yasm.c:675 +#: frontends/yasm/yasm.c:697 frontends/yasm/yasm.c:709 +#: frontends/yasm/yasm.c:732 frontends/yasm/yasm.c:743 +#, c-format +msgid "%s: could not load default %s" +msgstr "" + +#: frontends/yasm/yasm.c:666 frontends/yasm/yasm.c:940 +msgid "object format" +msgstr "" + +#: frontends/yasm/yasm.c:684 +#, c-format +msgid "Available %s for %s `%s':\n" +msgstr "" + +#: frontends/yasm/yasm.c:684 +msgid "machines" +msgstr "" + +#: frontends/yasm/yasm.c:718 +msgid "No input files specified" +msgstr "" + +#: frontends/yasm/yasm.c:733 frontends/yasm/yasm.c:984 +msgid "list format" +msgstr "" + +#: frontends/yasm/yasm.c:744 frontends/yasm/yasm.c:964 +msgid "debug format" +msgstr "" + +#: frontends/yasm/yasm.c:761 +#, c-format +msgid "could not open file `%s'" +msgstr "" + +#: frontends/yasm/yasm.c:835 +msgid "" +"warning: can open only one input file, only the last file will be processed" +msgstr "" + +#: frontends/yasm/yasm.c:876 frontends/yasm/yasm.c:895 +#: frontends/yasm/yasm.c:914 frontends/yasm/yasm.c:934 +#: frontends/yasm/yasm.c:958 frontends/yasm/yasm.c:978 +#, c-format +msgid "Available yasm %s:\n" +msgstr "" + +#: frontends/yasm/yasm.c:876 +msgid "architectures" +msgstr "" + +#: frontends/yasm/yasm.c:881 frontends/yasm/yasm.c:900 +#: frontends/yasm/yasm.c:919 frontends/yasm/yasm.c:939 +#: frontends/yasm/yasm.c:963 frontends/yasm/yasm.c:983 +#, c-format +msgid "%s: unrecognized %s `%s'" +msgstr "" + +#: frontends/yasm/yasm.c:895 +msgid "parsers" +msgstr "" + +#: frontends/yasm/yasm.c:914 +msgid "preprocessors" +msgstr "" + +#: frontends/yasm/yasm.c:934 +msgid "object formats" +msgstr "" + +#: frontends/yasm/yasm.c:958 +msgid "debug formats" +msgstr "" + +#: frontends/yasm/yasm.c:978 +msgid "list formats" +msgstr "" + +#: frontends/yasm/yasm.c:996 +msgid "warning: can output to only one list file, last specified used" +msgstr "" + +#: frontends/yasm/yasm.c:1012 +msgid "warning: can output to only one object file, last specified used" +msgstr "" + +#: frontends/yasm/yasm.c:1028 +msgid "warning: can output to only one map file, last specified used" +msgstr "" + +#: frontends/yasm/yasm.c:1105 +msgid "warning: can output to only one error file, last specified used" +msgstr "" + +#: frontends/yasm/yasm.c:1163 +#, c-format +msgid "warning: unrecognized message style `%s'" +msgstr "" + +#: frontends/yasm/yasm.c:1209 +#, c-format +msgid "warning: could not load plugin `%s'" +msgstr "" + +#: frontends/yasm/yasm.c:1303 +#, c-format +msgid "file name already ends in `.%s': output will be in `%s'" +msgstr "" + +#: frontends/yasm/yasm.c:1312 +#, c-format +msgid "file name already has no extension: output will be in `%s'" +msgstr "" + +#: frontends/yasm/yasm.c:1354 libyasm/errwarn.c:165 +#, c-format +msgid "INTERNAL ERROR at %s, line %u: %s\n" +msgstr "" + +#: frontends/yasm/yasm.c:1394 frontends/yasm/yasm.c:1396 +#: frontends/yasm/yasm.c:1400 frontends/yasm/yasm.c:1403 +msgid "error: " +msgstr "" + +#: frontends/yasm/yasm.c:1412 frontends/yasm/yasm.c:1415 +msgid "warning: " +msgstr "" + +#: libyasm/bc-align.c:110 +msgid "align boundary must be a constant" +msgstr "" + +#: libyasm/bc-align.c:113 +msgid "align fill must be a constant" +msgstr "" + +#: libyasm/bc-align.c:116 +msgid "align maximum skip must be a constant" +msgstr "" + +#: libyasm/bc-align.c:205 +msgid "could not find any code alignment size" +msgstr "" + +#: libyasm/bc-align.c:218 +#, c-format +msgid "invalid alignment size %d" +msgstr "" + +#: libyasm/bc-data.c:119 +msgid "data expression too complex" +msgstr "" + +#: libyasm/bc-data.c:128 +msgid "LEB128 requires constant values" +msgstr "" + +#: libyasm/bc-data.c:137 +msgid "negative value in unsigned LEB128" +msgstr "" + +#: libyasm/bc-data.c:146 libyasm/bytecode.c:182 +msgid "multiple expression too complex" +msgstr "" + +#: libyasm/bc-data.c:149 libyasm/bytecode.c:185 +msgid "multiple expression not absolute" +msgstr "" + +#: libyasm/bc-data.c:188 libyasm/bc-data.c:243 +msgid "non-constant in data_tobytes" +msgstr "" + +#: libyasm/bc-data.c:437 +msgid "LEB128 does not allow string constants" +msgstr "" + +#: libyasm/bc-data.c:511 libyasm/bytecode.c:362 +msgid "could not determine multiple" +msgstr "" + +#: libyasm/bc-data.c:515 libyasm/bytecode.c:258 libyasm/bytecode.c:366 +msgid "multiple is negative" +msgstr "" + +#: libyasm/bc-incbin.c:115 +msgid "start expression too complex" +msgstr "" + +#: libyasm/bc-incbin.c:118 +msgid "start expression not absolute" +msgstr "" + +#: libyasm/bc-incbin.c:123 +msgid "maximum length expression too complex" +msgstr "" + +#: libyasm/bc-incbin.c:126 +msgid "maximum length expression not absolute" +msgstr "" + +#: libyasm/bc-incbin.c:147 libyasm/bc-incbin.c:160 +msgid "incbin does not yet understand non-constant" +msgstr "" + +#: libyasm/bc-incbin.c:169 libyasm/bc-incbin.c:220 +#, c-format +msgid "`incbin': unable to open file `%s'" +msgstr "" + +#: libyasm/bc-incbin.c:175 libyasm/bc-incbin.c:228 +#, c-format +msgid "`incbin': unable to seek on file `%s'" +msgstr "" + +#: libyasm/bc-incbin.c:185 +#, c-format +msgid "`incbin': start past end of file `%s'" +msgstr "" + +#: libyasm/bc-incbin.c:213 +msgid "could not determine start in bc_tobytes_incbin" +msgstr "" + +#: libyasm/bc-incbin.c:237 +#, c-format +msgid "`incbin': unable to read %lu bytes from file `%s'" +msgstr "" + +#: libyasm/bc-org.c:113 libyasm/bc-org.c:134 +msgid "ORG overlap with already existing data" +msgstr "" + +#: libyasm/bc-reserve.c:122 +msgid "bc_reserve_tobytes called" +msgstr "" + +#: libyasm/bytecode.c:60 +msgid "bytecode length cannot be calculated" +msgstr "" + +#: libyasm/bytecode.c:69 +msgid "bytecode does not have any dependent spans" +msgstr "" + +#: libyasm/bytecode.c:80 +msgid "bytecode cannot be converted to bytes" +msgstr "" + +#: libyasm/bytecode.c:229 +msgid "got empty bytecode in yasm_bc_elem_size" +msgstr "" + +#: libyasm/bytecode.c:246 +msgid "got empty bytecode in yasm_bc_calc_len" +msgstr "" + +#: libyasm/bytecode.c:265 +msgid "expression must not contain floating point value" +msgstr "" + +#: libyasm/bytecode.c:292 +msgid "got empty bytecode in yasm_bc_expand" +msgstr "" + +#: libyasm/bytecode.c:338 +msgid "got empty bytecode in bc_tobytes" +msgstr "" + +#: libyasm/bytecode.c:346 +msgid "written length does not match optimized length" +msgstr "" + +#: libyasm/errwarn.c:238 +msgid "Unexpected errwarn insert action" +msgstr "" + +#: libyasm/errwarn.c:498 +msgid "warnings being treated as errors" +msgstr "" + +#: libyasm/expr.c:79 libyasm/expr.c:102 +msgid "could not find expritem in pool" +msgstr "" + +#: libyasm/expr.c:95 +msgid "Right side of expression must exist" +msgstr "" + +#: libyasm/expr.c:137 +msgid "too many expritems" +msgstr "" + +#: libyasm/expr.c:828 libyasm/section.c:977 libyasm/section.c:1186 +msgid "circular reference detected" +msgstr "" + +#: libyasm/file.c:171 +msgid "octal value out of range" +msgstr "" + +#: libyasm/file.c:255 +msgid "could not determine current working directory" +msgstr "" + +#: libyasm/floatnum.c:519 +msgid "Unsupported floating-point arithmetic operation" +msgstr "" + +#: libyasm/floatnum.c:596 +msgid "Both underflow and overflow set" +msgstr "" + +#: libyasm/floatnum.c:620 +msgid "Byte length of BitVector does not match bit length" +msgstr "" + +#: libyasm/floatnum.c:681 +msgid "unsupported floatnum functionality" +msgstr "" + +#: libyasm/floatnum.c:697 +msgid "Invalid float conversion size" +msgstr "" + +#: libyasm/floatnum.c:704 +msgid "underflow in floating point expression" +msgstr "" + +#: libyasm/floatnum.c:707 +msgid "overflow in floating point expression" +msgstr "" + +#: libyasm/hamt.c:69 +msgid "Subtrie is seen as subtrie before flag is set (misaligned?)" +msgstr "" + +#: libyasm/hamt.c:75 +msgid "Value is seen as subtrie (misaligned?)" +msgstr "" + +#: libyasm/hamt.c:241 +msgid "Data is seen as subtrie (misaligned?)" +msgstr "" + +#: libyasm/insn.c:49 modules/arch/x86/x86id.c:1514 +msgid "multiple segment overrides, using leftmost" +msgstr "" + +#: libyasm/intnum.c:139 +msgid "invalid decimal literal" +msgstr "" + +#: libyasm/intnum.c:143 libyasm/intnum.c:163 libyasm/intnum.c:183 +#: libyasm/intnum.c:203 libyasm/intnum.c:357 libyasm/intnum.c:374 +msgid "Numeric constant too large for internal format" +msgstr "" + +#: libyasm/intnum.c:159 +msgid "invalid binary literal" +msgstr "" + +#: libyasm/intnum.c:179 +msgid "invalid octal literal" +msgstr "" + +#: libyasm/intnum.c:199 +msgid "invalid hex literal" +msgstr "" + +#: libyasm/intnum.c:221 libyasm/intnum.c:267 +msgid "Character constant too large for internal format" +msgstr "" + +#: libyasm/intnum.c:380 libyasm/intnum.c:801 libyasm/intnum.c:832 +msgid "big endian not implemented" +msgstr "" + +#: libyasm/intnum.c:438 +msgid "operation needs an operand" +msgstr "" + +#: libyasm/intnum.c:457 libyasm/intnum.c:465 libyasm/intnum.c:474 +#: libyasm/intnum.c:482 +msgid "divide by zero" +msgstr "" + +#: libyasm/intnum.c:582 libyasm/intnum.c:586 libyasm/intnum.c:590 +#, c-format +msgid "invalid use of '%s'" +msgstr "" + +#: libyasm/intnum.c:599 +msgid "invalid operation in intnum calculation" +msgstr "" + +#: libyasm/intnum.c:736 libyasm/intnum.c:768 +msgid "unknown intnum type" +msgstr "" + +#: libyasm/intnum.c:787 +msgid "destination too large" +msgstr "" + +#: libyasm/intnum.c:792 +#, c-format +msgid "value does not fit in signed %d bit field" +msgstr "" + +#: libyasm/intnum.c:796 +#, c-format +msgid "value does not fit in %d bit field" +msgstr "" + +#: libyasm/intnum.c:814 +msgid "misaligned value, truncating to boundary" +msgstr "" + +#: libyasm/section.c:136 +#, c-format +msgid "no size specified in %s declaration" +msgstr "" + +#: libyasm/section.c:160 +#, c-format +msgid "invalid argument to directive `%s'" +msgstr "" + +#: libyasm/section.c:248 +#, c-format +msgid "object format `%s' does not support architecture `%s' machine `%s'" +msgstr "" + +#: libyasm/section.c:274 +#, c-format +msgid "`%s' is not a valid debug format for object format `%s'" +msgstr "" + +#: libyasm/section.c:283 +#, c-format +msgid "debug format `%s' does not work with object format `%s'" +msgstr "" + +#: libyasm/section.c:571 +msgid "NULL destroy function given to add_reloc" +msgstr "" + +#: libyasm/section.c:573 +msgid "different destroy function given to add_reloc" +msgstr "" + +#: libyasm/section.c:948 libyasm/section.c:1418 +msgid "could not calculate bc distance" +msgstr "" + +#: libyasm/section.c:1350 +msgid "cannot combine multiples and setting assembly position" +msgstr "" + +#: libyasm/section.c:1384 +msgid "secondary expansion of an external/complex value" +msgstr "" + +#: libyasm/section.c:1553 +msgid "org/align went to negative offset" +msgstr "" + +#: libyasm/symrec.c:302 +#, c-format +msgid "`%s' previously defined here" +msgstr "" + +#: libyasm/symrec.c:303 +#, c-format +msgid "redefinition of `%s'" +msgstr "" + +#: libyasm/symrec.c:308 +#, c-format +msgid "`%s' both defined and declared extern" +msgstr "" + +#: libyasm/symrec.c:399 +#, c-format +msgid "duplicate definition of `%s'; first defined on line %lu" +msgstr "" + +#: libyasm/symrec.c:421 +#, c-format +msgid "undefined symbol `%s' (first use)" +msgstr "" + +#: libyasm/symrec.c:442 +msgid " (Each undefined symbol is reported only once.)" +msgstr "" + +#: libyasm/valparam.c:50 modules/parsers/nasm/nasm-parse.c:1575 +#: modules/parsers/nasm/nasm-parse.c:1611 +#, c-format +msgid "directive `%s' requires an argument" +msgstr "" + +#: libyasm/valparam.c:59 +#, c-format +msgid "directive `%s' requires an identifier parameter" +msgstr "" + +#: libyasm/valparam.c:314 +#, c-format +msgid "argument to `%s' is not an expression" +msgstr "" + +#: libyasm/valparam.c:335 modules/objfmts/rdf/rdf-objfmt.c:617 +#, c-format +msgid "argument to `%s' is not an integer" +msgstr "" + +#: libyasm/valparam.c:357 +#, c-format +msgid "argument to `%s' is not a string or identifier" +msgstr "" + +#: libyasm/valparam.c:372 libyasm/valparam.c:378 +#: modules/objfmts/elf/elf-objfmt.c:246 modules/objfmts/rdf/rdf-objfmt.c:634 +#, c-format +msgid "Unrecognized qualifier `%s'" +msgstr "" + +#: libyasm/valparam.c:380 +msgid "Unrecognized string qualifier" +msgstr "" + +#: libyasm/valparam.c:382 +msgid "Unrecognized numeric qualifier" +msgstr "" + +#: libyasm/value.c:165 +#, c-format +msgid "expression on line %d has too many add terms; internal limit of 32" +msgstr "" + +#: libyasm/value.c:539 +msgid "unexpected expr term type" +msgstr "" + +#: libyasm/value.c:649 +msgid "floating point expression too complex" +msgstr "" + +#: libyasm/value.c:670 +msgid "expression too complex" +msgstr "" + +#: libyasm/xmalloc.c:71 libyasm/xmalloc.c:86 libyasm/xmalloc.c:103 +msgid "out of memory" +msgstr "" + +#: modules/arch/lc3b/lc3barch.c:146 +msgid "LC-3b does not support floating point" +msgstr "" + +#: modules/arch/lc3b/lc3bbc.c:163 +msgid "jump target out of range" +msgstr "" + +#: modules/arch/lc3b/lc3bbc.c:234 +msgid "Unrecognized immediate type" +msgstr "" + +#: modules/arch/x86/x86arch.c:140 +msgid "ignoring default rel in non-64-bit mode" +msgstr "" + +#: modules/arch/x86/x86arch.c:166 modules/arch/x86/x86arch.c:173 +#: modules/arch/x86/x86arch.c:195 +#, c-format +msgid "invalid argument to [%s]" +msgstr "" + +#: modules/arch/x86/x86arch.c:454 +msgid "Invalid mode_bits in x86_get_fill" +msgstr "" + +#: modules/arch/x86/x86arch.c:483 modules/arch/x86/x86arch.c:578 +msgid "unknown register size" +msgstr "" + +#: modules/arch/x86/x86arch.c:514 +msgid "bad register group" +msgstr "" + +#: modules/arch/x86/x86bc.c:123 modules/arch/x86/x86bc.c:131 +msgid "cannot use A/B/C/DH with instruction needing REX" +msgstr "" + +#: modules/arch/x86/x86bc.c:165 +msgid "effective address too complex" +msgstr "" + +#: modules/arch/x86/x86bc.c:296 +msgid "multiple XACQUIRE/XRELEASE prefixes, using leftmost" +msgstr "" + +#: modules/arch/x86/x86bc.c:303 +msgid "multiple LOCK or REP prefixes, using leftmost" +msgstr "" + +#: modules/arch/x86/x86bc.c:315 modules/arch/x86/x86bc.c:332 +msgid "ignoring REX prefix on jump" +msgstr "" + +#: modules/arch/x86/x86bc.c:318 modules/arch/x86/x86bc.c:335 +msgid "REX prefix not allowed on this instruction, ignoring" +msgstr "" + +#: modules/arch/x86/x86bc.c:340 +msgid "overriding generated REX prefix" +msgstr "" + +#: modules/arch/x86/x86bc.c:343 +msgid "multiple REX prefixes, using leftmost" +msgstr "" + +#: modules/arch/x86/x86bc.c:703 modules/arch/x86/x86bc.c:986 +msgid "near jump does not exist" +msgstr "" + +#: modules/arch/x86/x86bc.c:717 modules/arch/x86/x86bc.c:958 +msgid "short jump does not exist" +msgstr "" + +#: modules/arch/x86/x86bc.c:764 modules/objfmts/coff/win64-except.c:275 +msgid "unrecognized span id" +msgstr "" + +#: modules/arch/x86/x86bc.c:771 +msgid "short jump out of range" +msgstr "" + +#: modules/arch/x86/x86bc.c:776 +msgid "trying to expand an already-near jump" +msgstr "" + +#: modules/arch/x86/x86bc.c:864 +msgid "x86: REX.WXB set, but 2-byte VEX" +msgstr "" + +#: modules/arch/x86/x86bc.c:867 +msgid "x86: got a REX prefix in non-64-bit mode" +msgstr "" + +#: modules/arch/x86/x86bc.c:880 +msgid "invalid Mod/RM in x86 tobytes_insn" +msgstr "" + +#: modules/arch/x86/x86bc.c:886 +msgid "invalid SIB in x86 tobytes_insn" +msgstr "" + +#: modules/arch/x86/x86bc.c:1014 +msgid "jump op_sel cannot be JMP_NONE in tobytes" +msgstr "" + +#: modules/arch/x86/x86bc.c:1016 +msgid "unrecognized relative jump op_sel" +msgstr "" + +#: modules/arch/x86/x86expr.c:223 +msgid "Register expression not ADD or EXPN" +msgstr "" + +#: modules/arch/x86/x86expr.c:360 +msgid "Non-integer value in reg expn" +msgstr "" + +#: modules/arch/x86/x86expr.c:417 +msgid "unexpected expr op" +msgstr "" + +#: modules/arch/x86/x86expr.c:458 +msgid "invalid displacement size; fixed" +msgstr "" + +#: modules/arch/x86/x86expr.c:471 modules/arch/x86/x86expr.c:607 +msgid "invalid effective address (displacement size)" +msgstr "" + +#: modules/arch/x86/x86expr.c:480 +msgid "strange EA displacement size" +msgstr "" + +#: modules/arch/x86/x86expr.c:682 modules/arch/x86/x86expr.c:1026 +msgid "invalid effective address (64-bit in non-64-bit mode)" +msgstr "" + +#: modules/arch/x86/x86expr.c:688 +msgid "RIP-relative directive ignored in non-64-bit mode" +msgstr "" + +#: modules/arch/x86/x86expr.c:703 modules/arch/x86/x86expr.c:730 +#: modules/arch/x86/x86expr.c:753 modules/arch/x86/x86expr.c:789 +#: modules/arch/x86/x86expr.c:797 modules/arch/x86/x86expr.c:808 +#: modules/arch/x86/x86expr.c:819 modules/arch/x86/x86expr.c:977 +#: modules/arch/x86/x86expr.c:993 modules/arch/x86/x86expr.c:1009 +msgid "invalid effective address" +msgstr "" + +#: modules/arch/x86/x86expr.c:961 modules/arch/x86/x86expr.c:1038 +#: modules/arch/x86/x86id.c:1401 +msgid "16-bit addresses not supported in 64-bit mode" +msgstr "" + +#: modules/arch/x86/x86expr.c:1055 +msgid "invalid floating point constant size" +msgstr "" + +#: modules/arch/x86/x86id.c:436 modules/arch/x86/x86id.c:456 +msgid "jump target segment too complex" +msgstr "" + +#: modules/arch/x86/x86id.c:440 modules/arch/x86/x86id.c:460 +msgid "jump target offset too complex" +msgstr "" + +#: modules/arch/x86/x86id.c:449 modules/arch/x86/x86id.c:524 +msgid "jump target expression too complex" +msgstr "" + +#: modules/arch/x86/x86id.c:464 +msgid "didn't get FAR expression in jmpfar" +msgstr "" + +#: modules/arch/x86/x86id.c:518 modules/arch/x86/x86id.c:1270 +#: modules/arch/x86/x86id.c:1308 modules/arch/x86/x86id.c:1322 +#: modules/arch/x86/x86id.c:1333 modules/arch/x86/x86id.c:1343 +#: modules/arch/x86/x86id.c:1347 modules/arch/x86/x86id.c:1361 +#: modules/arch/x86/x86id.c:1371 modules/arch/x86/x86id.c:1388 +#: modules/arch/x86/x86id.c:1397 modules/arch/x86/x86id.c:1416 +#: modules/arch/x86/x86id.c:1421 modules/arch/x86/x86id.c:1446 +msgid "invalid operand conversion" +msgstr "" + +#: modules/arch/x86/x86id.c:526 +msgid "invalid jump target" +msgstr "" + +#: modules/arch/x86/x86id.c:601 +msgid "no SHORT form of that jump instruction exists" +msgstr "" + +#: modules/arch/x86/x86id.c:604 +msgid "no NEAR form of that jump instruction exists" +msgstr "" + +#: modules/arch/x86/x86id.c:900 +msgid "invalid operand type" +msgstr "" + +#: modules/arch/x86/x86id.c:985 +msgid "invalid target modifier type" +msgstr "" + +#: modules/arch/x86/x86id.c:1018 +msgid "invalid number of operands" +msgstr "" + +#: modules/arch/x86/x86id.c:1032 modules/arch/x86/x86id.c:1037 +#: modules/arch/x86/x86id.c:1042 +#, c-format +msgid "invalid size for operand %d" +msgstr "" + +#: modules/arch/x86/x86id.c:1046 +msgid "one of source operand 1 or 3 must match dest operand" +msgstr "" + +#: modules/arch/x86/x86id.c:1052 +#, c-format +msgid "requires CPU%s" +msgstr "" + +#: modules/arch/x86/x86id.c:1058 +msgid "invalid combination of opcode and operands" +msgstr "" + +#: modules/arch/x86/x86id.c:1088 +msgid "too many operands" +msgstr "" + +#: modules/arch/x86/x86id.c:1119 +msgid "indirect call without `*'" +msgstr "" + +#: modules/arch/x86/x86id.c:1127 +msgid "skipping prefixes on this instruction" +msgstr "" + +#: modules/arch/x86/x86id.c:1274 +msgid "invalid segment in effective address" +msgstr "" + +#: modules/arch/x86/x86id.c:1317 modules/arch/x86/x86id.c:1327 +msgid "immediate does not support segment" +msgstr "" + +#: modules/arch/x86/x86id.c:1410 +msgid "unsupported address size" +msgstr "" + +#: modules/arch/x86/x86id.c:1468 +msgid "unknown operand action" +msgstr "" + +#: modules/arch/x86/x86id.c:1502 +msgid "unknown operand postponed action" +msgstr "" + +#: modules/arch/x86/x86id.c:1518 +msgid "unhandled segment prefix" +msgstr "" + +#: modules/arch/x86/x86id.c:1524 +msgid "immediate expression too complex" +msgstr "" + +#: modules/arch/x86/x86id.c:1535 +msgid "address size override ignored" +msgstr "" + +#: modules/arch/x86/x86id.c:1609 +msgid "first opcode byte of XOP must be 0x08, 0x09, or 0x0A" +msgstr "" + +#: modules/arch/x86/x86id.c:1618 +msgid "first opcode byte of VEX must be 0x0F" +msgstr "" + +#: modules/arch/x86/x86id.c:1647 +msgid "unrecognized special prefix" +msgstr "" + +#: modules/arch/x86/x86id.c:1833 +#, c-format +msgid "`%s' is an instruction in 64-bit mode" +msgstr "" + +#: modules/arch/x86/x86id.c:1838 +#, c-format +msgid "`%s' invalid in 64-bit mode" +msgstr "" + +#: modules/arch/x86/x86id.c:1866 +#, c-format +msgid "`%s' is an instruction in CPU%s" +msgstr "" + +#: modules/arch/x86/x86id.c:1893 +msgid "Cannot override data size to 32 bits in 64-bit mode" +msgstr "" + +#: modules/arch/x86/x86id.c:1899 +msgid "Cannot override address size to 16 bits in 64-bit mode" +msgstr "" + +#: modules/arch/x86/x86id.c:1905 +#, c-format +msgid "`%s' is a prefix in 64-bit mode" +msgstr "" + +#: modules/dbgfmts/codeview/cv-symline.c:378 +msgid "codeview: could not open source file" +msgstr "" + +#: modules/dbgfmts/codeview/cv-symline.c:457 +#: modules/dbgfmts/dwarf2/dwarf2-line.c:550 +msgid "could not find filename in table" +msgstr "" + +#: modules/dbgfmts/codeview/cv-symline.c:577 +#, c-format +msgid "codeview file number %d unassigned" +msgstr "" + +#: modules/dbgfmts/codeview/cv-symline.c:718 +msgid "tried to calc_len a codeview symhead bytecode" +msgstr "" + +#: modules/dbgfmts/codeview/cv-symline.c:792 +msgid "tried to calc_len a codeview fileinfo bytecode" +msgstr "" + +#: modules/dbgfmts/codeview/cv-symline.c:860 +msgid "tried to calc_len a codeview linehead bytecode" +msgstr "" + +#: modules/dbgfmts/codeview/cv-symline.c:973 +#: modules/dbgfmts/codeview/cv-symline.c:1002 +msgid "unknown sym format character" +msgstr "" + +#: modules/dbgfmts/codeview/cv-symline.c:1020 +msgid "tried to calc_len a codeview sym bytecode" +msgstr "" + +#: modules/dbgfmts/codeview/cv-symline.c:1093 +#: modules/dbgfmts/codeview/cv-type.c:560 +#: modules/dbgfmts/codeview/cv-type.c:601 +#: modules/dbgfmts/codeview/cv-type.c:658 +msgid "unknown leaf format character" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-dbgfmt.c:244 +msgid "tried to calc_len a dwarf2 head bytecode" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-info.c:393 +msgid "tried to calc_len a dwarf2 aranges head bytecode" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:415 +msgid "could not find label prior to loc" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:423 +msgid "dwarf2 address went backwards?" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:731 +#, c-format +msgid "dwarf2 file number %d unassigned" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:773 +msgid "tried to calc_len a dwarf2 spp bytecode" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:858 +msgid "tried to calc_len a dwarf2 line_op bytecode" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:909 +msgid "file number required" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:916 +#: modules/dbgfmts/dwarf2/dwarf2-line.c:1131 +msgid "file number is not a constant" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:921 +msgid "file number less than one" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:930 +msgid "line number required" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:937 +msgid "line number is not a constant" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:946 +#: modules/objfmts/coff/coff-objfmt.c:2056 +#, c-format +msgid "[%s] can only be used inside of a section" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:975 +msgid "column number is not a constant" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:997 +msgid "is_stmt value is not a constant" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:1009 +msgid "is_stmt value not 0 or 1" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:1020 +msgid "isa value is not a constant" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:1028 +msgid "isa value less than zero" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:1041 +msgid "discriminator value is not a constant" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:1049 +msgid "discriminator value less than zero" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:1071 +#: modules/dbgfmts/dwarf2/dwarf2-line.c:1086 +#, c-format +msgid "unrecognized loc option `%s'" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:1074 +msgid "unrecognized numeric qualifier" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:1091 +#, c-format +msgid "%s requires value" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:1115 +#, c-format +msgid "[%s] requires an argument" +msgstr "" + +#: modules/dbgfmts/dwarf2/dwarf2-line.c:1139 +msgid "file number given but no filename" +msgstr "" + +#: modules/dbgfmts/stabs/stabs-dbgfmt.c:340 +msgid "stabs debugging conflicts with user-defined section .stab" +msgstr "" + +#: modules/dbgfmts/stabs/stabs-dbgfmt.c:345 +msgid "stabs debugging overrides empty section .stab" +msgstr "" + +#: modules/dbgfmts/stabs/stabs-dbgfmt.c:356 +msgid "stabs debugging conflicts with user-defined section .stabstr" +msgstr "" + +#: modules/dbgfmts/stabs/stabs-dbgfmt.c:361 +msgid "stabs debugging overrides empty section .stabstr" +msgstr "" + +#: modules/dbgfmts/stabs/stabs-dbgfmt.c:399 +msgid "over 65535 stabs" +msgstr "" + +#: modules/dbgfmts/stabs/stabs-dbgfmt.c:489 +msgid "tried to resolve a stabs stab bytecode" +msgstr "" + +#: modules/dbgfmts/stabs/stabs-dbgfmt.c:498 +msgid "tried to resolve a stabs str bytecode" +msgstr "" + +#: modules/listfmts/nasm/nasm-listfmt.c:127 +msgid "relocation too complex" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:216 +msgid "binary object format does not support extern variables" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:220 +msgid "binary object format does not support global variables" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:224 +msgid "binary object format does not support common variables" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:253 modules/objfmts/bin/bin-objfmt.c:430 +#, c-format +msgid "" +"section `%s' internal align of %lu is greater than `%s' of %lu; using `%s'" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:256 modules/objfmts/bin/bin-objfmt.c:258 +msgid "align" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:269 +msgid "start expression is too complex" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:282 +msgid "vstart expression is too complex" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:361 +msgid "start inconsistent with align; using aligned value" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:433 modules/objfmts/bin/bin-objfmt.c:435 +msgid "valign" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:448 +msgid "vstart inconsistent with valign" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:755 +#, c-format +msgid "unable to open map file `%s'" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:883 +#, c-format +msgid "sections `%s' and `%s' overlap by %lu bytes" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:970 +msgid "binary object format does not support external references" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:998 modules/objfmts/coff/coff-objfmt.c:738 +#: modules/objfmts/elf/elf-objfmt.c:623 +msgid "uninitialized space declared in code/data section: zeroing" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:1044 +msgid "initialized space declared in nobits section: ignoring" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:1067 +#, c-format +msgid "section `%s' starts before origin (ORG)" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:1074 +#, c-format +msgid "section `%s' start value too large" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:1081 +#: modules/objfmts/coff/coff-objfmt.c:1213 +#: modules/objfmts/coff/coff-objfmt.c:1258 +#: modules/objfmts/elf/elf-objfmt.c:762 modules/objfmts/elf/elf-objfmt.c:874 +#: modules/objfmts/macho/macho-objfmt.c:1094 +#: modules/objfmts/macho/macho-objfmt.c:1114 +#: modules/objfmts/macho/macho-objfmt.c:1225 +#: modules/objfmts/rdf/rdf-objfmt.c:683 modules/objfmts/rdf/rdf-objfmt.c:772 +#: modules/objfmts/xdf/xdf-objfmt.c:551 modules/objfmts/xdf/xdf-objfmt.c:578 +msgid "could not seek on output file" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:1122 +msgid "ORG expression is too complex" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:1127 +msgid "ORG expression is negative" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:1171 +#, c-format +msgid "section `%s' follows an invalid or unknown section `%s'" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:1184 +#, c-format +msgid "follows loop between section `%s' and section `%s'" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:1295 +#, c-format +msgid "section `%s' vfollows an invalid or unknown section `%s'" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:1309 +#, c-format +msgid "vfollows loop between section `%s' and section `%s'" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:1528 +msgid "cannot combine `start' and `follows' section attributes" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:1534 +msgid "cannot combine `vstart' and `vfollows' section attributes" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:1544 modules/objfmts/bin/bin-objfmt.c:1557 +#: modules/objfmts/coff/coff-objfmt.c:1570 +#: modules/objfmts/elf/elf-objfmt.c:1098 +#: modules/objfmts/macho/macho-objfmt.c:1458 +#: modules/objfmts/xdf/xdf-objfmt.c:721 +#, c-format +msgid "argument to `%s' is not a power of two" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:1603 +msgid "program origin redefined" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:1612 +msgid "argument to ORG must be expression" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:1629 +msgid "map file already specified" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:1636 +msgid "unexpected expression in [map]" +msgstr "" + +#: modules/objfmts/bin/bin-objfmt.c:1928 +#, c-format +msgid "%s: could not find symbol `start'" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:486 +#: modules/objfmts/coff/coff-objfmt.c:692 +msgid "coff: relocation too complex" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:512 +msgid "coff: wrt expression too complex" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:518 +msgid "coff: cannot wrt across sections" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:535 +msgid "coff: common size too complex" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:541 +msgid "coff: common size is negative" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:600 +#: modules/objfmts/coff/coff-objfmt.c:606 +#: modules/objfmts/coff/coff-objfmt.c:632 +#: modules/objfmts/coff/coff-objfmt.c:667 +msgid "coff: invalid relocation size" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:636 +#: modules/objfmts/coff/coff-objfmt.c:643 +#: modules/objfmts/coff/coff-objfmt.c:650 +#: modules/objfmts/coff/coff-objfmt.c:671 +msgid "coff objfmt: unrecognized machine" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:793 +#: modules/objfmts/coff/coff-objfmt.c:824 +#: modules/objfmts/coff/coff-objfmt.c:1244 +#: modules/objfmts/elf/elf-objfmt.c:440 modules/objfmts/rdf/rdf-objfmt.c:748 +#: modules/objfmts/rdf/rdf-objfmt.c:765 modules/objfmts/xdf/xdf-objfmt.c:301 +#: modules/objfmts/xdf/xdf-objfmt.c:329 +msgid "could not get file position on output file" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:807 +msgid "coff: section computed size did not match actual size" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:849 +msgid "coff: no symbol data for relocated symbol" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:935 +#, c-format +msgid "too many relocations in section `%s'" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1028 +#: modules/objfmts/coff/coff-objfmt.c:1151 +msgid "coff: expected sym data to be present" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1049 +#: modules/objfmts/macho/macho-objfmt.c:875 +#: modules/objfmts/rdf/rdf-objfmt.c:256 modules/objfmts/rdf/rdf-objfmt.c:549 +#: modules/objfmts/xdf/xdf-objfmt.c:479 +msgid "didn't understand section" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1059 +#: modules/objfmts/macho/macho-objfmt.c:893 +#: modules/objfmts/xdf/xdf-objfmt.c:489 +msgid "global EQU value not an integer expression" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1075 +#: modules/objfmts/macho/macho-objfmt.c:915 +#: modules/objfmts/rdf/rdf-objfmt.c:597 +msgid "COMMON data size not an integer expression" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1124 +msgid "coff: unrecognized aux symtab type" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1186 +#: modules/objfmts/coff/coff-objfmt.c:2274 +msgid "procedure started here" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1188 +msgid "end of file in procedure frame" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1341 +#: modules/objfmts/elf/elf-objfmt.c:957 +msgid "non-string section attribute" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1382 +#: modules/objfmts/elf/elf-objfmt.c:992 +#, c-format +msgid "unrecognized section attribute: `%c'" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1523 +msgid "Standard COFF does not support read-only data sections" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1578 +msgid "Win32 does not support alignments > 8192" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1590 +msgid "COFF section names limited to 8 characters: truncating" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1607 +#: modules/objfmts/elf/elf-objfmt.c:1133 +#: modules/objfmts/macho/macho-objfmt.c:1497 +#: modules/objfmts/rdf/rdf-objfmt.c:958 modules/objfmts/xdf/xdf-objfmt.c:763 +msgid "section flags ignored on section redeclaration" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1698 +msgid "argument to EXPORT must be symbol name" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1749 +#: modules/objfmts/coff/coff-objfmt.c:1928 +msgid "argument to SAFESEH must be symbol name" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1804 +msgid "coff: no symbol data for SAFESEH symbol" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1863 +#: modules/objfmts/elf/elf-objfmt.c:1268 +msgid ".comment requires string parameters" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1884 +msgid ".secrel32 can only be used inside of a section" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1895 +msgid ".secrel32 requires expressions" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1920 +msgid ".def pseudo-op used inside of .def/.endef; ignored" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1950 +#: modules/objfmts/coff/coff-objfmt.c:1973 +#, c-format +msgid "%s pseudo-op used outside of .def/.endef; ignored" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:1994 +msgid ".endef pseudo-op used before .def; ignored" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:2010 +msgid "previous procedure started here" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:2012 +msgid "nested procedures not supported (didn't use [ENDPROC_FRAME]?)" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:2033 +#: modules/objfmts/coff/coff-objfmt.c:2268 +#, c-format +msgid "[%s] without preceding [PROC_FRAME]" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:2038 +#: modules/objfmts/coff/win64-except.c:261 +msgid "prologue ended here" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:2039 +#, c-format +msgid "[%s] after end of prologue" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:2044 +#: modules/objfmts/coff/coff-objfmt.c:2284 +msgid "unwind info not present" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:2079 +#: modules/objfmts/coff/coff-objfmt.c:2110 +#: modules/objfmts/coff/coff-objfmt.c:2180 +#, c-format +msgid "[%s] requires a register as the first parameter" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:2147 +#, c-format +msgid "[%s] requires a size" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:2189 +#, c-format +msgid "[%s] requires an offset as the second parameter" +msgstr "" + +#: modules/objfmts/coff/coff-objfmt.c:2276 +msgid "ended procedure without ending prologue" +msgstr "" + +#: modules/objfmts/coff/win64-except.c:211 +msgid "prolog size expression too complex" +msgstr "" + +#: modules/objfmts/coff/win64-except.c:214 +msgid "codes count expression too complex" +msgstr "" + +#: modules/objfmts/coff/win64-except.c:218 +#: modules/objfmts/coff/win64-except.c:311 +msgid "frame offset expression too complex" +msgstr "" + +#: modules/objfmts/coff/win64-except.c:240 +#: modules/objfmts/coff/win64-except.c:271 +#: modules/objfmts/coff/win64-except.c:317 +#, c-format +msgid "frame offset of %ld bytes, must be between 0 and 240" +msgstr "" + +#: modules/objfmts/coff/win64-except.c:244 +#: modules/objfmts/coff/win64-except.c:320 +#, c-format +msgid "frame offset of %ld is not a multiple of 16" +msgstr "" + +#: modules/objfmts/coff/win64-except.c:263 +#, c-format +msgid "prologue %ld bytes, must be <256" +msgstr "" + +#: modules/objfmts/coff/win64-except.c:267 +#, c-format +msgid "%ld unwind codes, maximum of 255" +msgstr "" + +#: modules/objfmts/coff/win64-except.c:348 +#: modules/objfmts/coff/win64-except.c:526 +msgid "offset expression too complex" +msgstr "" + +#: modules/objfmts/coff/win64-except.c:397 +#: modules/objfmts/coff/win64-except.c:518 +msgid "unrecognied unwind opcode" +msgstr "" + +#: modules/objfmts/coff/win64-except.c:412 +#: modules/objfmts/coff/win64-except.c:429 +msgid "negative offset not allowed" +msgstr "" + +#: modules/objfmts/coff/win64-except.c:415 +#: modules/objfmts/coff/win64-except.c:538 +#, c-format +msgid "offset of %ld is not a multiple of %ld" +msgstr "" + +#: modules/objfmts/coff/win64-except.c:436 +msgid "expansion on already largest alloc" +msgstr "" + +#: modules/objfmts/coff/win64-except.c:532 +#, c-format +msgid "offset of %ld bytes, must be between %ld and %ld" +msgstr "" + +#: modules/objfmts/dbg/dbg-objfmt.c:50 +#, c-format +msgid "could not open temporary file" +msgstr "" + +#: modules/objfmts/elf/elf-objfmt.c:125 modules/objfmts/elf/elf-objfmt.c:150 +#: modules/objfmts/elf/elf-objfmt.c:1182 +#, c-format +msgid "unrecognized symbol type `%s'" +msgstr "" + +#: modules/objfmts/elf/elf-objfmt.c:203 +msgid "More than one symbol visibility provided; using last" +msgstr "" + +#: modules/objfmts/elf/elf-objfmt.c:230 +msgid "alignment constraint is not an integer" +msgstr "" + +#: modules/objfmts/elf/elf-objfmt.c:241 modules/objfmts/rdf/rdf-objfmt.c:629 +msgid "alignment constraint is not a power of two" +msgstr "" + +#: modules/objfmts/elf/elf-objfmt.c:448 +msgid "could not set file position on output file" +msgstr "" + +#: modules/objfmts/elf/elf-objfmt.c:468 +msgid "elf: invalid relocation size" +msgstr "" + +#: modules/objfmts/elf/elf-objfmt.c:517 modules/objfmts/elf/elf-objfmt.c:577 +msgid "elf: relocation too complex" +msgstr "" + +#: modules/objfmts/elf/elf-objfmt.c:564 +msgid "elf: invalid relocation (WRT or size)" +msgstr "" + +#: modules/objfmts/elf/elf-objfmt.c:678 modules/objfmts/elf/elf.c:777 +msgid "couldn't read position on output stream" +msgstr "" + +#: modules/objfmts/elf/elf-objfmt.c:683 modules/objfmts/elf/elf.c:782 +msgid "couldn't seek on output stream" +msgstr "" + +#: modules/objfmts/elf/elf-objfmt.c:836 +msgid "missing .stab or .stabstr section/data" +msgstr "" + +#: modules/objfmts/elf/elf-objfmt.c:1111 +msgid "invalid merge entity size" +msgstr "" + +#: modules/objfmts/elf/elf-objfmt.c:1114 +msgid "entity size for SHF_MERGE not specified" +msgstr "" + +#: modules/objfmts/elf/elf-objfmt.c:1184 +msgid "no type specified" +msgstr "" + +#: modules/objfmts/elf/elf-objfmt.c:1211 +msgid "no size specified" +msgstr "" + +#: modules/objfmts/elf/elf-x86-amd64.c:84 modules/objfmts/elf/elf-x86-x86.c:92 +msgid "symbol references section without data" +msgstr "" + +#: modules/objfmts/elf/elf-x86-amd64.c:155 +#: modules/objfmts/elf/elf-x86-x86.c:158 +msgid "Unsupported WRT" +msgstr "" + +#: modules/objfmts/elf/elf-x86-amd64.c:179 +#: modules/objfmts/elf/elf-x86-amd64.c:187 +#: modules/objfmts/elf/elf-x86-x86.c:176 modules/objfmts/elf/elf-x86-x86.c:183 +msgid "Unsupported relocation size" +msgstr "" + +#: modules/objfmts/elf/elf.c:164 modules/objfmts/elf/elf.c:533 +#: modules/objfmts/elf/elf.c:682 modules/objfmts/elf/elf.c:710 +#: modules/objfmts/elf/elf.c:729 modules/objfmts/elf/elf.c:749 +msgid "Unsupported machine for ELF output" +msgstr "" + +#: modules/objfmts/elf/elf.c:406 modules/objfmts/elf/elf.c:435 +#: modules/objfmts/elf/elf.c:455 +msgid "symtab is missing initial dummy entry" +msgstr "" + +#: modules/objfmts/elf/elf.c:476 +msgid "symtab is null" +msgstr "" + +#: modules/objfmts/elf/elf.c:489 +msgid "size specifier not an integer expression" +msgstr "" + +#: modules/objfmts/elf/elf.c:508 +msgid "EQU value not an integer expression" +msgstr "" + +#: modules/objfmts/elf/elf.c:620 +msgid "unsupported ELF format" +msgstr "" + +#: modules/objfmts/elf/elf.c:632 +msgid "shead is null" +msgstr "" + +#: modules/objfmts/elf/elf.c:686 modules/objfmts/elf/elf.c:753 +msgid "Failed to write an elf section header" +msgstr "" + +#: modules/objfmts/elf/elf.c:799 modules/objfmts/elf/elf.c:804 +msgid "Unsupported arch/machine for elf output" +msgstr "" + +#: modules/objfmts/elf/elf.c:920 +#, c-format +msgid "alignment %d for section `%s' is not a power of 2" +msgstr "" + +#: modules/objfmts/elf/elf.c:931 modules/objfmts/elf/elf.c:949 +msgid "Unsupported ELF format for output" +msgstr "" + +#: modules/objfmts/elf/elf.c:953 +msgid "ELF program header is not proper length" +msgstr "" + +#: modules/objfmts/elf/elf.c:958 +msgid "Failed to write ELF program header" +msgstr "" + +#: modules/objfmts/macho/macho-objfmt.c:440 +msgid "macho: relocation too complex for current implementation" +msgstr "" + +#: modules/objfmts/macho/macho-objfmt.c:465 +msgid "macho: relocation size unsupported" +msgstr "" + +#: modules/objfmts/macho/macho-objfmt.c:476 +msgid "macho: shifted relocations not supported" +msgstr "" + +#: modules/objfmts/macho/macho-objfmt.c:483 +msgid "macho: SEG not supported" +msgstr "" + +#: modules/objfmts/macho/macho-objfmt.c:494 +msgid "macho: invalid WRT" +msgstr "" + +#: modules/objfmts/macho/macho-objfmt.c:521 +msgid "" +"macho: sorry, cannot apply 32 bit absolute relocations in 64 bit mode, " +"consider \"[_symbol wrt rip]\" for mem access, \"qword\" and \"dq _foo\" for " +"pointers." +msgstr "" + +#: modules/objfmts/macho/macho-objfmt.c:564 +msgid "macho: relocation too complex" +msgstr "" + +#: modules/objfmts/macho/macho-objfmt.c:603 +#: modules/objfmts/rdf/rdf-objfmt.c:318 modules/objfmts/xdf/xdf-objfmt.c:259 +msgid "uninitialized space: zeroing" +msgstr "" + +#: modules/objfmts/macho/macho-objfmt.c:1049 +msgid "no sections defined" +msgstr "" + +#: modules/objfmts/macho/macho-objfmt.c:1419 +msgid "segment name is too long, max 16 chars; truncating" +msgstr "" + +#: modules/objfmts/macho/macho-objfmt.c:1423 +#: modules/objfmts/macho/macho-objfmt.c:1434 +msgid "section name is too long, max 16 chars; truncating" +msgstr "" + +#: modules/objfmts/macho/macho-objfmt.c:1466 +msgid "macho implementation does not support alignments > 16384" +msgstr "" + +#: modules/objfmts/macho/macho-objfmt.c:1473 +msgid "Unknown section name, defaulting to __TEXT segment" +msgstr "" + +#: modules/objfmts/rdf/rdf-objfmt.c:213 modules/objfmts/rdf/rdf-objfmt.c:282 +msgid "rdf: relocation too complex" +msgstr "" + +#: modules/objfmts/rdf/rdf-objfmt.c:219 +msgid "rdf: WRT not supported" +msgstr "" + +#: modules/objfmts/rdf/rdf-objfmt.c:265 +msgid "rdf: no symbol data for relocated symbol" +msgstr "" + +#: modules/objfmts/rdf/rdf-objfmt.c:373 +msgid "rdf: section computed size did not match actual size" +msgstr "" + +#: modules/objfmts/rdf/rdf-objfmt.c:553 +msgid "rdf does not support exporting EQU/absolute values" +msgstr "" + +#: modules/objfmts/rdf/rdf-objfmt.c:563 +#, c-format +msgid "label name too long, truncating to %d bytes" +msgstr "" + +#: modules/objfmts/rdf/rdf-objfmt.c:938 +msgid "new segment declared without type code" +msgstr "" + +#: modules/objfmts/rdf/rdf-objfmt.c:1021 +#, c-format +msgid "name too long, truncating to %d bytes" +msgstr "" + +#: modules/objfmts/xdf/xdf-objfmt.c:178 modules/objfmts/xdf/xdf-objfmt.c:220 +msgid "xdf: relocation too complex" +msgstr "" + +#: modules/objfmts/xdf/xdf-objfmt.c:314 +msgid "xdf: section computed size did not match actual size" +msgstr "" + +#: modules/objfmts/xdf/xdf-objfmt.c:343 +msgid "xdf: no symbol data for relocated symbol" +msgstr "" + +#: modules/objfmts/xdf/xdf-objfmt.c:352 +msgid "xdf: no symbol data for relocated base symbol" +msgstr "" + +#: modules/objfmts/xdf/xdf-objfmt.c:357 +msgid "xdf: no base symbol for WRT relocation" +msgstr "" + +#: modules/objfmts/xdf/xdf-objfmt.c:425 +msgid "XDF object format does not support common variables" +msgstr "" + +#: modules/objfmts/xdf/xdf-objfmt.c:733 +msgid "XDF does not support alignments > 4096" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:90 +msgid "can only have one token of lookahead" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:131 modules/parsers/nasm/nasm-parse.c:144 +#, c-format +msgid "junk at end of line, first unrecognized character is `%c'" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:218 modules/parsers/gas/gas-parse.c:649 +#: modules/parsers/gas/gas-parse.c:671 modules/parsers/gas/gas-parse.c:694 +#: modules/parsers/gas/gas-parse.c:807 +#, c-format +msgid "expression expected after `%s'" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:234 +#, c-format +msgid "directive `%s' not recognized" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:237 +#, c-format +msgid "instruction not recognized: `%s'" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:254 modules/parsers/nasm/nasm-parse.c:465 +msgid "label or instruction expected at start of line" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:292 modules/parsers/gas/gas-parse.c:384 +#: modules/parsers/gas/gas-parse.c:464 +msgid "line number is negative" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:354 +msgid "junk at end of cpp line marker" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:411 +msgid "line increment is negative" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:498 +msgid ".align directive must specify alignment" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:574 +#, c-format +msgid "size expected for `%s'" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:747 +msgid "flag string expected" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:958 +msgid "expression syntax error" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:1161 modules/parsers/gas/gas-parse.c:1195 +msgid "invalid memory expression" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:1185 +msgid "non-integer scale" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:1207 +#, c-format +msgid "scale factor of %u without an index register" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:1268 modules/parsers/nasm/nasm-parse.c:939 +msgid "integer register index expected" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:1275 modules/parsers/nasm/nasm-parse.c:946 +msgid "missing closing parenthesis for register index" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:1281 modules/parsers/nasm/nasm-parse.c:952 +#, c-format +msgid "bad register index `%u'" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:1294 modules/parsers/gas/gas-parse.c:1308 +#, c-format +msgid "expression missing after `%s'" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:1443 modules/parsers/nasm/nasm-parse.c:1408 +msgid "missing parenthesis" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:1475 +msgid "expected identifier after `@'" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:1483 +msgid "unrecognized identifier after `@'" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:1583 +#, c-format +msgid "invalid section name `%s'" +msgstr "" + +#: modules/parsers/gas/gas-parse.c:1635 +msgid "size must be an absolute expression" +msgstr "" + +#: modules/parsers/gas/gas-parser.c:87 modules/preprocs/gas/gas-preproc.c:1328 +msgid "end of file in comment" +msgstr "" + +#: modules/parsers/gas/gas-token.re:350 +#, c-format +msgid "Unrecognized register name `%s'" +msgstr "" + +#: modules/parsers/gas/gas-token.re:409 modules/parsers/nasm/nasm-token.re:504 +#: modules/parsers/nasm/nasm-token.re:729 +#, c-format +msgid "ignoring unrecognized character `%s'" +msgstr "" + +#: modules/parsers/gas/gas-token.re:529 modules/parsers/gas/gas-token.re:550 +msgid "unexpected end of file in string" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:94 +msgid "only can have one token of lookahead" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:259 +msgid "only RES* allowed within absolute section" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:344 +msgid "[warning] directive not supported; ignored" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:361 modules/parsers/nasm/nasm-parse.c:370 +#, c-format +msgid "invalid arguments to [%s]" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:403 +msgid "label alone on a line without a colon might be in error" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:425 modules/parsers/nasm/nasm-parse.c:546 +#: modules/parsers/nasm/nasm-parse.c:680 +#, c-format +msgid "expression expected after %s" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:457 +msgid "instruction expected after label" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:553 +msgid "instruction expected after TIMES expression" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:600 modules/parsers/nasm/nasm-parse.c:632 +msgid "can not handle more than one '?'" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:610 modules/parsers/nasm/nasm-parse.c:649 +msgid "expression or string expected" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:618 +msgid "expected ( after DUP" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:626 modules/parsers/nasm/nasm-parse.c:641 +msgid "expected ) after DUPlicated expression" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:694 +msgid "filename string expected after INCBIN" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:708 +msgid "expression expected for INCBIN start" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:720 +msgid "expression expected for INCBIN maximum length" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:755 +#, c-format +msgid "unexpected %s after instruction" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:759 +#, c-format +msgid "expected operand, got %s" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:816 modules/parsers/nasm/nasm-parse.c:871 +msgid "memory address expected" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:831 +msgid "relative adressing not supported\n" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:840 +msgid "register adressing not supported\n" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:848 +msgid "expected expression after ]" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:878 +msgid "OFFSET applied to non-memory operand" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:883 +msgid "OFFSET applied to non-absolute memory operand" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:916 +msgid "segment applied to non-memory operand" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:977 +msgid "cannot override register size" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:989 +#, c-format +msgid "overriding operand size from %u-bit to %u-bit" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:993 +msgid "double operand size override" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:1024 +msgid "expected expression after [" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:1029 +msgid "missing closing bracket" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:1100 +msgid "`:' required after segment register" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:1197 +#: modules/parsers/nasm/nasm-parse.c:1259 +#: modules/parsers/nasm/nasm-parse.c:1287 +#: modules/parsers/nasm/nasm-parse.c:1316 +#: modules/parsers/nasm/nasm-parse.c:1345 +#: modules/parsers/nasm/nasm-parse.c:1353 +#: modules/parsers/nasm/nasm-parse.c:1362 +#: modules/parsers/nasm/nasm-parse.c:1371 +#: modules/parsers/nasm/nasm-parse.c:1381 +#: modules/parsers/nasm/nasm-parse.c:1395 +#: modules/parsers/nasm/nasm-parse.c:1404 +#, c-format +msgid "expected expression after %s" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:1420 +msgid "data values can't have registers" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:1628 +#, c-format +msgid "unrecognized default `%s'" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:1631 +msgid "unrecognized default value" +msgstr "" + +#: modules/parsers/nasm/nasm-parse.c:1636 +#, c-format +msgid "unrecognized directive `%s'" +msgstr "" + +#: modules/parsers/nasm/nasm-token.re:102 +#, c-format +msgid "no non-local label before `%s'" +msgstr "" + +#: modules/parsers/nasm/nasm-token.re:784 +msgid "unterminated string" +msgstr "" + +#: modules/preprocs/cpp/cpp-preproc.c:87 +msgid "command line too long!" +msgstr "" + +#: modules/preprocs/cpp/cpp-preproc.c:143 +#: modules/preprocs/cpp/cpp-preproc.c:175 +msgid "Failed to execute preprocessor" +msgstr "" + +#: modules/preprocs/cpp/cpp-preproc.c:145 +#: modules/preprocs/cpp/cpp-preproc.c:177 +msgid "Cannot execute preprocessor, no popen available" +msgstr "" + +#: modules/preprocs/cpp/cpp-preproc.c:224 +msgid "Preprocessor exited with failure" +msgstr "" + +#: modules/preprocs/cpp/cpp-preproc.c:259 +#: modules/preprocs/gas/gas-preproc.c:208 +#: modules/preprocs/raw/raw-preproc.c:87 +msgid "error when reading from file" +msgstr "" + +#: modules/preprocs/gas/gas-preproc.c:286 +msgid "expected comma" +msgstr "" + +#: modules/preprocs/gas/gas-preproc.c:510 +msgid "\".endif\" without \".if\"" +msgstr "" + +#: modules/preprocs/gas/gas-preproc.c:520 +#, c-format +msgid "\".%s\" without \".if\"" +msgstr "" + +#: modules/preprocs/gas/gas-preproc.c:535 +msgid "expression is required in \".if\" statement" +msgstr "" + +#: modules/preprocs/gas/gas-preproc.c:557 +msgid "expression is required in \".elseif\" statement" +msgstr "" + +#: modules/preprocs/gas/gas-preproc.c:592 +#, c-format +msgid "\"%s\" expects two single-quoted or unquoted arguments" +msgstr "" + +#: modules/preprocs/gas/gas-preproc.c:609 +#, c-format +msgid "\"%s\" expects two double-quoted arguments" +msgstr "" + +#: modules/preprocs/gas/gas-preproc.c:646 +msgid "string expected" +msgstr "" + +#: modules/preprocs/gas/gas-preproc.c:658 +#, c-format +msgid "unable to open included file \"%s\"" +msgstr "" + +#: modules/preprocs/gas/gas-preproc.c:708 +#, c-format +msgid "symbol \"%s\" is already defined" +msgstr "" + +#: modules/preprocs/gas/gas-preproc.c:841 +msgid "unexpected EOF in \".macro\" block" +msgstr "" + +#: modules/preprocs/gas/gas-preproc.c:848 +msgid "\".endm\" without \".macro\"" +msgstr "" + +#: modules/preprocs/gas/gas-preproc.c:1023 +msgid "rept without matching endr" +msgstr "" + +#: modules/preprocs/gas/gas-preproc.c:1030 +msgid "\".endr\" without \".rept\"" +msgstr "" + +#: modules/preprocs/gas/gas-preproc.c:1206 +#, c-format +msgid "\".%s\" expects two arguments" +msgstr "" + +#: modules/preprocs/gas/gas-preproc.c:1238 +#: modules/preprocs/nasm/nasm-preproc.c:145 +#: modules/preprocs/raw/raw-preproc.c:54 +msgid "Could not open input file" +msgstr "" diff --git a/third-party/yasm/yasm-1.3.0/splint.sh b/third-party/yasm/yasm-1.3.0/splint.sh new file mode 100755 index 0000000000..56850ff39d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/splint.sh @@ -0,0 +1,87 @@ +#!/bin/sh +splint \ + +allglobals \ + -noeffect \ + -exportlocal \ + -predbool \ + -boolops \ + +boolint \ + +charint \ + -retvalint \ + -retvalother \ + -shiftimplementation \ + -shiftnegative \ + -fixedformalarray \ + +ansi89limits \ + +ansistrictlib \ + +trytorecover \ + -globs \ + -I. \ + -I/usr/local/include \ + -DHAVE_CONFIG_H \ + -Dlint \ + frontends/yasm/yasm-options.c \ + frontends/yasm/yasm.c \ + libyasm/arch.c \ + libyasm/assocdat.c \ + libyasm/bc-align.c \ + libyasm/bc-data.c \ + libyasm/bc-incbin.c \ + libyasm/bc-insn.c \ + libyasm/bc-org.c \ + libyasm/bc-reserve.c \ + libyasm/bytecode.c \ + libyasm/errwarn.c \ + libyasm/expr.c \ + libyasm/file.c \ + libyasm/floatnum.c \ + libyasm/hamt.c \ + libyasm/intnum.c \ + libyasm/inttree.c \ + libyasm/linemap.c \ + libyasm/md5.c \ + libyasm/mergesort.c \ + libyasm/phash.c \ + libyasm/section.c \ + libyasm/strcasecmp.c \ + libyasm/strsep.c \ + libyasm/symrec.c \ + libyasm/valparam.c \ + libyasm/value.c \ + libyasm/xmalloc.c \ + libyasm/xstrdup.c \ + modules/arch/lc3b/lc3barch.c \ + modules/arch/lc3b/lc3bbc.c \ + modules/arch/x86/x86arch.c \ + modules/arch/x86/x86bc.c \ + modules/arch/x86/x86expr.c \ + modules/arch/x86/x86id.c \ + modules/dbgfmts/codeview/cv-dbgfmt.c \ + modules/dbgfmts/codeview/cv-symline.c \ + modules/dbgfmts/codeview/cv-type.c \ + modules/dbgfmts/dwarf2/dwarf2-aranges.c \ + modules/dbgfmts/dwarf2/dwarf2-dbgfmt.c \ + modules/dbgfmts/dwarf2/dwarf2-info.c \ + modules/dbgfmts/dwarf2/dwarf2-line.c \ + modules/dbgfmts/null/null-dbgfmt.c \ + modules/dbgfmts/stabs/stabs-dbgfmt.c \ + modules/listfmts/nasm/nasm-listfmt.c \ + modules/objfmts/bin/bin-objfmt.c \ + modules/objfmts/coff/coff-objfmt.c \ + modules/objfmts/coff/win64-except.c \ + modules/objfmts/dbg/dbg-objfmt.c \ + modules/objfmts/elf/elf-objfmt.c \ + modules/objfmts/elf/elf-x86-amd64.c \ + modules/objfmts/elf/elf-x86-x86.c \ + modules/objfmts/elf/elf.c \ + modules/objfmts/macho/macho-objfmt.c \ + modules/objfmts/rdf/rdf-objfmt.c \ + modules/objfmts/xdf/xdf-objfmt.c \ + modules/parsers/gas/gas-parse.c \ + modules/parsers/gas/gas-parse-intel.c \ + modules/parsers/gas/gas-parser.c \ + modules/parsers/nasm/nasm-parse.c \ + modules/parsers/nasm/nasm-parser.c \ + modules/preprocs/nasm/nasm-preproc.c \ + modules/preprocs/raw/raw-preproc.c + diff --git a/third-party/yasm/yasm-1.3.0/test_hd.c b/third-party/yasm/yasm-1.3.0/test_hd.c new file mode 100644 index 0000000000..8ae5cabe9e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/test_hd.c @@ -0,0 +1,59 @@ +/* + * + * Simple hexidecimal dump, two hex digits per line. + * + * Copyright (C) 2004-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 +#include + +int +main(int argc, char *argv[]) +{ + FILE *bfile; + int ch; + + if (argc != 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + return EXIT_FAILURE; + } + + bfile = fopen(argv[1], "rb"); + + if (!bfile) { + fprintf(stderr, "Could not open `%s'.\n", argv[1]); + return EXIT_FAILURE; + } + + while ((ch = fgetc(bfile)) != EOF) + printf("%02x \n", ch); + + if (ferror(bfile)) { + fprintf(stderr, "Error reading from `%s'.\n", argv[1]); + return EXIT_FAILURE; + } + + fclose(bfile); + return EXIT_SUCCESS; +} diff --git a/third-party/yasm/yasm-1.3.0/tools/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/tools/CMakeLists.txt new file mode 100644 index 0000000000..4b83d4eba0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/CMakeLists.txt @@ -0,0 +1,3 @@ +ADD_SUBDIRECTORY(genmacro) +ADD_SUBDIRECTORY(genperf) +ADD_SUBDIRECTORY(re2c) diff --git a/third-party/yasm/yasm-1.3.0/tools/Makefile.inc b/third-party/yasm/yasm-1.3.0/tools/Makefile.inc new file mode 100644 index 0000000000..dbc67fcb45 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/Makefile.inc @@ -0,0 +1,9 @@ +EXTRA_DIST += tools/re2c/Makefile.inc +EXTRA_DIST += tools/genmacro/Makefile.inc +EXTRA_DIST += tools/genperf/Makefile.inc +EXTRA_DIST += tools/python-yasm/Makefile.inc + +include tools/re2c/Makefile.inc +include tools/genmacro/Makefile.inc +include tools/genperf/Makefile.inc +include tools/python-yasm/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/tools/genmacro/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/tools/genmacro/CMakeLists.txt new file mode 100644 index 0000000000..27ba59969b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/genmacro/CMakeLists.txt @@ -0,0 +1,3 @@ +add_executable(genmacro + genmacro.c + ) diff --git a/third-party/yasm/yasm-1.3.0/tools/genmacro/Makefile.inc b/third-party/yasm/yasm-1.3.0/tools/genmacro/Makefile.inc new file mode 100644 index 0000000000..722f95dac9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/genmacro/Makefile.inc @@ -0,0 +1,14 @@ +# These utility programs have to be built for BUILD host in cross-build. +# This makes things rather non-standard automake + +noinst_PROGRAMS += genmacro + +genmacro_SOURCES = +EXTRA_DIST += tools/genmacro/genmacro.c +genmacro_LDADD = genmacro.$(OBJEXT) +genmacro_LINK = $(CCLD_FOR_BUILD) -o $@ + +genmacro.$(OBJEXT): tools/genmacro/genmacro.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/genmacro/genmacro.c || echo '$(srcdir)/'`tools/genmacro/genmacro.c + diff --git a/third-party/yasm/yasm-1.3.0/tools/genmacro/genmacro.c b/third-party/yasm/yasm-1.3.0/tools/genmacro/genmacro.c new file mode 100644 index 0000000000..8e702b86ec --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/genmacro/genmacro.c @@ -0,0 +1,134 @@ +/* + * + * C version of NASM's macros.pl + * + * Copyright (C) 2004-2008 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 +#include +#include + +#define MAXLINE 1024 + +int +main(int argc, char *argv[]) +{ + FILE *in, *out; + int i; + char *str; + char *strp; + char *charp; + int fline; + int line = 0; + int lindex = 0; + size_t len; + + if (argc < 4) { + fprintf(stderr, "Usage: %s [ ...]\n", argv[0]); + return EXIT_FAILURE; + } + + out = fopen(argv[1], "wt"); + + if (!out) { + fprintf(stderr, "Could not open `%s'.\n", argv[1]); + return EXIT_FAILURE; + } + + str = malloc(MAXLINE); + + fprintf(out, "/* This file auto-generated from standard.mac by genmacro.c" + " - don't edit it */\n\n#include \n\n" + "static const char *%s[] = {\n", argv[2]); + + for (i=3; i 0 && (strp[len-1] == ' ' || strp[len-1] == '\t' || + strp[len-1] == '\n')) { + strp[len-1] = '\0'; + len--; + } + + /* skip blank lines */ + if (len == 0) + continue; + + /* output as string to output file */ + fprintf(out, " \""); + while (*strp != '\0') { + if (*strp == '\\' || *strp == '"') + fputc('\\', out); + fputc(*strp, out); + strp++; + } + fprintf(out, "\",\n"); + lindex++; + } + + fclose(in); + } + + fprintf(out, " NULL\n};\n"); + fclose(out); + + free(str); + + return EXIT_SUCCESS; +} diff --git a/third-party/yasm/yasm-1.3.0/tools/genperf/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/tools/genperf/CMakeLists.txt new file mode 100644 index 0000000000..6f50989ef0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/genperf/CMakeLists.txt @@ -0,0 +1,8 @@ +add_executable(genperf + genperf.c + perfect.c + ../../libyasm/phash.c + ../../libyasm/xmalloc.c + ../../libyasm/xstrdup.c + ) +set_target_properties(genperf PROPERTIES COMPILE_FLAGS -DYASM_LIB_DECL=) diff --git a/third-party/yasm/yasm-1.3.0/tools/genperf/Makefile.inc b/third-party/yasm/yasm-1.3.0/tools/genperf/Makefile.inc new file mode 100644 index 0000000000..135da6b980 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/genperf/Makefile.inc @@ -0,0 +1,42 @@ +# These utility programs have to be built for BUILD host in cross-build. +# This makes things rather non-standard automake + +noinst_PROGRAMS += genperf + +# Suffix rule for genperf +SUFFIXES += .gperf +.gperf.c: genperf$(EXEEXT) + $(top_builddir)/genperf$(EXEEXT) $< $@ + +genperf_SOURCES = +EXTRA_DIST += tools/genperf/genperf.c +EXTRA_DIST += tools/genperf/perfect.c +EXTRA_DIST += tools/genperf/perfect.h +EXTRA_DIST += tools/genperf/standard.h +genperf_LDADD = genperf.$(OBJEXT) +genperf_LDADD += gp-perfect.$(OBJEXT) +genperf_LDADD += gp-phash.$(OBJEXT) +genperf_LDADD += gp-xmalloc.$(OBJEXT) +genperf_LDADD += gp-xstrdup.$(OBJEXT) +genperf_LINK = $(CCLD_FOR_BUILD) -o $@ + +genperf.$(OBJEXT): tools/genperf/genperf.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/genperf/genperf.c || echo '$(srcdir)/'`tools/genperf/genperf.c + +gp-perfect.$(OBJEXT): tools/genperf/perfect.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/genperf/perfect.c || echo '$(srcdir)/'`tools/genperf/perfect.c + +gp-phash.$(OBJEXT): libyasm/phash.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f libyasm/phash.c || echo '$(srcdir)/'`libyasm/phash.c + +gp-xmalloc.$(OBJEXT): libyasm/xmalloc.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f libyasm/xmalloc.c || echo '$(srcdir)/'`libyasm/xmalloc.c + +gp-xstrdup.$(OBJEXT): libyasm/xstrdup.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f libyasm/xstrdup.c || echo '$(srcdir)/'`libyasm/xstrdup.c + diff --git a/third-party/yasm/yasm-1.3.0/tools/genperf/genperf.c b/third-party/yasm/yasm-1.3.0/tools/genperf/genperf.c new file mode 100644 index 0000000000..c3cfa766cd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/genperf/genperf.c @@ -0,0 +1,540 @@ +/* + * + * Generate Minimal Perfect Hash (genperf) + * + * Copyright (C) 2006-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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 +#include +#include +#include +#include "tools/genperf/perfect.h" +#include "libyasm/compat-queue.h" +#include "libyasm/coretype.h" +#include "libyasm/errwarn.h" + +typedef STAILQ_HEAD(slist, sval) slist; +typedef struct sval { + STAILQ_ENTRY(sval) link; + char *str; +} sval; + +typedef STAILQ_HEAD(keyword_list, keyword) keyword_list; +typedef struct keyword { + STAILQ_ENTRY(keyword) link; + char *name; + char *args; + unsigned int line; +} keyword; + +static unsigned int cur_line = 1; +static int errors = 0; + +static void +report_error(const char *fmt, ...) +{ + va_list ap; + + fprintf(stderr, "%u: ", cur_line); + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + fputc('\n', stderr); + errors++; +} + +void +yasm__fatal(const char *message, ...) +{ + abort(); +} + +/* make the c output for the perfect hash tab array */ +static void +make_c_tab( + FILE *f, + bstuff *tab, /* table indexed by b */ + ub4 smax, /* range of scramble[] */ + ub4 blen, /* b in 0..blen-1, power of 2 */ + ub4 *scramble) /* used in final hash */ +{ + ub4 i; + /* table for the mapping for the perfect hash */ + if (blen >= USE_SCRAMBLE) { + /* A way to make the 1-byte values in tab bigger */ + if (smax > UB2MAXVAL+1) { + fprintf(f, " static const unsigned long scramble[] = {\n"); + for (i=0; i<=UB1MAXVAL; i+=4) + fprintf(f, " 0x%.8lx, 0x%.8lx, 0x%.8lx, 0x%.8lx,\n", + scramble[i+0], scramble[i+1], scramble[i+2], scramble[i+3]); + } else { + fprintf(f, " static const unsigned short scramble[] = {\n"); + for (i=0; i<=UB1MAXVAL; i+=8) + fprintf(f, +" 0x%.4lx, 0x%.4lx, 0x%.4lx, 0x%.4lx, 0x%.4lx, 0x%.4lx, 0x%.4lx, 0x%.4lx,\n", + scramble[i+0], scramble[i+1], scramble[i+2], scramble[i+3], + scramble[i+4], scramble[i+5], scramble[i+6], scramble[i+7]); + } + fprintf(f, " };\n"); + fprintf(f, "\n"); + } + + if (blen > 0) { + /* small adjustments to _a_ to make values distinct */ + if (smax <= UB1MAXVAL+1 || blen >= USE_SCRAMBLE) + fprintf(f, " static const unsigned char "); + else + fprintf(f, " static const unsigned short "); + fprintf(f, "tab[] = {\n"); + + if (blen < 16) { + for (i=0; iname_k = yasm__xstrdup(kw->name); + k->len_k = (ub4)strlen(kw->name); + k->next_k = keys; + keys = k; + nkeys++; + } + + /* find the hash */ + findhash(&tab, &tabh, &alen, &blen, &salt, &final, + scramble, &smax, keys, nkeys, &form); + + /* The hash function beginning */ + fprintf(out, "static const struct %s *\n", struct_name); + fprintf(out, "%s(const char *key, size_t len)\n", lookup_function_name); + fprintf(out, "{\n"); + + /* output the dir table: this should loop up to smax for NORMAL_HP, + * or up to pakd.nkeys for MINIMAL_HP. + */ + fprintf(out, " static const struct %s pd[%lu] = {\n", struct_name, nkeys); + for (i=0; iname, tabh[i].key_h->name_k) == 0) + break; + } + if (!kw) { + report_error("internal error: could not find `%s'", + tabh[i].key_h->name_k); + break; + } + fprintf(out, "#line %u \"%s\"\n", kw->line, filename); + fprintf(out, " {\"%s\"%s}", kw->name, kw->args); + } else + fprintf(out, " { NULL }"); + + if (i < nkeys-1) + fprintf(out, ","); + fprintf(out, "\n"); + } + fprintf(out, " };\n"); + + /* output the hash tab[] array */ + make_c_tab(out, tab, smax, blen, scramble); + + /* The hash function body */ + fprintf(out, " const struct %s *ret;\n", struct_name); + for (i=0; i= %lu) return NULL;\n", nkeys); + fprintf(out, " ret = &pd[rsl];\n"); + fprintf(out, " if (strcmp(key, ret->name) != 0) return NULL;\n"); + fprintf(out, " return ret;\n"); + fprintf(out, "}\n"); + fprintf(out, "\n"); + + free(tab); + free(tabh); +} + +int +main(int argc, char *argv[]) +{ + FILE *in, *out; + size_t i; + char *ch; + static char line[1024], tmp[1024]; + static char struct_name[128] = ""; + static char lookup_function_name[128] = "in_word_set"; + static char language[16] = ""; + static char delimiters[16] = ",\r\n"; + static char name[128]; + static char filename[768]; + int need_struct = 0; + int have_struct = 0; + int go_keywords = 0; + int ignore_case = 0; + int compare_strncmp = 0; + int readonly_tables = 0; + slist usercode, usercode2; + keyword_list keywords; + sval *sv; + keyword *kw; + + if (argc != 3) { + fprintf(stderr, "Usage: genperf \n"); + return EXIT_FAILURE; + } + + in = fopen(argv[1], "rt"); + if (!in) { + fprintf(stderr, "Could not open `%s' for reading\n", argv[1]); + return EXIT_FAILURE; + } + + ch = argv[1]; + i = 0; + while (*ch && i < 767) { + if (*ch == '\\') { + filename[i++] = '/'; + ch++; + } else + filename[i++] = *ch++; + } + filename[i] = '\0'; + + STAILQ_INIT(&usercode); + STAILQ_INIT(&usercode2); + STAILQ_INIT(&keywords); + + /* Parse declarations section */ + while (fgets(line, 1024, in)) { + /* Comments start with # as the first thing on a line */ + if (line[0] == '#') { + cur_line++; + continue; + } + + /* Handle structure declaration */ + if (strncmp(line, "struct", 6) == 0) { + int braces; + + if (!need_struct) { + report_error("struct without %%struct-type declaration"); + return EXIT_FAILURE; + } + if (have_struct) { + report_error("more than one struct declaration"); + return EXIT_FAILURE; + } + have_struct = 1; + + /* copy struct name */ + ch = &line[6]; + while (isspace(*ch)) + ch++; + i = 0; + while ((isalnum(*ch) || *ch == '_') && i < 127) + struct_name[i++] = *ch++; + if (i == 127) { + report_error("struct name too long"); + return EXIT_FAILURE; + } + struct_name[i] = '\0'; + + sv = yasm_xmalloc(sizeof(sval)); + sprintf(tmp, "#line %u \"%s\"\n", cur_line, filename); + sv->str = yasm__xstrdup(tmp); + STAILQ_INSERT_TAIL(&usercode, sv, link); + + braces = 0; + do { + /* count braces to determine when we're done */ + ch = line; + while (*ch != '\0') { + if (*ch == '{') + braces++; + if (*ch == '}') + braces--; + ch++; + } + sv = yasm_xmalloc(sizeof(sval)); + sv->str = yasm__xstrdup(line); + STAILQ_INSERT_TAIL(&usercode, sv, link); + cur_line++; + if (braces <= 0) + break; + } while (fgets(line, 1024, in)); + cur_line++; + continue; + } + + /* Ignore non-declaration lines */ + if (line[0] != '%') { + cur_line++; + continue; + } + + /* %% terminates declarations section */ + if (line[1] == '%') { + if (need_struct && !have_struct) { + report_error("%%struct-type declaration, but no struct found"); + return EXIT_FAILURE; + } + go_keywords = 1; + break; /* move on to keywords section */ + } + + /* %{ begins a verbatim code section that ends with %} */ + if (line[1] == '{') { + sv = yasm_xmalloc(sizeof(sval)); + sprintf(tmp, "#line %u \"%s\"\n\n", cur_line, filename); + sv->str = yasm__xstrdup(tmp); + STAILQ_INSERT_TAIL(&usercode, sv, link); + + while (fgets(line, 1024, in)) { + cur_line++; + if (line[0] == '%' && line[1] == '}') + break; + sv = yasm_xmalloc(sizeof(sval)); + sv->str = yasm__xstrdup(line); + STAILQ_INSERT_TAIL(&usercode, sv, link); + } + cur_line++; + continue; + } + + if (strncmp(&line[1], "ignore-case", 11) == 0) { + ignore_case = 1; + } else if (strncmp(&line[1], "compare-strncmp", 15) == 0) { + compare_strncmp = 1; + } else if (strncmp(&line[1], "readonly-tables", 15) == 0) { + readonly_tables = 1; + } else if (strncmp(&line[1], "language=", 9) == 0) { + ch = &line[10]; + i = 0; + while (*ch != '\n' && i<15) + language[i++] = *ch++; + language[i] = '\0'; + } else if (strncmp(&line[1], "delimiters=", 11) == 0) { + ch = &line[12]; + i = 0; + while (i<15) + delimiters[i++] = *ch++; + delimiters[i] = '\0'; + } else if (strncmp(&line[1], "enum", 4) == 0) { + /* unused */ + } else if (strncmp(&line[1], "struct-type", 11) == 0) { + need_struct = 1; + } else if (strncmp(&line[1], "define", 6) == 0) { + /* Several different defines we need to handle */ + ch = &line[7]; + while (isspace(*ch)) + ch++; + + if (strncmp(ch, "hash-function-name", 18) == 0) { + /* unused */ + } else if (strncmp(ch, "lookup-function-name", 20) == 0) { + ch = &line[7+20+1]; + while (isspace(*ch)) + ch++; + i = 0; + while ((isalnum(*ch) || *ch == '_') && i < 127) + lookup_function_name[i++] = *ch++; + if (i == 127) { + report_error("struct name too long"); + return EXIT_FAILURE; + } + lookup_function_name[i] = '\0'; + } else { + fprintf(stderr, "%u: unrecognized define `%s'\n", cur_line, + line); + } + } else { + fprintf(stderr, "%u: unrecognized declaration `%s'\n", cur_line, + line); + } + + cur_line++; + } + + if (!go_keywords) { + report_error("no keywords section found"); + return EXIT_FAILURE; + } + + /* Parse keywords section */ + while (fgets(line, 1024, in)) { + char *d; + + /* Comments start with # as the first thing on a line */ + if (line[0] == '#') { + cur_line++; + continue; + } + + /* Keywords section terminated with %% */ + if (line[0] == '%' && line[1] == '%') + break; + + /* Look for name */ + ch = &line[0]; + i = 0; + while (strchr(delimiters, *ch) == NULL && i < 127) + name[i++] = *ch++; + if (i == 127) { + report_error("keyword name too long"); + return EXIT_FAILURE; + } + name[i] = '\0'; + + /* Strip EOL */ + d = strrchr(ch, '\n'); + if (d) + *d = '\0'; + d = strrchr(ch, '\r'); + if (d) + *d = '\0'; + kw = yasm_xmalloc(sizeof(keyword)); + kw->name = yasm__xstrdup(name); + kw->args = yasm__xstrdup(ch); + kw->line = cur_line; + STAILQ_INSERT_TAIL(&keywords, kw, link); + cur_line++; + } + + if (errors > 0) + return EXIT_FAILURE; + + /* Pull in any end code */ + if (!feof(in)) { + sv = yasm_xmalloc(sizeof(sval)); + sprintf(tmp, "#line %u \"%s\"\n\n", cur_line, filename); + sv->str = yasm__xstrdup(tmp); + STAILQ_INSERT_TAIL(&usercode2, sv, link); + + while (fgets(line, 1024, in)) { + sv = yasm_xmalloc(sizeof(sval)); + sv->str = yasm__xstrdup(line); + STAILQ_INSERT_TAIL(&usercode2, sv, link); + } + } + + /* output code */ + out = fopen(argv[2], "wt"); + if (!out) { + fprintf(stderr, "Could not open `%s' for writing\n", argv[2]); + return EXIT_FAILURE; + } + + fprintf(out, "/* %s code produced by genperf */\n", language); + fprintf(out, "/* Command-line: genperf %s %s */\n", argv[1], argv[2]); + + STAILQ_FOREACH(sv, &usercode, link) + fprintf(out, "%s", sv->str); + + /* Get perfect hash */ + perfect_gen(out, lookup_function_name, struct_name, &keywords, filename); + + STAILQ_FOREACH(sv, &usercode2, link) + fprintf(out, "%s", sv->str); + + fclose(out); + + if (errors > 0) { + remove(argv[2]); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + diff --git a/third-party/yasm/yasm-1.3.0/tools/genperf/perfect.c b/third-party/yasm/yasm-1.3.0/tools/genperf/perfect.c new file mode 100644 index 0000000000..a9a14c02ee --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/genperf/perfect.c @@ -0,0 +1,1179 @@ +/* Modified for use with yasm by Peter Johnson. */ +/* +------------------------------------------------------------------------------ +perfect.c: code to generate code for a hash for perfect hashing. +(c) Bob Jenkins, September 1996, December 1999 +You may use this code in any way you wish, and it is free. No warranty. +I hereby place this in the public domain. +Source is http://burtleburtle.net/bob/c/perfect.c + +This generates a minimal perfect hash function. That means, given a +set of n keys, this determines a hash function that maps each of +those keys into a value in 0..n-1 with no collisions. + +The perfect hash function first uses a normal hash function on the key +to determine (a,b) such that the pair (a,b) is distinct for all +keys, then it computes a^scramble[tab[b]] to get the final perfect hash. +tab[] is an array of 1-byte values and scramble[] is a 256-term array of +2-byte or 4-byte values. If there are n keys, the length of tab[] is a +power of two between n/3 and n. + +I found the idea of computing distinct (a,b) values in "Practical minimal +perfect hash functions for large databases", Fox, Heath, Chen, and Daoud, +Communications of the ACM, January 1992. They found the idea in Chichelli +(CACM Jan 1980). Beyond that, our methods differ. + +The key is hashed to a pair (a,b) where a in 0..*alen*-1 and b in +0..*blen*-1. A fast hash function determines both a and b +simultaneously. Any decent hash function is likely to produce +hashes so that (a,b) is distinct for all pairs. I try the hash +using different values of *salt* until all pairs are distinct. + +The final hash is (a XOR scramble[tab[b]]). *scramble* is a +predetermined mapping of 0..255 into 0..smax-1. *tab* is an +array that we fill in in such a way as to make the hash perfect. + +First we fill in all values of *tab* that are used by more than one +key. We try all possible values for each position until one works. + +This leaves m unmapped keys and m values that something could hash to. +If you treat unmapped keys as lefthand nodes and unused hash values +as righthand nodes, and draw a line connecting each key to each hash +value it could map to, you get a bipartite graph. We attempt to +find a perfect matching in this graph. If we succeed, we have +determined a perfect hash for the whole set of keys. + +*scramble* is used because (a^tab[i]) clusters keys around *a*. +------------------------------------------------------------------------------ +*/ + +#include +#include "tools/genperf/standard.h" +#include "libyasm/coretype.h" +#include "libyasm/phash.h" +#include "tools/genperf/perfect.h" + +#define CHECKSTATE 8 + +/* +------------------------------------------------------------------------------ +Find the mapping that will produce a perfect hash +------------------------------------------------------------------------------ +*/ + +/* return the ceiling of the log (base 2) of val */ +ub4 phash_log2(val) +ub4 val; +{ + ub4 i; + for (i=0; ((ub4)1<>const3)); + x = (x+(x<>const5)); + } + return x; +} + +/* initialize scramble[] with distinct random values in 0..smax-1 */ +static void scrambleinit( + ub4 *scramble, /* hash is a^scramble[tab[b]] */ + ub4 smax) /* scramble values should be in 0..smax-1 */ +{ + ub4 i; + + /* fill scramble[] with distinct random integers in 0..smax-1 */ + for (i=0; ihashtype) + { + case STRING_HT: + if ((key1->len_k == key2->len_k) && + !memcmp(key1->name_k, key2->name_k, (size_t)key1->len_k)) + { + fprintf(stderr, "perfect.c: Duplicates keys! %.*s\n", + (int)key1->len_k, key1->name_k); + exit(EXIT_FAILURE); + } + break; + case INT_HT: + if (key1->hash_k == key2->hash_k) + { + fprintf(stderr, "perfect.c: Duplicate keys! %.8lx\n", key1->hash_k); + exit(EXIT_FAILURE); + } + break; + case AB_HT: + fprintf(stderr, "perfect.c: Duplicate keys! %.8lx %.8lx\n", + key1->a_k, key1->b_k); + exit(EXIT_FAILURE); + break; + default: + fprintf(stderr, "perfect.c: Illegal hash type %ld\n", (ub4)form->hashtype); + exit(EXIT_FAILURE); + break; + } +} + + +/* + * put keys in tabb according to key->b_k + * check if the initial hash might work + */ +static int inittab( + bstuff *tabb, /* output, list of keys with b for (a,b) */ + ub4 blen, /* length of tabb */ + key *keys, /* list of keys already hashed */ + hashform *form, /* user directives */ + int complete) /* TRUE means to complete init despite collisions */ +{ + int nocollision = TRUE; + key *mykey; + + memset((void *)tabb, 0, (size_t)(sizeof(bstuff)*blen)); + + /* Two keys with the same (a,b) guarantees a collision */ + for (mykey=keys; mykey; mykey=mykey->next_k) + { + key *otherkey; + + for (otherkey=tabb[mykey->b_k].list_b; + otherkey; + otherkey=otherkey->nextb_k) + { + if (mykey->a_k == otherkey->a_k) + { + nocollision = FALSE; + checkdup(mykey, otherkey, form); + if (!complete) + return FALSE; + } + } + ++tabb[mykey->b_k].listlen_b; + mykey->nextb_k = tabb[mykey->b_k].list_b; + tabb[mykey->b_k].list_b = mykey; + } + + /* no two keys have the same (a,b) pair */ + return nocollision; +} + + +/* Do the initial hash for normal mode (use lookup and checksum) */ +static void initnorm( + key *keys, /* list of all keys */ + ub4 alen, /* (a,b) has a in 0..alen-1, a power of 2 */ + ub4 blen, /* (a,b) has b in 0..blen-1, a power of 2 */ + ub4 smax, /* maximum range of computable hash values */ + ub4 salt, /* used to initialize the hash function */ + gencode *final) /* output, code for the final hash */ +{ + key *mykey; + if (phash_log2(alen)+phash_log2(blen) > UB4BITS) + { + ub4 initlev = (salt*0x9e3779b9)&0xffffffff; /* the golden ratio; an arbitrary value */ + + for (mykey=keys; mykey; mykey=mykey->next_k) + { + ub4 i, state[CHECKSTATE]; + for (i=0; iname_k, mykey->len_k, state); + mykey->a_k = state[0]&(alen-1); + mykey->b_k = state[1]&(blen-1); + } + final->used = 4; + sprintf(final->line[0], + " unsigned long i,state[CHECKSTATE],rsl;\n"); + sprintf(final->line[1], + " for (i=0; iline[2], + " phash_checksum(key, len, state);\n"); + sprintf(final->line[3], + " rsl = ((state[0]&0x%lx)^scramble[tab[state[1]&0x%lx]]);\n", + alen-1, blen-1); + } + else + { + ub4 loga = phash_log2(alen); /* log based 2 of blen */ + ub4 initlev = (salt*0x9e3779b9)&0xffffffff; /* the golden ratio; an arbitrary value */ + + for (mykey=keys; mykey; mykey=mykey->next_k) + { + ub4 hash = phash_lookup(mykey->name_k, mykey->len_k, initlev); + mykey->a_k = (loga > 0) ? hash>>(UB4BITS-loga) : 0; + mykey->b_k = (blen > 1) ? hash&(blen-1) : 0; + } + final->used = 2; + sprintf(final->line[0], + " unsigned long rsl, val = phash_lookup(key, len, 0x%lxUL);\n", initlev); + if (smax <= 1) + { + sprintf(final->line[1], " rsl = 0;\n"); + } + else if (blen < USE_SCRAMBLE) + { + sprintf(final->line[1], " rsl = ((val>>%ld)^tab[val&0x%lx]);\n", + UB4BITS-phash_log2(alen), blen-1); + } + else + { + sprintf(final->line[1], " rsl = ((val>>%ld)^scramble[tab[val&0x%lx]]);\n", + UB4BITS-phash_log2(alen), blen-1); + } + } +} + + + +/* Do initial hash for inline mode */ +static void initinl( + key *keys, /* list of all keys */ + ub4 alen, /* (a,b) has a in 0..alen-1, a power of 2 */ + ub4 blen, /* (a,b) has b in 0..blen-1, a power of 2 */ + ub4 smax, /* range of computable hash values */ + ub4 salt, /* used to initialize the hash function */ + gencode *final) /* generated code for final hash */ +{ + key *mykey; + ub4 amask = alen-1; + ub4 blog = phash_log2(blen); + ub4 initval = salt*0x9e3779b9; /* the golden ratio; an arbitrary value */ + + /* It's more important to have b uniform than a, so b is the low bits */ + for (mykey = keys; mykey != (key *)0; mykey = mykey->next_k) + { + ub4 hash = initval; + ub4 i; + for (i=0; ilen_k; ++i) + { + hash = ((ub1)mykey->name_k[i] ^ hash) + ((hash<<(UB4BITS-6))+(hash>>6)); + } + mykey->hash_k = hash; + mykey->a_k = (alen > 1) ? (hash & amask) : 0; + mykey->b_k = (blen > 1) ? (hash >> (UB4BITS-blog)) : 0; + } + final->used = 1; + if (smax <= 1) + { + sprintf(final->line[0], " unsigned long rsl = 0;\n"); + } + else if (blen < USE_SCRAMBLE) + { + sprintf(final->line[0], " unsigned long rsl = ((val & 0x%lx) ^ tab[val >> %ld]);\n", + amask, UB4BITS-blog); + } + else + { + sprintf(final->line[0], " unsigned long rsl = ((val & 0x%lx) ^ scramble[tab[val >> %ld]]);\n", + amask, UB4BITS-blog); + } +} + + +/* + * Run a hash function on the key to get a and b + * Returns: + * 0: didn't find distinct (a,b) for all keys + * 1: found distinct (a,b) for all keys, put keys in tabb[] + * 2: found a perfect hash, no need to do any more work + */ +static ub4 initkey( + key *keys, /* list of all keys */ + ub4 nkeys, /* total number of keys */ + bstuff *tabb, /* stuff indexed by b */ + ub4 alen, /* (a,b) has a in 0..alen-1, a power of 2 */ + ub4 blen, /* (a,b) has b in 0..blen-1, a power of 2 */ + ub4 smax, /* range of computable hash values */ + ub4 salt, /* used to initialize the hash function */ + hashform *form, /* user directives */ + gencode *final) /* code for final hash */ +{ + /* Do the initial hash of the keys */ + switch(form->mode) + { + case NORMAL_HM: + initnorm(keys, alen, blen, smax, salt, final); + break; + case INLINE_HM: + initinl(keys, alen, blen, smax, salt, final); + break; +#if 0 + case HEX_HM: + case DECIMAL_HM: + finished = inithex(keys, nkeys, alen, blen, smax, salt, final, form); + if (finished) return 2; + break; +#endif + default: + fprintf(stderr, "fatal error: illegal mode\n"); + exit(1); + } + + if (nkeys <= 1) + { + final->used = 1; + sprintf(final->line[0], " unsigned long rsl = 0;\n"); + return 2; + } + + return inittab(tabb, blen, keys, form, FALSE); +} + +/* Print an error message and exit if there are duplicates */ +static void duplicates( + bstuff *tabb, /* array of lists of keys with the same b */ + ub4 blen, /* length of tabb, a power of 2 */ + key *keys, + hashform *form) /* user directives */ +{ + ub4 i; + key *key1; + key *key2; + + (void)inittab(tabb, blen, keys, form, TRUE); + + /* for each b, do nested loops through key list looking for duplicates */ + for (i=0; inextb_k) + for (key2=key1->nextb_k; key2; key2=key2->nextb_k) + checkdup(key1, key2, form); +} + + +/* Try to apply an augmenting list */ +static int apply( + bstuff *tabb, + hstuff *tabh, + qstuff *tabq, + ub4 blen, + ub4 *scramble, + ub4 tail, + int rollback) /* FALSE applies augmenting path, TRUE rolls back */ +{ + ub4 hash; + key *mykey; + bstuff *pb; + ub4 child; + ub4 parent; + ub4 stabb; /* scramble[tab[b]] */ + + /* walk from child to parent */ + for (child=tail-1; child; child=parent) + { + parent = tabq[child].parent_q; /* find child's parent */ + pb = tabq[parent].b_q; /* find parent's list of siblings */ + + /* erase old hash values */ + stabb = scramble[pb->val_b]; + for (mykey=pb->list_b; mykey; mykey=mykey->nextb_k) + { + hash = mykey->a_k^stabb; + if (mykey == tabh[hash].key_h) + { /* erase hash for all of child's siblings */ + tabh[hash].key_h = (key *)0; + } + } + + /* change pb->val_b, which will change the hashes of all parent siblings */ + pb->val_b = (rollback ? tabq[child].oldval_q : tabq[child].newval_q); + + /* set new hash values */ + stabb = scramble[pb->val_b]; + for (mykey=pb->list_b; mykey; mykey=mykey->nextb_k) + { + hash = mykey->a_k^stabb; + if (rollback) + { + if (parent == 0) continue; /* root never had a hash */ + } + else if (tabh[hash].key_h) + { + /* very rare: roll back any changes */ + apply(tabb, tabh, tabq, blen, scramble, tail, TRUE); + return FALSE; /* failure, collision */ + } + tabh[hash].key_h = mykey; + } + } + return TRUE; +} + + +/* +------------------------------------------------------------------------------- +augment(): Add item to the mapping. + +Construct a spanning tree of *b*s with *item* as root, where each +parent can have all its hashes changed (by some new val_b) with +at most one collision, and each child is the b of that collision. + +I got this from Tarjan's "Data Structures and Network Algorithms". The +path from *item* to a *b* that can be remapped with no collision is +an "augmenting path". Change values of tab[b] along the path so that +the unmapped key gets mapped and the unused hash value gets used. + +Assuming 1 key per b, if m out of n hash values are still unused, +you should expect the transitive closure to cover n/m nodes before +an unused node is found. Sum(i=1..n)(n/i) is about nlogn, so expect +this approach to take about nlogn time to map all single-key b's. +------------------------------------------------------------------------------- +*/ +static int augment( + bstuff *tabb, /* stuff indexed by b */ + hstuff *tabh, /* which key is associated with which hash, indexed by hash */ + qstuff *tabq, /* queue of *b* values, this is the spanning tree */ + ub4 blen, /* length of tabb */ + ub4 *scramble, /* final hash is a^scramble[tab[b]] */ + ub4 smax, /* highest value in scramble */ + bstuff *item, /* &tabb[b] for the b to be mapped */ + ub4 nkeys, /* final hash must be in 0..nkeys-1 */ + ub4 highwater, /* a value higher than any now in tabb[].water_b */ + hashform *form) /* TRUE if we should do a minimal perfect hash */ +{ + ub4 q; /* current position walking through the queue */ + ub4 tail; /* tail of the queue. 0 is the head of the queue. */ + ub4 limit=((blen < USE_SCRAMBLE) ? smax : UB1MAXVAL+1); + ub4 highhash = ((form->perfect == MINIMAL_HP) ? nkeys : smax); + int trans = (form->speed == SLOW_HS || form->perfect == MINIMAL_HP); + + /* initialize the root of the spanning tree */ + tabq[0].b_q = item; + tail = 1; + + /* construct the spanning tree by walking the queue, add children to tail */ + for (q=0; qval_b */ + + if (!trans && (q == 1)) + break; /* don't do transitive closure */ + + for (i=0; ilist_b; mykey; mykey=mykey->nextb_k) + { + key *childkey; + ub4 hash = mykey->a_k^scramble[i]; + + if (hash >= highhash) break; /* out of bounds */ + childkey = tabh[hash].key_h; + + if (childkey) + { + bstuff *hitb = &tabb[childkey->b_k]; + + if (childb) + { + if (childb != hitb) break; /* hit at most one child b */ + } + else + { + childb = hitb; /* remember this as childb */ + if (childb->water_b == highwater) break; /* already explored */ + } + } + } + if (mykey) continue; /* myb with i has multiple collisions */ + + /* add childb to the queue of reachable things */ + if (childb) childb->water_b = highwater; + tabq[tail].b_q = childb; + tabq[tail].newval_q = (ub2)i; /* how to make parent (myb) use this hash */ + tabq[tail].oldval_q = myb->val_b; /* need this for rollback */ + tabq[tail].parent_q = q; + ++tail; + + if (!childb) + { /* found an *i* with no collisions? */ + /* try to apply the augmenting path */ + if (apply(tabb, tabh, tabq, blen, scramble, tail, FALSE)) + return TRUE; /* success, item was added to the perfect hash */ + + --tail; /* don't know how to handle such a child! */ + } + } + } + return FALSE; +} + + +/* find a mapping that makes this a perfect hash */ +static int perfect( + bstuff *tabb, + hstuff *tabh, + qstuff *tabq, + ub4 blen, + ub4 smax, + ub4 *scramble, + ub4 nkeys, + hashform *form) +{ + ub4 maxkeys; /* maximum number of keys for any b */ + ub4 i, j; + + /* clear any state from previous attempts */ + memset((void *)tabh, 0, + (size_t)(sizeof(hstuff)* + ((form->perfect == MINIMAL_HP) ? nkeys : smax))); + memset((void *)tabq, 0, (size_t)(sizeof(qstuff)*(blen+1))); + + for (maxkeys=0,i=0; i maxkeys) + maxkeys = tabb[i].listlen_b; + + /* In descending order by number of keys, map all *b*s */ + for (j=maxkeys; j>0; --j) + for (i=0; ia_k, key->b_k), and final->form == AB_HK. + */ +static void hash_ab( + bstuff **tabb, /* output, tab[] of the perfect hash, length *blen */ + ub4 *alen, /* output, 0..alen-1 is range for a of (a,b) */ + ub4 *blen, /* output, 0..blen-1 is range for b of (a,b) */ + ub4 *salt, /* output, initializes initial hash */ + gencode *final, /* code for final hash */ + ub4 *scramble, /* input, hash = a^scramble[tab[b]] */ + ub4 *smax, /* input, scramble[i] in 0..smax-1 */ + key *keys, /* input, keys to hash */ + ub4 nkeys, /* input, number of keys being hashed */ + hashform *form) /* user directives */ +{ + hstuff *tabh; + qstuff *tabq; + key *mykey; + ub4 i; + int used_tab; + + /* initially make smax the first power of two bigger than nkeys */ + *smax = ((ub4)1<next_k) + { + while (*alen <= mykey->a_k) *alen *= 2; + while (*blen <= mykey->b_k) *blen *= 2; + } + if (*alen > 2**smax) + { + fprintf(stderr, + "perfect.c: Can't deal with (A,B) having A bigger than twice \n"); + fprintf(stderr, + " the smallest power of two greater or equal to any legal hash.\n"); + exit(EXIT_FAILURE); + } + + /* allocate working memory */ + *tabb = (bstuff *)yasm_xmalloc((size_t)(sizeof(bstuff)*(*blen))); + tabq = (qstuff *)yasm_xmalloc(sizeof(qstuff)*(*blen+1)); + tabh = (hstuff *)yasm_xmalloc(sizeof(hstuff)*(form->perfect == MINIMAL_HP ? + nkeys : *smax)); + + /* check that (a,b) are distinct and put them in tabb indexed by b */ + (void)inittab(*tabb, *blen, keys, form, FALSE); + + /* try with smax */ + if (!perfect(*tabb, tabh, tabq, *blen, *smax, scramble, nkeys, form)) + { + if (form->perfect == MINIMAL_HP) + { + fprintf(stderr, "fatal error: Cannot find perfect hash for user (A,B) pairs\n"); + exit(EXIT_FAILURE); + } + else + { + /* try with 2*smax */ + free((void *)tabh); + *smax = *smax * 2; + scrambleinit(scramble, *smax); + tabh = (hstuff *)yasm_xmalloc(sizeof(hstuff)*(form->perfect == MINIMAL_HP ? + nkeys : *smax)); + if (!perfect(*tabb, tabh, tabq, *blen, *smax, scramble, nkeys, form)) + { + fprintf(stderr, "fatal error: Cannot find perfect hash for user (A,B) pairs\n"); + exit(EXIT_FAILURE); + } + } + } + + /* check if tab[] was really needed */ + for (i=0; i<*blen; ++i) + { + if ((*tabb)[i].val_b != 0) break; /* assumes permute(0) == 0 */ + } + used_tab = (i < *blen); + + /* write the code for the perfect hash */ + *salt = 1; + final->used = 1; + if (!used_tab) + { + sprintf(final->line[0], " unsigned long rsl = a;\n"); + } + else if (*blen < USE_SCRAMBLE) + { + sprintf(final->line[0], " unsigned long rsl = (a ^ tab[b]);\n"); + } + else + { + sprintf(final->line[0], " unsigned long rsl = (a ^ scramble[tab[b]]);\n"); + } + + free((void *)tabq); + free((void *)tabh); +} + + +/* guess initial values for alen and blen */ +static void initalen( + ub4 *alen, /* output, initial alen */ + ub4 *blen, /* output, initial blen */ + ub4 *smax,/* input, power of two greater or equal to max hash value */ + ub4 nkeys, /* number of keys being hashed */ + hashform *form) /* user directives */ +{ + /* + * Find initial *alen, *blen + * Initial alen and blen values were found empirically. Some factors: + * + * If smax<256 there is no scramble, so tab[b] needs to cover 0..smax-1. + * + * alen and blen must be powers of 2 because the values in 0..alen-1 and + * 0..blen-1 are produced by applying a bitmask to the initial hash function. + * + * alen must be less than smax, in fact less than nkeys, because otherwise + * there would often be no i such that a^scramble[i] is in 0..nkeys-1 for + * all the *a*s associated with a given *b*, so there would be no legal + * value to assign to tab[b]. This only matters when we're doing a minimal + * perfect hash. + * + * It takes around 800 trials to find distinct (a,b) with nkey=smax*(5/8) + * and alen*blen = smax*smax/32. + * + * Values of blen less than smax/4 never work, and smax/2 always works. + * + * We want blen as small as possible because it is the number of bytes in + * the huge array we must create for the perfect hash. + * + * When nkey <= smax*(5/8), blen=smax/4 works much more often with + * alen=smax/8 than with alen=smax/4. Above smax*(5/8), blen=smax/4 + * doesn't seem to care whether alen=smax/8 or alen=smax/4. I think it + * has something to do with 5/8 = 1/8 * 5. For example examine 80000, + * 85000, and 90000 keys with different values of alen. This only matters + * if we're doing a minimal perfect hash. + * + * When alen*blen <= 1<perfect == NORMAL_HP) + { + if ((form->speed == FAST_HS) && (nkeys > *smax*0.8)) + { + *smax = *smax * 2; + } + + *alen = ((form->hashtype==INT_HT) && *smax>131072) ? + ((ub4)1<<(UB4BITS-phash_log2(*blen))) : /* distinct keys => distinct (A,B) */ + *smax; /* no reason to restrict alen to smax/2 */ + if ((form->hashtype == INT_HT) && *smax < 32) + *blen = *smax; /* go for function speed not space */ + else if (*smax/4 <= (1<<14)) + *blen = ((nkeys <= *smax*0.56) ? *smax/32 : + (nkeys <= *smax*0.74) ? *smax/16 : *smax/8); + else + *blen = ((nkeys <= *smax*0.6) ? *smax/16 : + (nkeys <= *smax*0.8) ? *smax/8 : *smax/4); + + if ((form->speed == FAST_HS) && (*blen < *smax/8)) + *blen = *smax/8; + + if (*alen < 1) *alen = 1; + if (*blen < 1) *blen = 1; + } + else + { + switch(phash_log2(*smax)) + { + case 0: + *alen = 1; + *blen = 1; + break; + case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: + *alen = (form->perfect == NORMAL_HP) ? *smax : *smax/2; + *blen = *smax/2; + break; + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + if (form->speed == FAST_HS) + { + *alen = *smax/2; + *blen = *smax/4; + } + else if (*smax/4 < USE_SCRAMBLE) + { + *alen = ((nkeys <= *smax*0.52) ? *smax/8 : *smax/4); + *blen = ((nkeys <= *smax*0.52) ? *smax/8 : *smax/4); + } + else + { + *alen = ((nkeys <= *smax*(5.0/8.0)) ? *smax/8 : + (nkeys <= *smax*(3.0/4.0)) ? *smax/4 : *smax/2); + *blen = *smax/4; /* always give the small size a shot */ + } + break; + case 18: + if (form->speed == FAST_HS) + { + *alen = *smax/2; + *blen = *smax/2; + } + else + { + *alen = *smax/8; /* never require the multiword hash */ + *blen = (nkeys <= *smax*(5.0/8.0)) ? *smax/4 : *smax/2; + } + break; + case 19: + case 20: + *alen = (nkeys <= *smax*(5.0/8.0)) ? *smax/8 : *smax/2; + *blen = (nkeys <= *smax*(5.0/8.0)) ? *smax/4 : *smax/2; + break; + default: + *alen = *smax/2; /* just find a hash as quick as possible */ + *blen = *smax/2; /* we'll be thrashing virtual memory at this size */ + break; + } + } +} + +/* +** Try to find a perfect hash function. +** Return the successful initializer for the initial hash. +** Return 0 if no perfect hash could be found. +*/ +void findhash( + bstuff **tabb, /* output, tab[] of the perfect hash, length *blen */ + hstuff **tabh, /* output, table of keys indexed by hash value */ + ub4 *alen, /* output, 0..alen-1 is range for a of (a,b) */ + ub4 *blen, /* output, 0..blen-1 is range for b of (a,b) */ + ub4 *salt, /* output, initializes initial hash */ + gencode *final, /* code for final hash */ + ub4 *scramble, /* input, hash = a^scramble[tab[b]] */ + ub4 *smax, /* input, scramble[i] in 0..smax-1 */ + key *keys, /* input, keys to hash */ + ub4 nkeys, /* input, number of keys being hashed */ + hashform *form) /* user directives */ +{ + ub4 bad_initkey; /* how many times did initkey fail? */ + ub4 bad_perfect; /* how many times did perfect fail? */ + ub4 trysalt; /* trial initializer for initial hash */ + ub4 maxalen; + qstuff *tabq; /* table of stuff indexed by queue value, used by augment */ + + /* The case of (A,B) supplied by the user is a special case */ + if (form->hashtype == AB_HT) + { + hash_ab(tabb, alen, blen, salt, final, + scramble, smax, keys, nkeys, form); + return; + } + + /* guess initial values for smax, alen and blen */ + *smax = ((ub4)1<perfect == MINIMAL_HP) ? *smax/2 : *smax; + + /* allocate working memory */ + *tabb = (bstuff *)yasm_xmalloc((size_t)(sizeof(bstuff)*(*blen))); + tabq = (qstuff *)yasm_xmalloc(sizeof(qstuff)*(*blen+1)); + *tabh = (hstuff *)yasm_xmalloc(sizeof(hstuff)*(form->perfect == MINIMAL_HP ? + nkeys : *smax)); + + /* Actually find the perfect hash */ + *salt = 0; + bad_initkey = 0; + bad_perfect = 0; + for (trysalt=1; ; ++trysalt) + { + ub4 rslinit; + /* Try to find distinct (A,B) for all keys */ + + rslinit = initkey(keys, nkeys, *tabb, *alen, *blen, *smax, trysalt, + form, final); + + if (rslinit == 2) + { /* initkey actually found a perfect hash, not just distinct (a,b) */ + *salt = 1; + *blen = 0; + break; + } + else if (rslinit == 0) + { + /* didn't find distinct (a,b) */ + if (++bad_initkey >= RETRY_INITKEY) + { + /* Try to put more bits in (A,B) to make distinct (A,B) more likely */ + if (*alen < maxalen) + { + *alen *= 2; + } + else if (*blen < *smax) + { + *blen *= 2; + free(tabq); + free(*tabb); + *tabb = (bstuff *)yasm_xmalloc((size_t)(sizeof(bstuff)*(*blen))); + tabq = (qstuff *)yasm_xmalloc((size_t)(sizeof(qstuff)*(*blen+1))); + } + else + { + duplicates(*tabb, *blen, keys, form); /* check for duplicates */ + fprintf(stderr, "fatal error: Cannot perfect hash: cannot find distinct (A,B)\n"); + exit(EXIT_FAILURE); + } + bad_initkey = 0; + bad_perfect = 0; + } + continue; /* two keys have same (a,b) pair */ + } + + /* Given distinct (A,B) for all keys, build a perfect hash */ + if (!perfect(*tabb, *tabh, tabq, *blen, *smax, scramble, nkeys, form)) + { + if ((form->hashtype != INT_HT && ++bad_perfect >= RETRY_PERFECT) || + (form->hashtype == INT_HT && ++bad_perfect >= RETRY_HEX)) + { + if (*blen < *smax) + { + *blen *= 2; + free(*tabb); + free(tabq); + *tabb = (bstuff *)yasm_xmalloc((size_t)(sizeof(bstuff)*(*blen))); + tabq = (qstuff *)yasm_xmalloc((size_t)(sizeof(qstuff)*(*blen+1))); + --trysalt; /* we know this salt got distinct (A,B) */ + } + else + { + fprintf(stderr, "fatal error: Cannot perfect hash: cannot build tab[]\n"); + exit(EXIT_FAILURE); + } + bad_perfect = 0; + } + continue; + } + + *salt = trysalt; + break; + } + + /* free working memory */ + free((void *)tabq); +} + +#if 0 +/* +------------------------------------------------------------------------------ +Input/output type routines +------------------------------------------------------------------------------ +*/ + +/* get the list of keys */ +static void getkeys(keys, nkeys, textroot, keyroot, form) +key **keys; /* list of all keys */ +ub4 *nkeys; /* number of keys */ +reroot *textroot; /* get space to store key text */ +reroot *keyroot; /* get space for keys */ +hashform *form; /* user directives */ +{ + key *mykey; + char *mytext; + mytext = (char *)renew(textroot); + *keys = 0; + *nkeys = 0; + while (fgets(mytext, MAXKEYLEN, stdin)) + { + mykey = (key *)renew(keyroot); + if (form->mode == AB_HM) + { + sscanf(mytext, "%lx %lx ", &mykey->a_k, &mykey->b_k); + } + else if (form->mode == ABDEC_HM) + { + sscanf(mytext, "%ld %ld ", &mykey->a_k, &mykey->b_k); + } + else if (form->mode == HEX_HM) + { + sscanf(mytext, "%lx ", &mykey->hash_k); + } + else if (form->mode == DECIMAL_HM) + { + sscanf(mytext, "%ld ", &mykey->hash_k); + } + else + { + mykey->name_k = (ub1 *)mytext; + mytext = (char *)renew(textroot); + mykey->len_k = (ub4)(strlen((char *)mykey->name_k)-1); + } + mykey->next_k = *keys; + *keys = mykey; + ++*nkeys; + } + redel(textroot, mytext); +} + +/* make the .c file */ +static void make_c(tab, smax, blen, scramble, final, form) +bstuff *tab; /* table indexed by b */ +ub4 smax; /* range of scramble[] */ +ub4 blen; /* b in 0..blen-1, power of 2 */ +ub4 *scramble; /* used in final hash */ +gencode *final; /* code for the final hash */ +hashform *form; /* user directives */ +{ + ub4 i; + FILE *f; + f = fopen("phash.c", "w"); + fprintf(f, "/* table for the mapping for the perfect hash */\n"); + fprintf(f, "#include \"lookupa.h\"\n"); + fprintf(f, "\n"); + if (blen >= USE_SCRAMBLE) + { + fprintf(f, "/* A way to make the 1-byte values in tab bigger */\n"); + if (smax > UB2MAXVAL+1) + { + fprintf(f, "unsigned long scramble[] = {\n"); + for (i=0; i<=UB1MAXVAL; i+=4) + fprintf(f, "0x%.8lx, 0x%.8lx, 0x%.8lx, 0x%.8lx,\n", + scramble[i+0], scramble[i+1], scramble[i+2], scramble[i+3]); + } + else + { + fprintf(f, "unsigned short scramble[] = {\n"); + for (i=0; i<=UB1MAXVAL; i+=8) + fprintf(f, +"0x%.4lx, 0x%.4lx, 0x%.4lx, 0x%.4lx, 0x%.4lx, 0x%.4lx, 0x%.4lx, 0x%.4lx,\n", + scramble[i+0], scramble[i+1], scramble[i+2], scramble[i+3], + scramble[i+4], scramble[i+5], scramble[i+6], scramble[i+7]); + } + fprintf(f, "};\n"); + fprintf(f, "\n"); + } + if (blen > 0) + { + fprintf(f, "/* small adjustments to _a_ to make values distinct */\n"); + + if (smax <= UB1MAXVAL+1 || blen >= USE_SCRAMBLE) + fprintf(f, "unsigned char tab[] = {\n"); + else + fprintf(f, "unsigned short tab[] = {\n"); + + if (blen < 16) + { + for (i=0; imode) + { + case NORMAL_HM: + fprintf(f, "ub4 phash(key, len)\n"); + fprintf(f, "char *key;\n"); + fprintf(f, "int len;\n"); + break; + case INLINE_HM: + case HEX_HM: + case DECIMAL_HM: + fprintf(f, "ub4 phash(val)\n"); + fprintf(f, "ub4 val;\n"); + break; + case AB_HM: + case ABDEC_HM: + fprintf(f, "ub4 phash(a,b)\n"); + fprintf(f, "ub4 a;\n"); + fprintf(f, "ub4 b;\n"); + break; + } + fprintf(f, "{\n"); + for (i=0; iused; ++i) + fprintf(f, final->line[i]); + fprintf(f, " return rsl;\n"); + fprintf(f, "}\n"); + fprintf(f, "\n"); + fclose(f); +} + +/* +------------------------------------------------------------------------------ +Read in the keys, find the hash, and write the .c and .h files +------------------------------------------------------------------------------ +*/ +static void driver(form) +hashform *form; /* user directives */ +{ + ub4 nkeys; /* number of keys */ + key *keys; /* head of list of keys */ + bstuff *tab; /* table indexed by b */ + ub4 smax; /* scramble[] values in 0..smax-1, a power of 2 */ + ub4 alen; /* a in 0..alen-1, a power of 2 */ + ub4 blen; /* b in 0..blen-1, a power of 2 */ + ub4 salt; /* a parameter to the hash function */ + reroot *textroot; /* MAXKEYLEN-character text lines */ + reroot *keyroot; /* source of keys */ + gencode final; /* code for final hash */ + ub4 i; + ub4 scramble[SCRAMBLE_LEN]; /* used in final hash function */ + char buf[10][80]; /* buffer for generated code */ + char *buf2[10]; /* also for generated code */ + + /* set up memory sources */ + textroot = remkroot((size_t)MAXKEYLEN); + keyroot = remkroot(sizeof(key)); + + /* set up code for final hash */ + final.line = buf2; + final.used = 0; + final.len = 10; + for (i=0; i<10; ++i) final.line[i] = buf[i]; + + /* read in the list of keywords */ + getkeys(&keys, &nkeys, textroot, keyroot, form); + + /* find the hash */ + findhash(&tab, &alen, &blen, &salt, &final, + scramble, &smax, keys, nkeys, form); + + /* generate the phash.c file */ + make_c(tab, smax, blen, scramble, &final, form); + + /* clean up memory sources */ + refree(textroot); + refree(keyroot); + free((void *)tab); +} + + +/* Interpret arguments and call the driver */ +/* See usage_error for the expected arguments */ +int main(argc, argv) +int argc; +char **argv; +{ + int mode_given = FALSE; + int minimal_given = FALSE; + int speed_given = FALSE; + hashform form; + char *c; + + /* default behavior */ + form.mode = NORMAL_HM; + form.hashtype = STRING_HT; + form.perfect = MINIMAL_HP; + form.speed = SLOW_HS; + + /* Generate the [minimal] perfect hash */ + driver(&form); + + return EXIT_SUCCESS; +} +#endif diff --git a/third-party/yasm/yasm-1.3.0/tools/genperf/perfect.h b/third-party/yasm/yasm-1.3.0/tools/genperf/perfect.h new file mode 100644 index 0000000000..b78d943bb9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/genperf/perfect.h @@ -0,0 +1,132 @@ +/* +------------------------------------------------------------------------------ +perfect.h: code to generate code for a hash for perfect hashing. +(c) Bob Jenkins, September 1996 +You may use this code in any way you wish, and it is free. No warranty. +I hereby place this in the public domain. +Source is http://burtleburtle.net/bob/c/perfect.h +------------------------------------------------------------------------------ +*/ + +#ifndef STANDARD +#include "standard.h" +#endif + +#ifndef PERFECT +#define PERFECT + +#define MAXKEYLEN 30 /* maximum length of a key */ +#define USE_SCRAMBLE 4096 /* use scramble if blen >= USE_SCRAMBLE */ +#define SCRAMBLE_LEN ((ub4)1<<16) /* length of *scramble* */ +#define RETRY_INITKEY 2048 /* number of times to try to find distinct (a,b) */ +#define RETRY_PERFECT 1 /* number of times to try to make a perfect hash */ +#define RETRY_HEX 200 /* RETRY_PERFECT when hex keys given */ + +/* the generated code for the final hash, assumes initial hash is done */ +struct gencode +{ + char **line; /* array of text lines, 80 bytes apiece */ + /* + * The code placed here must declare "ub4 rsl" + * and assign it the value of the perfect hash using the function inputs. + * Later code will be tacked on which returns rsl or manipulates it according + * to the user directives. + * + * This code is at the top of the routine; it may and must declare any + * local variables it needs. + * + * Each way of filling in **line should be given a comment that is a unique + * tag. A testcase named with that tag should also be found which tests + * the generated code. + */ + ub4 len; /* number of lines available for final hash */ + ub4 used; /* number of lines used by final hash */ + + ub4 lowbit; /* for HEX, lowest interesting bit */ + ub4 highbit; /* for HEX, highest interesting bit */ + ub4 diffbits; /* bits which differ for some key */ + ub4 i,j,k,l,m,n,o; /* state machine used in hexn() */ +}; +typedef struct gencode gencode; + +/* user directives: perfect hash? minimal perfect hash? input is an int? */ +struct hashform +{ + enum { + NORMAL_HM, /* key is a string */ + INLINE_HM, /* user will do initial hash, we must choose salt for them */ + HEX_HM, /* key to be hashed is a hexidecimal 4-byte integer */ + DECIMAL_HM, /* key to be hashed is a decimal 4-byte integer */ + AB_HM, /* key to be hashed is "A B", where A and B are (A,B) in hex */ + ABDEC_HM /* like AB_HM, but in decimal */ + } mode; + enum { + STRING_HT, /* key is a string */ + INT_HT, /* key is an integer */ + AB_HT /* dunno what key is, but input is distinct (A,B) pair */ + } hashtype; + enum { + NORMAL_HP, /* just find a perfect hash */ + MINIMAL_HP /* find a minimal perfect hash */ + } perfect; + enum { + FAST_HS, /* fast mode */ + SLOW_HS /* slow mode */ + } speed; +}; +typedef struct hashform hashform; + +/* representation of a key */ +struct key +{ + char *name_k; /* the actual key */ + ub4 len_k; /* the length of the actual key */ + ub4 hash_k; /* the initial hash value for this key */ + struct key *next_k; /* next key */ +/* beyond this point is mapping-dependent */ + ub4 a_k; /* a, of the key maps to (a,b) */ + ub4 b_k; /* b, of the key maps to (a,b) */ + struct key *nextb_k; /* next key with this b */ +}; +typedef struct key key; + +/* things indexed by b of original (a,b) pair */ +struct bstuff +{ + ub2 val_b; /* hash=a^tabb[b].val_b */ + key *list_b; /* tabb[i].list_b is list of keys with b==i */ + ub4 listlen_b; /* length of list_b */ + ub4 water_b; /* high watermark of who has visited this map node */ +}; +typedef struct bstuff bstuff; + +/* things indexed by final hash value */ +struct hstuff +{ + key *key_h; /* tabh[i].key_h is the key with a hash of i */ +}; +typedef struct hstuff hstuff; + +/* things indexed by queue position */ +struct qstuff +{ + bstuff *b_q; /* b that currently occupies this hash */ + ub4 parent_q; /* queue position of parent that could use this hash */ + ub2 newval_q; /* what to change parent tab[b] to to use this hash */ + ub2 oldval_q; /* original value of tab[b] */ +}; +typedef struct qstuff qstuff; + +/* return ceiling(log based 2 of x) */ +ub4 phash_log2(ub4 x); + +/* Given the keys, scramble[], and hash mode, find the perfect hash */ +void findhash(bstuff **tabb, hstuff **tabh, ub4 *alen, ub4 *blen, ub4 *salt, + gencode *final, ub4 *scramble, ub4 *smax, key *keys, ub4 nkeys, + hashform *form); + +/* private, but in a different file because it's excessively verbose */ +int inithex(key *keys, ub4 nkeys, ub4 alen, ub4 blen, ub4 smax, ub4 salt, + gencode *final, hashform *form); + +#endif /* PERFECT */ diff --git a/third-party/yasm/yasm-1.3.0/tools/genperf/standard.h b/third-party/yasm/yasm-1.3.0/tools/genperf/standard.h new file mode 100644 index 0000000000..596b893650 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/genperf/standard.h @@ -0,0 +1,35 @@ +/* +------------------------------------------------------------------------------ +Standard definitions and types, Bob Jenkins +------------------------------------------------------------------------------ +*/ +#ifndef STANDARD +#define STANDARD + +#include +#include +#include +typedef unsigned long int ub4; /* unsigned 4-byte quantities */ +#define UB4BITS 32 +typedef unsigned short int ub2; +#define UB2MAXVAL 0xffff +typedef unsigned char ub1; +#define UB1MAXVAL 0xff +typedef int word; /* fastest type available */ + +#define bis(target,mask) ((target) |= (mask)) +#define bic(target,mask) ((target) &= ~(mask)) +#define bit(target,mask) ((target) & (mask)) +#ifndef align +# define align(a) (((ub4)a+(sizeof(void *)-1))&(~(sizeof(void *)-1))) +#endif /* align */ + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + +#endif /* STANDARD */ diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/Makefile.inc b/third-party/yasm/yasm-1.3.0/tools/python-yasm/Makefile.inc new file mode 100644 index 0000000000..fce135b42d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/Makefile.inc @@ -0,0 +1,79 @@ +PYBINDING_DEPS = tools/python-yasm/bytecode.pxi +PYBINDING_DEPS += tools/python-yasm/errwarn.pxi +PYBINDING_DEPS += tools/python-yasm/expr.pxi +PYBINDING_DEPS += tools/python-yasm/floatnum.pxi +PYBINDING_DEPS += tools/python-yasm/intnum.pxi +PYBINDING_DEPS += tools/python-yasm/symrec.pxi +PYBINDING_DEPS += tools/python-yasm/value.pxi + +EXTRA_DIST += tools/python-yasm/pyxelator/cparse.py +EXTRA_DIST += tools/python-yasm/pyxelator/genpyx.py +EXTRA_DIST += tools/python-yasm/pyxelator/ir.py +EXTRA_DIST += tools/python-yasm/pyxelator/lexer.py +EXTRA_DIST += tools/python-yasm/pyxelator/node.py +EXTRA_DIST += tools/python-yasm/pyxelator/parse_core.py +EXTRA_DIST += tools/python-yasm/pyxelator/work_unit.py +EXTRA_DIST += tools/python-yasm/pyxelator/wrap_yasm.py +EXTRA_DIST += tools/python-yasm/setup.py +EXTRA_DIST += tools/python-yasm/yasm.pyx +EXTRA_DIST += $(PYBINDING_DEPS) + +if HAVE_PYTHON_BINDINGS + +# Use Pyxelator to generate Pyrex function headers. +_yasm.pxi: ${HEADERS} + @rm -rf .tmp + @mkdir .tmp + $(PYTHON) $(srcdir)/tools/python-yasm/pyxelator/wrap_yasm.py \ + "YASM_DIR=${srcdir}" "CPP=${CPP}" "CPPFLAGS=${CPPFLAGS}" + @rm -rf .tmp + +CLEANFILES += _yasm.pxi + +# Need to build a local copy of the main Pyrex input file to include _yasm.pxi +# from the build directory. Also need to fixup the other .pxi include paths. +yasm.pyx: $(srcdir)/tools/python-yasm/yasm.pyx + sed -e 's,^include "\([^_]\),include "${srcdir}/tools/python-yasm/\1,' \ + $(srcdir)/tools/python-yasm/yasm.pyx > $@ + +CLEANFILES += yasm.pyx + +# Actually run Cython +yasm_python.c: yasm.pyx _yasm.pxi $(PYBINDING_DEPS) + $(PYTHON) -c "from Cython.Compiler.Main import main; main(command_line=1)" \ + -o $@ yasm.pyx + +CLEANFILES += yasm_python.c + +# Now the Python build magic... +python-setup.txt: Makefile + echo "includes=${DEFS} ${DEFAULT_INCLUDES} ${INCLUDES} ${AM_CPPFLAGS} ${CPPFLAGS}" > python-setup.txt + echo "sources=${libyasm_a_SOURCES} ${nodist_libyasm_a_SOURCES}" >> python-setup.txt + echo "srcdir=${srcdir}" >> python-setup.txt + echo "gcc=${GCC}" >> python-setup.txt + +CLEANFILES += python-setup.txt + +.python-build: python-setup.txt yasm_python.c ${libyasm_a_SOURCES} ${nodist_libyasm_a_SOURCES} + $(PYTHON) `test -f tools/python-yasm/setup.py || echo '$(srcdir)/'`tools/python-yasm/setup.py build + touch .python-build +python-build: .python-build + +CLEANFILES += .python-build + +python-install: .python-build + $(PYTHON) `test -f tools/python-yasm/setup.py || echo '$(srcdir)/'`tools/python-yasm/setup.py install "--install-lib=$(DESTDIR)$(pythondir)" + +python-uninstall: + rm -f `$(PYTHON) -c "import sys;sys.path.insert(0, '${DESTDIR}${pythondir}'); import yasm; print yasm.__file__"` + +else + +python-build: +python-install: +python-uninstall: + +endif + +EXTRA_DIST += tools/python-yasm/tests/Makefile.inc +include tools/python-yasm/tests/Makefile.inc diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/bytecode.pxi b/third-party/yasm/yasm-1.3.0/tools/python-yasm/bytecode.pxi new file mode 100644 index 0000000000..34aeaa5770 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/bytecode.pxi @@ -0,0 +1,107 @@ +# Python bindings for Yasm: Pyrex input file for bytecode.h +# +# Copyright (C) 2006 Michael Urman, Peter Johnson +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + +cdef class Bytecode: + cdef yasm_bytecode *bc + + cdef object __weakref__ # make weak-referenceable + + def __cinit__(self, bc): + self.bc = NULL + if PyCObject_Check(bc): + self.bc = __get_voidp(bc, Bytecode) + else: + raise NotImplementedError + + def __dealloc__(self): + # Only free if we're not part of a section; if we're part of a section + # the section takes care of freeing the bytecodes. + if self.bc.section == NULL: + yasm_bc_destroy(self.bc) + + property len: + def __get__(self): return self.bc.len + def __set__(self, value): self.bc.len = value + property mult_int: + def __get__(self): return self.bc.mult_int + def __set__(self, value): self.bc.mult_int = value + property line: + def __get__(self): return self.bc.line + def __set__(self, value): self.bc.line = value + property offset: + def __get__(self): return self.bc.offset + def __set__(self, value): self.bc.offset = value + property bc_index: + def __get__(self): return self.bc.bc_index + def __set__(self, value): self.bc.bc_index = value + property symbols: + # Someday extend this to do something modifiable, e.g. return a + # list-like object. + def __get__(self): + cdef yasm_symrec *sym + cdef int i + if self.bc.symrecs == NULL: + return [] + s = [] + i = 0 + sym = self.bc.symrecs[i] + while sym != NULL: + s.append(__make_symbol(sym)) + i = i+1 + sym = self.bc.symrecs[i] + return s + +# +# Keep Bytecode reference paired with bc using weak references. +# This is broken in Pyrex 0.9.4.1; Pyrex 0.9.5 has a working version. +# + +from weakref import WeakValueDictionary as __weakvaldict +__bytecode_map = __weakvaldict() +#__bytecode_map = {} + +cdef object __make_bytecode(yasm_bytecode *bc): + __error_check() + vptr = PyCObject_FromVoidPtr(bc, NULL) + data = __bytecode_map.get(vptr, None) + if data: + return data + bcobj = Bytecode(__pass_voidp(bc, Bytecode)) + __bytecode_map[vptr] = bcobj + return bcobj + +# Org bytecode +def __org__new__(cls, start, value=0, line=0): + cdef yasm_bytecode *bc + bc = yasm_bc_create_org(start, line, value) + obj = Bytecode.__new__(cls, __pass_voidp(bc, Bytecode)) + __bytecode_map[PyCObject_FromVoidPtr(bc, NULL)] = obj + return obj +__org__new__ = staticmethod(__org__new__) +class Org(Bytecode): + __new__ = __org__new__ + + +#cdef class Section: diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/errwarn.pxi b/third-party/yasm/yasm-1.3.0/tools/python-yasm/errwarn.pxi new file mode 100644 index 0000000000..9568cc07ec --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/errwarn.pxi @@ -0,0 +1,73 @@ +# Python bindings for Yasm: Pyrex input file for errwarn.h +# +# Copyright (C) 2006 Peter Johnson +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + +class YasmError(Exception): pass + +cdef int __error_check() except 1: + cdef yasm_error_class errclass + cdef unsigned long xrefline + cdef char *errstr, *xrefstr + + # short path for the common case + if not yasm_error_occurred(): + return 0 + + # look up our preferred python error, fall back to YasmError + # Order matters here. Go from most to least specific within a class + if yasm_error_matches(YASM_ERROR_ZERO_DIVISION): + exception = ZeroDivisionError + # Enable these once there are tests that need them. + #elif yasm_error_matches(YASM_ERROR_OVERFLOW): + # exception = OverflowError + #elif yasm_error_matches(YASM_ERROR_FLOATING_POINT): + # exception = FloatingPointError + #elif yasm_error_matches(YASM_ERROR_ARITHMETIC): + # exception = ArithmeticError + #elif yasm_error_matches(YASM_ERROR_ASSERTION): + # exception = AssertionError + #elif yasm_error_matches(YASM_ERROR_VALUE): + # exception = ValueError # include notabs, notconst, toocomplex + #elif yasm_error_matches(YASM_ERROR_IO): + # exception = IOError + #elif yasm_error_matches(YASM_ERROR_NOT_IMPLEMENTED): + # exception = NotImplementedError + #elif yasm_error_matches(YASM_ERROR_TYPE): + # exception = TypeError + #elif yasm_error_matches(YASM_ERROR_SYNTAX): + # exception = SyntaxError #include parse + else: + exception = YasmError + + # retrieve info (clears error) + yasm_error_fetch(&errclass, &errstr, &xrefline, &xrefstr) + + if xrefline and xrefstr: + PyErr_Format(exception, "%s: %d: %s", errstr, xrefline, xrefstr) + else: + PyErr_SetString(exception, errstr) + + if xrefstr: free(xrefstr) + free(errstr) + return 1 diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/expr.pxi b/third-party/yasm/yasm-1.3.0/tools/python-yasm/expr.pxi new file mode 100644 index 0000000000..995a46ad10 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/expr.pxi @@ -0,0 +1,136 @@ +# Python bindings for Yasm: Pyrex input file for expr.h +# +# Copyright (C) 2006 Michael Urman, Peter Johnson +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + +cdef extern from *: + # Defined as a macro, so not automatically brought in by pyxelator + cdef yasm_expr *yasm_expr_simplify(yasm_expr *e, int calc_bc_dist) + +import operator +__op = {} +for ops, operation in [ + ((operator.__add__, operator.add, '+'), YASM_EXPR_ADD), + ((operator.__and__, operator.and_, '&'), YASM_EXPR_AND), + ((operator.__div__, operator.div, '/'), YASM_EXPR_SIGNDIV), + ((operator.__floordiv__, operator.floordiv, '//'), YASM_EXPR_SIGNDIV), + ((operator.__ge__, operator.ge, '>='), YASM_EXPR_GE), + ((operator.__gt__, operator.gt, '>'), YASM_EXPR_GT), + ((operator.__inv__, operator.inv, '~'), YASM_EXPR_NOT), + ((operator.__invert__, operator.invert), YASM_EXPR_NOT), + ((operator.__le__, operator.le, '<='), YASM_EXPR_LE), + ((operator.__lt__, operator.lt, '<'), YASM_EXPR_LT), + ((operator.__mod__, operator.mod, '%'), YASM_EXPR_SIGNMOD), + ((operator.__mul__, operator.mul, '*'), YASM_EXPR_MUL), + ((operator.__neg__, operator.neg), YASM_EXPR_NEG), + ((operator.__not__, operator.not_, 'not'), YASM_EXPR_LNOT), + ((operator.__or__, operator.or_, '|'), YASM_EXPR_OR), + ((operator.__sub__, operator.sub, '-'), YASM_EXPR_SUB), + ((operator.__xor__, operator.xor, '^'), YASM_EXPR_XOR), + ]: + for op in ops: + __op[op] = operation + +del operator, op, ops, operation + +cdef object __make_expression(yasm_expr *expr): + return Expression(__pass_voidp(expr, Expression)) + +cdef class Expression: + cdef yasm_expr *expr + + def __cinit__(self, op, *args, **kwargs): + self.expr = NULL + + if isinstance(op, Expression): + self.expr = yasm_expr_copy((op).expr) + return + if PyCObject_Check(op): + self.expr = __get_voidp(op, Expression) + return + + cdef size_t numargs + cdef unsigned long line + + op = __op.get(op, op) + numargs = len(args) + line = kwargs.get('line', 0) + + if numargs == 0 or numargs > 2: + raise NotImplementedError + elif numargs == 2: + self.expr = yasm_expr_create(op, self.__new_item(args[0]), + self.__new_item(args[1]), line) + else: + self.expr = yasm_expr_create(op, self.__new_item(args[0]), NULL, + line) + + cdef yasm_expr__item* __new_item(self, value) except NULL: + cdef yasm_expr__item *retval + if isinstance(value, Expression): + return yasm_expr_expr(yasm_expr_copy((value).expr)) + #elif isinstance(value, Symbol): + # return yasm_expr_sym((value).sym) + #elif isinstance(value, Register): + # return yasm_expr_reg((value).reg) + elif isinstance(value, FloatNum): + return yasm_expr_float(yasm_floatnum_copy((value).flt)) + elif isinstance(value, IntNum): + return yasm_expr_int(yasm_intnum_copy((value).intn)) + else: + try: + intnum = IntNum(value) + except: + raise ValueError("Invalid item value type '%s'" % type(value)) + else: + retval = yasm_expr_int((intnum).intn) + (intnum).intn = NULL + return retval + + def __dealloc__(self): + if self.expr != NULL: yasm_expr_destroy(self.expr) + + def simplify(self, calc_bc_dist=False): + self.expr = yasm_expr_simplify(self.expr, calc_bc_dist) + + def extract_segoff(self): + cdef yasm_expr *retval + retval = yasm_expr_extract_segoff(&self.expr) + if retval == NULL: + raise ValueError("not a SEG:OFF expression") + return __make_expression(retval) + + def extract_wrt(self): + cdef yasm_expr *retval + retval = yasm_expr_extract_wrt(&self.expr) + if retval == NULL: + raise ValueError("not a WRT expression") + return __make_expression(retval) + + def get_intnum(self, calc_bc_dist=False): + cdef yasm_intnum *retval + retval = yasm_expr_get_intnum(&self.expr, calc_bc_dist) + if retval == NULL: + raise ValueError("not an intnum expression") + return __make_intnum(yasm_intnum_copy(retval)) + diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/floatnum.pxi b/third-party/yasm/yasm-1.3.0/tools/python-yasm/floatnum.pxi new file mode 100644 index 0000000000..b7bfbc3023 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/floatnum.pxi @@ -0,0 +1,49 @@ +# Python bindings for Yasm: Pyrex input file for floatnum.h +# +# Copyright (C) 2006 Michael Urman, Peter Johnson +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + +cdef class FloatNum: + cdef yasm_floatnum *flt + def __cinit__(self, value): + self.flt = NULL + if isinstance(value, FloatNum): + self.flt = yasm_floatnum_copy((value).flt) + return + if PyCObject_Check(value): # should check Desc + self.flt = PyCObject_AsVoidPtr(value) + return + + if isinstance(value, float): string = str(float) + else: string = value + self.flt = yasm_floatnum_create(string) + + def __dealloc__(self): + if self.flt != NULL: yasm_floatnum_destroy(self.flt) + + def __neg__(self): + result = FloatNum(self) + yasm_floatnum_calc((result).flt, YASM_EXPR_NEG, NULL) + return result + def __pos__(self): return self + diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/intnum.pxi b/third-party/yasm/yasm-1.3.0/tools/python-yasm/intnum.pxi new file mode 100644 index 0000000000..320ca1b03f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/intnum.pxi @@ -0,0 +1,170 @@ +# Python bindings for Yasm: Pyrex input file for intnum.h +# +# Copyright (C) 2006 Michael Urman, Peter Johnson +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + +cdef class IntNum + +cdef object __intnum_op_ex(object x, yasm_expr_op op, object y): + value = __intnum_op(x, op, y) + __error_check() + return value + +cdef object __intnum_op(object x, yasm_expr_op op, object y): + if isinstance(x, IntNum): + result = IntNum(x) + if y is None: + yasm_intnum_calc((result).intn, op, NULL) + else: + # Coerce to intnum if not already + if isinstance(y, IntNum): + rhs = y + else: + rhs = IntNum(y) + yasm_intnum_calc((result).intn, op, (rhs).intn) + return result + elif isinstance(y, IntNum): + # Reversed operation - x OP y still, just y is intnum, x isn't. + result = IntNum(x) + yasm_intnum_calc((result).intn, op, (y).intn) + return result + else: + raise NotImplementedError + +cdef object __make_intnum(yasm_intnum *intn): + return IntNum(__pass_voidp(intn, IntNum)) + +cdef class IntNum: + cdef yasm_intnum *intn + + def __cinit__(self, value, base=None): + cdef unsigned char buf[16] + + self.intn = NULL + + if isinstance(value, IntNum): + self.intn = yasm_intnum_copy((value).intn) + return + if PyCObject_Check(value): + self.intn = __get_voidp(value, IntNum) + return + + if isinstance(value, str): + if base == 2: + self.intn = yasm_intnum_create_bin(value) + elif base == 8: + self.intn = yasm_intnum_create_oct(value) + elif base == 10 or base is None: + self.intn = yasm_intnum_create_dec(value) + elif base == 16: + self.intn = yasm_intnum_create_hex(value) + elif base == "nasm": + self.intn = yasm_intnum_create_charconst_nasm(value) + else: + raise ValueError("base must be 2, 8, 10, 16, or \"nasm\"") + elif isinstance(value, (int, long)): + _PyLong_AsByteArray(long(value), buf, 16, 1, 1) + self.intn = yasm_intnum_create_sized(buf, 1, 16, 0) + else: + raise ValueError + + def __dealloc__(self): + if self.intn != NULL: yasm_intnum_destroy(self.intn) + + def __long__(self): + cdef unsigned char buf[16] + yasm_intnum_get_sized(self.intn, buf, 16, 128, 0, 0, 0) + return _PyLong_FromByteArray(buf, 16, 1, 1) + + def __repr__(self): + return "IntNum(%d)" % self + + def __int__(self): return int(self.__long__()) + def __complex__(self): return complex(self.__long__()) + def __float__(self): return float(self.__long__()) + + def __oct__(self): return oct(int(self.__long__())) + def __hex__(self): return hex(int(self.__long__())) + + def __add__(x, y): return __intnum_op(x, YASM_EXPR_ADD, y) + def __sub__(x, y): return __intnum_op(x, YASM_EXPR_SUB, y) + def __mul__(x, y): return __intnum_op(x, YASM_EXPR_MUL, y) + def __div__(x, y): return __intnum_op_ex(x, YASM_EXPR_SIGNDIV, y) + def __floordiv__(x, y): return __intnum_op_ex(x, YASM_EXPR_SIGNDIV, y) + def __mod__(x, y): return __intnum_op_ex(x, YASM_EXPR_SIGNMOD, y) + def __neg__(self): return __intnum_op(self, YASM_EXPR_NEG, None) + def __pos__(self): return self + def __abs__(self): + if yasm_intnum_sign(self.intn) >= 0: return IntNum(self) + else: return __intnum_op(self, YASM_EXPR_NEG, None) + def __nonzero__(self): return not yasm_intnum_is_zero(self.intn) + def __invert__(self): return __intnum_op(self, YASM_EXPR_NOT, None) + def __lshift__(x, y): return __intnum_op(x, YASM_EXPR_SHL, y) + def __rshift__(x, y): return __intnum_op(x, YASM_EXPR_SHR, y) + def __and__(x, y): return __intnum_op(x, YASM_EXPR_AND, y) + def __or__(x, y): return __intnum_op(x, YASM_EXPR_OR, y) + def __xor__(x, y): return __intnum_op(x, YASM_EXPR_XOR, y) + + cdef object __op(self, yasm_expr_op op, object x): + if isinstance(x, IntNum): + rhs = x + else: + rhs = IntNum(x) + yasm_intnum_calc(self.intn, op, (rhs).intn) + return self + + def __iadd__(self, x): return self.__op(YASM_EXPR_ADD, x) + def __isub__(self, x): return self.__op(YASM_EXPR_SUB, x) + def __imul__(self, x): return self.__op(YASM_EXPR_MUL, x) + def __idiv__(self, x): return self.__op(YASM_EXPR_SIGNDIV, x) + def __ifloordiv__(self, x): return self.__op(YASM_EXPR_SIGNDIV, x) + def __imod__(self, x): return self.__op(YASM_EXPR_MOD, x) + def __ilshift__(self, x): return self.__op(YASM_EXPR_SHL, x) + def __irshift__(self, x): return self.__op(YASM_EXPR_SHR, x) + def __iand__(self, x): return self.__op(YASM_EXPR_AND, x) + def __ior__(self, x): return self.__op(YASM_EXPR_OR, x) + def __ixor__(self, x): return self.__op(YASM_EXPR_XOR, x) + + def __cmp__(self, x): + cdef yasm_intnum *t + t = yasm_intnum_copy(self.intn) + if isinstance(x, IntNum): + rhs = x + else: + rhs = IntNum(x) + yasm_intnum_calc(t, YASM_EXPR_SUB, (rhs).intn) + result = yasm_intnum_sign(t) + yasm_intnum_destroy(t) + return result + + def __richcmp__(x, y, op): + cdef yasm_expr_op aop + if op == 0: aop = YASM_EXPR_LT + elif op == 1: aop = YASM_EXPR_LE + elif op == 2: aop = YASM_EXPR_EQ + elif op == 3: aop = YASM_EXPR_NE + elif op == 4: aop = YASM_EXPR_GT + elif op == 5: aop = YASM_EXPR_GE + else: raise NotImplementedError + v = __intnum_op(x, aop, y) + return bool(not yasm_intnum_is_zero((v).intn)) diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/cparse.py b/third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/cparse.py new file mode 100755 index 0000000000..53754f8608 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/cparse.py @@ -0,0 +1,819 @@ +#!/usr/bin/env python + +""" + +(c) 2002, 2003, 2004, 2005 Simon Burton +Released under GNU LGPL license. + +""" + +import sys + +from lexer import Lexer +from parse_core import Symbols, Parser +import node as node_module + + +class Node(node_module.Node): + + def is_typedef(self): + for x in self: + if isinstance(x,Node): + if x.is_typedef(): + return 1 + return 0 + + #def explain(self): + #l = [] + #for x in self: + #if isinstance(x,Node): + #l.append(x.explain()) + #else: + #l.append(str(x)) + #return string.join(l," ") + ##(self.__class__.__name__,string.join(l) ) + + def psource(self): + if hasattr(self,'lines'): + print "# "+string.join(self.lines,"\n# ")+"\n" + + +################################################################### +# +################################################################### +# + + +class BasicType(Node): + " int char short etc. " + def __init__(self,name): + Node.__init__(self,name) + +class Qualifier(Node): + """ + """ + def __init__(self,name): + Node.__init__(self,name) + self.name=name + +class StorageClass(Node): + """ + """ + def __init__(self,name): + Node.__init__(self,name) + self.name=name + +class Typedef(StorageClass): + """ + """ + def __init__(self,s='typedef'): + Node.__init__(self,s) + #def explain(self): + #return "type" + +class Ellipses(Node): + """ + """ + def __init__(self,s='...'): + Node.__init__(self,s) + +class GCCBuiltin(BasicType): + """ + """ + pass + + +class Identifier(Node): + """ + """ + def __init__(self,name="",*items): + if name or 1: + Node.__init__(self,name,*items) + else: + Node.__init__(self) + self.name=name + +class Function(Node,Parser): + """ + """ + def __init__(self,*items): + Node.__init__(self,*items) + + def parse(self,lexer,symbols): + symbols = Symbols(symbols) + args = '' + #lexer.get_token() + if lexer.tok != ')': + if not lexer.tok: + self.parse_error(lexer) + #lexer.unget_token() # unget start of decl + while lexer.tok != ')': + node = ParameterDeclaration() + node.parse(lexer,symbols) + self.append( node ) + if lexer.tok != ')' and lexer.tok != ',': + self.parse_error(lexer) + if lexer.tok == ',': + lexer.get_token() + lexer.get_token() + + +class Pointer(Node): + """ + """ + def __init__(self,*items): + Node.__init__(self,*items) + +class Array(Node,Parser): + """ + """ + def __init__(self,*items): + Node.__init__(self,*items) + + def parse(self,lexer,symbols): + lexer.get_token() # a number or ']' + # XX + # HACK HACK: constant c expressions can appear in here: + # eg. [ 15 * sizeof (int) - 2 * sizeof (void *) ] + # XX + toks = [] + while lexer.tok != ']': + #self.append( lexer.kind ) + toks.append( lexer.tok ) + lexer.get_token() + child = " ".join(toks) + if child == "": + child = None + self.append( child ) + lexer.get_token() # read past the ']' + +class Tag(Node): + """ + """ + pass + + +class Compound(Node,Parser): + "Struct or Union" + + def __init__(self,*items,**kw): + Node.__init__(self,*items,**kw) + + def parse(self,lexer,symbols): + symbols = Symbols(symbols) + tag = "" # anonymous + if lexer.tok != '{': + tag = lexer.tok + if not ( tag[0]=='_' or tag[0].isalpha() ): + self.parse_error(lexer ,"expected tag, got '%s'"%tag ) + lexer.get_token() + if tag: + self.append(Tag(tag)) + else: + self.append(Tag()) + self.tag = tag + if lexer.tok == '{': + fieldlist = [] + lexer.get_token() + if lexer.tok != '}': + if not lexer.tok: self.parse_error(lexer) + while lexer.tok != '}': + node = StructDeclaration() + node.parse(lexer,symbols) + fieldlist.append( node ) + self += fieldlist + lexer.get_token() + if self.verbose: + print "%s.__init__() #<--"%(self) + +class Struct(Compound): + """ + """ + pass + +class Union(Compound): + """ + """ + pass + +class Enum(Node,Parser): + """ + """ + def __init__(self,*items,**kw): + Node.__init__(self,*items,**kw) + + def parse(self,lexer,symbols): + tag = "" # anonymous + if lexer.tok != '{': + tag = lexer.tok + if not ( tag[0]=='_' or tag[0].isalpha() ): + self.parse_error(lexer ,"expected tag, got '%s'"%tag ) + lexer.get_token() + if tag: + self.append(Tag(tag)) + else: + self.append(Tag()) + self.tag = tag + if lexer.tok == '{': + lexer.get_token() + if lexer.tok != '}': # XX dopey control flow + if not lexer.tok: # XX dopey control flow + self.parse_error(lexer) # XX dopey control flow + while lexer.tok != '}': # XX dopey control flow + if lexer.kind is not None: + self.expected_error(lexer ,"identifier" ) + ident = Identifier(lexer.tok) + if symbols[ident[0]] is not None: + self.parse_error(lexer,"%s already defined."%ident[0]) + symbols[ident[0]]=ident + self.append( ident ) + lexer.get_token() + if lexer.tok == '=': + lexer.get_token() + # ConstantExpr + # XX hack hack XX + while lexer.tok!=',' and lexer.tok!='}': + lexer.get_token() +# if type( lexer.kind ) is not int: +# #self.parse_error(lexer ,"expected integer" ) +# # XX hack hack XX +# while lexer.tok!=',' and lexer.tok!='}': +# lexer.get_token() +# else: +# # put initializer into the Identifier +# ident.append( lexer.kind ) +# lexer.get_token() + if lexer.tok != '}': + if lexer.tok != ',': + self.expected_error(lexer,"}",",") + lexer.get_token() # ',' + lexer.get_token() + if self.verbose: + print "%s.__init__() #<--"%(self) + + + +class Declarator(Node,Parser): + """ + """ + def __init__(self,*items): + Node.__init__(self,*items) + self.ident = None + + def parse(self,lexer,symbols): + #Parser.parse_enter(self,lexer) + stack = [] + # read up to identifier, pushing tokens onto stack + self.ident = self.parse_identifier(lexer,symbols,stack) + self.name = '' + if self.ident is not None: + self.append( self.ident ) + self.name = self.ident.name + # now read outwards from identifier + self.parse_declarator(lexer,symbols,stack) + #Parser.parse_leave(self,lexer) + + def parse_identifier(self,lexer,symbols,stack): + if self.verbose: + print "%s.parse_identifier()"%self + ident = None + if lexer.tok != ';': + while lexer.tok and lexer.kind is not None: + stack.append( (lexer.tok, lexer.kind) ) + lexer.get_token() + if lexer.tok: + ident = Identifier( lexer.tok ) + #stack.append( (ident.name, ident) ) + lexer.get_token() + if self.verbose: + print "%s.parse_identifier()=%s"%(self,repr(ident)) + return ident + + def parse_declarator(self,lexer,symbols,stack,level=0): + if self.verbose: + print " "*level+"%s.parse_declarator(%s) # --->"%\ + (self,stack) + if lexer.tok == '[': + while lexer.tok == '[': + node = Array() + node.parse(lexer,symbols) + self.append(node) + if lexer.tok == '(': + self.parse_error(lexer ,"array of functions" ) + elif lexer.tok == '(': + lexer.get_token() + node = Function() + node.parse(lexer,symbols) + self.append( node ) + if lexer.tok == '(': + self.parse_error(lexer ,"function returns a function" ) + if lexer.tok == '[': + self.parse_error(lexer ,"function returns an array" ) + while stack: + tok, kind = stack[-1] # peek + if tok == '(': + stack.pop() + self.consume(lexer,')') + self.parse_declarator(lexer,symbols,stack,level+1) + elif tok == '*': + stack.pop() + self.append( Pointer() ) + else: + tok, kind = stack.pop() + self.append( kind ) + if self.verbose: + print " "*level+"%s.parse_declarator(%s) # <---"%\ + (self,stack) + + +class AbstractDeclarator(Declarator): + """ used in ParameterDeclaration; may lack an identifier """ + + def parse_identifier(self,lexer,symbols,stack): + if self.verbose: + print "%s.parse_identifier()"%self + ident = None + ident = Identifier() + while 1: + if lexer.tok == ';': + self.parse_error(lexer) + if lexer.tok == ')': + break + if lexer.tok == ',': + break + if lexer.tok == '[': + break + if lexer.kind is None: + #print "%s.new identifier"%self + ident = Identifier( lexer.tok ) + lexer.get_token() + #stack.append( (ident.name, ident) ) + break + stack.append( (lexer.tok, lexer.kind) ) + lexer.get_token() + if self.verbose: + print "%s.parse_identifier()=%s"%(self,repr(ident)) + return ident + +class FieldLength(Node): + """ + """ + pass + +class StructDeclarator(Declarator): + """ + """ + def parse(self,lexer,symbols): + if lexer.tok != ':': + Declarator.parse(self,lexer,symbols) + if lexer.tok == ':': + lexer.get_token() + # ConstantExpr + length = int(lexer.tok) + #print "length = ",length + self.append( FieldLength(length) ) + lexer.get_token() + +class DeclarationSpecifiers(Node,Parser): + """ + """ + def __init__(self,*items): + Node.__init__(self,*items) + + def __eq__(self,other): + " unordered (set/bag) equality " + if not isinstance(other,Node): + return 0 + for i in range(len(self)): + if not self[i] in other: + return 0 + for i in range(len(other)): + if not other[i] in self: + return 0 + return 1 + + def parse(self,lexer,symbols): + self.parse_spec(lexer,symbols) + self.reverse() + + def parse_spec(self,lexer,symbols): + typespec = None + while lexer.tok: + if isinstance( lexer.kind, TypeAlias ) or\ + isinstance( lexer.kind, BasicType ): + if typespec is not None: + self.parse_error(lexer ,"type already specified as %s"\ + %typespec ) + typespec=lexer.kind + self.append( lexer.kind ) + lexer.get_token() + elif isinstance( lexer.kind, Qualifier ): + self.append( lexer.kind ) + lexer.get_token() + elif isinstance( lexer.kind, StorageClass ): + self.append( lexer.kind ) + lexer.get_token() + elif lexer.tok=='struct': + lexer.get_token() + self.parse_struct(lexer,symbols) + break #? + elif lexer.tok=='union': + lexer.get_token() + self.parse_union(lexer,symbols) + break #? + elif lexer.tok=='enum': + lexer.get_token() + self.parse_enum(lexer,symbols) + break #? + elif lexer.kind is None: + # identifier + break + else: + break + + def parse_struct(self,lexer,symbols): + if self.verbose: + print "%s.parse_struct()"%(self) + node = Struct() + node.parse(lexer,symbols) + _node = None + if node.tag: + _node = symbols.get_tag( node.tag ) + if _node is not None: + if not isinstance( _node, Struct ): + self.parse_error(lexer,"tag defined as wrong kind") + if len(node)>1: + if len(_node)>1: + self.parse_error(lexer,"tag already defined as %s"%_node) + #symbols.set_tag( node.tag, node ) + #else: + # refer to the previously defined struct + ##node = _node + #node = _node.clone() + if 0: + # refer to the previously defined struct + if len(node)==1: + _node = symbols.deep_get_tag( node.tag ) + if _node is not None: + node=_node + # But what about any future reference to the struct ? + if node.tag: + symbols.set_tag( node.tag, node ) + self.append( node ) + + def parse_union(self,lexer,symbols): + if self.verbose: + print "%s.parse_union(%s)"%(self,node) + node = Union() + node.parse(lexer,symbols) + _node = None + if node.tag: + _node = symbols.get_tag( node.tag ) + if _node is not None: + if not isinstance( _node, Union ): + self.parse_error(lexer,"tag %s defined as wrong kind"%repr(node.tag)) + if len(node)>1: + if len(_node)>1: + self.parse_error(lexer,"tag already defined as %s"%_node) + #symbols.set_tag( node.tag, node ) + #else: + #node = _node + #if len(node)==1: + #_node = symbols.deep_get_tag( node.tag ) + #if _node is not None: + #node=_node + if node.tag: + symbols.set_tag( node.tag, node ) + self.append( node ) + + def parse_enum(self,lexer,symbols): + if self.verbose: + print "%s.parse_enum(%s)"%(self,node) + node = Enum() + node.parse(lexer,symbols) + _node = None + if node.tag: + _node = symbols.get_tag( node.tag ) + if _node is not None: + if not isinstance( _node, Enum ): + self.parse_error(lexer,"tag defined as wrong kind") + if len(node)>1: + if len(_node)>1: + self.parse_error(lexer,"tag already defined as %s"%_node) + #symbols.set_tag( node.tag, node ) + #else: + #node = _node + #if len(node)==1: + #_node = symbols.deep_get_tag( node.tag ) + #if _node is not None: + #node=_node + if node.tag: + symbols.set_tag( node.tag, node ) + self.append( node ) + + def is_typedef(self): + return self.find(Typedef) is not None + + def needs_declarator(self): + for node in self: + if isinstance( node, Struct ): + return False + if isinstance( node, Enum ): + return False + if isinstance( node, Union ): + return False + return True + + + +class TypeSpecifiers(DeclarationSpecifiers): + " used in ParameterDeclaration " + + def parse_spec(self,lexer,symbols): + typespec = None + while lexer.tok: + if isinstance( lexer.kind, TypeAlias ) or\ + isinstance( lexer.kind, BasicType ): + if typespec is not None: + self.parse_error(lexer ,"type already specified as %s"\ + %typespec ) + typespec=lexer.kind + self.append( lexer.kind ) + lexer.get_token() + elif isinstance( lexer.kind, Qualifier ): + self.append( lexer.kind ) + lexer.get_token() + elif isinstance( lexer.kind, StorageClass ): + self.parse_error(lexer ,"'%s' cannot appear here"%lexer.tok ) + elif lexer.tok=='struct': + lexer.get_token() + self.parse_struct(lexer,symbols) + break #? + elif lexer.tok=='union': + lexer.get_token() + self.parse_union(lexer,symbols) + break #? + elif lexer.tok=='enum': + lexer.get_token() + self.parse_enum(lexer,symbols) + break #? + elif lexer.kind is None: + # identifier + break + else: + break + + +class Initializer(Node,Parser): + """ + """ + def __init__(self,*items): + Node.__init__(self,*items) + + def parse(self,lexer,symbols): + self.parse_error(lexer,"not implemented") + + +class TypeAlias(Node): + " typedefed things " + + def __init__(self,name,decl=None): + Node.__init__(self,name)#,decl) + self.name=name + self.decl=decl + + +class Declaration(Node,Parser): + """ + """ + def __init__(self,*items): + Node.__init__(self,*items) + #self.acted=False + + def parse(self,lexer,symbols): + if not lexer.tok: + return + Parser.parse_enter(self,lexer) + declspec = DeclarationSpecifiers() + declspec.parse(lexer,symbols) + if len(declspec)==0: + if lexer.tok == ';': + lexer.get_token() + # empty declaration... + return + self.parse_error(lexer, + "expected specifiers, got '%s'"%lexer.tok ) + self.append(declspec) + while 1: + decl = Declarator() + decl.parse(lexer,symbols) + if len(decl)==0: + if declspec.needs_declarator(): + self.parse_error(lexer, + "expected declarator, got '%s'"%lexer.tok ) + self.append(decl) + ident = decl.ident + if ident is not None: + #if len(ident): + # install symbol + node = symbols[ident[0]] + if node is not None: + # we allow functions to be defined (as same) again + #print node.deepstr(),'\n', self.deepstr() + _node = node.clone() + _node.delete(Identifier) + _self = self.clone() + _self.delete(Identifier) + if _node != _self: + self.parse_error(lexer, + "\n%s\n already defined as \n%s\n"%\ + (self.deepstr(),node.deepstr())) + else: + if self.is_typedef(): + #lexer.mktypedef( ident[0], self ) + tp = TypeAlias(ident[0],decl) + lexer.mktypedef( ident[0], tp ) + else: + symbols[ident[0]] = self + if lexer.tok == '=': + # parse initializer + lexer.get_token() + init = Initializer() + init.parse(lexer,symbols) + ident.append( init ) # as in Enum + #else: struct, union or enum + if lexer.tok == ';': + # no more declarators + break + if lexer.tok == '{': + # ! ahhh, function body !!! +# sys.stderr.write( +# "WARNING: function body found at line %s\n"%lexer.lno ) + bcount = 1 + while bcount: + lexer.get_brace_token() + if lexer.tok == '}': + bcount -= 1 + if lexer.tok == '{': + bcount += 1 + lexer.get_token() + Parser.parse_leave(self,lexer) + return + self.consume(lexer,',') + self.consume(lexer,';') + Parser.parse_leave(self,lexer) + + def is_typedef(self): + spec=self[0] + assert isinstance(spec,DeclarationSpecifiers), self.deepstr() + return spec.is_typedef() + + +class ParameterDeclaration(Declaration): + """ + """ + def parse(self,lexer,symbols): + typespec = TypeSpecifiers() + typespec.parse(lexer,symbols) + self.append(typespec) + decl = AbstractDeclarator() + decl.parse(lexer,symbols) + self.append(decl) + ident = decl.ident + if ident is not None and ident[0]: + node = symbols[ident[0]] + if node is not None: + self.parse_error(lexer, + "%s already defined as %s"%(ident,node)) + else: + symbols[ident[0]] = self + + +class StructDeclaration(Declaration): + """ + """ + def parse(self,lexer,symbols): + if not lexer.tok: + return + declspec = DeclarationSpecifiers() + declspec.parse(lexer,symbols) + self.append(declspec) + if len(declspec)==0: + if lexer.tok == ';': + lexer.get_token() + # empty declaration... + return + self.parse_error(lexer, + "expected specifiers, got '%s'"%lexer.tok ) + while 1: + decl = StructDeclarator() + decl.parse(lexer,symbols) + if len(decl)==0: + self.parse_error(lexer, + "expected declarator, got '%s'"%lexer.tok ) + self.append(decl) + ident = decl.ident + if ident is not None: + node = symbols[ident[0]] + if node is not None: + self.parse_error(lexer , + "%s already defined as %s"%(ident,node)) + else: + if declspec.is_typedef(): + self.parse_error(lexer,"typedef in struct or union") + else: + symbols[ident[0]] = self + if lexer.tok == ';': + break + self.consume(lexer,',') + self.consume(lexer,';') + + +class TransUnit(Node,Parser): + """ + """ + def __init__(self,*items,**kw): + Node.__init__(self,*items,**kw) + + def parse(self,s,verbose=0): + self.symbols = Symbols() + self.lexer = Lexer(s,verbose=verbose) #,host=__module__) + node = None + while self.lexer.tok: + node=Declaration() + node.parse(self.lexer,self.symbols) + #sys.stderr.write( "# line %s\n"%self.lexer.lno ) + if node: + self.append(node) + #node.psource() + #print node.deepstr(),'\n' + #node.act() + + def strip(self,files): + " leave only the declarations from " + i=0 + while i +Released under GNU LGPL license. + +version 0.xx + +This is a module of mixin classes for ir.py . + +Towards the end of ir.py our global class definitions +are remapped to point to the class definitions in ir.py . +So, for example, when we refer to Node we get ir.Node . + +""" + +import sys +from datetime import datetime + +# XX use this Context class instead of all those kw dicts !! XX +class Context(object): + " just a record (struct) " + def __init__( self, **kw ): + for key, value in kw.items(): + setattr( self, key, value ) + def __getattr__( self, name ): + return None # ? + def __getitem__( self, name ): + return getattr(self, name) + +class OStream(object): + def __init__( self, filename=None ): + self.filename = filename + self.tokens = [] + self._indent = 0 + def put( self, token="" ): + assert type(token) is str + self.tokens.append( token ) + def startln( self, token="" ): + assert type(token) is str + self.tokens.append( ' '*self._indent + token ) + def putln( self, ln="" ): + assert type(ln) is str + self.tokens.append( ' '*self._indent + ln + '\n') + def endln( self, token="" ): + assert type(token) is str + self.tokens.append( token + '\n') + def indent( self ): + self._indent += 1 + def dedent( self ): + self._indent -= 1 + assert self._indent >= 0, self._indent + def join( self ): + return ''.join( self.tokens ) + def close( self ): + s = ''.join( self.tokens ) + f = open( self.filename, 'w' ) + f.write(s) + +# +############################################################################### +# + +class Node(object): + """ + tree structure + """ + _unique_id = 0 + def get_unique_id(cls): + Node._unique_id += 1 + return Node._unique_id + get_unique_id = classmethod(get_unique_id) + +# XX toks: use a tree of tokens: a list that can be push'ed and pop'ed XX + def pyxstr(self,toks=None,indent=0,**kw): + """ + Build a list of tokens; return the joined tokens string + """ + if toks is None: + toks = [] + for x in self: + if isinstance(x,Node): + x.pyxstr(toks, indent, **kw) + else: + toks.insert(0,str(x)+' ') + s = ''.join(toks) + return s + +# +################################################# + +class Named(object): + "has a .name property" + pass + +class BasicType(object): + "float double void char int" + pass + +class Qualifier(object): + "register signed unsigned short long const volatile inline" + def pyxstr(self,toks=None,indent=0,**kw): + if toks is None: + toks = [] + x = self[0] + if x not in ( 'const','volatile','inline','register'): # ignore these + toks.insert(0,str(x)+' ') + s = ''.join(toks) + return s + +class StorageClass(object): + "extern static auto" + def pyxstr(self,toks=None,indent=0,**kw): + return "" + +class Ellipses(object): + "..." + pass + +class GCCBuiltin(BasicType): + "things with __builtin prefix" + pass + +class Identifier(object): + """ + """ + def pyxstr(self,toks=None,indent=0,**kw): + if toks is None: + toks=[] + if self.name: + toks.append( self.name ) + return " ".join(toks) + +class TypeAlias(object): + """ + typedefed things, eg. size_t + """ + def pyxstr(self,toks=None,indent=0,cprefix="",**kw): + if toks is None: + toks = [] + for x in self: + if isinstance(x,Node): + x.pyxstr(toks, indent, cprefix=cprefix, **kw) + else: + s = str(x)+' ' + if cprefix: + s = cprefix+s + toks.insert(0,s) + s = ''.join(toks) + return s + +class Function(object): + """ + """ + def pyxstr(self,toks,indent=0,**kw): + #print '%s.pyxstr(%s)'%(self,toks) + _toks=[] + assert len(self) + i=0 + while isinstance(self[i],Declarator): + if not self[i].is_void(): + _toks.append( self[i].pyxstr(indent=indent, **kw) ) + i=i+1 + toks.append( '(%s)'% ', '.join(_toks) ) + while i&%s' % (self.name, cprefix+self.name) ) + ## expose a python object: + #ostream.putln( '%s.%s = %s' % (modname,self.name, self.name) ) + ostream.putln( '%s = %s( addr = &%s )' % (self.name, self.pyx_adaptor_name(cobjects), cprefix+self.name) ) + return ostream + + +class Typedef(Declarator): + def pyxstr(self,toks=None,indent=0,cprefix="",use_cdef=True,shadow_name=True,**kw): # shadow_name=True + " warning: i do not check if my name is already in 'names' " + assert shadow_name == True + self = self.clone() # <----- NOTE + toks=[] + names = kw.get('names',{}) # what names have been defined ? + kw['names']=names + + #if self.tagged and not self.tagged.tag.name: + ## "typedef struct {...} foo;" => "typedef struct foo {...} foo;" + ## (to be emitted in the node loop below, and suppressed in the final toks.append) + #self.tagged.tag = Tag( self.name ) # this is how pyrex does it: tag.name == self.name + # XX that doesn't work (the resulting c fails to compile) XX + + self._pyxstr( toks, indent, cprefix, use_cdef, shadow_name, **kw ) + + #print self.deepstr() + if self.name and not names.has_key( self.name ): + names[ self.name ] = self + if not (self.tagged and self.name == self.tagged.tag.name): + comment = "" + if self.name in python_kws: + comment = "#" + #if cprefix: + # self.name = '%s%s "%s" ' % ( cprefix, self.name, self.name ) # XX pyrex can't do this + if cprefix: # shadow_name=True + # My c-name gets this prefix. See also TypeAlias.pyxstr(): it also prepends the cprefix. + self.name = '%s%s "%s" ' % ( cprefix, self.name, self.name ) + toks.append( ' '*indent + comment + 'ctypedef ' + Node.pyxstr(self,indent=indent, cprefix=cprefix, **kw).strip() ) + return ' \n'.join(toks) + + +class AbstractDeclarator(Declarator): + """ used in Function; may lack an identifier """ + def pyxstr(self,toks=None,indent=0,**kw): + if self.name in python_kws: + # Would be better to do this in __init__, but our subclass doesn't call our __init__. + self.name = '_' + self.name + #return ' '*indent + Node.pyxstr(self,toks,indent, **kw).strip() + return Node.pyxstr(self,toks,indent, **kw).strip() + + +class FieldLength(object): + """ + """ + def pyxstr(self,toks,indent,**kw): + pass + + +class StructDeclarator(Declarator): # also used in Union + """ + """ + def pyxstr(self,toks=None,indent=0,**kw): + comment = "" + if self.name in python_kws: + comment = "#" + return ' '*indent + comment + Node.pyxstr(self,toks,indent, **kw).strip() + +class DeclarationSpecifiers(object): + """ + """ + pass + +class TypeSpecifiers(DeclarationSpecifiers): + """ + """ + pass + +class Initializer(object): + """ + """ + pass + +class Declaration(object): + """ + """ + pass + +class ParameterDeclaration(Declaration): + """ + """ + pass + +class StructDeclaration(Declaration): + """ + """ + pass + +class TransUnit(object): + """ + Top level node. + """ + def pyx_decls(self, filenames, modname, macros = {}, names = {}, func_cb=None, cprefix="", **kw): + # PART 1: emit extern declarations + ostream = OStream() + now = datetime.today() + ostream.putln( now.strftime('# Code generated by pyxelator on %x at %X') + '\n' ) + ostream.putln("# PART 1: extern declarations") + for filename in filenames: + ostream.putln( 'cdef extern from "%s":\n pass\n' % filename ) + ostream.putln( 'cdef extern from *:' ) + file = None # current file + for node in self: + ostream.putln('') + ostream.putln(' # ' + node.cstr() ) + assert node.marked + comment = False + if node.name and node.name in names: + comment = True # redeclaration + #ostream.putln( node.deepstr( comment=True ) ) + s = node.pyxstr(indent=1, names=names, tag_lookup = self.tag_lookup, cprefix=cprefix, **kw) + if s.split(): + if comment: + s = "#"+s.replace( '\n', '\n#' ) + " # redeclaration " + if node.file != file: + file = node.file + #ostream.putln( 'cdef extern from "%s":' % file ) + ostream.putln( ' # "%s"' % file ) + ostream.putln( s ) + ostream.putln('\n') + #s = '\n'.join(toks) + return ostream.join() + +# XX warn when we find a python keyword XX +python_kws = """ +break continue del def except exec finally pass print raise +return try global assert lambda yield +for while if elif else and in is not or import from """.split() +python_kws = dict( zip( python_kws, (None,)*len(python_kws) ) ) + + diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/ir.py b/third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/ir.py new file mode 100755 index 0000000000..cfa9c02ead --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/ir.py @@ -0,0 +1,1163 @@ +#!/usr/bin/env python +""" ir.py - parse c declarations + +(c) 2002, 2003, 2004, 2005 Simon Burton +Released under GNU LGPL license. + +version 0.xx + +""" + +import sys +#import cPickle as pickle +import pickle + +#from lexer import Lexer +from parse_core import Symbols #, Parser +import node as node_module +import cparse +import genpyx + +class Node(genpyx.Node, node_module.Node): + """ + tree structure + """ + def __init__( self, *args, **kw ): + node_module.Node.__init__( self, *args, **kw ) + self._marked = False + def get_marked( self ): + return self._marked + def set_marked( self, marked ): +# if marked: +# print "MARK", self + self._marked = marked + marked = property( get_marked, set_marked ) + +# def __getstate__( self ): +# return self.__class__, tuple( [ item.__getstate__() for item in self ] ) +# def __setstate__( self, state ): +# cls, states = state +# states = list(states) +# for idx, state in enumerate(states): +# items[idx] = items[idx].__setstate__( + def __getstate__(self): + return str(self) + def __setstate__(self, state): + Node.__init__(self) + self[:] = eval(state) + +# _unique_id = 0 +# def get_unique_id(cls): +# Node._unique_id += 1 +# return Node._unique_id +# get_unique_id = classmethod(get_unique_id) + + def __hash__( self ): + return hash( tuple([hash(type(self))]+[hash(item) for item in self]) ) + + def clone(self): + l = [] + for item in self: + if isinstance(item,Node): + item = item.clone() + l.append(item) + return self.__class__(*l, **self.__dict__) + + def init_from( self, other ): # class method ? + # Warning: shallow init + self[:] = other + self.__dict__.update( other.__dict__ ) + return self + +# def is_struct(self): +# for x in self: +# if isinstance(x,Node): +# if x.is_struct(): +# return 1 +# return 0 + + + #def explain(self): + #l = [] + #for x in self: + #if isinstance(x,Node): + #l.append(x.explain()) + #else: + #l.append(str(x)) + #return string.join(l," ") + ##(self.__class__.__name__,string.join(l) ) + + def psource(self): + if hasattr(self,'lines'): +# print "# "+string.join(self.lines,"\n# ")+"\n" + print "# "+"\n# ".join(self.lines)+"\n" + + def cstr(self,l=None): + """ + Build a list of tokens; return the joined tokens string + """ + if l is None: + l = [] + for x in self: + if isinstance(x,Node): + x.cstr(l) + else: + l.insert(0,str(x)+' ') + s = ''.join(l) + return s + + def ctype(self): # anon_clone + " return clone of self without identifiers " + #print "%s.ctype()"%self + l=[] + for x in self: + if isinstance(x,Node): + l.append(x.ctype()) + else: + l.append(x) + #print "%s.__class__(*%s)"%(self,l) + return self.__class__(*l, **self.__dict__) # XX **self.__dict__ ? + + def cbasetype(self): + " return ctype with all TypeAlias's replaced " + # WARNING: we cache results (so do not mutate self!!) + l=[] + for x in self: + if isinstance(x,Node): + l.append(x.cbasetype()) + else: + l.append(x) + #print "%s.__class__(*%s)"%(self,l) + return self.__class__(*l, **self.__dict__) # XX **self.__dict__ ? + + def signature( self, tank=None ): + if tank is None: + tank = {} + for node in self.nodes(): + if not tank.has_key( type(node) ): + tank[ type(node) ] = {} + type(node).tank = tank[type(node)] + shape = tuple( [ type(_node).__name__ for _node in node ] ) + if not tank[type(node)].has_key(shape): + tank[type(node)][shape] = [] + tank[type(node)][shape].append( node ) + return tank + + def psig( self, tank=None ): + if tank is None: + tank = {} + tank = self.signature(tank) + for key in tank.keys(): + print key.__name__ + for shape in tank[key].keys(): + print " ", shape + +# +################################################# + +class Named(genpyx.Named, Node): + " has a .name property " + def get_name(self): + if self: + assert type(self[0])==str + return self[0] + return None + def set_name(self, name): + if self: + self[0] = name + else: + self.append(name) + name = property(get_name,set_name) + + +class BasicType(genpyx.BasicType, Named): + "float double void char int" + pass + +class Qualifier(genpyx.Qualifier, Named): + "register signed unsigned short long const volatile inline" + pass + +class StorageClass(genpyx.StorageClass, Named): + "extern static auto" + pass + +class Ellipses(genpyx.Ellipses, Named): + "..." + pass + +class GCCBuiltin(genpyx.GCCBuiltin, BasicType): + "things with __builtin prefix" + pass + +class Identifier(genpyx.Identifier, Named): + """ + shape = +( str, +ConstExpr ) + """ + #def explain(self): + #if len(self)==1: + #return "%s"%self.name + #else: + #return "%s initialized to %s"%(self.name, + #Node(self[1]).explain()) # will handle Initializer + +# def ctype(self): +# return self.__class__(*self[1:]) #.clone() ? + +# def get_name(self): +# if self: +# return self[0] +# def set_name(self, name): +# if self: +# self[0] = name +# else: +# self.append(name) +# name = property(get_name,set_name) + + def cstr(self,l=None): + if l is None: + l=[] + if len(self)>1: + assert len(self)==2 + l.append( '%s = %s'%(self[0],self[1]) ) + elif len(self)==1: + l.append( str(self[0]) ) + return " ".join(l) + +class TypeAlias(genpyx.TypeAlias, Named): + """ + typedefed things, eg. size_t + + """ + def cbasetype( self ): + node = self.typedef.cbasetype().get_rest() + return node + +class Function(genpyx.Function, Node): + """ + """ + #def explain(self): + #if len(self): + #return "function (%s), returning"%\ + #", ".join( map(lambda x:x.explain(),self) ) + #else: + #return "function returning" + + def cstr(self,l): + #print '%s.cstr(%s)'%(self,l) + _l=[] + assert len(self) + i=0 + while isinstance(self[i],Declarator): + _l.append( self[i].cstr() ) + i=i+1 + l.append( '(%s)'% ', '.join(_l) ) + while i1 # more than just a tag + def get_members(self): + return self[1:] + members = property(get_members) # fields ? + + def ctype(self): + if not self.tag.name: + #print "# WARNING : anonymous struct " # OK i think + return self.clone() +# self = self.clone() +# return self[:1] # just the tag + return self.__class__( self.tag, **self.__dict__ ) # just the Tag +# return self.__class__( *self, **self.__dict__ ) + + def cbasetype(self): + return self.ctype() # is this enough ??? +# return Node.cbasetype(self) # XX lookup my tag if i am empty ..? + + +class Compound(genpyx.Compound, Taged): + "Struct or Union" + + def cstr(self,_l=None): + assert isinstance( self[0], Tag ) + tag='' + if len(self[0]): + tag=' '+self[0][0] + if isinstance(self,Struct): + l=[ 'struct%s '%tag ] + elif isinstance(self,Union): + l=[ 'union%s '%tag ] + if len(self)>1: + l.append(' { ') + for decl in self[1:]: + l.append( decl.cstr()+"; " ) + l.append('} ') + if _l is None: + _l=[] + while l: + _l.insert( 0, l.pop() ) + # XX empty struct with no tag -> "struct" XX + return "".join( _l ) + + def ctype(self): + tp = Taged.ctype(self) + for i in range(1,len(tp)): + tp[i] = StructDeclarator().init_from( tp[i] ) + return tp + +class Struct(genpyx.Struct, Compound): + """ + """ + pass + + +class Union(genpyx.Union, Compound): + """ + """ + pass + + +class Enum(genpyx.Enum, Taged): + """ + """ + def cstr(self,_l=None): + assert isinstance( self[0], Tag ) + tag='' + if len(self[0]): + tag=' '+self[0][0] + l=[ 'enum%s '%tag ] + if len(self)>1: + l.append(' { ') + for node in self[1:]: + l.append( node.cstr()+', ' ) + l.append('} ') + if _l is None: + _l=[] + while l: + _l.insert( 0, l.pop() ) + return ''.join( _l ) + +class Declarator(genpyx.Declarator, Node): + """ + """ + + def __eq__(self,other): + " unordered equality " + # ordering sometimes gets lost when we do a cbasetype + if not isinstance(other,Node): + return False + a, b = self[:], other[:] + a.sort() + b.sort() + return a == b + + def __hash__( self ): + hs = [hash(item) for item in self] + hs.sort() + return hash( tuple([hash(type(self))]+hs) ) + + def transform(self): + return + + def get_identifier(self): + if len(self)>1: + return self[0] + def set_identifier(self, identifier): + if len(self)>1: + self[0] = identifier + else: + self.insert(0,identifier) + identifier = property(get_identifier,set_identifier) + + def get_spec(self): + spec = self[-1] + if type(spec)==TypeSpecifiers: # isinstance ?? + return spec + spec = property(get_spec) + + def get_type_alias(self): + if self.spec: + if isinstance(self.spec[0], TypeAlias): + return self.spec[0] + type_alias = property(get_type_alias) + + def get_tagged(self): + if self.spec: + return self.spec.tagged # i am a tagged + tagged = property(get_tagged) + + def get_compound(self): + if self.spec: + return self.spec.compound # i am a compound + compound = property(get_compound) + + def get_struct(self): + if self.spec: + return self.spec.struct # i am a struct + struct = property(get_struct) + + def get_union(self): + if self.spec: + return self.spec.union # i am a union + union = property(get_union) + + def get_enum(self): + if self.spec: + return self.spec.enum # i am an enum + enum = property(get_enum) + + def get_function(self): + if len(self)>1 and type(self[1])==Function: # isinstance ?? + return self[1] + function = property(get_function) + + def get_pointer(self): + if len(self)>1 and type(self[1])==Pointer: # isinstance ?? + return self[1] + pointer = property(get_pointer) + + def get_array(self): + if len(self)>1 and type(self[1])==Array: # isinstance ?? + return self[1] + array = property(get_array) + + def get_name(self): + if self.identifier: + return self.identifier.name + def set_name(self, name): + assert self.identifier is not None + self.identifier.name = name + name = property(get_name, set_name) + + def get_rest(self): # XX needs a better name + if len(self)>1: + return self[1] + return self[0] + + def pointer_to( self ): + " return Declarator pointing to self's type " + decl = Declarator(Identifier(), Pointer(self.get_rest().clone())) + return decl + + def deref( self ): + " return (clone of) Declarator that self is pointing to " + node = self.ctype() # clone + pointer = node.pointer or node.array + assert pointer, "cannot dereference non-pointer" + node[1:2] = pointer + return node + + def is_void(self): + return self.spec and BasicType('void') in self.spec + + def is_pointer_to_fn(self): + return self.pointer and self.deref().function + + def is_pointer_to_char(self): +# return self.ctype() == TransUnit("char *a;").transform()[0].ctype() + node = self.pointer or self.array + if node: + spec = node.spec + if spec and BasicType('char') in spec and not BasicType('unsigned') in spec: + return True + return False + + def is_callback(self): + " i am a pointer to a function whose last arg is void* " + if self.is_pointer_to_fn(): + fn = self.deref().function + if fn.args: + arg = fn.args[-1] + if arg.pointer and arg.deref().is_void(): + return True + + def is_complete( self, tag_lookup ): + if self.tagged and self.tagged.tag.name in tag_lookup and not tag_lookup[self.tagged.tag.name].has_members(): + return False + return True + + def is_primative( self ): + "i am a char,short,int,float,double... " + spec = self.cbasetype().spec + return spec and spec.find(BasicType) + + def is_pyxnative( self ): + # pyrex handles char* too + # but i don't know if we should make this the default + # sometimes we want to send a NULL, so ... XXX + self = self.cbasetype() + if self.is_void(): + return False + if self.is_primative(): + return True + if self.enum: + return True +# pointer = None +# if self.pointer: +# pointer = self.pointer +# elif self.array: +# pointer = self.array +# if pointer and pointer.spec: +# spec = pointer.spec +# if BasicType("char") in spec and not Qualifier("unsigned") in spec: +# # char*, const char* +## print self.deepstr() +# return True + return False + + def cstr(self,l=None): + return Node.cstr(self,l).strip() + + def ctype(self): + decl=Declarator() + decl.init_from( self.clone() ) + decl.identifier = Identifier() + for i in range(1,len(decl)): + decl[i]=decl[i].ctype() + return decl + + def cbasetype(self): + # WARNING: we cache results (so do not mutate self!!) + try: + # this cache improves performance by 50% + return self.__cbasetype.clone() + except AttributeError: + pass + decl = self.ctype() # gets rid of Identifier names + for i, node in enumerate(decl): + decl[i] = decl[i].cbasetype() +# return decl.get_rest() + + done = False + while not done: + done = True + nodes = decl.deepfilter( TypeSpecifiers ) + for node in nodes: + if node.deepfind( TypeSpecifiers ) != node: + # this node has another TypeSpecifier; + decl.expose_node( node ) + done = False + break # start again... + + # each TypeSpecifier needs to absorb primitive siblings (StorageClass, BasicType etc.) + nodes = decl.deepfilter( TypeSpecifiers ) + for node in nodes: + parent = decl.get_parent(node) + i = 0 + while i < len(parent): + assert not type(parent[i]) in (TypeAlias, Enum, Struct, Union) + if type(parent[i]) in (StorageClass, BasicType, Qualifier): + node.append( parent.pop(i) ) + else: + i = i + 1 + + self.__cbasetype = decl.clone() + return decl + + def invalidate(self): + # flush cache, etc. + try: + del self.__cbasetype + except AttributeError: + pass + + def declare_str(self,name): + " return c string declaring name with same type as self " + tp = self.ctype() + tp.name = name + return tp.cstr()+";" + +class Typedef(genpyx.Typedef, Declarator): + def cstr(self,l=None): + return 'typedef ' + Declarator.cstr(self,l) #.strip() + +class AbstractDeclarator(genpyx.AbstractDeclarator, Declarator): + """ used in Function; may lack an identifier """ + + #def cstr(self,l=None): + #return Node.cstr(self,l) + +# def ctype(self): +# # _type_ ignores the name of our identifier +# return Node.ctype(self) + +class FieldLength(genpyx.FieldLength, Node): + """ + """ + #def explain(self): + #return "" + + def cstr(self,l): + l.append(':%s'%self[0]) + +class StructDeclarator(genpyx.StructDeclarator, Declarator): # also used in Union + """ + """ + #def explain(self): + #flen = self.find(FieldLength) + #if flen is not None: + #i = self.index(flen) + #self.pop(i) + #s = Declarator.explain(self) + #self.insert(i,flen) + #width = flen[0] + #if width > 0: + #return s+" bitfield %s wide"%width + #else: + #return s+" alignment bitfield" + #else: + #return Declarator.explain(self) +# def ctype(self): +# return self + def get_field_length(self): + if len(self)>1 and isinstance( self[1], FieldLength ): + return self[1] + field_length = property(get_field_length) + + +class DeclarationSpecifiers(genpyx.DeclarationSpecifiers, Node): +#class TypeSpecifiers(Node): + """ + """ + def __eq__(self,other): + " unordered equality " + if not isinstance(other,Node): + return False + a, b = self[:], other[:] + a.sort() + b.sort() + return a == b + + def __hash__( self ): + hs = [hash(item) for item in self] + hs.sort() + return hash( tuple([hash(type(self))]+hs) ) + +# def is_struct(self): +# return self.find(Struct) is not None + + +class TypeSpecifiers(genpyx.TypeSpecifiers, DeclarationSpecifiers): + """ + """ + def get_tagged(self): + if self and isinstance(self[0],Taged): + return self[0] + tagged = property(get_tagged) + + def get_compound(self): + if self and isinstance(self[0],Compound): + return self[0] + compound = property(get_compound) + + def get_struct(self): + if self and isinstance(self[0],Struct): + return self[0] + struct = property(get_struct) + + def get_union(self): + if self and isinstance(self[0],Union): + return self[0] + union = property(get_union) + + def get_enum(self): + if self and isinstance(self[0],Enum): + return self[0] + enum = property(get_enum) + + def cbasetype(self): + node = Node.cbasetype(self) +# node.expose( TypeSpecifiers ) +# if node.deepfind(TypeSpecifiers) != node: + return node + +class Initializer(genpyx.Initializer, Node): + """ + """ + pass + + + +class Declaration(genpyx.Declaration, Node): + """ + """ + def do_spec(self): + " distribute DeclarationSpecifiers over each Declarator " + spec=self[0] + assert isinstance(spec,DeclarationSpecifiers), spec.deepstr() + self.pop(0) + for declarator in self: + assert isinstance(declarator,Declarator) + #if isinstance(declarator,DeclarationSpecifiers #huh? + ##for node in spec: + ##declarator.append(node.clone()) + declarator.append(spec) + + def transform(self): + # children go first + for node in self.nodes(): + if isinstance(node,Declaration): + node.do_spec() + node.file = self.file # overkill ? + self.expose(Declaration) + + #def explain(self): + #return string.join([x.explain() for x in self],", ") + #return string.join(map(lambda x:x.explain(),self),", ") + + +class ParameterDeclaration(genpyx.ParameterDeclaration, Declaration): + """ + """ + pass + + +class StructDeclaration(genpyx.StructDeclaration, Declaration): + """ + """ + pass + + +class TransUnit(genpyx.TransUnit, Node): + """ + Top level node. + """ + def __init__( self, item ): # XX __init__ uses different signature ! XX + if type(item)==str: + node = cparse.TransUnit() + node.parse(item) + else: + node = item + assert isinstance( node, cparse.TransUnit ), str(node) + Node.__init__(self) + self[:] = [ self.convert(child) for child in node ] + self.__dict__.update( node.__dict__ ) + assert "name" not in node.__dict__ + + self.syms = {} # map identifier names to their Declarator's + self.typedefs = {} # map names to Typedef's + self.tag_lookup = {} # map struct, union, enum tags to Taged's + + # XX should call transform here XX + +# print self.deepstr() + def __getstate__( self ): + nodes = tuple( [ repr(node) for node in self ] ) + typedefs = tuple( [ (key,repr(val)) for key,val in self.typedefs.items() ] ) + return nodes, typedefs + def __setstate__( self, state ): + Node.__init__(self) + nodes, typedefs = state + nodes = [ eval(node) for node in nodes ] + self[:] = nodes + typedefs = [ (key,eval(val)) for key,val in typedefs ] + self.typedefs = dict(typedefs) + + def convert( self, node ): +# name = node.__class__.__name__ +# cls = globals()[ name ] + cls = cls_lookup[ type(node) ] + _node = cls() + for child in node: + if isinstance(child, node_module.Node): + child = self.convert( child ) + else: + assert child is None or type(child) in (str, int), type(child) + _node.append( child ) + _node.__dict__.update( node.__dict__ ) + return _node + + def strip(self,files): + " leave only the declarations from " + i=0 + while i +Released under GNU LGPL license. + +version 0.xx + +""" + +import sys +import string +import types +import copy + +#from cparse import BasicType, Qualifier, StorageClass, Typedef, Ellipses, GCCBuiltin +#from cparse import * + +import cparse as host + +class LexError(Exception): + pass + +class Lexer(object): + def __init__(self,s="",verbose=0,**kw): + self.verbose = verbose + self.lookup = {} # a map for keywords and typedefs + for t in \ + "float double void char int".split(): + self.lookup[t] = host.BasicType( t ) + for t in \ + "register signed unsigned short long const volatile inline".split(): # inline here ??? + self.lookup[t] = host.Qualifier( t ) + for t in "extern static auto".split(): + self.lookup[t] = host.StorageClass( t ) + self.lookup['typedef'] = host.Typedef() + #self.lookup['__inline__'] = host.GCCBuiltin('__inline__') + #self.lookup['__extension__'] = host.Qualifier('__extension__') + self.lookup['...'] = host.Ellipses() + if s: + self.lex(s) + for key in kw.keys(): + self.__dict__[key] = kw[key] + + def lex(self,s): + self.stack = None + self.lines = s.splitlines() + self.set_state("","",0,0) + self.so_file = "" + self._newline() + self.get_token() # start + + def mktypedef(self,tok,node): + if self.verbose: + print "%s.mktypedef(%s,%s)"%(self,tok,node) + self.lookup[ tok ] = node + + def rmtypedef(self,tok): + " used in round trip testing " +# print "# rmtypedef(%s)"%tok + assert isinstance( self.lookup[ tok ], host.Node ) # existance + del self.lookup[ tok ] + + def _get_kind(self,tok): + #print '_get_kind(%s)'%tok,self.lookup + try: + return self.lookup[tok] + #return self.lookup[tok].clone() + except KeyError: + if tok.startswith("__builtin"): + node = host.GCCBuiltin(tok) + self.lookup[tok] = node + return node + #elif tok in ( "__extension__", ): + #node = GCCBuiltin(tok) + #self.lookup[tok] = node + #return node + return None + + def _newline(self): + while self.lno < len(self.lines): + line = self.lines[self.lno] + if not line or line[0] != "#": + break + l = line.split('"') + assert len(l)>=2 + self.so_file = l[1] + #self.so_lno = int( l[0].split()[1] ) + #sys.stderr.write("# %s %s: %s\n"%(so_lno,so_file,l)) + self.lno+=1 + + def get_brace_token( self ): + self.push_state() + ident_chars0 = string.letters+"_" + ident_chars1 = string.letters+string.digits+"_" + tok, kind = "", "" + while self.lno < len(self.lines): + s = self.lines[self.lno] + i=self.col + while i < len(s): + if s[i] not in '{}': + i=i+1 + continue + else: + tok = s[i] + kind = tok + self.col = i+1 + break + # keep moving + #sys.stderr.write( "lexer ignoring '%s'\n"%s[i] ) + i=i+1 + if i==len(s): + # nothing found + assert tok == "" + self.col=0 + self.lno+=1 + self._newline() + else: + assert tok + break + self.set_state(tok,kind,self.lno,self.col) + + def get_token(self): + self.push_state() + ident_chars0 = string.letters+"_" + ident_chars1 = string.letters+string.digits+"_" + tok, kind = "", "" + while self.lno < len(self.lines): + s = self.lines[self.lno] + i=self.col + while i < len(s): + if s[i].isspace(): + i=i+1 + continue + #if s[i] in ident_chars0: + if s[i].isalpha() or s[i]=='_': + # identifier + j=i+1 + while j|&': + tok = s[i] + kind = tok + self.col = i+1 + break + if s[i] == "'": + j = i+2 + while j +Released under GNU LGPL license. + +version 0.xx + +""" + +import string + + +class Node(list): + " A node in a parse tree " + + def __init__(self,*items,**kw): + list.__init__( self, items ) + self.lock1 = 0 # these two should be properties (simplifies serializing) + self.lock2 = 0 + self.verbose = 0 + for key in kw.keys(): + self.__dict__[key] = kw[key] + + def __str__(self): + attrs = [] + for item in self: + if isinstance(item,Node): + attrs.append( str(item) ) + else: + attrs.append( repr(item) ) + attrs = ','.join(attrs) + return "%s(%s)"%(self.__class__.__name__,attrs) + + def safe_repr( self, tank ): + tank[ str(self) ] = None + attrs = [] + for item in self: + if isinstance(item,Node): + attrs.append( item.safe_repr(tank) ) # can we use repr here ? + else: + attrs.append( repr(item) ) + # this is the dangerous bit: + for key, val in self.__dict__.items(): + if isinstance(val,Node): + if str(val) not in tank: + attrs.append( '%s=%s'%(key,val.safe_repr(tank)) ) + else: + attrs.append( '%s=%s'%(key,repr(val)) ) + attrs = ','.join(attrs) + return "%s(%s)"%(self.__class__.__name__,attrs) + + def __repr__(self): + #attrs = ','.join( [repr(item) for item in self] + \ + # [ '%s=%s'%(key,repr(val)) for key,val in self.__dict__.items() ] ) + #return "%s%s"%(self.__class__.__name__,tuple(attrs)) + return self.safe_repr({}) + + def __eq__(self,other): + if not isinstance(other,Node): + return 0 + if len(self)!=len(other): + return 0 + for i in range(len(self)): + if not self[i]==other[i]: + return 0 + return 1 + + def __ne__(self,other): + return not self==other + + def filter(self,cls): + return [x for x in self if isinstance(x,cls)] + #return filter( lambda x:isinstance(x,cls), self ) + + def deepfilter(self,cls): + " bottom-up " + return [x for x in self.nodes() if isinstance(x,cls)] + + def find(self,cls): + for x in self: + if isinstance(x,cls): + return x + return None + + def deepfind(self,cls): + " bottom-up isinstance search " + for x in self: + if isinstance(x,Node): + if isinstance(x,cls): + return x + node = x.deepfind(cls) + if node is not None: + return node + if isinstance(self,cls): + return self + return None + + def leaves(self): + for i in self: + if isinstance( i, Node ): + for j in i.leaves(): + yield j + else: + yield i + + def nodes(self): + " bottom-up iteration " + for i in self: + if isinstance( i, Node ): + for j in i.nodes(): + yield j + yield self + + def deeplen(self): + i=0 + if not self.lock2: + self.lock2=1 + for item in self: + i+=1 + if isinstance(item,Node): + i+=item.deeplen() + self.lock2=0 + else: + i+=1 + return i + + def deepstr(self,level=0,comment=False,nl='\n',indent=' '): + if self.deeplen() < 4: + nl = ""; indent = "" + #else: + #nl="\n"; indent = " " + s = [] + if not self.lock1: + self.lock1=1 + for item in self: + if isinstance(item,Node): + s.append( indent*(level+1)+item.deepstr(level+1,False,nl,indent) ) + else: + s.append( indent*(level+1)+repr(item) ) + self.lock1=0 + else: + for item in self: + if isinstance(item,Node): + s.append( indent*(level+1)+"" ) + else: + s.append( indent*(level+1)+"%s"%repr(item) ) + s = "%s(%s)"%(self.__class__.__name__,nl+string.join(s,","+nl)) + if comment: + s = '#' + s.replace('\n','\n#') + return s + + def clone(self): + items = [] + for item in self: + if isinstance(item,Node): + item = item.clone() + items.append(item) + # we skip any attributes... + return self.__class__(*items) + + def fastclone(self): + # XX is it faster ??? + #print "clone" + nodes = [self] + idxs = [0] + itemss = [ [] ] + while nodes: + assert len(nodes)==len(idxs)==len(itemss) + node = nodes[-1] + items = itemss[-1] + assert idxs[-1] == len(items) + while idxs[-1]==len(node): + # pop + _node = node.__class__( *items ) + _node.__dict__.update( node.__dict__ ) + nodes.pop(-1) + idxs.pop(-1) + itemss.pop(-1) + if not nodes: + #for node0 in self.nodes(): + #for node1 in _node.nodes(): + #assert node0 is not node1 + #assert _node == self + return _node # Done !! + node = nodes[-1] + items = itemss[-1] + items.append(_node) # set + idxs[-1] += 1 + assert idxs[-1] == len(items) + #assert idxs[-1] < len(node), str( (node,nodes,idxs,itemss) ) + + _node = node[ idxs[-1] ] + # while idxs[-1] instance ' + # children first + for x in self: + if isinstance(x,Node): + x.expose(cls) + # now the tricky bit + i=0 + while i < len(self): + if isinstance(self[i],cls): + node=self.pop(i) + for x in node: + assert not isinstance(x,cls) + # pass on some attributes + if hasattr(node,'lines') and not hasattr(x,'lines'): + x.lines=node.lines + if hasattr(node,'file') and not hasattr(x,'file'): + x.file=node.file + self.insert(i,x) # expose + i=i+1 + assert i<=len(self) + else: + i=i+1 + + def get_parent( self, item ): # XX 25% CPU time here XX + assert self != item + if item in self: + return self + for child in self: + if isinstance(child, Node): + parent = child.get_parent(item) + if parent is not None: + return parent + return None + + def expose_node( self, item ): + assert self != item + parent = self.get_parent(item) + idx = parent.index( item ) + parent[idx:idx+1] = item[:] + + def delete(self,cls): + ' delete any subtree ' + for x in self: + if isinstance(x,Node): + x.delete(cls) + # now the tricky bit + i=0 + while i < len(self): + if isinstance(self[i],cls): + self.pop(i) + else: + i=i+1 + + def deeprm(self,item): + ' remove any items matching ' + for x in self: + if isinstance(x,Node): + x.deeprm(item) + # now the tricky bit + i=0 + while i < len(self): + if self[i] == item: + self.pop(i) + else: + i=i+1 + + def idem(self,cls): + " is made idempotent " + # children first + for x in self: + if isinstance(x,Node): + x.idem(cls) + if isinstance(self,cls): + # now the tricky bit + i=0 + while i < len(self): + if isinstance(self[i],cls): + node = self.pop(i) + for x in node: + assert not isinstance(x,cls) + self.insert(i,x) # idempotent + i=i+1 + assert i<=len(self) + else: + i=i+1 + +if __name__=="__main__": + node = Node( 'a', Node(1,2), Node(Node(Node(),1)) ) + + print node + print node.clone() + + + + diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/parse_core.py b/third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/parse_core.py new file mode 100755 index 0000000000..84fb894171 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/parse_core.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python +""" cdecl.py - parse c declarations + +(c) 2002, 2003, 2004, 2005 Simon Burton +Released under GNU LGPL license. + +version 0.xx + +""" + +import sys + + +class Symbols(object): + def __init__(self,parent=None,verbose=False): + self.verbose = verbose + self.parent=parent # are we a nested namespace? + self.lookup = {} # identifiers + self.tags = {} # struct, union, enum tags + + def __str__(self): + return "Symbols(%s,%s)"%(self.lookup,self.tags) + + def __getitem__(self,key): + try: + item = self.lookup[key] + except KeyError: + item = None + #if self.parent is not None: + #item = self.parent[item] + ## self[key] = item # cache + #if self.verbose: print "%s.get('%s')='%s'"%(self,key,item) + return item + + def __setitem__(self,key,val): + #if self.verbose: print "%s.set('%s','%s')"%(self,key,val) + assert val is not None + self.lookup[key] = val + + def set_tag(self,key,val): + #if self.verbose: print "%s.set_tag(%s,%s)"%(self,key,val) + assert len(key) + self.tags[key] = val + + def deep_get_tag(self,key): + try: + item = self.tags[key] + except KeyError: + item = None + if self.parent is not None: + item = self.parent.deep_get_tag(key) + #if self.verbose: print "%s.get_tag(%s)=%s"%(self,key,item) + return item + + def get_tag(self,key): + try: + item = self.tags[key] + except KeyError: + item = None + #if self.verbose: print "%s.get_tag(%s)=%s"%(self,key,item) + return item + +################################################################### +# +################################################################### +# + + +class ParseError(Exception): + def __init__(self,*e): + self.e = e + + def __str__(self): + return "".join(map(str,self.e)) + + +class Parser(object): + def parse_error(self,lexer,reason="?",*blah): + sys.stderr.write( "%s.parse_error()\n"%self.deepstr() ) + sys.stderr.write( "at line %s: %s\n"%(lexer.lno+1,reason) ) + sys.stderr.write( lexer.err_string() ) + raise ParseError(reason,*blah) + + def expected_error(self,lexer,*l): + self.parse_error( lexer, "expected %s, got '%s'"\ + %(" or ".join(map(repr,l)),lexer.tok)) + + def consume(self,lexer,tok): + if lexer.tok != tok: + self.expected_error(lexer, tok) + lexer.get_token() + + def parse_enter(self,lexer): + #return + self.start_lno=lexer.lno + self.file=lexer.so_file + + def parse_leave(self,lexer): + #return + self.lines = lexer.lines[self.start_lno:max(lexer.lno,self.start_lno+1)] + +################################################################### +# +################################################################### +# + diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/work_unit.py b/third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/work_unit.py new file mode 100755 index 0000000000..31ab3e5679 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/work_unit.py @@ -0,0 +1,192 @@ +#!/usr/bin/env python + +""" + +(c) 2002, 2003, 2004, 2005 Simon Burton +Released under GNU LGPL license. + +version 0.xx + +""" + + +import sys +import os + +import cparse +import ir + +def callcmd(cmd): + try: + from subprocess import call + try: + retcode = call(cmd, shell=True) + assert retcode == 0, "command failed: %s"%cmd + except OSError, e: + assert False, "command failed: %s"%e + except ImportError: + status = os.system( cmd ) + assert status == 0, "command failed: %s"%cmd + +class WorkUnit(object): + def __init__(self, files, modname, filename, + std=False, strip=False, mark_cb=None, + extradefs="", use_header=None, CC="gcc", CPP="gcc -E", + CPPFLAGS=""): + self.files = tuple(files) + self.modname = modname + self.filename = filename + self.CPPFLAGS = CPPFLAGS + self.CPP = CPP + if CC == 'g++': + self.CPPFLAGS += " -D__cplusplus" + self.std = std + self.strip = strip + self.mark_cb = mark_cb + self.node = None + self.extradefs = extradefs + self.CC = CC + self.use_header = use_header + + def mkheader( self ): + if self.use_header: + return self.use_header + tmpname = str(abs(hash( (self.files,self.CPPFLAGS) ))) + name = '.tmp/%s' % tmpname + ifile = open( name+'.h', "w" ) + ifile.write( """ +#define __attribute__(...) +#define __const const +#define __restrict +#define __extension__ +#define __asm__(...) +#define __asm(...) +#define __inline__ +#define __inline +""" ) + for filename in self.files: + if self.std: + line = '#include <%s>\n'%filename + else: + line = '#include "%s"\n'%filename + ifile.write( line ) + print line, + ifile.close() + cmd = '%s %s %s > %s'%(self.CPP,name+'.h',self.CPPFLAGS,name+'.E') + sys.stderr.write( "# %s\n" % cmd ) + callcmd( cmd ) + assert open(name+'.E').read().count('\n') > 10, "failed to run preprocessor" + cmd = '%s -dM %s %s > %s'%(self.CPP,name+'.h',self.CPPFLAGS,name+'.dM') + sys.stderr.write( "# %s\n" % cmd ) + callcmd( cmd ) + assert open(name+'.dM').read().count('\n') > 10, "failed to run preprocessor with -dM" + return name + + def parse(self, verbose=False): + sys.stderr.write( "# parse %s\n" % str(self.files) ) + name = self.mkheader() + # read macros + f = open(name+'.dM') + macros = {} + for line in f.readlines(): + if line: + macro = line.split()[1] + if macro.count('('): + macro = macro[:macro.index('(')] + macros[macro] = None + #keys = macros.keys() + #keys.sort() + #for key in keys: + #print key + self.macros = macros + # parse preprocessed code + f = open(name+'.E') + s = f.read() + self.extradefs + self.node = cparse.TransUnit(verbose = verbose) + sys.stderr.write( "# parsing %s lines\n" % s.count('\n') ) + self.node.parse( s ) + if self.strip: + self.node.strip(self.files) + + def transform(self, verbose=False, test_parse=False, test_types=False): + sys.stderr.write( "# processing...\n" ) + self.node = ir.TransUnit( self.node ) + self.node.transform(verbose, test_parse, test_types) + #self.node[0].psource() + if self.mark_cb is not None: + self.node.mark(self.mark_cb,verbose=False) + + def output( self, func_cb = None ): + sys.stderr.write( "# pyxstr...\n" ) + decls = self.node.pyx_decls(self.files, self.modname, macros = self.macros, func_cb = func_cb, names={}, cprefix="" ) + + name = self.filename + assert name.endswith(".pyx") + + pxi = name[:-3]+'pxi' + file = open( pxi, "w" ) + file.write(decls) + sys.stderr.write( "# wrote %s, %d lines\n" % (pxi,decls.count('\n')) ) + + def pprint(self): + for decl in self.node: + #decl.psource() + #cstr = decl.cstr() + #cstr = cstr.replace( '\n', '\n# ' ) + print + #print '#', cstr + print decl.deepstr() + +def file_exists(path): + try: + os.stat(path) + return True + except OSError: + return False + +if sys.platform.count('darwin'): + shared_ext = '.dylib' +else: + shared_ext = '.so' + +def get_syms(libs, libdirs): + # XX write interface to objdump -t XX + libnames = [] + for lib in libs: + for ext in shared_ext,'.a': + libname = 'lib'+lib+ext + for libdir in libdirs: + path = libdir+'/'+libname + if file_exists(path): + libnames.append(path) + break + #else: + #print "cannot find %s lib as %s in %s" % ( lib, libname, libdir ) + print 'libnames:', libnames + syms = {} + accept = [ ' %s '%c for c in 'TVWBCDGRS' ] + #f = open('syms.out','w') + for libname in libnames: + try: + from subprocess import Popen, PIPE + p = Popen(['nm', libname], bufsize=1, stdout=PIPE) + fout = p.stdout + except ImportError: + fin, fout = os.popen2( 'nm %s' % libname ) + for line in fout.readlines(): + for acc in accept: + if line.count(acc): + left, right = line.split(acc) + sym = right.strip() + if sys.platform.count('darwin'): + if sym[0] == '_': + sym = sym[1:] # remove underscore prefix + if sym.endswith('.eh'): + sym = sym[:-len('.eh')] + syms[sym] = None + #f.write( '%s: %s %s\n' % (sym,line[:-1],libname) ) + break + return syms + + + diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/wrap_yasm.py b/third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/wrap_yasm.py new file mode 100755 index 0000000000..58553ab2ca --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/pyxelator/wrap_yasm.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python + +""" + +(c) 2002, 2003, 2004, 2005 Simon Burton +Released under GNU LGPL license. + +version 0.xx + +""" + + +import sys +import os + +from work_unit import WorkUnit, get_syms +import ir + + +def mk_tao(CPPFLAGS = "", CPP = "gcc -E", modname = '_yasm', oname = None, YASM_DIR = ".", **options): + if oname is None: + oname = modname+'.pyx' + CPPFLAGS += " -I"+YASM_DIR + CPPFLAGS += " -DYASM_PYXELATOR" + CPPFLAGS += " -DYASM_LIB_INTERNAL" + CPPFLAGS += " -DYASM_BC_INTERNAL" + CPPFLAGS += " -DYASM_EXPR_INTERNAL" + files = [ 'libyasm.h', 'libyasm/assocdat.h', 'libyasm/bitvect.h' ] + + syms = get_syms( ['yasm'], [YASM_DIR] ) + def cb(trans_unit, node, *args): + name, file = node.name, node.file + return True + return name in syms + extradefs = "" + unit = WorkUnit(files,modname,oname,False,mark_cb=cb,extradefs=extradefs, + CPPFLAGS=CPPFLAGS, CPP=CPP, **options) + + + unit.parse( False ) + unit.transform(verbose=False, test_parse=False, test_types=False) + unit.output() + +def main(): + options = {} + for i,arg in enumerate(sys.argv[1:]): + if arg.count('='): + key,val = arg.split('=', 1) + options[key]=val + mk_tao(**options) + +if __name__=="__main__": + main() + + + + diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/setup.py b/third-party/yasm/yasm-1.3.0/tools/python-yasm/setup.py new file mode 100644 index 0000000000..d4ce2f44d5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/setup.py @@ -0,0 +1,88 @@ +#! /usr/bin/env python +# Build Python extension with configuration file input +# +# Copyright (C) 2006 Peter Johnson +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + +from distutils.core import setup +from distutils.extension import Extension +from Cython.Distutils import build_ext +from os.path import basename, join, exists + +def ReadSetup(filename): + """ReadSetup goes through filename and parses out the values stored + in the file. Values need to be stored in a + \"key=value format\"""" + return dict(line.split('=', 1) for line in open(filename)) + +def ParseCPPFlags(flags): + """parse the CPPFlags macro""" + incl_dir = [x[2:] for x in flags.split() if x.startswith("-I")] + cppflags = [x for x in flags.split() if not x.startswith("-I")] + cppflags.append("-DYASM_LIB_INTERNAL") + cppflags.append("-DYASM_BC_INTERNAL") + cppflags.append("-DYASM_EXPR_INTERNAL") + return (incl_dir, cppflags) + +def ParseSources(src, srcdir): + """parse the Sources macro""" + # do the dance of detecting if the source file is in the current + # directory, and if it's not, prepend srcdir + sources = [] + for tok in src.split(): + if tok.endswith(".c"): + fn = tok + else: + continue + if not exists(fn): + fn = join(srcdir, fn) + sources.append(fn) + + return sources + +def RunSetup(incldir, cppflags, sources): + setup( + name='yasm', + version='0.0', + description='Python bindings for Yasm', + author='Michael Urman, Peter Johnson', + url='http://www.tortall.net/projects/yasm', + ext_modules=[ + Extension('yasm', + sources=sources, + extra_compile_args=cppflags, + include_dirs=incldir, + ), + ], + cmdclass = dict(build_ext=build_ext), + ) + +if __name__ == "__main__": + opts = ReadSetup("python-setup.txt") + incldir, cppflags = ParseCPPFlags(opts["includes"]) + sources = ParseSources(opts["sources"], opts["srcdir"].strip()) + sources.append('yasm_python.c') + if opts["gcc"].strip() == "yes": + cppflags.append('-w') + RunSetup(incldir, cppflags, sources) + diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/symrec.pxi b/third-party/yasm/yasm-1.3.0/tools/python-yasm/symrec.pxi new file mode 100644 index 0000000000..eb56ccf0c8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/symrec.pxi @@ -0,0 +1,285 @@ +# Python bindings for Yasm: Pyrex input file for symrec.h +# +# Copyright (C) 2006 Michael Urman, Peter Johnson +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + +cdef class Symbol: + cdef yasm_symrec *sym + + def __cinit__(self, symrec): + self.sym = NULL + if PyCObject_Check(symrec): + self.sym = __get_voidp(symrec, Symbol) + else: + raise NotImplementedError + + # no deref or destroy necessary + + property name: + def __get__(self): return yasm_symrec_get_name(self.sym) + + property status: + def __get__(self): + cdef yasm_sym_status status + s = set() + status = yasm_symrec_get_status(self.sym) + if status & YASM_SYM_USED: s.add('used') + if status & YASM_SYM_DEFINED: s.add('defined') + if status & YASM_SYM_VALUED: s.add('valued') + return s + + property in_table: + def __get__(self): + return bool(yasm_symrec_get_status(self.sym) & + YASM_SYM_NOTINTABLE) + + property visibility: + def __get__(self): + cdef yasm_sym_vis vis + s = set() + vis = yasm_symrec_get_visibility(self.sym) + if vis & YASM_SYM_GLOBAL: s.add('global') + if vis & YASM_SYM_COMMON: s.add('common') + if vis & YASM_SYM_EXTERN: s.add('extern') + if vis & YASM_SYM_DLOCAL: s.add('dlocal') + return s + + property equ: + def __get__(self): + cdef yasm_expr *e + e = yasm_symrec_get_equ(self.sym) + if not e: + raise AttributeError("not an EQU") + return __make_expression(yasm_expr_copy(e)) + + property label: + def __get__(self): + cdef yasm_symrec_get_label_bytecodep bc + if yasm_symrec_get_label(self.sym, &bc): + return None #Bytecode(bc) + else: + raise AttributeError("not a label or not defined") + + property is_special: + def __get__(self): return bool(yasm_symrec_is_special(self.sym)) + + property is_curpos: + def __get__(self): return bool(yasm_symrec_is_curpos(self.sym)) + + def get_data(self): pass # TODO + #return (yasm_symrec_get_data(self.sym, PyYasmAssocData)) + + def set_data(self, data): pass # TODO + #yasm_symrec_set_data(self.sym, PyYasmAssocData, data) + +# +# Use associated data mechanism to keep Symbol reference paired with symrec. +# + +cdef void __python_symrec_cb_destroy(void *data): + Py_DECREF(data) +cdef void __python_symrec_cb_print(void *data, FILE *f, int indent_level): + pass +__python_symrec_cb = __assoc_data_callback( + PyCObject_FromVoidPtr(&__python_symrec_cb_destroy, NULL), + PyCObject_FromVoidPtr(&__python_symrec_cb_print, NULL)) + +cdef object __make_symbol(yasm_symrec *symrec): + cdef void *data + __error_check() + data = yasm_symrec_get_data(symrec, + (<__assoc_data_callback>__python_symrec_cb).cb) + if data != NULL: + return data + symbol = Symbol(__pass_voidp(symrec, Symbol)) + yasm_symrec_add_data(symrec, + (<__assoc_data_callback>__python_symrec_cb).cb, + symbol) + Py_INCREF(symbol) # We're keeping a reference on the C side! + return symbol + +cdef class Bytecode +cdef class SymbolTable + +cdef class SymbolTableKeyIterator: + cdef yasm_symtab_iter *iter + + def __cinit__(self, symtab): + if not isinstance(symtab, SymbolTable): + raise TypeError + self.iter = yasm_symtab_first((symtab).symtab) + + def __iter__(self): + return self + + def __next__(self): + if self.iter == NULL: + raise StopIteration + rv = yasm_symrec_get_name(yasm_symtab_iter_value(self.iter)) + self.iter = yasm_symtab_next(self.iter) + return rv + +cdef class SymbolTableValueIterator: + cdef yasm_symtab_iter *iter + + def __cinit__(self, symtab): + if not isinstance(symtab, SymbolTable): + raise TypeError + self.iter = yasm_symtab_first((symtab).symtab) + + def __iter__(self): + return self + + def __next__(self): + if self.iter == NULL: + raise StopIteration + rv = __make_symbol(yasm_symtab_iter_value(self.iter)) + self.iter = yasm_symtab_next(self.iter) + return rv + +cdef class SymbolTableItemIterator: + cdef yasm_symtab_iter *iter + + def __cinit__(self, symtab): + if not isinstance(symtab, SymbolTable): + raise TypeError + self.iter = yasm_symtab_first((symtab).symtab) + + def __iter__(self): + return self + + def __next__(self): + cdef yasm_symrec *sym + if self.iter == NULL: + raise StopIteration + sym = yasm_symtab_iter_value(self.iter) + rv = (yasm_symrec_get_name(sym), __make_symbol(sym)) + self.iter = yasm_symtab_next(self.iter) + return rv + +cdef int __parse_vis(vis) except -1: + if not vis or vis == 'local': return YASM_SYM_LOCAL + if vis == 'global': return YASM_SYM_GLOBAL + if vis == 'common': return YASM_SYM_COMMON + if vis == 'extern': return YASM_SYM_EXTERN + if vis == 'dlocal': return YASM_SYM_DLOCAL + msg = "bad visibility value %r" % vis + PyErr_SetString(ValueError, msg) + return -1 + +cdef class SymbolTable: + cdef yasm_symtab *symtab + + def __cinit__(self): + self.symtab = yasm_symtab_create() + + def __dealloc__(self): + if self.symtab != NULL: yasm_symtab_destroy(self.symtab) + + def use(self, name, line): + return __make_symbol(yasm_symtab_use(self.symtab, name, line)) + + def define_equ(self, name, expr, line): + if not isinstance(expr, Expression): + raise TypeError + return __make_symbol(yasm_symtab_define_equ(self.symtab, name, + yasm_expr_copy((expr).expr), line)) + + def define_label(self, name, precbc, in_table, line): + if not isinstance(precbc, Bytecode): + raise TypeError + return __make_symbol(yasm_symtab_define_label(self.symtab, name, + (precbc).bc, in_table, line)) + + def define_special(self, name, vis): + return __make_symbol( + yasm_symtab_define_special(self.symtab, name, + __parse_vis(vis))) + + def declare(self, name, vis, line): + return __make_symbol( + yasm_symtab_declare(self.symtab, name, + __parse_vis(vis), line)) + + # + # Methods to make SymbolTable behave like a dictionary of Symbols. + # + + def __getitem__(self, key): + cdef yasm_symrec *symrec + symrec = yasm_symtab_get(self.symtab, key) + if symrec == NULL: + raise KeyError + return __make_symbol(symrec) + + def __contains__(self, key): + cdef yasm_symrec *symrec + symrec = yasm_symtab_get(self.symtab, key) + return symrec != NULL + + def keys(self): + cdef yasm_symtab_iter *iter + l = [] + iter = yasm_symtab_first(self.symtab) + while iter != NULL: + l.append(yasm_symrec_get_name(yasm_symtab_iter_value(iter))) + iter = yasm_symtab_next(iter) + return l + + def values(self): + cdef yasm_symtab_iter *iter + l = [] + iter = yasm_symtab_first(self.symtab) + while iter != NULL: + l.append(__make_symbol(yasm_symtab_iter_value(iter))) + iter = yasm_symtab_next(iter) + return l + + def items(self): + cdef yasm_symtab_iter *iter + cdef yasm_symrec *sym + l = [] + iter = yasm_symtab_first(self.symtab) + while iter != NULL: + sym = yasm_symtab_iter_value(iter) + l.append((yasm_symrec_get_name(sym), __make_symbol(sym))) + iter = yasm_symtab_next(iter) + return l + + def has_key(self, key): + cdef yasm_symrec *symrec + symrec = yasm_symtab_get(self.symtab, key) + return symrec != NULL + + def get(self, key, x): + cdef yasm_symrec *symrec + symrec = yasm_symtab_get(self.symtab, key) + if symrec == NULL: + return x + return __make_symbol(symrec) + + def iterkeys(self): return SymbolTableKeyIterator(self) + def itervalues(self): return SymbolTableValueIterator(self) + def iteritems(self): return SymbolTableItemIterator(self) + def __iter__(self): return SymbolTableKeyIterator(self) + diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/Makefile.inc b/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/Makefile.inc new file mode 100644 index 0000000000..c6df22c5a3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/Makefile.inc @@ -0,0 +1,13 @@ +EXTRA_DIST += tools/python-yasm/tests/python_test.sh +EXTRA_DIST += tools/python-yasm/tests/__init__.py +EXTRA_DIST += tools/python-yasm/tests/test_bytecode.py +EXTRA_DIST += tools/python-yasm/tests/test_expr.py +EXTRA_DIST += tools/python-yasm/tests/test_intnum.py +EXTRA_DIST += tools/python-yasm/tests/test_symrec.py + +if HAVE_PYTHON_BINDINGS + +TESTS_ENVIRONMENT += PYTHON=${PYTHON} +TESTS += tools/python-yasm/tests/python_test.sh + +endif diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/__init__.py b/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/__init__.py new file mode 100644 index 0000000000..f5afb30cdc --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/__init__.py @@ -0,0 +1,69 @@ +# Test wrapper from Quod Libet +# http://www.sacredchao.net/quodlibet/ +import unittest, sys +suites = [] +add = registerCase = suites.append +from unittest import TestCase + +class Mock(object): + # A generic mocking object. + def __init__(self, **kwargs): self.__dict__.update(kwargs) + +import test_intnum +import test_symrec +import test_bytecode +import test_expr + +class Result(unittest.TestResult): + + separator1 = '=' * 70 + separator2 = '-' * 70 + + def addSuccess(self, test): + unittest.TestResult.addSuccess(self, test) + sys.stdout.write('.') + + def addError(self, test, err): + unittest.TestResult.addError(self, test, err) + sys.stdout.write('E') + + def addFailure(self, test, err): + unittest.TestResult.addFailure(self, test, err) + sys.stdout.write('F') + + def printErrors(self): + succ = self.testsRun - (len(self.errors) + len(self.failures)) + v = "%3d" % succ + count = 50 - self.testsRun + sys.stdout.write((" " * count) + v + "\n") + self.printErrorList('ERROR', self.errors) + self.printErrorList('FAIL', self.failures) + + def printErrorList(self, flavour, errors): + for test, err in errors: + sys.stdout.write(self.separator1 + "\n") + sys.stdout.write("%s: %s\n" % (flavour, str(test))) + sys.stdout.write(self.separator2 + "\n") + sys.stdout.write("%s\n" % err) + +class Runner: + def run(self, test): + suite = unittest.makeSuite(test) + pref = '%s (%d): ' % (test.__name__, len(suite._tests)) + print pref + " " * (25 - len(pref)), + result = Result() + suite(result) + result.printErrors() + return bool(result.failures + result.errors) + +def unit(run = []): + runner = Runner() + failures = False + for test in suites: + if not run or test.__name__ in run: + failures |= runner.run(test) + return failures + +if __name__ == "__main__": + raise SystemExit(unit(sys.argv[1:])) + diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/python_test.sh b/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/python_test.sh new file mode 100755 index 0000000000..18e7a69ef4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/python_test.sh @@ -0,0 +1,19 @@ +#!/bin/sh +# Based on _sanity.sh from Quod Libet +# http://www.sacredchao.net/quodlibet/ + +set -e + +test -n "${srcdir}" || srcdir=. +test -n "${PYTHON}" || PYTHON=python + +if test "$1" = "--help" -o "$1" = "-h"; then + echo "Usage: $0 --sanity | [TestName] ..." + exit 0 +elif [ "$1" = "--sanity" ]; then + echo "Running static sanity checks." + grep "except None:" ${srcdir}/tools/python-yasm/tests/*.py +else + ${PYTHON} -c "import sys; import glob; sys.path.insert(0, '${srcdir}/tools/python-yasm'); sys.path.insert(0, glob.glob('build/lib.*')[0]); import tests; raise SystemExit(tests.unit('$*'.split()))" +fi + diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/test_bytecode.py b/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/test_bytecode.py new file mode 100644 index 0000000000..eb0e96db02 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/test_bytecode.py @@ -0,0 +1,3 @@ +from tests import TestCase, add +from yasm import Bytecode, Expression + diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/test_expr.py b/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/test_expr.py new file mode 100644 index 0000000000..97b021c3fc --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/test_expr.py @@ -0,0 +1,18 @@ +from tests import TestCase, add +from yasm import Expression +import operator + +class TExpression(TestCase): + def test_create(self): + e1 = Expression(operator.add, 1, 2) + e2 = Expression('+', 1, 2) + + self.assertEquals(e1.get_intnum(), e1.get_intnum()) + + def test_extract(self): + e1 = Expression('/', 15, 5) + self.assertEquals(e1.get_intnum(), 3) + self.assertRaises(ValueError, e1.extract_segoff) + self.assertRaises(ValueError, e1.extract_wrt) + +add(TExpression) diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/test_intnum.py b/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/test_intnum.py new file mode 100644 index 0000000000..a2220180c5 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/test_intnum.py @@ -0,0 +1,77 @@ +from tests import TestCase, add +from yasm import IntNum + +class TIntNum(TestCase): + legal_values = [ + 0, 1, -1, 2, -2, 17, -17, + 2**31-1, -2**31, 2**31, 2**32-1, -2**32, + 2**63-1, -2**63-1, 2**63, 2**64, -2**64, + 2**127-1, -2**127 + ] + overflow_values = [ + 2**127, -2**127-1 + ] + + def test_to_from(self): + for i in self.legal_values: + self.assertEquals(i, int(IntNum(i))) + self.assertEquals(i, long(IntNum(i))) + + def test_overflow(self): + for i in self.overflow_values: + self.assertRaises(OverflowError, IntNum, i) + + str_values = [ + "0", "00000", "1234", "87654321", "010101010", "FADCBEEF" + ] + base_values = [2, 8, 10, 12, 16, None, "nasm", "foo"] + + def test_from_str(self): + pass + + def test_from_str_base(self): + pass + + def test_exceptions(self): + self.assertRaises(ZeroDivisionError, IntNum(1).__div__, 0) + + IntNum(1) / 1 # make sure the above error is cleared + + try: IntNum(1) / 0 + except ZeroDivisionError, err: + self.assertEquals('divide by zero', str(err)) + + def test_xor(self): + a = IntNum(-234) + b = IntNum(432) + c = a ^ b + self.assertEquals(a, -234) + self.assertEquals(b, 432) + self.assertEquals(c, -234 ^ 432) + + def test_ixor(self): + a = IntNum(-234) + b = IntNum(432) + a ^= b; b ^= a; a ^= b + self.assertEquals(a, 432) + self.assertEquals(b, -234) + + def test_cmp(self): + a = IntNum(-1) + b = IntNum(0) + c = IntNum(1) + self.assert_(a < b < c) + self.assert_(a <= b <= c) + self.assert_(c >= b >= a) + self.assert_(c > b > a) + self.assert_(a != b != c) + + def test_abs(self): + a = IntNum(-1) + b = IntNum(0) + c = IntNum(1) + + self.assertEquals(abs(a), abs(c)) + self.assertEquals(abs(a) - abs(c), abs(b)) + +add(TIntNum) diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/test_symrec.py b/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/test_symrec.py new file mode 100644 index 0000000000..a575b194e0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/tests/test_symrec.py @@ -0,0 +1,80 @@ +from tests import TestCase, add +from yasm import SymbolTable, Expression, YasmError + +class TSymbolTable(TestCase): + def setUp(self): + self.symtab = SymbolTable() + + def test_keys(self): + self.assertEquals(len(self.symtab.keys()), 0) + self.symtab.declare("foo", None, 0) + keys = self.symtab.keys() + self.assertEquals(len(keys), 1) + self.assertEquals(keys[0], "foo") + + def test_contains(self): + self.assert_("foo" not in self.symtab) + self.symtab.declare("foo", None, 0) + self.assert_("foo" in self.symtab) + + def test_exception(self): + expr = Expression('+', 1, 2) + self.symtab.define_equ("foo", expr, 0) + self.assertRaises(YasmError, self.symtab.define_equ, "foo", expr, 0) + self.symtab.define_equ("bar", expr, 0) # cleared + self.assertRaises(YasmError, self.symtab.define_special, "bar", + 'global') + + def test_iters(self): + tab = self.symtab + tab.declare("foo", None, 0) + tab.declare("bar", None, 0) + tab.declare("baz", None, 0) + + # while ordering is not known, it must be consistent + self.assertEquals(list(tab.keys()), list(tab.iterkeys())) + self.assertEquals(list(tab.values()), list(tab.itervalues())) + self.assertEquals(list(tab.items()), list(tab.iteritems())) + self.assertEquals(list(tab.iteritems()), zip(tab.keys(), tab.values())) + +add(TSymbolTable) + +class TSymbolAttr(TestCase): + def setUp(self): + self.symtab = SymbolTable() + self.declsym = self.symtab.declare("foo", None, 0) + + def test_visibility(self): + sym = self.symtab.declare("local1", None, 0) + self.assertEquals(sym.visibility, set()) + sym = self.symtab.declare("local2", '', 0) + self.assertEquals(sym.visibility, set()) + sym = self.symtab.declare("local3", 'local', 0) + self.assertEquals(sym.visibility, set()) + sym = self.symtab.declare("global", 'global', 0) + self.assertEquals(sym.visibility, set(['global'])) + sym = self.symtab.declare("common", 'common', 0) + self.assertEquals(sym.visibility, set(['common'])) + sym = self.symtab.declare("extern", 'extern', 0) + self.assertEquals(sym.visibility, set(['extern'])) + sym = self.symtab.declare("dlocal", 'dlocal', 0) + self.assertEquals(sym.visibility, set(['dlocal'])) + + self.assertRaises(ValueError, + lambda: self.symtab.declare("extern2", 'foo', 0)) + def test_name(self): + self.assertEquals(self.declsym.name, "foo") + + def test_equ(self): + self.assertRaises(AttributeError, lambda: self.declsym.equ) + + def test_label(self): + self.assertRaises(AttributeError, lambda: self.declsym.label) + + def test_is_special(self): + self.assertEquals(self.declsym.is_special, False) + + def test_is_curpos(self): + self.assertEquals(self.declsym.is_curpos, False) + +add(TSymbolAttr) diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/value.pxi b/third-party/yasm/yasm-1.3.0/tools/python-yasm/value.pxi new file mode 100644 index 0000000000..5d78c05478 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/value.pxi @@ -0,0 +1,56 @@ +# Python bindings for Yasm: Pyrex input file for value.h +# +# Copyright (C) 2006 Michael Urman, Peter Johnson +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + +cdef class Value: + cdef yasm_value value + def __cinit__(self, value=None, size=None): + cdef unsigned int sz + if size is None: + sz = 0 + else: + sz = size; + + yasm_value_initialize(&self.value, NULL, sz) + if value is None: + pass + elif isinstance(value, Expression): + yasm_value_initialize(&self.value, + yasm_expr_copy((value).expr), sz) + elif isinstance(value, Symbol): + yasm_value_init_sym(&self.value, (value).sym, sz) + else: + raise TypeError("Invalid value type '%s'" % type(value)) + + def __dealloc__(self): + yasm_value_delete(&self.value) + + def finalize(self, precbc=None): + if precbc is None: + return yasm_value_finalize(&self.value, NULL) + elif isinstance(precbc, Bytecode): + return yasm_value_finalize(&self.value, (precbc).bc) + else: + raise TypeError("Invalid precbc type '%s'" % type(precbc)) + diff --git a/third-party/yasm/yasm-1.3.0/tools/python-yasm/yasm.pyx b/third-party/yasm/yasm-1.3.0/tools/python-yasm/yasm.pyx new file mode 100644 index 0000000000..adbc734ece --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/python-yasm/yasm.pyx @@ -0,0 +1,137 @@ +# Python bindings for Yasm: Main Pyrex input file +# +# Copyright (C) 2006 Michael Urman, Peter Johnson +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. +"""Interface to the Yasm library. + +The Yasm library (aka libyasm) provides the core functionality of the Yasm +assembler. Classes in this library provide for manipulation of machine +instructions and object file constructs such as symbol tables and sections. + +Expression objects encapsulate complex expressions containing registers, +symbols, and operations such as SEG. + +Bytecode objects encapsulate data or code objects such as data, reserve, +align, or instructions. + +Section objects encapsulate an object file section, including the section +name, any Bytecode objects contained within that section, and other +information. + +""" + +cdef extern from "Python.h": + cdef object PyCObject_FromVoidPtr(void *cobj, void (*destr)(void *)) + cdef object PyCObject_FromVoidPtrAndDesc(void *cobj, void *desc, + void (*destr)(void *, void *)) + cdef int PyType_Check(object) + cdef int PyCObject_Check(object) + cdef void *PyCObject_AsVoidPtr(object) + cdef void *PyCObject_GetDesc(object) + + cdef object _PyLong_FromByteArray(unsigned char *bytes, unsigned int n, + int little_endian, int is_signed) + cdef int _PyLong_AsByteArray(object v, unsigned char *bytes, unsigned int n, + int little_endian, int is_signed) except -1 + + cdef void Py_INCREF(object o) + cdef void Py_DECREF(object o) + + cdef void PyErr_SetString(object type, char *message) + cdef object PyErr_Format(object type, char *format, ...) + +cdef extern from "stdlib.h": + cdef void *malloc(int n) + cdef void free(void *p) + +include "_yasm.pxi" + +cdef object __pass_voidp(void *obj, object forclass): + return PyCObject_FromVoidPtrAndDesc(obj, forclass, NULL) + +cdef void *__get_voidp(object obj, object forclass) except NULL: + cdef void* desc + + if not PyCObject_Check(obj): + msg = "obj %r is not a CObject" % obj + PyErr_SetString(TypeError, msg) + return NULL + + desc = PyCObject_GetDesc(obj) + + if desc != forclass: + if desc == NULL: + msg = "CObject type is not set (expecting %s)" % forclass + elif PyType_Check(desc): + msg = "CObject is for %s not %s" % (desc, forclass) + else: + msg = "CObject is incorrect (expecting %s)" % forclass + PyErr_SetString(TypeError, msg) + return NULL + + return PyCObject_AsVoidPtr(obj) + +# +# Link to associated data mechanism to keep Python references paired with +# yasm objects. +# +cdef class __assoc_data_callback: + cdef yasm_assoc_data_callback *cb + def __cinit__(self, destroy, print_): + self.cb = malloc(sizeof(yasm_assoc_data_callback)) + self.cb.destroy = PyCObject_AsVoidPtr(destroy) + #self.cb.print_ = PyCObject_AsVoidPtr(print_) + def __dealloc__(self): + free(self.cb) + + +cdef class Register: + cdef unsigned long reg + def __cinit__(self, reg): + self.reg = reg + +include "errwarn.pxi" +include "intnum.pxi" +include "floatnum.pxi" +include "expr.pxi" +include "symrec.pxi" +include "value.pxi" + +include "bytecode.pxi" + +cdef __initialize(): + BitVector_Boot() + yasm_intnum_initialize() + yasm_floatnum_initialize() + yasm_errwarn_initialize() + +def __cleanup(): + yasm_floatnum_cleanup() + yasm_intnum_cleanup() + yasm_errwarn_cleanup() + BitVector_Shutdown() + +__initialize() +import atexit +atexit.register(__cleanup) + diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/CHANGELOG b/third-party/yasm/yasm-1.3.0/tools/re2c/CHANGELOG new file mode 100644 index 0000000000..e3dfd5a831 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/CHANGELOG @@ -0,0 +1,22 @@ +re2c +---- + +YASM version +------------ +- translated to C from C++ for portability reasons + +Version 0.9.1 +------------- + +- removed rcs comments in source files + +Version 0.9 +----------- + +- redistribution based on version 0.5 +- added parentheses to assignment expressions in 'if' statements +- rearranged class members to match initialization order +- substr fix +- use array delete [] when necessary +- other minor fixes for subduing compiler warnings + diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/CMakeLists.txt b/third-party/yasm/yasm-1.3.0/tools/re2c/CMakeLists.txt new file mode 100644 index 0000000000..7125d496ac --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/CMakeLists.txt @@ -0,0 +1,11 @@ +add_executable(re2c + main.c + code.c + dfa.c + parser.c + actions.c + scanner.c + mbo_getopt.c + substr.c + translate.c + ) diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/Makefile.inc b/third-party/yasm/yasm-1.3.0/tools/re2c/Makefile.inc new file mode 100644 index 0000000000..edb89a5d5e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/Makefile.inc @@ -0,0 +1,93 @@ +# These utility programs have to be built for BUILD host in cross-build. +# This makes things rather non-standard automake + +noinst_PROGRAMS += re2c + +re2c_SOURCES = +EXTRA_DIST += tools/re2c/main.c +EXTRA_DIST += tools/re2c/basics.h +EXTRA_DIST += tools/re2c/globals.h +EXTRA_DIST += tools/re2c/ins.h +EXTRA_DIST += tools/re2c/re.h +EXTRA_DIST += tools/re2c/token.h +EXTRA_DIST += tools/re2c/code.c +EXTRA_DIST += tools/re2c/dfa.h +EXTRA_DIST += tools/re2c/dfa.c +EXTRA_DIST += tools/re2c/parse.h +EXTRA_DIST += tools/re2c/parser.h +EXTRA_DIST += tools/re2c/parser.c +EXTRA_DIST += tools/re2c/actions.c +EXTRA_DIST += tools/re2c/scanner.h +EXTRA_DIST += tools/re2c/scanner.c +EXTRA_DIST += tools/re2c/mbo_getopt.h +EXTRA_DIST += tools/re2c/mbo_getopt.c +EXTRA_DIST += tools/re2c/substr.h +EXTRA_DIST += tools/re2c/substr.c +EXTRA_DIST += tools/re2c/translate.c +re2c_LDADD = re2c-main.$(OBJEXT) +re2c_LDADD += re2c-code.$(OBJEXT) +re2c_LDADD += re2c-dfa.$(OBJEXT) +re2c_LDADD += re2c-parser.$(OBJEXT) +re2c_LDADD += re2c-actions.$(OBJEXT) +re2c_LDADD += re2c-scanner.$(OBJEXT) +re2c_LDADD += re2c-mbo_getopt.$(OBJEXT) +re2c_LDADD += re2c-substr.$(OBJEXT) +re2c_LDADD += re2c-translate.$(OBJEXT) +re2c_LINK = $(CCLD_FOR_BUILD) -o $@ + +re2c-main.$(OBJEXT): tools/re2c/main.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/re2c/main.c || echo '$(srcdir)/'`tools/re2c/main.c + +re2c-code.$(OBJEXT): tools/re2c/code.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/re2c/code.c || echo '$(srcdir)/'`tools/re2c/code.c + +re2c-dfa.$(OBJEXT): tools/re2c/dfa.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/re2c/dfa.c || echo '$(srcdir)/'`tools/re2c/dfa.c + +re2c-parser.$(OBJEXT): tools/re2c/parser.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/re2c/parser.c || echo '$(srcdir)/'`tools/re2c/parser.c + +re2c-actions.$(OBJEXT): tools/re2c/actions.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/re2c/actions.c || echo '$(srcdir)/'`tools/re2c/actions.c + +re2c-scanner.$(OBJEXT): tools/re2c/scanner.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/re2c/scanner.c || echo '$(srcdir)/'`tools/re2c/scanner.c + +re2c-mbo_getopt.$(OBJEXT): tools/re2c/mbo_getopt.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/re2c/mbo_getopt.c || echo '$(srcdir)/'`tools/re2c/mbo_getopt.c + +re2c-substr.$(OBJEXT): tools/re2c/substr.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/re2c/substr.c || echo '$(srcdir)/'`tools/re2c/substr.c + +re2c-translate.$(OBJEXT): tools/re2c/translate.c + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) \ + -c -o $@ `test -f tools/re2c/translate.c || echo '$(srcdir)/'`tools/re2c/translate.c + +EXTRA_DIST += tools/re2c/CHANGELOG +EXTRA_DIST += tools/re2c/NO_WARRANTY +EXTRA_DIST += tools/re2c/README +EXTRA_DIST += tools/re2c/scanner.re +EXTRA_DIST += tools/re2c/re2c.1 +EXTRA_DIST += tools/re2c/bootstrap/scanner.c +EXTRA_DIST += tools/re2c/doc/loplas.ps.gz +EXTRA_DIST += tools/re2c/doc/sample.bib +EXTRA_DIST += tools/re2c/examples/basemmap.c +EXTRA_DIST += tools/re2c/examples/c.re +EXTRA_DIST += tools/re2c/examples/cmmap.re +EXTRA_DIST += tools/re2c/examples/cnokw.re +EXTRA_DIST += tools/re2c/examples/cunroll.re +EXTRA_DIST += tools/re2c/examples/modula.re +EXTRA_DIST += tools/re2c/examples/repeater.re +EXTRA_DIST += tools/re2c/examples/sample.re +EXTRA_DIST += tools/re2c/examples/simple.re +EXTRA_DIST += tools/re2c/examples/rexx/README +EXTRA_DIST += tools/re2c/examples/rexx/rexx.l +EXTRA_DIST += tools/re2c/examples/rexx/scanio.c diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/NO_WARRANTY b/third-party/yasm/yasm-1.3.0/tools/re2c/NO_WARRANTY new file mode 100644 index 0000000000..885a13d063 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/NO_WARRANTY @@ -0,0 +1,2 @@ +re2c is distributed with no warranty whatever. The author and any other +contributors take no responsibility for the consequences of its use. diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/README b/third-party/yasm/yasm-1.3.0/tools/re2c/README new file mode 100644 index 0000000000..943120fe7a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/README @@ -0,0 +1,153 @@ +re2c +---- + +Version 0.9.1 +Originally written by Peter Bumbulis (peterr@csg.uwaterloo.ca) +Currently maintained by Brian Young (bayoung@acm.org) + +The re2c distribution can be found at: + + http://www.tildeslash.org/re2c/index.html + +The source distribution is available from: + + http://www.tildeslash.org/re2c/re2c-0.9.1.tar.gz + +This distribution is a cleaned up version of the 0.5 release +maintained by me (Brian Young). Several bugs were fixed as well +as code cleanup for warning free compilation. It has been developed +and tested with egcs 1.0.2 and gcc 2.7.2.3 on Linux x86. Peter +Bumbulis' original release can be found at: + + ftp://csg.uwaterloo.ca/pub/peterr/re2c.0.5.tar.gz + +re2c is a great tool for writing fast and flexible lexers. It has +served many people well for many years and it deserves to be +maintained more actively. re2c is on the order of 2-3 times faster +than a flex based scanner, and its input model is much more +flexible. + +Patches and requests for features will be entertained. Areas of +particular interest to me are porting (a Solaris and an NT +version will be forthcoming) and wide character support. Note +that the code is already quite portable and should be buildable +on any platform with minor makefile changes. + +Peter's original version 0.5 ANNOUNCE and README follows. + +Brian + +-- + +re2c is a tool for generating C-based recognizers from regular +expressions. re2c-based scanners are efficient: for programming +languages, given similar specifications, an re2c-based scanner is +typically almost twice as fast as a flex-based scanner with little or no +increase in size (possibly a decrease on cisc architectures). Indeed, +re2c-based scanners are quite competitive with hand-crafted ones. + +Unlike flex, re2c does not generate complete scanners: the user must +supply some interface code. While this code is not bulky (about 50-100 +lines for a flex-like scanner; see the man page and examples in the +distribution) careful coding is required for efficiency (and +correctness). One advantage of this arrangement is that the generated +code is not tied to any particular input model. For example, re2c +generated code can be used to scan data from a null-byte terminated +buffer as illustrated below. + +Given the following source + + #define NULL ((char*) 0) + char *scan(char *p){ + char *q; + #define YYCTYPE char + #define YYCURSOR p + #define YYLIMIT p + #define YYMARKER q + #define YYFILL(n) + /*!re2c + [0-9]+ {return YYCURSOR;} + [\000-\377] {return NULL;} + */ + } + +re2c will generate + + /* Generated by re2c on Sat Apr 16 11:40:58 1994 */ + #line 1 "simple.re" + #define NULL ((char*) 0) + char *scan(char *p){ + char *q; + #define YYCTYPE char + #define YYCURSOR p + #define YYLIMIT p + #define YYMARKER q + #define YYFILL(n) + { + YYCTYPE yych; + unsigned int yyaccept; + goto yy0; + yy1: ++YYCURSOR; + yy0: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + if(yych <= '/') goto yy4; + if(yych >= ':') goto yy4; + yy2: yych = *++YYCURSOR; + goto yy7; + yy3: + #line 10 + {return YYCURSOR;} + yy4: yych = *++YYCURSOR; + yy5: + #line 11 + {return NULL;} + yy6: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + yy7: if(yych <= '/') goto yy3; + if(yych <= '9') goto yy6; + goto yy3; + } + #line 12 + + } + +Note that most compilers will perform dead-code elimination to remove +all YYCURSOR, YYLIMIT comparisions. + +re2c was developed for a particular project (constructing a fast REXX +scanner of all things!) and so while it has some rough edges, it should +be quite usable. More information about re2c can be found in the +(admittedly skimpy) man page; the algorithms and heuristics used are +described in an upcoming LOPLAS article (included in the distribution). +Probably the best way to find out more about re2c is to try the supplied +examples. re2c is written in C++, and is currently being developed +under Linux using gcc 2.5.8. + +Peter + +-- + +re2c is distributed with no warranty whatever. The code is certain to +contain errors. Neither the author nor any contributor takes +responsibility for any consequences of its use. + +re2c is in the public domain. The data structures and algorithms used +in re2c are all either taken from documents available to the general +public or are inventions of the author. Programs generated by re2c may +be distributed freely. re2c itself may be distributed freely, in source +or binary, unchanged or modified. Distributors may charge whatever fees +they can obtain for re2c. + +If you do make use of re2c, or incorporate it into a larger project an +acknowledgement somewhere (documentation, research report, etc.) would +be appreciated. + +Please send bug reports and feedback (including suggestions for +improving the distribution) to + + peterr@csg.uwaterloo.ca + +Include a small example and the banner from parser.y with bug reports. + diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/actions.c b/third-party/yasm/yasm-1.3.0/tools/re2c/actions.c new file mode 100644 index 0000000000..3eaade00a4 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/actions.c @@ -0,0 +1,692 @@ +#include +#include +#include +#include + +#include "tools/re2c/globals.h" +#include "tools/re2c/parse.h" +#include "tools/re2c/dfa.h" + +static Symbol *first = NULL; + +void +Symbol_init(Symbol *r, const SubStr *str) +{ + r->next = first; + Str_init(&r->name, str); + r->re = NULL; + first = r; +} + +Symbol * +Symbol_find(const SubStr *str) +{ + Symbol *sym; + for(sym = first; sym; sym = sym->next) + if(SubStr_eq(&sym->name, str)) return sym; + return Symbol_new(str); +} + +/* +void showIns(FILE *o, const Ins *i, const Ins *base){ + o.width(3); + o << &i - &base << ": "; + switch(i.i.tag){ + case CHAR: { + o << "match "; + for(const Ins *j = &(&i)[1]; j < (Ins*) i.i.link; ++j) + prtCh(o, j->c.value); + break; + } case GOTO: + o << "goto " << ((Ins*) i.i.link - &base); + break; + case FORK: + o << "fork " << ((Ins*) i.i.link - &base); + break; + case CTXT: + o << "term " << ((RuleOp*) i.i.link)->accept; + break; + case TERM: + o << "term " << ((RuleOp*) i.i.link)->accept; + break; + } + o << "\n"; +} +*/ + +static unsigned int +AltOp_fixedLength(RegExp *r) +{ + unsigned int l1 = RegExp_fixedLength(r->d.AltCatOp.exp1); + /* XXX? Should be exp2? */ + unsigned int l2 = RegExp_fixedLength(r->d.AltCatOp.exp1); + if(l1 != l2 || l1 == ~0u) + return ~0u; + return l1; +} + +static unsigned int +CatOp_fixedLength(RegExp *r) +{ + unsigned int l1, l2; + if((l1 = RegExp_fixedLength(r->d.AltCatOp.exp1)) != ~0u ) + if((l2 = RegExp_fixedLength(r->d.AltCatOp.exp2)) != ~0u) + return l1+l2; + return ~0u; +} + +unsigned int +RegExp_fixedLength(RegExp *r) +{ + switch (r->type) { + case NULLOP: + return 0; + case MATCHOP: + return 1; + case ALTOP: + return AltOp_fixedLength(r); + case CATOP: + return CatOp_fixedLength(r); + default: + return ~0u; + } + return ~0u; +} + +void +RegExp_calcSize(RegExp *re, Char *rep) +{ + Range *r; + unsigned int c; + + switch (re->type) { + case NULLOP: + re->size = 0; + break; + case MATCHOP: + re->size = 1; + for(r = re->d.match; r; r = r->next) + for(c = r->lb; c < r->ub; ++c) + if(rep[c] == c) + ++re->size; + break; + case RULEOP: + RegExp_calcSize(re->d.RuleOp.exp, rep); + RegExp_calcSize(re->d.RuleOp.ctx, rep); + re->size = re->d.RuleOp.exp->size + re->d.RuleOp.ctx->size + 1; + break; + case ALTOP: + RegExp_calcSize(re->d.AltCatOp.exp1, rep); + RegExp_calcSize(re->d.AltCatOp.exp2, rep); + re->size = re->d.AltCatOp.exp1->size + + re->d.AltCatOp.exp2->size + 2; + break; + case CATOP: + RegExp_calcSize(re->d.AltCatOp.exp1, rep); + RegExp_calcSize(re->d.AltCatOp.exp2, rep); + re->size = re->d.AltCatOp.exp1->size + re->d.AltCatOp.exp2->size; + break; + case CLOSEOP: + RegExp_calcSize(re->d.exp, rep); + re->size = re->d.exp->size + 1; + break; + case CLOSEVOP: + RegExp_calcSize(re->d.CloseVOp.exp, rep); + + if (re->d.CloseVOp.max >= 0) + re->size = (re->d.CloseVOp.exp->size * re->d.CloseVOp.min) + + ((1 + re->d.CloseVOp.exp->size) * + (re->d.CloseVOp.max - re->d.CloseVOp.min)); + else + re->size = (re->d.CloseVOp.exp->size * re->d.CloseVOp.min) + 1; + break; + } +} + +static void +MatchOp_compile(RegExp *re, Char *rep, Ins *i) +{ + Ins *j; + unsigned int bump; + Range *r; + unsigned int c; + + i->i.tag = CHAR; + i->i.link = &i[re->size]; + j = &i[1]; + bump = re->size; + for(r = re->d.match; r; r = r->next){ + for(c = r->lb; c < r->ub; ++c){ + if(rep[c] == c){ + j->c.value = c; + j->c.bump = --bump; + j++; + } + } + } +} + +static void +AltOp_compile(RegExp *re, Char *rep, Ins *i){ + Ins *j; + + i->i.tag = FORK; + j = &i[re->d.AltCatOp.exp1->size + 1]; + i->i.link = &j[1]; + RegExp_compile(re->d.AltCatOp.exp1, rep, &i[1]); + j->i.tag = GOTO; + j->i.link = &j[re->d.AltCatOp.exp2->size + 1]; + RegExp_compile(re->d.AltCatOp.exp2, rep, &j[1]); +} + +void +RegExp_compile(RegExp *re, Char *rep, Ins *i) +{ + Ins *jumppoint; + int st = 0; + + switch (re->type) { + case NULLOP: + break; + case MATCHOP: + MatchOp_compile(re, rep, i); + break; + case RULEOP: + re->d.RuleOp.ins = i; + RegExp_compile(re->d.RuleOp.exp, rep, &i[0]); + i += re->d.RuleOp.exp->size; + RegExp_compile(re->d.RuleOp.ctx, rep, &i[0]); + i += re->d.RuleOp.ctx->size; + i->i.tag = TERM; + i->i.link = re; + break; + case ALTOP: + AltOp_compile(re, rep, i); + break; + case CATOP: + RegExp_compile(re->d.AltCatOp.exp1, rep, &i[0]); + RegExp_compile(re->d.AltCatOp.exp2, rep, + &i[re->d.AltCatOp.exp1->size]); + break; + case CLOSEOP: + RegExp_compile(re->d.exp, rep, &i[0]); + i += re->d.exp->size; + i->i.tag = FORK; + i->i.link = i - re->d.exp->size; + break; + case CLOSEVOP: + jumppoint = i + ((1 + re->d.CloseVOp.exp->size) * + (re->d.CloseVOp.max - re->d.CloseVOp.min)); + for(st = re->d.CloseVOp.min; st < re->d.CloseVOp.max; st++) { + i->i.tag = FORK; + i->i.link = jumppoint; + i+=1; + RegExp_compile(re->d.CloseVOp.exp, rep, &i[0]); + i += re->d.CloseVOp.exp->size; + } + for(st = 0; st < re->d.CloseVOp.min; st++) { + RegExp_compile(re->d.CloseVOp.exp, rep, &i[0]); + i += re->d.CloseVOp.exp->size; + if(re->d.CloseVOp.max < 0 && st == 0) { + i->i.tag = FORK; + i->i.link = i - re->d.CloseVOp.exp->size; + i++; + } + } + break; + } +} + +static void +MatchOp_split(RegExp *re, CharSet *s) +{ + Range *r; + unsigned int c; + + for(r = re->d.match; r; r = r->next){ + for(c = r->lb; c < r->ub; ++c){ + CharPtn *x = s->rep[c], *a = x->nxt; + if(!a){ + if(x->card == 1) + continue; + x->nxt = a = s->freeHead; + if(!(s->freeHead = s->freeHead->nxt)) + s->freeTail = &s->freeHead; + a->nxt = NULL; + x->fix = s->fix; + s->fix = x; + } + if(--(x->card) == 0){ + *s->freeTail = x; + *(s->freeTail = &x->nxt) = NULL; + } + s->rep[c] = a; + ++(a->card); + } + } + for(; s->fix; s->fix = s->fix->fix) + if(s->fix->card) + s->fix->nxt = NULL; +} + +void +RegExp_split(RegExp *re, CharSet *s) +{ + switch (re->type) { + case NULLOP: + break; + case MATCHOP: + MatchOp_split(re, s); + break; + case RULEOP: + RegExp_split(re->d.RuleOp.exp, s); + RegExp_split(re->d.RuleOp.ctx, s); + break; + case ALTOP: + /* FALLTHROUGH */ + case CATOP: + RegExp_split(re->d.AltCatOp.exp1, s); + RegExp_split(re->d.AltCatOp.exp2, s); + break; + case CLOSEOP: + RegExp_split(re->d.exp, s); + break; + case CLOSEVOP: + RegExp_split(re->d.CloseVOp.exp, s); + break; + } +} + +void +RegExp_display(RegExp *re, FILE *o) +{ + switch (re->type) { + case NULLOP: + fputc('_', o); + break; + case MATCHOP: + Range_out(o, re->d.match); + break; + case RULEOP: + RegExp_display(re->d.RuleOp.exp, o); + fputc('/', o); + RegExp_display(re->d.RuleOp.ctx, o); + fputc(';', o); + break; + case ALTOP: + RegExp_display(re->d.AltCatOp.exp1, o); + fputc('|', o); + RegExp_display(re->d.AltCatOp.exp2, o); + break; + case CATOP: + RegExp_display(re->d.AltCatOp.exp1, o); + RegExp_display(re->d.AltCatOp.exp2, o); + break; + case CLOSEOP: + RegExp_display(re->d.exp, o); + fputc('+', o); + break; + } +} + +void +Range_out(FILE *o, const Range *r) +{ + if(!r) + return; + + if((r->ub - r->lb) == 1){ + prtCh(o, r->lb); + } else { + prtCh(o, r->lb); + fputc('-', o); + prtCh(o, r->ub-1); + } + Range_out(o, r->next); +} + +static Range *doUnion(Range *r1, Range *r2){ + Range *r, **rP = &r; + for(;;){ + Range *s; + if(r1->lb <= r2->lb){ + s = Range_new_copy(r1); + } else { + s = Range_new_copy(r2); + } + *rP = s; + rP = &s->next; + for(;;){ + if(r1->lb <= r2->lb){ + if(r1->lb > s->ub) + break; + if(r1->ub > s->ub) + s->ub = r1->ub; + if(!(r1 = r1->next)){ + unsigned int ub = 0; + for(; r2 && r2->lb <= s->ub; r2 = r2->next) + ub = r2->ub; + if(ub > s->ub) + s->ub = ub; + *rP = r2; + return r; + } + } else { + if(r2->lb > s->ub) + break; + if(r2->ub > s->ub) + s->ub = r2->ub; + if(!(r2 = r2->next)){ + unsigned int ub = 0; + for(; r1 && r1->lb <= s->ub; r1 = r1->next) + ub = r1->ub; + if(ub > s->ub) + s->ub = ub; + *rP = r1; + return r; + } + } + } + } + *rP = NULL; + return r; +} + +static Range *doDiff(Range *r1, Range *r2){ + Range *r, *s, **rP = &r; + for(; r1; r1 = r1->next){ + unsigned int lb = r1->lb; + for(; r2 && r2->ub <= r1->lb; r2 = r2->next); + for(; r2 && r2->lb < r1->ub; r2 = r2->next){ + if(lb < r2->lb){ + *rP = s = Range_new(lb, r2->lb); + rP = &s->next; + } + if((lb = r2->ub) >= r1->ub) + goto noMore; + } + *rP = s = Range_new(lb, r1->ub); + rP = &s->next; + noMore:; + } + *rP = NULL; + return r; +} + +static RegExp *merge(RegExp *m1, RegExp *m2){ + if(!m1) + return m2; + if(!m2) + return m1; + return RegExp_new_MatchOp(doUnion(m1->d.match, m2->d.match)); +} + +RegExp *mkDiff(RegExp *e1, RegExp *e2){ + RegExp *m1, *m2; + Range *r; + if(!(m1 = RegExp_isA(e1, MATCHOP))) + return NULL; + if(!(m2 = RegExp_isA(e2, MATCHOP))) + return NULL; + r = doDiff(m1->d.match, m2->d.match); + return r? RegExp_new_MatchOp(r) : RegExp_new_NullOp(); +} + +static RegExp *doAlt(RegExp *e1, RegExp *e2){ + if(!e1) + return e2; + if(!e2) + return e1; + return RegExp_new_AltOp(e1, e2); +} + +RegExp *mkAlt(RegExp *e1, RegExp *e2){ + RegExp *a; + RegExp *m1, *m2; + if((a = RegExp_isA(e1, ALTOP))){ + if((m1 = RegExp_isA(a->d.AltCatOp.exp1, MATCHOP))) + e1 = a->d.AltCatOp.exp2; + } else if((m1 = RegExp_isA(e1, MATCHOP))){ + e1 = NULL; + } + if((a = RegExp_isA(e2, ALTOP))){ + if((m2 = RegExp_isA(a->d.AltCatOp.exp1, MATCHOP))) + e2 = a->d.AltCatOp.exp2; + } else if((m2 = RegExp_isA(e2, MATCHOP))){ + e2 = NULL; + } + return doAlt(merge(m1, m2), doAlt(e1, e2)); +} + +static unsigned char unescape(SubStr *s){ + unsigned char c; + unsigned char v; + s->len--; + if((c = *s->str++) != '\\' || s->len == 0) + return xlat[c]; + s->len--; + switch(c = *s->str++){ + case 'n': + return xlat['\n']; + case 't': + return xlat['\t']; + case 'v': + return xlat['\v']; + case 'b': + return xlat['\b']; + case 'r': + return xlat['\r']; + case 'f': + return xlat['\f']; + case 'a': + return xlat['\a']; + case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': { + v = c - '0'; + for(; s->len != 0 && '0' <= (c = *s->str) && c <= '7'; s->len--, s->str++) + v = v*8 + (c - '0'); + return v; + } default: + return xlat[c]; + } +} + +static Range *getRange(SubStr *s){ + unsigned char lb = unescape(s), ub; + if(s->len < 2 || *s->str != '-'){ + ub = lb; + } else { + s->len--; s->str++; + ub = unescape(s); + if(ub < lb){ + unsigned char tmp; + tmp = lb; lb = ub; ub = tmp; + } + } + return Range_new(lb, ub+1); +} + +static RegExp *matchChar(unsigned int c){ + return RegExp_new_MatchOp(Range_new(c, c+1)); +} + +RegExp *strToRE(SubStr s){ + RegExp *re; + s.len -= 2; s.str += 1; + if(s.len == 0) + return RegExp_new_NullOp(); + re = matchChar(unescape(&s)); + while(s.len > 0) + re = RegExp_new_CatOp(re, matchChar(unescape(&s))); + return re; +} + +RegExp *strToCaseInsensitiveRE(SubStr s){ + unsigned char c; + RegExp *re, *reL, *reU; + s.len -= 2; s.str += 1; + if(s.len == 0) + return RegExp_new_NullOp(); + c = unescape(&s); + if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { + reL = matchChar(tolower(c)); + reU = matchChar(toupper(c)); + re = mkAlt(reL, reU); + } else { + re = matchChar(c); + } + while(s.len > 0) { + c = unescape(&s); + if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { + reL = matchChar(tolower(c)); + reU = matchChar(toupper(c)); + re = RegExp_new_CatOp(re, mkAlt(reL, reU)); + } else { + re = RegExp_new_CatOp(re, matchChar(c)); + } + } + return re; +} + +RegExp *ranToRE(SubStr s){ + Range *r; + s.len -= 2; s.str += 1; + if(s.len == 0) + return RegExp_new_NullOp(); + r = getRange(&s); + while(s.len > 0) + r = doUnion(r, getRange(&s)); + return RegExp_new_MatchOp(r); +} + +RegExp *invToRE(SubStr s) +{ + RegExp *any, *ran, *inv; + SubStr *ss; + + + s.len--; + s.str++; + + ss = SubStr_new("[\\000-\\377]", strlen("[\\000-\\377]")); + any = ranToRE(*ss); + free(ss); + if (s.len <= 2) + return any; + + ran = ranToRE(s); + inv = mkDiff(any, ran); + + free(ran); + free(any); + + return inv; +} + +RegExp *mkDot() +{ + SubStr *ss = SubStr_new("[\\000-\\377]", strlen("[\\000-\\377]")); + RegExp * any = ranToRE(*ss); + RegExp * ran = matchChar('\n'); + RegExp * inv = mkDiff(any, ran); + + free(ss); + free(ran); + free(any); + + return inv; +} + +RegExp * +RegExp_new_RuleOp(RegExp *e, RegExp *c, Token *t, unsigned int a) +{ + RegExp *r = malloc(sizeof(RegExp)); + r->type = RULEOP; + r->d.RuleOp.exp = e; + r->d.RuleOp.ctx = c; + r->d.RuleOp.ins = NULL; + r->d.RuleOp.accept = a; + r->d.RuleOp.code = t; + return r; +} + +static void optimize(Ins *i){ + while(!isMarked(i)){ + mark(i); + if(i->i.tag == CHAR){ + i = (Ins*) i->i.link; + } else if(i->i.tag == GOTO || i->i.tag == FORK){ + Ins *target = (Ins*) i->i.link; + optimize(target); + if(target->i.tag == GOTO) + i->i.link = target->i.link == target? i : target; + if(i->i.tag == FORK){ + Ins *follow = (Ins*) &i[1]; + optimize(follow); + if(follow->i.tag == GOTO && follow->i.link == follow){ + i->i.tag = GOTO; + } else if(i->i.link == i){ + i->i.tag = GOTO; + i->i.link = follow; + } + } + return; + } else { + ++i; + } + } +} + +void genCode(FILE *o, RegExp *re){ + CharSet cs; + unsigned int j; + Char rep[nChars]; + Ins *ins, *eoi; + DFA *dfa; + + memset(&cs, 0, sizeof(cs)); + for(j = 0; j < nChars; ++j){ + cs.rep[j] = &cs.ptn[0]; + cs.ptn[j].nxt = &cs.ptn[j+1]; + } + cs.freeHead = &cs.ptn[1]; + *(cs.freeTail = &cs.ptn[nChars-1].nxt) = NULL; + cs.ptn[0].card = nChars; + cs.ptn[0].nxt = NULL; + RegExp_split(re, &cs); +/* + for(unsigned int k = 0; k < nChars;){ + for(j = k; ++k < nChars && cs.rep[k] == cs.rep[j];); + printSpan(cerr, j, k); + cerr << "\t" << cs.rep[j] - &cs.ptn[0] << endl; + } +*/ + for(j = 0; j < nChars; ++j){ + if(!cs.rep[j]->nxt) + cs.rep[j]->nxt = &cs.ptn[j]; + rep[j] = (Char) (cs.rep[j]->nxt - &cs.ptn[0]); + } + + RegExp_calcSize(re, rep); + ins = malloc(sizeof(Ins)*(re->size+1)); + memset(ins, 0, (re->size+1)*sizeof(Ins)); + RegExp_compile(re, rep, ins); + eoi = &ins[re->size]; + eoi->i.tag = GOTO; + eoi->i.link = eoi; + + optimize(ins); + for(j = 0; j < re->size;){ + unmark(&ins[j]); + if(ins[j].i.tag == CHAR){ + j = (Ins*) ins[j].i.link - ins; + } else { + j++; + } + } + + dfa = DFA_new(ins, re->size, 0, 256, rep); + DFA_emit(dfa, o); + DFA_delete(dfa); + free(ins); +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/basics.h b/third-party/yasm/yasm-1.3.0/tools/re2c/basics.h new file mode 100644 index 0000000000..1531e759d9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/basics.h @@ -0,0 +1,14 @@ +#ifndef re2c_basics_h +#define re2c_basics_h + +#if defined(__GNUC__) && !defined(inline) +#define inline __inline__ +#endif + +typedef unsigned char byte; +typedef unsigned short word; +typedef unsigned long dword; + +#define PACKAGE_VERSION "1.0.0" + +#endif diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/bootstrap/scanner.c b/third-party/yasm/yasm-1.3.0/tools/re2c/bootstrap/scanner.c new file mode 100644 index 0000000000..fd0ca93ee0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/bootstrap/scanner.c @@ -0,0 +1,748 @@ +/* Generated by re2c 0.9.1-C on Sun Oct 9 22:15:58 2005 + */ +#line 1 "scanner.re" +#include +#include +#include "tools/re2c/scanner.h" +#include "tools/re2c/parse.h" +#include "tools/re2c/globals.h" +#include "re2c-parser.h" + +#ifndef MAX +#define MAX(a,b) (((a)>(b))?(a):(b)) +#endif + +#define BSIZE 8192 + +#define YYCTYPE unsigned char +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL(n) {cursor = fill(s, cursor);} + +#define RETURN(i) {s->cur = cursor; return i;} + +static unsigned char *fill(Scanner*, unsigned char*); + +void +Scanner_init(Scanner *s, FILE *i) +{ + s->in = i; + s->bot = s->tok = s->ptr = s->cur = s->pos = s->lim = s->top = + s->eof = NULL; + s->tchar = s->tline = 0; + s->cline = 1; +} + +static unsigned char * +fill(Scanner *s, unsigned char *cursor) +{ + if(!s->eof){ + unsigned int cnt = s->tok - s->bot; + if(cnt){ + memcpy(s->bot, s->tok, s->lim - s->tok); + s->tok = s->bot; + s->ptr -= cnt; + cursor -= cnt; + s->pos -= cnt; + s->lim -= cnt; + } + if((s->top - s->lim) < BSIZE){ + unsigned char *buf = malloc(((s->lim - s->bot) + BSIZE)); + memcpy(buf, s->tok, s->lim - s->tok); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + cursor = &buf[cursor - s->bot]; + s->pos = &buf[s->pos - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[BSIZE]; + if (s->bot) + free(s->bot); + s->bot = buf; + } + if((cnt = fread(s->lim, 1, BSIZE, s->in)) != BSIZE){ + s->eof = &s->lim[cnt]; *s->eof++ = '\0'; + } + s->lim += cnt; + } + return cursor; +} + +#line 79 "scanner.re" + + +int +Scanner_echo(Scanner *s, FILE *out) +{ + unsigned char *cursor = s->cur; + int ignore_eoc = 0; + + /* Catch EOF */ + if (s->eof && cursor == s->eof) + return 0; + + s->tok = cursor; +echo: + +#line 87 "scanner.c" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy0; + ++YYCURSOR; +yy0: + if((YYLIMIT - YYCURSOR) < 11) YYFILL(11); + yych = *YYCURSOR; + if(yych <= ')'){ + if(yych <= '\000') goto yy7; + if(yych == '\n') goto yy5; + goto yy9; + } else { + if(yych <= '*') goto yy4; + if(yych != '/') goto yy9; + goto yy2; + } +yy2: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if(yych == '*') goto yy12; + goto yy3; +yy3: +#line 117 "scanner.re" +{ goto echo; } +#line 112 "scanner.c" +yy4: yych = *++YYCURSOR; + if(yych == '/') goto yy10; + goto yy3; +yy5: yych = *++YYCURSOR; + goto yy6; +yy6: +#line 112 "scanner.re" +{ fwrite(s->tok, 1, cursor - s->tok, out); + s->tok = s->pos = cursor; s->cline++; oline++; + goto echo; } +#line 123 "scanner.c" +yy7: yych = *++YYCURSOR; + goto yy8; +yy8: +#line 115 "scanner.re" +{ fwrite(s->tok, 1, cursor - s->tok - 1, out); /* -1 so we don't write out the \0 */ + if(cursor == s->eof) { RETURN(0); } } +#line 130 "scanner.c" +yy9: yych = *++YYCURSOR; + goto yy3; +yy10: yych = *++YYCURSOR; + goto yy11; +yy11: +#line 103 "scanner.re" +{ + if (ignore_eoc) { + ignore_eoc = 0; + } else { + fwrite(s->tok, 1, cursor - s->tok, out); + } + s->tok = s->pos = cursor; + goto echo; + } +#line 146 "scanner.c" +yy12: yych = *++YYCURSOR; + if(yych == '!') goto yy14; + goto yy13; +yy13: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy3; + } +yy14: yych = *++YYCURSOR; + if(yych == 'm') goto yy15; + if(yych == 'r') goto yy16; + goto yy13; +yy15: yych = *++YYCURSOR; + if(yych == 'a') goto yy21; + goto yy13; +yy16: yych = *++YYCURSOR; + if(yych != 'e') goto yy13; + goto yy17; +yy17: yych = *++YYCURSOR; + if(yych != '2') goto yy13; + goto yy18; +yy18: yych = *++YYCURSOR; + if(yych != 'c') goto yy13; + goto yy19; +yy19: yych = *++YYCURSOR; + goto yy20; +yy20: +#line 94 "scanner.re" +{ fwrite(s->tok, 1, &cursor[-7] - s->tok, out); + s->tok = cursor; + RETURN(1); } +#line 177 "scanner.c" +yy21: yych = *++YYCURSOR; + if(yych != 'x') goto yy13; + goto yy22; +yy22: yych = *++YYCURSOR; + if(yych != ':') goto yy13; + goto yy23; +yy23: yych = *++YYCURSOR; + if(yych != 'r') goto yy13; + goto yy24; +yy24: yych = *++YYCURSOR; + if(yych != 'e') goto yy13; + goto yy25; +yy25: yych = *++YYCURSOR; + if(yych != '2') goto yy13; + goto yy26; +yy26: yych = *++YYCURSOR; + if(yych != 'c') goto yy13; + goto yy27; +yy27: yych = *++YYCURSOR; + goto yy28; +yy28: +#line 97 "scanner.re" +{ + fprintf(out, "#define YYMAXFILL %u\n", maxFill); + s->tok = s->pos = cursor; + ignore_eoc = 1; + goto echo; + } +#line 206 "scanner.c" +} +#line 118 "scanner.re" + +} + + +int +Scanner_scan(Scanner *s) +{ + unsigned char *cursor = s->cur; + unsigned int depth; + +scan: + s->tchar = cursor - s->pos; + s->tline = s->cline; + s->tok = cursor; + +#line 224 "scanner.c" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy29; + ++YYCURSOR; +yy29: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + if(yych <= '/'){ + if(yych <= '"'){ + if(yych <= '\n'){ + if(yych <= '\b') goto yy53; + if(yych <= '\t') goto yy47; + goto yy49; + } else { + if(yych == ' ') goto yy47; + if(yych <= '!') goto yy53; + goto yy37; + } + } else { + if(yych <= '*'){ + if(yych <= '&') goto yy53; + if(yych <= '\'') goto yy39; + if(yych <= ')') goto yy43; + goto yy35; + } else { + if(yych <= '+') goto yy44; + if(yych <= '-') goto yy53; + if(yych <= '.') goto yy51; + goto yy33; + } + } + } else { + if(yych <= '@'){ + if(yych <= '<'){ + if(yych == ';') goto yy43; + goto yy53; + } else { + if(yych <= '=') goto yy43; + if(yych == '?') goto yy44; + goto yy53; + } + } else { + if(yych <= '`'){ + if(yych <= 'Z') goto yy45; + if(yych <= '[') goto yy41; + if(yych <= '\\') goto yy43; + goto yy53; + } else { + if(yych <= 'z') goto yy45; + if(yych <= '{') goto yy31; + if(yych <= '|') goto yy43; + goto yy53; + } + } + } +yy31: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if(yych <= '/') goto yy32; + if(yych <= '9') goto yy84; + goto yy32; +yy32: +#line 133 "scanner.re" +{ depth = 1; + goto code; + } +#line 291 "scanner.c" +yy33: yych = *++YYCURSOR; + if(yych == '*') goto yy82; + goto yy34; +yy34: +#line 163 "scanner.re" +{ RETURN(*s->tok); } +#line 298 "scanner.c" +yy35: yych = *++YYCURSOR; + if(yych == '/') goto yy80; + goto yy36; +yy36: +#line 165 "scanner.re" +{ yylval.op = *s->tok; + RETURN(CLOSE); } +#line 306 "scanner.c" +yy37: yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if(yych != '\n') goto yy76; + goto yy38; +yy38: +#line 150 "scanner.re" +{ Scanner_fatal(s, "unterminated string constant (missing \")"); } +#line 314 "scanner.c" +yy39: yyaccept = 2; + yych = *(YYMARKER = ++YYCURSOR); + if(yych != '\n') goto yy71; + goto yy40; +yy40: +#line 151 "scanner.re" +{ Scanner_fatal(s, "unterminated string constant (missing ')"); } +#line 322 "scanner.c" +yy41: yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + if(yych == '\n') goto yy42; + if(yych == '^') goto yy62; + goto yy60; +yy42: +#line 161 "scanner.re" +{ Scanner_fatal(s, "unterminated range (missing ])"); } +#line 331 "scanner.c" +yy43: yych = *++YYCURSOR; + goto yy34; +yy44: yych = *++YYCURSOR; + goto yy36; +yy45: yych = *++YYCURSOR; + goto yy58; +yy46: +#line 180 "scanner.re" +{ SubStr substr; + s->cur = cursor; + substr = Scanner_token(s); + yylval.symbol = Symbol_find(&substr); + return ID; } +#line 345 "scanner.c" +yy47: yych = *++YYCURSOR; + goto yy56; +yy48: +#line 186 "scanner.re" +{ goto scan; } +#line 351 "scanner.c" +yy49: yych = *++YYCURSOR; + goto yy50; +yy50: +#line 188 "scanner.re" +{ if(cursor == s->eof) RETURN(0); + s->pos = cursor; s->cline++; + goto scan; + } +#line 360 "scanner.c" +yy51: yych = *++YYCURSOR; + goto yy52; +yy52: +#line 193 "scanner.re" +{ s->cur = cursor; + yylval.regexp = mkDot(); + return RANGE; + } +#line 369 "scanner.c" +yy53: yych = *++YYCURSOR; + goto yy54; +yy54: +#line 198 "scanner.re" +{ fprintf(stderr, "unexpected character: '%c'\n", *s->tok); + goto scan; + } +#line 377 "scanner.c" +yy55: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy56; +yy56: if(yych == '\t') goto yy55; + if(yych == ' ') goto yy55; + goto yy48; +yy57: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy58; +yy58: if(yych <= '@'){ + if(yych <= '/') goto yy46; + if(yych <= '9') goto yy57; + goto yy46; + } else { + if(yych <= 'Z') goto yy57; + if(yych <= '`') goto yy46; + if(yych <= 'z') goto yy57; + goto yy46; + } +yy59: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy60; +yy60: if(yych <= '['){ + if(yych != '\n') goto yy59; + goto yy61; + } else { + if(yych <= '\\') goto yy64; + if(yych <= ']') goto yy65; + goto yy59; + } +yy61: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy32; + case 1: goto yy38; + case 2: goto yy40; + case 3: goto yy42; + } +yy62: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy63; +yy63: if(yych <= '['){ + if(yych == '\n') goto yy61; + goto yy62; + } else { + if(yych <= '\\') goto yy67; + if(yych <= ']') goto yy68; + goto yy62; + } +yy64: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych == '\n') goto yy61; + goto yy59; +yy65: yych = *++YYCURSOR; + goto yy66; +yy66: +#line 157 "scanner.re" +{ s->cur = cursor; + yylval.regexp = ranToRE(Scanner_token(s)); + return RANGE; } +#line 442 "scanner.c" +yy67: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych == '\n') goto yy61; + goto yy62; +yy68: yych = *++YYCURSOR; + goto yy69; +yy69: +#line 153 "scanner.re" +{ s->cur = cursor; + yylval.regexp = invToRE(Scanner_token(s)); + return RANGE; } +#line 455 "scanner.c" +yy70: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy71; +yy71: if(yych <= '&'){ + if(yych == '\n') goto yy61; + goto yy70; + } else { + if(yych <= '\'') goto yy73; + if(yych != '\\') goto yy70; + goto yy72; + } +yy72: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych == '\n') goto yy61; + goto yy70; +yy73: yych = *++YYCURSOR; + goto yy74; +yy74: +#line 146 "scanner.re" +{ s->cur = cursor; + yylval.regexp = strToCaseInsensitiveRE(Scanner_token(s)); + return STRING; } +#line 480 "scanner.c" +yy75: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy76; +yy76: if(yych <= '!'){ + if(yych == '\n') goto yy61; + goto yy75; + } else { + if(yych <= '"') goto yy78; + if(yych != '\\') goto yy75; + goto yy77; + } +yy77: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych == '\n') goto yy61; + goto yy75; +yy78: yych = *++YYCURSOR; + goto yy79; +yy79: +#line 142 "scanner.re" +{ s->cur = cursor; + yylval.regexp = strToRE(Scanner_token(s)); + return STRING; } +#line 505 "scanner.c" +yy80: yych = *++YYCURSOR; + goto yy81; +yy81: +#line 139 "scanner.re" +{ s->tok = cursor; + RETURN(0); } +#line 512 "scanner.c" +yy82: yych = *++YYCURSOR; + goto yy83; +yy83: +#line 136 "scanner.re" +{ depth = 1; + goto comment; } +#line 519 "scanner.c" +yy84: ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + goto yy85; +yy85: if(yych <= '/'){ + if(yych == ',') goto yy88; + goto yy61; + } else { + if(yych <= '9') goto yy84; + if(yych != '}') goto yy61; + goto yy86; + } +yy86: yych = *++YYCURSOR; + goto yy87; +yy87: +#line 168 "scanner.re" +{ yylval.extop.minsize = atoi((char *)s->tok+1); + yylval.extop.maxsize = atoi((char *)s->tok+1); + RETURN(CLOSESIZE); } +#line 539 "scanner.c" +yy88: yych = *++YYCURSOR; + if(yych != '}') goto yy92; + goto yy89; +yy89: yych = *++YYCURSOR; + goto yy90; +yy90: +#line 176 "scanner.re" +{ yylval.extop.minsize = atoi((char *)s->tok+1); + yylval.extop.maxsize = -1; + RETURN(CLOSESIZE); } +#line 550 "scanner.c" +yy91: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy92; +yy92: if(yych <= '/') goto yy61; + if(yych <= '9') goto yy91; + if(yych != '}') goto yy61; + goto yy93; +yy93: yych = *++YYCURSOR; + goto yy94; +yy94: +#line 172 "scanner.re" +{ yylval.extop.minsize = atoi((char *)s->tok+1); + yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)s->tok, ',')+1)); + RETURN(CLOSESIZE); } +#line 566 "scanner.c" +} +#line 201 "scanner.re" + + +code: + +#line 573 "scanner.c" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy95; + ++YYCURSOR; +yy95: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + if(yych <= '&'){ + if(yych <= '\n'){ + if(yych <= '\t') goto yy103; + goto yy101; + } else { + if(yych == '"') goto yy105; + goto yy103; + } + } else { + if(yych <= '{'){ + if(yych <= '\'') goto yy106; + if(yych <= 'z') goto yy103; + goto yy99; + } else { + if(yych != '}') goto yy103; + goto yy97; + } + } +yy97: yych = *++YYCURSOR; + goto yy98; +yy98: +#line 205 "scanner.re" +{ if(--depth == 0){ + s->cur = cursor; + yylval.token = Token_new(Scanner_token(s), s->tline); + return CODE; + } + goto code; } +#line 610 "scanner.c" +yy99: yych = *++YYCURSOR; + goto yy100; +yy100: +#line 211 "scanner.re" +{ ++depth; + goto code; } +#line 617 "scanner.c" +yy101: yych = *++YYCURSOR; + goto yy102; +yy102: +#line 213 "scanner.re" +{ if(cursor == s->eof) Scanner_fatal(s, "missing '}'"); + s->pos = cursor; s->cline++; + goto code; + } +#line 626 "scanner.c" +yy103: yych = *++YYCURSOR; + goto yy104; +yy104: +#line 217 "scanner.re" +{ goto code; } +#line 632 "scanner.c" +yy105: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if(yych == '\n') goto yy104; + goto yy112; +yy106: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if(yych == '\n') goto yy104; + goto yy108; +yy107: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy108; +yy108: if(yych <= '&'){ + if(yych != '\n') goto yy107; + goto yy109; + } else { + if(yych <= '\'') goto yy103; + if(yych == '\\') goto yy110; + goto yy107; + } +yy109: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy104; + } +yy110: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych == '\n') goto yy109; + goto yy107; +yy111: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy112; +yy112: if(yych <= '!'){ + if(yych == '\n') goto yy109; + goto yy111; + } else { + if(yych <= '"') goto yy103; + if(yych != '\\') goto yy111; + goto yy113; + } +yy113: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych == '\n') goto yy109; + goto yy111; +} +#line 218 "scanner.re" + + +comment: + +#line 685 "scanner.c" +{ + YYCTYPE yych; + goto yy114; + ++YYCURSOR; +yy114: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + if(yych <= ')'){ + if(yych == '\n') goto yy119; + goto yy121; + } else { + if(yych <= '*') goto yy116; + if(yych == '/') goto yy118; + goto yy121; + } +yy116: yych = *++YYCURSOR; + if(yych == '/') goto yy124; + goto yy117; +yy117: +#line 232 "scanner.re" +{ goto comment; } +#line 707 "scanner.c" +yy118: yych = *++YYCURSOR; + if(yych == '*') goto yy122; + goto yy117; +yy119: yych = *++YYCURSOR; + goto yy120; +yy120: +#line 228 "scanner.re" +{ if(cursor == s->eof) RETURN(0); + s->tok = s->pos = cursor; s->cline++; + goto comment; + } +#line 719 "scanner.c" +yy121: yych = *++YYCURSOR; + goto yy117; +yy122: yych = *++YYCURSOR; + goto yy123; +yy123: +#line 226 "scanner.re" +{ ++depth; + goto comment; } +#line 728 "scanner.c" +yy124: yych = *++YYCURSOR; + goto yy125; +yy125: +#line 222 "scanner.re" +{ if(--depth == 0) + goto scan; + else + goto comment; } +#line 737 "scanner.c" +} +#line 233 "scanner.re" + +} + +void +Scanner_fatal(Scanner *s, const char *msg) +{ + fprintf(stderr, "line %d, column %d: %s\n", s->tline, s->tchar + 1, msg); + exit(1); +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/code.c b/third-party/yasm/yasm-1.3.0/tools/re2c/code.c new file mode 100644 index 0000000000..bd54baacf3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/code.c @@ -0,0 +1,969 @@ +#ifdef _WIN32 +#include +#include +#endif +#include +#include +#include +#include "tools/re2c/substr.h" +#include "tools/re2c/globals.h" +#include "tools/re2c/dfa.h" +#include "tools/re2c/parse.h" + +#ifdef _WIN32 +/* tmpfile() replacment for Windows. + * + * On Windows tmpfile() creates the file in the root directory. This + * may fail due to unsufficient privileges. + */ +static FILE * +win32_tmpfile (void) +{ + DWORD path_len; + WCHAR path_name[MAX_PATH + 1]; + WCHAR file_name[MAX_PATH + 1]; + HANDLE handle; + int fd; + FILE *fp; + + path_len = GetTempPathW (MAX_PATH, path_name); + if (path_len <= 0 || path_len >= MAX_PATH) + return NULL; + + if (GetTempFileNameW (path_name, L"ps_", 0, file_name) == 0) + return NULL; + + handle = CreateFileW (file_name, + GENERIC_READ | GENERIC_WRITE, + 0, + NULL, + CREATE_ALWAYS, + FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, + NULL); + if (handle == INVALID_HANDLE_VALUE) { + DeleteFileW (file_name); + return NULL; + } + + fd = _open_osfhandle((intptr_t) handle, 0); + if (fd < 0) { + CloseHandle (handle); + return NULL; + } + + fp = fdopen(fd, "w+b"); + if (fp == NULL) { + _close(fd); + return NULL; + } + + return fp; +} +#endif + +static void useLabel(size_t value) { + while (value >= vUsedLabelAlloc) { + vUsedLabels = realloc(vUsedLabels, vUsedLabelAlloc * 2); + if (!vUsedLabels) { + fputs("Out of memory.\n", stderr); + exit(EXIT_FAILURE); + } + memset(vUsedLabels + vUsedLabelAlloc, 0, vUsedLabelAlloc); + vUsedLabelAlloc *= 2; + } + vUsedLabels[value] = 1; +} + +/* there must be at least one span in list; all spans must cover + * same range + */ + +void Go_compact(Go *g){ + /* arrange so that adjacent spans have different targets */ + unsigned int i = 0, j; + for(j = 1; j < g->nSpans; ++j){ + if(g->span[j].to != g->span[i].to){ + ++i; g->span[i].to = g->span[j].to; + } + g->span[i].ub = g->span[j].ub; + } + g->nSpans = i + 1; +} + +void Go_unmap(Go *g, Go *base, State *x){ + Span *s = g->span, *b = base->span, *e = &b[base->nSpans]; + unsigned int lb = 0; + s->ub = 0; + s->to = NULL; + for(; b != e; ++b){ + if(b->to == x){ + if((s->ub - lb) > 1) + s->ub = b->ub; + } else { + if(b->to != s->to){ + if(s->ub){ + lb = s->ub; ++s; + } + s->to = b->to; + } + s->ub = b->ub; + } + } + s->ub = e[-1].ub; ++s; + g->nSpans = s - g->span; +} + +static void doGen(Go *g, State *s, unsigned char *bm, unsigned char m){ + Span *b = g->span, *e = &b[g->nSpans]; + unsigned int lb = 0; + for(; b < e; ++b){ + if(b->to == s) + for(; lb < b->ub; ++lb) bm[lb] |= m; + lb = b->ub; + } +} +#if 0 +static void prt(FILE *o, Go *g, State *s){ + Span *b = g->span, *e = &b[g->nSpans]; + unsigned int lb = 0; + for(; b < e; ++b){ + if(b->to == s) + printSpan(o, lb, b->ub); + lb = b->ub; + } +} +#endif +static int matches(Go *g1, State *s1, Go *g2, State *s2){ + Span *b1 = g1->span, *e1 = &b1[g1->nSpans]; + unsigned int lb1 = 0; + Span *b2 = g2->span, *e2 = &b2[g2->nSpans]; + unsigned int lb2 = 0; + for(;;){ + for(; b1 < e1 && b1->to != s1; ++b1) lb1 = b1->ub; + for(; b2 < e2 && b2->to != s2; ++b2) lb2 = b2->ub; + if(b1 == e1) return b2 == e2; + if(b2 == e2) return 0; + if(lb1 != lb2 || b1->ub != b2->ub) return 0; + ++b1; ++b2; + } +} + +typedef struct BitMap { + Go *go; + State *on; + struct BitMap *next; + unsigned int i; + unsigned char m; +} BitMap; + +static BitMap *BitMap_find_go(Go*, State*); +static BitMap *BitMap_find(State*); +static void BitMap_gen(FILE *, unsigned int, unsigned int); +/* static void BitMap_stats(void);*/ +static BitMap *BitMap_new(Go*, State*); + +static BitMap *BitMap_first = NULL; + +BitMap * +BitMap_new(Go *g, State *x) +{ + BitMap *b = malloc(sizeof(BitMap)); + b->go = g; + b->on = x; + b->next = BitMap_first; + BitMap_first = b; + return b; +} + +BitMap * +BitMap_find_go(Go *g, State *x){ + BitMap *b; + for(b = BitMap_first; b; b = b->next){ + if(matches(b->go, b->on, g, x)) + return b; + } + return BitMap_new(g, x); +} + +BitMap * +BitMap_find(State *x){ + BitMap *b; + for(b = BitMap_first; b; b = b->next){ + if(b->on == x) + return b; + } + return NULL; +} + +void BitMap_gen(FILE *o, unsigned int lb, unsigned int ub){ + BitMap *b = BitMap_first; + if(b){ + unsigned int n = ub - lb; + unsigned int i; + unsigned char *bm = malloc(sizeof(unsigned char)*n); + fputs("\tstatic unsigned char yybm[] = {", o); + for(i = 0; b; i += n){ + unsigned char m; + unsigned int j; + memset(bm, 0, n); + for(m = 0x80; b && m; b = b->next, m >>= 1){ + b->i = i; b->m = m; + doGen(b->go, b->on, bm-lb, m); + } + for(j = 0; j < n; ++j){ + if(j%8 == 0) {fputs("\n\t", o); oline++;} + fprintf(o, "%3u, ", (unsigned int) bm[j]); + } + } + fputs("\n\t};\n", o); oline+=2; + free(bm); + } +} + +#if 0 +void BitMap_stats(void){ + unsigned int n = 0; + BitMap *b; + for(b = BitMap_first; b; b = b->next){ + prt(stderr, b->go, b->on); fputs("\n", stderr); + ++n; + } + fprintf(stderr, "%u bitmaps\n", n); + BitMap_first = NULL; +} +#endif + +static void genGoTo(FILE *o, State *from, State *to, int *readCh, + const char *indent) +{ +#if 0 + if (*readCh && from->label + 1 != to->label) + { + fputs("%syych = *YYCURSOR;\n", indent, o); oline++; + *readCh = 0; + } +#endif + fprintf(o, "%sgoto yy%u;\n", indent, to->label); oline++; + useLabel(to->label); +} + +static void genIf(FILE *o, const char *cmp, unsigned int v, int *readCh) +{ +#if 0 + if (*readCh) + { + fputs("\tif((yych = *YYCURSOR) ", o); + *readCh = 0; + } else { +#endif + fputs("\tif(yych ", o); +#if 0 + } +#endif + fprintf(o, "%s '", cmp); + prtCh(o, v); + fputs("')", o); +} + +static void indent(FILE *o, unsigned int i){ + while(i-- > 0) + fputc('\t', o); +} + +static void need(FILE *o, unsigned int n, int *readCh) +{ + unsigned int fillIndex; + int hasFillIndex = (0<=vFillIndexes); + if (hasFillIndex) { + fillIndex = vFillIndexes++; + fprintf(o, "\tYYSETSTATE(%u);\n", fillIndex); + ++oline; + } + + if(n == 1) { + fputs("\tif(YYLIMIT == YYCURSOR) YYFILL(1);\n", o); oline++; + } else { + fprintf(o, "\tif((YYLIMIT - YYCURSOR) < %u) YYFILL(%u);\n", n, n); + oline++; + } + + if (hasFillIndex) { + fprintf(o, "yyFillLabel%u:\n", fillIndex); + ++oline; + } + + fputs("\tyych = *YYCURSOR;\n", o); oline++; + *readCh = 0; +} + +void +Action_emit(Action *a, FILE *o, int *readCh) +{ + int first = 1; + unsigned int i; + unsigned int back; + + switch (a->type) { + case MATCHACT: + if(a->state->link){ + fputs("\t++YYCURSOR;\n", o); + need(o, a->state->depth, readCh); +#if 0 + } else if (!Action_readAhead(a)) { + /* do not read next char if match */ + fputs("\t++YYCURSOR;\n", o); + *readCh = 1; +#endif + } else { + fputs("\tyych = *++YYCURSOR;\n", o); + *readCh = 0; + } + oline++; + break; + case ENTERACT: + if(a->state->link){ + fputs("\t++YYCURSOR;\n", o); + fprintf(o, "yy%u:\n", a->d.label); oline+=2; + need(o, a->state->depth, readCh); + } else { + /* we shouldn't need 'rule-following' protection here */ + fputs("\tyych = *++YYCURSOR;\n", o); + fprintf(o, "yy%u:\n", a->d.label); oline+=2; + *readCh = 0; + } + break; + case SAVEMATCHACT: + if (bUsedYYAccept) { + fprintf(o, "\tyyaccept = %u;\n", a->d.selector); + oline++; + } + if(a->state->link){ + fputs("\tYYMARKER = ++YYCURSOR;\n", o); oline++; + need(o, a->state->depth, readCh); + } else { + fputs("\tyych = *(YYMARKER = ++YYCURSOR);\n", o); oline++; + *readCh = 0; + } + break; + case MOVEACT: + break; + case ACCEPTACT: + for(i = 0; i < a->d.Accept.nRules; ++i) + if(a->d.Accept.saves[i] != ~0u){ + if(first){ + first = 0; + bUsedYYAccept = 1; + fputs("\tYYCURSOR = YYMARKER;\n", o); + fputs("\tswitch(yyaccept){\n", o); oline+=2; + } + fprintf(o, "\tcase %u:", a->d.Accept.saves[i]); + genGoTo(o, a->state, a->d.Accept.rules[i], readCh, "\t"); + } + if(!first) { + fputs("\t}\n", o); oline++; + } + break; + case RULEACT: + back = RegExp_fixedLength(a->d.rule->d.RuleOp.ctx); + if(back != ~0u && back > 0u) + fprintf(o, "\tYYCURSOR -= %u;", back); + fprintf(o, "\n"); oline++; + line_source(o, a->d.rule->d.RuleOp.code->line); + SubStr_out(&a->d.rule->d.RuleOp.code->text, o); + fprintf(o, "\n"); oline++; + if (!iFlag) + fprintf(o, "#line %u \"%s\"\n", oline++, outputFileName); + break; + } +} + +Action * +Action_new_Accept(State *x, unsigned int n, unsigned int *s, State **r) +{ + Action *a = malloc(sizeof(Action)); + a->type = ACCEPTACT; + a->state = x; + a->d.Accept.nRules = n; + a->d.Accept.saves = s; + a->d.Accept.rules = r; + x->action = a; + return a; +} + +static void doLinear(FILE *o, unsigned int i, Span *s, unsigned int n, + State *from, State *next, int *readCh){ + for(;;){ + State *bg = s[0].to; + while(n >= 3 && s[2].to == bg && (s[1].ub - s[0].ub) == 1){ + if(s[1].to == next && n == 3){ + indent(o, i); + genIf(o, "!=", s[0].ub, readCh); + genGoTo(o, from, bg, readCh, "\t"); + indent(o, i); + genGoTo(o, from, next, readCh, "\t"); + return; + } else { + indent(o, i); + genIf(o, "==", s[0].ub, readCh); + genGoTo(o, from, s[1].to, readCh, "\t"); + } + n -= 2; s += 2; + } + if(n == 1){ + indent(o, i); + genGoTo(o, from, s[0].to, readCh, "\t"); + return; + } else if(n == 2 && bg == next){ + indent(o, i); + genIf(o, ">=", s[0].ub, readCh); + genGoTo(o, from, s[1].to, readCh, "\t"); + indent(o, i); + genGoTo(o, from, next, readCh, "\t"); + return; + } else { + indent(o, i); + genIf(o, "<=", s[0].ub - 1, readCh); + genGoTo(o, from, bg, readCh, "\t"); + n -= 1; s += 1; + } + } + indent(o, i); + genGoTo(o, from, next, readCh, "\t"); +} + +void +Go_genLinear(Go *g, FILE *o, State *from, State *next, int *readCh){ + doLinear(o, 0, g->span, g->nSpans, from, next, readCh); +} + +static void genCases(FILE *o, unsigned int lb, Span *s){ + if(lb < s->ub){ + for(;;){ + fputs("\tcase '", o); prtCh(o, lb); fputs("':", o); + if(++lb == s->ub) + break; + fputs("\n", o); oline++; + } + } +} + +void +Go_genSwitch(Go *g, FILE *o, State *from, State *next, int *readCh){ + if(g->nSpans <= 2){ + Go_genLinear(g, o, from, next, readCh); + } else { + State *def = g->span[g->nSpans-1].to; + Span **sP = malloc(sizeof(Span*)*(g->nSpans-1)), **r, **s, **t; + unsigned int i; + + t = &sP[0]; + for(i = 0; i < g->nSpans; ++i) + if(g->span[i].to != def) + *(t++) = &g->span[i]; + + if (dFlag) + fputs("\tYYDEBUG(-1, yych);\n", o); + +#if 0 + if (*readCh) { + fputs("\tswitch((yych = *YYCURSOR)) {\n", o); + *readCh = 0; + } else +#endif + fputs("\tswitch(yych){\n", o); + oline++; + while(t != &sP[0]){ + State *to; + r = s = &sP[0]; + if(*s == &g->span[0]) + genCases(o, 0, *s); + else + genCases(o, (*s)[-1].ub, *s); + to = (*s)->to; + while(++s < t){ + if((*s)->to == to) + genCases(o, (*s)[-1].ub, *s); + else + *(r++) = *s; + } + genGoTo(o, from, to, readCh, "\t"); + t = r; + } + fputs("\tdefault:", o); + genGoTo(o, from, def, readCh, "\t"); + fputs("\t}\n", o); oline++; + + free(sP); + } +} + +static void doBinary(FILE *o, unsigned int i, Span *s, unsigned int n, + State *from, State *next, int *readCh){ + if(n <= 4){ + doLinear(o, i, s, n, from, next, readCh); + } else { + unsigned int h = n/2; + indent(o, i); + genIf(o, "<=", s[h-1].ub - 1, readCh); + fputs("{\n", o); oline++; + doBinary(o, i+1, &s[0], h, from, next, readCh); + indent(o, i); fputs("\t} else {\n", o); oline++; + doBinary(o, i+1, &s[h], n - h, from, next, readCh); + indent(o, i); fputs("\t}\n", o); oline++; + } +} + +void +Go_genBinary(Go *g, FILE *o, State *from, State *next, int *readCh){ + doBinary(o, 0, g->span, g->nSpans, from, next, readCh); +} + +void +Go_genBase(Go *g, FILE *o, State *from, State *next, int *readCh){ + if(g->nSpans == 0) + return; + if(!sFlag){ + Go_genSwitch(g, o, from, next, readCh); + return; + } + if(g->nSpans > 8){ + Span *bot = &g->span[0], *top = &g->span[g->nSpans-1]; + unsigned int util; + if(bot[0].to == top[0].to){ + util = (top[-1].ub - bot[0].ub)/(g->nSpans - 2); + } else { + if(bot[0].ub > (top[0].ub - top[-1].ub)){ + util = (top[0].ub - bot[0].ub)/(g->nSpans - 1); + } else { + util = top[-1].ub/(g->nSpans - 1); + } + } + if(util <= 2){ + Go_genSwitch(g, o, from, next, readCh); + return; + } + } + if(g->nSpans > 5){ + Go_genBinary(g, o, from, next, readCh); + } else { + Go_genLinear(g, o, from, next, readCh); + } +} + +void +Go_genGoto(Go *g, FILE *o, State *from, State *next, int *readCh){ + unsigned int i; + if(bFlag){ + for(i = 0; i < g->nSpans; ++i){ + State *to = g->span[i].to; + if(to && to->isBase){ + BitMap *b = BitMap_find(to); + if(b && matches(b->go, b->on, g, to)){ + Go go; + go.span = malloc(sizeof(Span)*g->nSpans); + Go_unmap(&go, g, to); + fprintf(o, "\tif(yybm[%u+", b->i); +#if 0 + if (*readCh) + fputs("(yych = *YYCURSOR)", o); + else +#endif + fputs("yych", o); + fprintf(o, "] & %u) {\n", (unsigned int) b->m); oline++; + genGoTo(o, from, to, readCh, "\t\t"); + fputs("\t}\n", o); oline++; + Go_genBase(&go, o, from, next, readCh); + free(go.span); + return; + } + } + } + } + Go_genBase(g, o, from, next, readCh); +} + +void State_emit(State *s, FILE *o, int *readCh){ + if (vUsedLabels[s->label]) + fprintf(o, "yy%u:", s->label); + if (dFlag) + fprintf(o, "\n\tYYDEBUG(%u, *YYCURSOR);\n", s->label); + Action_emit(s->action, o, readCh); +} + +static unsigned int merge(Span *x0, State *fg, State *bg){ + Span *x = x0, *f = fg->go.span, *b = bg->go.span; + unsigned int nf = fg->go.nSpans, nb = bg->go.nSpans; + State *prev = NULL, *to; + /* NB: we assume both spans are for same range */ + for(;;){ + if(f->ub == b->ub){ + to = f->to == b->to? bg : f->to; + if(to == prev){ + --x; + } else { + x->to = prev = to; + } + x->ub = f->ub; + ++x; ++f; --nf; ++b; --nb; + if(nf == 0 && nb == 0) + return x - x0; + } + while(f->ub < b->ub){ + to = f->to == b->to? bg : f->to; + if(to == prev){ + --x; + } else { + x->to = prev = to; + } + x->ub = f->ub; + ++x; ++f; --nf; + } + while(b->ub < f->ub){ + to = b->to == f->to? bg : f->to; + if(to == prev){ + --x; + } else { + x->to = prev = to; + } + x->ub = b->ub; + ++x; ++b; --nb; + } + } +} + +const unsigned int cInfinity = ~0; + +typedef struct SCC { + State **top, **stk; +} SCC; + +static void SCC_init(SCC*, unsigned int); +static SCC *SCC_new(unsigned int); +static void SCC_destroy(SCC*); +static void SCC_delete(SCC*); +static void SCC_traverse(SCC*, State*); + +static void +SCC_init(SCC *s, unsigned int size) +{ + s->top = s->stk = malloc(sizeof(State*)*size); +} + +static SCC * +SCC_new(unsigned int size){ + SCC *s = malloc(sizeof(SCC)); + s->top = s->stk = malloc(sizeof(State*)*size); + return s; +} + +static void +SCC_destroy(SCC *s){ + free(s->stk); +} + +static void +SCC_delete(SCC *s){ + free(s->stk); + free(s); +} + +static void SCC_traverse(SCC *s, State *x){ + unsigned int k, i; + + *s->top = x; + k = ++s->top - s->stk; + x->depth = k; + for(i = 0; i < x->go.nSpans; ++i){ + State *y = x->go.span[i].to; + if(y){ + if(y->depth == 0) + SCC_traverse(s, y); + if(y->depth < x->depth) + x->depth = y->depth; + } + } + if(x->depth == k) + do { + (*--s->top)->depth = cInfinity; + (*s->top)->link = x; + } while(*s->top != x); +} + +static unsigned int maxDist(State *s){ + unsigned int mm = 0, i; + for(i = 0; i < s->go.nSpans; ++i){ + State *t = s->go.span[i].to; + if(t){ + unsigned int m = 1; + if(!t->link) { + if (t->depth == -1) + t->depth = maxDist(t); + m += t->depth; + } + if(m > mm) + mm = m; + } + } + return mm; +} + +static void calcDepth(State *head){ + State *t, *s; + for(s = head; s; s = s->next){ + if(s->link == s){ + unsigned int i; + for(i = 0; i < s->go.nSpans; ++i){ + t = s->go.span[i].to; + if(t && t->link == s) + goto inSCC; + } + s->link = NULL; + } else { + inSCC: + s->depth = maxDist(s); + } + } +} + +void DFA_findSCCs(DFA *d){ + SCC scc; + State *s; + + SCC_init(&scc, d->nStates); + for(s = d->head; s; s = s->next){ + s->depth = 0; + s->link = NULL; + } + + for(s = d->head; s; s = s->next) + if(!s->depth) + SCC_traverse(&scc, s); + + calcDepth(d->head); + + SCC_destroy(&scc); +} + +void DFA_split(DFA *d, State *s){ + State *move = State_new(); + Action_new_Move(move); + DFA_addState(d, &s->next, move); + move->link = s->link; + move->rule = s->rule; + move->go = s->go; + s->rule = NULL; + s->go.nSpans = 1; + s->go.span = malloc(sizeof(Span)); + s->go.span[0].ub = d->ubChar; + s->go.span[0].to = move; +} + +void DFA_emit(DFA *d, FILE *o){ + static unsigned int label = 0; + State *s; + unsigned int i, bitmap_brace = 0; + unsigned int nRules = 0; + unsigned int nSaves = 0; + unsigned int *saves; + unsigned int nOrgOline; + State **rules; + State *accept = NULL; + Span *span; + FILE *tmpo; + int hasFillLabels; + int maxFillIndexes, orgVFillIndexes; + unsigned int start_label; + + hasFillLabels = (0<=vFillIndexes); + if (hasFillLabels && label!=0) { + fputs("re2c : error : multiple /*!re2c blocks aren't supported when -f is specified\n", stderr); + exit(1); + } + + DFA_findSCCs(d); + d->head->link = d->head; + + maxFill = 1; + for(s = d->head; s; s = s->next) { + s->depth = maxDist(s); + if (maxFill < s->depth) + maxFill = s->depth; + if(s->rule && s->rule->d.RuleOp.accept >= nRules) + nRules = s->rule->d.RuleOp.accept + 1; + } + + saves = malloc(sizeof(unsigned int)*nRules); + memset(saves, ~0, (nRules)*sizeof(unsigned int)); + + /* mark backtracking points */ + for(s = d->head; s; s = s->next){ + RegExp *ignore = NULL;/*RuleOp*/ + if(s->rule){ + for(i = 0; i < s->go.nSpans; ++i) + if(s->go.span[i].to && !s->go.span[i].to->rule){ + free(s->action); + if(saves[s->rule->d.RuleOp.accept] == ~0u) + saves[s->rule->d.RuleOp.accept] = nSaves++; + Action_new_Save(s, saves[s->rule->d.RuleOp.accept]); + continue; + } + ignore = s->rule; + } + } + + /* insert actions */ + rules = malloc(sizeof(State*)*nRules); + memset(rules, 0, (nRules)*sizeof(State*)); + for(s = d->head; s; s = s->next){ + State *ow; + if(!s->rule){ + ow = accept; + } else { + if(!rules[s->rule->d.RuleOp.accept]){ + State *n = State_new(); + Action_new_Rule(n, s->rule); + rules[s->rule->d.RuleOp.accept] = n; + DFA_addState(d, &s->next, n); + } + ow = rules[s->rule->d.RuleOp.accept]; + } + for(i = 0; i < s->go.nSpans; ++i) + if(!s->go.span[i].to){ + if(!ow){ + ow = accept = State_new(); + Action_new_Accept(accept, nRules, saves, rules); + DFA_addState(d, &s->next, accept); + } + s->go.span[i].to = ow; + } + } + + /* split ``base'' states into two parts */ + for(s = d->head; s; s = s->next){ + s->isBase = 0; + if(s->link){ + for(i = 0; i < s->go.nSpans; ++i){ + if(s->go.span[i].to == s){ + s->isBase = 1; + DFA_split(d, s); + if(bFlag) + BitMap_find_go(&s->next->go, s); + s = s->next; + break; + } + } + } + } + + /* find ``base'' state, if possible */ + span = malloc(sizeof(Span)*(d->ubChar - d->lbChar)); + for(s = d->head; s; s = s->next){ + if(!s->link){ + for(i = 0; i < s->go.nSpans; ++i){ + State *to = s->go.span[i].to; + if(to && to->isBase){ + unsigned int nSpans; + to = to->go.span[0].to; + nSpans = merge(span, s, to); + if(nSpans < s->go.nSpans){ + free(s->go.span); + s->go.nSpans = nSpans; + s->go.span = malloc(sizeof(Span)*nSpans); + memcpy(s->go.span, span, nSpans*sizeof(Span)); + } + break; + } + } + } + } + free(span); + + free(d->head->action); + + if(bFlag) { + fputs("{\n", o); + oline++; + bitmap_brace = 1; + BitMap_gen(o, d->lbChar, d->ubChar); + } + + bUsedYYAccept = 0; + + start_label = label; + + Action_new_Enter(d->head, label++); + + for(s = d->head; s; s = s->next) + s->label = label++; + + nOrgOline = oline; + maxFillIndexes = vFillIndexes; + orgVFillIndexes = vFillIndexes; +#ifdef _WIN32 + tmpo = win32_tmpfile(); +#else + tmpo = tmpfile(); +#endif + for(s = d->head; s; s = s->next){ + int readCh = 0; + State_emit(s, tmpo, &readCh); + Go_genGoto(&s->go, tmpo, s, s->next, &readCh); + } + fclose(tmpo); + maxFillIndexes = vFillIndexes; + vFillIndexes = orgVFillIndexes; + oline = nOrgOline; + + fputs("\n", o); + oline++; + if (!iFlag) + fprintf(o, "#line %u \"%s\"\n", oline++, outputFileName); + + if (!hasFillLabels) { + fputs("{\n\tYYCTYPE yych;\n", o); + oline += 2; + if (bUsedYYAccept) { + fputs("\tunsigned int yyaccept;\n", o); + oline++; + } + } else { + fputs("{\n\n", o); + oline += 2; + } + + if (!hasFillLabels) { + fprintf(o, "\tgoto yy%u;\n", start_label); + oline++; + useLabel(label); + } else { + int i; + fputs("\tswitch(YYGETSTATE()) {\n", o); + fputs("\t\tcase -1: goto yy0;\n", o); + + for (i=0; ihead; s; s = s->next){ + int readCh = 0; + State_emit(s, o, &readCh); + Go_genGoto(&s->go, o, s, s->next, &readCh); + } + fputs("}\n", o); oline++; + if (bitmap_brace) { + fputs("}\n", o); + oline++; + } + + BitMap_first = NULL; + + free(saves); + free(rules); +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/dfa.c b/third-party/yasm/yasm-1.3.0/tools/re2c/dfa.c new file mode 100644 index 0000000000..16509de2a9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/dfa.c @@ -0,0 +1,253 @@ +#include +#include +#include +#include "tools/re2c/globals.h" +#include "tools/re2c/substr.h" +#include "tools/re2c/dfa.h" + +#define octCh(c) ('0' + c%8) + +void prtCh(FILE *o, unsigned char c){ + unsigned char oc = talx[c]; + switch(oc){ + case '\'': fputs("\\'", o); break; + case '\n': fputs("\\n", o); break; + case '\t': fputs("\\t", o); break; + case '\v': fputs("\\v", o); break; + case '\b': fputs("\\b", o); break; + case '\r': fputs("\\r", o); break; + case '\f': fputs("\\f", o); break; + case '\a': fputs("\\a", o); break; + case '\\': fputs("\\\\", o); break; + default: + if(isprint(oc)) + fputc(oc, o); + else + fprintf(o, "\\%c%c%c", octCh(c/64), octCh(c/8), octCh(c)); + } +} + +void printSpan(FILE *o, unsigned int lb, unsigned int ub){ + if(lb > ub) + fputc('*', o); + fputc('[', o); + if((ub - lb) == 1){ + prtCh(o, lb); + } else { + prtCh(o, lb); + fputc('-', o); + prtCh(o, ub-1); + } + fputc(']', o); +} + +unsigned int +Span_show(Span *s, FILE *o, unsigned int lb) +{ + if(s->to){ + printSpan(o, lb, s->ub); + fprintf(o, " %u; ", s->to->label); + } + return s->ub; +} + +void +State_out(FILE *o, const State *s){ + unsigned int lb, i; + fprintf(o, "state %u", s->label); + if(s->rule) + fprintf(o, " accepts %u", s->rule->d.RuleOp.accept); + fputs("\n", o); oline++; + lb = 0; + for(i = 0; i < s->go.nSpans; ++i) + lb = Span_show(&s->go.span[i], o, lb); +} + +void +DFA_out(FILE *o, const DFA *dfa){ + State *s; + for(s = dfa->head; s; s = s->next) { + State_out(o, s); + fputs("\n\n", o); oline+=2; + } +} + +State * +State_new(void) +{ + State *s = malloc(sizeof(State)); + s->label = 0; + s->rule = NULL; + s->next = NULL; + s->link = NULL; + s->depth = 0; + s->kCount = 0; + s->kernel = NULL; + s->isBase = 0; + s->action = NULL; + s->go.nSpans = 0; + s->go.span = NULL; + return s; +} + +void +State_delete(State *s) +{ + if (s->kernel) + free(s->kernel); + if (s->go.span) + free(s->go.span); + free(s); +} + +static Ins **closure(Ins **cP, Ins *i){ + while(!isMarked(i)){ + mark(i); + *(cP++) = i; + if(i->i.tag == FORK){ + cP = closure(cP, i + 1); + i = (Ins*) i->i.link; + } else if(i->i.tag == GOTO){ + i = (Ins*) i->i.link; + } else + break; + } + return cP; +} + +typedef struct GoTo { + Char ch; + void *to; +} GoTo; + +DFA * +DFA_new(Ins *ins, unsigned int ni, unsigned int lb, unsigned int ub, Char *rep) +{ + DFA *d = malloc(sizeof(DFA)); + Ins **work = malloc(sizeof(Ins*)*(ni+1)); + unsigned int nc = ub - lb; + GoTo *goTo = malloc(sizeof(GoTo)*nc); + Span *span = malloc(sizeof(Span)*nc); + + d->lbChar = lb; + d->ubChar = ub; + memset((char*) goTo, 0, nc*sizeof(GoTo)); + d->tail = &d->head; + d->head = NULL; + d->nStates = 0; + d->toDo = NULL; + DFA_findState(d, work, closure(work, &ins[0]) - work); + while(d->toDo){ + State *s = d->toDo; + + Ins **cP, **iP, *i; + unsigned int nGoTos = 0; + unsigned int j; + + d->toDo = s->link; + s->rule = NULL; + for(iP = s->kernel; (i = *iP); ++iP){ + if(i->i.tag == CHAR){ + Ins *j2; + for(j2 = i + 1; j2 < (Ins*) i->i.link; ++j2){ + if(!(j2->c.link = goTo[j2->c.value - lb].to)) + goTo[nGoTos++].ch = j2->c.value; + goTo[j2->c.value - lb].to = j2; + } + } else if(i->i.tag == TERM){ + if(!s->rule || ((RegExp *)i->i.link)->d.RuleOp.accept < s->rule->d.RuleOp.accept) + s->rule = (RegExp *)i->i.link; + } + } + + for(j = 0; j < nGoTos; ++j){ + GoTo *go = &goTo[goTo[j].ch - lb]; + i = (Ins*) go->to; + for(cP = work; i; i = (Ins*) i->c.link) + cP = closure(cP, i + i->c.bump); + go->to = DFA_findState(d, work, cP - work); + } + + s->go.nSpans = 0; + for(j = 0; j < nc;){ + State *to = (State*) goTo[rep[j]].to; + while(++j < nc && goTo[rep[j]].to == to); + span[s->go.nSpans].ub = lb + j; + span[s->go.nSpans].to = to; + s->go.nSpans++; + } + + for(j = nGoTos; j-- > 0;) + goTo[goTo[j].ch - lb].to = NULL; + + s->go.span = malloc(sizeof(Span)*s->go.nSpans); + memcpy((char*) s->go.span, (char*) span, s->go.nSpans*sizeof(Span)); + + Action_new_Match(s); + + } + free(work); + free(goTo); + free(span); + + return d; +} + +void +DFA_delete(DFA *d){ + State *s; + while((s = d->head)){ + d->head = s->next; + State_delete(s); + } +} + +void DFA_addState(DFA *d, State **a, State *s){ + s->label = d->nStates++; + s->next = *a; + *a = s; + if(a == d->tail) + d->tail = &s->next; +} + +State *DFA_findState(DFA *d, Ins **kernel, unsigned int kCount){ + Ins **cP, **iP, *i; + State *s; + + kernel[kCount] = NULL; + + cP = kernel; + for(iP = kernel; (i = *iP); ++iP){ + if(i->i.tag == CHAR || i->i.tag == TERM){ + *cP++ = i; + } else { + unmark(i); + } + } + kCount = cP - kernel; + kernel[kCount] = NULL; + + for(s = d->head; s; s = s->next){ + if(s->kCount == kCount){ + for(iP = s->kernel; (i = *iP); ++iP) + if(!isMarked(i)) + goto nextState; + goto unmarkAll; + } + nextState:; + } + + s = State_new(); + DFA_addState(d, d->tail, s); + s->kCount = kCount; + s->kernel = malloc(sizeof(Ins*)*(kCount+1)); + memcpy(s->kernel, kernel, (kCount+1)*sizeof(Ins*)); + s->link = d->toDo; + d->toDo = s; + +unmarkAll: + for(iP = kernel; (i = *iP); ++iP) + unmark(i); + + return s; +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/dfa.h b/third-party/yasm/yasm-1.3.0/tools/re2c/dfa.h new file mode 100644 index 0000000000..da4d673635 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/dfa.h @@ -0,0 +1,173 @@ +#ifndef re2c_dfa_h +#define re2c_dfa_h + +#include +#include "tools/re2c/re.h" + +extern void prtCh(FILE *, unsigned char); +extern void printSpan(FILE *, unsigned int, unsigned int); + +struct DFA; +struct State; + +typedef enum { + MATCHACT = 1, + ENTERACT, + SAVEMATCHACT, + MOVEACT, + ACCEPTACT, + RULEACT +} ActionType; + +typedef struct Action { + struct State *state; + ActionType type; + union { + /* data for Enter */ + unsigned int label; + /* data for SaveMatch */ + unsigned int selector; + /* data for Accept */ + struct { + unsigned int nRules; + unsigned int *saves; + struct State **rules; + } Accept; + /* data for Rule */ + RegExp *rule; /* RuleOp */ + } d; +} Action; + +void Action_emit(Action*, FILE *, int *); + +typedef struct Span { + unsigned int ub; + struct State *to; +} Span; + +unsigned int Span_show(Span*, FILE *, unsigned int); + +typedef struct Go { + unsigned int nSpans; + Span *span; +} Go; + +typedef struct State { + unsigned int label; + RegExp *rule; /* RuleOp */ + struct State *next; + struct State *link; + unsigned int depth; /* for finding SCCs */ + unsigned int kCount; + Ins **kernel; + unsigned int isBase:1; + Go go; + Action *action; +} State; + +void Go_genGoto(Go*, FILE *, State*, State*, int*); +void Go_genBase(Go*, FILE *, State*, State*, int*); +void Go_genLinear(Go*, FILE *, State*, State*, int*); +void Go_genBinary(Go*, FILE *, State*, State*, int*); +void Go_genSwitch(Go*, FILE *, State*, State*, int*); +void Go_compact(Go*); +void Go_unmap(Go*, Go*, State*); + +State *State_new(void); +void State_delete(State*); +void State_emit(State*, FILE *, int *); +void State_out(FILE *, const State*); + +typedef struct DFA { + unsigned int lbChar; + unsigned int ubChar; + unsigned int nStates; + State *head, **tail; + State *toDo; +} DFA; + +DFA *DFA_new(Ins*, unsigned int, unsigned int, unsigned int, Char*); +void DFA_delete(DFA*); +void DFA_addState(DFA*, State**, State*); +State *DFA_findState(DFA*, Ins**, unsigned int); +void DFA_split(DFA*, State*); + +void DFA_findSCCs(DFA*); +void DFA_emit(DFA*, FILE *); +void DFA_out(FILE *, const DFA*); + +static Action * +Action_new_Match(State *s) +{ + Action *a = malloc(sizeof(Action)); + a->type = MATCHACT; + a->state = s; + s->action = a; + return a; +} + +static Action * +Action_new_Enter(State *s, unsigned int l) +{ + Action *a = malloc(sizeof(Action)); + a->type = ENTERACT; + a->state = s; + a->d.label = l; + s->action = a; + return a; +} + +static Action * +Action_new_Save(State *s, unsigned int i) +{ + Action *a = malloc(sizeof(Action)); + a->type = SAVEMATCHACT; + a->state = s; + a->d.selector = i; + s->action = a; + return a; +} + +static Action * +Action_new_Move(State *s) +{ + Action *a = malloc(sizeof(Action)); + a->type = MOVEACT; + a->state = s; + s->action = a; + return a; +} + +Action *Action_new_Accept(State*, unsigned int, unsigned int*, State**); + +static Action * +Action_new_Rule(State *s, RegExp *r) /* RuleOp */ +{ + Action *a = malloc(sizeof(Action)); + a->type = RULEACT; + a->state = s; + a->d.rule = r; + s->action = a; + return a; +} + +static int +Action_isRule(Action *a) +{ + return a->type == RULEACT; +} + +static int +Action_isMatch(Action *a) +{ + return a->type == MATCHACT; +} + +static int +Action_readAhead(Action *a) +{ + return !Action_isMatch(a) || + (a->state && a->state->next && !Action_isRule(a->state->next->action)); +} + +#endif diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/doc/loplas.ps.gz b/third-party/yasm/yasm-1.3.0/tools/re2c/doc/loplas.ps.gz new file mode 100644 index 0000000000000000000000000000000000000000..d1a9191d8c4cd5ff4ea26909fcb61afdcb5a073c GIT binary patch literal 69080 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 Dk8|8? literal 0 HcmV?d00001 diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/doc/sample.bib b/third-party/yasm/yasm-1.3.0/tools/re2c/doc/sample.bib new file mode 100644 index 0000000000..1f34ab13c8 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/doc/sample.bib @@ -0,0 +1,48 @@ +@Article{Bumbulis94, + author = {Peter Bumbulis and Donald D. Cowan}, + title = {RE2C -- A More Versatile Scanner Generator}, + journal = "ACM Letters on Programming Languages and Systems", + volume = 2, + number = "1--4", + year = 1994, + abstract = { + It is usually claimed that lexical analysis routines are still coded by + hand, despite the widespread availability of scanner generators, for + efficiency reasons. While efficiency is a consideration, there exist + freely available scanner generators such as GLA \cite{Gray88} that can + generate scanners that are faster than most hand-coded ones. However, + most generated scanners are tailored for a particular environment, and + retargetting these scanners to other environments, if possible, is + usually complex enough to make a hand-coded scanner more appealing. In + this paper we describe RE2C, a scanner generator that not only generates + scanners which are faster (and usually smaller) than those produced by + any other scanner generator known to the authors, including GLA, but + also adapt easily to any environment. + } +} +@Article{Gray88, + author = {Robert W. Gray}, + title = {{$\gamma$-GLA} - {A} Generator for Lexical Analyzers That + Programmers Can Use}, + journal = {USENIX Conference Proceedings}, + year = {1988}, + month = {June}, + pages = {147-160}, + abstract = {Writing an efficient lexical analyzer for even a simple + language is not a trivial task, and should not be done by hand. We + describe GLA, a tool that generates very efficient scanners. These + scanners do not use the conventional transition matrix, but instead + use a few 128 element vectors. Scanning time is only slightly + greater than the absolute minimum --- the time it takes to look at + each character in a file. The GLA language allows simple, concise + specification of scanners. Augmenting regular expressions with + auxiliary scanners easily handles nasty problems such as C comments + and C literal constants. We formalize the connection between token + scanning and token processing by associating a processor with + appropriate patterns. A library of canned descriptions simplifies the + specification of commonly used language pieces --- such as, + C\_IDENTIFIERS, C\_STRINGS, PASCAL\_COMMENTS, etc. Finally, carefully + tuned lexical analysis support modules are provided for error + handling, input buffering, storing identifiers in hash tables and + manipulating denotations.} +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/examples/basemmap.c b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/basemmap.c new file mode 100644 index 0000000000..3e5b037ad1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/basemmap.c @@ -0,0 +1,26 @@ +#include +#include +#include +#include +#include + +#ifndef MAP_NORESERVE +#define MAP_NORESERVE 0 +#endif + +volatile char ch; + +main(){ + struct stat statbuf; + uchar *buf; + fstat(0, &statbuf); + buf = mmap(NULL, statbuf.st_size, PROT_READ, MAP_SHARED|MAP_NORESERVE, + 0, 0); + if(buf != (uchar*)(-1)){ + uchar *cur, *lim = &buf[statbuf.st_size]; + for(cur = buf; buf != lim; ++cur){ + ch = *cur; + } + munmap(buf, statbuf.st_size); + } +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/examples/c.re b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/c.re new file mode 100644 index 0000000000..419964fb2f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/c.re @@ -0,0 +1,272 @@ +#include +#include +#include + +#define ADDEQ 257 +#define ANDAND 258 +#define ANDEQ 259 +#define ARRAY 260 +#define ASM 261 +#define AUTO 262 +#define BREAK 263 +#define CASE 264 +#define CHAR 265 +#define CONST 266 +#define CONTINUE 267 +#define DECR 268 +#define DEFAULT 269 +#define DEREF 270 +#define DIVEQ 271 +#define DO 272 +#define DOUBLE 273 +#define ELLIPSIS 274 +#define ELSE 275 +#define ENUM 276 +#define EQL 277 +#define EXTERN 278 +#define FCON 279 +#define FLOAT 280 +#define FOR 281 +#define FUNCTION 282 +#define GEQ 283 +#define GOTO 284 +#define ICON 285 +#define ID 286 +#define IF 287 +#define INCR 288 +#define INT 289 +#define LEQ 290 +#define LONG 291 +#define LSHIFT 292 +#define LSHIFTEQ 293 +#define MODEQ 294 +#define MULEQ 295 +#define NEQ 296 +#define OREQ 297 +#define OROR 298 +#define POINTER 299 +#define REGISTER 300 +#define RETURN 301 +#define RSHIFT 302 +#define RSHIFTEQ 303 +#define SCON 304 +#define SHORT 305 +#define SIGNED 306 +#define SIZEOF 307 +#define STATIC 308 +#define STRUCT 309 +#define SUBEQ 310 +#define SWITCH 311 +#define TYPEDEF 312 +#define UNION 313 +#define UNSIGNED 314 +#define VOID 315 +#define VOLATILE 316 +#define WHILE 317 +#define XOREQ 318 +#define EOI 319 + +typedef unsigned int uint; +typedef unsigned char uchar; + +#define BSIZE 8192 + +#define YYCTYPE uchar +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL(n) {cursor = fill(s, cursor);} + +#define RET(i) {s->cur = cursor; return i;} + +typedef struct Scanner { + int fd; + uchar *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof; + uint line; +} Scanner; + +uchar *fill(Scanner *s, uchar *cursor){ + if(!s->eof){ + uint cnt = s->tok - s->bot; + if(cnt){ + memcpy(s->bot, s->tok, s->lim - s->tok); + s->tok = s->bot; + s->ptr -= cnt; + cursor -= cnt; + s->pos -= cnt; + s->lim -= cnt; + } + if((s->top - s->lim) < BSIZE){ + uchar *buf = (uchar*) malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar)); + memcpy(buf, s->tok, s->lim - s->tok); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + cursor = &buf[cursor - s->bot]; + s->pos = &buf[s->pos - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[BSIZE]; + free(s->bot); + s->bot = buf; + } + if((cnt = read(s->fd, (char*) s->lim, BSIZE)) != BSIZE){ + s->eof = &s->lim[cnt]; *(s->eof)++ = '\n'; + } + s->lim += cnt; + } + return cursor; +} + +int scan(Scanner *s){ + uchar *cursor = s->cur; +std: + s->tok = cursor; +/*!re2c +any = [\000-\377]; +O = [0-7]; +D = [0-9]; +L = [a-zA-Z_]; +H = [a-fA-F0-9]; +E = [Ee] [+-]? D+; +FS = [fFlL]; +IS = [uUlL]*; +ESC = [\\] ([abfnrtv?'"\\] | "x" H+ | O+); +*/ + +/*!re2c + "/*" { goto comment; } + + "auto" { RET(AUTO); } + "break" { RET(BREAK); } + "case" { RET(CASE); } + "char" { RET(CHAR); } + "const" { RET(CONST); } + "continue" { RET(CONTINUE); } + "default" { RET(DEFAULT); } + "do" { RET(DO); } + "double" { RET(DOUBLE); } + "else" { RET(ELSE); } + "enum" { RET(ENUM); } + "extern" { RET(EXTERN); } + "float" { RET(FLOAT); } + "for" { RET(FOR); } + "goto" { RET(GOTO); } + "if" { RET(IF); } + "int" { RET(INT); } + "long" { RET(LONG); } + "register" { RET(REGISTER); } + "return" { RET(RETURN); } + "short" { RET(SHORT); } + "signed" { RET(SIGNED); } + "sizeof" { RET(SIZEOF); } + "static" { RET(STATIC); } + "struct" { RET(STRUCT); } + "switch" { RET(SWITCH); } + "typedef" { RET(TYPEDEF); } + "union" { RET(UNION); } + "unsigned" { RET(UNSIGNED); } + "void" { RET(VOID); } + "volatile" { RET(VOLATILE); } + "while" { RET(WHILE); } + + L (L|D)* { RET(ID); } + + ("0" [xX] H+ IS?) | ("0" D+ IS?) | (D+ IS?) | + (['] (ESC|any\[\n\\'])* [']) + { RET(ICON); } + + (D+ E FS?) | (D* "." D+ E? FS?) | (D+ "." D* E? FS?) + { RET(FCON); } + + (["] (ESC|any\[\n\\"])* ["]) + { RET(SCON); } + + "..." { RET(ELLIPSIS); } + ">>=" { RET(RSHIFTEQ); } + "<<=" { RET(LSHIFTEQ); } + "+=" { RET(ADDEQ); } + "-=" { RET(SUBEQ); } + "*=" { RET(MULEQ); } + "/=" { RET(DIVEQ); } + "%=" { RET(MODEQ); } + "&=" { RET(ANDEQ); } + "^=" { RET(XOREQ); } + "|=" { RET(OREQ); } + ">>" { RET(RSHIFT); } + "<<" { RET(LSHIFT); } + "++" { RET(INCR); } + "--" { RET(DECR); } + "->" { RET(DEREF); } + "&&" { RET(ANDAND); } + "||" { RET(OROR); } + "<=" { RET(LEQ); } + ">=" { RET(GEQ); } + "==" { RET(EQL); } + "!=" { RET(NEQ); } + ";" { RET(';'); } + "{" { RET('{'); } + "}" { RET('}'); } + "," { RET(','); } + ":" { RET(':'); } + "=" { RET('='); } + "(" { RET('('); } + ")" { RET(')'); } + "[" { RET('['); } + "]" { RET(']'); } + "." { RET('.'); } + "&" { RET('&'); } + "!" { RET('!'); } + "~" { RET('~'); } + "-" { RET('-'); } + "+" { RET('+'); } + "*" { RET('*'); } + "/" { RET('/'); } + "%" { RET('%'); } + "<" { RET('<'); } + ">" { RET('>'); } + "^" { RET('^'); } + "|" { RET('|'); } + "?" { RET('?'); } + + + [ \t\v\f]+ { goto std; } + + "\n" + { + if(cursor == s->eof) RET(EOI); + s->pos = cursor; s->line++; + goto std; + } + + any + { + printf("unexpected character: %c\n", *s->tok); + goto std; + } +*/ + +comment: +/*!re2c + "*/" { goto std; } + "\n" + { + if(cursor == s->eof) RET(EOI); + s->tok = s->pos = cursor; s->line++; + goto comment; + } + any { goto comment; } +*/ +} + +main(){ + Scanner in; + int t; + memset((char*) &in, 0, sizeof(in)); + in.fd = 0; + while((t = scan(&in)) != EOI){ +/* + printf("%d\t%.*s\n", t, in.cur - in.tok, in.tok); + printf("%d\n", t); +*/ + } + close(in.fd); +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/examples/cmmap.re b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/cmmap.re new file mode 100644 index 0000000000..bc4d498af2 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/cmmap.re @@ -0,0 +1,267 @@ +#include +#include +#include +#include +#include + +#define ADDEQ 257 +#define ANDAND 258 +#define ANDEQ 259 +#define ARRAY 260 +#define ASM 261 +#define AUTO 262 +#define BREAK 263 +#define CASE 264 +#define CHAR 265 +#define CONST 266 +#define CONTINUE 267 +#define DECR 268 +#define DEFAULT 269 +#define DEREF 270 +#define DIVEQ 271 +#define DO 272 +#define DOUBLE 273 +#define ELLIPSIS 274 +#define ELSE 275 +#define ENUM 276 +#define EQL 277 +#define EXTERN 278 +#define FCON 279 +#define FLOAT 280 +#define FOR 281 +#define FUNCTION 282 +#define GEQ 283 +#define GOTO 284 +#define ICON 285 +#define ID 286 +#define IF 287 +#define INCR 288 +#define INT 289 +#define LEQ 290 +#define LONG 291 +#define LSHIFT 292 +#define LSHIFTEQ 293 +#define MODEQ 294 +#define MULEQ 295 +#define NEQ 296 +#define OREQ 297 +#define OROR 298 +#define POINTER 299 +#define REGISTER 300 +#define RETURN 301 +#define RSHIFT 302 +#define RSHIFTEQ 303 +#define SCON 304 +#define SHORT 305 +#define SIGNED 306 +#define SIZEOF 307 +#define STATIC 308 +#define STRUCT 309 +#define SUBEQ 310 +#define SWITCH 311 +#define TYPEDEF 312 +#define UNION 313 +#define UNSIGNED 314 +#define VOID 315 +#define VOLATILE 316 +#define WHILE 317 +#define XOREQ 318 +#define EOI 319 + +typedef unsigned int unint; +typedef unsigned char uchar; + +#define YYCTYPE uchar +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL(n) {cursor = fill(s, cursor);} + +#define RET(i) {s->cur = cursor; return i;} + +typedef struct Scanner { + uchar *tok, *ptr, *cur, *pos, *lim, *eof; + unint line; +} Scanner; + +uchar *fill(Scanner *s, uchar *cursor){ + if(!s->eof){ + unint cnt = s->lim - s->tok; + uchar *buf = malloc((cnt + 1)*sizeof(uchar)); + memcpy(buf, s->tok, cnt); + cursor = &buf[cursor - s->tok]; + s->pos = &buf[s->pos - s->tok]; + s->ptr = &buf[s->ptr - s->tok]; + s->lim = &buf[cnt]; + s->eof = s->lim; *(s->eof)++ = '\n'; + s->tok = buf; + } + return cursor; +} + +int scan(Scanner *s){ + uchar *cursor = s->cur; +std: + s->tok = cursor; +/*!re2c +any = [\000-\377]; +O = [0-7]; +D = [0-9]; +L = [a-zA-Z_]; +H = [a-fA-F0-9]; +E = [Ee] [+-]? D+; +FS = [fFlL]; +IS = [uUlL]*; +ESC = [\\] ([abfnrtv?'"\\] | "x" H+ | O+); +*/ + +/*!re2c + "/*" { goto comment; } + + "auto" { RET(AUTO); } + "break" { RET(BREAK); } + "case" { RET(CASE); } + "char" { RET(CHAR); } + "const" { RET(CONST); } + "continue" { RET(CONTINUE); } + "default" { RET(DEFAULT); } + "do" { RET(DO); } + "double" { RET(DOUBLE); } + "else" { RET(ELSE); } + "enum" { RET(ENUM); } + "extern" { RET(EXTERN); } + "float" { RET(FLOAT); } + "for" { RET(FOR); } + "goto" { RET(GOTO); } + "if" { RET(IF); } + "int" { RET(INT); } + "long" { RET(LONG); } + "register" { RET(REGISTER); } + "return" { RET(RETURN); } + "short" { RET(SHORT); } + "signed" { RET(SIGNED); } + "sizeof" { RET(SIZEOF); } + "static" { RET(STATIC); } + "struct" { RET(STRUCT); } + "switch" { RET(SWITCH); } + "typedef" { RET(TYPEDEF); } + "union" { RET(UNION); } + "unsigned" { RET(UNSIGNED); } + "void" { RET(VOID); } + "volatile" { RET(VOLATILE); } + "while" { RET(WHILE); } + + L (L|D)* { RET(ID); } + + ("0" [xX] H+ IS?) | ("0" D+ IS?) | (D+ IS?) | + (['] (ESC|any\[\n\\'])* [']) + { RET(ICON); } + + (D+ E FS?) | (D* "." D+ E? FS?) | (D+ "." D* E? FS?) + { RET(FCON); } + + (["] (ESC|any\[\n\\"])* ["]) + { RET(SCON); } + + "..." { RET(ELLIPSIS); } + ">>=" { RET(RSHIFTEQ); } + "<<=" { RET(LSHIFTEQ); } + "+=" { RET(ADDEQ); } + "-=" { RET(SUBEQ); } + "*=" { RET(MULEQ); } + "/=" { RET(DIVEQ); } + "%=" { RET(MODEQ); } + "&=" { RET(ANDEQ); } + "^=" { RET(XOREQ); } + "|=" { RET(OREQ); } + ">>" { RET(RSHIFT); } + "<<" { RET(LSHIFT); } + "++" { RET(INCR); } + "--" { RET(DECR); } + "->" { RET(DEREF); } + "&&" { RET(ANDAND); } + "||" { RET(OROR); } + "<=" { RET(LEQ); } + ">=" { RET(GEQ); } + "==" { RET(EQL); } + "!=" { RET(NEQ); } + ";" { RET(';'); } + "{" { RET('{'); } + "}" { RET('}'); } + "," { RET(','); } + ":" { RET(':'); } + "=" { RET('='); } + "(" { RET('('); } + ")" { RET(')'); } + "[" { RET('['); } + "]" { RET(']'); } + "." { RET('.'); } + "&" { RET('&'); } + "!" { RET('!'); } + "~" { RET('~'); } + "-" { RET('-'); } + "+" { RET('+'); } + "*" { RET('*'); } + "/" { RET('/'); } + "%" { RET('%'); } + "<" { RET('<'); } + ">" { RET('>'); } + "^" { RET('^'); } + "|" { RET('|'); } + "?" { RET('?'); } + + + [ \t\v\f]+ { goto std; } + + "\n" + { + if(cursor == s->eof) RET(EOI); + s->pos = cursor; s->line++; + goto std; + } + + any + { + printf("unexpected character: %c\n", *s->tok); + goto std; + } +*/ + +comment: +/*!re2c + "*/" { goto std; } + "\n" + { + if(cursor == s->eof) RET(EOI); + s->tok = s->pos = cursor; s->line++; + goto comment; + } + any { goto comment; } +*/ +} + +#ifndef MAP_NORESERVE +#define MAP_NORESERVE 0 +#endif + +main(){ + Scanner in; + struct stat statbuf; + uchar *buf; + fstat(0, &statbuf); + buf = mmap(NULL, statbuf.st_size, PROT_READ, MAP_SHARED|MAP_NORESERVE, + 0, 0); + if(buf != (uchar*)(-1)){ + int t; + in.lim = &(in.cur = buf)[statbuf.st_size]; + in.pos = NULL; + in.eof = NULL; + while((t = scan(&in)) != EOI){ +/* + printf("%d\t%.*s\n", t, in.cur - in.tok, in.tok); + printf("%d\n", t); +*/ + } + munmap(buf, statbuf.st_size); + } +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/examples/cnokw.re b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/cnokw.re new file mode 100644 index 0000000000..bdc1279323 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/cnokw.re @@ -0,0 +1,239 @@ +#include +#include +#include + +#define ADDEQ 257 +#define ANDAND 258 +#define ANDEQ 259 +#define ARRAY 260 +#define ASM 261 +#define AUTO 262 +#define BREAK 263 +#define CASE 264 +#define CHAR 265 +#define CONST 266 +#define CONTINUE 267 +#define DECR 268 +#define DEFAULT 269 +#define DEREF 270 +#define DIVEQ 271 +#define DO 272 +#define DOUBLE 273 +#define ELLIPSIS 274 +#define ELSE 275 +#define ENUM 276 +#define EQL 277 +#define EXTERN 278 +#define FCON 279 +#define FLOAT 280 +#define FOR 281 +#define FUNCTION 282 +#define GEQ 283 +#define GOTO 284 +#define ICON 285 +#define ID 286 +#define IF 287 +#define INCR 288 +#define INT 289 +#define LEQ 290 +#define LONG 291 +#define LSHIFT 292 +#define LSHIFTEQ 293 +#define MODEQ 294 +#define MULEQ 295 +#define NEQ 296 +#define OREQ 297 +#define OROR 298 +#define POINTER 299 +#define REGISTER 300 +#define RETURN 301 +#define RSHIFT 302 +#define RSHIFTEQ 303 +#define SCON 304 +#define SHORT 305 +#define SIGNED 306 +#define SIZEOF 307 +#define STATIC 308 +#define STRUCT 309 +#define SUBEQ 310 +#define SWITCH 311 +#define TYPEDEF 312 +#define UNION 313 +#define UNSIGNED 314 +#define VOID 315 +#define VOLATILE 316 +#define WHILE 317 +#define XOREQ 318 +#define EOI 319 + +typedef unsigned int uint; +typedef unsigned char uchar; + +#define BSIZE 8192 + +#define YYCTYPE uchar +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL(n) {cursor = fill(s, cursor);} + +#define RET(i) {s->cur = cursor; return i;} + +typedef struct Scanner { + int fd; + uchar *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof; + uint line; +} Scanner; + +uchar *fill(Scanner *s, uchar *cursor){ + if(!s->eof){ + uint cnt = s->tok - s->bot; + if(cnt){ + memcpy(s->bot, s->tok, s->lim - s->tok); + s->tok = s->bot; + s->ptr -= cnt; + cursor -= cnt; + s->pos -= cnt; + s->lim -= cnt; + } + if((s->top - s->lim) < BSIZE){ + uchar *buf = (uchar*) malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar)); + memcpy(buf, s->tok, s->lim - s->tok); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + cursor = &buf[cursor - s->bot]; + s->pos = &buf[s->pos - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[BSIZE]; + free(s->bot); + s->bot = buf; + } + if((cnt = read(s->fd, (char*) s->lim, BSIZE)) != BSIZE){ + s->eof = &s->lim[cnt]; *(s->eof)++ = '\n'; + } + s->lim += cnt; + } + return cursor; +} + +int scan(Scanner *s){ + uchar *cursor = s->cur; +std: + s->tok = cursor; +/*!re2c +any = [\000-\377]; +O = [0-7]; +D = [0-9]; +L = [a-zA-Z_]; +H = [a-fA-F0-9]; +E = [Ee] [+-]? D+; +FS = [fFlL]; +IS = [uUlL]*; +ESC = [\\] ([abfnrtv?'"\\] | "x" H+ | O+); +*/ + +/*!re2c + "/*" { goto comment; } + + L (L|D)* { RET(ID); } + + ("0" [xX] H+ IS?) | ("0" D+ IS?) | (D+ IS?) | + (['] (ESC|any\[\n\\'])* [']) + { RET(ICON); } + + (D+ E FS?) | (D* "." D+ E? FS?) | (D+ "." D* E? FS?) + { RET(FCON); } + + (["] (ESC|any\[\n\\"])* ["]) + { RET(SCON); } + + "..." { RET(ELLIPSIS); } + ">>=" { RET(RSHIFTEQ); } + "<<=" { RET(LSHIFTEQ); } + "+=" { RET(ADDEQ); } + "-=" { RET(SUBEQ); } + "*=" { RET(MULEQ); } + "/=" { RET(DIVEQ); } + "%=" { RET(MODEQ); } + "&=" { RET(ANDEQ); } + "^=" { RET(XOREQ); } + "|=" { RET(OREQ); } + ">>" { RET(RSHIFT); } + "<<" { RET(LSHIFT); } + "++" { RET(INCR); } + "--" { RET(DECR); } + "->" { RET(DEREF); } + "&&" { RET(ANDAND); } + "||" { RET(OROR); } + "<=" { RET(LEQ); } + ">=" { RET(GEQ); } + "==" { RET(EQL); } + "!=" { RET(NEQ); } + ";" { RET(';'); } + "{" { RET('{'); } + "}" { RET('}'); } + "," { RET(','); } + ":" { RET(':'); } + "=" { RET('='); } + "(" { RET('('); } + ")" { RET(')'); } + "[" { RET('['); } + "]" { RET(']'); } + "." { RET('.'); } + "&" { RET('&'); } + "!" { RET('!'); } + "~" { RET('~'); } + "-" { RET('-'); } + "+" { RET('+'); } + "*" { RET('*'); } + "/" { RET('/'); } + "%" { RET('%'); } + "<" { RET('<'); } + ">" { RET('>'); } + "^" { RET('^'); } + "|" { RET('|'); } + "?" { RET('?'); } + + + [ \t\v\f]+ { goto std; } + + "\n" + { + if(cursor == s->eof) RET(EOI); + s->pos = cursor; s->line++; + goto std; + } + + any + { + printf("unexpected character: %c\n", *s->tok); + goto std; + } +*/ + +comment: +/*!re2c + "*/" { goto std; } + "\n" + { + if(cursor == s->eof) RET(EOI); + s->tok = s->pos = cursor; s->line++; + goto comment; + } + any { goto comment; } +*/ +} + +main(){ + Scanner in; + int t; + memset((char*) &in, 0, sizeof(in)); + in.fd = 0; + while((t = scan(&in)) != EOI){ +/* + printf("%d\t%.*s\n", t, in.cur - in.tok, in.tok); + printf("%d\n", t); +*/ + } + close(in.fd); +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/examples/cunroll.re b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/cunroll.re new file mode 100644 index 0000000000..dd9d80542d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/cunroll.re @@ -0,0 +1,258 @@ +#include +#include +#include + +#define ADDEQ 257 +#define ANDAND 258 +#define ANDEQ 259 +#define ARRAY 260 +#define ASM 261 +#define AUTO 262 +#define BREAK 263 +#define CASE 264 +#define CHAR 265 +#define CONST 266 +#define CONTINUE 267 +#define DECR 268 +#define DEFAULT 269 +#define DEREF 270 +#define DIVEQ 271 +#define DO 272 +#define DOUBLE 273 +#define ELLIPSIS 274 +#define ELSE 275 +#define ENUM 276 +#define EQL 277 +#define EXTERN 278 +#define FCON 279 +#define FLOAT 280 +#define FOR 281 +#define FUNCTION 282 +#define GEQ 283 +#define GOTO 284 +#define ICON 285 +#define ID 286 +#define IF 287 +#define INCR 288 +#define INT 289 +#define LEQ 290 +#define LONG 291 +#define LSHIFT 292 +#define LSHIFTEQ 293 +#define MODEQ 294 +#define MULEQ 295 +#define NEQ 296 +#define OREQ 297 +#define OROR 298 +#define POINTER 299 +#define REGISTER 300 +#define RETURN 301 +#define RSHIFT 302 +#define RSHIFTEQ 303 +#define SCON 304 +#define SHORT 305 +#define SIGNED 306 +#define SIZEOF 307 +#define STATIC 308 +#define STRUCT 309 +#define SUBEQ 310 +#define SWITCH 311 +#define TYPEDEF 312 +#define UNION 313 +#define UNSIGNED 314 +#define VOID 315 +#define VOLATILE 316 +#define WHILE 317 +#define XOREQ 318 +#define EOI 319 + +typedef unsigned int uint; +typedef unsigned char uchar; + +#define BSIZE 8192 + +#define YYCTYPE uchar +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL(n) {cursor = fill(s, cursor);} + +#define RET(i) {s->cur = cursor; return i;} + +typedef struct Scanner { + int fd; + uchar *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof; + uint line; +} Scanner; + +uchar *fill(Scanner *s, uchar *cursor){ + if(!s->eof){ + uint cnt = s->tok - s->bot; + if(cnt){ + memcpy(s->bot, s->tok, s->lim - s->tok); + s->tok = s->bot; + s->ptr -= cnt; + cursor -= cnt; + s->pos -= cnt; + s->lim -= cnt; + } + if((s->top - s->lim) < BSIZE){ + uchar *buf = (uchar*) malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar)); + memcpy(buf, s->tok, s->lim - s->tok); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + cursor = &buf[cursor - s->bot]; + s->pos = &buf[s->pos - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[BSIZE]; + free(s->bot); + s->bot = buf; + } + if((cnt = read(s->fd, (char*) s->lim, BSIZE)) != BSIZE){ + s->eof = &s->lim[cnt]; *(s->eof)++ = '\n'; + } + s->lim += cnt; + } + return cursor; +} + +int scan(Scanner *s){ + uchar *cursor = s->cur; +std: + s->tok = cursor; +/*!re2c +any = [\000-\377]; +O = [0-7]; +D = [0-9]; +L = [a-zA-Z_]; +I = L|D; +H = [a-fA-F0-9]; +E = [Ee] [+-]? D+; +FS = [fFlL]; +IS = [uUlL]*; +ESC = [\\] ([abfnrtv?'"\\] | "x" H+ | O+); +X = any\[*/]; +*/ + +/*!re2c + "/*" { goto comment; } + + + L { RET(ID); } + L I { RET(ID); } + L I I { RET(ID); } + L I I I { RET(ID); } + L I I I I { RET(ID); } + L I I I I I { RET(ID); } + L I I I I I I { RET(ID); } + L I I I I I I I { RET(ID); } + L I* { RET(ID); } + + ("0" [xX] H+ IS?) | ("0" D+ IS?) | (D+ IS?) | + (['] (ESC|any\[\n\\'])* [']) + { RET(ICON); } + + (D+ E FS?) | (D* "." D+ E? FS?) | (D+ "." D* E? FS?) + { RET(FCON); } + + (["] (ESC|any\[\n\\"])* ["]) + { RET(SCON); } + + "..." { RET(ELLIPSIS); } + ">>=" { RET(RSHIFTEQ); } + "<<=" { RET(LSHIFTEQ); } + "+=" { RET(ADDEQ); } + "-=" { RET(SUBEQ); } + "*=" { RET(MULEQ); } + "/=" { RET(DIVEQ); } + "%=" { RET(MODEQ); } + "&=" { RET(ANDEQ); } + "^=" { RET(XOREQ); } + "|=" { RET(OREQ); } + ">>" { RET(RSHIFT); } + "<<" { RET(LSHIFT); } + "++" { RET(INCR); } + "--" { RET(DECR); } + "->" { RET(DEREF); } + "&&" { RET(ANDAND); } + "||" { RET(OROR); } + "<=" { RET(LEQ); } + ">=" { RET(GEQ); } + "==" { RET(EQL); } + "!=" { RET(NEQ); } + ";" { RET(';'); } + "{" { RET('{'); } + "}" { RET('}'); } + "," { RET(','); } + ":" { RET(':'); } + "=" { RET('='); } + "(" { RET('('); } + ")" { RET(')'); } + "[" { RET('['); } + "]" { RET(']'); } + "." { RET('.'); } + "&" { RET('&'); } + "!" { RET('!'); } + "~" { RET('~'); } + "-" { RET('-'); } + "+" { RET('+'); } + "*" { RET('*'); } + "/" { RET('/'); } + "%" { RET('%'); } + "<" { RET('<'); } + ">" { RET('>'); } + "^" { RET('^'); } + "|" { RET('|'); } + "?" { RET('?'); } + + + [ \t\v\f]+ { goto std; } + + "\n" + { + if(cursor == s->eof) RET(EOI); + s->pos = cursor; s->line++; + goto std; + } + + any + { + printf("unexpected character: %c\n", *s->tok); + goto std; + } +*/ + +comment: +/*!re2c + "*/" { goto std; } + "\n" + { + if(cursor == s->eof) RET(EOI); + s->tok = s->pos = cursor; s->line++; + goto comment; + } + X { goto comment; } + X X { goto comment; } + X X X { goto comment; } + X X X X { goto comment; } + X X X X X { goto comment; } + X X X X X X { goto comment; } + X X X X X X X { goto comment; } + X X X X X X X X { goto comment; } + any { goto comment; } +*/ +} + +main(){ + Scanner in; + int t; + memset((char*) &in, 0, sizeof(in)); + in.fd = 0; + while((t = scan(&in)) != EOI){ +/* + printf("%d\t%.*s\n", t, in.cur - in.tok, in.tok); + printf("%d\n", t); +*/ + } + close(in.fd); +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/examples/modula.re b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/modula.re new file mode 100644 index 0000000000..0468ba4e16 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/modula.re @@ -0,0 +1,202 @@ +#include +#include +#include + +typedef unsigned int uint; +typedef unsigned char uchar; + +#define BSIZE 8192 + +#define YYCTYPE uchar +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL {cursor = fill(s, cursor);} + +#define RETURN(i) {s->cur = cursor; return i;} + +typedef struct Scanner { + int fd; + uchar *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof; + uint line; +} Scanner; + +uchar *fill(Scanner *s, uchar *cursor){ + if(!s->eof){ + uint cnt = s->tok - s->bot; + if(cnt){ + memcpy(s->bot, s->tok, s->lim - s->tok); + s->tok = s->bot; + s->ptr -= cnt; + cursor -= cnt; + s->pos -= cnt; + s->lim -= cnt; + } + if((s->top - s->lim) < BSIZE){ + uchar *buf = (uchar*) malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar)); + memcpy(buf, s->tok, s->lim - s->tok); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + cursor = &buf[cursor - s->bot]; + s->pos = &buf[s->pos - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[BSIZE]; + free(s->bot); + s->bot = buf; + } + if((cnt = read(s->fd, (char*) s->lim, BSIZE)) != BSIZE){ + s->eof = &s->lim[cnt]; *(s->eof)++ = '\n'; + } + s->lim += cnt; + } + return cursor; +} + +int scan(Scanner *s){ + uchar *cursor = s->cur; + uint depth; +std: + s->tok = cursor; +/*!re2c +any = [\000-\377]; +digit = [0-9]; +letter = [a-zA-Z]; +*/ + +/*!re2c + "(*" { depth = 1; goto comment; } + + digit + {RETURN(1);} + digit + / ".." {RETURN(1);} + [0-7] + "B" {RETURN(2);} + [0-7] + "C" {RETURN(3);} + digit [0-9A-F] * "H" {RETURN(4);} + digit + "." digit * ("E" ([+-]) ? digit +) ? {RETURN(5);} + ['] (any\[\n']) * ['] | ["] (any\[\n"]) * ["] {RETURN(6);} + + "#" {RETURN(7);} + "&" {RETURN(8);} + "(" {RETURN(9);} + ")" {RETURN(10);} + "*" {RETURN(11);} + "+" {RETURN(12);} + "," {RETURN(13);} + "-" {RETURN(14);} + "." {RETURN(15);} + ".." {RETURN(16);} + "/" {RETURN(17);} + ":" {RETURN(18);} + ":=" {RETURN(19);} + ";" {RETURN(20);} + "<" {RETURN(21);} + "<=" {RETURN(22);} + "<>" {RETURN(23);} + "=" {RETURN(24);} + ">" {RETURN(25);} + ">=" {RETURN(26);} + "[" {RETURN(27);} + "]" {RETURN(28);} + "^" {RETURN(29);} + "{" {RETURN(30);} + "|" {RETURN(31);} + "}" {RETURN(32);} + "~" {RETURN(33);} + + "AND" {RETURN(34);} + "ARRAY" {RETURN(35);} + "BEGIN" {RETURN(36);} + "BY" {RETURN(37);} + "CASE" {RETURN(38);} + "CONST" {RETURN(39);} + "DEFINITION" {RETURN(40);} + "DIV" {RETURN(41);} + "DO" {RETURN(42);} + "ELSE" {RETURN(43);} + "ELSIF" {RETURN(44);} + "END" {RETURN(45);} + "EXIT" {RETURN(46);} + "EXPORT" {RETURN(47);} + "FOR" {RETURN(48);} + "FROM" {RETURN(49);} + "IF" {RETURN(50);} + "IMPLEMENTATION" {RETURN(51);} + "IMPORT" {RETURN(52);} + "IN" {RETURN(53);} + "LOOP" {RETURN(54);} + "MOD" {RETURN(55);} + "MODULE" {RETURN(56);} + "NOT" {RETURN(57);} + "OF" {RETURN(58);} + "OR" {RETURN(59);} + "POINTER" {RETURN(60);} + "PROCEDURE" {RETURN(61);} + "QUALIFIED" {RETURN(62);} + "RECORD" {RETURN(63);} + "REPEAT" {RETURN(64);} + "RETURN" {RETURN(65);} + "SET" {RETURN(66);} + "THEN" {RETURN(67);} + "TO" {RETURN(68);} + "TYPE" {RETURN(69);} + "UNTIL" {RETURN(70);} + "VAR" {RETURN(71);} + "WHILE" {RETURN(72);} + "WITH" {RETURN(73);} + + letter (letter | digit) * {RETURN(74);} + + [ \t]+ { goto std; } + + "\n" + { + if(cursor == s->eof) RETURN(0); + s->pos = cursor; s->line++; + goto std; + } + + any + { + printf("unexpected character: %c\n", *s->tok); + goto std; + } +*/ +comment: +/*!re2c + "*)" + { + if(--depth == 0) + goto std; + else + goto comment; + } + "(*" { ++depth; goto comment; } + "\n" + { + if(cursor == s->eof) RETURN(0); + s->tok = s->pos = cursor; s->line++; + goto comment; + } + any { goto comment; } +*/ +} + +/* +void putStr(FILE *o, char *s, uint l){ + while(l-- > 0) + putc(*s++, o); +} +*/ + +main(){ + Scanner in; + memset((char*) &in, 0, sizeof(in)); + in.fd = 0; + while(scan(&in)){ +/* + putc('<', stdout); + putStr(stdout, (char*) in.tok, in.cur - in.tok); + putc('>', stdout); + putc('\n', stdout); +*/ + } +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/examples/repeater.re b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/repeater.re new file mode 100644 index 0000000000..f84b5c7c3b --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/repeater.re @@ -0,0 +1,42 @@ +#include +#include +#include + +#define RET(n) printf("%d\n", n); return n + +int scan(char *s, int l){ +char *p = s; +char *q; +#define YYCTYPE char +#define YYCURSOR p +#define YYLIMIT (s+l) +#define YYMARKER q +#define YYFILL(n) +/*!re2c + 'a'{1}"\n" {RET(1);} + 'a'{2,3}"\n" {RET(2);} + 'a'{4,}"\n" {RET(3);} + 'a'{6}"\n" {RET(4);} + [^aq]|"\n" {RET(0);} +*/ +} + +#define do_scan(str) scan(str, strlen(str)) + +main() +{ + do_scan("a\n"); + do_scan("aa\n"); + do_scan("aaa\n"); + do_scan("aaaa\n"); + do_scan("A\n"); + do_scan("AA\n"); + do_scan("aAa\n"); + do_scan("AaaA\n"); + do_scan("Q"); + do_scan("AaaAa\n"); + do_scan("AaaAaA\n"); + do_scan("A"); + do_scan("\n"); + do_scan("0"); +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/examples/rexx/README b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/rexx/README new file mode 100644 index 0000000000..2af0178d5f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/rexx/README @@ -0,0 +1 @@ +Replacement modules for an existing REXX interpreter. Not standalone. diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/examples/rexx/rexx.l b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/rexx/rexx.l new file mode 100644 index 0000000000..b74741dafb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/rexx/rexx.l @@ -0,0 +1,319 @@ +#include "scanio.h" +#include "scanner.h" + +#define CURSOR ch +#define LOADCURSOR ch = *cursor; +#define ADVANCE cursor++; +#define BACK(n) cursor -= (n); +#define CHECK(n) if((ScanCB.lim - cursor) < (n)){cursor = ScanFill(cursor);} +#define MARK(n) ScanCB.ptr = cursor; sel = (n); +#define REVERT cursor = ScanCB.ptr; +#define MARKER sel + +#define RETURN(i) {ScanCB.cur = cursor; return i;} + +int ScanToken(){ + uchar *cursor = ScanCB.cur; + unsigned sel; + uchar ch; + ScanCB.tok = cursor; + ScanCB.eot = NULL; +/*!re2c +all = [\000-\377]; +eof = [\000]; +any = all\eof; +letter = [a-z]|[A-Z]; +digit = [0-9]; +symchr = letter|digit|[.!?_]; +const = (digit|[.])symchr*([eE][+-]?digit+)?; +simple = (symchr\(digit|[.]))(symchr\[.])*; +stem = simple [.]; +symbol = symchr*; +sqstr = ['] ((any\['\n])|(['][']))* [']; +dqstr = ["] ((any\["\n])|(["]["]))* ["]; +str = sqstr|dqstr; +ob = [ \t]*; +not = [\\~]; +A = [aA]; +B = [bB]; +C = [cC]; +D = [dD]; +E = [eE]; +F = [fF]; +G = [gG]; +H = [hH]; +I = [iI]; +J = [jJ]; +K = [kK]; +L = [lL]; +M = [mM]; +N = [nN]; +O = [oO]; +P = [pP]; +Q = [qQ]; +R = [rR]; +S = [sS]; +T = [tT]; +U = [uU]; +V = [vV]; +W = [wW]; +X = [xX]; +Y = [yY]; +Z = [zZ]; +*/ + +scan: +/*!re2c +"\n" + { + ++(ScanCB.lineNum); + ScanCB.linePos = ScanCB.pos + (cursor - ScanCB.mrk); + RETURN(SU_EOL); + } +"|" ob "|" + { RETURN(OP_CONCAT); } +"+" + { RETURN(OP_PLUS); } +"-" + { RETURN(OP_MINUS); } +"*" + { RETURN(OP_MULT); } +"/" + { RETURN(OP_DIV); } +"%" + { RETURN(OP_IDIV); } +"/" ob "/" + { RETURN(OP_REMAIN); } +"*" ob "*" + { RETURN(OP_POWER); } +"=" + { RETURN(OP_EQUAL); } +not ob "=" | "<" ob ">" | ">" ob "<" + { RETURN(OP_EQUAL_N); } +">" + { RETURN(OP_GT); } +"<" + { RETURN(OP_LT); } +">" ob "=" | not ob "<" + { RETURN(OP_GE); } +"<" ob "=" | not ob ">" + { RETURN(OP_LE); } +"=" ob "=" + { RETURN(OP_EQUAL_EQ); } +not ob "=" ob "=" + { RETURN(OP_EQUAL_EQ_N); } +">" ob ">" + { RETURN(OP_GT_STRICT); } +"<" ob "<" + { RETURN(OP_LT_STRICT); } +">" ob ">" ob "=" | not ob "<" ob "<" + { RETURN(OP_GE_STRICT); } +"<" ob "<" ob "=" | not ob ">" ob ">" + { RETURN(OP_LE_STRICT); } +"&" + { RETURN(OP_AND); } +"|" + { RETURN(OP_OR); } +"&" ob "&" + { RETURN(OP_XOR); } +not + { RETURN(OP_NOT); } + +":" + { RETURN(SU_COLON); } +"," + { RETURN(SU_COMMA); } +"(" + { RETURN(SU_POPEN); } +")" + { RETURN(SU_PCLOSE); } +";" + { RETURN(SU_EOC); } + +A D D R E S S + { RETURN(RX_ADDRESS); } +A R G + { RETURN(RX_ARG); } +C A L L + { RETURN(RX_CALL); } +D O + { RETURN(RX_DO); } +D R O P + { RETURN(RX_DROP); } +E L S E + { RETURN(RX_ELSE); } +E N D + { RETURN(RX_END); } +E X I T + { RETURN(RX_EXIT); } +I F + { RETURN(RX_IF); } +I N T E R P R E T + { RETURN(RX_INTERPRET); } +I T E R A T E + { RETURN(RX_ITERATE); } +L E A V E + { RETURN(RX_LEAVE); } +N O P + { RETURN(RX_NOP); } +N U M E R I C + { RETURN(RX_NUMERIC); } +O P T I O N S + { RETURN(RX_OPTIONS); } +O T H E R W I S E + { RETURN(RX_OTHERWISE); } +P A R S E + { RETURN(RX_PARSE); } +P R O C E D U R E + { RETURN(RX_PROCEDURE); } +P U L L + { RETURN(RX_PULL); } +P U S H + { RETURN(RX_PUSH); } +Q U E U E + { RETURN(RX_QUEUE); } +R E T U R N + { RETURN(RX_RETURN); } +S A Y + { RETURN(RX_SAY); } +S E L E C T + { RETURN(RX_SELECT); } +S I G N A L + { RETURN(RX_SIGNAL); } +T H E N + { RETURN(RX_THEN); } +T R A C E + { RETURN(RX_TRACE); } +W H E N + { RETURN(RX_WHEN); } +O F F + { RETURN(RXS_OFF); } +O N + { RETURN(RXS_ON); } +B Y + { RETURN(RXS_BY); } +D I G I T S + { RETURN(RXS_DIGITS); } +E N G I N E E R I N G + { RETURN(RXS_ENGINEERING); } +E R R O R + { RETURN(RXS_ERROR); } +E X P O S E + { RETURN(RXS_EXPOSE); } +F A I L U R E + { RETURN(RXS_FAILURE); } +F O R + { RETURN(RXS_FOR); } +F O R E V E R + { RETURN(RXS_FOREVER); } +F O R M + { RETURN(RXS_FORM); } +F U Z Z + { RETURN(RXS_FUZZ); } +H A L T + { RETURN(RXS_HALT); } +L I N E I N + { RETURN(RXS_LINEIN); } +N A M E + { RETURN(RXS_NAME); } +N O T R E A D Y + { RETURN(RXS_NOTREADY); } +N O V A L U E + { RETURN(RXS_NOVALUE); } +S C I E N T I F I C + { RETURN(RXS_SCIENTIFIC); } +S O U R C E + { RETURN(RXS_SOURCE); } +S Y N T A X + { RETURN(RXS_SYNTAX); } +T O + { RETURN(RXS_TO); } +U N T I L + { RETURN(RXS_UNTIL); } +U P P E R + { RETURN(RXS_UPPER); } +V A L U E + { RETURN(RXS_VALUE); } +V A R + { RETURN(RXS_VAR); } +V E R S I O N + { RETURN(RXS_VERSION); } +W H I L E + { RETURN(RXS_WHILE); } +W I T H + { RETURN(RXS_WITH); } + +const + { RETURN(SU_CONST); } +simple + { RETURN(SU_SYMBOL); } +stem + { RETURN(SU_SYMBOL_STEM); } +symbol + { RETURN(SU_SYMBOL_COMPOUND); } +str + { RETURN(SU_LITERAL); } +str [bB] / (all\symchr) + { RETURN(SU_LITERAL_BIN); } +str [xX] / (all\symchr) + { RETURN(SU_LITERAL_HEX); } + +eof + { RETURN(SU_EOF); } +any + { RETURN(SU_ERROR); } +*/ +} + +bool StripToken(){ + uchar *cursor = ScanCB.cur; + unsigned depth; + uchar ch; + bool blanks = FALSE; + ScanCB.eot = cursor; +strip: +/*!re2c +"/*" + { + depth = 1; + goto comment; + } +"\r" + { goto strip; } +[ \t] + { + blanks = TRUE; + goto strip; + } +[] / all + { RETURN(blanks); } +*/ + +comment: +/*!re2c +"*/" + { + if(--depth == 0) + goto strip; + else + goto comment; + } +"\n" + { + ++(ScanCB.lineNum); + ScanCB.linePos = ScanCB.pos + (cursor - ScanCB.mrk); + goto comment; + } +"/*" + { + ++depth; + goto comment; + } +eof + { RETURN(blanks); } +any + { + goto comment; + } +*/ +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/examples/rexx/scanio.c b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/rexx/scanio.c new file mode 100644 index 0000000000..de6898dfc1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/rexx/scanio.c @@ -0,0 +1,41 @@ +uchar *ScanFill(uchar *cursor){ + unsigned cnt = s->tok - s->bot; + s->pos += cursor - s->mrk; + if(cnt){ + if(s->eot){ + unsigned len = s->eot - s->tok; + memcpy(s->bot, s->tok, len); + s->eot = &s->bot[len]; + if((len = s->lim - cursor) != 0) + memcpy(s->eot, cursor, len); + cursor = s->eot; + s->lim = &cursor[len]; + } else { + memcpy(s->bot, s->tok, s->lim - s->tok); + cursor -= cnt; + s->lim -= cnt; + } + s->tok = s->bot; + s->ptr -= cnt; + } + if((s->top - s->lim) < 512){ + uchar *buf = (uchar*) malloc(((s->lim - s->bot) + 512)*sizeof(uchar)); + memcpy(buf, s->bot, s->lim - s->bot); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + if(s->eot) + s->eot = &buf[s->eot - s->bot]; + cursor = &buf[cursor - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[512]; + free(s->bot); + s->bot = buf; + } + s->mrk = cursor; + if(ScanCBIO.file){ + if((cnt = read(ScanCBIO.u.f.fd, (char*) s->lim, 512)) != 512) + memset(&s->lim[cnt], 0, 512 - cnt); + s->lim += 512; + } + return cursor; +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/examples/sample.re b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/sample.re new file mode 100644 index 0000000000..2f497a3b5d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/sample.re @@ -0,0 +1,7 @@ +/*!re2c + "print" {return PRINT;} + [a-z]+ {return ID;} + [0-9]+ {return DEC;} + "0x" [0-9a-f]+ {return HEX;} + [\000-\377] {return ERR;} +*/ diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/examples/simple.re b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/simple.re new file mode 100644 index 0000000000..5fd8891fdb --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/examples/simple.re @@ -0,0 +1,13 @@ +#define NULL ((char*) 0) +char *scan(char *p){ +char *q; +#define YYCTYPE char +#define YYCURSOR p +#define YYLIMIT p +#define YYMARKER q +#define YYFILL(n) +/*!re2c + [0-9]+ {return YYCURSOR;} + [\000-\377] {return NULL;} +*/ +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/globals.h b/third-party/yasm/yasm-1.3.0/tools/re2c/globals.h new file mode 100644 index 0000000000..344f3defc1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/globals.h @@ -0,0 +1,26 @@ +#ifndef re2c_globals_h +#define re2c_globals_h + +#include "tools/re2c/basics.h" + +extern const char *fileName; +extern char *outputFileName; +extern int sFlag; +extern int bFlag; +extern int dFlag; +extern int iFlag; +extern int bUsedYYAccept; +extern unsigned int oline; +extern unsigned int maxFill; +extern int vFillIndexes; +extern unsigned char *vUsedLabels; +extern unsigned int vUsedLabelAlloc; + +extern unsigned char asc2ebc[256]; +extern unsigned char ebc2asc[256]; + +extern unsigned char *xlat, *talx; + +char *mystrdup(const char *str); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/ins.h b/third-party/yasm/yasm-1.3.0/tools/re2c/ins.h new file mode 100644 index 0000000000..ba6c0870ed --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/ins.h @@ -0,0 +1,40 @@ +#ifndef re2c_ins_h +#define re2c_ins_h + +#include "tools/re2c/basics.h" + +#define nChars 256 +typedef unsigned char Char; + +#define CHAR 0 +#define GOTO 1 +#define FORK 2 +#define TERM 3 +#define CTXT 4 + +typedef union Ins { + struct { + byte tag; + byte marked; + void *link; + } i; + struct { + unsigned short value; + unsigned short bump; + void *link; + } c; +} Ins; + +static int isMarked(Ins *i){ + return i->i.marked != 0; +} + +static void mark(Ins *i){ + i->i.marked = 1; +} + +static void unmark(Ins *i){ + i->i.marked = 0; +} + +#endif diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/main.c b/third-party/yasm/yasm-1.3.0/tools/re2c/main.c new file mode 100644 index 0000000000..9484316074 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/main.c @@ -0,0 +1,196 @@ +#include +#include +#include + +#include "globals.h" +#include "parse.h" +#include "dfa.h" +#include "mbo_getopt.h" + +const char *fileName = 0; +char *outputFileName = 0; +int sFlag = 0; +int bFlag = 0; +int dFlag = 0; +int iFlag = 0; +int bUsedYYAccept = 0; +unsigned int oline = 1; +unsigned int maxFill = 1; +int vFillIndexes = -1; +unsigned char *vUsedLabels; +unsigned int vUsedLabelAlloc = 1000; + +static char *opt_arg = NULL; +static int opt_ind = 1; + +static const mbo_opt_struct OPTIONS[] = { + {'?', 0, "help"}, + {'b', 0, "bit-vectors"}, + {'d', 0, "debug-output"}, + {'e', 0, "ecb"}, + {'f', 0, "storable-state"}, + {'h', 0, "help"}, + {'i', 0, "no-debug-info"}, + {'o', 1, "output"}, + {'s', 0, "nested-ifs"}, + {'v', 0, "version"}, + {'-', 0, NULL} /* end of args */ +}; + +static void usage() +{ + fprintf(stderr, + "usage: re2c [-esbvhd] file\n" + "\n" + "-? -h --help Display this info.\n" + "\n" + "-b --bit-vectors Implies -s. Use bit vectors as well in the attempt to\n" + " coax better code out of the compiler. Most useful for\n"); + fprintf(stderr, + " specifications with more than a few keywords (e.g. for\n" + " most programming languages).\n" + "\n" + "-e --ecb Cross-compile from an ASCII platform to\n" + " an EBCDIC one.\n" + "\n"); + fprintf(stderr, + "-s --nested-ifs Generate nested ifs for some switches. Many compilers\n" + " need this assist to generate better code.\n" + "\n" + "-f --storable-state Generate a scanner with support for storable state\n" + "\n" + "-o --output=output Specify the output file instead of stdout\n" + "\n"); + fprintf(stderr, + "-d --debug-output Creates a parser that dumps information during\n" + " about the current position and in which state the\n" + " parser is.\n" + "\n" + "-i --no-debug-info Do not generate '#line' info (usefull for versioning).\n" + "\n" + "-v --version Show version information.\n" + "-V --vernum Show version as one number.\n"); +} + +char * +mystrdup(const char *str) +{ + size_t len; + char *copy; + + len = strlen(str) + 1; + copy = malloc(len); + memcpy(copy, str, len); + return (copy); +} + +int main(int argc, char *argv[]) +{ + int c; + FILE *f, *output; + + fileName = NULL; + + if(argc == 1) { + usage(); + return 2; + } + + while ((c = mbo_getopt(argc, argv, OPTIONS, &opt_arg, &opt_ind, 0))!=-1) { + switch (c) { + case 'b': + sFlag = 1; + bFlag = 1; + break; + case 'e': + xlat = asc2ebc; + talx = ebc2asc; + break; + case 's': + sFlag = 1; + break; + case 'd': + dFlag = 1; + break; + case 'f': + vFillIndexes = 0; + break; + case 'i': + iFlag = 1; + break; + case 'o': + outputFileName = opt_arg; + break; + case 'v': + fputs("re2c " PACKAGE_VERSION "\n", stdout); + break; + case 'V': { + int v1, v2, v3; + sscanf(PACKAGE_VERSION, "%d.%d.%d", &v1, &v2, &v3); + fprintf(stdout, "%02d%02d%02d\n", v1, v2, v3); + return 2; + } + case 'h': + case '?': + default: + usage(); + return 2; + } + } + + if (argc == opt_ind + 1) { + fileName = argv[opt_ind]; + } else { + usage(); + return 2; + } + + vUsedLabels = calloc(vUsedLabelAlloc, 1); + if (!vUsedLabels) { + fputs("Out of memory.\n", stderr); + return 1; + } + + /* set up the input stream */ + if(fileName[0] == '-' && fileName[1] == '\0'){ + fileName = ""; + f = stdin; + } else { + if((f = fopen(fileName, "rt")) == NULL){ + fprintf(stderr, "can't open %s\n", fileName); + return 1; + } + } + + /* set up the output stream */ + if (outputFileName == 0 || (fileName[0] == '-' && fileName[1] == '\0')) { + outputFileName = mystrdup(""); + output = stdout; + } else { + int len; + char *src, *dst, *tmp; + + output = fopen(outputFileName, "wt"); + if (!output) { + fprintf(stderr, "can't open %s\n", outputFileName); + return 1; + } + + len = strlen(outputFileName); + tmp = (char*)malloc((len+1)*2); + + for (src = outputFileName, dst = tmp; *src; ++src) + { + if (*src == '\\') + *dst++ = *src; + *dst++ = *src; + } + *dst = '\0'; + + outputFileName = tmp; + } + + parse(f, output); + free(outputFileName); + return 0; +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/mbo_getopt.c b/third-party/yasm/yasm-1.3.0/tools/re2c/mbo_getopt.c new file mode 100755 index 0000000000..f4553dc6c1 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/mbo_getopt.c @@ -0,0 +1,194 @@ +/* + Author: Marcus Boerger +*/ + +#include +#include +#include +#include +#include "mbo_getopt.h" +#define OPTERRCOLON (1) +#define OPTERRNF (2) +#define OPTERRARG (3) + +static int mbo_opt_error(int argc, char * const *argv, int oint, int optchr, int err, int show_err) +{ + if (show_err) + { + fprintf(stderr, "Error in argument %d, char %d: ", oint, optchr + 1); + + switch (err) + { + + case OPTERRCOLON: + fprintf(stderr, ": in flags\n"); + break; + + case OPTERRNF: + fprintf(stderr, "option not found %c\n", argv[oint][optchr]); + break; + + case OPTERRARG: + fprintf(stderr, "no argument for option %c\n", argv[oint][optchr]); + break; + + default: + fprintf(stderr, "unknown\n"); + break; + } + } + + return ('?'); +} + +int mbo_getopt(int argc, char* const *argv, const mbo_opt_struct opts[], char **optarg, int *optind, int show_err) +{ + static int optchr = 0; + static int dash = 0; /* have already seen the - */ + int arg_start = 2; + + int opts_idx = -1; + + if (*optind >= argc) + { + return (EOF); + } + + if (!dash) + { + if ((argv[*optind][0] != '-')) + { + return (EOF); + } + else + { + if (!argv[*optind][1]) + { + /* + * use to specify stdin. Need to let pgm process this and + * the following args + */ + return (EOF); + } + } + } + + if ((argv[*optind][0] == '-') && (argv[*optind][1] == '-')) + { + /* '--' indicates end of args if not followed by a known long option name */ + + while (1) + { + opts_idx++; + + if (opts[opts_idx].opt_char == '-') + { + (*optind)++; + return (EOF); + } + else if (opts[opts_idx].opt_name && !strcmp(&argv[*optind][2], opts[opts_idx].opt_name)) + { + break; + } + } + + optchr = 0; + dash = 1; + arg_start = 2 + strlen(opts[opts_idx].opt_name); + } + + if (!dash) + { + dash = 1; + optchr = 1; + } + + /* Check if the guy tries to do a -: kind of flag */ + if (argv[*optind][optchr] == ':') + { + dash = 0; + (*optind)++; + return (mbo_opt_error(argc, argv, *optind - 1, optchr, OPTERRCOLON, show_err)); + } + + if (opts_idx < 0) + { + while (1) + { + opts_idx++; + + if (opts[opts_idx].opt_char == '-') + { + int errind = *optind; + int errchr = optchr; + + if (!argv[*optind][optchr + 1]) + { + dash = 0; + (*optind)++; + } + else + { + optchr++; + } + + return (mbo_opt_error(argc, argv, errind, errchr, OPTERRNF, show_err)); + } + else if (argv[*optind][optchr] == opts[opts_idx].opt_char) + { + break; + } + } + } + + if (opts[opts_idx].need_param) + { + /* Check for cases where the value of the argument + is in the form - or in the form - */ + dash = 0; + + if (!argv[*optind][arg_start]) + { + (*optind)++; + + if (*optind == argc) + { + return (mbo_opt_error(argc, argv, *optind - 1, optchr, OPTERRARG, show_err)); + } + + *optarg = argv[(*optind)++]; + } + else + { + *optarg = &argv[*optind][arg_start]; + (*optind)++; + } + + return opts[opts_idx].opt_char; + } + else + { + if (arg_start == 2) + { + if (!argv[*optind][optchr + 1]) + { + dash = 0; + (*optind)++; + } + else + { + optchr++; + } + } + else + { + (*optind)++; + } + + return opts[opts_idx].opt_char; + } + + assert(0); + return (0); /* never reached */ +} + diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/mbo_getopt.h b/third-party/yasm/yasm-1.3.0/tools/re2c/mbo_getopt.h new file mode 100755 index 0000000000..8f962fd805 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/mbo_getopt.h @@ -0,0 +1,22 @@ +/* + Author: Marcus Boerger +*/ + +/* Define structure for one recognized option (both single char and long name). + * If short_open is '-' this is the last option. + */ + +#ifndef RE2C_MBO_GETOPT_H_INCLUDE_GUARD_ +#define RE2C_MBO_GETOPT_H_INCLUDE_GUARD_ + +typedef struct mbo_opt_struct +{ + const char opt_char; + const int need_param; + const char * opt_name; +} mbo_opt_struct; + +int mbo_getopt(int argc, char* const *argv, const mbo_opt_struct opts[], char **optarg, int *optind, int show_err); + +#endif + diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/parse.h b/third-party/yasm/yasm-1.3.0/tools/re2c/parse.h new file mode 100644 index 0000000000..92077cacd0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/parse.h @@ -0,0 +1,29 @@ +#ifndef re2c_parse_h +#define re2c_parse_h + +#include +#include "tools/re2c/scanner.h" +#include "tools/re2c/re.h" + +typedef struct Symbol { + struct Symbol *next; + Str name; + RegExp *re; +} Symbol; + +void Symbol_init(Symbol *, const SubStr*); +static Symbol *Symbol_new(const SubStr*); +Symbol *Symbol_find(const SubStr*); + +void line_source(FILE *, unsigned int); +void parse(FILE *, FILE *); + +static Symbol * +Symbol_new(const SubStr *str) +{ + Symbol *r = malloc(sizeof(Symbol)); + Symbol_init(r, str); + return r; +} + +#endif diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/parser.c b/third-party/yasm/yasm-1.3.0/tools/re2c/parser.c new file mode 100644 index 0000000000..02d5c668ec --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/parser.c @@ -0,0 +1,249 @@ +#include +#include +#include +#include +#include "tools/re2c/globals.h" +#include "tools/re2c/parse.h" +#include "tools/re2c/parser.h" + +int yylex(void); +static RegExp *parse_expr(void); +static RegExp *parse_diff(void); +static RegExp *parse_term(void); +static RegExp *parse_factor(void); +static RegExp *parse_primary(void); + +static unsigned int accept; +static RegExp *spec; +static Scanner *in; + +static int curtok, peektok; +yystype yylval; +static yystype peekval; + +#define get_next_token() (curtok = yylex()) + +static void +get_peek_token(void) +{ + yystype temp = yylval; /* structure copy */ + if (peektok != NONE) + Scanner_fatal(in, "more than one token of lookahead?"); + peektok = yylex(); + peekval = yylval; /* structure copy */ + yylval = temp; +} + +static void +yyparse(void) +{ + RegExp *re, *look; + + accept = 0; + spec = NULL; + get_next_token(); + while (curtok != 0) { + switch (curtok) { + case ID: + get_peek_token(); + if (peektok == '=') { + /* ID = expr; */ + Symbol *sym = yylval.symbol; + get_next_token(); /* id */ + get_next_token(); /* = */ + re = parse_expr(); + if (curtok != ';') + Scanner_fatal(in, "missing `;' after regexp"); + get_next_token(); /* ; */ + if (sym->re) + Scanner_fatal(in, "sym already defined"); + sym->re = re; + break; + } + /*@fallthrough@*/ + default: + /* rule: expr [/ expr] CODE */ + re = parse_expr(); + if (!re) + Scanner_fatal(in, "expression syntax error"); + + if (curtok == '/') { + get_next_token(); /* / */ + look = parse_expr(); + } else + look = RegExp_new_NullOp(); + + if (curtok != CODE) + Scanner_fatal(in, "missing code after regexp"); + re = RegExp_new_RuleOp(re, look, yylval.token, accept++); + get_next_token(); /* CODE */ + spec = spec ? mkAlt(spec, re) : re; + } + } +} + +static RegExp * +parse_expr(void) +{ + RegExp *e, *f; + e = parse_diff(); + while (curtok == '|') { + get_next_token(); /* | */ + f = parse_diff(); + e = mkAlt(e, f); + } + return e; +} + +static RegExp * +parse_diff(void) +{ + RegExp *e, *f; + e = parse_term(); + while (curtok == '\\') { + get_next_token(); /* \ */ + f = parse_term(); + e = mkDiff(e, f); + if(!e) + Scanner_fatal(in, "can only difference char sets"); + } + return e; +} + +static RegExp * +parse_term(void) +{ + RegExp *e, *f; + e = parse_factor(); + while ((f = parse_factor())) { + e = RegExp_new_CatOp(e, f); + } + return e; +} + +static RegExp * +parse_factor(void) +{ + RegExp *e; + char ch; + e = parse_primary(); + while (curtok == CLOSE || curtok == CLOSESIZE) { + switch (curtok) { + case CLOSE: + ch = yylval.op; + while (get_next_token() == CLOSE) { + if (ch != yylval.op) + ch = '*'; + } + switch (ch) { + case '*': + e = mkAlt(RegExp_new_CloseOp(e), RegExp_new_NullOp()); + break; + case '+': + e = RegExp_new_CloseOp(e); + break; + case '?': + e = mkAlt(e, RegExp_new_NullOp()); + break; + } + break; + case CLOSESIZE: + e = RegExp_new_CloseVOp(e, yylval.extop.minsize, + yylval.extop.maxsize); + get_next_token(); /* CLOSESIZE */ + break; + default: + Scanner_fatal(in, "parse error"); + break; + } + } + return e; +} + +static RegExp * +parse_primary(void) +{ + RegExp *e; + switch (curtok) { + case ID: + if (!yylval.symbol->re) + Scanner_fatal(in, "can't find symbol"); + e = yylval.symbol->re; + get_next_token(); + break; + case RANGE: + case STRING: + e = yylval.regexp; + get_next_token(); + break; + case '(': + get_next_token(); + e = parse_expr(); + if (curtok != ')') + Scanner_fatal(in, "missing closing parenthesis"); + get_next_token(); + break; + default: + return NULL; + } + return e; +} + +int +yylex(void) +{ + if (peektok != NONE) { + int tok = peektok; + yylval = peekval; + peektok = NONE; + return tok; + } + return Scanner_scan(in); +} + +void line_source(FILE *o, unsigned int line) +{ + char * fnamebuf; + char * token; + + if (iFlag) + return; + fprintf(o, "#line %u \"", line); + if( fileName != NULL ) { + fnamebuf = mystrdup( fileName ); + } else { + fnamebuf = mystrdup( "" ); + } + token = strtok( fnamebuf, "\\" ); + for(;;) { + fprintf(o, "%s", token); + token = strtok( NULL, "\\" ); + if( token == NULL ) break; + fputs("\\\\", o); + } + fputs("\"\n", o); oline++; + free( fnamebuf ); +} + +void parse(FILE *i, FILE *o){ + time_t now; + + time(&now); + + peektok = NONE; + + fputs("/* Generated by re2c 0.9.1-C on ", o); + fprintf(o, "%-24s", ctime(&now)); + fputs(" */\n", o); oline+=2; + + in = Scanner_new(i); + + line_source(o, Scanner_line(in)); + + while(Scanner_echo(in, o)){ + yyparse(); + if(spec) + genCode(o, spec); + line_source(o, Scanner_line(in)); + } +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/parser.h b/third-party/yasm/yasm-1.3.0/tools/re2c/parser.h new file mode 100644 index 0000000000..c433a99d6d --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/parser.h @@ -0,0 +1,33 @@ +#ifndef RE2C_PARSER_H +#define RE2C_PARSER_H + +/* Tokens */ +enum yytokentype { + CLOSESIZE = 258, + CLOSE = 259, + ID = 260, + CODE = 261, + RANGE = 262, + STRING = 263, + NONE = 264 +}; + +#define CLOSESIZE 258 +#define CLOSE 259 +#define ID 260 +#define CODE 261 +#define RANGE 262 +#define STRING 263 +#define NONE 264 + +typedef union { + Symbol *symbol; + RegExp *regexp; + Token *token; + char op; + ExtOp extop; +} yystype; + +extern yystype yylval; + +#endif diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/re.h b/third-party/yasm/yasm-1.3.0/tools/re2c/re.h new file mode 100644 index 0000000000..b45208b950 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/re.h @@ -0,0 +1,191 @@ +#ifndef re2c_re_h +#define re2c_re_h + +#include +#include "tools/re2c/token.h" +#include "tools/re2c/ins.h" + +typedef struct extop { + char op; + int minsize; + int maxsize; +} ExtOp; + +typedef struct CharPtn { + unsigned int card; + struct CharPtn *fix; + struct CharPtn *nxt; +} CharPtn; + +typedef struct CharSet { + CharPtn *fix; + CharPtn *freeHead, **freeTail; + CharPtn *rep[nChars]; + CharPtn ptn[nChars]; +} CharSet; + +typedef struct Range { + struct Range *next; + unsigned int lb, ub; /* [lb,ub) */ +} Range; + +static void +Range_init(Range *r, unsigned int l, unsigned int u) +{ + r->next = NULL; + r->lb = l; + r->ub = u; +} + +static Range * +Range_new(unsigned int l, unsigned int u) +{ + Range *r = malloc(sizeof(Range)); + r->next = NULL; + r->lb = l; + r->ub = u; + return r; +} + +static void +Range_copy(Range *ro, const Range *r) +{ + ro->next = NULL; + ro->lb = r->lb; + ro->ub = r->ub; +} + +static Range * +Range_new_copy(Range *r) +{ + Range *ro = malloc(sizeof(Range)); + ro->next = NULL; + ro->lb = r->lb; + ro->ub = r->ub; + return ro; +} + +void Range_out(FILE *, const Range *); + +typedef enum { + NULLOP = 1, + MATCHOP, + RULEOP, + ALTOP, + CATOP, + CLOSEOP, + CLOSEVOP +} RegExpType; + +typedef struct RegExp { + RegExpType type; + unsigned int size; + union { + /* for MatchOp */ + Range *match; + /* for RuleOp */ + struct { + struct RegExp *exp; + struct RegExp *ctx; + Ins *ins; + unsigned int accept; + Token *code; + unsigned int line; + } RuleOp; + /* for AltOp and CatOp*/ + struct { + struct RegExp *exp1, *exp2; + } AltCatOp; + /* for CloseOp */ + struct RegExp *exp; + /* for CloseVOp*/ + struct { + struct RegExp *exp; + int min; + int max; + } CloseVOp; + } d; +} RegExp; + +static RegExp * +RegExp_isA(RegExp *r, RegExpType t) +{ + return r->type == t ? r : NULL; +} + +void RegExp_split(RegExp*, CharSet*); +void RegExp_calcSize(RegExp*, Char*); +unsigned int RegExp_fixedLength(RegExp*); +void RegExp_compile(RegExp*, Char*, Ins*); +void RegExp_display(RegExp*, FILE *); + +static RegExp * +RegExp_new_NullOp(void) +{ + RegExp *r = malloc(sizeof(RegExp)); + r->type = NULLOP; + return r; +} + +static RegExp * +RegExp_new_MatchOp(Range *m) +{ + RegExp *r = malloc(sizeof(RegExp)); + r->type = MATCHOP; + r->d.match = m; + return r; +} + +RegExp *RegExp_new_RuleOp(RegExp*, RegExp*, Token*, unsigned int); + +static RegExp * +RegExp_new_AltOp(RegExp *e1, RegExp *e2) +{ + RegExp *r = malloc(sizeof(RegExp)); + r->type = ALTOP; + r->d.AltCatOp.exp1 = e1; + r->d.AltCatOp.exp2 = e2; + return r; +} + +static RegExp * +RegExp_new_CatOp(RegExp *e1, RegExp *e2) +{ + RegExp *r = malloc(sizeof(RegExp)); + r->type = CATOP; + r->d.AltCatOp.exp1 = e1; + r->d.AltCatOp.exp2 = e2; + return r; +} + +static RegExp * +RegExp_new_CloseOp(RegExp *e) +{ + RegExp *r = malloc(sizeof(RegExp)); + r->type = CLOSEOP; + r->d.exp = e; + return r; +} + +static RegExp * +RegExp_new_CloseVOp(RegExp *e, int lb, int ub) +{ + RegExp *r = malloc(sizeof(RegExp)); + r->type = CLOSEVOP; + r->d.CloseVOp.exp = e; + r->d.CloseVOp.min = lb; + r->d.CloseVOp.max = ub; + return r; +} + +extern void genCode(FILE *, RegExp*); +extern RegExp *mkDiff(RegExp*, RegExp*); +extern RegExp *mkDot(void); +extern RegExp *strToRE(SubStr); +extern RegExp *strToCaseInsensitiveRE(SubStr); +extern RegExp *ranToRE(SubStr); +extern RegExp *invToRE(SubStr); + +extern RegExp *mkAlt(RegExp*, RegExp*); + +#endif diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/re2c.1 b/third-party/yasm/yasm-1.3.0/tools/re2c/re2c.1 new file mode 100644 index 0000000000..d69f94d6f7 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/re2c.1 @@ -0,0 +1,536 @@ +.ds re \fBre2c\fP +.ds le \fBlex\fP +.ds rx regular expression +.ds lx \fIl\fP-expression +.TH RE2C 1 "8 April 1994" "Version 0.5" +\"$Log: re2c.1,v $ +\"Revision 1.1 2002/04/07 22:27:06 peter +\"Initial revision +\" +\"Revision 1.2 1994/04/16 15:50:32 peterr +\"Fix bug in simple example. +\" +\"Revision 1.1 1994/04/08 15:39:09 peterr +\"Initial revision +\" +.SH NAME +re2c \- convert regular expressions to C/C++ + +.SH SYNOPSIS +\*(re [\fB-esb\fP] \fIname\fP + +.SH DESCRIPTION +\*(re is a preprocessor that generates C-based recognizers from regular +expressions. +The input to \*(re consists of C/C++ source interleaved with +comments of the form \fC/*!re2c\fP ... \fC*/\fP which contain +scanner specifications. +In the output these comments are replaced with code that, when +executed, will find the next input token and then execute +some user-supplied token-specific code. + +For example, given the following code + +.in +3 +.nf +#define NULL ((char*) 0) +char *scan(char *p){ +char *q; +#define YYCTYPE char +#define YYCURSOR p +#define YYLIMIT p +#define YYMARKER q +#define YYFILL(n) +/*!re2c + [0-9]+ {return YYCURSOR;} + [\\000-\\377] {return NULL;} +*/ +} +.fi +.in -3 + +\*(re will generate + +.in +3 +.nf +/* Generated by re2c on Sat Apr 16 11:40:58 1994 */ +#line 1 "simple.re" +#define NULL ((char*) 0) +char *scan(char *p){ +char *q; +#define YYCTYPE char +#define YYCURSOR p +#define YYLIMIT p +#define YYMARKER q +#define YYFILL(n) +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy0; +yy1: ++YYCURSOR; +yy0: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + if(yych <= '/') goto yy4; + if(yych >= ':') goto yy4; +yy2: yych = *++YYCURSOR; + goto yy7; +yy3: +#line 10 + {return YYCURSOR;} +yy4: yych = *++YYCURSOR; +yy5: +#line 11 + {return NULL;} +yy6: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; +yy7: if(yych <= '/') goto yy3; + if(yych <= '9') goto yy6; + goto yy3; +} +#line 12 + +} +.fi +.in -3 + +.SH OPTIONS +\*(re provides the following options: +.TP +\fB-e\fP +Cross-compile from an ASCII platform to an EBCDIC one. +.TP +\fB-s\fP +Generate nested \fCif\fPs for some \fCswitch\fPes. Many compilers need this +assist to generate better code. +.TP +\fB-b\fP +Implies \fB-s\fP. Use bit vectors as well in the attempt to coax better +code out of the compiler. Most useful for specifications with more than a +few keywords (e.g. for most programming languages). + +.SH "INTERFACE CODE" +Unlike other scanner generators, \*(re does not generate complete scanners: +the user must supply some interface code. +In particular, the user must define the following macros: +.TP +\fCYYCHAR\fP +Type used to hold an input symbol. +Usually \fCchar\fP or \fCunsigned char\fP. +.TP +\fCYYCURSOR\fP +\*(lx of type \fC*YYCHAR\fP that points to the current input symbol. +The generated code advances \fCYYCURSOR\fP as symbols are matched. +On entry, \fCYYCURSOR\fP is assumed to point to the first character of the +current token. On exit, \fCYYCURSOR\fP will point to the first character of +the following token. +.TP +\fCYLIMIT\fP +Expression of type \fC*YYCHAR\fP that marks the end of the buffer +(\fCYLIMIT[-1]\fP is the last character in the buffer). +The generated code repeatedly compares \fCYYCURSOR\fP to \fCYLIMIT\fP +to determine when the buffer needs (re)filling. +.TP +\fCYYMARKER\fP +\*(lx of type \fC*YYCHAR\fP. +The generated code saves backtracking information in \fCYYMARKER\fP. +.TP +\fCYYFILL(\fP\fIn\fP\fC)\fP +The generated code "calls" \fCYYFILL\fP when the buffer needs +(re)filling: at least \fIn\fP additional characters should +be provided. \fCYYFILL\fP should adjust \fCYYCURSOR\fP, \fCYYLIMIT\fP and +\fCYYMARKER\fP as needed. Note that for typical programming languages +\fIn\fP will be the length of the longest keyword plus one. + +.SH "SCANNER SPECIFICATIONS" +Each scanner specification consists of a set of \fIrules\fP and name +definitions. +Rules consist of a regular expression along with a block of C/C++ code that +is to be executed when the associated regular expression is matched. +Name definitions are of the form +``\fIname\fP \fC=\fP \fIregular expression\fP\fC;\fP''. + +.SH "SUMMARY OF RE2C REGULAR EXPRESSIONS" +.TP +\fC"foo"\fP +the literal string \fCfoo\fP. +ANSI-C escape sequences can be used. +.TP +\fC[xyz]\fP +a "character class"; in this case, +the \*(rx matches either an '\fCx\fP', a '\fCy\fP', or a '\fCz\fP'. +.TP +\fC[abj-oZ]\fP +a "character class" with a range in it; +matches an '\fCa\fP', a '\fCb\fP', any letter from '\fCj\fP' through '\fCo\fP', +or a '\fCZ\fP'. +.TP +\fIr\fP\fC\e\fP\fIs\fP +match any \fIr\fP which isn't an \fIs\fP. \fIr\fP and \fIs\fP must be regular expressions +which can be expressed as character classes. +.TP +\fIr\fP\fC*\fP +zero or more \fIr\fP's, where \fIr\fP is any regular expression +.TP +\fC\fIr\fP\fC+\fP +one or more \fIr\fP's +.TP +\fC\fIr\fP\fC?\fP +zero or one \fIr\fP's (that is, "an optional \fIr\fP") +.TP +name +the expansion of the "name" definition (see above) +.TP +\fC(\fP\fIr\fP\fC)\fP +an \fIr\fP; parentheses are used to override precedence +(see below) +.TP +\fIrs\fP +an \fIr\fP followed by an \fIs\fP ("concatenation") +.TP +\fIr\fP\fC|\fP\fIs\fP +either an \fIr\fP or an \fIs\fP +.TP +\fIr\fP\fC/\fP\fIs\fP +an \fIr\fP but only if it is followed by an \fIs\fP. The s is not part of +the matched text. This type of \*(rx is called "trailing context". +.LP +The regular expressions listed above are grouped according to +precedence, from highest precedence at the top to lowest at the bottom. +Those grouped together have equal precedence. + +.SH "A LARGER EXAMPLE" +.LP +.in +3 +.nf +#include +#include +#include +#include + +#define ADDEQ 257 +#define ANDAND 258 +#define ANDEQ 259 +#define ARRAY 260 +#define ASM 261 +#define AUTO 262 +#define BREAK 263 +#define CASE 264 +#define CHAR 265 +#define CONST 266 +#define CONTINUE 267 +#define DECR 268 +#define DEFAULT 269 +#define DEREF 270 +#define DIVEQ 271 +#define DO 272 +#define DOUBLE 273 +#define ELLIPSIS 274 +#define ELSE 275 +#define ENUM 276 +#define EQL 277 +#define EXTERN 278 +#define FCON 279 +#define FLOAT 280 +#define FOR 281 +#define FUNCTION 282 +#define GEQ 283 +#define GOTO 284 +#define ICON 285 +#define ID 286 +#define IF 287 +#define INCR 288 +#define INT 289 +#define LEQ 290 +#define LONG 291 +#define LSHIFT 292 +#define LSHIFTEQ 293 +#define MODEQ 294 +#define MULEQ 295 +#define NEQ 296 +#define OREQ 297 +#define OROR 298 +#define POINTER 299 +#define REGISTER 300 +#define RETURN 301 +#define RSHIFT 302 +#define RSHIFTEQ 303 +#define SCON 304 +#define SHORT 305 +#define SIGNED 306 +#define SIZEOF 307 +#define STATIC 308 +#define STRUCT 309 +#define SUBEQ 310 +#define SWITCH 311 +#define TYPEDEF 312 +#define UNION 313 +#define UNSIGNED 314 +#define VOID 315 +#define VOLATILE 316 +#define WHILE 317 +#define XOREQ 318 +#define EOI 319 + +typedef unsigned int uint; +typedef unsigned char uchar; + +#define BSIZE 8192 + +#define YYCTYPE uchar +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL(n) {cursor = fill(s, cursor);} + +#define RET(i) {s->cur = cursor; return i;} + +typedef struct Scanner { + int fd; + uchar *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof; + uint line; +} Scanner; + +uchar *fill(Scanner *s, uchar *cursor){ + if(!s->eof){ + uint cnt = s->tok - s->bot; + if(cnt){ + memcpy(s->bot, s->tok, s->lim - s->tok); + s->tok = s->bot; + s->ptr -= cnt; + cursor -= cnt; + s->pos -= cnt; + s->lim -= cnt; + } + if((s->top - s->lim) < BSIZE){ + uchar *buf = (uchar*) + malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar)); + memcpy(buf, s->tok, s->lim - s->tok); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + cursor = &buf[cursor - s->bot]; + s->pos = &buf[s->pos - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[BSIZE]; + free(s->bot); + s->bot = buf; + } + if((cnt = read(s->fd, (char*) s->lim, BSIZE)) != BSIZE){ + s->eof = &s->lim[cnt]; *(s->eof)++ = '\\n'; + } + s->lim += cnt; + } + return cursor; +} + +int scan(Scanner *s){ + uchar *cursor = s->cur; +std: + s->tok = cursor; +/*!re2c +any = [\\000-\\377]; +O = [0-7]; +D = [0-9]; +L = [a-zA-Z_]; +H = [a-fA-F0-9]; +E = [Ee] [+-]? D+; +FS = [fFlL]; +IS = [uUlL]*; +ESC = [\\\\] ([abfnrtv?'"\\\\] | "x" H+ | O+); +*/ + +/*!re2c + "/*" { goto comment; } + + "auto" { RET(AUTO); } + "break" { RET(BREAK); } + "case" { RET(CASE); } + "char" { RET(CHAR); } + "const" { RET(CONST); } + "continue" { RET(CONTINUE); } + "default" { RET(DEFAULT); } + "do" { RET(DO); } + "double" { RET(DOUBLE); } + "else" { RET(ELSE); } + "enum" { RET(ENUM); } + "extern" { RET(EXTERN); } + "float" { RET(FLOAT); } + "for" { RET(FOR); } + "goto" { RET(GOTO); } + "if" { RET(IF); } + "int" { RET(INT); } + "long" { RET(LONG); } + "register" { RET(REGISTER); } + "return" { RET(RETURN); } + "short" { RET(SHORT); } + "signed" { RET(SIGNED); } + "sizeof" { RET(SIZEOF); } + "static" { RET(STATIC); } + "struct" { RET(STRUCT); } + "switch" { RET(SWITCH); } + "typedef" { RET(TYPEDEF); } + "union" { RET(UNION); } + "unsigned" { RET(UNSIGNED); } + "void" { RET(VOID); } + "volatile" { RET(VOLATILE); } + "while" { RET(WHILE); } + + L (L|D)* { RET(ID); } + + ("0" [xX] H+ IS?) | ("0" D+ IS?) | (D+ IS?) | + (['] (ESC|any\\[\\n\\\\'])* [']) + { RET(ICON); } + + (D+ E FS?) | (D* "." D+ E? FS?) | (D+ "." D* E? FS?) + { RET(FCON); } + + (["] (ESC|any\\[\\n\\\\"])* ["]) + { RET(SCON); } + + "..." { RET(ELLIPSIS); } + ">>=" { RET(RSHIFTEQ); } + "<<=" { RET(LSHIFTEQ); } + "+=" { RET(ADDEQ); } + "-=" { RET(SUBEQ); } + "*=" { RET(MULEQ); } + "/=" { RET(DIVEQ); } + "%=" { RET(MODEQ); } + "&=" { RET(ANDEQ); } + "^=" { RET(XOREQ); } + "|=" { RET(OREQ); } + ">>" { RET(RSHIFT); } + "<<" { RET(LSHIFT); } + "++" { RET(INCR); } + "--" { RET(DECR); } + "->" { RET(DEREF); } + "&&" { RET(ANDAND); } + "||" { RET(OROR); } + "<=" { RET(LEQ); } + ">=" { RET(GEQ); } + "==" { RET(EQL); } + "!=" { RET(NEQ); } + ";" { RET(';'); } + "{" { RET('{'); } + "}" { RET('}'); } + "," { RET(','); } + ":" { RET(':'); } + "=" { RET('='); } + "(" { RET('('); } + ")" { RET(')'); } + "[" { RET('['); } + "]" { RET(']'); } + "." { RET('.'); } + "&" { RET('&'); } + "!" { RET('!'); } + "~" { RET('~'); } + "-" { RET('-'); } + "+" { RET('+'); } + "*" { RET('*'); } + "/" { RET('/'); } + "%" { RET('%'); } + "<" { RET('<'); } + ">" { RET('>'); } + "^" { RET('^'); } + "|" { RET('|'); } + "?" { RET('?'); } + + + [ \\t\\v\\f]+ { goto std; } + + "\\n" + { + if(cursor == s->eof) RET(EOI); + s->pos = cursor; s->line++; + goto std; + } + + any + { + printf("unexpected character: %c\\n", *s->tok); + goto std; + } +*/ + +comment: +/*!re2c + "*/" { goto std; } + "\\n" + { + if(cursor == s->eof) RET(EOI); + s->tok = s->pos = cursor; s->line++; + goto comment; + } + any { goto comment; } +*/ +} + +main(){ + Scanner in; + int t; + memset((char*) &in, 0, sizeof(in)); + in.fd = 0; + while((t = scan(&in)) != EOI){ +/* + printf("%d\\t%.*s\\n", t, in.cur - in.tok, in.tok); + printf("%d\\n", t); +*/ + } + close(in.fd); +} +.fi +.in -3 + +.SH "SEE ALSO" +.LP +flex(1), lex(1). + +.SH FEATURES +.LP +\*(re does not provide a default action: +the generated code assumes that the input +will consist of a sequence of tokens. +Typically this can be dealt with by adding a rule such as the one for +unexpected characters in the example above. +.LP +The user must arrange for a sentinel token to appear at the end of input +(and provide a rule for matching it): +\*(re does not provide an \fC<>\fP expression. +If the source is from a null-byte terminated string, a +rule matching a null character will suffice. If the source is from a +file then the approach taken in the example can be used: pad the input with +a newline (or some other character that can't appear within another token); +upon recognizing such a character check to see if it is the sentinel +and act accordingly. +.LP +\*(re does not provide start conditions: use a separate scanner +specification for each start condition (as illustrated in the above example). +.LP +No [^x]. Use difference instead. +.SH BUGS +.LP +Only fixed length trailing context can be handled. +.LP +The maximum value appearing as a parameter \fIn\fP to \fCYYFILL\fP is not +provided to the generated code (this value is needed for constructing +the interface code). +Note that this value is usually relatively small: for +typical programming languages \fIn\fP will be the length of the longest +keyword plus one. +.LP +Difference only works for character sets. +.LP +The \*(re internal algorithms need documentation. + +.SH AUTHOR +.LP +Please send bug reports, fixes and feedback to: +.LP +.nf +Peter Bumbulis +Computer Systems Group +University of Waterloo +Waterloo, Ontario +N2L 3G1 +Internet: peterr@csg.uwaterloo.ca +.fi diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/scanner.c b/third-party/yasm/yasm-1.3.0/tools/re2c/scanner.c new file mode 100644 index 0000000000..034c935bd9 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/scanner.c @@ -0,0 +1,748 @@ +/* Generated by re2c 0.9.1-C on Sun Oct 9 22:15:58 2005 + */ +#line 1 "scanner.re" +#include +#include +#include "tools/re2c/scanner.h" +#include "tools/re2c/parse.h" +#include "tools/re2c/globals.h" +#include "tools/re2c/parser.h" + +#ifndef MAX +#define MAX(a,b) (((a)>(b))?(a):(b)) +#endif + +#define BSIZE 8192 + +#define YYCTYPE unsigned char +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL(n) {cursor = fill(s, cursor);} + +#define RETURN(i) {s->cur = cursor; return i;} + +static unsigned char *fill(Scanner*, unsigned char*); + +void +Scanner_init(Scanner *s, FILE *i) +{ + s->in = i; + s->bot = s->tok = s->ptr = s->cur = s->pos = s->lim = s->top = + s->eof = NULL; + s->tchar = s->tline = 0; + s->cline = 1; +} + +static unsigned char * +fill(Scanner *s, unsigned char *cursor) +{ + if(!s->eof){ + unsigned int cnt = s->tok - s->bot; + if(cnt){ + memcpy(s->bot, s->tok, s->lim - s->tok); + s->tok = s->bot; + s->ptr -= cnt; + cursor -= cnt; + s->pos -= cnt; + s->lim -= cnt; + } + if((s->top - s->lim) < BSIZE){ + unsigned char *buf = malloc(((s->lim - s->bot) + BSIZE) + 1); + memcpy(buf, s->tok, s->lim - s->tok); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + cursor = &buf[cursor - s->bot]; + s->pos = &buf[s->pos - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[BSIZE]; + if (s->bot) + free(s->bot); + s->bot = buf; + } + if((cnt = fread(s->lim, 1, BSIZE, s->in)) != BSIZE){ + s->eof = &s->lim[cnt]; *s->eof++ = '\0'; + } + s->lim += cnt; + } + return cursor; +} + +#line 79 "scanner.re" + + +int +Scanner_echo(Scanner *s, FILE *out) +{ + unsigned char *cursor = s->cur; + int ignore_eoc = 0; + + /* Catch EOF */ + if (s->eof && cursor == s->eof) + return 0; + + s->tok = cursor; +echo: + +#line 87 "scanner.c" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy0; + ++YYCURSOR; +yy0: + if((YYLIMIT - YYCURSOR) < 11) YYFILL(11); + yych = *YYCURSOR; + if(yych <= ')'){ + if(yych <= '\000') goto yy7; + if(yych == '\n') goto yy5; + goto yy9; + } else { + if(yych <= '*') goto yy4; + if(yych != '/') goto yy9; + goto yy2; + } +yy2: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if(yych == '*') goto yy12; + goto yy3; +yy3: +#line 117 "scanner.re" +{ goto echo; } +#line 112 "scanner.c" +yy4: yych = *++YYCURSOR; + if(yych == '/') goto yy10; + goto yy3; +yy5: yych = *++YYCURSOR; + goto yy6; +yy6: +#line 112 "scanner.re" +{ fwrite(s->tok, 1, cursor - s->tok, out); + s->tok = s->pos = cursor; s->cline++; oline++; + goto echo; } +#line 123 "scanner.c" +yy7: yych = *++YYCURSOR; + goto yy8; +yy8: +#line 115 "scanner.re" +{ fwrite(s->tok, 1, cursor - s->tok - 1, out); /* -1 so we don't write out the \0 */ + if(cursor == s->eof) { RETURN(0); } } +#line 130 "scanner.c" +yy9: yych = *++YYCURSOR; + goto yy3; +yy10: yych = *++YYCURSOR; + goto yy11; +yy11: +#line 103 "scanner.re" +{ + if (ignore_eoc) { + ignore_eoc = 0; + } else { + fwrite(s->tok, 1, cursor - s->tok, out); + } + s->tok = s->pos = cursor; + goto echo; + } +#line 146 "scanner.c" +yy12: yych = *++YYCURSOR; + if(yych == '!') goto yy14; + goto yy13; +yy13: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy3; + } +yy14: yych = *++YYCURSOR; + if(yych == 'm') goto yy15; + if(yych == 'r') goto yy16; + goto yy13; +yy15: yych = *++YYCURSOR; + if(yych == 'a') goto yy21; + goto yy13; +yy16: yych = *++YYCURSOR; + if(yych != 'e') goto yy13; + goto yy17; +yy17: yych = *++YYCURSOR; + if(yych != '2') goto yy13; + goto yy18; +yy18: yych = *++YYCURSOR; + if(yych != 'c') goto yy13; + goto yy19; +yy19: yych = *++YYCURSOR; + goto yy20; +yy20: +#line 94 "scanner.re" +{ fwrite(s->tok, 1, &cursor[-7] - s->tok, out); + s->tok = cursor; + RETURN(1); } +#line 177 "scanner.c" +yy21: yych = *++YYCURSOR; + if(yych != 'x') goto yy13; + goto yy22; +yy22: yych = *++YYCURSOR; + if(yych != ':') goto yy13; + goto yy23; +yy23: yych = *++YYCURSOR; + if(yych != 'r') goto yy13; + goto yy24; +yy24: yych = *++YYCURSOR; + if(yych != 'e') goto yy13; + goto yy25; +yy25: yych = *++YYCURSOR; + if(yych != '2') goto yy13; + goto yy26; +yy26: yych = *++YYCURSOR; + if(yych != 'c') goto yy13; + goto yy27; +yy27: yych = *++YYCURSOR; + goto yy28; +yy28: +#line 97 "scanner.re" +{ + fprintf(out, "#define YYMAXFILL %u\n", maxFill); + s->tok = s->pos = cursor; + ignore_eoc = 1; + goto echo; + } +#line 206 "scanner.c" +} +#line 118 "scanner.re" + +} + + +int +Scanner_scan(Scanner *s) +{ + unsigned char *cursor = s->cur; + unsigned int depth; + +scan: + s->tchar = cursor - s->pos; + s->tline = s->cline; + s->tok = cursor; + +#line 224 "scanner.c" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy29; + ++YYCURSOR; +yy29: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + if(yych <= '/'){ + if(yych <= '"'){ + if(yych <= '\n'){ + if(yych <= '\b') goto yy53; + if(yych <= '\t') goto yy47; + goto yy49; + } else { + if(yych == ' ') goto yy47; + if(yych <= '!') goto yy53; + goto yy37; + } + } else { + if(yych <= '*'){ + if(yych <= '&') goto yy53; + if(yych <= '\'') goto yy39; + if(yych <= ')') goto yy43; + goto yy35; + } else { + if(yych <= '+') goto yy44; + if(yych <= '-') goto yy53; + if(yych <= '.') goto yy51; + goto yy33; + } + } + } else { + if(yych <= '@'){ + if(yych <= '<'){ + if(yych == ';') goto yy43; + goto yy53; + } else { + if(yych <= '=') goto yy43; + if(yych == '?') goto yy44; + goto yy53; + } + } else { + if(yych <= '`'){ + if(yych <= 'Z') goto yy45; + if(yych <= '[') goto yy41; + if(yych <= '\\') goto yy43; + goto yy53; + } else { + if(yych <= 'z') goto yy45; + if(yych <= '{') goto yy31; + if(yych <= '|') goto yy43; + goto yy53; + } + } + } +yy31: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if(yych <= '/') goto yy32; + if(yych <= '9') goto yy84; + goto yy32; +yy32: +#line 133 "scanner.re" +{ depth = 1; + goto code; + } +#line 291 "scanner.c" +yy33: yych = *++YYCURSOR; + if(yych == '*') goto yy82; + goto yy34; +yy34: +#line 163 "scanner.re" +{ RETURN(*s->tok); } +#line 298 "scanner.c" +yy35: yych = *++YYCURSOR; + if(yych == '/') goto yy80; + goto yy36; +yy36: +#line 165 "scanner.re" +{ yylval.op = *s->tok; + RETURN(CLOSE); } +#line 306 "scanner.c" +yy37: yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if(yych != '\n') goto yy76; + goto yy38; +yy38: +#line 150 "scanner.re" +{ Scanner_fatal(s, "unterminated string constant (missing \")"); } +#line 314 "scanner.c" +yy39: yyaccept = 2; + yych = *(YYMARKER = ++YYCURSOR); + if(yych != '\n') goto yy71; + goto yy40; +yy40: +#line 151 "scanner.re" +{ Scanner_fatal(s, "unterminated string constant (missing ')"); } +#line 322 "scanner.c" +yy41: yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + if(yych == '\n') goto yy42; + if(yych == '^') goto yy62; + goto yy60; +yy42: +#line 161 "scanner.re" +{ Scanner_fatal(s, "unterminated range (missing ])"); } +#line 331 "scanner.c" +yy43: yych = *++YYCURSOR; + goto yy34; +yy44: yych = *++YYCURSOR; + goto yy36; +yy45: yych = *++YYCURSOR; + goto yy58; +yy46: +#line 180 "scanner.re" +{ SubStr substr; + s->cur = cursor; + substr = Scanner_token(s); + yylval.symbol = Symbol_find(&substr); + return ID; } +#line 345 "scanner.c" +yy47: yych = *++YYCURSOR; + goto yy56; +yy48: +#line 186 "scanner.re" +{ goto scan; } +#line 351 "scanner.c" +yy49: yych = *++YYCURSOR; + goto yy50; +yy50: +#line 188 "scanner.re" +{ if(cursor == s->eof) RETURN(0); + s->pos = cursor; s->cline++; + goto scan; + } +#line 360 "scanner.c" +yy51: yych = *++YYCURSOR; + goto yy52; +yy52: +#line 193 "scanner.re" +{ s->cur = cursor; + yylval.regexp = mkDot(); + return RANGE; + } +#line 369 "scanner.c" +yy53: yych = *++YYCURSOR; + goto yy54; +yy54: +#line 198 "scanner.re" +{ fprintf(stderr, "unexpected character: '%c'\n", *s->tok); + goto scan; + } +#line 377 "scanner.c" +yy55: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy56; +yy56: if(yych == '\t') goto yy55; + if(yych == ' ') goto yy55; + goto yy48; +yy57: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy58; +yy58: if(yych <= '@'){ + if(yych <= '/') goto yy46; + if(yych <= '9') goto yy57; + goto yy46; + } else { + if(yych <= 'Z') goto yy57; + if(yych <= '`') goto yy46; + if(yych <= 'z') goto yy57; + goto yy46; + } +yy59: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy60; +yy60: if(yych <= '['){ + if(yych != '\n') goto yy59; + goto yy61; + } else { + if(yych <= '\\') goto yy64; + if(yych <= ']') goto yy65; + goto yy59; + } +yy61: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy32; + case 1: goto yy38; + case 2: goto yy40; + case 3: goto yy42; + } +yy62: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy63; +yy63: if(yych <= '['){ + if(yych == '\n') goto yy61; + goto yy62; + } else { + if(yych <= '\\') goto yy67; + if(yych <= ']') goto yy68; + goto yy62; + } +yy64: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych == '\n') goto yy61; + goto yy59; +yy65: yych = *++YYCURSOR; + goto yy66; +yy66: +#line 157 "scanner.re" +{ s->cur = cursor; + yylval.regexp = ranToRE(Scanner_token(s)); + return RANGE; } +#line 442 "scanner.c" +yy67: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych == '\n') goto yy61; + goto yy62; +yy68: yych = *++YYCURSOR; + goto yy69; +yy69: +#line 153 "scanner.re" +{ s->cur = cursor; + yylval.regexp = invToRE(Scanner_token(s)); + return RANGE; } +#line 455 "scanner.c" +yy70: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy71; +yy71: if(yych <= '&'){ + if(yych == '\n') goto yy61; + goto yy70; + } else { + if(yych <= '\'') goto yy73; + if(yych != '\\') goto yy70; + goto yy72; + } +yy72: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych == '\n') goto yy61; + goto yy70; +yy73: yych = *++YYCURSOR; + goto yy74; +yy74: +#line 146 "scanner.re" +{ s->cur = cursor; + yylval.regexp = strToCaseInsensitiveRE(Scanner_token(s)); + return STRING; } +#line 480 "scanner.c" +yy75: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy76; +yy76: if(yych <= '!'){ + if(yych == '\n') goto yy61; + goto yy75; + } else { + if(yych <= '"') goto yy78; + if(yych != '\\') goto yy75; + goto yy77; + } +yy77: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych == '\n') goto yy61; + goto yy75; +yy78: yych = *++YYCURSOR; + goto yy79; +yy79: +#line 142 "scanner.re" +{ s->cur = cursor; + yylval.regexp = strToRE(Scanner_token(s)); + return STRING; } +#line 505 "scanner.c" +yy80: yych = *++YYCURSOR; + goto yy81; +yy81: +#line 139 "scanner.re" +{ s->tok = cursor; + RETURN(0); } +#line 512 "scanner.c" +yy82: yych = *++YYCURSOR; + goto yy83; +yy83: +#line 136 "scanner.re" +{ depth = 1; + goto comment; } +#line 519 "scanner.c" +yy84: ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + goto yy85; +yy85: if(yych <= '/'){ + if(yych == ',') goto yy88; + goto yy61; + } else { + if(yych <= '9') goto yy84; + if(yych != '}') goto yy61; + goto yy86; + } +yy86: yych = *++YYCURSOR; + goto yy87; +yy87: +#line 168 "scanner.re" +{ yylval.extop.minsize = atoi((char *)s->tok+1); + yylval.extop.maxsize = atoi((char *)s->tok+1); + RETURN(CLOSESIZE); } +#line 539 "scanner.c" +yy88: yych = *++YYCURSOR; + if(yych != '}') goto yy92; + goto yy89; +yy89: yych = *++YYCURSOR; + goto yy90; +yy90: +#line 176 "scanner.re" +{ yylval.extop.minsize = atoi((char *)s->tok+1); + yylval.extop.maxsize = -1; + RETURN(CLOSESIZE); } +#line 550 "scanner.c" +yy91: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy92; +yy92: if(yych <= '/') goto yy61; + if(yych <= '9') goto yy91; + if(yych != '}') goto yy61; + goto yy93; +yy93: yych = *++YYCURSOR; + goto yy94; +yy94: +#line 172 "scanner.re" +{ yylval.extop.minsize = atoi((char *)s->tok+1); + yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)s->tok, ',')+1)); + RETURN(CLOSESIZE); } +#line 566 "scanner.c" +} +#line 201 "scanner.re" + + +code: + +#line 573 "scanner.c" +{ + YYCTYPE yych; + unsigned int yyaccept; + goto yy95; + ++YYCURSOR; +yy95: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + if(yych <= '&'){ + if(yych <= '\n'){ + if(yych <= '\t') goto yy103; + goto yy101; + } else { + if(yych == '"') goto yy105; + goto yy103; + } + } else { + if(yych <= '{'){ + if(yych <= '\'') goto yy106; + if(yych <= 'z') goto yy103; + goto yy99; + } else { + if(yych != '}') goto yy103; + goto yy97; + } + } +yy97: yych = *++YYCURSOR; + goto yy98; +yy98: +#line 205 "scanner.re" +{ if(--depth == 0){ + s->cur = cursor; + yylval.token = Token_new(Scanner_token(s), s->tline); + return CODE; + } + goto code; } +#line 610 "scanner.c" +yy99: yych = *++YYCURSOR; + goto yy100; +yy100: +#line 211 "scanner.re" +{ ++depth; + goto code; } +#line 617 "scanner.c" +yy101: yych = *++YYCURSOR; + goto yy102; +yy102: +#line 213 "scanner.re" +{ if(cursor == s->eof) Scanner_fatal(s, "missing '}'"); + s->pos = cursor; s->cline++; + goto code; + } +#line 626 "scanner.c" +yy103: yych = *++YYCURSOR; + goto yy104; +yy104: +#line 217 "scanner.re" +{ goto code; } +#line 632 "scanner.c" +yy105: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if(yych == '\n') goto yy104; + goto yy112; +yy106: yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if(yych == '\n') goto yy104; + goto yy108; +yy107: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy108; +yy108: if(yych <= '&'){ + if(yych != '\n') goto yy107; + goto yy109; + } else { + if(yych <= '\'') goto yy103; + if(yych == '\\') goto yy110; + goto yy107; + } +yy109: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy104; + } +yy110: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych == '\n') goto yy109; + goto yy107; +yy111: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + goto yy112; +yy112: if(yych <= '!'){ + if(yych == '\n') goto yy109; + goto yy111; + } else { + if(yych <= '"') goto yy103; + if(yych != '\\') goto yy111; + goto yy113; + } +yy113: ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych == '\n') goto yy109; + goto yy111; +} +#line 218 "scanner.re" + + +comment: + +#line 685 "scanner.c" +{ + YYCTYPE yych; + goto yy114; + ++YYCURSOR; +yy114: + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + if(yych <= ')'){ + if(yych == '\n') goto yy119; + goto yy121; + } else { + if(yych <= '*') goto yy116; + if(yych == '/') goto yy118; + goto yy121; + } +yy116: yych = *++YYCURSOR; + if(yych == '/') goto yy124; + goto yy117; +yy117: +#line 232 "scanner.re" +{ goto comment; } +#line 707 "scanner.c" +yy118: yych = *++YYCURSOR; + if(yych == '*') goto yy122; + goto yy117; +yy119: yych = *++YYCURSOR; + goto yy120; +yy120: +#line 228 "scanner.re" +{ if(cursor == s->eof) RETURN(0); + s->tok = s->pos = cursor; s->cline++; + goto comment; + } +#line 719 "scanner.c" +yy121: yych = *++YYCURSOR; + goto yy117; +yy122: yych = *++YYCURSOR; + goto yy123; +yy123: +#line 226 "scanner.re" +{ ++depth; + goto comment; } +#line 728 "scanner.c" +yy124: yych = *++YYCURSOR; + goto yy125; +yy125: +#line 222 "scanner.re" +{ if(--depth == 0) + goto scan; + else + goto comment; } +#line 737 "scanner.c" +} +#line 233 "scanner.re" + +} + +void +Scanner_fatal(Scanner *s, const char *msg) +{ + fprintf(stderr, "line %d, column %d: %s\n", s->tline, s->tchar + 1, msg); + exit(1); +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/scanner.h b/third-party/yasm/yasm-1.3.0/tools/re2c/scanner.h new file mode 100644 index 0000000000..a5720b737a --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/scanner.h @@ -0,0 +1,44 @@ +#ifndef _scanner_h +#define _scanner_h + +#include +#include "tools/re2c/token.h" + +typedef struct Scanner { + FILE *in; + unsigned char *bot, *tok, *ptr, *cur, *pos, *lim, *top, *eof; + unsigned int tchar, tline, cline; +} Scanner; + +void Scanner_init(Scanner*, FILE *); +static Scanner *Scanner_new(FILE *); + +int Scanner_echo(Scanner*, FILE *); +int Scanner_scan(Scanner*); +void Scanner_fatal(Scanner*, const char*); +static SubStr Scanner_token(Scanner*); +static unsigned int Scanner_line(Scanner*); + +static SubStr +Scanner_token(Scanner *s) +{ + SubStr r; + SubStr_init_u(&r, s->tok, s->cur - s->tok); + return r; +} + +static unsigned int +Scanner_line(Scanner *s) +{ + return s->cline; +} + +static Scanner * +Scanner_new(FILE *i) +{ + Scanner *r = malloc(sizeof(Scanner)); + Scanner_init(r, i); + return r; +} + +#endif diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/scanner.re b/third-party/yasm/yasm-1.3.0/tools/re2c/scanner.re new file mode 100644 index 0000000000..423835b6c0 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/scanner.re @@ -0,0 +1,241 @@ +#include +#include +#include "tools/re2c/scanner.h" +#include "tools/re2c/parse.h" +#include "tools/re2c/globals.h" +#include "tools/re2c/parser.h" + +#ifndef MAX +#define MAX(a,b) (((a)>(b))?(a):(b)) +#endif + +#define BSIZE 8192 + +#define YYCTYPE unsigned char +#define YYCURSOR cursor +#define YYLIMIT s->lim +#define YYMARKER s->ptr +#define YYFILL(n) {cursor = fill(s, cursor);} + +#define RETURN(i) {s->cur = cursor; return i;} + +static unsigned char *fill(Scanner*, unsigned char*); + +void +Scanner_init(Scanner *s, FILE *i) +{ + s->in = i; + s->bot = s->tok = s->ptr = s->cur = s->pos = s->lim = s->top = + s->eof = NULL; + s->tchar = s->tline = 0; + s->cline = 1; +} + +static unsigned char * +fill(Scanner *s, unsigned char *cursor) +{ + if(!s->eof){ + unsigned int cnt = s->tok - s->bot; + if(cnt){ + memcpy(s->bot, s->tok, s->lim - s->tok); + s->tok = s->bot; + s->ptr -= cnt; + cursor -= cnt; + s->pos -= cnt; + s->lim -= cnt; + } + if((s->top - s->lim) < BSIZE){ + unsigned char *buf = malloc(((s->lim - s->bot) + BSIZE) + 1); + memcpy(buf, s->tok, s->lim - s->tok); + s->tok = buf; + s->ptr = &buf[s->ptr - s->bot]; + cursor = &buf[cursor - s->bot]; + s->pos = &buf[s->pos - s->bot]; + s->lim = &buf[s->lim - s->bot]; + s->top = &s->lim[BSIZE]; + if (s->bot) + free(s->bot); + s->bot = buf; + } + if((cnt = fread(s->lim, 1, BSIZE, s->in)) != BSIZE){ + s->eof = &s->lim[cnt]; *s->eof++ = '\0'; + } + s->lim += cnt; + } + return cursor; +} + +/*!re2c +zero = "\000"; +any = [\000-\377]; +dot = any \ [\n]; +esc = dot \ [\\]; +istring = "[" "^" ((esc \ [\]]) | "\\" dot)* "]" ; +cstring = "[" ((esc \ [\]]) | "\\" dot)* "]" ; +dstring = "\"" ((esc \ ["] ) | "\\" dot)* "\""; +sstring = "'" ((esc \ ['] ) | "\\" dot)* "'" ; +letter = [a-zA-Z]; +digit = [0-9]; +*/ + +int +Scanner_echo(Scanner *s, FILE *out) +{ + unsigned char *cursor = s->cur; + int ignore_eoc = 0; + + /* Catch EOF */ + if (s->eof && cursor == s->eof) + return 0; + + s->tok = cursor; +echo: +/*!re2c + "/*!re2c" { fwrite(s->tok, 1, &cursor[-7] - s->tok, out); + s->tok = cursor; + RETURN(1); } + "/*!max:re2c" { + fprintf(out, "#define YYMAXFILL %u\n", maxFill); + s->tok = s->pos = cursor; + ignore_eoc = 1; + goto echo; + } + "*" "/" { + if (ignore_eoc) { + ignore_eoc = 0; + } else { + fwrite(s->tok, 1, cursor - s->tok, out); + } + s->tok = s->pos = cursor; + goto echo; + } + "\n" { fwrite(s->tok, 1, cursor - s->tok, out); + s->tok = s->pos = cursor; s->cline++; oline++; + goto echo; } + zero { fwrite(s->tok, 1, cursor - s->tok - 1, out); /* -1 so we don't write out the \0 */ + if(cursor == s->eof) { RETURN(0); } } + any { goto echo; } +*/ +} + + +int +Scanner_scan(Scanner *s) +{ + unsigned char *cursor = s->cur; + unsigned int depth; + +scan: + s->tchar = cursor - s->pos; + s->tline = s->cline; + s->tok = cursor; +/*!re2c + "{" { depth = 1; + goto code; + } + "/*" { depth = 1; + goto comment; } + + "*/" { s->tok = cursor; + RETURN(0); } + + dstring { s->cur = cursor; + yylval.regexp = strToRE(Scanner_token(s)); + return STRING; } + + sstring { s->cur = cursor; + yylval.regexp = strToCaseInsensitiveRE(Scanner_token(s)); + return STRING; } + + "\"" { Scanner_fatal(s, "unterminated string constant (missing \")"); } + "'" { Scanner_fatal(s, "unterminated string constant (missing ')"); } + + istring { s->cur = cursor; + yylval.regexp = invToRE(Scanner_token(s)); + return RANGE; } + + cstring { s->cur = cursor; + yylval.regexp = ranToRE(Scanner_token(s)); + return RANGE; } + + "[" { Scanner_fatal(s, "unterminated range (missing ])"); } + + [()|=;/\\] { RETURN(*s->tok); } + + [*+?] { yylval.op = *s->tok; + RETURN(CLOSE); } + + "{" [0-9]+ "}" { yylval.extop.minsize = atoi((char *)s->tok+1); + yylval.extop.maxsize = atoi((char *)s->tok+1); + RETURN(CLOSESIZE); } + + "{" [0-9]+ "," [0-9]+ "}" { yylval.extop.minsize = atoi((char *)s->tok+1); + yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)s->tok, ',')+1)); + RETURN(CLOSESIZE); } + + "{" [0-9]+ ",}" { yylval.extop.minsize = atoi((char *)s->tok+1); + yylval.extop.maxsize = -1; + RETURN(CLOSESIZE); } + + letter (letter|digit)* { SubStr substr; + s->cur = cursor; + substr = Scanner_token(s); + yylval.symbol = Symbol_find(&substr); + return ID; } + + [ \t]+ { goto scan; } + + "\n" { if(cursor == s->eof) RETURN(0); + s->pos = cursor; s->cline++; + goto scan; + } + + "." { s->cur = cursor; + yylval.regexp = mkDot(); + return RANGE; + } + + any { fprintf(stderr, "unexpected character: '%c'\n", *s->tok); + goto scan; + } +*/ + +code: +/*!re2c + "}" { if(--depth == 0){ + s->cur = cursor; + yylval.token = Token_new(Scanner_token(s), s->tline); + return CODE; + } + goto code; } + "{" { ++depth; + goto code; } + "\n" { if(cursor == s->eof) Scanner_fatal(s, "missing '}'"); + s->pos = cursor; s->cline++; + goto code; + } + dstring | sstring | any { goto code; } +*/ + +comment: +/*!re2c + "*/" { if(--depth == 0) + goto scan; + else + goto comment; } + "/*" { ++depth; + goto comment; } + "\n" { if(cursor == s->eof) RETURN(0); + s->tok = s->pos = cursor; s->cline++; + goto comment; + } + any { goto comment; } +*/ +} + +void +Scanner_fatal(Scanner *s, const char *msg) +{ + fprintf(stderr, "line %d, column %d: %s\n", s->tline, s->tchar + 1, msg); + exit(1); +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/substr.c b/third-party/yasm/yasm-1.3.0/tools/re2c/substr.c new file mode 100644 index 0000000000..c750fb9d3c --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/substr.c @@ -0,0 +1,65 @@ +#include +#include "tools/re2c/substr.h" +#include "tools/re2c/globals.h" + +void +SubStr_out(const SubStr *s, FILE *o) +{ + unsigned int i; + fwrite(s->str, s->len, 1, o); + for (i=0; ilen; i++) + if (s->str[i] == '\n') + oline++; +} + +int +SubStr_eq(const SubStr *s1, const SubStr *s2) +{ + return (s1->len == s2->len && memcmp(s1->str, s2->str, s1->len) == 0); +} + +void +Str_init(Str *r, const SubStr* s) +{ + SubStr_init(r, malloc(sizeof(char)*s->len), s->len); + memcpy(r->str, s->str, s->len); +} + +Str * +Str_new(const SubStr* s) +{ + Str *r = SubStr_new(malloc(sizeof(char)*s->len), s->len); + memcpy(r->str, s->str, s->len); + return r; +} + +void +Str_copy(Str *r, Str* s) +{ + SubStr_init(r, s->str, s->len); + s->str = NULL; + s->len = 0; +} + +Str * +Str_new_copy(Str* s) +{ + Str *r = SubStr_new(s->str, s->len); + s->str = NULL; + s->len = 0; + return r; +} + +Str * +Str_new_empty(void) +{ + return SubStr_new(NULL, 0); +} + + +void Str_delete(Str *s) { + free(s->str); + s->str = (char*)-1; + s->len = (unsigned int)-1; + free(s); +} diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/substr.h b/third-party/yasm/yasm-1.3.0/tools/re2c/substr.h new file mode 100644 index 0000000000..0a19b93901 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/substr.h @@ -0,0 +1,89 @@ +#ifndef re2c_substr_h +#define re2c_substr_h + +#include +#include +#include "tools/re2c/basics.h" + +struct SubStr { + char *str; + unsigned int len; +}; + +typedef struct SubStr SubStr; + +int SubStr_eq(const SubStr *, const SubStr *); + +static void SubStr_init_u(SubStr*, unsigned char*, unsigned int); +static SubStr *SubStr_new_u(unsigned char*, unsigned int); + +static void SubStr_init(SubStr*, char*, unsigned int); +static SubStr *SubStr_new(char*, unsigned int); + +static void SubStr_copy(SubStr*, const SubStr*); +static SubStr *SubStr_new_copy(const SubStr*); + +void SubStr_out(const SubStr*, FILE *); +#define SubStr_delete(x) free(x) + +typedef struct SubStr Str; + +void Str_init(Str*, const SubStr*); +Str *Str_new(const SubStr*); + +void Str_copy(Str*, Str*); +Str *Str_new_copy(Str*); + +Str *Str_new_empty(void); +void Str_destroy(Str *); +void Str_delete(Str *); + +static void +SubStr_init_u(SubStr *r, unsigned char *s, unsigned int l) +{ + r->str = (char*)s; + r->len = l; +} + +static SubStr * +SubStr_new_u(unsigned char *s, unsigned int l) +{ + SubStr *r = malloc(sizeof(SubStr)); + r->str = (char*)s; + r->len = l; + return r; +} + +static void +SubStr_init(SubStr *r, char *s, unsigned int l) +{ + r->str = s; + r->len = l; +} + +static SubStr * +SubStr_new(char *s, unsigned int l) +{ + SubStr *r = malloc(sizeof(SubStr)); + r->str = s; + r->len = l; + return r; +} + +static void +SubStr_copy(SubStr *r, const SubStr *s) +{ + r->str = s->str; + r->len = s->len; +} + +static SubStr * +SubStr_new_copy(const SubStr *s) +{ + SubStr *r = malloc(sizeof(SubStr)); + r->str = s->str; + r->len = s->len; + return r; +} + +#endif diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/token.h b/third-party/yasm/yasm-1.3.0/tools/re2c/token.h new file mode 100644 index 0000000000..d50a46da67 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/token.h @@ -0,0 +1,30 @@ +#ifndef re2c_token_h +#define re2c_token_h + +#include "substr.h" + +typedef struct Token { + Str text; + unsigned int line; +} Token; + +static void Token_init(Token *, SubStr, unsigned int); +static Token *Token_new(SubStr, unsigned int); + +static void +Token_init(Token *r, SubStr t, unsigned int l) +{ + Str_copy(&r->text, &t); + r->line = l; +} + +static Token * +Token_new(SubStr t, unsigned int l) +{ + Token *r = malloc(sizeof(Token)); + Str_init(&r->text, &t); + r->line = l; + return r; +} + +#endif diff --git a/third-party/yasm/yasm-1.3.0/tools/re2c/translate.c b/third-party/yasm/yasm-1.3.0/tools/re2c/translate.c new file mode 100644 index 0000000000..7ba173ea66 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/tools/re2c/translate.c @@ -0,0 +1,61 @@ +#include "tools/re2c/globals.h" + +unsigned char asc2asc[256] = { +0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, +0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, +0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, +0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, +0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, +0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, +0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, +0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, +0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, +0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, +0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf, +0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf, +0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf, +0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf, +0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef, +0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff +}; + +unsigned char *xlat = asc2asc; +unsigned char *talx = asc2asc; + +unsigned char asc2ebc[256] = { /* Based on ISO 8859/1 and Code Page 37 */ +0x00,0x01,0x02,0x03,0x37,0x2d,0x2e,0x2f,0x16,0x05,0x25,0x0b,0x0c,0x0d,0x0e,0x0f, +0x10,0x11,0x12,0x13,0x3c,0x3d,0x32,0x26,0x18,0x19,0x3f,0x27,0x1c,0x1d,0x1e,0x1f, +0x40,0x5a,0x7f,0x7b,0x5b,0x6c,0x50,0x7d,0x4d,0x5d,0x5c,0x4e,0x6b,0x60,0x4b,0x61, +0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0x7a,0x5e,0x4c,0x7e,0x6e,0x6f, +0x7c,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6, +0xd7,0xd8,0xd9,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xba,0xe0,0xbb,0xb0,0x6d, +0x79,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x91,0x92,0x93,0x94,0x95,0x96, +0x97,0x98,0x99,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xc0,0x4f,0xd0,0xa1,0x07, +0x20,0x21,0x22,0x23,0x24,0x15,0x06,0x17,0x28,0x29,0x2a,0x2b,0x2c,0x09,0x0a,0x1b, +0x30,0x31,0x1a,0x33,0x34,0x35,0x36,0x08,0x38,0x39,0x3a,0x3b,0x04,0x14,0x3e,0xff, +0x41,0xaa,0x4a,0xb1,0x9f,0xb2,0x6a,0xb5,0xbd,0xb4,0x9a,0x8a,0x5f,0xca,0xaf,0xbc, +0x90,0x8f,0xea,0xfa,0xbe,0xa0,0xb6,0xb3,0x9d,0xda,0x9b,0x8b,0xb7,0xb8,0xb9,0xab, +0x64,0x65,0x62,0x66,0x63,0x67,0x9e,0x68,0x74,0x71,0x72,0x73,0x78,0x75,0x76,0x77, +0xac,0x69,0xed,0xee,0xeb,0xef,0xec,0xbf,0x80,0xfd,0xfe,0xfb,0xfc,0xad,0x8e,0x59, +0x44,0x45,0x42,0x46,0x43,0x47,0x9c,0x48,0x54,0x51,0x52,0x53,0x58,0x55,0x56,0x57, +0x8c,0x49,0xcd,0xce,0xcb,0xcf,0xcc,0xe1,0x70,0xdd,0xde,0xdb,0xdc,0x8d,0xae,0xdf +}; + +unsigned char ebc2asc[256] = { /* Based on ISO 8859/1 and Code Page 37 */ +0x00,0x01,0x02,0x03,0x9c,0x09,0x86,0x7f,0x97,0x8d,0x8e,0x0b,0x0c,0x0d,0x0e,0x0f, +0x10,0x11,0x12,0x13,0x9d,0x85,0x08,0x87,0x18,0x19,0x92,0x8f,0x1c,0x1d,0x1e,0x1f, +0x80,0x81,0x82,0x83,0x84,0x0a,0x17,0x1b,0x88,0x89,0x8a,0x8b,0x8c,0x05,0x06,0x07, +0x90,0x91,0x16,0x93,0x94,0x95,0x96,0x04,0x98,0x99,0x9a,0x9b,0x14,0x15,0x9e,0x1a, +0x20,0xa0,0xe2,0xe4,0xe0,0xe1,0xe3,0xe5,0xe7,0xf1,0xa2,0x2e,0x3c,0x28,0x2b,0x7c, +0x26,0xe9,0xea,0xeb,0xe8,0xed,0xee,0xef,0xec,0xdf,0x21,0x24,0x2a,0x29,0x3b,0xac, +0x2d,0x2f,0xc2,0xc4,0xc0,0xc1,0xc3,0xc5,0xc7,0xd1,0xa6,0x2c,0x25,0x5f,0x3e,0x3f, +0xf8,0xc9,0xca,0xcb,0xc8,0xcd,0xce,0xcf,0xcc,0x60,0x3a,0x23,0x40,0x27,0x3d,0x22, +0xd8,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0xab,0xbb,0xf0,0xfd,0xde,0xb1, +0xb0,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0xaa,0xba,0xe6,0xb8,0xc6,0xa4, +0xb5,0x7e,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0xa1,0xbf,0xd0,0xdd,0xfe,0xae, +0x5e,0xa3,0xa5,0xb7,0xa9,0xa7,0xb6,0xbc,0xbd,0xbe,0x5b,0x5d,0xaf,0xa8,0xb4,0xd7, +0x7b,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0xad,0xf4,0xf6,0xf2,0xf3,0xf5, +0x7d,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0xb9,0xfb,0xfc,0xf9,0xfa,0xff, +0x5c,0xf7,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0xb2,0xd4,0xd6,0xd2,0xd3,0xd5, +0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0xb3,0xdb,0xdc,0xd9,0xda,0x9f +}; diff --git a/third-party/yasm/yasm-1.3.0/util.h b/third-party/yasm/yasm-1.3.0/util.h new file mode 100644 index 0000000000..634aa328bc --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/util.h @@ -0,0 +1,159 @@ +/* + * YASM utility functions. + * + * Includes standard headers and defines prototypes for replacement functions + * if needed. + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``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 AUTHOR OR OTHER 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. + */ +#ifndef YASM_UTIL_H +#define YASM_UTIL_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +#if defined(HAVE_GNU_C_LIBRARY) || defined(__MINGW32__) || defined(__DJGPP__) + +/* Work around glibc's non-defining of certain things when using gcc -ansi */ +# ifdef __STRICT_ANSI__ +# undef __STRICT_ANSI__ +# endif + +/* Work around glibc's string inlines (in bits/string2.h) if needed */ +# ifdef NO_STRING_INLINES +# define __NO_STRING_INLINES +# endif + +#endif + +#if !defined(lint) && !defined(NDEBUG) +# define NDEBUG +#endif + +#include +#include + +#include +#include +#include +#include + +#ifdef HAVE_STRINGS_H +#include +#endif + +#include +#include + +#ifdef lint +# define _(String) String +#else +# ifdef HAVE_LOCALE_H +# include +# endif + +# ifdef ENABLE_NLS +# include +# define _(String) gettext(String) +# else +# define gettext(Msgid) (Msgid) +# define dgettext(Domainname, Msgid) (Msgid) +# define dcgettext(Domainname, Msgid, Category) (Msgid) +# define textdomain(Domainname) while (0) /* nothing */ +# define bindtextdomain(Domainname, Dirname) while (0) /* nothing */ +# define _(String) (String) +# endif +#endif + +#ifdef gettext_noop +# define N_(String) gettext_noop(String) +#else +# define N_(String) (String) +#endif + +#ifdef HAVE_MERGESORT +#define yasm__mergesort(a, b, c, d) mergesort(a, b, c, d) +#endif + +#ifdef HAVE_STRSEP +#define yasm__strsep(a, b) strsep(a, b) +#endif + +#ifdef HAVE_STRCASECMP +# define yasm__strcasecmp(x, y) strcasecmp(x, y) +# define yasm__strncasecmp(x, y, n) strncasecmp(x, y, n) +#elif HAVE_STRICMP +# define yasm__strcasecmp(x, y) stricmp(x, y) +# define yasm__strncasecmp(x, y, n) strnicmp(x, y, n) +#elif HAVE__STRICMP +# define yasm__strcasecmp(x, y) _stricmp(x, y) +# define yasm__strncasecmp(x, y, n) _strnicmp(x, y, n) +#elif HAVE_STRCMPI +# define yasm__strcasecmp(x, y) strcmpi(x, y) +# define yasm__strncasecmp(x, y, n) strncmpi(x, y, n) +#else +# define USE_OUR_OWN_STRCASECMP +#endif + +#include + +#ifdef WITH_DMALLOC +# include +# define yasm__xstrdup(str) xstrdup(str) +# define yasm_xmalloc(size) xmalloc(size) +# define yasm_xcalloc(count, size) xcalloc(count, size) +# define yasm_xrealloc(ptr, size) xrealloc(ptr, size) +# define yasm_xfree(ptr) xfree(ptr) +#endif + +/* Bit-counting: used primarily by HAMT but also in a few other places. */ +#define BC_TWO(c) (0x1ul << (c)) +#define BC_MSK(c) (((unsigned long)(-1)) / (BC_TWO(BC_TWO(c)) + 1ul)) +#define BC_COUNT(x,c) ((x) & BC_MSK(c)) + (((x) >> (BC_TWO(c))) & BC_MSK(c)) +#define BitCount(d, s) do { \ + d = BC_COUNT(s, 0); \ + d = BC_COUNT(d, 1); \ + d = BC_COUNT(d, 2); \ + d = BC_COUNT(d, 3); \ + d = BC_COUNT(d, 4); \ + } while (0) + +/** Determine if a value is exactly a power of 2. Zero is treated as a power + * of two. + * \param x value + * \return Nonzero if x is a power of 2. + */ +#define is_exp2(x) ((x & (x - 1)) == 0) + +#ifndef NELEMS +/** Get the number of elements in an array. + * \internal + * \param array array + * \return Number of elements. + */ +#define NELEMS(array) (sizeof(array) / sizeof(array[0])) +#endif + +#endif diff --git a/third-party/yasm/yasm-1.3.0/version b/third-party/yasm/yasm-1.3.0/version new file mode 100644 index 0000000000..f0bb29e763 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/version @@ -0,0 +1 @@ +1.3.0 diff --git a/third-party/yasm/yasm-1.3.0/x86insn_gas.gperf b/third-party/yasm/yasm-1.3.0/x86insn_gas.gperf new file mode 100644 index 0000000000..c02358b7cc --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/x86insn_gas.gperf @@ -0,0 +1,2081 @@ +/* Generated by gen_x86_insn.py rHEAD, do not edit */ +%ignore-case +%language=ANSI-C +%compare-strncmp +%readonly-tables +%enum +%struct-type +%define hash-function-name insnprefix_gas_hash +%define lookup-function-name insnprefix_gas_find +struct insnprefix_parse_data; +%% +aaa, onebyte_insn, 1, SUF_Z, 0x37, 0, 0, NOT_64, 0, 0, 0 +aad, aadm_insn, 2, SUF_Z, 0x01, 0, 0, NOT_64, 0, 0, 0 +aam, aadm_insn, 2, SUF_Z, 0x00, 0, 0, NOT_64, 0, 0, 0 +aas, onebyte_insn, 1, SUF_Z, 0x3F, 0, 0, NOT_64, 0, 0, 0 +adc, arith_insn, 22, SUF_Z, 0x10, 0x02, 0, 0, 0, 0, 0 +adcb, arith_insn, 22, SUF_B, 0x10, 0x02, 0, 0, 0, 0, 0 +adcl, arith_insn, 22, SUF_L, 0x10, 0x02, 0, 0, CPU_386, 0, 0 +adcq, arith_insn, 22, SUF_Q, 0x10, 0x02, 0, ONLY_64, 0, 0, 0 +adcw, arith_insn, 22, SUF_W, 0x10, 0x02, 0, 0, 0, 0, 0 +adcx, vex_gpr_ndd_rm_0F38_insn, 2, SUF_Z, 0x66, 0xF6, 0, 0, CPU_ADX, 0, 0 +adcxl, vex_gpr_ndd_rm_0F38_insn, 2, SUF_L, 0x66, 0xF6, 0, 0, CPU_ADX, 0, 0 +adcxq, vex_gpr_ndd_rm_0F38_insn, 2, SUF_Q, 0x66, 0xF6, 0, ONLY_64, CPU_ADX, 0, 0 +add, arith_insn, 22, SUF_Z, 0x00, 0x00, 0, 0, 0, 0, 0 +addb, arith_insn, 22, SUF_B, 0x00, 0x00, 0, 0, 0, 0, 0 +addl, arith_insn, 22, SUF_L, 0x00, 0x00, 0, 0, CPU_386, 0, 0 +addpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x58, 0, 0, CPU_SSE2, 0, 0 +addps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x58, 0, 0, CPU_SSE, 0, 0 +addq, arith_insn, 22, SUF_Q, 0x00, 0x00, 0, ONLY_64, 0, 0, 0 +addr16, NULL, X86_ADDRSIZE>>8, 0x10, 0, 0, 0, 0, 0, 0, 0 +addr32, NULL, X86_ADDRSIZE>>8, 0x20, 0, 0, 0, 0, 0, 0, 0 +addr64, NULL, X86_ADDRSIZE>>8, 0x40, 0, 0, 0, ONLY_64, 0, 0, 0 +addsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x58, 0, 0, CPU_SSE2, 0, 0 +addss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x58, 0, 0, CPU_SSE, 0, 0 +addsubpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0xD0, 0, 0, CPU_SSE3, 0, 0 +addsubps, xmm_xmm128_insn, 2, SUF_Z, 0xF2, 0xD0, 0, 0, CPU_SSE3, 0, 0 +addw, arith_insn, 22, SUF_W, 0x00, 0x00, 0, 0, 0, 0, 0 +adox, vex_gpr_ndd_rm_0F38_insn, 2, SUF_Z, 0xF3, 0xF6, 0, 0, CPU_ADX, 0, 0 +adoxl, vex_gpr_ndd_rm_0F38_insn, 2, SUF_L, 0xF3, 0xF6, 0, 0, CPU_ADX, 0, 0 +adoxq, vex_gpr_ndd_rm_0F38_insn, 2, SUF_Q, 0xF3, 0xF6, 0, ONLY_64, CPU_ADX, 0, 0 +adword, NULL, X86_ADDRSIZE>>8, 0x20, 0, 0, 0, 0, 0, 0, 0 +aesdec, aes_insn, 2, SUF_Z, 0x38, 0xDE, 0, 0, CPU_AVX, 0, 0 +aesdeclast, aes_insn, 2, SUF_Z, 0x38, 0xDF, 0, 0, CPU_AVX, 0, 0 +aesenc, aes_insn, 2, SUF_Z, 0x38, 0xDC, 0, 0, CPU_AVX, 0, 0 +aesenclast, aes_insn, 2, SUF_Z, 0x38, 0xDD, 0, 0, CPU_AVX, 0, 0 +aesimc, aesimc_insn, 1, SUF_Z, 0x38, 0xDB, 0, 0, CPU_AES, 0, 0 +aeskeygenassist, aes_imm_insn, 1, SUF_Z, 0x3A, 0xDF, 0, 0, CPU_AES, 0, 0 +and, arith_insn, 22, SUF_Z, 0x20, 0x04, 0, 0, 0, 0, 0 +andb, arith_insn, 22, SUF_B, 0x20, 0x04, 0, 0, 0, 0, 0 +andl, arith_insn, 22, SUF_L, 0x20, 0x04, 0, 0, CPU_386, 0, 0 +andn, vex_gpr_reg_nds_rm_0F_insn, 2, SUF_Z, 0x00, 0x38, 0xF2, ONLY_AVX, CPU_BMI1, 0, 0 +andnl, vex_gpr_reg_nds_rm_0F_insn, 2, SUF_L, 0x00, 0x38, 0xF2, ONLY_AVX, CPU_BMI1, 0, 0 +andnpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x55, 0, 0, CPU_SSE2, 0, 0 +andnps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x55, 0, 0, CPU_SSE, 0, 0 +andnq, vex_gpr_reg_nds_rm_0F_insn, 2, SUF_Q, 0x00, 0x38, 0xF2, ONLY_64|ONLY_AVX, CPU_BMI1, 0, 0 +andpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x54, 0, 0, CPU_SSE2, 0, 0 +andps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x54, 0, 0, CPU_SSE, 0, 0 +andq, arith_insn, 22, SUF_Q, 0x20, 0x04, 0, ONLY_64, 0, 0, 0 +andw, arith_insn, 22, SUF_W, 0x20, 0x04, 0, 0, 0, 0, 0 +aqword, NULL, X86_ADDRSIZE>>8, 0x40, 0, 0, 0, ONLY_64, 0, 0, 0 +arpl, arpl_insn, 1, SUF_Z, 0, 0, 0, NOT_64, CPU_286, CPU_Prot, 0 +arplw, arpl_insn, 1, SUF_W, 0, 0, 0, NOT_64, CPU_286, CPU_Prot, 0 +aword, NULL, X86_ADDRSIZE>>8, 0x10, 0, 0, 0, 0, 0, 0, 0 +bextr, bextr_insn, 4, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_386, CPU_BMI1, 0 +bextrl, bextr_insn, 4, SUF_L, 0, 0, 0, ONLY_AVX, CPU_386, CPU_BMI1, 0 +bextrq, bextr_insn, 4, SUF_Q, 0, 0, 0, ONLY_64|ONLY_AVX, CPU_BMI1, 0, 0 +blcfill, xop_gpr_reg_rm_09_insn, 2, SUF_Z, 0x01, 0x01, 0, 0, CPU_386, CPU_TBM, 0 +blcfilll, xop_gpr_reg_rm_09_insn, 2, SUF_L, 0x01, 0x01, 0, 0, CPU_386, CPU_TBM, 0 +blcfillq, xop_gpr_reg_rm_09_insn, 2, SUF_Q, 0x01, 0x01, 0, ONLY_64, CPU_TBM, 0, 0 +blci, xop_gpr_reg_rm_09_insn, 2, SUF_Z, 0x02, 0x06, 0, 0, CPU_386, CPU_TBM, 0 +blcic, xop_gpr_reg_rm_09_insn, 2, SUF_Z, 0x01, 0x05, 0, 0, CPU_386, CPU_TBM, 0 +blcicl, xop_gpr_reg_rm_09_insn, 2, SUF_L, 0x01, 0x05, 0, 0, CPU_386, CPU_TBM, 0 +blcicq, xop_gpr_reg_rm_09_insn, 2, SUF_Q, 0x01, 0x05, 0, ONLY_64, CPU_TBM, 0, 0 +blcil, xop_gpr_reg_rm_09_insn, 2, SUF_L, 0x02, 0x06, 0, 0, CPU_386, CPU_TBM, 0 +blciq, xop_gpr_reg_rm_09_insn, 2, SUF_Q, 0x02, 0x06, 0, ONLY_64, CPU_TBM, 0, 0 +blcmsk, xop_gpr_reg_rm_09_insn, 2, SUF_Z, 0x02, 0x01, 0, 0, CPU_386, CPU_TBM, 0 +blcmskl, xop_gpr_reg_rm_09_insn, 2, SUF_L, 0x02, 0x01, 0, 0, CPU_386, CPU_TBM, 0 +blcmskq, xop_gpr_reg_rm_09_insn, 2, SUF_Q, 0x02, 0x01, 0, ONLY_64, CPU_TBM, 0, 0 +blcs, xop_gpr_reg_rm_09_insn, 2, SUF_Z, 0x01, 0x03, 0, 0, CPU_386, CPU_TBM, 0 +blcsl, xop_gpr_reg_rm_09_insn, 2, SUF_L, 0x01, 0x03, 0, 0, CPU_386, CPU_TBM, 0 +blcsq, xop_gpr_reg_rm_09_insn, 2, SUF_Q, 0x01, 0x03, 0, ONLY_64, CPU_TBM, 0, 0 +blendpd, sse4imm_insn, 2, SUF_Z, 0x0D, 0, 0, 0, CPU_SSE41, 0, 0 +blendps, sse4imm_insn, 2, SUF_Z, 0x0C, 0, 0, 0, CPU_SSE41, 0, 0 +blendvpd, sse4xmm0_insn, 2, SUF_Z, 0x15, 0, 0, 0, CPU_SSE41, 0, 0 +blendvps, sse4xmm0_insn, 2, SUF_Z, 0x14, 0, 0, 0, CPU_SSE41, 0, 0 +blsfill, xop_gpr_reg_rm_09_insn, 2, SUF_Z, 0x01, 0x02, 0, 0, CPU_386, CPU_TBM, 0 +blsfilll, xop_gpr_reg_rm_09_insn, 2, SUF_L, 0x01, 0x02, 0, 0, CPU_386, CPU_TBM, 0 +blsfillq, xop_gpr_reg_rm_09_insn, 2, SUF_Q, 0x01, 0x02, 0, ONLY_64, CPU_TBM, 0, 0 +blsi, vex_gpr_ndd_rm_0F38_regext_insn, 2, SUF_Z, 0x00, 0xF3, 0x03, ONLY_AVX, CPU_BMI1, 0, 0 +blsic, xop_gpr_reg_rm_09_insn, 2, SUF_Z, 0x01, 0x06, 0, 0, CPU_386, CPU_TBM, 0 +blsicl, xop_gpr_reg_rm_09_insn, 2, SUF_L, 0x01, 0x06, 0, 0, CPU_386, CPU_TBM, 0 +blsicq, xop_gpr_reg_rm_09_insn, 2, SUF_Q, 0x01, 0x06, 0, ONLY_64, CPU_TBM, 0, 0 +blsil, vex_gpr_ndd_rm_0F38_regext_insn, 2, SUF_L, 0x00, 0xF3, 0x03, ONLY_AVX, CPU_BMI1, 0, 0 +blsiq, vex_gpr_ndd_rm_0F38_regext_insn, 2, SUF_Q, 0x00, 0xF3, 0x03, ONLY_64|ONLY_AVX, CPU_BMI1, 0, 0 +blsmsk, vex_gpr_ndd_rm_0F38_regext_insn, 2, SUF_Z, 0x00, 0xF3, 0x02, ONLY_AVX, CPU_BMI1, 0, 0 +blsmskl, vex_gpr_ndd_rm_0F38_regext_insn, 2, SUF_L, 0x00, 0xF3, 0x02, ONLY_AVX, CPU_BMI1, 0, 0 +blsmskq, vex_gpr_ndd_rm_0F38_regext_insn, 2, SUF_Q, 0x00, 0xF3, 0x02, ONLY_64|ONLY_AVX, CPU_BMI1, 0, 0 +blsr, vex_gpr_ndd_rm_0F38_regext_insn, 2, SUF_Z, 0x00, 0xF3, 0x01, ONLY_AVX, CPU_BMI1, 0, 0 +blsrl, vex_gpr_ndd_rm_0F38_regext_insn, 2, SUF_L, 0x00, 0xF3, 0x01, ONLY_AVX, CPU_BMI1, 0, 0 +blsrq, vex_gpr_ndd_rm_0F38_regext_insn, 2, SUF_Q, 0x00, 0xF3, 0x01, ONLY_64|ONLY_AVX, CPU_BMI1, 0, 0 +bound, bound_insn, 2, SUF_Z, 0, 0, 0, NOT_64, CPU_186, 0, 0 +boundl, bound_insn, 2, SUF_L, 0, 0, 0, NOT_64, CPU_386, 0, 0 +boundw, bound_insn, 2, SUF_W, 0, 0, 0, NOT_64, CPU_186, 0, 0 +bsf, bsfr_insn, 3, SUF_Z, 0xBC, 0, 0, 0, CPU_386, 0, 0 +bsfl, bsfr_insn, 3, SUF_L, 0xBC, 0, 0, 0, CPU_386, 0, 0 +bsfq, bsfr_insn, 3, SUF_Q, 0xBC, 0, 0, ONLY_64, CPU_386, 0, 0 +bsfw, bsfr_insn, 3, SUF_W, 0xBC, 0, 0, 0, CPU_386, 0, 0 +bsr, bsfr_insn, 3, SUF_Z, 0xBD, 0, 0, 0, CPU_386, 0, 0 +bsrl, bsfr_insn, 3, SUF_L, 0xBD, 0, 0, 0, CPU_386, 0, 0 +bsrq, bsfr_insn, 3, SUF_Q, 0xBD, 0, 0, ONLY_64, CPU_386, 0, 0 +bsrw, bsfr_insn, 3, SUF_W, 0xBD, 0, 0, 0, CPU_386, 0, 0 +bswap, bswap_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_486, 0, 0 +bswapl, bswap_insn, 2, SUF_L, 0, 0, 0, 0, CPU_486, 0, 0 +bswapq, bswap_insn, 2, SUF_Q, 0, 0, 0, ONLY_64, 0, 0, 0 +bt, bittest_insn, 6, SUF_Z, 0xA3, 0x04, 0, 0, CPU_386, 0, 0 +btc, bittest_insn, 6, SUF_Z, 0xBB, 0x07, 0, 0, CPU_386, 0, 0 +btcl, bittest_insn, 6, SUF_L, 0xBB, 0x07, 0, 0, CPU_386, 0, 0 +btcq, bittest_insn, 6, SUF_Q, 0xBB, 0x07, 0, ONLY_64, CPU_386, 0, 0 +btcw, bittest_insn, 6, SUF_W, 0xBB, 0x07, 0, 0, CPU_386, 0, 0 +btl, bittest_insn, 6, SUF_L, 0xA3, 0x04, 0, 0, CPU_386, 0, 0 +btq, bittest_insn, 6, SUF_Q, 0xA3, 0x04, 0, ONLY_64, CPU_386, 0, 0 +btr, bittest_insn, 6, SUF_Z, 0xB3, 0x06, 0, 0, CPU_386, 0, 0 +btrl, bittest_insn, 6, SUF_L, 0xB3, 0x06, 0, 0, CPU_386, 0, 0 +btrq, bittest_insn, 6, SUF_Q, 0xB3, 0x06, 0, ONLY_64, CPU_386, 0, 0 +btrw, bittest_insn, 6, SUF_W, 0xB3, 0x06, 0, 0, CPU_386, 0, 0 +bts, bittest_insn, 6, SUF_Z, 0xAB, 0x05, 0, 0, CPU_386, 0, 0 +btsl, bittest_insn, 6, SUF_L, 0xAB, 0x05, 0, 0, CPU_386, 0, 0 +btsq, bittest_insn, 6, SUF_Q, 0xAB, 0x05, 0, ONLY_64, CPU_386, 0, 0 +btsw, bittest_insn, 6, SUF_W, 0xAB, 0x05, 0, 0, CPU_386, 0, 0 +btw, bittest_insn, 6, SUF_W, 0xA3, 0x04, 0, 0, CPU_386, 0, 0 +bzhi, vex_gpr_reg_rm_nds_0F_insn, 2, SUF_Z, 0x00, 0x38, 0xF5, ONLY_AVX, CPU_BMI2, 0, 0 +bzhil, vex_gpr_reg_rm_nds_0F_insn, 2, SUF_L, 0x00, 0x38, 0xF5, ONLY_AVX, CPU_BMI2, 0, 0 +bzhiq, vex_gpr_reg_rm_nds_0F_insn, 2, SUF_Q, 0x00, 0x38, 0xF5, ONLY_64|ONLY_AVX, CPU_BMI2, 0, 0 +call, call_insn, 30, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +calll, call_insn, 30, SUF_L, 0, 0, 0, 0, CPU_386, 0, 0 +callq, call_insn, 30, SUF_Q, 0, 0, 0, ONLY_64, 0, 0, 0 +callw, call_insn, 30, SUF_W, 0, 0, 0, 0, 0, 0, 0 +cbtw, onebyte_insn, 1, SUF_Z, 0x98, 0x10, 0, 0, 0, 0, 0 +cbw, onebyte_insn, 1, SUF_Z, 0x98, 0x10, 0, 0, 0, 0, 0 +cdq, onebyte_insn, 1, SUF_Z, 0x99, 0x20, 0, 0, CPU_386, 0, 0 +cdqe, onebyte_insn, 1, SUF_Z, 0x98, 0x40, 0, ONLY_64, 0, 0, 0 +clac, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xCA, 0, CPU_SMAP, 0, 0 +clc, onebyte_insn, 1, SUF_Z, 0xF8, 0, 0, 0, 0, 0, 0 +cld, onebyte_insn, 1, SUF_Z, 0xFC, 0, 0, 0, 0, 0, 0 +clflush, clflush_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_P3, 0, 0 +clgi, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xDD, 0, CPU_SVM, 0, 0 +cli, onebyte_insn, 1, SUF_Z, 0xFA, 0, 0, 0, 0, 0, 0 +cltd, onebyte_insn, 1, SUF_Z, 0x99, 0x20, 0, 0, CPU_386, 0, 0 +cltq, onebyte_insn, 1, SUF_Z, 0x98, 0x40, 0, ONLY_64, 0, 0, 0 +clts, twobyte_insn, 1, SUF_Z, 0x0F, 0x06, 0, 0, CPU_286, CPU_Priv, 0 +cmc, onebyte_insn, 1, SUF_Z, 0xF5, 0, 0, 0, 0, 0, 0 +cmova, cmovcc_insn, 3, SUF_Z, 0x07, 0, 0, 0, CPU_686, 0, 0 +cmovae, cmovcc_insn, 3, SUF_Z, 0x03, 0, 0, 0, CPU_686, 0, 0 +cmovael, cmovcc_insn, 3, SUF_L, 0x03, 0, 0, 0, CPU_686, 0, 0 +cmovaeq, cmovcc_insn, 3, SUF_Q, 0x03, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovaew, cmovcc_insn, 3, SUF_W, 0x03, 0, 0, 0, CPU_686, 0, 0 +cmoval, cmovcc_insn, 3, SUF_L, 0x07, 0, 0, 0, CPU_686, 0, 0 +cmovaq, cmovcc_insn, 3, SUF_Q, 0x07, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovaw, cmovcc_insn, 3, SUF_W, 0x07, 0, 0, 0, CPU_686, 0, 0 +cmovb, cmovcc_insn, 3, SUF_Z, 0x02, 0, 0, 0, CPU_686, 0, 0 +cmovbe, cmovcc_insn, 3, SUF_Z, 0x06, 0, 0, 0, CPU_686, 0, 0 +cmovbel, cmovcc_insn, 3, SUF_L, 0x06, 0, 0, 0, CPU_686, 0, 0 +cmovbeq, cmovcc_insn, 3, SUF_Q, 0x06, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovbew, cmovcc_insn, 3, SUF_W, 0x06, 0, 0, 0, CPU_686, 0, 0 +cmovbl, cmovcc_insn, 3, SUF_L, 0x02, 0, 0, 0, CPU_686, 0, 0 +cmovbq, cmovcc_insn, 3, SUF_Q, 0x02, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovbw, cmovcc_insn, 3, SUF_W, 0x02, 0, 0, 0, CPU_686, 0, 0 +cmovc, cmovcc_insn, 3, SUF_Z, 0x02, 0, 0, 0, CPU_686, 0, 0 +cmovcl, cmovcc_insn, 3, SUF_L, 0x02, 0, 0, 0, CPU_686, 0, 0 +cmovcq, cmovcc_insn, 3, SUF_Q, 0x02, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovcw, cmovcc_insn, 3, SUF_W, 0x02, 0, 0, 0, CPU_686, 0, 0 +cmove, cmovcc_insn, 3, SUF_Z, 0x04, 0, 0, 0, CPU_686, 0, 0 +cmovel, cmovcc_insn, 3, SUF_L, 0x04, 0, 0, 0, CPU_686, 0, 0 +cmoveq, cmovcc_insn, 3, SUF_Q, 0x04, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovew, cmovcc_insn, 3, SUF_W, 0x04, 0, 0, 0, CPU_686, 0, 0 +cmovg, cmovcc_insn, 3, SUF_Z, 0x0F, 0, 0, 0, CPU_686, 0, 0 +cmovge, cmovcc_insn, 3, SUF_Z, 0x0D, 0, 0, 0, CPU_686, 0, 0 +cmovgel, cmovcc_insn, 3, SUF_L, 0x0D, 0, 0, 0, CPU_686, 0, 0 +cmovgeq, cmovcc_insn, 3, SUF_Q, 0x0D, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovgew, cmovcc_insn, 3, SUF_W, 0x0D, 0, 0, 0, CPU_686, 0, 0 +cmovgl, cmovcc_insn, 3, SUF_L, 0x0F, 0, 0, 0, CPU_686, 0, 0 +cmovgq, cmovcc_insn, 3, SUF_Q, 0x0F, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovgw, cmovcc_insn, 3, SUF_W, 0x0F, 0, 0, 0, CPU_686, 0, 0 +cmovl, cmovcc_insn, 3, SUF_Z, 0x0C, 0, 0, 0, CPU_686, 0, 0 +cmovle, cmovcc_insn, 3, SUF_Z, 0x0E, 0, 0, 0, CPU_686, 0, 0 +cmovlel, cmovcc_insn, 3, SUF_L, 0x0E, 0, 0, 0, CPU_686, 0, 0 +cmovleq, cmovcc_insn, 3, SUF_Q, 0x0E, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovlew, cmovcc_insn, 3, SUF_W, 0x0E, 0, 0, 0, CPU_686, 0, 0 +cmovll, cmovcc_insn, 3, SUF_L, 0x0C, 0, 0, 0, CPU_686, 0, 0 +cmovlq, cmovcc_insn, 3, SUF_Q, 0x0C, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovlw, cmovcc_insn, 3, SUF_W, 0x0C, 0, 0, 0, CPU_686, 0, 0 +cmovna, cmovcc_insn, 3, SUF_Z, 0x06, 0, 0, 0, CPU_686, 0, 0 +cmovnae, cmovcc_insn, 3, SUF_Z, 0x02, 0, 0, 0, CPU_686, 0, 0 +cmovnael, cmovcc_insn, 3, SUF_L, 0x02, 0, 0, 0, CPU_686, 0, 0 +cmovnaeq, cmovcc_insn, 3, SUF_Q, 0x02, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovnaew, cmovcc_insn, 3, SUF_W, 0x02, 0, 0, 0, CPU_686, 0, 0 +cmovnal, cmovcc_insn, 3, SUF_L, 0x06, 0, 0, 0, CPU_686, 0, 0 +cmovnaq, cmovcc_insn, 3, SUF_Q, 0x06, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovnaw, cmovcc_insn, 3, SUF_W, 0x06, 0, 0, 0, CPU_686, 0, 0 +cmovnb, cmovcc_insn, 3, SUF_Z, 0x03, 0, 0, 0, CPU_686, 0, 0 +cmovnbe, cmovcc_insn, 3, SUF_Z, 0x07, 0, 0, 0, CPU_686, 0, 0 +cmovnbel, cmovcc_insn, 3, SUF_L, 0x07, 0, 0, 0, CPU_686, 0, 0 +cmovnbeq, cmovcc_insn, 3, SUF_Q, 0x07, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovnbew, cmovcc_insn, 3, SUF_W, 0x07, 0, 0, 0, CPU_686, 0, 0 +cmovnbl, cmovcc_insn, 3, SUF_L, 0x03, 0, 0, 0, CPU_686, 0, 0 +cmovnbq, cmovcc_insn, 3, SUF_Q, 0x03, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovnbw, cmovcc_insn, 3, SUF_W, 0x03, 0, 0, 0, CPU_686, 0, 0 +cmovnc, cmovcc_insn, 3, SUF_Z, 0x03, 0, 0, 0, CPU_686, 0, 0 +cmovncl, cmovcc_insn, 3, SUF_L, 0x03, 0, 0, 0, CPU_686, 0, 0 +cmovncq, cmovcc_insn, 3, SUF_Q, 0x03, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovncw, cmovcc_insn, 3, SUF_W, 0x03, 0, 0, 0, CPU_686, 0, 0 +cmovne, cmovcc_insn, 3, SUF_Z, 0x05, 0, 0, 0, CPU_686, 0, 0 +cmovnel, cmovcc_insn, 3, SUF_L, 0x05, 0, 0, 0, CPU_686, 0, 0 +cmovneq, cmovcc_insn, 3, SUF_Q, 0x05, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovnew, cmovcc_insn, 3, SUF_W, 0x05, 0, 0, 0, CPU_686, 0, 0 +cmovng, cmovcc_insn, 3, SUF_Z, 0x0E, 0, 0, 0, CPU_686, 0, 0 +cmovnge, cmovcc_insn, 3, SUF_Z, 0x0C, 0, 0, 0, CPU_686, 0, 0 +cmovngel, cmovcc_insn, 3, SUF_L, 0x0C, 0, 0, 0, CPU_686, 0, 0 +cmovngeq, cmovcc_insn, 3, SUF_Q, 0x0C, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovngew, cmovcc_insn, 3, SUF_W, 0x0C, 0, 0, 0, CPU_686, 0, 0 +cmovngl, cmovcc_insn, 3, SUF_L, 0x0E, 0, 0, 0, CPU_686, 0, 0 +cmovngq, cmovcc_insn, 3, SUF_Q, 0x0E, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovngw, cmovcc_insn, 3, SUF_W, 0x0E, 0, 0, 0, CPU_686, 0, 0 +cmovnl, cmovcc_insn, 3, SUF_Z, 0x0D, 0, 0, 0, CPU_686, 0, 0 +cmovnle, cmovcc_insn, 3, SUF_Z, 0x0F, 0, 0, 0, CPU_686, 0, 0 +cmovnlel, cmovcc_insn, 3, SUF_L, 0x0F, 0, 0, 0, CPU_686, 0, 0 +cmovnleq, cmovcc_insn, 3, SUF_Q, 0x0F, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovnlew, cmovcc_insn, 3, SUF_W, 0x0F, 0, 0, 0, CPU_686, 0, 0 +cmovnll, cmovcc_insn, 3, SUF_L, 0x0D, 0, 0, 0, CPU_686, 0, 0 +cmovnlq, cmovcc_insn, 3, SUF_Q, 0x0D, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovnlw, cmovcc_insn, 3, SUF_W, 0x0D, 0, 0, 0, CPU_686, 0, 0 +cmovno, cmovcc_insn, 3, SUF_Z, 0x01, 0, 0, 0, CPU_686, 0, 0 +cmovnol, cmovcc_insn, 3, SUF_L, 0x01, 0, 0, 0, CPU_686, 0, 0 +cmovnoq, cmovcc_insn, 3, SUF_Q, 0x01, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovnow, cmovcc_insn, 3, SUF_W, 0x01, 0, 0, 0, CPU_686, 0, 0 +cmovnp, cmovcc_insn, 3, SUF_Z, 0x0B, 0, 0, 0, CPU_686, 0, 0 +cmovnpl, cmovcc_insn, 3, SUF_L, 0x0B, 0, 0, 0, CPU_686, 0, 0 +cmovnpq, cmovcc_insn, 3, SUF_Q, 0x0B, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovnpw, cmovcc_insn, 3, SUF_W, 0x0B, 0, 0, 0, CPU_686, 0, 0 +cmovns, cmovcc_insn, 3, SUF_Z, 0x09, 0, 0, 0, CPU_686, 0, 0 +cmovnsl, cmovcc_insn, 3, SUF_L, 0x09, 0, 0, 0, CPU_686, 0, 0 +cmovnsq, cmovcc_insn, 3, SUF_Q, 0x09, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovnsw, cmovcc_insn, 3, SUF_W, 0x09, 0, 0, 0, CPU_686, 0, 0 +cmovnz, cmovcc_insn, 3, SUF_Z, 0x05, 0, 0, 0, CPU_686, 0, 0 +cmovnzl, cmovcc_insn, 3, SUF_L, 0x05, 0, 0, 0, CPU_686, 0, 0 +cmovnzq, cmovcc_insn, 3, SUF_Q, 0x05, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovnzw, cmovcc_insn, 3, SUF_W, 0x05, 0, 0, 0, CPU_686, 0, 0 +cmovo, cmovcc_insn, 3, SUF_Z, 0x00, 0, 0, 0, CPU_686, 0, 0 +cmovol, cmovcc_insn, 3, SUF_L, 0x00, 0, 0, 0, CPU_686, 0, 0 +cmovoq, cmovcc_insn, 3, SUF_Q, 0x00, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovow, cmovcc_insn, 3, SUF_W, 0x00, 0, 0, 0, CPU_686, 0, 0 +cmovp, cmovcc_insn, 3, SUF_Z, 0x0A, 0, 0, 0, CPU_686, 0, 0 +cmovpe, cmovcc_insn, 3, SUF_Z, 0x0A, 0, 0, 0, CPU_686, 0, 0 +cmovpel, cmovcc_insn, 3, SUF_L, 0x0A, 0, 0, 0, CPU_686, 0, 0 +cmovpeq, cmovcc_insn, 3, SUF_Q, 0x0A, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovpew, cmovcc_insn, 3, SUF_W, 0x0A, 0, 0, 0, CPU_686, 0, 0 +cmovpl, cmovcc_insn, 3, SUF_L, 0x0A, 0, 0, 0, CPU_686, 0, 0 +cmovpo, cmovcc_insn, 3, SUF_Z, 0x0B, 0, 0, 0, CPU_686, 0, 0 +cmovpol, cmovcc_insn, 3, SUF_L, 0x0B, 0, 0, 0, CPU_686, 0, 0 +cmovpoq, cmovcc_insn, 3, SUF_Q, 0x0B, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovpow, cmovcc_insn, 3, SUF_W, 0x0B, 0, 0, 0, CPU_686, 0, 0 +cmovpq, cmovcc_insn, 3, SUF_Q, 0x0A, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovpw, cmovcc_insn, 3, SUF_W, 0x0A, 0, 0, 0, CPU_686, 0, 0 +cmovs, cmovcc_insn, 3, SUF_Z, 0x08, 0, 0, 0, CPU_686, 0, 0 +cmovsl, cmovcc_insn, 3, SUF_L, 0x08, 0, 0, 0, CPU_686, 0, 0 +cmovsq, cmovcc_insn, 3, SUF_Q, 0x08, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovsw, cmovcc_insn, 3, SUF_W, 0x08, 0, 0, 0, CPU_686, 0, 0 +cmovz, cmovcc_insn, 3, SUF_Z, 0x04, 0, 0, 0, CPU_686, 0, 0 +cmovzl, cmovcc_insn, 3, SUF_L, 0x04, 0, 0, 0, CPU_686, 0, 0 +cmovzq, cmovcc_insn, 3, SUF_Q, 0x04, 0, 0, ONLY_64, CPU_686, 0, 0 +cmovzw, cmovcc_insn, 3, SUF_W, 0x04, 0, 0, 0, CPU_686, 0, 0 +cmp, arith_insn, 22, SUF_Z, 0x38, 0x07, 0, 0, 0, 0, 0 +cmpb, arith_insn, 22, SUF_B, 0x38, 0x07, 0, 0, 0, 0, 0 +cmpeqpd, ssecmp_128_insn, 3, SUF_Z, 0x00, 0x66, 0, 0, CPU_SSE, 0, 0 +cmpeqps, ssecmp_128_insn, 3, SUF_Z, 0x00, 0, 0, 0, CPU_SSE, 0, 0 +cmpeqsd, ssecmp_64_insn, 4, SUF_Z, 0x00, 0xF2, 0, 0, CPU_SSE2, 0, 0 +cmpeqss, ssecmp_32_insn, 4, SUF_Z, 0x00, 0xF3, 0, 0, CPU_SSE, 0, 0 +cmpl, arith_insn, 22, SUF_L, 0x38, 0x07, 0, 0, CPU_386, 0, 0 +cmplepd, ssecmp_128_insn, 3, SUF_Z, 0x02, 0x66, 0, 0, CPU_SSE, 0, 0 +cmpleps, ssecmp_128_insn, 3, SUF_Z, 0x02, 0, 0, 0, CPU_SSE, 0, 0 +cmplesd, ssecmp_64_insn, 4, SUF_Z, 0x02, 0xF2, 0, 0, CPU_SSE2, 0, 0 +cmpless, ssecmp_32_insn, 4, SUF_Z, 0x02, 0xF3, 0, 0, CPU_SSE, 0, 0 +cmpltpd, ssecmp_128_insn, 3, SUF_Z, 0x01, 0x66, 0, 0, CPU_SSE, 0, 0 +cmpltps, ssecmp_128_insn, 3, SUF_Z, 0x01, 0, 0, 0, CPU_SSE, 0, 0 +cmpltsd, ssecmp_64_insn, 4, SUF_Z, 0x01, 0xF2, 0, 0, CPU_SSE2, 0, 0 +cmpltss, ssecmp_32_insn, 4, SUF_Z, 0x01, 0xF3, 0, 0, CPU_SSE, 0, 0 +cmpneqpd, ssecmp_128_insn, 3, SUF_Z, 0x04, 0x66, 0, 0, CPU_SSE, 0, 0 +cmpneqps, ssecmp_128_insn, 3, SUF_Z, 0x04, 0, 0, 0, CPU_SSE, 0, 0 +cmpneqsd, ssecmp_64_insn, 4, SUF_Z, 0x04, 0xF2, 0, 0, CPU_SSE2, 0, 0 +cmpneqss, ssecmp_32_insn, 4, SUF_Z, 0x04, 0xF3, 0, 0, CPU_SSE, 0, 0 +cmpnlepd, ssecmp_128_insn, 3, SUF_Z, 0x06, 0x66, 0, 0, CPU_SSE, 0, 0 +cmpnleps, ssecmp_128_insn, 3, SUF_Z, 0x06, 0, 0, 0, CPU_SSE, 0, 0 +cmpnlesd, ssecmp_64_insn, 4, SUF_Z, 0x06, 0xF2, 0, 0, CPU_SSE2, 0, 0 +cmpnless, ssecmp_32_insn, 4, SUF_Z, 0x06, 0xF3, 0, 0, CPU_SSE, 0, 0 +cmpnltpd, ssecmp_128_insn, 3, SUF_Z, 0x05, 0x66, 0, 0, CPU_SSE, 0, 0 +cmpnltps, ssecmp_128_insn, 3, SUF_Z, 0x05, 0, 0, 0, CPU_SSE, 0, 0 +cmpnltsd, ssecmp_64_insn, 4, SUF_Z, 0x05, 0xF2, 0, 0, CPU_SSE2, 0, 0 +cmpnltss, ssecmp_32_insn, 4, SUF_Z, 0x05, 0xF3, 0, 0, CPU_SSE, 0, 0 +cmpordpd, ssecmp_128_insn, 3, SUF_Z, 0x07, 0x66, 0, 0, CPU_SSE, 0, 0 +cmpordps, ssecmp_128_insn, 3, SUF_Z, 0x07, 0, 0, 0, CPU_SSE, 0, 0 +cmpordsd, ssecmp_64_insn, 4, SUF_Z, 0x07, 0xF2, 0, 0, CPU_SSE2, 0, 0 +cmpordss, ssecmp_32_insn, 4, SUF_Z, 0x07, 0xF3, 0, 0, CPU_SSE, 0, 0 +cmppd, xmm_xmm128_imm_insn, 1, SUF_Z, 0x66, 0xC2, 0, 0, CPU_SSE2, 0, 0 +cmpps, xmm_xmm128_imm_insn, 1, SUF_Z, 0x00, 0xC2, 0, 0, CPU_SSE, 0, 0 +cmpq, arith_insn, 22, SUF_Q, 0x38, 0x07, 0, ONLY_64, 0, 0, 0 +cmpsb, onebyte_insn, 1, SUF_Z, 0xA6, 0x00, 0, 0, 0, 0, 0 +cmpsd, cmpsd_insn, 5, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +cmpsl, onebyte_insn, 1, SUF_Z, 0xA7, 0x20, 0, 0, CPU_386, 0, 0 +cmpsq, onebyte_insn, 1, SUF_Z, 0xA7, 0x40, 0, ONLY_64, 0, 0, 0 +cmpss, xmm_xmm32_imm_insn, 4, SUF_Z, 0xF3, 0xC2, 0, 0, CPU_SSE, 0, 0 +cmpsw, onebyte_insn, 1, SUF_Z, 0xA7, 0x10, 0, 0, 0, 0, 0 +cmpunordpd, ssecmp_128_insn, 3, SUF_Z, 0x03, 0x66, 0, 0, CPU_SSE, 0, 0 +cmpunordps, ssecmp_128_insn, 3, SUF_Z, 0x03, 0, 0, 0, CPU_SSE, 0, 0 +cmpunordsd, ssecmp_64_insn, 4, SUF_Z, 0x03, 0xF2, 0, 0, CPU_SSE2, 0, 0 +cmpunordss, ssecmp_32_insn, 4, SUF_Z, 0x03, 0xF3, 0, 0, CPU_SSE, 0, 0 +cmpw, arith_insn, 22, SUF_W, 0x38, 0x07, 0, 0, 0, 0, 0 +cmpxchg, cmpxchgxadd_insn, 4, SUF_Z, 0xB0, 0, 0, 0, CPU_486, 0, 0 +cmpxchg16b, cmpxchg16b_insn, 1, SUF_Z, 0, 0, 0, ONLY_64, 0, 0, 0 +cmpxchg8b, cmpxchg8b_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_586, 0, 0 +cmpxchg8bq, cmpxchg8b_insn, 1, SUF_Q, 0, 0, 0, 0, CPU_586, 0, 0 +cmpxchgb, cmpxchgxadd_insn, 4, SUF_B, 0xB0, 0, 0, 0, CPU_486, 0, 0 +cmpxchgl, cmpxchgxadd_insn, 4, SUF_L, 0xB0, 0, 0, 0, CPU_486, 0, 0 +cmpxchgq, cmpxchgxadd_insn, 4, SUF_Q, 0xB0, 0, 0, ONLY_64, CPU_486, 0, 0 +cmpxchgw, cmpxchgxadd_insn, 4, SUF_W, 0xB0, 0, 0, 0, CPU_486, 0, 0 +comisd, xmm_xmm64_insn, 4, SUF_Z, 0x66, 0x2F, 0, 0, CPU_SSE2, 0, 0 +comiss, xmm_xmm32_insn, 4, SUF_Z, 0x00, 0x2F, 0, 0, CPU_SSE, 0, 0 +cpuid, twobyte_insn, 1, SUF_Z, 0x0F, 0xA2, 0, 0, CPU_486, 0, 0 +cqo, onebyte_insn, 1, SUF_Z, 0x99, 0x40, 0, ONLY_64, 0, 0, 0 +cqto, onebyte_insn, 1, SUF_Z, 0x99, 0x40, 0, ONLY_64, 0, 0, 0 +crc32, crc32_insn, 5, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_SSE42, 0 +crc32b, crc32_insn, 5, SUF_B, 0, 0, 0, 0, CPU_386, CPU_SSE42, 0 +crc32l, crc32_insn, 5, SUF_L, 0, 0, 0, 0, CPU_386, CPU_SSE42, 0 +crc32q, crc32_insn, 5, SUF_Q, 0, 0, 0, ONLY_64, CPU_SSE42, 0, 0 +crc32w, crc32_insn, 5, SUF_W, 0, 0, 0, 0, CPU_386, CPU_SSE42, 0 +cvtdq2pd, xmm_xmm64_insn, 4, SUF_Z, 0xF3, 0xE6, 0, 0, CPU_SSE2, 0, 0 +cvtdq2ps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x5B, 0, 0, CPU_SSE2, 0, 0 +cvtpd2dq, xmm_xmm128_insn, 2, SUF_Z, 0xF2, 0xE6, 0, 0, CPU_SSE2, 0, 0 +cvtpd2pi, cvt_mm_xmm_insn, 1, SUF_Z, 0x66, 0x2D, 0, 0, CPU_SSE2, 0, 0 +cvtpd2ps, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x5A, 0, 0, CPU_SSE2, 0, 0 +cvtpi2pd, cvt_xmm_mm_ss_insn, 1, SUF_Z, 0x66, 0x2A, 0, 0, CPU_SSE2, 0, 0 +cvtpi2ps, cvt_xmm_mm_ps_insn, 1, SUF_Z, 0x2A, 0, 0, 0, CPU_SSE, 0, 0 +cvtps2dq, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x5B, 0, 0, CPU_SSE2, 0, 0 +cvtps2pd, xmm_xmm64_insn, 4, SUF_Z, 0x00, 0x5A, 0, 0, CPU_SSE2, 0, 0 +cvtps2pi, cvt_mm_xmm64_insn, 2, SUF_Z, 0x2D, 0, 0, 0, CPU_SSE, 0, 0 +cvtsd2si, cvt_rx_xmm64_insn, 4, SUF_Z, 0xF2, 0x2D, 0, 0, CPU_386, CPU_SSE2, 0 +cvtsd2sil, cvt_rx_xmm64_insn, 4, SUF_L, 0xF2, 0x2D, 0, 0, CPU_386, CPU_SSE2, 0 +cvtsd2siq, cvt_rx_xmm64_insn, 4, SUF_Q, 0xF2, 0x2D, 0, ONLY_64, CPU_SSE2, 0, 0 +cvtsd2ss, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5A, 0, 0, CPU_SSE2, 0, 0 +cvtsi2sd, cvt_xmm_rmx_insn, 6, SUF_Z, 0xF2, 0x2A, 0, 0, CPU_SSE2, 0, 0 +cvtsi2sdl, cvt_xmm_rmx_insn, 6, SUF_L, 0xF2, 0x2A, 0, 0, CPU_SSE2, 0, 0 +cvtsi2sdq, cvt_xmm_rmx_insn, 6, SUF_Q, 0xF2, 0x2A, 0, ONLY_64, CPU_SSE2, 0, 0 +cvtsi2ss, cvt_xmm_rmx_insn, 6, SUF_Z, 0xF3, 0x2A, 0, 0, CPU_386, CPU_SSE, 0 +cvtsi2ssl, cvt_xmm_rmx_insn, 6, SUF_L, 0xF3, 0x2A, 0, 0, CPU_386, CPU_SSE, 0 +cvtsi2ssq, cvt_xmm_rmx_insn, 6, SUF_Q, 0xF3, 0x2A, 0, ONLY_64, CPU_SSE, 0, 0 +cvtss2sd, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5A, 0, 0, CPU_SSE2, 0, 0 +cvtss2si, cvt_rx_xmm32_insn, 4, SUF_Z, 0xF3, 0x2D, 0, 0, CPU_386, CPU_SSE, 0 +cvtss2sil, cvt_rx_xmm32_insn, 4, SUF_L, 0xF3, 0x2D, 0, 0, CPU_386, CPU_SSE, 0 +cvtss2siq, cvt_rx_xmm32_insn, 4, SUF_Q, 0xF3, 0x2D, 0, ONLY_64, CPU_SSE, 0, 0 +cvttpd2dq, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0xE6, 0, 0, CPU_SSE2, 0, 0 +cvttpd2pi, cvt_mm_xmm_insn, 1, SUF_Z, 0x66, 0x2C, 0, 0, CPU_SSE2, 0, 0 +cvttps2dq, xmm_xmm128_insn, 2, SUF_Z, 0xF3, 0x5B, 0, 0, CPU_SSE2, 0, 0 +cvttps2pi, cvt_mm_xmm64_insn, 2, SUF_Z, 0x2C, 0, 0, 0, CPU_SSE, 0, 0 +cvttsd2si, cvt_rx_xmm64_insn, 4, SUF_Z, 0xF2, 0x2C, 0, 0, CPU_SSE2, 0, 0 +cvttsd2sil, cvt_rx_xmm64_insn, 4, SUF_L, 0xF2, 0x2C, 0, 0, CPU_SSE2, 0, 0 +cvttsd2siq, cvt_rx_xmm64_insn, 4, SUF_Q, 0xF2, 0x2C, 0, ONLY_64, CPU_SSE2, 0, 0 +cvttss2si, cvt_rx_xmm32_insn, 4, SUF_Z, 0xF3, 0x2C, 0, 0, CPU_386, CPU_SSE, 0 +cvttss2sil, cvt_rx_xmm32_insn, 4, SUF_L, 0xF3, 0x2C, 0, 0, CPU_386, CPU_SSE, 0 +cvttss2siq, cvt_rx_xmm32_insn, 4, SUF_Q, 0xF3, 0x2C, 0, ONLY_64, CPU_SSE, 0, 0 +cwd, onebyte_insn, 1, SUF_Z, 0x99, 0x10, 0, 0, 0, 0, 0 +cwde, onebyte_insn, 1, SUF_Z, 0x98, 0x20, 0, 0, CPU_386, 0, 0 +cwtd, onebyte_insn, 1, SUF_Z, 0x99, 0x10, 0, 0, 0, 0, 0 +cwtl, onebyte_insn, 1, SUF_Z, 0x98, 0x20, 0, 0, CPU_386, 0, 0 +daa, onebyte_insn, 1, SUF_Z, 0x27, 0, 0, NOT_64, 0, 0, 0 +das, onebyte_insn, 1, SUF_Z, 0x2F, 0, 0, NOT_64, 0, 0, 0 +data16, NULL, X86_OPERSIZE>>8, 0x10, 0, 0, 0, 0, 0, 0, 0 +data32, NULL, X86_OPERSIZE>>8, 0x20, 0, 0, 0, 0, 0, 0, 0 +data64, NULL, X86_OPERSIZE>>8, 0x40, 0, 0, 0, ONLY_64, 0, 0, 0 +dec, incdec_insn, 6, SUF_Z, 0x48, 0x01, 0, 0, 0, 0, 0 +decb, incdec_insn, 6, SUF_B, 0x48, 0x01, 0, 0, 0, 0, 0 +decl, incdec_insn, 6, SUF_L, 0x48, 0x01, 0, 0, CPU_386, 0, 0 +decq, incdec_insn, 6, SUF_Q, 0x48, 0x01, 0, ONLY_64, 0, 0, 0 +decw, incdec_insn, 6, SUF_W, 0x48, 0x01, 0, 0, 0, 0, 0 +div, div_insn, 8, SUF_Z, 0x06, 0, 0, 0, 0, 0, 0 +divb, div_insn, 8, SUF_B, 0x06, 0, 0, 0, 0, 0, 0 +divl, div_insn, 8, SUF_L, 0x06, 0, 0, 0, CPU_386, 0, 0 +divpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x5E, 0, 0, CPU_SSE2, 0, 0 +divps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x5E, 0, 0, CPU_SSE, 0, 0 +divq, div_insn, 8, SUF_Q, 0x06, 0, 0, ONLY_64, 0, 0, 0 +divsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5E, 0, 0, CPU_SSE2, 0, 0 +divss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5E, 0, 0, CPU_SSE, 0, 0 +divw, div_insn, 8, SUF_W, 0x06, 0, 0, 0, 0, 0, 0 +dppd, sse4imm_insn, 2, SUF_Z, 0x41, 0, 0, 0, CPU_SSE41, 0, 0 +dpps, sse4imm_insn, 2, SUF_Z, 0x40, 0, 0, 0, CPU_SSE41, 0, 0 +dword, NULL, X86_OPERSIZE>>8, 0x20, 0, 0, 0, 0, 0, 0, 0 +emms, twobyte_insn, 1, SUF_Z, 0x0F, 0x77, 0, 0, CPU_MMX, 0, 0 +enter, enter_insn, 3, SUF_Z, 0, 0, 0, 0, CPU_186, 0, 0 +enterl, enter_insn, 3, SUF_L, 0, 0, 0, NOT_64, CPU_186, 0, 0 +enterq, enter_insn, 3, SUF_Q, 0, 0, 0, ONLY_64, CPU_186, 0, 0 +enterw, enter_insn, 3, SUF_W, 0, 0, 0, 0, CPU_186, 0, 0 +extractps, extractps_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_SSE41, 0 +extrq, extrq_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_SSE4a, 0, 0 +f2xm1, twobyte_insn, 1, SUF_Z, 0xD9, 0xF0, 0, 0, CPU_FPU, 0, 0 +fabs, twobyte_insn, 1, SUF_Z, 0xD9, 0xE1, 0, 0, CPU_FPU, 0, 0 +fadd, farith_insn, 7, SUF_Z, 0xC0, 0xC0, 0x00, 0, CPU_FPU, 0, 0 +faddl, farith_insn, 7, SUF_L, 0xC0, 0xC0, 0x00, 0, CPU_FPU, 0, 0 +faddp, farithp_insn, 3, SUF_Z, 0xC0, 0, 0, 0, CPU_FPU, 0, 0 +fadds, farith_insn, 7, SUF_S, 0xC0, 0xC0, 0x00, 0, CPU_FPU, 0, 0 +fbld, fbldstp_insn, 1, SUF_Z, 0x04, 0, 0, 0, CPU_FPU, 0, 0 +fbstp, fbldstp_insn, 1, SUF_Z, 0x06, 0, 0, 0, CPU_FPU, 0, 0 +fchs, twobyte_insn, 1, SUF_Z, 0xD9, 0xE0, 0, 0, CPU_FPU, 0, 0 +fclex, threebyte_insn, 1, SUF_Z, 0x9B, 0xDB, 0xE2, 0, CPU_FPU, 0, 0 +fcmovb, fcmovcc_insn, 1, SUF_Z, 0xDA, 0xC0, 0, 0, CPU_686, CPU_FPU, 0 +fcmovbe, fcmovcc_insn, 1, SUF_Z, 0xDA, 0xD0, 0, 0, CPU_686, CPU_FPU, 0 +fcmove, fcmovcc_insn, 1, SUF_Z, 0xDA, 0xC8, 0, 0, CPU_686, CPU_FPU, 0 +fcmovnb, fcmovcc_insn, 1, SUF_Z, 0xDB, 0xC0, 0, 0, CPU_686, CPU_FPU, 0 +fcmovnbe, fcmovcc_insn, 1, SUF_Z, 0xDB, 0xD0, 0, 0, CPU_686, CPU_FPU, 0 +fcmovne, fcmovcc_insn, 1, SUF_Z, 0xDB, 0xC8, 0, 0, CPU_686, CPU_FPU, 0 +fcmovnu, fcmovcc_insn, 1, SUF_Z, 0xDB, 0xD8, 0, 0, CPU_686, CPU_FPU, 0 +fcmovu, fcmovcc_insn, 1, SUF_Z, 0xDA, 0xD8, 0, 0, CPU_686, CPU_FPU, 0 +fcom, fcom_insn, 6, SUF_Z, 0xD0, 0x02, 0, 0, CPU_FPU, 0, 0 +fcomi, fcom2_insn, 2, SUF_Z, 0xDB, 0xF0, 0, 0, CPU_686, CPU_FPU, 0 +fcomip, fcom2_insn, 2, SUF_Z, 0xDF, 0xF0, 0, 0, CPU_686, CPU_FPU, 0 +fcoml, fcom_insn, 6, SUF_L, 0xD0, 0x02, 0, 0, CPU_FPU, 0, 0 +fcomp, fcom_insn, 6, SUF_Z, 0xD8, 0x03, 0, 0, CPU_FPU, 0, 0 +fcompl, fcom_insn, 6, SUF_L, 0xD8, 0x03, 0, 0, CPU_FPU, 0, 0 +fcompp, twobyte_insn, 1, SUF_Z, 0xDE, 0xD9, 0, 0, CPU_FPU, 0, 0 +fcomps, fcom_insn, 6, SUF_S, 0xD8, 0x03, 0, 0, CPU_FPU, 0, 0 +fcoms, fcom_insn, 6, SUF_S, 0xD0, 0x02, 0, 0, CPU_FPU, 0, 0 +fcos, twobyte_insn, 1, SUF_Z, 0xD9, 0xFF, 0, 0, CPU_286, CPU_FPU, 0 +fdecstp, twobyte_insn, 1, SUF_Z, 0xD9, 0xF6, 0, 0, CPU_FPU, 0, 0 +fdiv, farith_insn, 7, SUF_Z, 0xF8, 0xF0, 0x06, 0, CPU_FPU, 0, 0 +fdivl, farith_insn, 7, SUF_L, 0xF8, 0xF0, 0x06, 0, CPU_FPU, 0, 0 +fdivp, farithp_insn, 3, SUF_Z, 0xF0, 0, 0, 0, CPU_FPU, 0, 0 +fdivr, farith_insn, 7, SUF_Z, 0xF0, 0xF8, 0x07, 0, CPU_FPU, 0, 0 +fdivrl, farith_insn, 7, SUF_L, 0xF0, 0xF8, 0x07, 0, CPU_FPU, 0, 0 +fdivrp, farithp_insn, 3, SUF_Z, 0xF8, 0, 0, 0, CPU_FPU, 0, 0 +fdivrs, farith_insn, 7, SUF_S, 0xF0, 0xF8, 0x07, 0, CPU_FPU, 0, 0 +fdivs, farith_insn, 7, SUF_S, 0xF8, 0xF0, 0x06, 0, CPU_FPU, 0, 0 +femms, twobyte_insn, 1, SUF_Z, 0x0F, 0x0E, 0, 0, CPU_3DNow, 0, 0 +ffree, ffree_insn, 1, SUF_Z, 0xDD, 0, 0, 0, CPU_FPU, 0, 0 +ffreep, ffree_insn, 1, SUF_Z, 0xDF, 0, 0, 0, CPU_686, CPU_FPU, CPU_Undoc +fiadd, fiarith_insn, 2, SUF_Z, 0x00, 0xDA, 0, 0, CPU_FPU, 0, 0 +fiaddl, fiarith_insn, 2, SUF_L, 0x00, 0xDA, 0, 0, CPU_FPU, 0, 0 +fiadds, fiarith_insn, 2, SUF_S, 0x00, 0xDA, 0, 0, CPU_FPU, 0, 0 +ficom, fiarith_insn, 2, SUF_Z, 0x02, 0xDA, 0, 0, CPU_FPU, 0, 0 +ficoml, fiarith_insn, 2, SUF_L, 0x02, 0xDA, 0, 0, CPU_FPU, 0, 0 +ficomp, fiarith_insn, 2, SUF_Z, 0x03, 0xDA, 0, 0, CPU_FPU, 0, 0 +ficompl, fiarith_insn, 2, SUF_L, 0x03, 0xDA, 0, 0, CPU_FPU, 0, 0 +ficomps, fiarith_insn, 2, SUF_S, 0x03, 0xDA, 0, 0, CPU_FPU, 0, 0 +ficoms, fiarith_insn, 2, SUF_S, 0x02, 0xDA, 0, 0, CPU_FPU, 0, 0 +fidiv, fiarith_insn, 2, SUF_Z, 0x06, 0xDA, 0, 0, CPU_FPU, 0, 0 +fidivl, fiarith_insn, 2, SUF_L, 0x06, 0xDA, 0, 0, CPU_FPU, 0, 0 +fidivr, fiarith_insn, 2, SUF_Z, 0x07, 0xDA, 0, 0, CPU_FPU, 0, 0 +fidivrl, fiarith_insn, 2, SUF_L, 0x07, 0xDA, 0, 0, CPU_FPU, 0, 0 +fidivrs, fiarith_insn, 2, SUF_S, 0x07, 0xDA, 0, 0, CPU_FPU, 0, 0 +fidivs, fiarith_insn, 2, SUF_S, 0x06, 0xDA, 0, 0, CPU_FPU, 0, 0 +fild, fildstp_insn, 4, SUF_Z, 0x00, 0x02, 0x05, 0, CPU_FPU, 0, 0 +fildl, fildstp_insn, 4, SUF_L, 0x00, 0x02, 0x05, 0, CPU_FPU, 0, 0 +fildll, fbldstp_insn, 1, SUF_Z, 0x05, 0, 0, 0, CPU_FPU, 0, 0 +fildq, fildstp_insn, 4, SUF_Q, 0x00, 0x02, 0x05, 0, CPU_FPU, 0, 0 +filds, fildstp_insn, 4, SUF_S, 0x00, 0x02, 0x05, 0, CPU_FPU, 0, 0 +fimul, fiarith_insn, 2, SUF_Z, 0x01, 0xDA, 0, 0, CPU_FPU, 0, 0 +fimull, fiarith_insn, 2, SUF_L, 0x01, 0xDA, 0, 0, CPU_FPU, 0, 0 +fimuls, fiarith_insn, 2, SUF_S, 0x01, 0xDA, 0, 0, CPU_FPU, 0, 0 +fincstp, twobyte_insn, 1, SUF_Z, 0xD9, 0xF7, 0, 0, CPU_FPU, 0, 0 +finit, threebyte_insn, 1, SUF_Z, 0x9B, 0xDB, 0xE3, 0, CPU_FPU, 0, 0 +fist, fiarith_insn, 2, SUF_Z, 0x02, 0xDB, 0, 0, CPU_FPU, 0, 0 +fistl, fiarith_insn, 2, SUF_L, 0x02, 0xDB, 0, 0, CPU_FPU, 0, 0 +fistp, fildstp_insn, 4, SUF_Z, 0x03, 0x02, 0x07, 0, CPU_FPU, 0, 0 +fistpl, fildstp_insn, 4, SUF_L, 0x03, 0x02, 0x07, 0, CPU_FPU, 0, 0 +fistpll, fbldstp_insn, 1, SUF_Z, 0x07, 0, 0, 0, CPU_FPU, 0, 0 +fistpq, fildstp_insn, 4, SUF_Q, 0x03, 0x02, 0x07, 0, CPU_FPU, 0, 0 +fistps, fildstp_insn, 4, SUF_S, 0x03, 0x02, 0x07, 0, CPU_FPU, 0, 0 +fists, fiarith_insn, 2, SUF_S, 0x02, 0xDB, 0, 0, CPU_FPU, 0, 0 +fisttp, fildstp_insn, 4, SUF_Z, 0x01, 0x00, 0x01, 0, CPU_SSE3, 0, 0 +fisttpl, fildstp_insn, 4, SUF_L, 0x01, 0x00, 0x01, 0, CPU_SSE3, 0, 0 +fisttpll, fildstp_insn, 4, SUF_Q, 0x07, 0, 0, 0, CPU_SSE3, 0, 0 +fisttpq, fildstp_insn, 4, SUF_Q, 0x01, 0x00, 0x01, 0, CPU_SSE3, 0, 0 +fisttps, fildstp_insn, 4, SUF_S, 0x01, 0x00, 0x01, 0, CPU_SSE3, 0, 0 +fisub, fiarith_insn, 2, SUF_Z, 0x04, 0xDA, 0, 0, CPU_FPU, 0, 0 +fisubl, fiarith_insn, 2, SUF_L, 0x04, 0xDA, 0, 0, CPU_FPU, 0, 0 +fisubr, fiarith_insn, 2, SUF_Z, 0x05, 0xDA, 0, 0, CPU_FPU, 0, 0 +fisubrl, fiarith_insn, 2, SUF_L, 0x05, 0xDA, 0, 0, CPU_FPU, 0, 0 +fisubrs, fiarith_insn, 2, SUF_S, 0x05, 0xDA, 0, 0, CPU_FPU, 0, 0 +fisubs, fiarith_insn, 2, SUF_S, 0x04, 0xDA, 0, 0, CPU_FPU, 0, 0 +fld, fld_insn, 4, SUF_Z, 0, 0, 0, 0, CPU_FPU, 0, 0 +fld1, twobyte_insn, 1, SUF_Z, 0xD9, 0xE8, 0, 0, CPU_FPU, 0, 0 +fldcw, fldnstcw_insn, 1, SUF_Z, 0x05, 0, 0, 0, CPU_FPU, 0, 0 +fldcww, fldnstcw_insn, 1, SUF_W, 0x05, 0, 0, 0, CPU_FPU, 0, 0 +fldenv, onebytemem_insn, 1, SUF_Z, 0x04, 0xD9, 0, 0, CPU_FPU, 0, 0 +fldenvl, onebytemem_insn, 1, SUF_L, 0x04, 0xD9, 0, 0, CPU_FPU, 0, 0 +fldenvs, onebytemem_insn, 1, SUF_S, 0x04, 0xD9, 0, 0, CPU_FPU, 0, 0 +fldl, fld_insn, 4, SUF_L, 0, 0, 0, 0, CPU_FPU, 0, 0 +fldl2e, twobyte_insn, 1, SUF_Z, 0xD9, 0xEA, 0, 0, CPU_FPU, 0, 0 +fldl2t, twobyte_insn, 1, SUF_Z, 0xD9, 0xE9, 0, 0, CPU_FPU, 0, 0 +fldlg2, twobyte_insn, 1, SUF_Z, 0xD9, 0xEC, 0, 0, CPU_FPU, 0, 0 +fldln2, twobyte_insn, 1, SUF_Z, 0xD9, 0xED, 0, 0, CPU_FPU, 0, 0 +fldpi, twobyte_insn, 1, SUF_Z, 0xD9, 0xEB, 0, 0, CPU_FPU, 0, 0 +flds, fld_insn, 4, SUF_S, 0, 0, 0, 0, CPU_FPU, 0, 0 +fldt, fldstpt_insn, 1, SUF_Z, 0x05, 0, 0, 0, CPU_FPU, 0, 0 +fldz, twobyte_insn, 1, SUF_Z, 0xD9, 0xEE, 0, 0, CPU_FPU, 0, 0 +fmul, farith_insn, 7, SUF_Z, 0xC8, 0xC8, 0x01, 0, CPU_FPU, 0, 0 +fmull, farith_insn, 7, SUF_L, 0xC8, 0xC8, 0x01, 0, CPU_FPU, 0, 0 +fmulp, farithp_insn, 3, SUF_Z, 0xC8, 0, 0, 0, CPU_FPU, 0, 0 +fmuls, farith_insn, 7, SUF_S, 0xC8, 0xC8, 0x01, 0, CPU_FPU, 0, 0 +fnclex, twobyte_insn, 1, SUF_Z, 0xDB, 0xE2, 0, 0, CPU_FPU, 0, 0 +fninit, twobyte_insn, 1, SUF_Z, 0xDB, 0xE3, 0, 0, CPU_FPU, 0, 0 +fnop, twobyte_insn, 1, SUF_Z, 0xD9, 0xD0, 0, 0, CPU_FPU, 0, 0 +fnsave, onebytemem_insn, 1, SUF_Z, 0x06, 0xDD, 0, 0, CPU_FPU, 0, 0 +fnsavel, onebytemem_insn, 1, SUF_L, 0x06, 0xDD, 0, 0, CPU_FPU, 0, 0 +fnsaves, onebytemem_insn, 1, SUF_S, 0x06, 0xDD, 0, 0, CPU_FPU, 0, 0 +fnstcw, fldnstcw_insn, 1, SUF_Z, 0x07, 0, 0, 0, CPU_FPU, 0, 0 +fnstcww, fldnstcw_insn, 1, SUF_W, 0x07, 0, 0, 0, CPU_FPU, 0, 0 +fnstenv, onebytemem_insn, 1, SUF_Z, 0x06, 0xD9, 0, 0, CPU_FPU, 0, 0 +fnstenvl, onebytemem_insn, 1, SUF_L, 0x06, 0xD9, 0, 0, CPU_FPU, 0, 0 +fnstenvs, onebytemem_insn, 1, SUF_S, 0x06, 0xD9, 0, 0, CPU_FPU, 0, 0 +fnstsw, fnstsw_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_FPU, 0, 0 +fnstsww, fnstsw_insn, 2, SUF_W, 0, 0, 0, 0, CPU_FPU, 0, 0 +fpatan, twobyte_insn, 1, SUF_Z, 0xD9, 0xF3, 0, 0, CPU_FPU, 0, 0 +fprem, twobyte_insn, 1, SUF_Z, 0xD9, 0xF8, 0, 0, CPU_FPU, 0, 0 +fprem1, twobyte_insn, 1, SUF_Z, 0xD9, 0xF5, 0, 0, CPU_286, CPU_FPU, 0 +fptan, twobyte_insn, 1, SUF_Z, 0xD9, 0xF2, 0, 0, CPU_FPU, 0, 0 +frndint, twobyte_insn, 1, SUF_Z, 0xD9, 0xFC, 0, 0, CPU_FPU, 0, 0 +frstor, onebytemem_insn, 1, SUF_Z, 0x04, 0xDD, 0, 0, CPU_FPU, 0, 0 +frstorl, onebytemem_insn, 1, SUF_L, 0x04, 0xDD, 0, 0, CPU_FPU, 0, 0 +frstors, onebytemem_insn, 1, SUF_S, 0x04, 0xDD, 0, 0, CPU_FPU, 0, 0 +fsave, twobytemem_insn, 1, SUF_Z, 0x06, 0x9B, 0xDD, 0, CPU_FPU, 0, 0 +fsavel, twobytemem_insn, 1, SUF_L, 0x06, 0x9B, 0xDD, 0, CPU_FPU, 0, 0 +fsaves, twobytemem_insn, 1, SUF_S, 0x06, 0x9B, 0xDD, 0, CPU_FPU, 0, 0 +fscale, twobyte_insn, 1, SUF_Z, 0xD9, 0xFD, 0, 0, CPU_FPU, 0, 0 +fsetpm, twobyte_insn, 1, SUF_Z, 0xDB, 0xE4, 0, 0, CPU_286, CPU_FPU, CPU_Obs +fsin, twobyte_insn, 1, SUF_Z, 0xD9, 0xFE, 0, 0, CPU_286, CPU_FPU, 0 +fsincos, twobyte_insn, 1, SUF_Z, 0xD9, 0xFB, 0, 0, CPU_286, CPU_FPU, 0 +fsqrt, twobyte_insn, 1, SUF_Z, 0xD9, 0xFA, 0, 0, CPU_FPU, 0, 0 +fst, fst_insn, 3, SUF_Z, 0, 0, 0, 0, CPU_FPU, 0, 0 +fstcw, fstcw_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_FPU, 0, 0 +fstcww, fstcw_insn, 1, SUF_W, 0, 0, 0, 0, CPU_FPU, 0, 0 +fstenv, twobytemem_insn, 1, SUF_Z, 0x06, 0x9B, 0xD9, 0, CPU_FPU, 0, 0 +fstenvl, twobytemem_insn, 1, SUF_L, 0x06, 0x9B, 0xD9, 0, CPU_FPU, 0, 0 +fstenvs, twobytemem_insn, 1, SUF_S, 0x06, 0x9B, 0xD9, 0, CPU_FPU, 0, 0 +fstl, fst_insn, 3, SUF_L, 0, 0, 0, 0, CPU_FPU, 0, 0 +fstp, fstp_insn, 4, SUF_Z, 0, 0, 0, 0, CPU_FPU, 0, 0 +fstpl, fstp_insn, 4, SUF_L, 0, 0, 0, 0, CPU_FPU, 0, 0 +fstps, fstp_insn, 4, SUF_S, 0, 0, 0, 0, CPU_FPU, 0, 0 +fstpt, fldstpt_insn, 1, SUF_Z, 0x07, 0, 0, 0, CPU_FPU, 0, 0 +fsts, fst_insn, 3, SUF_S, 0, 0, 0, 0, CPU_FPU, 0, 0 +fstsw, fstsw_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_FPU, 0, 0 +fstsww, fstsw_insn, 2, SUF_W, 0, 0, 0, 0, CPU_FPU, 0, 0 +fsub, farith_insn, 7, SUF_Z, 0xE8, 0xE0, 0x04, 0, CPU_FPU, 0, 0 +fsubl, farith_insn, 7, SUF_L, 0xE8, 0xE0, 0x04, 0, CPU_FPU, 0, 0 +fsubp, farithp_insn, 3, SUF_Z, 0xE0, 0, 0, 0, CPU_FPU, 0, 0 +fsubr, farith_insn, 7, SUF_Z, 0xE0, 0xE8, 0x05, 0, CPU_FPU, 0, 0 +fsubrl, farith_insn, 7, SUF_L, 0xE0, 0xE8, 0x05, 0, CPU_FPU, 0, 0 +fsubrp, farithp_insn, 3, SUF_Z, 0xE8, 0, 0, 0, CPU_FPU, 0, 0 +fsubrs, farith_insn, 7, SUF_S, 0xE0, 0xE8, 0x05, 0, CPU_FPU, 0, 0 +fsubs, farith_insn, 7, SUF_S, 0xE8, 0xE0, 0x04, 0, CPU_FPU, 0, 0 +ftst, twobyte_insn, 1, SUF_Z, 0xD9, 0xE4, 0, 0, CPU_FPU, 0, 0 +fucom, fcom2_insn, 2, SUF_Z, 0xDD, 0xE0, 0, 0, CPU_286, CPU_FPU, 0 +fucomi, fcom2_insn, 2, SUF_Z, 0xDB, 0xE8, 0, 0, CPU_686, CPU_FPU, 0 +fucomip, fcom2_insn, 2, SUF_Z, 0xDF, 0xE8, 0, 0, CPU_686, CPU_FPU, 0 +fucomp, fcom2_insn, 2, SUF_Z, 0xDD, 0xE8, 0, 0, CPU_286, CPU_FPU, 0 +fucompp, twobyte_insn, 1, SUF_Z, 0xDA, 0xE9, 0, 0, CPU_286, CPU_FPU, 0 +fwait, onebyte_insn, 1, SUF_Z, 0x9B, 0, 0, 0, CPU_FPU, 0, 0 +fxam, twobyte_insn, 1, SUF_Z, 0xD9, 0xE5, 0, 0, CPU_FPU, 0, 0 +fxch, fxch_insn, 4, SUF_Z, 0, 0, 0, 0, CPU_FPU, 0, 0 +fxrstor, twobytemem_insn, 1, SUF_Z, 0x01, 0x0F, 0xAE, 0, CPU_686, CPU_FPU, 0 +fxrstorq, twobytemem_insn, 1, SUF_Q, 0x01, 0x0F, 0xAE, 0, CPU_686, CPU_FPU, 0 +fxsave, twobytemem_insn, 1, SUF_Z, 0x00, 0x0F, 0xAE, 0, CPU_686, CPU_FPU, 0 +fxsaveq, twobytemem_insn, 1, SUF_Q, 0x00, 0x0F, 0xAE, 0, CPU_686, CPU_FPU, 0 +fxtract, twobyte_insn, 1, SUF_Z, 0xD9, 0xF4, 0, 0, CPU_FPU, 0, 0 +fyl2x, twobyte_insn, 1, SUF_Z, 0xD9, 0xF1, 0, 0, CPU_FPU, 0, 0 +fyl2xp1, twobyte_insn, 1, SUF_Z, 0xD9, 0xF9, 0, 0, CPU_FPU, 0, 0 +getsec, twobyte_insn, 1, SUF_Z, 0x0F, 0x37, 0, 0, CPU_SMX, 0, 0 +haddpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x7C, 0, 0, CPU_SSE3, 0, 0 +haddps, xmm_xmm128_insn, 2, SUF_Z, 0xF2, 0x7C, 0, 0, CPU_SSE3, 0, 0 +hlt, onebyte_insn, 1, SUF_Z, 0xF4, 0, 0, 0, CPU_Priv, 0, 0 +hnt, NULL, X86_SEGREG>>8, 0x2E, 0, 0, 0, 0, 0, 0, 0 +hsubpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x7D, 0, 0, CPU_SSE3, 0, 0 +hsubps, xmm_xmm128_insn, 2, SUF_Z, 0xF2, 0x7D, 0, 0, CPU_SSE3, 0, 0 +ht, NULL, X86_SEGREG>>8, 0x3E, 0, 0, 0, 0, 0, 0, 0 +ibts, ibts_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_Obs, CPU_Undoc +idiv, div_insn, 8, SUF_Z, 0x07, 0, 0, 0, 0, 0, 0 +idivb, div_insn, 8, SUF_B, 0x07, 0, 0, 0, 0, 0, 0 +idivl, div_insn, 8, SUF_L, 0x07, 0, 0, 0, CPU_386, 0, 0 +idivq, div_insn, 8, SUF_Q, 0x07, 0, 0, ONLY_64, 0, 0, 0 +idivw, div_insn, 8, SUF_W, 0x07, 0, 0, 0, 0, 0, 0 +imul, imul_insn, 19, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +imulb, imul_insn, 19, SUF_B, 0, 0, 0, 0, 0, 0, 0 +imull, imul_insn, 19, SUF_L, 0, 0, 0, 0, CPU_386, 0, 0 +imulq, imul_insn, 19, SUF_Q, 0, 0, 0, ONLY_64, 0, 0, 0 +imulw, imul_insn, 19, SUF_W, 0, 0, 0, 0, 0, 0, 0 +in, in_insn, 12, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +inb, in_insn, 12, SUF_B, 0, 0, 0, 0, 0, 0, 0 +inc, incdec_insn, 6, SUF_Z, 0x40, 0x00, 0, 0, 0, 0, 0 +incb, incdec_insn, 6, SUF_B, 0x40, 0x00, 0, 0, 0, 0, 0 +incl, incdec_insn, 6, SUF_L, 0x40, 0x00, 0, 0, CPU_386, 0, 0 +incq, incdec_insn, 6, SUF_Q, 0x40, 0x00, 0, ONLY_64, 0, 0, 0 +incw, incdec_insn, 6, SUF_W, 0x40, 0x00, 0, 0, 0, 0, 0 +inl, in_insn, 12, SUF_L, 0, 0, 0, 0, CPU_386, 0, 0 +insb, onebyte_insn, 1, SUF_Z, 0x6C, 0x00, 0, 0, 0, 0, 0 +insertps, insertps_insn, 4, SUF_Z, 0, 0, 0, 0, CPU_SSE41, 0, 0 +insertq, insertq_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_SSE4a, 0, 0 +insl, onebyte_insn, 1, SUF_Z, 0x6D, 0x20, 0, 0, CPU_386, 0, 0 +insw, onebyte_insn, 1, SUF_Z, 0x6D, 0x10, 0, 0, 0, 0, 0 +int, int_insn, 1, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +int3, onebyte_insn, 1, SUF_Z, 0xCC, 0, 0, 0, 0, 0, 0 +into, onebyte_insn, 1, SUF_Z, 0xCE, 0, 0, NOT_64, 0, 0, 0 +invd, twobyte_insn, 1, SUF_Z, 0x0F, 0x08, 0, 0, CPU_486, CPU_Priv, 0 +invept, eptvpid_insn, 2, SUF_Z, 0x00, 0, 0, 0, CPU_386, CPU_EPTVPID, 0 +inveptl, eptvpid_insn, 2, SUF_L, 0x00, 0, 0, NOT_64, CPU_386, CPU_EPTVPID, 0 +inveptq, eptvpid_insn, 2, SUF_Q, 0x00, 0, 0, ONLY_64, CPU_EPTVPID, 0, 0 +invlpg, twobytemem_insn, 1, SUF_Z, 0x07, 0x0F, 0x01, 0, CPU_486, CPU_Priv, 0 +invlpga, invlpga_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_SVM, 0, 0 +invpcid, invpcid_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_INVPCID, CPU_Priv +invvpid, eptvpid_insn, 2, SUF_Z, 0x01, 0, 0, 0, CPU_386, CPU_EPTVPID, 0 +invvpidl, eptvpid_insn, 2, SUF_L, 0x01, 0, 0, NOT_64, CPU_386, CPU_EPTVPID, 0 +invvpidq, eptvpid_insn, 2, SUF_Q, 0x01, 0, 0, ONLY_64, CPU_EPTVPID, 0, 0 +inw, in_insn, 12, SUF_W, 0, 0, 0, 0, 0, 0, 0 +iret, onebyte_insn, 1, SUF_Z, 0xCF, 0, 0, 0, 0, 0, 0 +iretl, onebyte_insn, 1, SUF_Z, 0xCF, 0x20, 0, 0, CPU_386, 0, 0 +iretq, onebyte_insn, 1, SUF_Z, 0xCF, 0x40, 0, ONLY_64, 0, 0, 0 +iretw, onebyte_insn, 1, SUF_Z, 0xCF, 0x10, 0, 0, 0, 0, 0 +ja, jcc_insn, 9, SUF_Z, 0x07, 0, 0, 0, 0, 0, 0 +jae, jcc_insn, 9, SUF_Z, 0x03, 0, 0, 0, 0, 0, 0 +jb, jcc_insn, 9, SUF_Z, 0x02, 0, 0, 0, 0, 0, 0 +jbe, jcc_insn, 9, SUF_Z, 0x06, 0, 0, 0, 0, 0, 0 +jc, jcc_insn, 9, SUF_Z, 0x02, 0, 0, 0, 0, 0, 0 +jcxz, jcxz_insn, 2, SUF_Z, 0x10, 0, 0, 0, 0, 0, 0 +je, jcc_insn, 9, SUF_Z, 0x04, 0, 0, 0, 0, 0, 0 +jecxz, jcxz_insn, 2, SUF_Z, 0x20, 0, 0, 0, CPU_386, 0, 0 +jg, jcc_insn, 9, SUF_Z, 0x0F, 0, 0, 0, 0, 0, 0 +jge, jcc_insn, 9, SUF_Z, 0x0D, 0, 0, 0, 0, 0, 0 +jl, jcc_insn, 9, SUF_Z, 0x0C, 0, 0, 0, 0, 0, 0 +jle, jcc_insn, 9, SUF_Z, 0x0E, 0, 0, 0, 0, 0, 0 +jmp, jmp_insn, 31, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +jmpl, jmp_insn, 31, SUF_L, 0, 0, 0, 0, CPU_386, 0, 0 +jmpq, jmp_insn, 31, SUF_Q, 0, 0, 0, ONLY_64, 0, 0, 0 +jmpw, jmp_insn, 31, SUF_W, 0, 0, 0, 0, 0, 0, 0 +jna, jcc_insn, 9, SUF_Z, 0x06, 0, 0, 0, 0, 0, 0 +jnae, jcc_insn, 9, SUF_Z, 0x02, 0, 0, 0, 0, 0, 0 +jnb, jcc_insn, 9, SUF_Z, 0x03, 0, 0, 0, 0, 0, 0 +jnbe, jcc_insn, 9, SUF_Z, 0x07, 0, 0, 0, 0, 0, 0 +jnc, jcc_insn, 9, SUF_Z, 0x03, 0, 0, 0, 0, 0, 0 +jne, jcc_insn, 9, SUF_Z, 0x05, 0, 0, 0, 0, 0, 0 +jng, jcc_insn, 9, SUF_Z, 0x0E, 0, 0, 0, 0, 0, 0 +jnge, jcc_insn, 9, SUF_Z, 0x0C, 0, 0, 0, 0, 0, 0 +jnl, jcc_insn, 9, SUF_Z, 0x0D, 0, 0, 0, 0, 0, 0 +jnle, jcc_insn, 9, SUF_Z, 0x0F, 0, 0, 0, 0, 0, 0 +jno, jcc_insn, 9, SUF_Z, 0x01, 0, 0, 0, 0, 0, 0 +jnp, jcc_insn, 9, SUF_Z, 0x0B, 0, 0, 0, 0, 0, 0 +jns, jcc_insn, 9, SUF_Z, 0x09, 0, 0, 0, 0, 0, 0 +jnz, jcc_insn, 9, SUF_Z, 0x05, 0, 0, 0, 0, 0, 0 +jo, jcc_insn, 9, SUF_Z, 0x00, 0, 0, 0, 0, 0, 0 +jp, jcc_insn, 9, SUF_Z, 0x0A, 0, 0, 0, 0, 0, 0 +jpe, jcc_insn, 9, SUF_Z, 0x0A, 0, 0, 0, 0, 0, 0 +jpo, jcc_insn, 9, SUF_Z, 0x0B, 0, 0, 0, 0, 0, 0 +jrcxz, jcxz_insn, 2, SUF_Z, 0x40, 0, 0, ONLY_64, 0, 0, 0 +js, jcc_insn, 9, SUF_Z, 0x08, 0, 0, 0, 0, 0, 0 +jz, jcc_insn, 9, SUF_Z, 0x04, 0, 0, 0, 0, 0, 0 +lahf, onebyte_insn, 1, SUF_Z, 0x9F, 0, 0, 0, 0, 0, 0 +lar, larlsl_insn, 6, SUF_Z, 0x02, 0, 0, 0, CPU_286, CPU_Prot, 0 +larl, larlsl_insn, 6, SUF_L, 0x02, 0, 0, 0, CPU_286, CPU_Prot, 0 +larq, larlsl_insn, 6, SUF_Q, 0x02, 0, 0, ONLY_64, CPU_286, CPU_Prot, 0 +larw, larlsl_insn, 6, SUF_W, 0x02, 0, 0, 0, CPU_286, CPU_Prot, 0 +lcall, ljmpcall_insn, 7, SUF_Z, 0x03, 0x9A, 0, 0, 0, 0, 0 +lcalll, ljmpcall_insn, 7, SUF_L, 0x03, 0x9A, 0, 0, CPU_386, 0, 0 +lcallq, ljmpcall_insn, 7, SUF_Q, 0x03, 0x9A, 0, ONLY_64, 0, 0, 0 +lcallw, ljmpcall_insn, 7, SUF_W, 0x03, 0x9A, 0, 0, 0, 0, 0 +lddqu, lddqu_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_SSE3, 0, 0 +ldmxcsr, ldstmxcsr_insn, 1, SUF_Z, 0x02, 0, 0, 0, CPU_SSE, 0, 0 +lds, ldes_insn, 2, SUF_Z, 0xC5, 0, 0, NOT_64, 0, 0, 0 +ldsl, ldes_insn, 2, SUF_L, 0xC5, 0, 0, NOT_64, CPU_386, 0, 0 +ldsw, ldes_insn, 2, SUF_W, 0xC5, 0, 0, NOT_64, 0, 0, 0 +lea, lea_insn, 3, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +leal, lea_insn, 3, SUF_L, 0, 0, 0, 0, CPU_386, 0, 0 +leaq, lea_insn, 3, SUF_Q, 0, 0, 0, ONLY_64, 0, 0, 0 +leave, onebyte_insn, 1, SUF_Z, 0xC9, 0x00, 0x40, 0, CPU_186, 0, 0 +leavel, onebyte_insn, 1, SUF_Z, 0xC9, 0x00, 0x40, 0, CPU_186, 0, 0 +leaveq, onebyte_insn, 1, SUF_Z, 0xC9, 0x00, 0x40, ONLY_64, 0, 0, 0 +leavew, onebyte_insn, 1, SUF_Z, 0xC9, 0x10, 0x00, 0, CPU_186, 0, 0 +leaw, lea_insn, 3, SUF_W, 0, 0, 0, 0, 0, 0, 0 +les, ldes_insn, 2, SUF_Z, 0xC4, 0, 0, NOT_64, 0, 0, 0 +lesl, ldes_insn, 2, SUF_L, 0xC4, 0, 0, NOT_64, CPU_386, 0, 0 +lesw, ldes_insn, 2, SUF_W, 0xC4, 0, 0, NOT_64, 0, 0, 0 +lfence, threebyte_insn, 1, SUF_Z, 0x0F, 0xAE, 0xE8, 0, CPU_P3, 0, 0 +lfs, lfgss_insn, 3, SUF_Z, 0xB4, 0, 0, 0, CPU_386, 0, 0 +lfsl, lfgss_insn, 3, SUF_L, 0xB4, 0, 0, 0, CPU_386, 0, 0 +lfsq, lfgss_insn, 3, SUF_Q, 0xB4, 0, 0, ONLY_64, CPU_386, 0, 0 +lfsw, lfgss_insn, 3, SUF_W, 0xB4, 0, 0, 0, CPU_386, 0, 0 +lgdt, twobytemem_insn, 1, SUF_Z, 0x02, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +lgdtl, twobytemem_insn, 1, SUF_L, 0x02, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +lgdtq, twobytemem_insn, 1, SUF_Q, 0x02, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +lgdtw, twobytemem_insn, 1, SUF_W, 0x02, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +lgs, lfgss_insn, 3, SUF_Z, 0xB5, 0, 0, 0, CPU_386, 0, 0 +lgsl, lfgss_insn, 3, SUF_L, 0xB5, 0, 0, 0, CPU_386, 0, 0 +lgsq, lfgss_insn, 3, SUF_Q, 0xB5, 0, 0, ONLY_64, CPU_386, 0, 0 +lgsw, lfgss_insn, 3, SUF_W, 0xB5, 0, 0, 0, CPU_386, 0, 0 +lidt, twobytemem_insn, 1, SUF_Z, 0x03, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +lidtl, twobytemem_insn, 1, SUF_L, 0x03, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +lidtq, twobytemem_insn, 1, SUF_Q, 0x03, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +lidtw, twobytemem_insn, 1, SUF_W, 0x03, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +ljmp, ljmpcall_insn, 7, SUF_Z, 0x05, 0xEA, 0, 0, 0, 0, 0 +ljmpl, ljmpcall_insn, 7, SUF_L, 0x05, 0xEA, 0, 0, CPU_386, 0, 0 +ljmpq, ljmpcall_insn, 7, SUF_Q, 0x05, 0xEA, 0, ONLY_64, 0, 0, 0 +ljmpw, ljmpcall_insn, 7, SUF_W, 0x05, 0xEA, 0, 0, 0, 0, 0 +lldt, prot286_insn, 1, SUF_Z, 0x02, 0x00, 0, 0, CPU_286, CPU_Priv, CPU_Prot +lldtw, prot286_insn, 1, SUF_W, 0x02, 0x00, 0, 0, CPU_286, CPU_Priv, CPU_Prot +lmsw, prot286_insn, 1, SUF_Z, 0x06, 0x01, 0, 0, CPU_286, CPU_Priv, 0 +lmsww, prot286_insn, 1, SUF_W, 0x06, 0x01, 0, 0, CPU_286, CPU_Priv, 0 +loadall, twobyte_insn, 1, SUF_Z, 0x0F, 0x07, 0, 0, CPU_386, CPU_Undoc, 0 +loadall286, twobyte_insn, 1, SUF_Z, 0x0F, 0x05, 0, 0, CPU_286, CPU_Undoc, 0 +lock, NULL, X86_LOCKREP>>8, 0xF0, 0, 0, 0, 0, 0, 0, 0 +lodsb, onebyte_insn, 1, SUF_Z, 0xAC, 0x00, 0, 0, 0, 0, 0 +lodsl, onebyte_insn, 1, SUF_Z, 0xAD, 0x20, 0, 0, CPU_386, 0, 0 +lodsq, onebyte_insn, 1, SUF_Z, 0xAD, 0x40, 0, ONLY_64, 0, 0, 0 +lodsw, onebyte_insn, 1, SUF_Z, 0xAD, 0x10, 0, 0, 0, 0, 0 +loop, loop_insn, 8, SUF_Z, 0x02, 0, 0, 0, 0, 0, 0 +loope, loop_insn, 8, SUF_Z, 0x01, 0, 0, 0, 0, 0, 0 +loopel, loopl_insn, 4, SUF_Z, 0x01, 0x20, 0, 0, 0, 0, 0 +loopeq, loopq_insn, 4, SUF_Z, 0x01, 0x40, 0, ONLY_64, 0, 0, 0 +loopew, loopw_insn, 4, SUF_Z, 0x01, 0x10, 0, NOT_64, 0, 0, 0 +loopl, loopl_insn, 4, SUF_Z, 0x02, 0x20, 0, 0, 0, 0, 0 +loopne, loop_insn, 8, SUF_Z, 0x00, 0, 0, 0, 0, 0, 0 +loopnel, loopl_insn, 4, SUF_Z, 0x00, 0x20, 0, 0, 0, 0, 0 +loopneq, loopq_insn, 4, SUF_Z, 0x00, 0x40, 0, ONLY_64, 0, 0, 0 +loopnew, loopw_insn, 4, SUF_Z, 0x00, 0x10, 0, NOT_64, 0, 0, 0 +loopnz, loop_insn, 8, SUF_Z, 0x00, 0, 0, 0, 0, 0, 0 +loopnzl, loopl_insn, 4, SUF_Z, 0x00, 0x20, 0, 0, 0, 0, 0 +loopnzq, loopq_insn, 4, SUF_Z, 0x00, 0x40, 0, ONLY_64, 0, 0, 0 +loopnzw, loopw_insn, 4, SUF_Z, 0x00, 0x10, 0, NOT_64, 0, 0, 0 +loopq, loopq_insn, 4, SUF_Z, 0x02, 0x40, 0, ONLY_64, 0, 0, 0 +loopw, loopw_insn, 4, SUF_Z, 0x02, 0x10, 0, NOT_64, 0, 0, 0 +loopz, loop_insn, 8, SUF_Z, 0x01, 0, 0, 0, 0, 0, 0 +loopzl, loopl_insn, 4, SUF_Z, 0x01, 0x20, 0, 0, 0, 0, 0 +loopzq, loopq_insn, 4, SUF_Z, 0x01, 0x40, 0, ONLY_64, 0, 0, 0 +loopzw, loopw_insn, 4, SUF_Z, 0x01, 0x10, 0, NOT_64, 0, 0, 0 +lret, retnf_insn, 6, SUF_Z, 0xCA, 0, 0, 0, 0, 0, 0 +lretl, retnf_insn, 6, SUF_L, 0xCA, 0, 0, 0, 0, 0, 0 +lretq, retnf_insn, 6, SUF_Q, 0xCA, 0x40, 0, ONLY_64, 0, 0, 0 +lretw, retnf_insn, 6, SUF_W, 0xCA, 0x10, 0, 0, 0, 0, 0 +lsl, larlsl_insn, 6, SUF_Z, 0x03, 0, 0, 0, CPU_286, CPU_Prot, 0 +lsll, larlsl_insn, 6, SUF_L, 0x03, 0, 0, 0, CPU_286, CPU_Prot, 0 +lslq, larlsl_insn, 6, SUF_Q, 0x03, 0, 0, ONLY_64, CPU_286, CPU_Prot, 0 +lslw, larlsl_insn, 6, SUF_W, 0x03, 0, 0, 0, CPU_286, CPU_Prot, 0 +lss, lfgss_insn, 3, SUF_Z, 0xB2, 0, 0, 0, CPU_386, 0, 0 +lssl, lfgss_insn, 3, SUF_L, 0xB2, 0, 0, 0, CPU_386, 0, 0 +lssq, lfgss_insn, 3, SUF_Q, 0xB2, 0, 0, ONLY_64, CPU_386, 0, 0 +lssw, lfgss_insn, 3, SUF_W, 0xB2, 0, 0, 0, CPU_386, 0, 0 +ltr, prot286_insn, 1, SUF_Z, 0x03, 0x00, 0, 0, CPU_286, CPU_Priv, CPU_Prot +ltrw, prot286_insn, 1, SUF_W, 0x03, 0x00, 0, 0, CPU_286, CPU_Priv, CPU_Prot +lzcnt, cnt_insn, 3, SUF_Z, 0xBD, 0, 0, 0, CPU_LZCNT, 0, 0 +lzcntl, cnt_insn, 3, SUF_L, 0xBD, 0, 0, 0, CPU_LZCNT, 0, 0 +lzcntq, cnt_insn, 3, SUF_Q, 0xBD, 0, 0, ONLY_64, CPU_LZCNT, 0, 0 +lzcntw, cnt_insn, 3, SUF_W, 0xBD, 0, 0, 0, CPU_LZCNT, 0, 0 +maskmovdqu, maskmovdqu_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SSE2, 0, 0 +maskmovq, maskmovq_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_MMX, CPU_P3, 0 +maxpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x5F, 0, 0, CPU_SSE2, 0, 0 +maxps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x5F, 0, 0, CPU_SSE, 0, 0 +maxsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5F, 0, 0, CPU_SSE2, 0, 0 +maxss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5F, 0, 0, CPU_SSE, 0, 0 +mfence, threebyte_insn, 1, SUF_Z, 0x0F, 0xAE, 0xF0, 0, CPU_P3, 0, 0 +minpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x5D, 0, 0, CPU_SSE2, 0, 0 +minps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x5D, 0, 0, CPU_SSE, 0, 0 +minsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5D, 0, 0, CPU_SSE2, 0, 0 +minss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5D, 0, 0, CPU_SSE, 0, 0 +monitor, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xC8, 0, CPU_SSE3, 0, 0 +montmul, padlock_insn, 1, SUF_Z, 0xC0, 0xF3, 0xA6, 0, CPU_PadLock, 0, 0 +mov, mov_insn, 69, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +movabs, movabs_insn, 9, SUF_Z, 0, 0, 0, ONLY_64, 0, 0, 0 +movabsb, movabs_insn, 9, SUF_B, 0, 0, 0, ONLY_64, 0, 0, 0 +movabsl, movabs_insn, 9, SUF_L, 0, 0, 0, ONLY_64, 0, 0, 0 +movabsq, movabs_insn, 9, SUF_Q, 0, 0, 0, ONLY_64, 0, 0, 0 +movabsw, movabs_insn, 9, SUF_W, 0, 0, 0, ONLY_64, 0, 0, 0 +movapd, movau_insn, 6, SUF_Z, 0x66, 0x28, 0x01, 0, CPU_SSE2, 0, 0 +movaps, movau_insn, 6, SUF_Z, 0x00, 0x28, 0x01, 0, CPU_SSE, 0, 0 +movb, mov_insn, 69, SUF_B, 0, 0, 0, 0, 0, 0, 0 +movbe, movbe_insn, 6, SUF_Z, 0, 0, 0, 0, CPU_MOVBE, 0, 0 +movd, movd_insn, 8, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_MMX, 0 +movddup, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x12, 0, 0, CPU_SSE3, 0, 0 +movdq2q, movdq2q_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SSE2, 0, 0 +movdqa, movau_insn, 6, SUF_Z, 0x66, 0x6F, 0x10, 0, CPU_SSE2, 0, 0 +movdqu, movau_insn, 6, SUF_Z, 0xF3, 0x6F, 0x10, 0, CPU_SSE2, 0, 0 +movhlps, movhllhps_insn, 2, SUF_Z, 0x12, 0, 0, 0, CPU_SSE, 0, 0 +movhpd, movhlp_insn, 3, SUF_Z, 0x66, 0x16, 0, 0, CPU_SSE2, 0, 0 +movhps, movhlp_insn, 3, SUF_Z, 0x00, 0x16, 0, 0, CPU_SSE, 0, 0 +movl, mov_insn, 69, SUF_L, 0, 0, 0, 0, CPU_386, 0, 0 +movlhps, movhllhps_insn, 2, SUF_Z, 0x16, 0, 0, 0, CPU_SSE, 0, 0 +movlpd, movhlp_insn, 3, SUF_Z, 0x66, 0x12, 0, 0, CPU_SSE2, 0, 0 +movlps, movhlp_insn, 3, SUF_Z, 0x00, 0x12, 0, 0, CPU_SSE, 0, 0 +movmskpd, movmsk_insn, 4, SUF_Z, 0x66, 0, 0, 0, CPU_SSE2, 0, 0 +movmskpdl, movmsk_insn, 4, SUF_L, 0x66, 0, 0, 0, CPU_SSE2, 0, 0 +movmskpdq, movmsk_insn, 4, SUF_Q, 0x66, 0, 0, ONLY_64, CPU_SSE2, 0, 0 +movmskps, movmsk_insn, 4, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_SSE, 0 +movmskpsl, movmsk_insn, 4, SUF_L, 0, 0, 0, 0, CPU_386, CPU_SSE, 0 +movmskpsq, movmsk_insn, 4, SUF_Q, 0, 0, 0, ONLY_64, CPU_SSE, 0, 0 +movntdq, movnt_insn, 2, SUF_Z, 0x66, 0xE7, 0, 0, CPU_SSE2, 0, 0 +movntdqa, movntdqa_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_SSE41, 0, 0 +movnti, movnti_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_P4, 0, 0 +movntil, movnti_insn, 2, SUF_L, 0, 0, 0, 0, CPU_P4, 0, 0 +movntiq, movnti_insn, 2, SUF_Q, 0, 0, 0, ONLY_64, CPU_P4, 0, 0 +movntpd, movnt_insn, 2, SUF_Z, 0x66, 0x2B, 0, 0, CPU_SSE2, 0, 0 +movntps, movnt_insn, 2, SUF_Z, 0x00, 0x2B, 0, 0, CPU_SSE, 0, 0 +movntq, movntq_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SSE, 0, 0 +movntsd, movntsd_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SSE4a, 0, 0 +movntss, movntss_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SSE4a, 0, 0 +movq, mov_insn, 69, SUF_Q, 0, 0, 0, 0, 0, 0, 0 +movq2dq, movq2dq_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SSE2, 0, 0 +movsb, onebyte_insn, 1, SUF_Z, 0xA4, 0x00, 0, 0, 0, 0, 0 +movsbl, movszx_insn, 5, SUF_B, 0xBE, 0, 0, 0, CPU_386, 0, 0 +movsbq, movszx_insn, 5, SUF_B, 0xBE, 0, 0, ONLY_64, CPU_386, 0, 0 +movsbw, movszx_insn, 5, SUF_B, 0xBE, 0, 0, 0, CPU_386, 0, 0 +movsd, movsd_insn, 5, SUF_Z, 0, 0, 0, 0, CPU_386, 0, 0 +movshdup, xmm_xmm128_insn, 2, SUF_Z, 0xF3, 0x16, 0, 0, CPU_SSE3, 0, 0 +movsl, onebyte_insn, 1, SUF_Z, 0xA5, 0x20, 0, 0, CPU_386, 0, 0 +movsldup, xmm_xmm128_insn, 2, SUF_Z, 0xF3, 0x12, 0, 0, CPU_SSE3, 0, 0 +movslq, movsxd_insn, 1, SUF_L, 0, 0, 0, ONLY_64, 0, 0, 0 +movsq, onebyte_insn, 1, SUF_Z, 0xA5, 0x40, 0, ONLY_64, 0, 0, 0 +movss, movss_insn, 4, SUF_Z, 0, 0, 0, 0, CPU_SSE, 0, 0 +movsw, onebyte_insn, 1, SUF_Z, 0xA5, 0x10, 0, 0, 0, 0, 0 +movswl, movszx_insn, 5, SUF_W, 0xBE, 0, 0, 0, CPU_386, 0, 0 +movswq, movszx_insn, 5, SUF_W, 0xBE, 0, 0, ONLY_64, CPU_386, 0, 0 +movsx, movszx_insn, 5, SUF_Z, 0xBE, 0, 0, 0, CPU_386, 0, 0 +movsxb, movszx_insn, 5, SUF_B, 0xBE, 0, 0, 0, CPU_386, 0, 0 +movsxw, movszx_insn, 5, SUF_W, 0xBE, 0, 0, 0, CPU_386, 0, 0 +movupd, movau_insn, 6, SUF_Z, 0x66, 0x10, 0x01, 0, CPU_SSE2, 0, 0 +movups, movau_insn, 6, SUF_Z, 0x00, 0x10, 0x01, 0, CPU_SSE, 0, 0 +movw, mov_insn, 69, SUF_W, 0, 0, 0, 0, 0, 0, 0 +movzbl, movszx_insn, 5, SUF_B, 0xB6, 0, 0, 0, CPU_386, 0, 0 +movzbq, movszx_insn, 5, SUF_B, 0xB6, 0, 0, ONLY_64, CPU_386, 0, 0 +movzbw, movszx_insn, 5, SUF_B, 0xB6, 0, 0, 0, CPU_386, 0, 0 +movzwl, movszx_insn, 5, SUF_W, 0xB6, 0, 0, 0, CPU_386, 0, 0 +movzwq, movszx_insn, 5, SUF_W, 0xB6, 0, 0, ONLY_64, CPU_386, 0, 0 +movzx, movszx_insn, 5, SUF_Z, 0xB6, 0, 0, 0, CPU_386, 0, 0 +movzxb, movszx_insn, 5, SUF_B, 0xB6, 0, 0, 0, CPU_386, 0, 0 +movzxw, movszx_insn, 5, SUF_W, 0xB6, 0, 0, 0, CPU_386, 0, 0 +mpsadbw, sse4imm_insn, 2, SUF_Z, 0x42, 0, 0, 0, CPU_SSE41, 0, 0 +mul, f6_insn, 4, SUF_Z, 0x04, 0, 0, 0, 0, 0, 0 +mulb, f6_insn, 4, SUF_B, 0x04, 0, 0, 0, 0, 0, 0 +mull, f6_insn, 4, SUF_L, 0x04, 0, 0, 0, CPU_386, 0, 0 +mulpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x59, 0, 0, CPU_SSE2, 0, 0 +mulps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x59, 0, 0, CPU_SSE, 0, 0 +mulq, f6_insn, 4, SUF_Q, 0x04, 0, 0, ONLY_64, 0, 0, 0 +mulsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x59, 0, 0, CPU_SSE2, 0, 0 +mulss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x59, 0, 0, CPU_SSE, 0, 0 +mulw, f6_insn, 4, SUF_W, 0x04, 0, 0, 0, 0, 0, 0 +mulx, vex_gpr_reg_nds_rm_0F_insn, 2, SUF_Z, 0xF2, 0x38, 0xF6, ONLY_AVX, CPU_BMI2, 0, 0 +mulxl, vex_gpr_reg_nds_rm_0F_insn, 2, SUF_L, 0xF2, 0x38, 0xF6, ONLY_AVX, CPU_BMI2, 0, 0 +mulxq, vex_gpr_reg_nds_rm_0F_insn, 2, SUF_Q, 0xF2, 0x38, 0xF6, ONLY_64|ONLY_AVX, CPU_BMI2, 0, 0 +mwait, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xC9, 0, CPU_SSE3, 0, 0 +neg, f6_insn, 4, SUF_Z, 0x03, 0, 0, 0, 0, 0, 0 +negb, f6_insn, 4, SUF_B, 0x03, 0, 0, 0, 0, 0, 0 +negl, f6_insn, 4, SUF_L, 0x03, 0, 0, 0, CPU_386, 0, 0 +negq, f6_insn, 4, SUF_Q, 0x03, 0, 0, ONLY_64, 0, 0, 0 +negw, f6_insn, 4, SUF_W, 0x03, 0, 0, 0, 0, 0, 0 +nop, onebyte_insn, 1, SUF_Z, 0x90, 0, 0, 0, 0, 0, 0 +not, f6_insn, 4, SUF_Z, 0x02, 0, 0, 0, 0, 0, 0 +notb, f6_insn, 4, SUF_B, 0x02, 0, 0, 0, 0, 0, 0 +notl, f6_insn, 4, SUF_L, 0x02, 0, 0, 0, CPU_386, 0, 0 +notq, f6_insn, 4, SUF_Q, 0x02, 0, 0, ONLY_64, 0, 0, 0 +notw, f6_insn, 4, SUF_W, 0x02, 0, 0, 0, 0, 0, 0 +or, arith_insn, 22, SUF_Z, 0x08, 0x01, 0, 0, 0, 0, 0 +orb, arith_insn, 22, SUF_B, 0x08, 0x01, 0, 0, 0, 0, 0 +orl, arith_insn, 22, SUF_L, 0x08, 0x01, 0, 0, CPU_386, 0, 0 +orpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x56, 0, 0, CPU_SSE2, 0, 0 +orps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x56, 0, 0, CPU_SSE, 0, 0 +orq, arith_insn, 22, SUF_Q, 0x08, 0x01, 0, ONLY_64, 0, 0, 0 +orw, arith_insn, 22, SUF_W, 0x08, 0x01, 0, 0, 0, 0, 0 +out, out_insn, 12, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +outb, out_insn, 12, SUF_B, 0, 0, 0, 0, 0, 0, 0 +outl, out_insn, 12, SUF_L, 0, 0, 0, 0, CPU_386, 0, 0 +outsb, onebyte_insn, 1, SUF_Z, 0x6E, 0x00, 0, 0, 0, 0, 0 +outsl, onebyte_insn, 1, SUF_Z, 0x6F, 0x20, 0, 0, CPU_386, 0, 0 +outsw, onebyte_insn, 1, SUF_Z, 0x6F, 0x10, 0, 0, 0, 0, 0 +outw, out_insn, 12, SUF_W, 0, 0, 0, 0, 0, 0, 0 +pabsb, ssse3_insn, 5, SUF_Z, 0x1C, 0, 0, 0, CPU_SSSE3, 0, 0 +pabsd, ssse3_insn, 5, SUF_Z, 0x1E, 0, 0, 0, CPU_SSSE3, 0, 0 +pabsw, ssse3_insn, 5, SUF_Z, 0x1D, 0, 0, 0, CPU_SSSE3, 0, 0 +packssdw, mmxsse2_insn, 2, SUF_Z, 0x6B, 0, 0, 0, CPU_MMX, 0, 0 +packsswb, mmxsse2_insn, 2, SUF_Z, 0x63, 0, 0, 0, CPU_MMX, 0, 0 +packusdw, sse4_insn, 2, SUF_Z, 0x2B, 0, 0, 0, CPU_SSE41, 0, 0 +packuswb, mmxsse2_insn, 2, SUF_Z, 0x67, 0, 0, 0, CPU_MMX, 0, 0 +paddb, mmxsse2_insn, 2, SUF_Z, 0xFC, 0, 0, 0, CPU_MMX, 0, 0 +paddd, mmxsse2_insn, 2, SUF_Z, 0xFE, 0, 0, 0, CPU_MMX, 0, 0 +paddq, mmxsse2_insn, 2, SUF_Z, 0xD4, 0, 0, 0, CPU_MMX, 0, 0 +paddsb, mmxsse2_insn, 2, SUF_Z, 0xEC, 0, 0, 0, CPU_MMX, 0, 0 +paddsiw, cyrixmmx_insn, 1, SUF_Z, 0x51, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +paddsw, mmxsse2_insn, 2, SUF_Z, 0xED, 0, 0, 0, CPU_MMX, 0, 0 +paddusb, mmxsse2_insn, 2, SUF_Z, 0xDC, 0, 0, 0, CPU_MMX, 0, 0 +paddusw, mmxsse2_insn, 2, SUF_Z, 0xDD, 0, 0, 0, CPU_MMX, 0, 0 +paddw, mmxsse2_insn, 2, SUF_Z, 0xFD, 0, 0, 0, CPU_MMX, 0, 0 +palignr, ssse3imm_insn, 2, SUF_Z, 0x0F, 0, 0, 0, CPU_SSSE3, 0, 0 +pand, mmxsse2_insn, 2, SUF_Z, 0xDB, 0, 0, 0, CPU_MMX, 0, 0 +pandn, mmxsse2_insn, 2, SUF_Z, 0xDF, 0, 0, 0, CPU_MMX, 0, 0 +pause, onebyte_prefix_insn, 1, SUF_Z, 0xF3, 0x90, 0, 0, CPU_P4, 0, 0 +paveb, cyrixmmx_insn, 1, SUF_Z, 0x50, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pavgb, mmxsse2_insn, 2, SUF_Z, 0xE0, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pavgusb, now3d_insn, 1, SUF_Z, 0xBF, 0, 0, 0, CPU_3DNow, 0, 0 +pavgw, mmxsse2_insn, 2, SUF_Z, 0xE3, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pblendvb, sse4xmm0_insn, 2, SUF_Z, 0x10, 0, 0, 0, CPU_SSE41, 0, 0 +pblendw, sse4imm_insn, 2, SUF_Z, 0x0E, 0, 0, 0, CPU_SSE41, 0, 0 +pclmulhqhqdq, pclmulqdq_fixed_insn, 2, SUF_Z, 0x11, 0, 0, 0, CPU_AVX, 0, 0 +pclmulhqlqdq, pclmulqdq_fixed_insn, 2, SUF_Z, 0x01, 0, 0, 0, CPU_AVX, 0, 0 +pclmullqhqdq, pclmulqdq_fixed_insn, 2, SUF_Z, 0x10, 0, 0, 0, CPU_AVX, 0, 0 +pclmullqlqdq, pclmulqdq_fixed_insn, 2, SUF_Z, 0x00, 0, 0, 0, CPU_AVX, 0, 0 +pclmulqdq, pclmulqdq_insn, 2, SUF_Z, 0x3A, 0x44, 0, 0, CPU_AVX, 0, 0 +pcmpeqb, mmxsse2_insn, 2, SUF_Z, 0x74, 0, 0, 0, CPU_MMX, 0, 0 +pcmpeqd, mmxsse2_insn, 2, SUF_Z, 0x76, 0, 0, 0, CPU_MMX, 0, 0 +pcmpeqq, sse4_insn, 2, SUF_Z, 0x29, 0, 0, 0, CPU_SSE41, 0, 0 +pcmpeqw, mmxsse2_insn, 2, SUF_Z, 0x75, 0, 0, 0, CPU_MMX, 0, 0 +pcmpestri, sse4pcmpstr_insn, 1, SUF_Z, 0x61, 0, 0, 0, CPU_SSE42, 0, 0 +pcmpestrm, sse4pcmpstr_insn, 1, SUF_Z, 0x60, 0, 0, 0, CPU_SSE42, 0, 0 +pcmpgtb, mmxsse2_insn, 2, SUF_Z, 0x64, 0, 0, 0, CPU_MMX, 0, 0 +pcmpgtd, mmxsse2_insn, 2, SUF_Z, 0x66, 0, 0, 0, CPU_MMX, 0, 0 +pcmpgtq, sse4_insn, 2, SUF_Z, 0x37, 0, 0, 0, CPU_SSE41, 0, 0 +pcmpgtw, mmxsse2_insn, 2, SUF_Z, 0x65, 0, 0, 0, CPU_MMX, 0, 0 +pcmpistri, sse4pcmpstr_insn, 1, SUF_Z, 0x63, 0, 0, 0, CPU_SSE42, 0, 0 +pcmpistrm, sse4pcmpstr_insn, 1, SUF_Z, 0x62, 0, 0, 0, CPU_SSE42, 0, 0 +pdep, vex_gpr_reg_nds_rm_0F_insn, 2, SUF_Z, 0xF2, 0x38, 0xF5, ONLY_AVX, CPU_BMI2, 0, 0 +pdepl, vex_gpr_reg_nds_rm_0F_insn, 2, SUF_L, 0xF2, 0x38, 0xF5, ONLY_AVX, CPU_BMI2, 0, 0 +pdepq, vex_gpr_reg_nds_rm_0F_insn, 2, SUF_Q, 0xF2, 0x38, 0xF5, ONLY_64|ONLY_AVX, CPU_BMI2, 0, 0 +pdistib, cyrixmmx_insn, 1, SUF_Z, 0x54, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pext, vex_gpr_reg_nds_rm_0F_insn, 2, SUF_Z, 0xF3, 0x38, 0xF5, ONLY_AVX, CPU_BMI2, 0, 0 +pextl, vex_gpr_reg_nds_rm_0F_insn, 2, SUF_L, 0xF3, 0x38, 0xF5, ONLY_AVX, CPU_BMI2, 0, 0 +pextq, vex_gpr_reg_nds_rm_0F_insn, 2, SUF_Q, 0xF3, 0x38, 0xF5, ONLY_64|ONLY_AVX, CPU_BMI2, 0, 0 +pextrb, pextrb_insn, 3, SUF_Z, 0, 0, 0, 0, CPU_SSE41, 0, 0 +pextrd, pextrd_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_SSE41, 0 +pextrq, pextrq_insn, 1, SUF_Z, 0, 0, 0, ONLY_64, CPU_SSE41, 0, 0 +pextrw, pextrw_insn, 7, SUF_Z, 0, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pextrwl, pextrw_insn, 7, SUF_L, 0, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pextrwq, pextrw_insn, 7, SUF_Q, 0, 0, 0, ONLY_64, CPU_MMX, CPU_P3, 0 +pf2id, now3d_insn, 1, SUF_Z, 0x1D, 0, 0, 0, CPU_3DNow, 0, 0 +pf2iw, now3d_insn, 1, SUF_Z, 0x1C, 0, 0, 0, CPU_3DNow, CPU_Athlon, 0 +pfacc, now3d_insn, 1, SUF_Z, 0xAE, 0, 0, 0, CPU_3DNow, 0, 0 +pfadd, now3d_insn, 1, SUF_Z, 0x9E, 0, 0, 0, CPU_3DNow, 0, 0 +pfcmpeq, now3d_insn, 1, SUF_Z, 0xB0, 0, 0, 0, CPU_3DNow, 0, 0 +pfcmpge, now3d_insn, 1, SUF_Z, 0x90, 0, 0, 0, CPU_3DNow, 0, 0 +pfcmpgt, now3d_insn, 1, SUF_Z, 0xA0, 0, 0, 0, CPU_3DNow, 0, 0 +pfmax, now3d_insn, 1, SUF_Z, 0xA4, 0, 0, 0, CPU_3DNow, 0, 0 +pfmin, now3d_insn, 1, SUF_Z, 0x94, 0, 0, 0, CPU_3DNow, 0, 0 +pfmul, now3d_insn, 1, SUF_Z, 0xB4, 0, 0, 0, CPU_3DNow, 0, 0 +pfnacc, now3d_insn, 1, SUF_Z, 0x8A, 0, 0, 0, CPU_3DNow, CPU_Athlon, 0 +pfpnacc, now3d_insn, 1, SUF_Z, 0x8E, 0, 0, 0, CPU_3DNow, CPU_Athlon, 0 +pfrcp, now3d_insn, 1, SUF_Z, 0x96, 0, 0, 0, CPU_3DNow, 0, 0 +pfrcpit1, now3d_insn, 1, SUF_Z, 0xA6, 0, 0, 0, CPU_3DNow, 0, 0 +pfrcpit2, now3d_insn, 1, SUF_Z, 0xB6, 0, 0, 0, CPU_3DNow, 0, 0 +pfrsqit1, now3d_insn, 1, SUF_Z, 0xA7, 0, 0, 0, CPU_3DNow, 0, 0 +pfrsqrt, now3d_insn, 1, SUF_Z, 0x97, 0, 0, 0, CPU_3DNow, 0, 0 +pfsub, now3d_insn, 1, SUF_Z, 0x9A, 0, 0, 0, CPU_3DNow, 0, 0 +pfsubr, now3d_insn, 1, SUF_Z, 0xAA, 0, 0, 0, CPU_3DNow, 0, 0 +phaddd, ssse3_insn, 5, SUF_Z, 0x02, 0, 0, 0, CPU_SSSE3, 0, 0 +phaddsw, ssse3_insn, 5, SUF_Z, 0x03, 0, 0, 0, CPU_SSSE3, 0, 0 +phaddw, ssse3_insn, 5, SUF_Z, 0x01, 0, 0, 0, CPU_SSSE3, 0, 0 +phminposuw, sse4_insn, 2, SUF_Z, 0x41, 0, 0, 0, CPU_SSE41, 0, 0 +phsubd, ssse3_insn, 5, SUF_Z, 0x06, 0, 0, 0, CPU_SSSE3, 0, 0 +phsubsw, ssse3_insn, 5, SUF_Z, 0x07, 0, 0, 0, CPU_SSSE3, 0, 0 +phsubw, ssse3_insn, 5, SUF_Z, 0x05, 0, 0, 0, CPU_SSSE3, 0, 0 +pi2fd, now3d_insn, 1, SUF_Z, 0x0D, 0, 0, 0, CPU_3DNow, 0, 0 +pi2fw, now3d_insn, 1, SUF_Z, 0x0C, 0, 0, 0, CPU_3DNow, CPU_Athlon, 0 +pinsrb, pinsrb_insn, 4, SUF_Z, 0, 0, 0, 0, CPU_SSE41, 0, 0 +pinsrd, pinsrd_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_SSE41, 0 +pinsrq, pinsrq_insn, 2, SUF_Z, 0, 0, 0, ONLY_64, CPU_SSE41, 0, 0 +pinsrw, pinsrw_insn, 9, SUF_Z, 0, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pinsrwl, pinsrw_insn, 9, SUF_L, 0, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pinsrwq, pinsrw_insn, 9, SUF_Q, 0, 0, 0, ONLY_64, CPU_MMX, CPU_P3, 0 +pmachriw, pmachriw_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pmaddubsw, ssse3_insn, 5, SUF_Z, 0x04, 0, 0, 0, CPU_SSSE3, 0, 0 +pmaddwd, mmxsse2_insn, 2, SUF_Z, 0xF5, 0, 0, 0, CPU_MMX, 0, 0 +pmagw, cyrixmmx_insn, 1, SUF_Z, 0x52, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pmaxsb, sse4_insn, 2, SUF_Z, 0x3C, 0, 0, 0, CPU_SSE41, 0, 0 +pmaxsd, sse4_insn, 2, SUF_Z, 0x3D, 0, 0, 0, CPU_SSE41, 0, 0 +pmaxsw, mmxsse2_insn, 2, SUF_Z, 0xEE, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pmaxub, mmxsse2_insn, 2, SUF_Z, 0xDE, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pmaxud, sse4_insn, 2, SUF_Z, 0x3F, 0, 0, 0, CPU_SSE41, 0, 0 +pmaxuw, sse4_insn, 2, SUF_Z, 0x3E, 0, 0, 0, CPU_SSE41, 0, 0 +pminsb, sse4_insn, 2, SUF_Z, 0x38, 0, 0, 0, CPU_SSE41, 0, 0 +pminsd, sse4_insn, 2, SUF_Z, 0x39, 0, 0, 0, CPU_SSE41, 0, 0 +pminsw, mmxsse2_insn, 2, SUF_Z, 0xEA, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pminub, mmxsse2_insn, 2, SUF_Z, 0xDA, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pminud, sse4_insn, 2, SUF_Z, 0x3B, 0, 0, 0, CPU_SSE41, 0, 0 +pminuw, sse4_insn, 2, SUF_Z, 0x3A, 0, 0, 0, CPU_SSE41, 0, 0 +pmovmskb, pmovmskb_insn, 6, SUF_Z, 0, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pmovmskbl, pmovmskb_insn, 6, SUF_L, 0, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pmovmskbq, pmovmskb_insn, 6, SUF_Q, 0, 0, 0, ONLY_64, CPU_MMX, CPU_P3, 0 +pmovsxbd, sse4m32_insn, 4, SUF_Z, 0x21, 0, 0, 0, CPU_SSE41, 0, 0 +pmovsxbq, sse4m16_insn, 4, SUF_Z, 0x22, 0, 0, 0, CPU_SSE41, 0, 0 +pmovsxbw, sse4m64_insn, 4, SUF_Z, 0x20, 0, 0, 0, CPU_SSE41, 0, 0 +pmovsxdq, sse4m64_insn, 4, SUF_Z, 0x25, 0, 0, 0, CPU_SSE41, 0, 0 +pmovsxwd, sse4m64_insn, 4, SUF_Z, 0x23, 0, 0, 0, CPU_SSE41, 0, 0 +pmovsxwq, sse4m32_insn, 4, SUF_Z, 0x24, 0, 0, 0, CPU_SSE41, 0, 0 +pmovzxbd, sse4m32_insn, 4, SUF_Z, 0x31, 0, 0, 0, CPU_SSE41, 0, 0 +pmovzxbq, sse4m16_insn, 4, SUF_Z, 0x32, 0, 0, 0, CPU_SSE41, 0, 0 +pmovzxbw, sse4m64_insn, 4, SUF_Z, 0x30, 0, 0, 0, CPU_SSE41, 0, 0 +pmovzxdq, sse4m64_insn, 4, SUF_Z, 0x35, 0, 0, 0, CPU_SSE41, 0, 0 +pmovzxwd, sse4m64_insn, 4, SUF_Z, 0x33, 0, 0, 0, CPU_SSE41, 0, 0 +pmovzxwq, sse4m32_insn, 4, SUF_Z, 0x34, 0, 0, 0, CPU_SSE41, 0, 0 +pmuldq, sse4_insn, 2, SUF_Z, 0x28, 0, 0, 0, CPU_SSE41, 0, 0 +pmulhriw, cyrixmmx_insn, 1, SUF_Z, 0x5D, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pmulhrsw, ssse3_insn, 5, SUF_Z, 0x0B, 0, 0, 0, CPU_SSSE3, 0, 0 +pmulhrw, now3d_insn, 1, SUF_Z, 0xB7, 0, 0, 0, CPU_3DNow, 0, 0 +pmulhrwc, cyrixmmx_insn, 1, SUF_Z, 0x59, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pmulhuw, mmxsse2_insn, 2, SUF_Z, 0xE4, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pmulhw, mmxsse2_insn, 2, SUF_Z, 0xE5, 0, 0, 0, CPU_MMX, 0, 0 +pmulld, sse4_insn, 2, SUF_Z, 0x40, 0, 0, 0, CPU_SSE41, 0, 0 +pmullw, mmxsse2_insn, 2, SUF_Z, 0xD5, 0, 0, 0, CPU_MMX, 0, 0 +pmuludq, mmxsse2_insn, 2, SUF_Z, 0xF4, 0, 0, 0, CPU_SSE2, 0, 0 +pmvgezb, cyrixmmx_insn, 1, SUF_Z, 0x5C, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pmvlzb, cyrixmmx_insn, 1, SUF_Z, 0x5B, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pmvnzb, cyrixmmx_insn, 1, SUF_Z, 0x5A, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pmvzb, cyrixmmx_insn, 1, SUF_Z, 0x58, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pop, pop_insn, 23, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +popa, onebyte_insn, 1, SUF_Z, 0x61, 0x00, 0, NOT_64, CPU_186, 0, 0 +popal, onebyte_insn, 1, SUF_Z, 0x61, 0x20, 0, NOT_64, CPU_386, 0, 0 +popaw, onebyte_insn, 1, SUF_Z, 0x61, 0x10, 0, NOT_64, CPU_186, 0, 0 +popcnt, cnt_insn, 3, SUF_Z, 0xB8, 0, 0, 0, CPU_SSE42, 0, 0 +popcntl, cnt_insn, 3, SUF_L, 0xB8, 0, 0, 0, CPU_SSE42, 0, 0 +popcntq, cnt_insn, 3, SUF_Q, 0xB8, 0, 0, ONLY_64, CPU_SSE42, 0, 0 +popcntw, cnt_insn, 3, SUF_W, 0xB8, 0, 0, 0, CPU_SSE42, 0, 0 +popf, onebyte_insn, 1, SUF_Z, 0x9D, 0x00, 0x40, 0, 0, 0, 0 +popfl, onebyte_insn, 1, SUF_Z, 0x9D, 0x20, 0, NOT_64, CPU_386, 0, 0 +popfq, onebyte_insn, 1, SUF_Z, 0x9D, 0x40, 0x40, ONLY_64, 0, 0, 0 +popfw, onebyte_insn, 1, SUF_Z, 0x9D, 0x10, 0x40, 0, 0, 0, 0 +popl, pop_insn, 23, SUF_L, 0, 0, 0, NOT_64, CPU_386, 0, 0 +popq, pop_insn, 23, SUF_Q, 0, 0, 0, ONLY_64, 0, 0, 0 +popw, pop_insn, 23, SUF_W, 0, 0, 0, 0, 0, 0, 0 +por, mmxsse2_insn, 2, SUF_Z, 0xEB, 0, 0, 0, CPU_MMX, 0, 0 +prefetch, twobytemem_insn, 1, SUF_Z, 0x00, 0x0F, 0x0D, 0, CPU_3DNow, 0, 0 +prefetchnta, twobytemem_insn, 1, SUF_Z, 0x00, 0x0F, 0x18, 0, CPU_P3, 0, 0 +prefetcht0, twobytemem_insn, 1, SUF_Z, 0x01, 0x0F, 0x18, 0, CPU_P3, 0, 0 +prefetcht1, twobytemem_insn, 1, SUF_Z, 0x02, 0x0F, 0x18, 0, CPU_P3, 0, 0 +prefetcht2, twobytemem_insn, 1, SUF_Z, 0x03, 0x0F, 0x18, 0, CPU_P3, 0, 0 +prefetchw, twobytemem_insn, 1, SUF_Z, 0x01, 0x0F, 0x0D, 0, CPU_PRFCHW, 0, 0 +psadbw, mmxsse2_insn, 2, SUF_Z, 0xF6, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pshufb, ssse3_insn, 5, SUF_Z, 0x00, 0, 0, 0, CPU_SSSE3, 0, 0 +pshufd, xmm_xmm128_imm_insn, 1, SUF_Z, 0x66, 0x70, 0, 0, CPU_SSE2, 0, 0 +pshufhw, xmm_xmm128_imm_insn, 1, SUF_Z, 0xF3, 0x70, 0, 0, CPU_SSE2, 0, 0 +pshuflw, xmm_xmm128_imm_insn, 1, SUF_Z, 0xF2, 0x70, 0, 0, CPU_SSE2, 0, 0 +pshufw, pshufw_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_MMX, CPU_P3, 0 +psignb, ssse3_insn, 5, SUF_Z, 0x08, 0, 0, 0, CPU_SSSE3, 0, 0 +psignd, ssse3_insn, 5, SUF_Z, 0x0A, 0, 0, 0, CPU_SSSE3, 0, 0 +psignw, ssse3_insn, 5, SUF_Z, 0x09, 0, 0, 0, CPU_SSSE3, 0, 0 +pslld, pshift_insn, 4, SUF_Z, 0xF2, 0x72, 0x06, 0, CPU_MMX, 0, 0 +pslldq, pslrldq_insn, 4, SUF_Z, 0x07, 0, 0, 0, CPU_SSE2, 0, 0 +psllq, pshift_insn, 4, SUF_Z, 0xF3, 0x73, 0x06, 0, CPU_MMX, 0, 0 +psllw, pshift_insn, 4, SUF_Z, 0xF1, 0x71, 0x06, 0, CPU_MMX, 0, 0 +psrad, pshift_insn, 4, SUF_Z, 0xE2, 0x72, 0x04, 0, CPU_MMX, 0, 0 +psraw, pshift_insn, 4, SUF_Z, 0xE1, 0x71, 0x04, 0, CPU_MMX, 0, 0 +psrld, pshift_insn, 4, SUF_Z, 0xD2, 0x72, 0x02, 0, CPU_MMX, 0, 0 +psrldq, pslrldq_insn, 4, SUF_Z, 0x03, 0, 0, 0, CPU_SSE2, 0, 0 +psrlq, pshift_insn, 4, SUF_Z, 0xD3, 0x73, 0x02, 0, CPU_MMX, 0, 0 +psrlw, pshift_insn, 4, SUF_Z, 0xD1, 0x71, 0x02, 0, CPU_MMX, 0, 0 +psubb, mmxsse2_insn, 2, SUF_Z, 0xF8, 0, 0, 0, CPU_MMX, 0, 0 +psubd, mmxsse2_insn, 2, SUF_Z, 0xFA, 0, 0, 0, CPU_MMX, 0, 0 +psubq, mmxsse2_insn, 2, SUF_Z, 0xFB, 0, 0, 0, CPU_MMX, 0, 0 +psubsb, mmxsse2_insn, 2, SUF_Z, 0xE8, 0, 0, 0, CPU_MMX, 0, 0 +psubsiw, cyrixmmx_insn, 1, SUF_Z, 0x55, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +psubsw, mmxsse2_insn, 2, SUF_Z, 0xE9, 0, 0, 0, CPU_MMX, 0, 0 +psubusb, mmxsse2_insn, 2, SUF_Z, 0xD8, 0, 0, 0, CPU_MMX, 0, 0 +psubusw, mmxsse2_insn, 2, SUF_Z, 0xD9, 0, 0, 0, CPU_MMX, 0, 0 +psubw, mmxsse2_insn, 2, SUF_Z, 0xF9, 0, 0, 0, CPU_MMX, 0, 0 +pswapd, now3d_insn, 1, SUF_Z, 0xBB, 0, 0, 0, CPU_3DNow, CPU_Athlon, 0 +ptest, sse4_insn, 2, SUF_Z, 0x17, 0, 0, 0, CPU_SSE41, 0, 0 +punpckhbw, mmxsse2_insn, 2, SUF_Z, 0x68, 0, 0, 0, CPU_MMX, 0, 0 +punpckhdq, mmxsse2_insn, 2, SUF_Z, 0x6A, 0, 0, 0, CPU_MMX, 0, 0 +punpckhqdq, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x6D, 0, 0, CPU_SSE2, 0, 0 +punpckhwd, mmxsse2_insn, 2, SUF_Z, 0x69, 0, 0, 0, CPU_MMX, 0, 0 +punpcklbw, mmxsse2_insn, 2, SUF_Z, 0x60, 0, 0, 0, CPU_MMX, 0, 0 +punpckldq, mmxsse2_insn, 2, SUF_Z, 0x62, 0, 0, 0, CPU_MMX, 0, 0 +punpcklqdq, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x6C, 0, 0, CPU_SSE2, 0, 0 +punpcklwd, mmxsse2_insn, 2, SUF_Z, 0x61, 0, 0, 0, CPU_MMX, 0, 0 +push, push_insn, 35, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +pusha, onebyte_insn, 1, SUF_Z, 0x60, 0x00, 0, NOT_64, CPU_186, 0, 0 +pushal, onebyte_insn, 1, SUF_Z, 0x60, 0x20, 0, NOT_64, CPU_386, 0, 0 +pushaw, onebyte_insn, 1, SUF_Z, 0x60, 0x10, 0, NOT_64, CPU_186, 0, 0 +pushf, onebyte_insn, 1, SUF_Z, 0x9C, 0x00, 0x40, 0, 0, 0, 0 +pushfl, onebyte_insn, 1, SUF_Z, 0x9C, 0x20, 0, NOT_64, CPU_386, 0, 0 +pushfq, onebyte_insn, 1, SUF_Z, 0x9C, 0x40, 0x40, ONLY_64, 0, 0, 0 +pushfw, onebyte_insn, 1, SUF_Z, 0x9C, 0x10, 0x40, 0, 0, 0, 0 +pushl, push_insn, 35, SUF_L, 0, 0, 0, 0, CPU_386, 0, 0 +pushq, push_insn, 35, SUF_Q, 0, 0, 0, ONLY_64, 0, 0, 0 +pushw, push_insn, 35, SUF_W, 0, 0, 0, 0, 0, 0, 0 +pxor, mmxsse2_insn, 2, SUF_Z, 0xEF, 0, 0, 0, CPU_MMX, 0, 0 +qword, NULL, X86_OPERSIZE>>8, 0x40, 0, 0, 0, ONLY_64, 0, 0, 0 +rcl, shift_insn, 16, SUF_Z, 0x02, 0, 0, 0, 0, 0, 0 +rclb, shift_insn, 16, SUF_B, 0x02, 0, 0, 0, 0, 0, 0 +rcll, shift_insn, 16, SUF_L, 0x02, 0, 0, 0, CPU_386, 0, 0 +rclq, shift_insn, 16, SUF_Q, 0x02, 0, 0, ONLY_64, 0, 0, 0 +rclw, shift_insn, 16, SUF_W, 0x02, 0, 0, 0, 0, 0, 0 +rcpps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x53, 0, 0, CPU_SSE, 0, 0 +rcpss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x53, 0, 0, CPU_SSE, 0, 0 +rcr, shift_insn, 16, SUF_Z, 0x03, 0, 0, 0, 0, 0, 0 +rcrb, shift_insn, 16, SUF_B, 0x03, 0, 0, 0, 0, 0, 0 +rcrl, shift_insn, 16, SUF_L, 0x03, 0, 0, 0, CPU_386, 0, 0 +rcrq, shift_insn, 16, SUF_Q, 0x03, 0, 0, ONLY_64, 0, 0, 0 +rcrw, shift_insn, 16, SUF_W, 0x03, 0, 0, 0, 0, 0, 0 +rdfsbase, fs_gs_base_insn, 2, SUF_Z, 0x00, 0, 0, ONLY_64, CPU_FSGSBASE, 0, 0 +rdgsbase, fs_gs_base_insn, 2, SUF_Z, 0x01, 0, 0, ONLY_64, CPU_FSGSBASE, 0, 0 +rdmsr, twobyte_insn, 1, SUF_Z, 0x0F, 0x32, 0, 0, CPU_586, CPU_Priv, 0 +rdpmc, twobyte_insn, 1, SUF_Z, 0x0F, 0x33, 0, 0, CPU_686, 0, 0 +rdrand, rdrand_insn, 3, SUF_Z, 0x06, 0, 0, 0, CPU_RDRAND, 0, 0 +rdseed, rdrand_insn, 3, SUF_Z, 0x07, 0, 0, 0, CPU_RDSEED, 0, 0 +rdshr, rdwrshr_insn, 1, SUF_Z, 0x00, 0, 0, 0, CPU_686, CPU_Cyrix, CPU_SMM +rdtsc, twobyte_insn, 1, SUF_Z, 0x0F, 0x31, 0, 0, CPU_586, 0, 0 +rdtscp, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xF9, 0, CPU_686, CPU_AMD, CPU_Priv +rep, NULL, X86_LOCKREP>>8, 0xF3, 0, 0, 0, 0, 0, 0, 0 +repe, NULL, X86_LOCKREP>>8, 0xF3, 0, 0, 0, 0, 0, 0, 0 +repne, NULL, X86_LOCKREP>>8, 0xF2, 0, 0, 0, 0, 0, 0, 0 +repnz, NULL, X86_LOCKREP>>8, 0xF2, 0, 0, 0, 0, 0, 0, 0 +repz, NULL, X86_LOCKREP>>8, 0xF3, 0, 0, 0, 0, 0, 0, 0 +ret, retnf_insn, 6, SUF_Z, 0xC2, 0, 0, 0, 0, 0, 0 +retl, retnf_insn, 6, SUF_Z, 0xC2, 0, 0, NOT_64, 0, 0, 0 +retq, retnf_insn, 6, SUF_Z, 0xC2, 0, 0, ONLY_64, 0, 0, 0 +retw, retnf_insn, 6, SUF_Z, 0xC2, 0x10, 0, 0, 0, 0, 0 +rex, NULL, X86_REX>>8, 0x40, 0, 0, 0, ONLY_64, 0, 0, 0 +rex64, NULL, X86_REX>>8, 0x48, 0, 0, 0, ONLY_64, 0, 0, 0 +rex64x, NULL, X86_REX>>8, 0x4C, 0, 0, 0, ONLY_64, 0, 0, 0 +rex64xy, NULL, X86_REX>>8, 0x4E, 0, 0, 0, ONLY_64, 0, 0, 0 +rex64xyz, NULL, X86_REX>>8, 0x4F, 0, 0, 0, ONLY_64, 0, 0, 0 +rex64xz, NULL, X86_REX>>8, 0x4D, 0, 0, 0, ONLY_64, 0, 0, 0 +rex64y, NULL, X86_REX>>8, 0x4A, 0, 0, 0, ONLY_64, 0, 0, 0 +rex64yz, NULL, X86_REX>>8, 0x4B, 0, 0, 0, ONLY_64, 0, 0, 0 +rex64z, NULL, X86_REX>>8, 0x49, 0, 0, 0, ONLY_64, 0, 0, 0 +rexx, NULL, X86_REX>>8, 0x44, 0, 0, 0, ONLY_64, 0, 0, 0 +rexxy, NULL, X86_REX>>8, 0x46, 0, 0, 0, ONLY_64, 0, 0, 0 +rexxyz, NULL, X86_REX>>8, 0x47, 0, 0, 0, ONLY_64, 0, 0, 0 +rexxz, NULL, X86_REX>>8, 0x45, 0, 0, 0, ONLY_64, 0, 0, 0 +rexy, NULL, X86_REX>>8, 0x42, 0, 0, 0, ONLY_64, 0, 0, 0 +rexyz, NULL, X86_REX>>8, 0x43, 0, 0, 0, ONLY_64, 0, 0, 0 +rexz, NULL, X86_REX>>8, 0x41, 0, 0, 0, ONLY_64, 0, 0, 0 +rol, shift_insn, 16, SUF_Z, 0x00, 0, 0, 0, 0, 0, 0 +rolb, shift_insn, 16, SUF_B, 0x00, 0, 0, 0, 0, 0, 0 +roll, shift_insn, 16, SUF_L, 0x00, 0, 0, 0, CPU_386, 0, 0 +rolq, shift_insn, 16, SUF_Q, 0x00, 0, 0, ONLY_64, 0, 0, 0 +rolw, shift_insn, 16, SUF_W, 0x00, 0, 0, 0, 0, 0, 0 +ror, shift_insn, 16, SUF_Z, 0x01, 0, 0, 0, 0, 0, 0 +rorb, shift_insn, 16, SUF_B, 0x01, 0, 0, 0, 0, 0, 0 +rorl, shift_insn, 16, SUF_L, 0x01, 0, 0, 0, CPU_386, 0, 0 +rorq, shift_insn, 16, SUF_Q, 0x01, 0, 0, ONLY_64, 0, 0, 0 +rorw, shift_insn, 16, SUF_W, 0x01, 0, 0, 0, 0, 0, 0 +rorx, vex_gpr_reg_rm_0F_imm8_insn, 2, SUF_Z, 0xF2, 0x3A, 0xF0, ONLY_AVX, CPU_BMI2, 0, 0 +rorxl, vex_gpr_reg_rm_0F_imm8_insn, 2, SUF_L, 0xF2, 0x3A, 0xF0, ONLY_AVX, CPU_BMI2, 0, 0 +rorxq, vex_gpr_reg_rm_0F_imm8_insn, 2, SUF_Q, 0xF2, 0x3A, 0xF0, ONLY_64|ONLY_AVX, CPU_BMI2, 0, 0 +roundpd, sse4imm_insn, 2, SUF_Z, 0x09, 0, 0, 0, CPU_SSE41, 0, 0 +roundps, sse4imm_insn, 2, SUF_Z, 0x08, 0, 0, 0, CPU_SSE41, 0, 0 +roundsd, sse4m64imm_insn, 4, SUF_Z, 0x0B, 0, 0, 0, CPU_SSE41, 0, 0 +roundss, sse4m32imm_insn, 4, SUF_Z, 0x0A, 0, 0, 0, CPU_SSE41, 0, 0 +rsdc, rsdc_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_486, CPU_Cyrix, CPU_SMM +rsldt, cyrixsmm_insn, 1, SUF_Z, 0x7B, 0, 0, 0, CPU_486, CPU_Cyrix, CPU_SMM +rsm, twobyte_insn, 1, SUF_Z, 0x0F, 0xAA, 0, 0, CPU_586, CPU_SMM, 0 +rsqrtps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x52, 0, 0, CPU_SSE, 0, 0 +rsqrtss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x52, 0, 0, CPU_SSE, 0, 0 +rsts, cyrixsmm_insn, 1, SUF_Z, 0x7D, 0, 0, 0, CPU_486, CPU_Cyrix, CPU_SMM +sahf, onebyte_insn, 1, SUF_Z, 0x9E, 0, 0, 0, 0, 0, 0 +sal, shift_insn, 16, SUF_Z, 0x04, 0, 0, 0, 0, 0, 0 +salb, shift_insn, 16, SUF_B, 0x04, 0, 0, 0, 0, 0, 0 +salc, onebyte_insn, 1, SUF_Z, 0xD6, 0, 0, NOT_64, CPU_Undoc, 0, 0 +sall, shift_insn, 16, SUF_L, 0x04, 0, 0, 0, CPU_386, 0, 0 +salq, shift_insn, 16, SUF_Q, 0x04, 0, 0, ONLY_64, 0, 0, 0 +salw, shift_insn, 16, SUF_W, 0x04, 0, 0, 0, 0, 0, 0 +sar, shift_insn, 16, SUF_Z, 0x07, 0, 0, 0, 0, 0, 0 +sarb, shift_insn, 16, SUF_B, 0x07, 0, 0, 0, 0, 0, 0 +sarl, shift_insn, 16, SUF_L, 0x07, 0, 0, 0, CPU_386, 0, 0 +sarq, shift_insn, 16, SUF_Q, 0x07, 0, 0, ONLY_64, 0, 0, 0 +sarw, shift_insn, 16, SUF_W, 0x07, 0, 0, 0, 0, 0, 0 +sarx, vex_gpr_reg_rm_nds_0F_insn, 2, SUF_Z, 0xF3, 0x38, 0xF7, ONLY_AVX, CPU_BMI2, 0, 0 +sarxl, vex_gpr_reg_rm_nds_0F_insn, 2, SUF_L, 0xF3, 0x38, 0xF7, ONLY_AVX, CPU_BMI2, 0, 0 +sarxq, vex_gpr_reg_rm_nds_0F_insn, 2, SUF_Q, 0xF3, 0x38, 0xF7, ONLY_64|ONLY_AVX, CPU_BMI2, 0, 0 +sbb, arith_insn, 22, SUF_Z, 0x18, 0x03, 0, 0, 0, 0, 0 +sbbb, arith_insn, 22, SUF_B, 0x18, 0x03, 0, 0, 0, 0, 0 +sbbl, arith_insn, 22, SUF_L, 0x18, 0x03, 0, 0, CPU_386, 0, 0 +sbbq, arith_insn, 22, SUF_Q, 0x18, 0x03, 0, ONLY_64, 0, 0, 0 +sbbw, arith_insn, 22, SUF_W, 0x18, 0x03, 0, 0, 0, 0, 0 +scasb, onebyte_insn, 1, SUF_Z, 0xAE, 0x00, 0, 0, 0, 0, 0 +scasl, onebyte_insn, 1, SUF_Z, 0xAF, 0x20, 0, 0, CPU_386, 0, 0 +scasq, onebyte_insn, 1, SUF_Z, 0xAF, 0x40, 0, ONLY_64, 0, 0, 0 +scasw, onebyte_insn, 1, SUF_Z, 0xAF, 0x10, 0, 0, 0, 0, 0 +seta, setcc_insn, 1, SUF_Z, 0x07, 0, 0, 0, CPU_386, 0, 0 +setab, setcc_insn, 1, SUF_B, 0x07, 0, 0, 0, CPU_386, 0, 0 +setae, setcc_insn, 1, SUF_Z, 0x03, 0, 0, 0, CPU_386, 0, 0 +setaeb, setcc_insn, 1, SUF_B, 0x03, 0, 0, 0, CPU_386, 0, 0 +setb, setcc_insn, 1, SUF_Z, 0x02, 0, 0, 0, CPU_386, 0, 0 +setbb, setcc_insn, 1, SUF_B, 0x02, 0, 0, 0, CPU_386, 0, 0 +setbe, setcc_insn, 1, SUF_Z, 0x06, 0, 0, 0, CPU_386, 0, 0 +setbeb, setcc_insn, 1, SUF_B, 0x06, 0, 0, 0, CPU_386, 0, 0 +setc, setcc_insn, 1, SUF_Z, 0x02, 0, 0, 0, CPU_386, 0, 0 +setcb, setcc_insn, 1, SUF_B, 0x02, 0, 0, 0, CPU_386, 0, 0 +sete, setcc_insn, 1, SUF_Z, 0x04, 0, 0, 0, CPU_386, 0, 0 +seteb, setcc_insn, 1, SUF_B, 0x04, 0, 0, 0, CPU_386, 0, 0 +setg, setcc_insn, 1, SUF_Z, 0x0F, 0, 0, 0, CPU_386, 0, 0 +setgb, setcc_insn, 1, SUF_B, 0x0F, 0, 0, 0, CPU_386, 0, 0 +setge, setcc_insn, 1, SUF_Z, 0x0D, 0, 0, 0, CPU_386, 0, 0 +setgeb, setcc_insn, 1, SUF_B, 0x0D, 0, 0, 0, CPU_386, 0, 0 +setl, setcc_insn, 1, SUF_Z, 0x0C, 0, 0, 0, CPU_386, 0, 0 +setlb, setcc_insn, 1, SUF_B, 0x0C, 0, 0, 0, CPU_386, 0, 0 +setle, setcc_insn, 1, SUF_Z, 0x0E, 0, 0, 0, CPU_386, 0, 0 +setleb, setcc_insn, 1, SUF_B, 0x0E, 0, 0, 0, CPU_386, 0, 0 +setna, setcc_insn, 1, SUF_Z, 0x06, 0, 0, 0, CPU_386, 0, 0 +setnab, setcc_insn, 1, SUF_B, 0x06, 0, 0, 0, CPU_386, 0, 0 +setnae, setcc_insn, 1, SUF_Z, 0x02, 0, 0, 0, CPU_386, 0, 0 +setnaeb, setcc_insn, 1, SUF_B, 0x02, 0, 0, 0, CPU_386, 0, 0 +setnb, setcc_insn, 1, SUF_Z, 0x03, 0, 0, 0, CPU_386, 0, 0 +setnbb, setcc_insn, 1, SUF_B, 0x03, 0, 0, 0, CPU_386, 0, 0 +setnbe, setcc_insn, 1, SUF_Z, 0x07, 0, 0, 0, CPU_386, 0, 0 +setnbeb, setcc_insn, 1, SUF_B, 0x07, 0, 0, 0, CPU_386, 0, 0 +setnc, setcc_insn, 1, SUF_Z, 0x03, 0, 0, 0, CPU_386, 0, 0 +setncb, setcc_insn, 1, SUF_B, 0x03, 0, 0, 0, CPU_386, 0, 0 +setne, setcc_insn, 1, SUF_Z, 0x05, 0, 0, 0, CPU_386, 0, 0 +setneb, setcc_insn, 1, SUF_B, 0x05, 0, 0, 0, CPU_386, 0, 0 +setng, setcc_insn, 1, SUF_Z, 0x0E, 0, 0, 0, CPU_386, 0, 0 +setngb, setcc_insn, 1, SUF_B, 0x0E, 0, 0, 0, CPU_386, 0, 0 +setnge, setcc_insn, 1, SUF_Z, 0x0C, 0, 0, 0, CPU_386, 0, 0 +setngeb, setcc_insn, 1, SUF_B, 0x0C, 0, 0, 0, CPU_386, 0, 0 +setnl, setcc_insn, 1, SUF_Z, 0x0D, 0, 0, 0, CPU_386, 0, 0 +setnlb, setcc_insn, 1, SUF_B, 0x0D, 0, 0, 0, CPU_386, 0, 0 +setnle, setcc_insn, 1, SUF_Z, 0x0F, 0, 0, 0, CPU_386, 0, 0 +setnleb, setcc_insn, 1, SUF_B, 0x0F, 0, 0, 0, CPU_386, 0, 0 +setno, setcc_insn, 1, SUF_Z, 0x01, 0, 0, 0, CPU_386, 0, 0 +setnob, setcc_insn, 1, SUF_B, 0x01, 0, 0, 0, CPU_386, 0, 0 +setnp, setcc_insn, 1, SUF_Z, 0x0B, 0, 0, 0, CPU_386, 0, 0 +setnpb, setcc_insn, 1, SUF_B, 0x0B, 0, 0, 0, CPU_386, 0, 0 +setns, setcc_insn, 1, SUF_Z, 0x09, 0, 0, 0, CPU_386, 0, 0 +setnsb, setcc_insn, 1, SUF_B, 0x09, 0, 0, 0, CPU_386, 0, 0 +setnz, setcc_insn, 1, SUF_Z, 0x05, 0, 0, 0, CPU_386, 0, 0 +setnzb, setcc_insn, 1, SUF_B, 0x05, 0, 0, 0, CPU_386, 0, 0 +seto, setcc_insn, 1, SUF_Z, 0x00, 0, 0, 0, CPU_386, 0, 0 +setob, setcc_insn, 1, SUF_B, 0x00, 0, 0, 0, CPU_386, 0, 0 +setp, setcc_insn, 1, SUF_Z, 0x0A, 0, 0, 0, CPU_386, 0, 0 +setpb, setcc_insn, 1, SUF_B, 0x0A, 0, 0, 0, CPU_386, 0, 0 +setpe, setcc_insn, 1, SUF_Z, 0x0A, 0, 0, 0, CPU_386, 0, 0 +setpeb, setcc_insn, 1, SUF_B, 0x0A, 0, 0, 0, CPU_386, 0, 0 +setpo, setcc_insn, 1, SUF_Z, 0x0B, 0, 0, 0, CPU_386, 0, 0 +setpob, setcc_insn, 1, SUF_B, 0x0B, 0, 0, 0, CPU_386, 0, 0 +sets, setcc_insn, 1, SUF_Z, 0x08, 0, 0, 0, CPU_386, 0, 0 +setsb, setcc_insn, 1, SUF_B, 0x08, 0, 0, 0, CPU_386, 0, 0 +setz, setcc_insn, 1, SUF_Z, 0x04, 0, 0, 0, CPU_386, 0, 0 +setzb, setcc_insn, 1, SUF_B, 0x04, 0, 0, 0, CPU_386, 0, 0 +sfence, threebyte_insn, 1, SUF_Z, 0x0F, 0xAE, 0xF8, 0, CPU_P3, 0, 0 +sgdt, twobytemem_insn, 1, SUF_Z, 0x00, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +sgdtl, twobytemem_insn, 1, SUF_L, 0x00, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +sgdtq, twobytemem_insn, 1, SUF_Q, 0x00, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +sgdtw, twobytemem_insn, 1, SUF_W, 0x00, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +sha1msg1, intel_SHA1MSG1_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SHA, 0, 0 +sha1msg2, intel_SHA1MSG2_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SHA, 0, 0 +sha1nexte, intel_SHA1NEXTE_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SHA, 0, 0 +sha1rnds4, intel_SHA1RNDS4_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SHA, 0, 0 +sha256msg1, intel_SHA256MSG1_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SHA, 0, 0 +sha256msg2, intel_SHA256MSG2_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SHA, 0, 0 +sha256rnds2, intel_SHA256RNDS2_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SHA, 0, 0 +shl, shift_insn, 16, SUF_Z, 0x04, 0, 0, 0, 0, 0, 0 +shlb, shift_insn, 16, SUF_B, 0x04, 0, 0, 0, 0, 0, 0 +shld, shlrd_insn, 9, SUF_Z, 0xA4, 0, 0, 0, CPU_386, 0, 0 +shldl, shlrd_insn, 9, SUF_L, 0xA4, 0, 0, 0, CPU_386, 0, 0 +shldq, shlrd_insn, 9, SUF_Q, 0xA4, 0, 0, ONLY_64, CPU_386, 0, 0 +shldw, shlrd_insn, 9, SUF_W, 0xA4, 0, 0, 0, CPU_386, 0, 0 +shll, shift_insn, 16, SUF_L, 0x04, 0, 0, 0, CPU_386, 0, 0 +shlq, shift_insn, 16, SUF_Q, 0x04, 0, 0, ONLY_64, 0, 0, 0 +shlw, shift_insn, 16, SUF_W, 0x04, 0, 0, 0, 0, 0, 0 +shlx, vex_gpr_reg_rm_nds_0F_insn, 2, SUF_Z, 0x66, 0x38, 0xF7, ONLY_AVX, CPU_BMI2, 0, 0 +shlxl, vex_gpr_reg_rm_nds_0F_insn, 2, SUF_L, 0x66, 0x38, 0xF7, ONLY_AVX, CPU_BMI2, 0, 0 +shlxq, vex_gpr_reg_rm_nds_0F_insn, 2, SUF_Q, 0x66, 0x38, 0xF7, ONLY_64|ONLY_AVX, CPU_BMI2, 0, 0 +shr, shift_insn, 16, SUF_Z, 0x05, 0, 0, 0, 0, 0, 0 +shrb, shift_insn, 16, SUF_B, 0x05, 0, 0, 0, 0, 0, 0 +shrd, shlrd_insn, 9, SUF_Z, 0xAC, 0, 0, 0, CPU_386, 0, 0 +shrdl, shlrd_insn, 9, SUF_L, 0xAC, 0, 0, 0, CPU_386, 0, 0 +shrdq, shlrd_insn, 9, SUF_Q, 0xAC, 0, 0, ONLY_64, CPU_386, 0, 0 +shrdw, shlrd_insn, 9, SUF_W, 0xAC, 0, 0, 0, CPU_386, 0, 0 +shrl, shift_insn, 16, SUF_L, 0x05, 0, 0, 0, CPU_386, 0, 0 +shrq, shift_insn, 16, SUF_Q, 0x05, 0, 0, ONLY_64, 0, 0, 0 +shrw, shift_insn, 16, SUF_W, 0x05, 0, 0, 0, 0, 0, 0 +shrx, vex_gpr_reg_rm_nds_0F_insn, 2, SUF_Z, 0xF2, 0x38, 0xF7, ONLY_AVX, CPU_BMI2, 0, 0 +shrxl, vex_gpr_reg_rm_nds_0F_insn, 2, SUF_L, 0xF2, 0x38, 0xF7, ONLY_AVX, CPU_BMI2, 0, 0 +shrxq, vex_gpr_reg_rm_nds_0F_insn, 2, SUF_Q, 0xF2, 0x38, 0xF7, ONLY_64|ONLY_AVX, CPU_BMI2, 0, 0 +shufpd, xmm_xmm128_imm_insn, 1, SUF_Z, 0x66, 0xC6, 0, 0, CPU_SSE2, 0, 0 +shufps, xmm_xmm128_imm_insn, 1, SUF_Z, 0x00, 0xC6, 0, 0, CPU_SSE, 0, 0 +sidt, twobytemem_insn, 1, SUF_Z, 0x01, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +sidtl, twobytemem_insn, 1, SUF_L, 0x01, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +sidtq, twobytemem_insn, 1, SUF_Q, 0x01, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +sidtw, twobytemem_insn, 1, SUF_W, 0x01, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +skinit, skinit_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_SVM, 0, 0 +sldt, sldtmsw_insn, 6, SUF_Z, 0x00, 0x00, 0, 0, CPU_286, 0, 0 +sldtl, sldtmsw_insn, 6, SUF_L, 0x00, 0x00, 0, 0, CPU_386, 0, 0 +sldtq, sldtmsw_insn, 6, SUF_Q, 0x00, 0x00, 0, ONLY_64, CPU_286, 0, 0 +sldtw, sldtmsw_insn, 6, SUF_W, 0x00, 0x00, 0, 0, CPU_286, 0, 0 +smi, onebyte_insn, 1, SUF_Z, 0xF1, 0, 0, 0, CPU_386, CPU_Undoc, 0 +smint, twobyte_insn, 1, SUF_Z, 0x0F, 0x38, 0, 0, CPU_686, CPU_Cyrix, 0 +smintold, twobyte_insn, 1, SUF_Z, 0x0F, 0x7E, 0, 0, CPU_486, CPU_Cyrix, CPU_Obs +smovb, onebyte_insn, 1, SUF_Z, 0xA4, 0x00, 0, 0, 0, 0, 0 +smovl, onebyte_insn, 1, SUF_Z, 0xA5, 0x20, 0, 0, CPU_386, 0, 0 +smovq, onebyte_insn, 1, SUF_Z, 0xA5, 0x40, 0, ONLY_64, 0, 0, 0 +smovw, onebyte_insn, 1, SUF_Z, 0xA5, 0x10, 0, 0, 0, 0, 0 +smsw, sldtmsw_insn, 6, SUF_Z, 0x04, 0x01, 0, 0, CPU_286, 0, 0 +smswl, sldtmsw_insn, 6, SUF_L, 0x04, 0x01, 0, 0, CPU_386, 0, 0 +smswq, sldtmsw_insn, 6, SUF_Q, 0x04, 0x01, 0, ONLY_64, CPU_286, 0, 0 +smsww, sldtmsw_insn, 6, SUF_W, 0x04, 0x01, 0, 0, CPU_286, 0, 0 +sqrtpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x51, 0, 0, CPU_SSE2, 0, 0 +sqrtps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x51, 0, 0, CPU_SSE, 0, 0 +sqrtsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x51, 0, 0, CPU_SSE2, 0, 0 +sqrtss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x51, 0, 0, CPU_SSE, 0, 0 +sscab, onebyte_insn, 1, SUF_Z, 0xAE, 0x00, 0, 0, 0, 0, 0 +sscal, onebyte_insn, 1, SUF_Z, 0xAF, 0x20, 0, 0, CPU_386, 0, 0 +sscaq, onebyte_insn, 1, SUF_Z, 0xAF, 0x40, 0, ONLY_64, 0, 0, 0 +sscaw, onebyte_insn, 1, SUF_Z, 0xAF, 0x10, 0, 0, 0, 0, 0 +stac, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xCB, 0, CPU_SMAP, 0, 0 +stc, onebyte_insn, 1, SUF_Z, 0xF9, 0, 0, 0, 0, 0, 0 +std, onebyte_insn, 1, SUF_Z, 0xFD, 0, 0, 0, 0, 0, 0 +stgi, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xDC, 0, CPU_SVM, 0, 0 +sti, onebyte_insn, 1, SUF_Z, 0xFB, 0, 0, 0, 0, 0, 0 +stmxcsr, ldstmxcsr_insn, 1, SUF_Z, 0x03, 0, 0, 0, CPU_SSE, 0, 0 +stosb, onebyte_insn, 1, SUF_Z, 0xAA, 0x00, 0, 0, 0, 0, 0 +stosl, onebyte_insn, 1, SUF_Z, 0xAB, 0x20, 0, 0, CPU_386, 0, 0 +stosq, onebyte_insn, 1, SUF_Z, 0xAB, 0x40, 0, ONLY_64, 0, 0, 0 +stosw, onebyte_insn, 1, SUF_Z, 0xAB, 0x10, 0, 0, 0, 0, 0 +str, str_insn, 4, SUF_Z, 0, 0, 0, 0, CPU_286, CPU_Prot, 0 +strl, str_insn, 4, SUF_L, 0, 0, 0, 0, CPU_386, CPU_Prot, 0 +strq, str_insn, 4, SUF_Q, 0, 0, 0, ONLY_64, CPU_286, CPU_Prot, 0 +strw, str_insn, 4, SUF_W, 0, 0, 0, 0, CPU_286, CPU_Prot, 0 +sub, arith_insn, 22, SUF_Z, 0x28, 0x05, 0, 0, 0, 0, 0 +subb, arith_insn, 22, SUF_B, 0x28, 0x05, 0, 0, 0, 0, 0 +subl, arith_insn, 22, SUF_L, 0x28, 0x05, 0, 0, CPU_386, 0, 0 +subpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x5C, 0, 0, CPU_SSE2, 0, 0 +subps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x5C, 0, 0, CPU_SSE, 0, 0 +subq, arith_insn, 22, SUF_Q, 0x28, 0x05, 0, ONLY_64, 0, 0, 0 +subsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5C, 0, 0, CPU_SSE2, 0, 0 +subss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5C, 0, 0, CPU_SSE, 0, 0 +subw, arith_insn, 22, SUF_W, 0x28, 0x05, 0, 0, 0, 0, 0 +svdc, svdc_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_486, CPU_Cyrix, CPU_SMM +svldt, cyrixsmm_insn, 1, SUF_Z, 0x7A, 0, 0, 0, CPU_486, CPU_Cyrix, CPU_SMM +svts, cyrixsmm_insn, 1, SUF_Z, 0x7C, 0, 0, 0, CPU_486, CPU_Cyrix, CPU_SMM +swapgs, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xF8, ONLY_64, 0, 0, 0 +syscall, twobyte_insn, 1, SUF_Z, 0x0F, 0x05, 0, 0, CPU_686, CPU_AMD, 0 +sysenter, twobyte_insn, 1, SUF_Z, 0x0F, 0x34, 0, NOT_64, CPU_686, 0, 0 +sysexit, twobyte_insn, 1, SUF_Z, 0x0F, 0x35, 0, NOT_64, CPU_686, CPU_Priv, 0 +sysret, twobyte_insn, 1, SUF_Z, 0x0F, 0x07, 0, 0, CPU_686, CPU_AMD, CPU_Priv +sysretl, twobyte_insn, 1, SUF_L, 0x0F, 0x07, 0, 0, CPU_686, CPU_AMD, CPU_Priv +sysretq, twobyte_insn, 1, SUF_Q, 0x0F, 0x07, 0, 0, CPU_686, CPU_AMD, CPU_Priv +t1mskc, xop_gpr_reg_rm_09_insn, 2, SUF_Z, 0x01, 0x07, 0, 0, CPU_386, CPU_TBM, 0 +t1mskcl, xop_gpr_reg_rm_09_insn, 2, SUF_L, 0x01, 0x07, 0, 0, CPU_386, CPU_TBM, 0 +t1mskcq, xop_gpr_reg_rm_09_insn, 2, SUF_Q, 0x01, 0x07, 0, ONLY_64, CPU_TBM, 0, 0 +test, test_insn, 20, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +testb, test_insn, 20, SUF_B, 0, 0, 0, 0, 0, 0, 0 +testl, test_insn, 20, SUF_L, 0, 0, 0, 0, CPU_386, 0, 0 +testq, test_insn, 20, SUF_Q, 0, 0, 0, ONLY_64, 0, 0, 0 +testw, test_insn, 20, SUF_W, 0, 0, 0, 0, 0, 0, 0 +tzcnt, cnt_insn, 3, SUF_Z, 0xBC, 0, 0, 0, CPU_BMI1, 0, 0 +tzcntl, cnt_insn, 3, SUF_L, 0xBC, 0, 0, 0, CPU_BMI1, 0, 0 +tzcntq, cnt_insn, 3, SUF_Q, 0xBC, 0, 0, ONLY_64, CPU_BMI1, 0, 0 +tzcntw, cnt_insn, 3, SUF_W, 0xBC, 0, 0, 0, CPU_BMI1, 0, 0 +tzmsk, xop_gpr_reg_rm_09_insn, 2, SUF_Z, 0x01, 0x04, 0, 0, CPU_386, CPU_TBM, 0 +tzmskl, xop_gpr_reg_rm_09_insn, 2, SUF_L, 0x01, 0x04, 0, 0, CPU_386, CPU_TBM, 0 +tzmskq, xop_gpr_reg_rm_09_insn, 2, SUF_Q, 0x01, 0x04, 0, ONLY_64, CPU_TBM, 0, 0 +ucomisd, xmm_xmm64_insn, 4, SUF_Z, 0x66, 0x2E, 0, 0, CPU_SSE2, 0, 0 +ucomiss, xmm_xmm32_insn, 4, SUF_Z, 0x00, 0x2E, 0, 0, CPU_SSE, 0, 0 +ud1, twobyte_insn, 1, SUF_Z, 0x0F, 0xB9, 0, 0, CPU_286, CPU_Undoc, 0 +ud2, twobyte_insn, 1, SUF_Z, 0x0F, 0x0B, 0, 0, CPU_286, 0, 0 +umov, umov_insn, 6, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_Undoc, 0 +unpckhpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x15, 0, 0, CPU_SSE2, 0, 0 +unpckhps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x15, 0, 0, CPU_SSE, 0, 0 +unpcklpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x14, 0, 0, CPU_SSE2, 0, 0 +unpcklps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x14, 0, 0, CPU_SSE, 0, 0 +vaddpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x58, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaddps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x58, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaddsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x58, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaddss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x58, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaddsubpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0xD0, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaddsubps, xmm_xmm128_256_insn, 4, SUF_Z, 0xF2, 0xD0, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaesdec, aes_insn, 2, SUF_Z, 0x38, 0xDE, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaesdeclast, aes_insn, 2, SUF_Z, 0x38, 0xDF, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaesenc, aes_insn, 2, SUF_Z, 0x38, 0xDC, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaesenclast, aes_insn, 2, SUF_Z, 0x38, 0xDD, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaesimc, aesimc_insn, 1, SUF_Z, 0x38, 0xDB, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaeskeygenassist, aes_imm_insn, 1, SUF_Z, 0x3A, 0xDF, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vandnpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x55, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vandnps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x55, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vandpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x54, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vandps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x54, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vblendpd, sse4imm_256_insn, 4, SUF_Z, 0x0D, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vblendps, sse4imm_256_insn, 4, SUF_Z, 0x0C, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vblendvpd, avx_sse4xmm0_insn, 2, SUF_Z, 0x4B, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vblendvps, avx_sse4xmm0_insn, 2, SUF_Z, 0x4A, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vbroadcastf128, vbroadcastif128_insn, 1, SUF_Z, 0x1A, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vbroadcasti128, vbroadcastif128_insn, 1, SUF_Z, 0x5A, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vbroadcastsd, vbroadcastsd_insn, 2, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vbroadcastss, vbroadcastss_insn, 4, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_ospd, ssecmp_128_insn, 3, SUF_Z, 0x10, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_osps, ssecmp_128_insn, 3, SUF_Z, 0x10, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_ossd, ssecmp_64_insn, 4, SUF_Z, 0x10, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_osss, ssecmp_32_insn, 4, SUF_Z, 0x10, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_uqpd, ssecmp_128_insn, 3, SUF_Z, 0x08, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_uqps, ssecmp_128_insn, 3, SUF_Z, 0x08, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_uqsd, ssecmp_64_insn, 4, SUF_Z, 0x08, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_uqss, ssecmp_32_insn, 4, SUF_Z, 0x08, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_uspd, ssecmp_128_insn, 3, SUF_Z, 0x18, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_usps, ssecmp_128_insn, 3, SUF_Z, 0x18, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_ussd, ssecmp_64_insn, 4, SUF_Z, 0x18, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_usss, ssecmp_32_insn, 4, SUF_Z, 0x18, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeqpd, ssecmp_128_insn, 3, SUF_Z, 0x00, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeqps, ssecmp_128_insn, 3, SUF_Z, 0x00, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeqsd, ssecmp_64_insn, 4, SUF_Z, 0x00, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeqss, ssecmp_32_insn, 4, SUF_Z, 0x00, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpfalse_ospd, ssecmp_128_insn, 3, SUF_Z, 0x1B, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpfalse_osps, ssecmp_128_insn, 3, SUF_Z, 0x1B, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpfalse_ossd, ssecmp_64_insn, 4, SUF_Z, 0x1B, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpfalse_osss, ssecmp_32_insn, 4, SUF_Z, 0x1B, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpfalsepd, ssecmp_128_insn, 3, SUF_Z, 0x0B, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpfalseps, ssecmp_128_insn, 3, SUF_Z, 0x0B, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpfalsesd, ssecmp_64_insn, 4, SUF_Z, 0x0B, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpfalsess, ssecmp_32_insn, 4, SUF_Z, 0x0B, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpge_oqpd, ssecmp_128_insn, 3, SUF_Z, 0x1D, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpge_oqps, ssecmp_128_insn, 3, SUF_Z, 0x1D, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpge_oqsd, ssecmp_64_insn, 4, SUF_Z, 0x1D, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpge_oqss, ssecmp_32_insn, 4, SUF_Z, 0x1D, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgepd, ssecmp_128_insn, 3, SUF_Z, 0x0D, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgeps, ssecmp_128_insn, 3, SUF_Z, 0x0D, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgesd, ssecmp_64_insn, 4, SUF_Z, 0x0D, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgess, ssecmp_32_insn, 4, SUF_Z, 0x0D, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgt_oqpd, ssecmp_128_insn, 3, SUF_Z, 0x1E, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgt_oqps, ssecmp_128_insn, 3, SUF_Z, 0x1E, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgt_oqsd, ssecmp_64_insn, 4, SUF_Z, 0x1E, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgt_oqss, ssecmp_32_insn, 4, SUF_Z, 0x1E, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgtpd, ssecmp_128_insn, 3, SUF_Z, 0x0E, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgtps, ssecmp_128_insn, 3, SUF_Z, 0x0E, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgtsd, ssecmp_64_insn, 4, SUF_Z, 0x0E, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgtss, ssecmp_32_insn, 4, SUF_Z, 0x0E, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmple_oqpd, ssecmp_128_insn, 3, SUF_Z, 0x12, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmple_oqps, ssecmp_128_insn, 3, SUF_Z, 0x12, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmple_oqsd, ssecmp_64_insn, 4, SUF_Z, 0x12, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmple_oqss, ssecmp_32_insn, 4, SUF_Z, 0x12, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmplepd, ssecmp_128_insn, 3, SUF_Z, 0x02, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpleps, ssecmp_128_insn, 3, SUF_Z, 0x02, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmplesd, ssecmp_64_insn, 4, SUF_Z, 0x02, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpless, ssecmp_32_insn, 4, SUF_Z, 0x02, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmplt_oqpd, ssecmp_128_insn, 3, SUF_Z, 0x11, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmplt_oqps, ssecmp_128_insn, 3, SUF_Z, 0x11, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmplt_oqsd, ssecmp_64_insn, 4, SUF_Z, 0x11, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmplt_oqss, ssecmp_32_insn, 4, SUF_Z, 0x11, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpltpd, ssecmp_128_insn, 3, SUF_Z, 0x01, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpltps, ssecmp_128_insn, 3, SUF_Z, 0x01, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpltsd, ssecmp_64_insn, 4, SUF_Z, 0x01, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpltss, ssecmp_32_insn, 4, SUF_Z, 0x01, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_oqpd, ssecmp_128_insn, 3, SUF_Z, 0x0C, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_oqps, ssecmp_128_insn, 3, SUF_Z, 0x0C, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_oqsd, ssecmp_64_insn, 4, SUF_Z, 0x0C, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_oqss, ssecmp_32_insn, 4, SUF_Z, 0x0C, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_ospd, ssecmp_128_insn, 3, SUF_Z, 0x1C, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_osps, ssecmp_128_insn, 3, SUF_Z, 0x1C, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_ossd, ssecmp_64_insn, 4, SUF_Z, 0x1C, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_osss, ssecmp_32_insn, 4, SUF_Z, 0x1C, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_uspd, ssecmp_128_insn, 3, SUF_Z, 0x14, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_usps, ssecmp_128_insn, 3, SUF_Z, 0x14, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_ussd, ssecmp_64_insn, 4, SUF_Z, 0x14, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_usss, ssecmp_32_insn, 4, SUF_Z, 0x14, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneqpd, ssecmp_128_insn, 3, SUF_Z, 0x04, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneqps, ssecmp_128_insn, 3, SUF_Z, 0x04, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneqsd, ssecmp_64_insn, 4, SUF_Z, 0x04, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneqss, ssecmp_32_insn, 4, SUF_Z, 0x04, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnge_uqpd, ssecmp_128_insn, 3, SUF_Z, 0x19, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnge_uqps, ssecmp_128_insn, 3, SUF_Z, 0x19, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnge_uqsd, ssecmp_64_insn, 4, SUF_Z, 0x19, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnge_uqss, ssecmp_32_insn, 4, SUF_Z, 0x19, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngepd, ssecmp_128_insn, 3, SUF_Z, 0x09, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngeps, ssecmp_128_insn, 3, SUF_Z, 0x09, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngesd, ssecmp_64_insn, 4, SUF_Z, 0x09, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngess, ssecmp_32_insn, 4, SUF_Z, 0x09, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngt_uqpd, ssecmp_128_insn, 3, SUF_Z, 0x1A, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngt_uqps, ssecmp_128_insn, 3, SUF_Z, 0x1A, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngt_uqsd, ssecmp_64_insn, 4, SUF_Z, 0x1A, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngt_uqss, ssecmp_32_insn, 4, SUF_Z, 0x1A, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngtpd, ssecmp_128_insn, 3, SUF_Z, 0x0A, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngtps, ssecmp_128_insn, 3, SUF_Z, 0x0A, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngtsd, ssecmp_64_insn, 4, SUF_Z, 0x0A, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngtss, ssecmp_32_insn, 4, SUF_Z, 0x0A, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnle_uqpd, ssecmp_128_insn, 3, SUF_Z, 0x16, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnle_uqps, ssecmp_128_insn, 3, SUF_Z, 0x16, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnle_uqsd, ssecmp_64_insn, 4, SUF_Z, 0x16, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnle_uqss, ssecmp_32_insn, 4, SUF_Z, 0x16, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnlepd, ssecmp_128_insn, 3, SUF_Z, 0x06, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnleps, ssecmp_128_insn, 3, SUF_Z, 0x06, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnlesd, ssecmp_64_insn, 4, SUF_Z, 0x06, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnless, ssecmp_32_insn, 4, SUF_Z, 0x06, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnlt_uqpd, ssecmp_128_insn, 3, SUF_Z, 0x15, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnlt_uqps, ssecmp_128_insn, 3, SUF_Z, 0x15, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnlt_uqsd, ssecmp_64_insn, 4, SUF_Z, 0x15, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnlt_uqss, ssecmp_32_insn, 4, SUF_Z, 0x15, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnltpd, ssecmp_128_insn, 3, SUF_Z, 0x05, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnltps, ssecmp_128_insn, 3, SUF_Z, 0x05, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnltsd, ssecmp_64_insn, 4, SUF_Z, 0x05, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnltss, ssecmp_32_insn, 4, SUF_Z, 0x05, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpord_spd, ssecmp_128_insn, 3, SUF_Z, 0x17, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpord_sps, ssecmp_128_insn, 3, SUF_Z, 0x17, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpord_ssd, ssecmp_64_insn, 4, SUF_Z, 0x17, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpord_sss, ssecmp_32_insn, 4, SUF_Z, 0x17, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpordpd, ssecmp_128_insn, 3, SUF_Z, 0x07, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpordps, ssecmp_128_insn, 3, SUF_Z, 0x07, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpordsd, ssecmp_64_insn, 4, SUF_Z, 0x07, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpordss, ssecmp_32_insn, 4, SUF_Z, 0x07, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmppd, xmm_xmm128_imm_256_insn, 3, SUF_Z, 0x66, 0xC2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpps, xmm_xmm128_imm_256_insn, 3, SUF_Z, 0x00, 0xC2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpsd, cmpsd_insn, 5, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpss, xmm_xmm32_imm_insn, 4, SUF_Z, 0xF3, 0xC2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmptrue_uspd, ssecmp_128_insn, 3, SUF_Z, 0x1F, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmptrue_usps, ssecmp_128_insn, 3, SUF_Z, 0x1F, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmptrue_ussd, ssecmp_64_insn, 4, SUF_Z, 0x1F, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmptrue_usss, ssecmp_32_insn, 4, SUF_Z, 0x1F, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmptruepd, ssecmp_128_insn, 3, SUF_Z, 0x0F, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmptrueps, ssecmp_128_insn, 3, SUF_Z, 0x0F, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmptruesd, ssecmp_64_insn, 4, SUF_Z, 0x0F, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmptruess, ssecmp_32_insn, 4, SUF_Z, 0x0F, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpunord_spd, ssecmp_128_insn, 3, SUF_Z, 0x13, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpunord_sps, ssecmp_128_insn, 3, SUF_Z, 0x13, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpunord_ssd, ssecmp_64_insn, 4, SUF_Z, 0x13, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpunord_sss, ssecmp_32_insn, 4, SUF_Z, 0x13, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpunordpd, ssecmp_128_insn, 3, SUF_Z, 0x03, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpunordps, ssecmp_128_insn, 3, SUF_Z, 0x03, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpunordsd, ssecmp_64_insn, 4, SUF_Z, 0x03, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpunordss, ssecmp_32_insn, 4, SUF_Z, 0x03, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcomisd, avx_xmm_xmm64_insn, 2, SUF_Z, 0x66, 0x2F, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcomiss, avx_xmm_xmm32_insn, 2, SUF_Z, 0x00, 0x2F, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtdq2pd, avx_cvt_xmm64_insn, 3, SUF_Z, 0xF3, 0xE6, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtdq2ps, avx_xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x5B, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtpd2dq, avx_cvt_xmm128_insn, 2, SUF_Z, 0xF2, 0xE6, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtpd2dqx, avx_cvt_xmm128_x_insn, 1, SUF_Z, 0xF2, 0xE6, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtpd2dqy, avx_cvt_xmm128_y_insn, 1, SUF_Z, 0xF2, 0xE6, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtpd2ps, avx_cvt_xmm128_insn, 2, SUF_Z, 0x66, 0x5A, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtpd2psx, avx_cvt_xmm128_x_insn, 1, SUF_Z, 0x66, 0x5A, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtpd2psy, avx_cvt_xmm128_y_insn, 1, SUF_Z, 0x66, 0x5A, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtph2ps, avx_cvtph2ps_insn, 4, SUF_Z, 0x66, 0x13, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtps2dq, avx_xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x5B, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtps2pd, avx_cvt_xmm64_insn, 3, SUF_Z, 0x00, 0x5A, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtps2ph, avx_cvtps2ph_insn, 4, SUF_Z, 0x66, 0x1D, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtsd2si, cvt_rx_xmm64_insn, 4, SUF_Z, 0xF2, 0x2D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtsd2sil, cvt_rx_xmm64_insn, 4, SUF_L, 0xF2, 0x2D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtsd2siq, cvt_rx_xmm64_insn, 4, SUF_Q, 0xF2, 0x2D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtsd2ss, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5A, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtsi2sd, cvt_xmm_rmx_insn, 6, SUF_Z, 0xF2, 0x2A, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtsi2sdl, cvt_xmm_rmx_insn, 6, SUF_L, 0xF2, 0x2A, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtsi2sdq, cvt_xmm_rmx_insn, 6, SUF_Q, 0xF2, 0x2A, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtsi2ss, cvt_xmm_rmx_insn, 6, SUF_Z, 0xF3, 0x2A, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtsi2ssl, cvt_xmm_rmx_insn, 6, SUF_L, 0xF3, 0x2A, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtsi2ssq, cvt_xmm_rmx_insn, 6, SUF_Q, 0xF3, 0x2A, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtss2sd, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5A, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtss2si, cvt_rx_xmm32_insn, 4, SUF_Z, 0xF3, 0x2D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtss2sil, cvt_rx_xmm32_insn, 4, SUF_L, 0xF3, 0x2D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtss2siq, cvt_rx_xmm32_insn, 4, SUF_Q, 0xF3, 0x2D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvttpd2dq, avx_cvt_xmm128_insn, 2, SUF_Z, 0x66, 0xE6, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvttpd2dqx, avx_cvt_xmm128_x_insn, 1, SUF_Z, 0x66, 0xE6, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvttpd2dqy, avx_cvt_xmm128_y_insn, 1, SUF_Z, 0x66, 0xE6, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvttps2dq, avx_xmm_xmm128_insn, 2, SUF_Z, 0xF3, 0x5B, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvttsd2si, cvt_rx_xmm64_insn, 4, SUF_Z, 0xF2, 0x2C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvttsd2sil, cvt_rx_xmm64_insn, 4, SUF_L, 0xF2, 0x2C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvttsd2siq, cvt_rx_xmm64_insn, 4, SUF_Q, 0xF2, 0x2C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvttss2si, cvt_rx_xmm32_insn, 4, SUF_Z, 0xF3, 0x2C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvttss2sil, cvt_rx_xmm32_insn, 4, SUF_L, 0xF3, 0x2C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvttss2siq, cvt_rx_xmm32_insn, 4, SUF_Q, 0xF3, 0x2C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vdivpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x5E, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vdivps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x5E, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vdivsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5E, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vdivss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5E, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vdppd, sse4imm_insn, 2, SUF_Z, 0x41, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vdpps, sse4imm_256_insn, 4, SUF_Z, 0x40, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +verr, prot286_insn, 1, SUF_Z, 0x04, 0x00, 0, 0, CPU_286, CPU_Prot, 0 +verrw, prot286_insn, 1, SUF_W, 0x04, 0x00, 0, 0, CPU_286, CPU_Prot, 0 +verw, prot286_insn, 1, SUF_Z, 0x05, 0x00, 0, 0, CPU_286, CPU_Prot, 0 +verww, prot286_insn, 1, SUF_W, 0x05, 0x00, 0, 0, CPU_286, CPU_Prot, 0 +vextractf128, vextractif128_insn, 1, SUF_Z, 0x19, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vextracti128, vextractif128_insn, 1, SUF_Z, 0x39, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vextractps, extractps_insn, 2, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vfmadd132pd, vfma_pd_insn, 2, SUF_Z, 0x98, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd132ps, vfma_ps_insn, 2, SUF_Z, 0x98, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd132sd, vfma_sd_insn, 2, SUF_Z, 0x99, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd132ss, vfma_ss_insn, 2, SUF_Z, 0x99, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd213pd, vfma_pd_insn, 2, SUF_Z, 0xA8, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd213ps, vfma_ps_insn, 2, SUF_Z, 0xA8, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd213sd, vfma_sd_insn, 2, SUF_Z, 0xA9, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd213ss, vfma_ss_insn, 2, SUF_Z, 0xA9, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd231pd, vfma_pd_insn, 2, SUF_Z, 0xB8, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd231ps, vfma_ps_insn, 2, SUF_Z, 0xB8, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd231sd, vfma_sd_insn, 2, SUF_Z, 0xB9, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd231ss, vfma_ss_insn, 2, SUF_Z, 0xB9, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmaddpd, fma_128_256_insn, 4, SUF_Z, 0x69, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmaddps, fma_128_256_insn, 4, SUF_Z, 0x68, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmaddsd, fma_128_m64_insn, 3, SUF_Z, 0x6B, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmaddss, fma_128_m32_insn, 3, SUF_Z, 0x6A, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmaddsub132pd, vfma_pd_insn, 2, SUF_Z, 0x96, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmaddsub132ps, vfma_ps_insn, 2, SUF_Z, 0x96, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmaddsub213pd, vfma_pd_insn, 2, SUF_Z, 0xA6, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmaddsub213ps, vfma_ps_insn, 2, SUF_Z, 0xA6, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmaddsub231pd, vfma_pd_insn, 2, SUF_Z, 0xB6, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmaddsub231ps, vfma_ps_insn, 2, SUF_Z, 0xB6, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmaddsubpd, fma_128_256_insn, 4, SUF_Z, 0x5D, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmaddsubps, fma_128_256_insn, 4, SUF_Z, 0x5C, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmsub132pd, vfma_pd_insn, 2, SUF_Z, 0x9A, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub132ps, vfma_ps_insn, 2, SUF_Z, 0x9A, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub132sd, vfma_sd_insn, 2, SUF_Z, 0x9B, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub132ss, vfma_ss_insn, 2, SUF_Z, 0x9B, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub213pd, vfma_pd_insn, 2, SUF_Z, 0xAA, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub213ps, vfma_ps_insn, 2, SUF_Z, 0xAA, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub213sd, vfma_sd_insn, 2, SUF_Z, 0xAB, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub213ss, vfma_ss_insn, 2, SUF_Z, 0xAB, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub231pd, vfma_pd_insn, 2, SUF_Z, 0xBA, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub231ps, vfma_ps_insn, 2, SUF_Z, 0xBA, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub231sd, vfma_sd_insn, 2, SUF_Z, 0xBB, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub231ss, vfma_ss_insn, 2, SUF_Z, 0xBB, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsubadd132pd, vfma_pd_insn, 2, SUF_Z, 0x97, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsubadd132ps, vfma_ps_insn, 2, SUF_Z, 0x97, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsubadd213pd, vfma_pd_insn, 2, SUF_Z, 0xA7, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsubadd213ps, vfma_ps_insn, 2, SUF_Z, 0xA7, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsubadd231pd, vfma_pd_insn, 2, SUF_Z, 0xB7, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsubadd231ps, vfma_ps_insn, 2, SUF_Z, 0xB7, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsubaddpd, fma_128_256_insn, 4, SUF_Z, 0x5F, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmsubaddps, fma_128_256_insn, 4, SUF_Z, 0x5E, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmsubpd, fma_128_256_insn, 4, SUF_Z, 0x6D, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmsubps, fma_128_256_insn, 4, SUF_Z, 0x6C, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmsubsd, fma_128_m64_insn, 3, SUF_Z, 0x6F, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmsubss, fma_128_m32_insn, 3, SUF_Z, 0x6E, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfnmadd132pd, vfma_pd_insn, 2, SUF_Z, 0x9C, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd132ps, vfma_ps_insn, 2, SUF_Z, 0x9C, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd132sd, vfma_sd_insn, 2, SUF_Z, 0x9D, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd132ss, vfma_ss_insn, 2, SUF_Z, 0x9D, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd213pd, vfma_pd_insn, 2, SUF_Z, 0xAC, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd213ps, vfma_ps_insn, 2, SUF_Z, 0xAC, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd213sd, vfma_sd_insn, 2, SUF_Z, 0xAD, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd213ss, vfma_ss_insn, 2, SUF_Z, 0xAD, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd231pd, vfma_pd_insn, 2, SUF_Z, 0xBC, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd231ps, vfma_ps_insn, 2, SUF_Z, 0xBC, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd231sd, vfma_sd_insn, 2, SUF_Z, 0xBD, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd231ss, vfma_ss_insn, 2, SUF_Z, 0xBD, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmaddpd, fma_128_256_insn, 4, SUF_Z, 0x79, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfnmaddps, fma_128_256_insn, 4, SUF_Z, 0x78, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfnmaddsd, fma_128_m64_insn, 3, SUF_Z, 0x7B, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfnmaddss, fma_128_m32_insn, 3, SUF_Z, 0x7A, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfnmsub132pd, vfma_pd_insn, 2, SUF_Z, 0x9E, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub132ps, vfma_ps_insn, 2, SUF_Z, 0x9E, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub132sd, vfma_sd_insn, 2, SUF_Z, 0x9F, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub132ss, vfma_ss_insn, 2, SUF_Z, 0x9F, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub213pd, vfma_pd_insn, 2, SUF_Z, 0xAE, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub213ps, vfma_ps_insn, 2, SUF_Z, 0xAE, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub213sd, vfma_sd_insn, 2, SUF_Z, 0xAF, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub213ss, vfma_ss_insn, 2, SUF_Z, 0xAF, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub231pd, vfma_pd_insn, 2, SUF_Z, 0xBE, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub231ps, vfma_ps_insn, 2, SUF_Z, 0xBE, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub231sd, vfma_sd_insn, 2, SUF_Z, 0xBF, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub231ss, vfma_ss_insn, 2, SUF_Z, 0xBF, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsubpd, fma_128_256_insn, 4, SUF_Z, 0x7D, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfnmsubps, fma_128_256_insn, 4, SUF_Z, 0x7C, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfnmsubsd, fma_128_m64_insn, 3, SUF_Z, 0x7F, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfnmsubss, fma_128_m32_insn, 3, SUF_Z, 0x7E, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfrczpd, vfrc_pdps_insn, 2, SUF_Z, 0x01, 0, 0, 0, CPU_XOP, 0, 0 +vfrczps, vfrc_pdps_insn, 2, SUF_Z, 0x00, 0, 0, 0, CPU_XOP, 0, 0 +vfrczsd, vfrczsd_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_XOP, 0, 0 +vfrczss, vfrczss_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_XOP, 0, 0 +vgatherdpd, gather_64x_64x_insn, 2, SUF_Z, 0x92, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vgatherdps, gather_32x_32y_insn, 2, SUF_Z, 0x92, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vgatherqpd, gather_64x_64y_insn, 2, SUF_Z, 0x93, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vgatherqps, gather_32x_32y_128_insn, 2, SUF_Z, 0x93, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vhaddpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x7C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vhaddps, xmm_xmm128_256_insn, 4, SUF_Z, 0xF2, 0x7C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vhsubpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x7D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vhsubps, xmm_xmm128_256_insn, 4, SUF_Z, 0xF2, 0x7D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vinsertf128, vinsertif128_insn, 1, SUF_Z, 0x18, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vinserti128, vinsertif128_insn, 1, SUF_Z, 0x38, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vinsertps, insertps_insn, 4, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vlddqu, lddqu_insn, 2, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vldmxcsr, ldstmxcsr_insn, 1, SUF_Z, 0x02, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmaskmovdqu, maskmovdqu_insn, 1, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmaskmovpd, vmaskmov_insn, 4, SUF_Z, 0x2D, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmaskmovps, vmaskmov_insn, 4, SUF_Z, 0x2C, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmaxpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x5F, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmaxps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x5F, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmaxsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5F, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmaxss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5F, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmcall, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xC1, 0, CPU_P4, 0, 0 +vmclear, vmxthreebytemem_insn, 1, SUF_Z, 0x66, 0, 0, 0, CPU_P4, 0, 0 +vminpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x5D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vminps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x5D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vminsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vminss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmlaunch, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xC2, 0, CPU_P4, 0, 0 +vmload, svm_rax_insn, 2, SUF_Z, 0xDA, 0, 0, 0, CPU_SVM, 0, 0 +vmmcall, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xD9, 0, CPU_SVM, 0, 0 +vmovapd, movau_insn, 6, SUF_Z, 0x66, 0x28, 0x01, ONLY_AVX, CPU_AVX, 0, 0 +vmovaps, movau_insn, 6, SUF_Z, 0x00, 0x28, 0x01, ONLY_AVX, CPU_AVX, 0, 0 +vmovd, vmovd_insn, 2, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_386, CPU_AVX, 0 +vmovddup, vmovddup_insn, 3, SUF_Z, 0xF2, 0x12, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovdqa, movau_insn, 6, SUF_Z, 0x66, 0x6F, 0x10, ONLY_AVX, CPU_AVX, 0, 0 +vmovdqu, movau_insn, 6, SUF_Z, 0xF3, 0x6F, 0x10, ONLY_AVX, CPU_AVX, 0, 0 +vmovhlps, movhllhps_insn, 2, SUF_Z, 0x12, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovhpd, movhlp_insn, 3, SUF_Z, 0x66, 0x16, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmovhps, movhlp_insn, 3, SUF_Z, 0x00, 0x16, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmovlhps, movhllhps_insn, 2, SUF_Z, 0x16, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovlpd, movhlp_insn, 3, SUF_Z, 0x66, 0x12, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmovlps, movhlp_insn, 3, SUF_Z, 0x00, 0x12, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmovmskpd, movmsk_insn, 4, SUF_Z, 0x66, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovmskpdl, movmsk_insn, 4, SUF_L, 0x66, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovmskpdq, movmsk_insn, 4, SUF_Q, 0x66, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovmskps, movmsk_insn, 4, SUF_Z, 0x00, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovmskpsl, movmsk_insn, 4, SUF_L, 0x00, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovmskpsq, movmsk_insn, 4, SUF_Q, 0x00, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovntdq, movnt_insn, 2, SUF_Z, 0x66, 0xE7, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmovntdqa, movntdqa_insn, 2, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovntpd, movnt_insn, 2, SUF_Z, 0x66, 0x2B, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmovntps, movnt_insn, 2, SUF_Z, 0x00, 0x2B, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmovq, vmovq_insn, 5, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovsd, movsd_insn, 5, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovshdup, avx_xmm_xmm128_insn, 2, SUF_Z, 0xF3, 0x16, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovsldup, avx_xmm_xmm128_insn, 2, SUF_Z, 0xF3, 0x12, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovss, movss_insn, 4, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovupd, movau_insn, 6, SUF_Z, 0x66, 0x10, 0x01, ONLY_AVX, CPU_AVX, 0, 0 +vmovups, movau_insn, 6, SUF_Z, 0x00, 0x10, 0x01, ONLY_AVX, CPU_AVX, 0, 0 +vmpsadbw, sse4imm_256avx2_insn, 4, SUF_Z, 0x42, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmptrld, vmxtwobytemem_insn, 1, SUF_Z, 0x06, 0, 0, 0, CPU_P4, 0, 0 +vmptrst, vmxtwobytemem_insn, 1, SUF_Z, 0x07, 0, 0, 0, CPU_P4, 0, 0 +vmread, vmxmemrd_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_P4, 0, 0 +vmreadl, vmxmemrd_insn, 2, SUF_L, 0, 0, 0, NOT_64, CPU_P4, 0, 0 +vmreadq, vmxmemrd_insn, 2, SUF_Q, 0, 0, 0, ONLY_64, CPU_P4, 0, 0 +vmresume, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xC3, 0, CPU_P4, 0, 0 +vmrun, svm_rax_insn, 2, SUF_Z, 0xD8, 0, 0, 0, CPU_SVM, 0, 0 +vmsave, svm_rax_insn, 2, SUF_Z, 0xDB, 0, 0, 0, CPU_SVM, 0, 0 +vmulpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x59, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmulps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x59, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmulsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x59, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmulss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x59, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmwrite, vmxmemwr_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_P4, 0, 0 +vmwritel, vmxmemwr_insn, 2, SUF_L, 0, 0, 0, NOT_64, CPU_P4, 0, 0 +vmwriteq, vmxmemwr_insn, 2, SUF_Q, 0, 0, 0, ONLY_64, CPU_P4, 0, 0 +vmxoff, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xC4, 0, CPU_P4, 0, 0 +vmxon, vmxthreebytemem_insn, 1, SUF_Z, 0xF3, 0, 0, 0, CPU_P4, 0, 0 +vorpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x56, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vorps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x56, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpabsb, avx2_ssse3_2op_insn, 2, SUF_Z, 0x1C, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpabsd, avx2_ssse3_2op_insn, 2, SUF_Z, 0x1E, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpabsw, avx2_ssse3_2op_insn, 2, SUF_Z, 0x1D, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpackssdw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x6B, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpacksswb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x63, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpackusdw, ssse3_insn, 5, SUF_Z, 0x2B, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpackuswb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x67, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpaddb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xFC, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpaddd, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xFE, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpaddq, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xD4, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpaddsb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xEC, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpaddsw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xED, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpaddusb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xDC, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpaddusw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xDD, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpaddw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xFD, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpalignr, sse4imm_256avx2_insn, 4, SUF_Z, 0x0F, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpand, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xDB, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpandn, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xDF, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpavgb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xE0, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpavgw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xE3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpblendd, vex_66_0F3A_imm8_avx2_insn, 2, SUF_Z, 0x02, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpblendvb, avx2_sse4xmm0_insn, 2, SUF_Z, 0x4C, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpblendw, sse4imm_256avx2_insn, 4, SUF_Z, 0x0E, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpbroadcastb, vpbroadcastb_avx2_insn, 4, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpbroadcastd, vpbroadcastd_avx2_insn, 4, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpbroadcastq, vpbroadcastq_avx2_insn, 4, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpbroadcastw, vpbroadcastw_avx2_insn, 4, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpclmulhqhqdq, pclmulqdq_fixed_insn, 2, SUF_Z, 0x11, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpclmulhqlqdq, pclmulqdq_fixed_insn, 2, SUF_Z, 0x01, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpclmullqhqdq, pclmulqdq_fixed_insn, 2, SUF_Z, 0x10, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpclmullqlqdq, pclmulqdq_fixed_insn, 2, SUF_Z, 0x00, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpclmulqdq, pclmulqdq_insn, 2, SUF_Z, 0x3A, 0x44, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmov, vpcmov_insn, 4, SUF_Z, 0, 0, 0, 0, CPU_XOP, 0, 0 +vpcmpeqb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x74, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpeqd, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x76, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpeqq, ssse3_insn, 5, SUF_Z, 0x29, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpeqw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x75, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpestri, sse4pcmpstr_insn, 1, SUF_Z, 0x61, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpestrm, sse4pcmpstr_insn, 1, SUF_Z, 0x60, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpgtb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x64, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpgtd, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpgtq, ssse3_insn, 5, SUF_Z, 0x37, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpgtw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x65, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpistri, sse4pcmpstr_insn, 1, SUF_Z, 0x63, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpistrm, sse4pcmpstr_insn, 1, SUF_Z, 0x62, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpcomb, vpcom_imm_insn, 1, SUF_Z, 0xCC, 0, 0, 0, CPU_XOP, 0, 0 +vpcomd, vpcom_imm_insn, 1, SUF_Z, 0xCE, 0, 0, 0, CPU_XOP, 0, 0 +vpcomeqb, vpcom_insn, 1, SUF_Z, 0xCC, 0x04, 0, 0, CPU_XOP, 0, 0 +vpcomeqd, vpcom_insn, 1, SUF_Z, 0xCE, 0x04, 0, 0, CPU_XOP, 0, 0 +vpcomeqq, vpcom_insn, 1, SUF_Z, 0xCF, 0x04, 0, 0, CPU_XOP, 0, 0 +vpcomequb, vpcom_insn, 1, SUF_Z, 0xEC, 0x04, 0, 0, CPU_XOP, 0, 0 +vpcomequd, vpcom_insn, 1, SUF_Z, 0xEE, 0x04, 0, 0, CPU_XOP, 0, 0 +vpcomequq, vpcom_insn, 1, SUF_Z, 0xEF, 0x04, 0, 0, CPU_XOP, 0, 0 +vpcomequw, vpcom_insn, 1, SUF_Z, 0xED, 0x04, 0, 0, CPU_XOP, 0, 0 +vpcomeqw, vpcom_insn, 1, SUF_Z, 0xCD, 0x04, 0, 0, CPU_XOP, 0, 0 +vpcomfalseb, vpcom_insn, 1, SUF_Z, 0xCC, 0x06, 0, 0, CPU_XOP, 0, 0 +vpcomfalsed, vpcom_insn, 1, SUF_Z, 0xCE, 0x06, 0, 0, CPU_XOP, 0, 0 +vpcomfalseq, vpcom_insn, 1, SUF_Z, 0xCF, 0x06, 0, 0, CPU_XOP, 0, 0 +vpcomfalseub, vpcom_insn, 1, SUF_Z, 0xEC, 0x06, 0, 0, CPU_XOP, 0, 0 +vpcomfalseud, vpcom_insn, 1, SUF_Z, 0xEE, 0x06, 0, 0, CPU_XOP, 0, 0 +vpcomfalseuq, vpcom_insn, 1, SUF_Z, 0xEF, 0x06, 0, 0, CPU_XOP, 0, 0 +vpcomfalseuw, vpcom_insn, 1, SUF_Z, 0xED, 0x06, 0, 0, CPU_XOP, 0, 0 +vpcomfalsew, vpcom_insn, 1, SUF_Z, 0xCD, 0x06, 0, 0, CPU_XOP, 0, 0 +vpcomgeb, vpcom_insn, 1, SUF_Z, 0xCC, 0x03, 0, 0, CPU_XOP, 0, 0 +vpcomged, vpcom_insn, 1, SUF_Z, 0xCE, 0x03, 0, 0, CPU_XOP, 0, 0 +vpcomgeq, vpcom_insn, 1, SUF_Z, 0xCF, 0x03, 0, 0, CPU_XOP, 0, 0 +vpcomgeub, vpcom_insn, 1, SUF_Z, 0xEC, 0x03, 0, 0, CPU_XOP, 0, 0 +vpcomgeud, vpcom_insn, 1, SUF_Z, 0xEE, 0x03, 0, 0, CPU_XOP, 0, 0 +vpcomgeuq, vpcom_insn, 1, SUF_Z, 0xEF, 0x03, 0, 0, CPU_XOP, 0, 0 +vpcomgeuw, vpcom_insn, 1, SUF_Z, 0xED, 0x03, 0, 0, CPU_XOP, 0, 0 +vpcomgew, vpcom_insn, 1, SUF_Z, 0xCD, 0x03, 0, 0, CPU_XOP, 0, 0 +vpcomgtb, vpcom_insn, 1, SUF_Z, 0xCC, 0x02, 0, 0, CPU_XOP, 0, 0 +vpcomgtd, vpcom_insn, 1, SUF_Z, 0xCE, 0x02, 0, 0, CPU_XOP, 0, 0 +vpcomgtq, vpcom_insn, 1, SUF_Z, 0xCF, 0x02, 0, 0, CPU_XOP, 0, 0 +vpcomgtub, vpcom_insn, 1, SUF_Z, 0xEC, 0x02, 0, 0, CPU_XOP, 0, 0 +vpcomgtud, vpcom_insn, 1, SUF_Z, 0xEE, 0x02, 0, 0, CPU_XOP, 0, 0 +vpcomgtuq, vpcom_insn, 1, SUF_Z, 0xEF, 0x02, 0, 0, CPU_XOP, 0, 0 +vpcomgtuw, vpcom_insn, 1, SUF_Z, 0xED, 0x02, 0, 0, CPU_XOP, 0, 0 +vpcomgtw, vpcom_insn, 1, SUF_Z, 0xCD, 0x02, 0, 0, CPU_XOP, 0, 0 +vpcomleb, vpcom_insn, 1, SUF_Z, 0xCC, 0x01, 0, 0, CPU_XOP, 0, 0 +vpcomled, vpcom_insn, 1, SUF_Z, 0xCE, 0x01, 0, 0, CPU_XOP, 0, 0 +vpcomleq, vpcom_insn, 1, SUF_Z, 0xCF, 0x01, 0, 0, CPU_XOP, 0, 0 +vpcomleub, vpcom_insn, 1, SUF_Z, 0xEC, 0x01, 0, 0, CPU_XOP, 0, 0 +vpcomleud, vpcom_insn, 1, SUF_Z, 0xEE, 0x01, 0, 0, CPU_XOP, 0, 0 +vpcomleuq, vpcom_insn, 1, SUF_Z, 0xEF, 0x01, 0, 0, CPU_XOP, 0, 0 +vpcomleuw, vpcom_insn, 1, SUF_Z, 0xED, 0x01, 0, 0, CPU_XOP, 0, 0 +vpcomlew, vpcom_insn, 1, SUF_Z, 0xCD, 0x01, 0, 0, CPU_XOP, 0, 0 +vpcomltb, vpcom_insn, 1, SUF_Z, 0xCC, 0x00, 0, 0, CPU_XOP, 0, 0 +vpcomltd, vpcom_insn, 1, SUF_Z, 0xCE, 0x00, 0, 0, CPU_XOP, 0, 0 +vpcomltq, vpcom_insn, 1, SUF_Z, 0xCF, 0x00, 0, 0, CPU_XOP, 0, 0 +vpcomltub, vpcom_insn, 1, SUF_Z, 0xEC, 0x00, 0, 0, CPU_XOP, 0, 0 +vpcomltud, vpcom_insn, 1, SUF_Z, 0xEE, 0x00, 0, 0, CPU_XOP, 0, 0 +vpcomltuq, vpcom_insn, 1, SUF_Z, 0xEF, 0x00, 0, 0, CPU_XOP, 0, 0 +vpcomltuw, vpcom_insn, 1, SUF_Z, 0xED, 0x00, 0, 0, CPU_XOP, 0, 0 +vpcomltw, vpcom_insn, 1, SUF_Z, 0xCD, 0x00, 0, 0, CPU_XOP, 0, 0 +vpcomneb, vpcom_insn, 1, SUF_Z, 0xCC, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomned, vpcom_insn, 1, SUF_Z, 0xCE, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomneq, vpcom_insn, 1, SUF_Z, 0xCF, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomneqb, vpcom_insn, 1, SUF_Z, 0xCC, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomneqd, vpcom_insn, 1, SUF_Z, 0xCE, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomneqq, vpcom_insn, 1, SUF_Z, 0xCF, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomnequb, vpcom_insn, 1, SUF_Z, 0xEC, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomnequd, vpcom_insn, 1, SUF_Z, 0xEE, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomnequq, vpcom_insn, 1, SUF_Z, 0xEF, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomnequw, vpcom_insn, 1, SUF_Z, 0xED, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomneqw, vpcom_insn, 1, SUF_Z, 0xCD, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomneub, vpcom_insn, 1, SUF_Z, 0xEC, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomneud, vpcom_insn, 1, SUF_Z, 0xEE, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomneuq, vpcom_insn, 1, SUF_Z, 0xEF, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomneuw, vpcom_insn, 1, SUF_Z, 0xED, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomnew, vpcom_insn, 1, SUF_Z, 0xCD, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomq, vpcom_imm_insn, 1, SUF_Z, 0xCF, 0, 0, 0, CPU_XOP, 0, 0 +vpcomtrueb, vpcom_insn, 1, SUF_Z, 0xCC, 0x07, 0, 0, CPU_XOP, 0, 0 +vpcomtrued, vpcom_insn, 1, SUF_Z, 0xCE, 0x07, 0, 0, CPU_XOP, 0, 0 +vpcomtrueq, vpcom_insn, 1, SUF_Z, 0xCF, 0x07, 0, 0, CPU_XOP, 0, 0 +vpcomtrueub, vpcom_insn, 1, SUF_Z, 0xEC, 0x07, 0, 0, CPU_XOP, 0, 0 +vpcomtrueud, vpcom_insn, 1, SUF_Z, 0xEE, 0x07, 0, 0, CPU_XOP, 0, 0 +vpcomtrueuq, vpcom_insn, 1, SUF_Z, 0xEF, 0x07, 0, 0, CPU_XOP, 0, 0 +vpcomtrueuw, vpcom_insn, 1, SUF_Z, 0xED, 0x07, 0, 0, CPU_XOP, 0, 0 +vpcomtruew, vpcom_insn, 1, SUF_Z, 0xCD, 0x07, 0, 0, CPU_XOP, 0, 0 +vpcomub, vpcom_imm_insn, 1, SUF_Z, 0xEC, 0, 0, 0, CPU_XOP, 0, 0 +vpcomud, vpcom_imm_insn, 1, SUF_Z, 0xEE, 0, 0, 0, CPU_XOP, 0, 0 +vpcomuq, vpcom_imm_insn, 1, SUF_Z, 0xEF, 0, 0, 0, CPU_XOP, 0, 0 +vpcomuw, vpcom_imm_insn, 1, SUF_Z, 0xED, 0, 0, 0, CPU_XOP, 0, 0 +vpcomw, vpcom_imm_insn, 1, SUF_Z, 0xCD, 0, 0, 0, CPU_XOP, 0, 0 +vperm2f128, vperm2f128_insn, 1, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vperm2i128, vperm2i128_avx2_insn, 1, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpermd, vperm_var_avx2_insn, 1, SUF_Z, 0x36, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpermilpd, vpermil_insn, 4, SUF_Z, 0x05, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpermilps, vpermil_insn, 4, SUF_Z, 0x04, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpermpd, vperm_imm_avx2_insn, 1, SUF_Z, 0x01, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpermps, vperm_var_avx2_insn, 1, SUF_Z, 0x16, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpermq, vperm_imm_avx2_insn, 1, SUF_Z, 0x00, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpextrb, pextrb_insn, 3, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpextrd, pextrd_insn, 1, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpextrq, pextrq_insn, 1, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpextrw, pextrw_insn, 7, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpextrwl, pextrw_insn, 7, SUF_L, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpextrwq, pextrw_insn, 7, SUF_Q, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpgatherdd, gather_32x_32y_insn, 2, SUF_Z, 0x90, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpgatherdq, gather_64x_64x_insn, 2, SUF_Z, 0x90, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpgatherqd, gather_32x_32y_128_insn, 2, SUF_Z, 0x91, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpgatherqq, gather_64x_64y_insn, 2, SUF_Z, 0x91, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vphaddbd, vphaddsub_insn, 1, SUF_Z, 0xC2, 0, 0, 0, CPU_XOP, 0, 0 +vphaddbq, vphaddsub_insn, 1, SUF_Z, 0xC3, 0, 0, 0, CPU_XOP, 0, 0 +vphaddbw, vphaddsub_insn, 1, SUF_Z, 0xC1, 0, 0, 0, CPU_XOP, 0, 0 +vphaddd, ssse3_insn, 5, SUF_Z, 0x02, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vphadddq, vphaddsub_insn, 1, SUF_Z, 0xCB, 0, 0, 0, CPU_XOP, 0, 0 +vphaddsw, ssse3_insn, 5, SUF_Z, 0x03, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vphaddubd, vphaddsub_insn, 1, SUF_Z, 0xD2, 0, 0, 0, CPU_XOP, 0, 0 +vphaddubq, vphaddsub_insn, 1, SUF_Z, 0xD3, 0, 0, 0, CPU_XOP, 0, 0 +vphaddubw, vphaddsub_insn, 1, SUF_Z, 0xD1, 0, 0, 0, CPU_XOP, 0, 0 +vphaddudq, vphaddsub_insn, 1, SUF_Z, 0xDB, 0, 0, 0, CPU_XOP, 0, 0 +vphadduwd, vphaddsub_insn, 1, SUF_Z, 0xD6, 0, 0, 0, CPU_XOP, 0, 0 +vphadduwq, vphaddsub_insn, 1, SUF_Z, 0xD7, 0, 0, 0, CPU_XOP, 0, 0 +vphaddw, ssse3_insn, 5, SUF_Z, 0x01, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vphaddwd, vphaddsub_insn, 1, SUF_Z, 0xC6, 0, 0, 0, CPU_XOP, 0, 0 +vphaddwq, vphaddsub_insn, 1, SUF_Z, 0xC7, 0, 0, 0, CPU_XOP, 0, 0 +vphminposuw, avx_ssse3_2op_insn, 1, SUF_Z, 0x41, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vphsubbw, vphaddsub_insn, 1, SUF_Z, 0xE1, 0, 0, 0, CPU_XOP, 0, 0 +vphsubd, ssse3_insn, 5, SUF_Z, 0x06, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vphsubdq, vphaddsub_insn, 1, SUF_Z, 0xE3, 0, 0, 0, CPU_XOP, 0, 0 +vphsubsw, ssse3_insn, 5, SUF_Z, 0x07, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vphsubw, ssse3_insn, 5, SUF_Z, 0x05, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vphsubwd, vphaddsub_insn, 1, SUF_Z, 0xE2, 0, 0, 0, CPU_XOP, 0, 0 +vpinsrb, pinsrb_insn, 4, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpinsrd, pinsrd_insn, 2, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpinsrq, pinsrq_insn, 2, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpinsrw, pinsrw_insn, 9, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpinsrwl, pinsrw_insn, 9, SUF_L, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpinsrwq, pinsrw_insn, 9, SUF_Q, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmacsdd, vpma_insn, 1, SUF_Z, 0x9E, 0, 0, 0, CPU_XOP, 0, 0 +vpmacsdqh, vpma_insn, 1, SUF_Z, 0x9F, 0, 0, 0, CPU_XOP, 0, 0 +vpmacsdql, vpma_insn, 1, SUF_Z, 0x97, 0, 0, 0, CPU_XOP, 0, 0 +vpmacssdd, vpma_insn, 1, SUF_Z, 0x8E, 0, 0, 0, CPU_XOP, 0, 0 +vpmacssdqh, vpma_insn, 1, SUF_Z, 0x8F, 0, 0, 0, CPU_XOP, 0, 0 +vpmacssdql, vpma_insn, 1, SUF_Z, 0x87, 0, 0, 0, CPU_XOP, 0, 0 +vpmacsswd, vpma_insn, 1, SUF_Z, 0x86, 0, 0, 0, CPU_XOP, 0, 0 +vpmacssww, vpma_insn, 1, SUF_Z, 0x85, 0, 0, 0, CPU_XOP, 0, 0 +vpmacswd, vpma_insn, 1, SUF_Z, 0x96, 0, 0, 0, CPU_XOP, 0, 0 +vpmacsww, vpma_insn, 1, SUF_Z, 0x95, 0, 0, 0, CPU_XOP, 0, 0 +vpmadcsswd, vpma_insn, 1, SUF_Z, 0xA6, 0, 0, 0, CPU_XOP, 0, 0 +vpmadcswd, vpma_insn, 1, SUF_Z, 0xB6, 0, 0, 0, CPU_XOP, 0, 0 +vpmaddubsw, ssse3_insn, 5, SUF_Z, 0x04, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmaddwd, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xF5, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpmaskmovd, vmaskmov_insn, 4, SUF_Z, 0x8C, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpmaskmovq, vmaskmov_vexw1_avx2_insn, 4, SUF_Z, 0x8C, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpmaxsb, ssse3_insn, 5, SUF_Z, 0x3C, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmaxsd, ssse3_insn, 5, SUF_Z, 0x3D, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmaxsw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xEE, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpmaxub, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xDE, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpmaxud, ssse3_insn, 5, SUF_Z, 0x3F, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmaxuw, ssse3_insn, 5, SUF_Z, 0x3E, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpminsb, ssse3_insn, 5, SUF_Z, 0x38, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpminsd, ssse3_insn, 5, SUF_Z, 0x39, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpminsw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xEA, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpminub, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xDA, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpminud, ssse3_insn, 5, SUF_Z, 0x3B, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpminuw, ssse3_insn, 5, SUF_Z, 0x3A, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovmskb, pmovmskb_insn, 6, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovmskbl, pmovmskb_insn, 6, SUF_L, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovmskbq, pmovmskb_insn, 6, SUF_Q, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovsxbd, sse4m32_insn, 4, SUF_Z, 0x21, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovsxbq, sse4m16_insn, 4, SUF_Z, 0x22, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovsxbw, sse4m64_insn, 4, SUF_Z, 0x20, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovsxdq, sse4m64_insn, 4, SUF_Z, 0x25, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovsxwd, sse4m64_insn, 4, SUF_Z, 0x23, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovsxwq, sse4m32_insn, 4, SUF_Z, 0x24, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovzxbd, sse4m32_insn, 4, SUF_Z, 0x31, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovzxbq, sse4m16_insn, 4, SUF_Z, 0x32, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovzxbw, sse4m64_insn, 4, SUF_Z, 0x30, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovzxdq, sse4m64_insn, 4, SUF_Z, 0x35, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovzxwd, sse4m64_insn, 4, SUF_Z, 0x33, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovzxwq, sse4m32_insn, 4, SUF_Z, 0x34, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmuldq, ssse3_insn, 5, SUF_Z, 0x28, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmulhrsw, ssse3_insn, 5, SUF_Z, 0x0B, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmulhuw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xE4, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpmulhw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xE5, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpmulld, ssse3_insn, 5, SUF_Z, 0x40, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmullw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xD5, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpmuludq, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xF4, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpor, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xEB, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpperm, vpperm_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_XOP, 0, 0 +vprotb, vprot_insn, 3, SUF_Z, 0x00, 0, 0, 0, CPU_XOP, 0, 0 +vprotd, vprot_insn, 3, SUF_Z, 0x02, 0, 0, 0, CPU_XOP, 0, 0 +vprotq, vprot_insn, 3, SUF_Z, 0x03, 0, 0, 0, CPU_XOP, 0, 0 +vprotw, vprot_insn, 3, SUF_Z, 0x01, 0, 0, 0, CPU_XOP, 0, 0 +vpsadbw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xF6, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpshab, amd_vpshift_insn, 2, SUF_Z, 0x98, 0, 0, 0, CPU_XOP, 0, 0 +vpshad, amd_vpshift_insn, 2, SUF_Z, 0x9A, 0, 0, 0, CPU_XOP, 0, 0 +vpshaq, amd_vpshift_insn, 2, SUF_Z, 0x9B, 0, 0, 0, CPU_XOP, 0, 0 +vpshaw, amd_vpshift_insn, 2, SUF_Z, 0x99, 0, 0, 0, CPU_XOP, 0, 0 +vpshlb, amd_vpshift_insn, 2, SUF_Z, 0x94, 0, 0, 0, CPU_XOP, 0, 0 +vpshld, amd_vpshift_insn, 2, SUF_Z, 0x96, 0, 0, 0, CPU_XOP, 0, 0 +vpshlq, amd_vpshift_insn, 2, SUF_Z, 0x97, 0, 0, 0, CPU_XOP, 0, 0 +vpshlw, amd_vpshift_insn, 2, SUF_Z, 0x95, 0, 0, 0, CPU_XOP, 0, 0 +vpshufb, ssse3_insn, 5, SUF_Z, 0x00, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpshufd, xmm_xmm128_imm_256avx2_insn, 2, SUF_Z, 0x66, 0x70, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpshufhw, xmm_xmm128_imm_256avx2_insn, 2, SUF_Z, 0xF3, 0x70, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpshuflw, xmm_xmm128_imm_256avx2_insn, 2, SUF_Z, 0xF2, 0x70, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpsignb, ssse3_insn, 5, SUF_Z, 0x08, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpsignd, ssse3_insn, 5, SUF_Z, 0x0A, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpsignw, ssse3_insn, 5, SUF_Z, 0x09, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpslld, vpshift_insn, 8, SUF_Z, 0xF2, 0x72, 0x06, ONLY_AVX, CPU_AVX, 0, 0 +vpslldq, pslrldq_insn, 4, SUF_Z, 0x07, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpsllq, vpshift_insn, 8, SUF_Z, 0xF3, 0x73, 0x06, ONLY_AVX, CPU_AVX, 0, 0 +vpsllvd, vpshiftv_vexw0_avx2_insn, 2, SUF_Z, 0x47, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpsllvq, vpshiftv_vexw1_avx2_insn, 2, SUF_Z, 0x47, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpsllw, vpshift_insn, 8, SUF_Z, 0xF1, 0x71, 0x06, ONLY_AVX, CPU_AVX, 0, 0 +vpsrad, vpshift_insn, 8, SUF_Z, 0xE2, 0x72, 0x04, ONLY_AVX, CPU_AVX, 0, 0 +vpsravd, vpshiftv_vexw0_avx2_insn, 2, SUF_Z, 0x46, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpsraw, vpshift_insn, 8, SUF_Z, 0xE1, 0x71, 0x04, ONLY_AVX, CPU_AVX, 0, 0 +vpsrld, vpshift_insn, 8, SUF_Z, 0xD2, 0x72, 0x02, ONLY_AVX, CPU_AVX, 0, 0 +vpsrldq, pslrldq_insn, 4, SUF_Z, 0x03, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpsrlq, vpshift_insn, 8, SUF_Z, 0xD3, 0x73, 0x02, ONLY_AVX, CPU_AVX, 0, 0 +vpsrlvd, vpshiftv_vexw0_avx2_insn, 2, SUF_Z, 0x45, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpsrlvq, vpshiftv_vexw1_avx2_insn, 2, SUF_Z, 0x45, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpsrlw, vpshift_insn, 8, SUF_Z, 0xD1, 0x71, 0x02, ONLY_AVX, CPU_AVX, 0, 0 +vpsubb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xF8, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpsubd, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xFA, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpsubq, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xFB, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpsubsb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xE8, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpsubsw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xE9, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpsubusb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xD8, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpsubusw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xD9, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpsubw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xF9, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vptest, sse4_insn, 2, SUF_Z, 0x17, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpunpckhbw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x68, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpunpckhdq, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x6A, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpunpckhqdq, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x6D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpunpckhwd, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x69, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpunpcklbw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x60, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpunpckldq, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x62, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpunpcklqdq, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x6C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpunpcklwd, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x61, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpxor, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xEF, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vrcpps, avx_xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x53, 0, ONLY_AVX, CPU_AVX, 0, 0 +vrcpss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x53, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vroundpd, avx_sse4imm_insn, 3, SUF_Z, 0x09, 0, 0, ONLY_AVX, CPU_SSE41, 0, 0 +vroundps, avx_sse4imm_insn, 3, SUF_Z, 0x08, 0, 0, ONLY_AVX, CPU_SSE41, 0, 0 +vroundsd, sse4m64imm_insn, 4, SUF_Z, 0x0B, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vroundss, sse4m32imm_insn, 4, SUF_Z, 0x0A, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vrsqrtps, avx_xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x52, 0, ONLY_AVX, CPU_AVX, 0, 0 +vrsqrtss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x52, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vshufpd, xmm_xmm128_imm_256_insn, 3, SUF_Z, 0x66, 0xC6, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vshufps, xmm_xmm128_imm_256_insn, 3, SUF_Z, 0x00, 0xC6, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vsqrtpd, avx_xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x51, 0, ONLY_AVX, CPU_AVX, 0, 0 +vsqrtps, avx_xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x51, 0, ONLY_AVX, CPU_AVX, 0, 0 +vsqrtsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x51, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vsqrtss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x51, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vstmxcsr, ldstmxcsr_insn, 1, SUF_Z, 0x03, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vsubpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x5C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vsubps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x5C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vsubsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vsubss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vtestpd, sse4_insn, 2, SUF_Z, 0x0F, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vtestps, sse4_insn, 2, SUF_Z, 0x0E, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vucomisd, avx_xmm_xmm64_insn, 2, SUF_Z, 0x66, 0x2E, 0, ONLY_AVX, CPU_AVX, 0, 0 +vucomiss, avx_xmm_xmm32_insn, 2, SUF_Z, 0x00, 0x2E, 0, ONLY_AVX, CPU_AVX, 0, 0 +vunpckhpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x15, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vunpckhps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x15, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vunpcklpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x14, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vunpcklps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x14, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vxorpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x57, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vxorps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x57, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vzeroall, vzero_insn, 1, SUF_Z, 0xC4, 0, 0, 0, CPU_AVX, 0, 0 +vzeroupper, vzero_insn, 1, SUF_Z, 0xC0, 0, 0, 0, CPU_AVX, 0, 0 +wait, onebyte_insn, 1, SUF_Z, 0x9B, 0, 0, 0, 0, 0, 0 +wbinvd, twobyte_insn, 1, SUF_Z, 0x0F, 0x09, 0, 0, CPU_486, CPU_Priv, 0 +word, NULL, X86_OPERSIZE>>8, 0x10, 0, 0, 0, 0, 0, 0, 0 +wrfsbase, fs_gs_base_insn, 2, SUF_Z, 0x02, 0, 0, ONLY_64, CPU_FSGSBASE, 0, 0 +wrgsbase, fs_gs_base_insn, 2, SUF_Z, 0x03, 0, 0, ONLY_64, CPU_FSGSBASE, 0, 0 +wrmsr, twobyte_insn, 1, SUF_Z, 0x0F, 0x30, 0, 0, CPU_586, CPU_Priv, 0 +wrshr, rdwrshr_insn, 1, SUF_Z, 0x01, 0, 0, 0, CPU_686, CPU_Cyrix, CPU_SMM +xabort, tsx_xabort_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_TSX, 0, 0 +xacquire, NULL, X86_ACQREL>>8, 0xF2, 0, 0, 0, 0, 0, 0, 0 +xadd, cmpxchgxadd_insn, 4, SUF_Z, 0xC0, 0, 0, 0, CPU_486, 0, 0 +xaddb, cmpxchgxadd_insn, 4, SUF_B, 0xC0, 0, 0, 0, CPU_486, 0, 0 +xaddl, cmpxchgxadd_insn, 4, SUF_L, 0xC0, 0, 0, 0, CPU_486, 0, 0 +xaddq, cmpxchgxadd_insn, 4, SUF_Q, 0xC0, 0, 0, ONLY_64, CPU_486, 0, 0 +xaddw, cmpxchgxadd_insn, 4, SUF_W, 0xC0, 0, 0, 0, CPU_486, 0, 0 +xbegin, tsx_xbegin_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_TSX, 0 +xbts, xbts_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_Obs, CPU_Undoc +xchg, xchg_insn, 16, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +xchgb, xchg_insn, 16, SUF_B, 0, 0, 0, 0, 0, 0, 0 +xchgl, xchg_insn, 16, SUF_L, 0, 0, 0, 0, 0, 0, 0 +xchgq, xchg_insn, 16, SUF_Q, 0, 0, 0, ONLY_64, 0, 0, 0 +xchgw, xchg_insn, 16, SUF_W, 0, 0, 0, 0, 0, 0, 0 +xcryptcbc, padlock_insn, 1, SUF_Z, 0xD0, 0xF3, 0xA7, 0, CPU_PadLock, 0, 0 +xcryptcfb, padlock_insn, 1, SUF_Z, 0xE0, 0xF3, 0xA7, 0, CPU_PadLock, 0, 0 +xcryptctr, padlock_insn, 1, SUF_Z, 0xD8, 0xF3, 0xA7, 0, CPU_PadLock, 0, 0 +xcryptecb, padlock_insn, 1, SUF_Z, 0xC8, 0xF3, 0xA7, 0, CPU_PadLock, 0, 0 +xcryptofb, padlock_insn, 1, SUF_Z, 0xE8, 0xF3, 0xA7, 0, CPU_PadLock, 0, 0 +xend, tsx_0x0F_0x01_insn, 1, SUF_Z, 0xD5, 0, 0, 0, CPU_TSX, 0, 0 +xgetbv, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xD0, 0, CPU_386, CPU_XSAVE, 0 +xlatb, onebyte_insn, 1, SUF_Z, 0xD7, 0x00, 0, 0, 0, 0, 0 +xor, arith_insn, 22, SUF_Z, 0x30, 0x06, 0, 0, 0, 0, 0 +xorb, arith_insn, 22, SUF_B, 0x30, 0x06, 0, 0, 0, 0, 0 +xorl, arith_insn, 22, SUF_L, 0x30, 0x06, 0, 0, CPU_386, 0, 0 +xorpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x57, 0, 0, CPU_SSE2, 0, 0 +xorps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x57, 0, 0, CPU_SSE, 0, 0 +xorq, arith_insn, 22, SUF_Q, 0x30, 0x06, 0, ONLY_64, 0, 0, 0 +xorw, arith_insn, 22, SUF_W, 0x30, 0x06, 0, 0, 0, 0, 0 +xrelease, NULL, X86_ACQREL>>8, 0xF3, 0, 0, 0, 0, 0, 0, 0 +xrstor, twobytemem_insn, 1, SUF_Z, 0x05, 0x0F, 0xAE, 0, CPU_386, CPU_XSAVE, 0 +xsave, twobytemem_insn, 1, SUF_Z, 0x04, 0x0F, 0xAE, 0, CPU_386, CPU_XSAVE, 0 +xsaveopt, twobytemem_insn, 1, SUF_Z, 0x06, 0x0F, 0xAE, 0, CPU_XSAVEOPT, 0, 0 +xsaveopt64, xsaveopt64_insn, 1, SUF_Z, 0x06, 0x0F, 0xAE, ONLY_64, CPU_XSAVEOPT, 0, 0 +xsetbv, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xD1, 0, CPU_386, CPU_Priv, CPU_XSAVE +xsha1, padlock_insn, 1, SUF_Z, 0xC8, 0xF3, 0xA6, 0, CPU_PadLock, 0, 0 +xsha256, padlock_insn, 1, SUF_Z, 0xD0, 0xF3, 0xA6, 0, CPU_PadLock, 0, 0 +xstore, padlock_insn, 1, SUF_Z, 0xC0, 0x00, 0xA7, 0, CPU_PadLock, 0, 0 +xstorerng, padlock_insn, 1, SUF_Z, 0xC0, 0x00, 0xA7, 0, CPU_PadLock, 0, 0 +xtest, tsx_0x0F_0x01_insn, 1, SUF_Z, 0xD6, 0, 0, 0, CPU_TSX, 0, 0 diff --git a/third-party/yasm/yasm-1.3.0/x86insn_nasm.gperf b/third-party/yasm/yasm-1.3.0/x86insn_nasm.gperf new file mode 100644 index 0000000000..fc5e1bbde3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/x86insn_nasm.gperf @@ -0,0 +1,1465 @@ +/* Generated by gen_x86_insn.py rHEAD, do not edit */ +%ignore-case +%language=ANSI-C +%compare-strncmp +%readonly-tables +%enum +%struct-type +%define hash-function-name insnprefix_nasm_hash +%define lookup-function-name insnprefix_nasm_find +struct insnprefix_parse_data; +%% +sha1msg1, intel_SHA1MSG1_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SHA, 0, 0 +sha1msg2, intel_SHA1MSG2_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SHA, 0, 0 +sha1nexte, intel_SHA1NEXTE_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SHA, 0, 0 +sha1rnds4, intel_SHA1RNDS4_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SHA, 0, 0 +sha256msg1, intel_SHA256MSG1_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SHA, 0, 0 +sha256msg2, intel_SHA256MSG2_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SHA, 0, 0 +sha256rnds2, intel_SHA256RNDS2_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SHA, 0, 0 +a16, NULL, X86_ADDRSIZE>>8, 0x10, 0, 0, 0, 0, 0, 0, 0 +a32, NULL, X86_ADDRSIZE>>8, 0x20, 0, 0, 0, 0, 0, 0, 0 +a64, NULL, X86_ADDRSIZE>>8, 0x40, 0, 0, 0, ONLY_64, 0, 0, 0 +aaa, onebyte_insn, 1, SUF_Z, 0x37, 0, 0, NOT_64, 0, 0, 0 +aad, aadm_insn, 2, SUF_Z, 0x01, 0, 0, NOT_64, 0, 0, 0 +aam, aadm_insn, 2, SUF_Z, 0x00, 0, 0, NOT_64, 0, 0, 0 +aas, onebyte_insn, 1, SUF_Z, 0x3F, 0, 0, NOT_64, 0, 0, 0 +adc, arith_insn, 22, SUF_Z, 0x10, 0x02, 0, 0, 0, 0, 0 +adcx, vex_gpr_ndd_rm_0F38_insn, 2, SUF_Z, 0x66, 0xF6, 0, 0, CPU_ADX, 0, 0 +add, arith_insn, 22, SUF_Z, 0x00, 0x00, 0, 0, 0, 0, 0 +addpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x58, 0, 0, CPU_SSE2, 0, 0 +addps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x58, 0, 0, CPU_SSE, 0, 0 +addsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x58, 0, 0, CPU_SSE2, 0, 0 +addss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x58, 0, 0, CPU_SSE, 0, 0 +addsubpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0xD0, 0, 0, CPU_SSE3, 0, 0 +addsubps, xmm_xmm128_insn, 2, SUF_Z, 0xF2, 0xD0, 0, 0, CPU_SSE3, 0, 0 +adox, vex_gpr_ndd_rm_0F38_insn, 2, SUF_Z, 0xF3, 0xF6, 0, 0, CPU_ADX, 0, 0 +aesdec, aes_insn, 2, SUF_Z, 0x38, 0xDE, 0, 0, CPU_AVX, 0, 0 +aesdeclast, aes_insn, 2, SUF_Z, 0x38, 0xDF, 0, 0, CPU_AVX, 0, 0 +aesenc, aes_insn, 2, SUF_Z, 0x38, 0xDC, 0, 0, CPU_AVX, 0, 0 +aesenclast, aes_insn, 2, SUF_Z, 0x38, 0xDD, 0, 0, CPU_AVX, 0, 0 +aesimc, aesimc_insn, 1, SUF_Z, 0x38, 0xDB, 0, 0, CPU_AES, 0, 0 +aeskeygenassist, aes_imm_insn, 1, SUF_Z, 0x3A, 0xDF, 0, 0, CPU_AES, 0, 0 +and, arith_insn, 22, SUF_Z, 0x20, 0x04, 0, 0, 0, 0, 0 +andn, vex_gpr_reg_nds_rm_0F_insn, 2, SUF_Z, 0x00, 0x38, 0xF2, ONLY_AVX, CPU_BMI1, 0, 0 +andnpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x55, 0, 0, CPU_SSE2, 0, 0 +andnps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x55, 0, 0, CPU_SSE, 0, 0 +andpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x54, 0, 0, CPU_SSE2, 0, 0 +andps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x54, 0, 0, CPU_SSE, 0, 0 +arpl, arpl_insn, 1, SUF_Z, 0, 0, 0, NOT_64, CPU_286, CPU_Prot, 0 +bextr, bextr_insn, 4, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_386, CPU_BMI1, 0 +blcfill, xop_gpr_reg_rm_09_insn, 2, SUF_Z, 0x01, 0x01, 0, 0, CPU_386, CPU_TBM, 0 +blci, xop_gpr_reg_rm_09_insn, 2, SUF_Z, 0x02, 0x06, 0, 0, CPU_386, CPU_TBM, 0 +blcic, xop_gpr_reg_rm_09_insn, 2, SUF_Z, 0x01, 0x05, 0, 0, CPU_386, CPU_TBM, 0 +blcmsk, xop_gpr_reg_rm_09_insn, 2, SUF_Z, 0x02, 0x01, 0, 0, CPU_386, CPU_TBM, 0 +blcs, xop_gpr_reg_rm_09_insn, 2, SUF_Z, 0x01, 0x03, 0, 0, CPU_386, CPU_TBM, 0 +blendpd, sse4imm_insn, 2, SUF_Z, 0x0D, 0, 0, 0, CPU_SSE41, 0, 0 +blendps, sse4imm_insn, 2, SUF_Z, 0x0C, 0, 0, 0, CPU_SSE41, 0, 0 +blendvpd, sse4xmm0_insn, 2, SUF_Z, 0x15, 0, 0, 0, CPU_SSE41, 0, 0 +blendvps, sse4xmm0_insn, 2, SUF_Z, 0x14, 0, 0, 0, CPU_SSE41, 0, 0 +blsfill, xop_gpr_reg_rm_09_insn, 2, SUF_Z, 0x01, 0x02, 0, 0, CPU_386, CPU_TBM, 0 +blsi, vex_gpr_ndd_rm_0F38_regext_insn, 2, SUF_Z, 0x00, 0xF3, 0x03, ONLY_AVX, CPU_BMI1, 0, 0 +blsic, xop_gpr_reg_rm_09_insn, 2, SUF_Z, 0x01, 0x06, 0, 0, CPU_386, CPU_TBM, 0 +blsmsk, vex_gpr_ndd_rm_0F38_regext_insn, 2, SUF_Z, 0x00, 0xF3, 0x02, ONLY_AVX, CPU_BMI1, 0, 0 +blsr, vex_gpr_ndd_rm_0F38_regext_insn, 2, SUF_Z, 0x00, 0xF3, 0x01, ONLY_AVX, CPU_BMI1, 0, 0 +bound, bound_insn, 2, SUF_Z, 0, 0, 0, NOT_64, CPU_186, 0, 0 +bsf, bsfr_insn, 3, SUF_Z, 0xBC, 0, 0, 0, CPU_386, 0, 0 +bsr, bsfr_insn, 3, SUF_Z, 0xBD, 0, 0, 0, CPU_386, 0, 0 +bswap, bswap_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_486, 0, 0 +bt, bittest_insn, 6, SUF_Z, 0xA3, 0x04, 0, 0, CPU_386, 0, 0 +btc, bittest_insn, 6, SUF_Z, 0xBB, 0x07, 0, 0, CPU_386, 0, 0 +btr, bittest_insn, 6, SUF_Z, 0xB3, 0x06, 0, 0, CPU_386, 0, 0 +bts, bittest_insn, 6, SUF_Z, 0xAB, 0x05, 0, 0, CPU_386, 0, 0 +bzhi, vex_gpr_reg_rm_nds_0F_insn, 2, SUF_Z, 0x00, 0x38, 0xF5, ONLY_AVX, CPU_BMI2, 0, 0 +call, call_insn, 30, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +cbw, onebyte_insn, 1, SUF_Z, 0x98, 0x10, 0, 0, 0, 0, 0 +cdq, onebyte_insn, 1, SUF_Z, 0x99, 0x20, 0, 0, CPU_386, 0, 0 +cdqe, onebyte_insn, 1, SUF_Z, 0x98, 0x40, 0, ONLY_64, 0, 0, 0 +clac, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xCA, 0, CPU_SMAP, 0, 0 +clc, onebyte_insn, 1, SUF_Z, 0xF8, 0, 0, 0, 0, 0, 0 +cld, onebyte_insn, 1, SUF_Z, 0xFC, 0, 0, 0, 0, 0, 0 +clflush, clflush_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_P3, 0, 0 +clgi, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xDD, 0, CPU_SVM, 0, 0 +cli, onebyte_insn, 1, SUF_Z, 0xFA, 0, 0, 0, 0, 0, 0 +clts, twobyte_insn, 1, SUF_Z, 0x0F, 0x06, 0, 0, CPU_286, CPU_Priv, 0 +cmc, onebyte_insn, 1, SUF_Z, 0xF5, 0, 0, 0, 0, 0, 0 +cmova, cmovcc_insn, 3, SUF_Z, 0x07, 0, 0, 0, CPU_686, 0, 0 +cmovae, cmovcc_insn, 3, SUF_Z, 0x03, 0, 0, 0, CPU_686, 0, 0 +cmovb, cmovcc_insn, 3, SUF_Z, 0x02, 0, 0, 0, CPU_686, 0, 0 +cmovbe, cmovcc_insn, 3, SUF_Z, 0x06, 0, 0, 0, CPU_686, 0, 0 +cmovc, cmovcc_insn, 3, SUF_Z, 0x02, 0, 0, 0, CPU_686, 0, 0 +cmove, cmovcc_insn, 3, SUF_Z, 0x04, 0, 0, 0, CPU_686, 0, 0 +cmovg, cmovcc_insn, 3, SUF_Z, 0x0F, 0, 0, 0, CPU_686, 0, 0 +cmovge, cmovcc_insn, 3, SUF_Z, 0x0D, 0, 0, 0, CPU_686, 0, 0 +cmovl, cmovcc_insn, 3, SUF_Z, 0x0C, 0, 0, 0, CPU_686, 0, 0 +cmovle, cmovcc_insn, 3, SUF_Z, 0x0E, 0, 0, 0, CPU_686, 0, 0 +cmovna, cmovcc_insn, 3, SUF_Z, 0x06, 0, 0, 0, CPU_686, 0, 0 +cmovnae, cmovcc_insn, 3, SUF_Z, 0x02, 0, 0, 0, CPU_686, 0, 0 +cmovnb, cmovcc_insn, 3, SUF_Z, 0x03, 0, 0, 0, CPU_686, 0, 0 +cmovnbe, cmovcc_insn, 3, SUF_Z, 0x07, 0, 0, 0, CPU_686, 0, 0 +cmovnc, cmovcc_insn, 3, SUF_Z, 0x03, 0, 0, 0, CPU_686, 0, 0 +cmovne, cmovcc_insn, 3, SUF_Z, 0x05, 0, 0, 0, CPU_686, 0, 0 +cmovng, cmovcc_insn, 3, SUF_Z, 0x0E, 0, 0, 0, CPU_686, 0, 0 +cmovnge, cmovcc_insn, 3, SUF_Z, 0x0C, 0, 0, 0, CPU_686, 0, 0 +cmovnl, cmovcc_insn, 3, SUF_Z, 0x0D, 0, 0, 0, CPU_686, 0, 0 +cmovnle, cmovcc_insn, 3, SUF_Z, 0x0F, 0, 0, 0, CPU_686, 0, 0 +cmovno, cmovcc_insn, 3, SUF_Z, 0x01, 0, 0, 0, CPU_686, 0, 0 +cmovnp, cmovcc_insn, 3, SUF_Z, 0x0B, 0, 0, 0, CPU_686, 0, 0 +cmovns, cmovcc_insn, 3, SUF_Z, 0x09, 0, 0, 0, CPU_686, 0, 0 +cmovnz, cmovcc_insn, 3, SUF_Z, 0x05, 0, 0, 0, CPU_686, 0, 0 +cmovo, cmovcc_insn, 3, SUF_Z, 0x00, 0, 0, 0, CPU_686, 0, 0 +cmovp, cmovcc_insn, 3, SUF_Z, 0x0A, 0, 0, 0, CPU_686, 0, 0 +cmovpe, cmovcc_insn, 3, SUF_Z, 0x0A, 0, 0, 0, CPU_686, 0, 0 +cmovpo, cmovcc_insn, 3, SUF_Z, 0x0B, 0, 0, 0, CPU_686, 0, 0 +cmovs, cmovcc_insn, 3, SUF_Z, 0x08, 0, 0, 0, CPU_686, 0, 0 +cmovz, cmovcc_insn, 3, SUF_Z, 0x04, 0, 0, 0, CPU_686, 0, 0 +cmp, arith_insn, 22, SUF_Z, 0x38, 0x07, 0, 0, 0, 0, 0 +cmpeqpd, ssecmp_128_insn, 3, SUF_Z, 0x00, 0x66, 0, 0, CPU_SSE, 0, 0 +cmpeqps, ssecmp_128_insn, 3, SUF_Z, 0x00, 0, 0, 0, CPU_SSE, 0, 0 +cmpeqsd, ssecmp_64_insn, 4, SUF_Z, 0x00, 0xF2, 0, 0, CPU_SSE2, 0, 0 +cmpeqss, ssecmp_32_insn, 4, SUF_Z, 0x00, 0xF3, 0, 0, CPU_SSE, 0, 0 +cmplepd, ssecmp_128_insn, 3, SUF_Z, 0x02, 0x66, 0, 0, CPU_SSE, 0, 0 +cmpleps, ssecmp_128_insn, 3, SUF_Z, 0x02, 0, 0, 0, CPU_SSE, 0, 0 +cmplesd, ssecmp_64_insn, 4, SUF_Z, 0x02, 0xF2, 0, 0, CPU_SSE2, 0, 0 +cmpless, ssecmp_32_insn, 4, SUF_Z, 0x02, 0xF3, 0, 0, CPU_SSE, 0, 0 +cmpltpd, ssecmp_128_insn, 3, SUF_Z, 0x01, 0x66, 0, 0, CPU_SSE, 0, 0 +cmpltps, ssecmp_128_insn, 3, SUF_Z, 0x01, 0, 0, 0, CPU_SSE, 0, 0 +cmpltsd, ssecmp_64_insn, 4, SUF_Z, 0x01, 0xF2, 0, 0, CPU_SSE2, 0, 0 +cmpltss, ssecmp_32_insn, 4, SUF_Z, 0x01, 0xF3, 0, 0, CPU_SSE, 0, 0 +cmpneqpd, ssecmp_128_insn, 3, SUF_Z, 0x04, 0x66, 0, 0, CPU_SSE, 0, 0 +cmpneqps, ssecmp_128_insn, 3, SUF_Z, 0x04, 0, 0, 0, CPU_SSE, 0, 0 +cmpneqsd, ssecmp_64_insn, 4, SUF_Z, 0x04, 0xF2, 0, 0, CPU_SSE2, 0, 0 +cmpneqss, ssecmp_32_insn, 4, SUF_Z, 0x04, 0xF3, 0, 0, CPU_SSE, 0, 0 +cmpnlepd, ssecmp_128_insn, 3, SUF_Z, 0x06, 0x66, 0, 0, CPU_SSE, 0, 0 +cmpnleps, ssecmp_128_insn, 3, SUF_Z, 0x06, 0, 0, 0, CPU_SSE, 0, 0 +cmpnlesd, ssecmp_64_insn, 4, SUF_Z, 0x06, 0xF2, 0, 0, CPU_SSE2, 0, 0 +cmpnless, ssecmp_32_insn, 4, SUF_Z, 0x06, 0xF3, 0, 0, CPU_SSE, 0, 0 +cmpnltpd, ssecmp_128_insn, 3, SUF_Z, 0x05, 0x66, 0, 0, CPU_SSE, 0, 0 +cmpnltps, ssecmp_128_insn, 3, SUF_Z, 0x05, 0, 0, 0, CPU_SSE, 0, 0 +cmpnltsd, ssecmp_64_insn, 4, SUF_Z, 0x05, 0xF2, 0, 0, CPU_SSE2, 0, 0 +cmpnltss, ssecmp_32_insn, 4, SUF_Z, 0x05, 0xF3, 0, 0, CPU_SSE, 0, 0 +cmpordpd, ssecmp_128_insn, 3, SUF_Z, 0x07, 0x66, 0, 0, CPU_SSE, 0, 0 +cmpordps, ssecmp_128_insn, 3, SUF_Z, 0x07, 0, 0, 0, CPU_SSE, 0, 0 +cmpordsd, ssecmp_64_insn, 4, SUF_Z, 0x07, 0xF2, 0, 0, CPU_SSE2, 0, 0 +cmpordss, ssecmp_32_insn, 4, SUF_Z, 0x07, 0xF3, 0, 0, CPU_SSE, 0, 0 +cmppd, xmm_xmm128_imm_insn, 1, SUF_Z, 0x66, 0xC2, 0, 0, CPU_SSE2, 0, 0 +cmpps, xmm_xmm128_imm_insn, 1, SUF_Z, 0x00, 0xC2, 0, 0, CPU_SSE, 0, 0 +cmpsb, onebyte_insn, 1, SUF_Z, 0xA6, 0x00, 0, 0, 0, 0, 0 +cmpsd, cmpsd_insn, 5, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +cmpsq, onebyte_insn, 1, SUF_Z, 0xA7, 0x40, 0, ONLY_64, 0, 0, 0 +cmpss, xmm_xmm32_imm_insn, 4, SUF_Z, 0xF3, 0xC2, 0, 0, CPU_SSE, 0, 0 +cmpsw, onebyte_insn, 1, SUF_Z, 0xA7, 0x10, 0, 0, 0, 0, 0 +cmpunordpd, ssecmp_128_insn, 3, SUF_Z, 0x03, 0x66, 0, 0, CPU_SSE, 0, 0 +cmpunordps, ssecmp_128_insn, 3, SUF_Z, 0x03, 0, 0, 0, CPU_SSE, 0, 0 +cmpunordsd, ssecmp_64_insn, 4, SUF_Z, 0x03, 0xF2, 0, 0, CPU_SSE2, 0, 0 +cmpunordss, ssecmp_32_insn, 4, SUF_Z, 0x03, 0xF3, 0, 0, CPU_SSE, 0, 0 +cmpxchg, cmpxchgxadd_insn, 4, SUF_Z, 0xB0, 0, 0, 0, CPU_486, 0, 0 +cmpxchg16b, cmpxchg16b_insn, 1, SUF_Z, 0, 0, 0, ONLY_64, 0, 0, 0 +cmpxchg486, cmpxchgxadd_insn, 4, SUF_Z, 0xA6, 0, 0, 0, CPU_486, CPU_Undoc, 0 +cmpxchg8b, cmpxchg8b_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_586, 0, 0 +comisd, xmm_xmm64_insn, 4, SUF_Z, 0x66, 0x2F, 0, 0, CPU_SSE2, 0, 0 +comiss, xmm_xmm32_insn, 4, SUF_Z, 0x00, 0x2F, 0, 0, CPU_SSE, 0, 0 +cpuid, twobyte_insn, 1, SUF_Z, 0x0F, 0xA2, 0, 0, CPU_486, 0, 0 +cqo, onebyte_insn, 1, SUF_Z, 0x99, 0x40, 0, ONLY_64, 0, 0, 0 +crc32, crc32_insn, 5, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_SSE42, 0 +cvtdq2pd, xmm_xmm64_insn, 4, SUF_Z, 0xF3, 0xE6, 0, 0, CPU_SSE2, 0, 0 +cvtdq2ps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x5B, 0, 0, CPU_SSE2, 0, 0 +cvtpd2dq, xmm_xmm128_insn, 2, SUF_Z, 0xF2, 0xE6, 0, 0, CPU_SSE2, 0, 0 +cvtpd2pi, cvt_mm_xmm_insn, 1, SUF_Z, 0x66, 0x2D, 0, 0, CPU_SSE2, 0, 0 +cvtpd2ps, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x5A, 0, 0, CPU_SSE2, 0, 0 +cvtpi2pd, cvt_xmm_mm_ss_insn, 1, SUF_Z, 0x66, 0x2A, 0, 0, CPU_SSE2, 0, 0 +cvtpi2ps, cvt_xmm_mm_ps_insn, 1, SUF_Z, 0x2A, 0, 0, 0, CPU_SSE, 0, 0 +cvtps2dq, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x5B, 0, 0, CPU_SSE2, 0, 0 +cvtps2pd, xmm_xmm64_insn, 4, SUF_Z, 0x00, 0x5A, 0, 0, CPU_SSE2, 0, 0 +cvtps2pi, cvt_mm_xmm64_insn, 2, SUF_Z, 0x2D, 0, 0, 0, CPU_SSE, 0, 0 +cvtsd2si, cvt_rx_xmm64_insn, 4, SUF_Z, 0xF2, 0x2D, 0, 0, CPU_386, CPU_SSE2, 0 +cvtsd2ss, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5A, 0, 0, CPU_SSE2, 0, 0 +cvtsi2sd, cvt_xmm_rmx_insn, 6, SUF_Z, 0xF2, 0x2A, 0, 0, CPU_SSE2, 0, 0 +cvtsi2ss, cvt_xmm_rmx_insn, 6, SUF_Z, 0xF3, 0x2A, 0, 0, CPU_386, CPU_SSE, 0 +cvtss2sd, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5A, 0, 0, CPU_SSE2, 0, 0 +cvtss2si, cvt_rx_xmm32_insn, 4, SUF_Z, 0xF3, 0x2D, 0, 0, CPU_386, CPU_SSE, 0 +cvttpd2dq, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0xE6, 0, 0, CPU_SSE2, 0, 0 +cvttpd2pi, cvt_mm_xmm_insn, 1, SUF_Z, 0x66, 0x2C, 0, 0, CPU_SSE2, 0, 0 +cvttps2dq, xmm_xmm128_insn, 2, SUF_Z, 0xF3, 0x5B, 0, 0, CPU_SSE2, 0, 0 +cvttps2pi, cvt_mm_xmm64_insn, 2, SUF_Z, 0x2C, 0, 0, 0, CPU_SSE, 0, 0 +cvttsd2si, cvt_rx_xmm64_insn, 4, SUF_Z, 0xF2, 0x2C, 0, 0, CPU_SSE2, 0, 0 +cvttss2si, cvt_rx_xmm32_insn, 4, SUF_Z, 0xF3, 0x2C, 0, 0, CPU_386, CPU_SSE, 0 +cwd, onebyte_insn, 1, SUF_Z, 0x99, 0x10, 0, 0, 0, 0, 0 +cwde, onebyte_insn, 1, SUF_Z, 0x98, 0x20, 0, 0, CPU_386, 0, 0 +daa, onebyte_insn, 1, SUF_Z, 0x27, 0, 0, NOT_64, 0, 0, 0 +das, onebyte_insn, 1, SUF_Z, 0x2F, 0, 0, NOT_64, 0, 0, 0 +dec, incdec_insn, 6, SUF_Z, 0x48, 0x01, 0, 0, 0, 0, 0 +div, div_insn, 8, SUF_Z, 0x06, 0, 0, 0, 0, 0, 0 +divpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x5E, 0, 0, CPU_SSE2, 0, 0 +divps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x5E, 0, 0, CPU_SSE, 0, 0 +divsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5E, 0, 0, CPU_SSE2, 0, 0 +divss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5E, 0, 0, CPU_SSE, 0, 0 +dppd, sse4imm_insn, 2, SUF_Z, 0x41, 0, 0, 0, CPU_SSE41, 0, 0 +dpps, sse4imm_insn, 2, SUF_Z, 0x40, 0, 0, 0, CPU_SSE41, 0, 0 +emms, twobyte_insn, 1, SUF_Z, 0x0F, 0x77, 0, 0, CPU_MMX, 0, 0 +enter, enter_insn, 3, SUF_Z, 0, 0, 0, 0, CPU_186, 0, 0 +extractps, extractps_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_SSE41, 0 +extrq, extrq_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_SSE4a, 0, 0 +f2xm1, twobyte_insn, 1, SUF_Z, 0xD9, 0xF0, 0, 0, CPU_FPU, 0, 0 +fabs, twobyte_insn, 1, SUF_Z, 0xD9, 0xE1, 0, 0, CPU_FPU, 0, 0 +fadd, farith_insn, 7, SUF_Z, 0xC0, 0xC0, 0x00, 0, CPU_FPU, 0, 0 +faddp, farithp_insn, 3, SUF_Z, 0xC0, 0, 0, 0, CPU_FPU, 0, 0 +fbld, fbldstp_insn, 1, SUF_Z, 0x04, 0, 0, 0, CPU_FPU, 0, 0 +fbstp, fbldstp_insn, 1, SUF_Z, 0x06, 0, 0, 0, CPU_FPU, 0, 0 +fchs, twobyte_insn, 1, SUF_Z, 0xD9, 0xE0, 0, 0, CPU_FPU, 0, 0 +fclex, threebyte_insn, 1, SUF_Z, 0x9B, 0xDB, 0xE2, 0, CPU_FPU, 0, 0 +fcmovb, fcmovcc_insn, 1, SUF_Z, 0xDA, 0xC0, 0, 0, CPU_686, CPU_FPU, 0 +fcmovbe, fcmovcc_insn, 1, SUF_Z, 0xDA, 0xD0, 0, 0, CPU_686, CPU_FPU, 0 +fcmove, fcmovcc_insn, 1, SUF_Z, 0xDA, 0xC8, 0, 0, CPU_686, CPU_FPU, 0 +fcmovnb, fcmovcc_insn, 1, SUF_Z, 0xDB, 0xC0, 0, 0, CPU_686, CPU_FPU, 0 +fcmovnbe, fcmovcc_insn, 1, SUF_Z, 0xDB, 0xD0, 0, 0, CPU_686, CPU_FPU, 0 +fcmovne, fcmovcc_insn, 1, SUF_Z, 0xDB, 0xC8, 0, 0, CPU_686, CPU_FPU, 0 +fcmovnu, fcmovcc_insn, 1, SUF_Z, 0xDB, 0xD8, 0, 0, CPU_686, CPU_FPU, 0 +fcmovu, fcmovcc_insn, 1, SUF_Z, 0xDA, 0xD8, 0, 0, CPU_686, CPU_FPU, 0 +fcom, fcom_insn, 6, SUF_Z, 0xD0, 0x02, 0, 0, CPU_FPU, 0, 0 +fcomi, fcom2_insn, 2, SUF_Z, 0xDB, 0xF0, 0, 0, CPU_686, CPU_FPU, 0 +fcomip, fcom2_insn, 2, SUF_Z, 0xDF, 0xF0, 0, 0, CPU_686, CPU_FPU, 0 +fcomp, fcom_insn, 6, SUF_Z, 0xD8, 0x03, 0, 0, CPU_FPU, 0, 0 +fcompp, twobyte_insn, 1, SUF_Z, 0xDE, 0xD9, 0, 0, CPU_FPU, 0, 0 +fcos, twobyte_insn, 1, SUF_Z, 0xD9, 0xFF, 0, 0, CPU_286, CPU_FPU, 0 +fdecstp, twobyte_insn, 1, SUF_Z, 0xD9, 0xF6, 0, 0, CPU_FPU, 0, 0 +fdiv, farith_insn, 7, SUF_Z, 0xF8, 0xF0, 0x06, 0, CPU_FPU, 0, 0 +fdivp, farithp_insn, 3, SUF_Z, 0xF8, 0, 0, 0, CPU_FPU, 0, 0 +fdivr, farith_insn, 7, SUF_Z, 0xF0, 0xF8, 0x07, 0, CPU_FPU, 0, 0 +fdivrp, farithp_insn, 3, SUF_Z, 0xF0, 0, 0, 0, CPU_FPU, 0, 0 +femms, twobyte_insn, 1, SUF_Z, 0x0F, 0x0E, 0, 0, CPU_3DNow, 0, 0 +ffree, ffree_insn, 1, SUF_Z, 0xDD, 0, 0, 0, CPU_FPU, 0, 0 +ffreep, ffree_insn, 1, SUF_Z, 0xDF, 0, 0, 0, CPU_686, CPU_FPU, CPU_Undoc +fiadd, fiarith_insn, 2, SUF_Z, 0x00, 0xDA, 0, 0, CPU_FPU, 0, 0 +ficom, fiarith_insn, 2, SUF_Z, 0x02, 0xDA, 0, 0, CPU_FPU, 0, 0 +ficomp, fiarith_insn, 2, SUF_Z, 0x03, 0xDA, 0, 0, CPU_FPU, 0, 0 +fidiv, fiarith_insn, 2, SUF_Z, 0x06, 0xDA, 0, 0, CPU_FPU, 0, 0 +fidivr, fiarith_insn, 2, SUF_Z, 0x07, 0xDA, 0, 0, CPU_FPU, 0, 0 +fild, fildstp_insn, 4, SUF_Z, 0x00, 0x02, 0x05, 0, CPU_FPU, 0, 0 +fimul, fiarith_insn, 2, SUF_Z, 0x01, 0xDA, 0, 0, CPU_FPU, 0, 0 +fincstp, twobyte_insn, 1, SUF_Z, 0xD9, 0xF7, 0, 0, CPU_FPU, 0, 0 +finit, threebyte_insn, 1, SUF_Z, 0x9B, 0xDB, 0xE3, 0, CPU_FPU, 0, 0 +fist, fiarith_insn, 2, SUF_Z, 0x02, 0xDB, 0, 0, CPU_FPU, 0, 0 +fistp, fildstp_insn, 4, SUF_Z, 0x03, 0x02, 0x07, 0, CPU_FPU, 0, 0 +fisttp, fildstp_insn, 4, SUF_Z, 0x01, 0x00, 0x01, 0, CPU_SSE3, 0, 0 +fisub, fiarith_insn, 2, SUF_Z, 0x04, 0xDA, 0, 0, CPU_FPU, 0, 0 +fisubr, fiarith_insn, 2, SUF_Z, 0x05, 0xDA, 0, 0, CPU_FPU, 0, 0 +fld, fld_insn, 4, SUF_Z, 0, 0, 0, 0, CPU_FPU, 0, 0 +fld1, twobyte_insn, 1, SUF_Z, 0xD9, 0xE8, 0, 0, CPU_FPU, 0, 0 +fldcw, fldnstcw_insn, 1, SUF_Z, 0x05, 0, 0, 0, CPU_FPU, 0, 0 +fldenv, onebytemem_insn, 1, SUF_Z, 0x04, 0xD9, 0, 0, CPU_FPU, 0, 0 +fldl2e, twobyte_insn, 1, SUF_Z, 0xD9, 0xEA, 0, 0, CPU_FPU, 0, 0 +fldl2t, twobyte_insn, 1, SUF_Z, 0xD9, 0xE9, 0, 0, CPU_FPU, 0, 0 +fldlg2, twobyte_insn, 1, SUF_Z, 0xD9, 0xEC, 0, 0, CPU_FPU, 0, 0 +fldln2, twobyte_insn, 1, SUF_Z, 0xD9, 0xED, 0, 0, CPU_FPU, 0, 0 +fldpi, twobyte_insn, 1, SUF_Z, 0xD9, 0xEB, 0, 0, CPU_FPU, 0, 0 +fldt, fldstpt_insn, 1, SUF_Z, 0x05, 0, 0, 0, CPU_FPU, 0, 0 +fldz, twobyte_insn, 1, SUF_Z, 0xD9, 0xEE, 0, 0, CPU_FPU, 0, 0 +fmul, farith_insn, 7, SUF_Z, 0xC8, 0xC8, 0x01, 0, CPU_FPU, 0, 0 +fmulp, farithp_insn, 3, SUF_Z, 0xC8, 0, 0, 0, CPU_FPU, 0, 0 +fnclex, twobyte_insn, 1, SUF_Z, 0xDB, 0xE2, 0, 0, CPU_FPU, 0, 0 +fninit, twobyte_insn, 1, SUF_Z, 0xDB, 0xE3, 0, 0, CPU_FPU, 0, 0 +fnop, twobyte_insn, 1, SUF_Z, 0xD9, 0xD0, 0, 0, CPU_FPU, 0, 0 +fnsave, onebytemem_insn, 1, SUF_Z, 0x06, 0xDD, 0, 0, CPU_FPU, 0, 0 +fnstcw, fldnstcw_insn, 1, SUF_Z, 0x07, 0, 0, 0, CPU_FPU, 0, 0 +fnstenv, onebytemem_insn, 1, SUF_Z, 0x06, 0xD9, 0, 0, CPU_FPU, 0, 0 +fnstsw, fnstsw_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_FPU, 0, 0 +fpatan, twobyte_insn, 1, SUF_Z, 0xD9, 0xF3, 0, 0, CPU_FPU, 0, 0 +fprem, twobyte_insn, 1, SUF_Z, 0xD9, 0xF8, 0, 0, CPU_FPU, 0, 0 +fprem1, twobyte_insn, 1, SUF_Z, 0xD9, 0xF5, 0, 0, CPU_286, CPU_FPU, 0 +fptan, twobyte_insn, 1, SUF_Z, 0xD9, 0xF2, 0, 0, CPU_FPU, 0, 0 +frndint, twobyte_insn, 1, SUF_Z, 0xD9, 0xFC, 0, 0, CPU_FPU, 0, 0 +frstor, onebytemem_insn, 1, SUF_Z, 0x04, 0xDD, 0, 0, CPU_FPU, 0, 0 +fsave, twobytemem_insn, 1, SUF_Z, 0x06, 0x9B, 0xDD, 0, CPU_FPU, 0, 0 +fscale, twobyte_insn, 1, SUF_Z, 0xD9, 0xFD, 0, 0, CPU_FPU, 0, 0 +fsetpm, twobyte_insn, 1, SUF_Z, 0xDB, 0xE4, 0, 0, CPU_286, CPU_FPU, CPU_Obs +fsin, twobyte_insn, 1, SUF_Z, 0xD9, 0xFE, 0, 0, CPU_286, CPU_FPU, 0 +fsincos, twobyte_insn, 1, SUF_Z, 0xD9, 0xFB, 0, 0, CPU_286, CPU_FPU, 0 +fsqrt, twobyte_insn, 1, SUF_Z, 0xD9, 0xFA, 0, 0, CPU_FPU, 0, 0 +fst, fst_insn, 3, SUF_Z, 0, 0, 0, 0, CPU_FPU, 0, 0 +fstcw, fstcw_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_FPU, 0, 0 +fstenv, twobytemem_insn, 1, SUF_Z, 0x06, 0x9B, 0xD9, 0, CPU_FPU, 0, 0 +fstp, fstp_insn, 4, SUF_Z, 0, 0, 0, 0, CPU_FPU, 0, 0 +fstpt, fldstpt_insn, 1, SUF_Z, 0x07, 0, 0, 0, CPU_FPU, 0, 0 +fstsw, fstsw_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_FPU, 0, 0 +fsub, farith_insn, 7, SUF_Z, 0xE8, 0xE0, 0x04, 0, CPU_FPU, 0, 0 +fsubp, farithp_insn, 3, SUF_Z, 0xE8, 0, 0, 0, CPU_FPU, 0, 0 +fsubr, farith_insn, 7, SUF_Z, 0xE0, 0xE8, 0x05, 0, CPU_FPU, 0, 0 +fsubrp, farithp_insn, 3, SUF_Z, 0xE0, 0, 0, 0, CPU_FPU, 0, 0 +ftst, twobyte_insn, 1, SUF_Z, 0xD9, 0xE4, 0, 0, CPU_FPU, 0, 0 +fucom, fcom2_insn, 2, SUF_Z, 0xDD, 0xE0, 0, 0, CPU_286, CPU_FPU, 0 +fucomi, fcom2_insn, 2, SUF_Z, 0xDB, 0xE8, 0, 0, CPU_686, CPU_FPU, 0 +fucomip, fcom2_insn, 2, SUF_Z, 0xDF, 0xE8, 0, 0, CPU_686, CPU_FPU, 0 +fucomp, fcom2_insn, 2, SUF_Z, 0xDD, 0xE8, 0, 0, CPU_286, CPU_FPU, 0 +fucompp, twobyte_insn, 1, SUF_Z, 0xDA, 0xE9, 0, 0, CPU_286, CPU_FPU, 0 +fwait, onebyte_insn, 1, SUF_Z, 0x9B, 0, 0, 0, CPU_FPU, 0, 0 +fxam, twobyte_insn, 1, SUF_Z, 0xD9, 0xE5, 0, 0, CPU_FPU, 0, 0 +fxch, fxch_insn, 4, SUF_Z, 0, 0, 0, 0, CPU_FPU, 0, 0 +fxrstor, twobytemem_insn, 1, SUF_Z, 0x01, 0x0F, 0xAE, 0, CPU_686, CPU_FPU, 0 +fxsave, twobytemem_insn, 1, SUF_Z, 0x00, 0x0F, 0xAE, 0, CPU_686, CPU_FPU, 0 +fxtract, twobyte_insn, 1, SUF_Z, 0xD9, 0xF4, 0, 0, CPU_FPU, 0, 0 +fyl2x, twobyte_insn, 1, SUF_Z, 0xD9, 0xF1, 0, 0, CPU_FPU, 0, 0 +fyl2xp1, twobyte_insn, 1, SUF_Z, 0xD9, 0xF9, 0, 0, CPU_FPU, 0, 0 +getsec, twobyte_insn, 1, SUF_Z, 0x0F, 0x37, 0, 0, CPU_SMX, 0, 0 +haddpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x7C, 0, 0, CPU_SSE3, 0, 0 +haddps, xmm_xmm128_insn, 2, SUF_Z, 0xF2, 0x7C, 0, 0, CPU_SSE3, 0, 0 +hlt, onebyte_insn, 1, SUF_Z, 0xF4, 0, 0, 0, CPU_Priv, 0, 0 +hsubpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x7D, 0, 0, CPU_SSE3, 0, 0 +hsubps, xmm_xmm128_insn, 2, SUF_Z, 0xF2, 0x7D, 0, 0, CPU_SSE3, 0, 0 +ibts, ibts_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_Obs, CPU_Undoc +idiv, div_insn, 8, SUF_Z, 0x07, 0, 0, 0, 0, 0, 0 +imul, imul_insn, 19, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +in, in_insn, 12, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +inc, incdec_insn, 6, SUF_Z, 0x40, 0x00, 0, 0, 0, 0, 0 +insb, onebyte_insn, 1, SUF_Z, 0x6C, 0x00, 0, 0, 0, 0, 0 +insd, onebyte_insn, 1, SUF_Z, 0x6D, 0x20, 0, 0, CPU_386, 0, 0 +insertps, insertps_insn, 4, SUF_Z, 0, 0, 0, 0, CPU_SSE41, 0, 0 +insertq, insertq_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_SSE4a, 0, 0 +insw, onebyte_insn, 1, SUF_Z, 0x6D, 0x10, 0, 0, 0, 0, 0 +int, int_insn, 1, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +int03, onebyte_insn, 1, SUF_Z, 0xCC, 0, 0, 0, 0, 0, 0 +int3, onebyte_insn, 1, SUF_Z, 0xCC, 0, 0, 0, 0, 0, 0 +into, onebyte_insn, 1, SUF_Z, 0xCE, 0, 0, NOT_64, 0, 0, 0 +invd, twobyte_insn, 1, SUF_Z, 0x0F, 0x08, 0, 0, CPU_486, CPU_Priv, 0 +invept, eptvpid_insn, 2, SUF_Z, 0x00, 0, 0, 0, CPU_386, CPU_EPTVPID, 0 +invlpg, twobytemem_insn, 1, SUF_Z, 0x07, 0x0F, 0x01, 0, CPU_486, CPU_Priv, 0 +invlpga, invlpga_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_SVM, 0, 0 +invpcid, invpcid_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_INVPCID, CPU_Priv +invvpid, eptvpid_insn, 2, SUF_Z, 0x01, 0, 0, 0, CPU_386, CPU_EPTVPID, 0 +iret, onebyte_insn, 1, SUF_Z, 0xCF, 0, 0, 0, 0, 0, 0 +iretd, onebyte_insn, 1, SUF_Z, 0xCF, 0x20, 0, 0, CPU_386, 0, 0 +iretq, onebyte_insn, 1, SUF_Z, 0xCF, 0x40, 0, ONLY_64, 0, 0, 0 +iretw, onebyte_insn, 1, SUF_Z, 0xCF, 0x10, 0, 0, 0, 0, 0 +ja, jcc_insn, 9, SUF_Z, 0x07, 0, 0, 0, 0, 0, 0 +jae, jcc_insn, 9, SUF_Z, 0x03, 0, 0, 0, 0, 0, 0 +jb, jcc_insn, 9, SUF_Z, 0x02, 0, 0, 0, 0, 0, 0 +jbe, jcc_insn, 9, SUF_Z, 0x06, 0, 0, 0, 0, 0, 0 +jc, jcc_insn, 9, SUF_Z, 0x02, 0, 0, 0, 0, 0, 0 +jcxz, jcxz_insn, 2, SUF_Z, 0x10, 0, 0, 0, 0, 0, 0 +je, jcc_insn, 9, SUF_Z, 0x04, 0, 0, 0, 0, 0, 0 +jecxz, jcxz_insn, 2, SUF_Z, 0x20, 0, 0, 0, CPU_386, 0, 0 +jg, jcc_insn, 9, SUF_Z, 0x0F, 0, 0, 0, 0, 0, 0 +jge, jcc_insn, 9, SUF_Z, 0x0D, 0, 0, 0, 0, 0, 0 +jl, jcc_insn, 9, SUF_Z, 0x0C, 0, 0, 0, 0, 0, 0 +jle, jcc_insn, 9, SUF_Z, 0x0E, 0, 0, 0, 0, 0, 0 +jmp, jmp_insn, 31, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +jna, jcc_insn, 9, SUF_Z, 0x06, 0, 0, 0, 0, 0, 0 +jnae, jcc_insn, 9, SUF_Z, 0x02, 0, 0, 0, 0, 0, 0 +jnb, jcc_insn, 9, SUF_Z, 0x03, 0, 0, 0, 0, 0, 0 +jnbe, jcc_insn, 9, SUF_Z, 0x07, 0, 0, 0, 0, 0, 0 +jnc, jcc_insn, 9, SUF_Z, 0x03, 0, 0, 0, 0, 0, 0 +jne, jcc_insn, 9, SUF_Z, 0x05, 0, 0, 0, 0, 0, 0 +jng, jcc_insn, 9, SUF_Z, 0x0E, 0, 0, 0, 0, 0, 0 +jnge, jcc_insn, 9, SUF_Z, 0x0C, 0, 0, 0, 0, 0, 0 +jnl, jcc_insn, 9, SUF_Z, 0x0D, 0, 0, 0, 0, 0, 0 +jnle, jcc_insn, 9, SUF_Z, 0x0F, 0, 0, 0, 0, 0, 0 +jno, jcc_insn, 9, SUF_Z, 0x01, 0, 0, 0, 0, 0, 0 +jnp, jcc_insn, 9, SUF_Z, 0x0B, 0, 0, 0, 0, 0, 0 +jns, jcc_insn, 9, SUF_Z, 0x09, 0, 0, 0, 0, 0, 0 +jnz, jcc_insn, 9, SUF_Z, 0x05, 0, 0, 0, 0, 0, 0 +jo, jcc_insn, 9, SUF_Z, 0x00, 0, 0, 0, 0, 0, 0 +jp, jcc_insn, 9, SUF_Z, 0x0A, 0, 0, 0, 0, 0, 0 +jpe, jcc_insn, 9, SUF_Z, 0x0A, 0, 0, 0, 0, 0, 0 +jpo, jcc_insn, 9, SUF_Z, 0x0B, 0, 0, 0, 0, 0, 0 +jrcxz, jcxz_insn, 2, SUF_Z, 0x40, 0, 0, ONLY_64, 0, 0, 0 +js, jcc_insn, 9, SUF_Z, 0x08, 0, 0, 0, 0, 0, 0 +jz, jcc_insn, 9, SUF_Z, 0x04, 0, 0, 0, 0, 0, 0 +lahf, onebyte_insn, 1, SUF_Z, 0x9F, 0, 0, 0, 0, 0, 0 +lar, larlsl_insn, 6, SUF_Z, 0x02, 0, 0, 0, CPU_286, CPU_Prot, 0 +lddqu, lddqu_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_SSE3, 0, 0 +ldmxcsr, ldstmxcsr_insn, 1, SUF_Z, 0x02, 0, 0, 0, CPU_SSE, 0, 0 +lds, ldes_insn, 2, SUF_Z, 0xC5, 0, 0, NOT_64, 0, 0, 0 +lea, lea_insn, 3, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +leave, onebyte_insn, 1, SUF_Z, 0xC9, 0x00, 0x40, 0, CPU_186, 0, 0 +les, ldes_insn, 2, SUF_Z, 0xC4, 0, 0, NOT_64, 0, 0, 0 +lfence, threebyte_insn, 1, SUF_Z, 0x0F, 0xAE, 0xE8, 0, CPU_P3, 0, 0 +lfs, lfgss_insn, 3, SUF_Z, 0xB4, 0, 0, 0, CPU_386, 0, 0 +lgdt, twobytemem_insn, 1, SUF_Z, 0x02, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +lgs, lfgss_insn, 3, SUF_Z, 0xB5, 0, 0, 0, CPU_386, 0, 0 +lidt, twobytemem_insn, 1, SUF_Z, 0x03, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +lldt, prot286_insn, 1, SUF_Z, 0x02, 0x00, 0, 0, CPU_286, CPU_Priv, CPU_Prot +lmsw, prot286_insn, 1, SUF_Z, 0x06, 0x01, 0, 0, CPU_286, CPU_Priv, 0 +loadall, twobyte_insn, 1, SUF_Z, 0x0F, 0x07, 0, 0, CPU_386, CPU_Undoc, 0 +loadall286, twobyte_insn, 1, SUF_Z, 0x0F, 0x05, 0, 0, CPU_286, CPU_Undoc, 0 +lock, NULL, X86_LOCKREP>>8, 0xF0, 0, 0, 0, 0, 0, 0, 0 +lodsb, onebyte_insn, 1, SUF_Z, 0xAC, 0x00, 0, 0, 0, 0, 0 +lodsd, onebyte_insn, 1, SUF_Z, 0xAD, 0x20, 0, 0, CPU_386, 0, 0 +lodsq, onebyte_insn, 1, SUF_Z, 0xAD, 0x40, 0, ONLY_64, 0, 0, 0 +lodsw, onebyte_insn, 1, SUF_Z, 0xAD, 0x10, 0, 0, 0, 0, 0 +loop, loop_insn, 8, SUF_Z, 0x02, 0, 0, 0, 0, 0, 0 +loope, loop_insn, 8, SUF_Z, 0x01, 0, 0, 0, 0, 0, 0 +loopne, loop_insn, 8, SUF_Z, 0x00, 0, 0, 0, 0, 0, 0 +loopnz, loop_insn, 8, SUF_Z, 0x00, 0, 0, 0, 0, 0, 0 +loopz, loop_insn, 8, SUF_Z, 0x01, 0, 0, 0, 0, 0, 0 +lsl, larlsl_insn, 6, SUF_Z, 0x03, 0, 0, 0, CPU_286, CPU_Prot, 0 +lss, lfgss_insn, 3, SUF_Z, 0xB2, 0, 0, 0, CPU_386, 0, 0 +ltr, prot286_insn, 1, SUF_Z, 0x03, 0x00, 0, 0, CPU_286, CPU_Priv, CPU_Prot +lzcnt, cnt_insn, 3, SUF_Z, 0xBD, 0, 0, 0, CPU_LZCNT, 0, 0 +maskmovdqu, maskmovdqu_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SSE2, 0, 0 +maskmovq, maskmovq_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_MMX, CPU_P3, 0 +maxpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x5F, 0, 0, CPU_SSE2, 0, 0 +maxps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x5F, 0, 0, CPU_SSE, 0, 0 +maxsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5F, 0, 0, CPU_SSE2, 0, 0 +maxss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5F, 0, 0, CPU_SSE, 0, 0 +mfence, threebyte_insn, 1, SUF_Z, 0x0F, 0xAE, 0xF0, 0, CPU_P3, 0, 0 +minpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x5D, 0, 0, CPU_SSE2, 0, 0 +minps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x5D, 0, 0, CPU_SSE, 0, 0 +minsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5D, 0, 0, CPU_SSE2, 0, 0 +minss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5D, 0, 0, CPU_SSE, 0, 0 +monitor, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xC8, 0, CPU_SSE3, 0, 0 +montmul, padlock_insn, 1, SUF_Z, 0xC0, 0xF3, 0xA6, 0, CPU_PadLock, 0, 0 +mov, mov_insn, 69, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +movapd, movau_insn, 6, SUF_Z, 0x66, 0x28, 0x01, 0, CPU_SSE2, 0, 0 +movaps, movau_insn, 6, SUF_Z, 0x00, 0x28, 0x01, 0, CPU_SSE, 0, 0 +movbe, movbe_insn, 6, SUF_Z, 0, 0, 0, 0, CPU_MOVBE, 0, 0 +movd, movd_insn, 8, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_MMX, 0 +movddup, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x12, 0, 0, CPU_SSE3, 0, 0 +movdq2q, movdq2q_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SSE2, 0, 0 +movdqa, movau_insn, 6, SUF_Z, 0x66, 0x6F, 0x10, 0, CPU_SSE2, 0, 0 +movdqu, movau_insn, 6, SUF_Z, 0xF3, 0x6F, 0x10, 0, CPU_SSE2, 0, 0 +movhlps, movhllhps_insn, 2, SUF_Z, 0x12, 0, 0, 0, CPU_SSE, 0, 0 +movhpd, movhlp_insn, 3, SUF_Z, 0x66, 0x16, 0, 0, CPU_SSE2, 0, 0 +movhps, movhlp_insn, 3, SUF_Z, 0x00, 0x16, 0, 0, CPU_SSE, 0, 0 +movlhps, movhllhps_insn, 2, SUF_Z, 0x16, 0, 0, 0, CPU_SSE, 0, 0 +movlpd, movhlp_insn, 3, SUF_Z, 0x66, 0x12, 0, 0, CPU_SSE2, 0, 0 +movlps, movhlp_insn, 3, SUF_Z, 0x00, 0x12, 0, 0, CPU_SSE, 0, 0 +movmskpd, movmsk_insn, 4, SUF_Z, 0x66, 0, 0, 0, CPU_SSE2, 0, 0 +movmskps, movmsk_insn, 4, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_SSE, 0 +movntdq, movnt_insn, 2, SUF_Z, 0x66, 0xE7, 0, 0, CPU_SSE2, 0, 0 +movntdqa, movntdqa_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_SSE41, 0, 0 +movnti, movnti_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_P4, 0, 0 +movntpd, movnt_insn, 2, SUF_Z, 0x66, 0x2B, 0, 0, CPU_SSE2, 0, 0 +movntps, movnt_insn, 2, SUF_Z, 0x00, 0x2B, 0, 0, CPU_SSE, 0, 0 +movntq, movntq_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SSE, 0, 0 +movntsd, movntsd_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SSE4a, 0, 0 +movntss, movntss_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SSE4a, 0, 0 +movq, movq_insn, 9, SUF_Z, 0, 0, 0, 0, CPU_MMX, 0, 0 +movq2dq, movq2dq_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_SSE2, 0, 0 +movsb, onebyte_insn, 1, SUF_Z, 0xA4, 0x00, 0, 0, 0, 0, 0 +movsd, movsd_insn, 5, SUF_Z, 0, 0, 0, 0, CPU_386, 0, 0 +movshdup, xmm_xmm128_insn, 2, SUF_Z, 0xF3, 0x16, 0, 0, CPU_SSE3, 0, 0 +movsldup, xmm_xmm128_insn, 2, SUF_Z, 0xF3, 0x12, 0, 0, CPU_SSE3, 0, 0 +movsq, onebyte_insn, 1, SUF_Z, 0xA5, 0x40, 0, ONLY_64, 0, 0, 0 +movss, movss_insn, 4, SUF_Z, 0, 0, 0, 0, CPU_SSE, 0, 0 +movsw, onebyte_insn, 1, SUF_Z, 0xA5, 0x10, 0, 0, 0, 0, 0 +movsx, movszx_insn, 5, SUF_Z, 0xBE, 0, 0, 0, CPU_386, 0, 0 +movsxd, movsxd_insn, 1, SUF_Z, 0, 0, 0, ONLY_64, 0, 0, 0 +movupd, movau_insn, 6, SUF_Z, 0x66, 0x10, 0x01, 0, CPU_SSE2, 0, 0 +movups, movau_insn, 6, SUF_Z, 0x00, 0x10, 0x01, 0, CPU_SSE, 0, 0 +movzx, movszx_insn, 5, SUF_Z, 0xB6, 0, 0, 0, CPU_386, 0, 0 +mpsadbw, sse4imm_insn, 2, SUF_Z, 0x42, 0, 0, 0, CPU_SSE41, 0, 0 +mul, f6_insn, 4, SUF_Z, 0x04, 0, 0, 0, 0, 0, 0 +mulpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x59, 0, 0, CPU_SSE2, 0, 0 +mulps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x59, 0, 0, CPU_SSE, 0, 0 +mulsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x59, 0, 0, CPU_SSE2, 0, 0 +mulss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x59, 0, 0, CPU_SSE, 0, 0 +mulx, vex_gpr_reg_nds_rm_0F_insn, 2, SUF_Z, 0xF2, 0x38, 0xF6, ONLY_AVX, CPU_BMI2, 0, 0 +mwait, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xC9, 0, CPU_SSE3, 0, 0 +neg, f6_insn, 4, SUF_Z, 0x03, 0, 0, 0, 0, 0, 0 +nop, onebyte_insn, 1, SUF_Z, 0x90, 0, 0, 0, 0, 0, 0 +not, f6_insn, 4, SUF_Z, 0x02, 0, 0, 0, 0, 0, 0 +o16, NULL, X86_OPERSIZE>>8, 0x10, 0, 0, 0, 0, 0, 0, 0 +o32, NULL, X86_OPERSIZE>>8, 0x20, 0, 0, 0, 0, 0, 0, 0 +o64, NULL, X86_OPERSIZE>>8, 0x40, 0, 0, 0, ONLY_64, 0, 0, 0 +or, arith_insn, 22, SUF_Z, 0x08, 0x01, 0, 0, 0, 0, 0 +orpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x56, 0, 0, CPU_SSE2, 0, 0 +orps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x56, 0, 0, CPU_SSE, 0, 0 +out, out_insn, 12, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +outsb, onebyte_insn, 1, SUF_Z, 0x6E, 0x00, 0, 0, 0, 0, 0 +outsd, onebyte_insn, 1, SUF_Z, 0x6F, 0x20, 0, 0, CPU_386, 0, 0 +outsw, onebyte_insn, 1, SUF_Z, 0x6F, 0x10, 0, 0, 0, 0, 0 +pabsb, ssse3_insn, 5, SUF_Z, 0x1C, 0, 0, 0, CPU_SSSE3, 0, 0 +pabsd, ssse3_insn, 5, SUF_Z, 0x1E, 0, 0, 0, CPU_SSSE3, 0, 0 +pabsw, ssse3_insn, 5, SUF_Z, 0x1D, 0, 0, 0, CPU_SSSE3, 0, 0 +packssdw, mmxsse2_insn, 2, SUF_Z, 0x6B, 0, 0, 0, CPU_MMX, 0, 0 +packsswb, mmxsse2_insn, 2, SUF_Z, 0x63, 0, 0, 0, CPU_MMX, 0, 0 +packusdw, sse4_insn, 2, SUF_Z, 0x2B, 0, 0, 0, CPU_SSE41, 0, 0 +packuswb, mmxsse2_insn, 2, SUF_Z, 0x67, 0, 0, 0, CPU_MMX, 0, 0 +paddb, mmxsse2_insn, 2, SUF_Z, 0xFC, 0, 0, 0, CPU_MMX, 0, 0 +paddd, mmxsse2_insn, 2, SUF_Z, 0xFE, 0, 0, 0, CPU_MMX, 0, 0 +paddq, mmxsse2_insn, 2, SUF_Z, 0xD4, 0, 0, 0, CPU_MMX, 0, 0 +paddsb, mmxsse2_insn, 2, SUF_Z, 0xEC, 0, 0, 0, CPU_MMX, 0, 0 +paddsiw, cyrixmmx_insn, 1, SUF_Z, 0x51, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +paddsw, mmxsse2_insn, 2, SUF_Z, 0xED, 0, 0, 0, CPU_MMX, 0, 0 +paddusb, mmxsse2_insn, 2, SUF_Z, 0xDC, 0, 0, 0, CPU_MMX, 0, 0 +paddusw, mmxsse2_insn, 2, SUF_Z, 0xDD, 0, 0, 0, CPU_MMX, 0, 0 +paddw, mmxsse2_insn, 2, SUF_Z, 0xFD, 0, 0, 0, CPU_MMX, 0, 0 +palignr, ssse3imm_insn, 2, SUF_Z, 0x0F, 0, 0, 0, CPU_SSSE3, 0, 0 +pand, mmxsse2_insn, 2, SUF_Z, 0xDB, 0, 0, 0, CPU_MMX, 0, 0 +pandn, mmxsse2_insn, 2, SUF_Z, 0xDF, 0, 0, 0, CPU_MMX, 0, 0 +pause, onebyte_prefix_insn, 1, SUF_Z, 0xF3, 0x90, 0, 0, CPU_P4, 0, 0 +paveb, cyrixmmx_insn, 1, SUF_Z, 0x50, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pavgb, mmxsse2_insn, 2, SUF_Z, 0xE0, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pavgusb, now3d_insn, 1, SUF_Z, 0xBF, 0, 0, 0, CPU_3DNow, 0, 0 +pavgw, mmxsse2_insn, 2, SUF_Z, 0xE3, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pblendvb, sse4xmm0_insn, 2, SUF_Z, 0x10, 0, 0, 0, CPU_SSE41, 0, 0 +pblendw, sse4imm_insn, 2, SUF_Z, 0x0E, 0, 0, 0, CPU_SSE41, 0, 0 +pclmulhqhqdq, pclmulqdq_fixed_insn, 2, SUF_Z, 0x11, 0, 0, 0, CPU_AVX, 0, 0 +pclmulhqlqdq, pclmulqdq_fixed_insn, 2, SUF_Z, 0x01, 0, 0, 0, CPU_AVX, 0, 0 +pclmullqhqdq, pclmulqdq_fixed_insn, 2, SUF_Z, 0x10, 0, 0, 0, CPU_AVX, 0, 0 +pclmullqlqdq, pclmulqdq_fixed_insn, 2, SUF_Z, 0x00, 0, 0, 0, CPU_AVX, 0, 0 +pclmulqdq, pclmulqdq_insn, 2, SUF_Z, 0x3A, 0x44, 0, 0, CPU_AVX, 0, 0 +pcmpeqb, mmxsse2_insn, 2, SUF_Z, 0x74, 0, 0, 0, CPU_MMX, 0, 0 +pcmpeqd, mmxsse2_insn, 2, SUF_Z, 0x76, 0, 0, 0, CPU_MMX, 0, 0 +pcmpeqq, sse4_insn, 2, SUF_Z, 0x29, 0, 0, 0, CPU_SSE41, 0, 0 +pcmpeqw, mmxsse2_insn, 2, SUF_Z, 0x75, 0, 0, 0, CPU_MMX, 0, 0 +pcmpestri, sse4pcmpstr_insn, 1, SUF_Z, 0x61, 0, 0, 0, CPU_SSE42, 0, 0 +pcmpestrm, sse4pcmpstr_insn, 1, SUF_Z, 0x60, 0, 0, 0, CPU_SSE42, 0, 0 +pcmpgtb, mmxsse2_insn, 2, SUF_Z, 0x64, 0, 0, 0, CPU_MMX, 0, 0 +pcmpgtd, mmxsse2_insn, 2, SUF_Z, 0x66, 0, 0, 0, CPU_MMX, 0, 0 +pcmpgtq, sse4_insn, 2, SUF_Z, 0x37, 0, 0, 0, CPU_SSE41, 0, 0 +pcmpgtw, mmxsse2_insn, 2, SUF_Z, 0x65, 0, 0, 0, CPU_MMX, 0, 0 +pcmpistri, sse4pcmpstr_insn, 1, SUF_Z, 0x63, 0, 0, 0, CPU_SSE42, 0, 0 +pcmpistrm, sse4pcmpstr_insn, 1, SUF_Z, 0x62, 0, 0, 0, CPU_SSE42, 0, 0 +pdep, vex_gpr_reg_nds_rm_0F_insn, 2, SUF_Z, 0xF2, 0x38, 0xF5, ONLY_AVX, CPU_BMI2, 0, 0 +pdistib, cyrixmmx_insn, 1, SUF_Z, 0x54, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pext, vex_gpr_reg_nds_rm_0F_insn, 2, SUF_Z, 0xF3, 0x38, 0xF5, ONLY_AVX, CPU_BMI2, 0, 0 +pextrb, pextrb_insn, 3, SUF_Z, 0, 0, 0, 0, CPU_SSE41, 0, 0 +pextrd, pextrd_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_SSE41, 0 +pextrq, pextrq_insn, 1, SUF_Z, 0, 0, 0, ONLY_64, CPU_SSE41, 0, 0 +pextrw, pextrw_insn, 7, SUF_Z, 0, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pf2id, now3d_insn, 1, SUF_Z, 0x1D, 0, 0, 0, CPU_3DNow, 0, 0 +pf2iw, now3d_insn, 1, SUF_Z, 0x1C, 0, 0, 0, CPU_3DNow, CPU_Athlon, 0 +pfacc, now3d_insn, 1, SUF_Z, 0xAE, 0, 0, 0, CPU_3DNow, 0, 0 +pfadd, now3d_insn, 1, SUF_Z, 0x9E, 0, 0, 0, CPU_3DNow, 0, 0 +pfcmpeq, now3d_insn, 1, SUF_Z, 0xB0, 0, 0, 0, CPU_3DNow, 0, 0 +pfcmpge, now3d_insn, 1, SUF_Z, 0x90, 0, 0, 0, CPU_3DNow, 0, 0 +pfcmpgt, now3d_insn, 1, SUF_Z, 0xA0, 0, 0, 0, CPU_3DNow, 0, 0 +pfmax, now3d_insn, 1, SUF_Z, 0xA4, 0, 0, 0, CPU_3DNow, 0, 0 +pfmin, now3d_insn, 1, SUF_Z, 0x94, 0, 0, 0, CPU_3DNow, 0, 0 +pfmul, now3d_insn, 1, SUF_Z, 0xB4, 0, 0, 0, CPU_3DNow, 0, 0 +pfnacc, now3d_insn, 1, SUF_Z, 0x8A, 0, 0, 0, CPU_3DNow, CPU_Athlon, 0 +pfpnacc, now3d_insn, 1, SUF_Z, 0x8E, 0, 0, 0, CPU_3DNow, CPU_Athlon, 0 +pfrcp, now3d_insn, 1, SUF_Z, 0x96, 0, 0, 0, CPU_3DNow, 0, 0 +pfrcpit1, now3d_insn, 1, SUF_Z, 0xA6, 0, 0, 0, CPU_3DNow, 0, 0 +pfrcpit2, now3d_insn, 1, SUF_Z, 0xB6, 0, 0, 0, CPU_3DNow, 0, 0 +pfrsqit1, now3d_insn, 1, SUF_Z, 0xA7, 0, 0, 0, CPU_3DNow, 0, 0 +pfrsqrt, now3d_insn, 1, SUF_Z, 0x97, 0, 0, 0, CPU_3DNow, 0, 0 +pfsub, now3d_insn, 1, SUF_Z, 0x9A, 0, 0, 0, CPU_3DNow, 0, 0 +pfsubr, now3d_insn, 1, SUF_Z, 0xAA, 0, 0, 0, CPU_3DNow, 0, 0 +phaddd, ssse3_insn, 5, SUF_Z, 0x02, 0, 0, 0, CPU_SSSE3, 0, 0 +phaddsw, ssse3_insn, 5, SUF_Z, 0x03, 0, 0, 0, CPU_SSSE3, 0, 0 +phaddw, ssse3_insn, 5, SUF_Z, 0x01, 0, 0, 0, CPU_SSSE3, 0, 0 +phminposuw, sse4_insn, 2, SUF_Z, 0x41, 0, 0, 0, CPU_SSE41, 0, 0 +phsubd, ssse3_insn, 5, SUF_Z, 0x06, 0, 0, 0, CPU_SSSE3, 0, 0 +phsubsw, ssse3_insn, 5, SUF_Z, 0x07, 0, 0, 0, CPU_SSSE3, 0, 0 +phsubw, ssse3_insn, 5, SUF_Z, 0x05, 0, 0, 0, CPU_SSSE3, 0, 0 +pi2fd, now3d_insn, 1, SUF_Z, 0x0D, 0, 0, 0, CPU_3DNow, 0, 0 +pi2fw, now3d_insn, 1, SUF_Z, 0x0C, 0, 0, 0, CPU_3DNow, CPU_Athlon, 0 +pinsrb, pinsrb_insn, 4, SUF_Z, 0, 0, 0, 0, CPU_SSE41, 0, 0 +pinsrd, pinsrd_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_SSE41, 0 +pinsrq, pinsrq_insn, 2, SUF_Z, 0, 0, 0, ONLY_64, CPU_SSE41, 0, 0 +pinsrw, pinsrw_insn, 9, SUF_Z, 0, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pmachriw, pmachriw_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pmaddubsw, ssse3_insn, 5, SUF_Z, 0x04, 0, 0, 0, CPU_SSSE3, 0, 0 +pmaddwd, mmxsse2_insn, 2, SUF_Z, 0xF5, 0, 0, 0, CPU_MMX, 0, 0 +pmagw, cyrixmmx_insn, 1, SUF_Z, 0x52, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pmaxsb, sse4_insn, 2, SUF_Z, 0x3C, 0, 0, 0, CPU_SSE41, 0, 0 +pmaxsd, sse4_insn, 2, SUF_Z, 0x3D, 0, 0, 0, CPU_SSE41, 0, 0 +pmaxsw, mmxsse2_insn, 2, SUF_Z, 0xEE, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pmaxub, mmxsse2_insn, 2, SUF_Z, 0xDE, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pmaxud, sse4_insn, 2, SUF_Z, 0x3F, 0, 0, 0, CPU_SSE41, 0, 0 +pmaxuw, sse4_insn, 2, SUF_Z, 0x3E, 0, 0, 0, CPU_SSE41, 0, 0 +pminsb, sse4_insn, 2, SUF_Z, 0x38, 0, 0, 0, CPU_SSE41, 0, 0 +pminsd, sse4_insn, 2, SUF_Z, 0x39, 0, 0, 0, CPU_SSE41, 0, 0 +pminsw, mmxsse2_insn, 2, SUF_Z, 0xEA, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pminub, mmxsse2_insn, 2, SUF_Z, 0xDA, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pminud, sse4_insn, 2, SUF_Z, 0x3B, 0, 0, 0, CPU_SSE41, 0, 0 +pminuw, sse4_insn, 2, SUF_Z, 0x3A, 0, 0, 0, CPU_SSE41, 0, 0 +pmovmskb, pmovmskb_insn, 6, SUF_Z, 0, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pmovsxbd, sse4m32_insn, 4, SUF_Z, 0x21, 0, 0, 0, CPU_SSE41, 0, 0 +pmovsxbq, sse4m16_insn, 4, SUF_Z, 0x22, 0, 0, 0, CPU_SSE41, 0, 0 +pmovsxbw, sse4m64_insn, 4, SUF_Z, 0x20, 0, 0, 0, CPU_SSE41, 0, 0 +pmovsxdq, sse4m64_insn, 4, SUF_Z, 0x25, 0, 0, 0, CPU_SSE41, 0, 0 +pmovsxwd, sse4m64_insn, 4, SUF_Z, 0x23, 0, 0, 0, CPU_SSE41, 0, 0 +pmovsxwq, sse4m32_insn, 4, SUF_Z, 0x24, 0, 0, 0, CPU_SSE41, 0, 0 +pmovzxbd, sse4m32_insn, 4, SUF_Z, 0x31, 0, 0, 0, CPU_SSE41, 0, 0 +pmovzxbq, sse4m16_insn, 4, SUF_Z, 0x32, 0, 0, 0, CPU_SSE41, 0, 0 +pmovzxbw, sse4m64_insn, 4, SUF_Z, 0x30, 0, 0, 0, CPU_SSE41, 0, 0 +pmovzxdq, sse4m64_insn, 4, SUF_Z, 0x35, 0, 0, 0, CPU_SSE41, 0, 0 +pmovzxwd, sse4m64_insn, 4, SUF_Z, 0x33, 0, 0, 0, CPU_SSE41, 0, 0 +pmovzxwq, sse4m32_insn, 4, SUF_Z, 0x34, 0, 0, 0, CPU_SSE41, 0, 0 +pmuldq, sse4_insn, 2, SUF_Z, 0x28, 0, 0, 0, CPU_SSE41, 0, 0 +pmulhriw, cyrixmmx_insn, 1, SUF_Z, 0x5D, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pmulhrsw, ssse3_insn, 5, SUF_Z, 0x0B, 0, 0, 0, CPU_SSSE3, 0, 0 +pmulhrw, now3d_insn, 1, SUF_Z, 0xB7, 0, 0, 0, CPU_3DNow, 0, 0 +pmulhrwc, cyrixmmx_insn, 1, SUF_Z, 0x59, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pmulhuw, mmxsse2_insn, 2, SUF_Z, 0xE4, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pmulhw, mmxsse2_insn, 2, SUF_Z, 0xE5, 0, 0, 0, CPU_MMX, 0, 0 +pmulld, sse4_insn, 2, SUF_Z, 0x40, 0, 0, 0, CPU_SSE41, 0, 0 +pmullw, mmxsse2_insn, 2, SUF_Z, 0xD5, 0, 0, 0, CPU_MMX, 0, 0 +pmuludq, mmxsse2_insn, 2, SUF_Z, 0xF4, 0, 0, 0, CPU_SSE2, 0, 0 +pmvgezb, cyrixmmx_insn, 1, SUF_Z, 0x5C, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pmvlzb, cyrixmmx_insn, 1, SUF_Z, 0x5B, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pmvnzb, cyrixmmx_insn, 1, SUF_Z, 0x5A, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pmvzb, cyrixmmx_insn, 1, SUF_Z, 0x58, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +pop, pop_insn, 23, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +popa, onebyte_insn, 1, SUF_Z, 0x61, 0x00, 0, NOT_64, CPU_186, 0, 0 +popad, onebyte_insn, 1, SUF_Z, 0x61, 0x20, 0, NOT_64, CPU_386, 0, 0 +popaw, onebyte_insn, 1, SUF_Z, 0x61, 0x10, 0, NOT_64, CPU_186, 0, 0 +popcnt, cnt_insn, 3, SUF_Z, 0xB8, 0, 0, 0, CPU_SSE42, 0, 0 +popf, onebyte_insn, 1, SUF_Z, 0x9D, 0x00, 0x40, 0, 0, 0, 0 +popfd, onebyte_insn, 1, SUF_Z, 0x9D, 0x20, 0, NOT_64, CPU_386, 0, 0 +popfq, onebyte_insn, 1, SUF_Z, 0x9D, 0x40, 0x40, ONLY_64, 0, 0, 0 +popfw, onebyte_insn, 1, SUF_Z, 0x9D, 0x10, 0x40, 0, 0, 0, 0 +por, mmxsse2_insn, 2, SUF_Z, 0xEB, 0, 0, 0, CPU_MMX, 0, 0 +prefetch, twobytemem_insn, 1, SUF_Z, 0x00, 0x0F, 0x0D, 0, CPU_3DNow, 0, 0 +prefetchnta, twobytemem_insn, 1, SUF_Z, 0x00, 0x0F, 0x18, 0, CPU_P3, 0, 0 +prefetcht0, twobytemem_insn, 1, SUF_Z, 0x01, 0x0F, 0x18, 0, CPU_P3, 0, 0 +prefetcht1, twobytemem_insn, 1, SUF_Z, 0x02, 0x0F, 0x18, 0, CPU_P3, 0, 0 +prefetcht2, twobytemem_insn, 1, SUF_Z, 0x03, 0x0F, 0x18, 0, CPU_P3, 0, 0 +prefetchw, twobytemem_insn, 1, SUF_Z, 0x01, 0x0F, 0x0D, 0, CPU_PRFCHW, 0, 0 +psadbw, mmxsse2_insn, 2, SUF_Z, 0xF6, 0, 0, 0, CPU_MMX, CPU_P3, 0 +pshufb, ssse3_insn, 5, SUF_Z, 0x00, 0, 0, 0, CPU_SSSE3, 0, 0 +pshufd, xmm_xmm128_imm_insn, 1, SUF_Z, 0x66, 0x70, 0, 0, CPU_SSE2, 0, 0 +pshufhw, xmm_xmm128_imm_insn, 1, SUF_Z, 0xF3, 0x70, 0, 0, CPU_SSE2, 0, 0 +pshuflw, xmm_xmm128_imm_insn, 1, SUF_Z, 0xF2, 0x70, 0, 0, CPU_SSE2, 0, 0 +pshufw, pshufw_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_MMX, CPU_P3, 0 +psignb, ssse3_insn, 5, SUF_Z, 0x08, 0, 0, 0, CPU_SSSE3, 0, 0 +psignd, ssse3_insn, 5, SUF_Z, 0x0A, 0, 0, 0, CPU_SSSE3, 0, 0 +psignw, ssse3_insn, 5, SUF_Z, 0x09, 0, 0, 0, CPU_SSSE3, 0, 0 +pslld, pshift_insn, 4, SUF_Z, 0xF2, 0x72, 0x06, 0, CPU_MMX, 0, 0 +pslldq, pslrldq_insn, 4, SUF_Z, 0x07, 0, 0, 0, CPU_SSE2, 0, 0 +psllq, pshift_insn, 4, SUF_Z, 0xF3, 0x73, 0x06, 0, CPU_MMX, 0, 0 +psllw, pshift_insn, 4, SUF_Z, 0xF1, 0x71, 0x06, 0, CPU_MMX, 0, 0 +psrad, pshift_insn, 4, SUF_Z, 0xE2, 0x72, 0x04, 0, CPU_MMX, 0, 0 +psraw, pshift_insn, 4, SUF_Z, 0xE1, 0x71, 0x04, 0, CPU_MMX, 0, 0 +psrld, pshift_insn, 4, SUF_Z, 0xD2, 0x72, 0x02, 0, CPU_MMX, 0, 0 +psrldq, pslrldq_insn, 4, SUF_Z, 0x03, 0, 0, 0, CPU_SSE2, 0, 0 +psrlq, pshift_insn, 4, SUF_Z, 0xD3, 0x73, 0x02, 0, CPU_MMX, 0, 0 +psrlw, pshift_insn, 4, SUF_Z, 0xD1, 0x71, 0x02, 0, CPU_MMX, 0, 0 +psubb, mmxsse2_insn, 2, SUF_Z, 0xF8, 0, 0, 0, CPU_MMX, 0, 0 +psubd, mmxsse2_insn, 2, SUF_Z, 0xFA, 0, 0, 0, CPU_MMX, 0, 0 +psubq, mmxsse2_insn, 2, SUF_Z, 0xFB, 0, 0, 0, CPU_MMX, 0, 0 +psubsb, mmxsse2_insn, 2, SUF_Z, 0xE8, 0, 0, 0, CPU_MMX, 0, 0 +psubsiw, cyrixmmx_insn, 1, SUF_Z, 0x55, 0, 0, 0, CPU_Cyrix, CPU_MMX, 0 +psubsw, mmxsse2_insn, 2, SUF_Z, 0xE9, 0, 0, 0, CPU_MMX, 0, 0 +psubusb, mmxsse2_insn, 2, SUF_Z, 0xD8, 0, 0, 0, CPU_MMX, 0, 0 +psubusw, mmxsse2_insn, 2, SUF_Z, 0xD9, 0, 0, 0, CPU_MMX, 0, 0 +psubw, mmxsse2_insn, 2, SUF_Z, 0xF9, 0, 0, 0, CPU_MMX, 0, 0 +pswapd, now3d_insn, 1, SUF_Z, 0xBB, 0, 0, 0, CPU_3DNow, CPU_Athlon, 0 +ptest, sse4_insn, 2, SUF_Z, 0x17, 0, 0, 0, CPU_SSE41, 0, 0 +punpckhbw, mmxsse2_insn, 2, SUF_Z, 0x68, 0, 0, 0, CPU_MMX, 0, 0 +punpckhdq, mmxsse2_insn, 2, SUF_Z, 0x6A, 0, 0, 0, CPU_MMX, 0, 0 +punpckhqdq, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x6D, 0, 0, CPU_SSE2, 0, 0 +punpckhwd, mmxsse2_insn, 2, SUF_Z, 0x69, 0, 0, 0, CPU_MMX, 0, 0 +punpcklbw, mmxsse2_insn, 2, SUF_Z, 0x60, 0, 0, 0, CPU_MMX, 0, 0 +punpckldq, mmxsse2_insn, 2, SUF_Z, 0x62, 0, 0, 0, CPU_MMX, 0, 0 +punpcklqdq, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x6C, 0, 0, CPU_SSE2, 0, 0 +punpcklwd, mmxsse2_insn, 2, SUF_Z, 0x61, 0, 0, 0, CPU_MMX, 0, 0 +push, push_insn, 35, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +pusha, onebyte_insn, 1, SUF_Z, 0x60, 0x00, 0, NOT_64, CPU_186, 0, 0 +pushad, onebyte_insn, 1, SUF_Z, 0x60, 0x20, 0, NOT_64, CPU_386, 0, 0 +pushaw, onebyte_insn, 1, SUF_Z, 0x60, 0x10, 0, NOT_64, CPU_186, 0, 0 +pushf, onebyte_insn, 1, SUF_Z, 0x9C, 0x00, 0x40, 0, 0, 0, 0 +pushfd, onebyte_insn, 1, SUF_Z, 0x9C, 0x20, 0, NOT_64, CPU_386, 0, 0 +pushfq, onebyte_insn, 1, SUF_Z, 0x9C, 0x40, 0x40, ONLY_64, 0, 0, 0 +pushfw, onebyte_insn, 1, SUF_Z, 0x9C, 0x10, 0x40, 0, 0, 0, 0 +pxor, mmxsse2_insn, 2, SUF_Z, 0xEF, 0, 0, 0, CPU_MMX, 0, 0 +rcl, shift_insn, 16, SUF_Z, 0x02, 0, 0, 0, 0, 0, 0 +rcpps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x53, 0, 0, CPU_SSE, 0, 0 +rcpss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x53, 0, 0, CPU_SSE, 0, 0 +rcr, shift_insn, 16, SUF_Z, 0x03, 0, 0, 0, 0, 0, 0 +rdfsbase, fs_gs_base_insn, 2, SUF_Z, 0x00, 0, 0, ONLY_64, CPU_FSGSBASE, 0, 0 +rdgsbase, fs_gs_base_insn, 2, SUF_Z, 0x01, 0, 0, ONLY_64, CPU_FSGSBASE, 0, 0 +rdmsr, twobyte_insn, 1, SUF_Z, 0x0F, 0x32, 0, 0, CPU_586, CPU_Priv, 0 +rdpmc, twobyte_insn, 1, SUF_Z, 0x0F, 0x33, 0, 0, CPU_686, 0, 0 +rdrand, rdrand_insn, 3, SUF_Z, 0x06, 0, 0, 0, CPU_RDRAND, 0, 0 +rdseed, rdrand_insn, 3, SUF_Z, 0x07, 0, 0, 0, CPU_RDSEED, 0, 0 +rdshr, rdwrshr_insn, 1, SUF_Z, 0x00, 0, 0, 0, CPU_686, CPU_Cyrix, CPU_SMM +rdtsc, twobyte_insn, 1, SUF_Z, 0x0F, 0x31, 0, 0, CPU_586, 0, 0 +rdtscp, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xF9, 0, CPU_686, CPU_AMD, CPU_Priv +rep, NULL, X86_LOCKREP>>8, 0xF3, 0, 0, 0, 0, 0, 0, 0 +repe, NULL, X86_LOCKREP>>8, 0xF3, 0, 0, 0, 0, 0, 0, 0 +repne, NULL, X86_LOCKREP>>8, 0xF2, 0, 0, 0, 0, 0, 0, 0 +repnz, NULL, X86_LOCKREP>>8, 0xF2, 0, 0, 0, 0, 0, 0, 0 +repz, NULL, X86_LOCKREP>>8, 0xF3, 0, 0, 0, 0, 0, 0, 0 +ret, retnf_insn, 6, SUF_Z, 0xC2, 0, 0, 0, 0, 0, 0 +retf, retnf_insn, 6, SUF_Z, 0xCA, 0x40, 0, 0, 0, 0, 0 +retn, retnf_insn, 6, SUF_Z, 0xC2, 0, 0, 0, 0, 0, 0 +rol, shift_insn, 16, SUF_Z, 0x00, 0, 0, 0, 0, 0, 0 +ror, shift_insn, 16, SUF_Z, 0x01, 0, 0, 0, 0, 0, 0 +rorx, vex_gpr_reg_rm_0F_imm8_insn, 2, SUF_Z, 0xF2, 0x3A, 0xF0, ONLY_AVX, CPU_BMI2, 0, 0 +roundpd, sse4imm_insn, 2, SUF_Z, 0x09, 0, 0, 0, CPU_SSE41, 0, 0 +roundps, sse4imm_insn, 2, SUF_Z, 0x08, 0, 0, 0, CPU_SSE41, 0, 0 +roundsd, sse4m64imm_insn, 4, SUF_Z, 0x0B, 0, 0, 0, CPU_SSE41, 0, 0 +roundss, sse4m32imm_insn, 4, SUF_Z, 0x0A, 0, 0, 0, CPU_SSE41, 0, 0 +rsdc, rsdc_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_486, CPU_Cyrix, CPU_SMM +rsldt, cyrixsmm_insn, 1, SUF_Z, 0x7B, 0, 0, 0, CPU_486, CPU_Cyrix, CPU_SMM +rsm, twobyte_insn, 1, SUF_Z, 0x0F, 0xAA, 0, 0, CPU_586, CPU_SMM, 0 +rsqrtps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x52, 0, 0, CPU_SSE, 0, 0 +rsqrtss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x52, 0, 0, CPU_SSE, 0, 0 +rsts, cyrixsmm_insn, 1, SUF_Z, 0x7D, 0, 0, 0, CPU_486, CPU_Cyrix, CPU_SMM +sahf, onebyte_insn, 1, SUF_Z, 0x9E, 0, 0, 0, 0, 0, 0 +sal, shift_insn, 16, SUF_Z, 0x04, 0, 0, 0, 0, 0, 0 +salc, onebyte_insn, 1, SUF_Z, 0xD6, 0, 0, NOT_64, CPU_Undoc, 0, 0 +sar, shift_insn, 16, SUF_Z, 0x07, 0, 0, 0, 0, 0, 0 +sarx, vex_gpr_reg_rm_nds_0F_insn, 2, SUF_Z, 0xF3, 0x38, 0xF7, ONLY_AVX, CPU_BMI2, 0, 0 +sbb, arith_insn, 22, SUF_Z, 0x18, 0x03, 0, 0, 0, 0, 0 +scasb, onebyte_insn, 1, SUF_Z, 0xAE, 0x00, 0, 0, 0, 0, 0 +scasd, onebyte_insn, 1, SUF_Z, 0xAF, 0x20, 0, 0, CPU_386, 0, 0 +scasq, onebyte_insn, 1, SUF_Z, 0xAF, 0x40, 0, ONLY_64, 0, 0, 0 +scasw, onebyte_insn, 1, SUF_Z, 0xAF, 0x10, 0, 0, 0, 0, 0 +seta, setcc_insn, 1, SUF_Z, 0x07, 0, 0, 0, CPU_386, 0, 0 +setae, setcc_insn, 1, SUF_Z, 0x03, 0, 0, 0, CPU_386, 0, 0 +setb, setcc_insn, 1, SUF_Z, 0x02, 0, 0, 0, CPU_386, 0, 0 +setbe, setcc_insn, 1, SUF_Z, 0x06, 0, 0, 0, CPU_386, 0, 0 +setc, setcc_insn, 1, SUF_Z, 0x02, 0, 0, 0, CPU_386, 0, 0 +sete, setcc_insn, 1, SUF_Z, 0x04, 0, 0, 0, CPU_386, 0, 0 +setg, setcc_insn, 1, SUF_Z, 0x0F, 0, 0, 0, CPU_386, 0, 0 +setge, setcc_insn, 1, SUF_Z, 0x0D, 0, 0, 0, CPU_386, 0, 0 +setl, setcc_insn, 1, SUF_Z, 0x0C, 0, 0, 0, CPU_386, 0, 0 +setle, setcc_insn, 1, SUF_Z, 0x0E, 0, 0, 0, CPU_386, 0, 0 +setna, setcc_insn, 1, SUF_Z, 0x06, 0, 0, 0, CPU_386, 0, 0 +setnae, setcc_insn, 1, SUF_Z, 0x02, 0, 0, 0, CPU_386, 0, 0 +setnb, setcc_insn, 1, SUF_Z, 0x03, 0, 0, 0, CPU_386, 0, 0 +setnbe, setcc_insn, 1, SUF_Z, 0x07, 0, 0, 0, CPU_386, 0, 0 +setnc, setcc_insn, 1, SUF_Z, 0x03, 0, 0, 0, CPU_386, 0, 0 +setne, setcc_insn, 1, SUF_Z, 0x05, 0, 0, 0, CPU_386, 0, 0 +setng, setcc_insn, 1, SUF_Z, 0x0E, 0, 0, 0, CPU_386, 0, 0 +setnge, setcc_insn, 1, SUF_Z, 0x0C, 0, 0, 0, CPU_386, 0, 0 +setnl, setcc_insn, 1, SUF_Z, 0x0D, 0, 0, 0, CPU_386, 0, 0 +setnle, setcc_insn, 1, SUF_Z, 0x0F, 0, 0, 0, CPU_386, 0, 0 +setno, setcc_insn, 1, SUF_Z, 0x01, 0, 0, 0, CPU_386, 0, 0 +setnp, setcc_insn, 1, SUF_Z, 0x0B, 0, 0, 0, CPU_386, 0, 0 +setns, setcc_insn, 1, SUF_Z, 0x09, 0, 0, 0, CPU_386, 0, 0 +setnz, setcc_insn, 1, SUF_Z, 0x05, 0, 0, 0, CPU_386, 0, 0 +seto, setcc_insn, 1, SUF_Z, 0x00, 0, 0, 0, CPU_386, 0, 0 +setp, setcc_insn, 1, SUF_Z, 0x0A, 0, 0, 0, CPU_386, 0, 0 +setpe, setcc_insn, 1, SUF_Z, 0x0A, 0, 0, 0, CPU_386, 0, 0 +setpo, setcc_insn, 1, SUF_Z, 0x0B, 0, 0, 0, CPU_386, 0, 0 +sets, setcc_insn, 1, SUF_Z, 0x08, 0, 0, 0, CPU_386, 0, 0 +setz, setcc_insn, 1, SUF_Z, 0x04, 0, 0, 0, CPU_386, 0, 0 +sfence, threebyte_insn, 1, SUF_Z, 0x0F, 0xAE, 0xF8, 0, CPU_P3, 0, 0 +sgdt, twobytemem_insn, 1, SUF_Z, 0x00, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +shl, shift_insn, 16, SUF_Z, 0x04, 0, 0, 0, 0, 0, 0 +shld, shlrd_insn, 9, SUF_Z, 0xA4, 0, 0, 0, CPU_386, 0, 0 +shlx, vex_gpr_reg_rm_nds_0F_insn, 2, SUF_Z, 0x66, 0x38, 0xF7, ONLY_AVX, CPU_BMI2, 0, 0 +shr, shift_insn, 16, SUF_Z, 0x05, 0, 0, 0, 0, 0, 0 +shrd, shlrd_insn, 9, SUF_Z, 0xAC, 0, 0, 0, CPU_386, 0, 0 +shrx, vex_gpr_reg_rm_nds_0F_insn, 2, SUF_Z, 0xF2, 0x38, 0xF7, ONLY_AVX, CPU_BMI2, 0, 0 +shufpd, xmm_xmm128_imm_insn, 1, SUF_Z, 0x66, 0xC6, 0, 0, CPU_SSE2, 0, 0 +shufps, xmm_xmm128_imm_insn, 1, SUF_Z, 0x00, 0xC6, 0, 0, CPU_SSE, 0, 0 +sidt, twobytemem_insn, 1, SUF_Z, 0x01, 0x0F, 0x01, 0, CPU_286, CPU_Priv, 0 +skinit, skinit_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_SVM, 0, 0 +sldt, sldtmsw_insn, 6, SUF_Z, 0x00, 0x00, 0, 0, CPU_286, 0, 0 +smi, onebyte_insn, 1, SUF_Z, 0xF1, 0, 0, 0, CPU_386, CPU_Undoc, 0 +smint, twobyte_insn, 1, SUF_Z, 0x0F, 0x38, 0, 0, CPU_686, CPU_Cyrix, 0 +smintold, twobyte_insn, 1, SUF_Z, 0x0F, 0x7E, 0, 0, CPU_486, CPU_Cyrix, CPU_Obs +smsw, sldtmsw_insn, 6, SUF_Z, 0x04, 0x01, 0, 0, CPU_286, 0, 0 +sqrtpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x51, 0, 0, CPU_SSE2, 0, 0 +sqrtps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x51, 0, 0, CPU_SSE, 0, 0 +sqrtsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x51, 0, 0, CPU_SSE2, 0, 0 +sqrtss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x51, 0, 0, CPU_SSE, 0, 0 +stac, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xCB, 0, CPU_SMAP, 0, 0 +stc, onebyte_insn, 1, SUF_Z, 0xF9, 0, 0, 0, 0, 0, 0 +std, onebyte_insn, 1, SUF_Z, 0xFD, 0, 0, 0, 0, 0, 0 +stgi, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xDC, 0, CPU_SVM, 0, 0 +sti, onebyte_insn, 1, SUF_Z, 0xFB, 0, 0, 0, 0, 0, 0 +stmxcsr, ldstmxcsr_insn, 1, SUF_Z, 0x03, 0, 0, 0, CPU_SSE, 0, 0 +stosb, onebyte_insn, 1, SUF_Z, 0xAA, 0x00, 0, 0, 0, 0, 0 +stosd, onebyte_insn, 1, SUF_Z, 0xAB, 0x20, 0, 0, CPU_386, 0, 0 +stosq, onebyte_insn, 1, SUF_Z, 0xAB, 0x40, 0, ONLY_64, 0, 0, 0 +stosw, onebyte_insn, 1, SUF_Z, 0xAB, 0x10, 0, 0, 0, 0, 0 +str, str_insn, 4, SUF_Z, 0, 0, 0, 0, CPU_286, CPU_Prot, 0 +sub, arith_insn, 22, SUF_Z, 0x28, 0x05, 0, 0, 0, 0, 0 +subpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x5C, 0, 0, CPU_SSE2, 0, 0 +subps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x5C, 0, 0, CPU_SSE, 0, 0 +subsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5C, 0, 0, CPU_SSE2, 0, 0 +subss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5C, 0, 0, CPU_SSE, 0, 0 +svdc, svdc_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_486, CPU_Cyrix, CPU_SMM +svldt, cyrixsmm_insn, 1, SUF_Z, 0x7A, 0, 0, 0, CPU_486, CPU_Cyrix, CPU_SMM +svts, cyrixsmm_insn, 1, SUF_Z, 0x7C, 0, 0, 0, CPU_486, CPU_Cyrix, CPU_SMM +swapgs, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xF8, ONLY_64, 0, 0, 0 +syscall, twobyte_insn, 1, SUF_Z, 0x0F, 0x05, 0, 0, CPU_686, CPU_AMD, 0 +sysenter, twobyte_insn, 1, SUF_Z, 0x0F, 0x34, 0, NOT_64, CPU_686, 0, 0 +sysexit, twobyte_insn, 1, SUF_Z, 0x0F, 0x35, 0, NOT_64, CPU_686, CPU_Priv, 0 +sysret, twobyte_insn, 1, SUF_Z, 0x0F, 0x07, 0, 0, CPU_686, CPU_AMD, CPU_Priv +t1mskc, xop_gpr_reg_rm_09_insn, 2, SUF_Z, 0x01, 0x07, 0, 0, CPU_386, CPU_TBM, 0 +test, test_insn, 20, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +tzcnt, cnt_insn, 3, SUF_Z, 0xBC, 0, 0, 0, CPU_BMI1, 0, 0 +tzmsk, xop_gpr_reg_rm_09_insn, 2, SUF_Z, 0x01, 0x04, 0, 0, CPU_386, CPU_TBM, 0 +ucomisd, xmm_xmm64_insn, 4, SUF_Z, 0x66, 0x2E, 0, 0, CPU_SSE2, 0, 0 +ucomiss, xmm_xmm32_insn, 4, SUF_Z, 0x00, 0x2E, 0, 0, CPU_SSE, 0, 0 +ud1, twobyte_insn, 1, SUF_Z, 0x0F, 0xB9, 0, 0, CPU_286, CPU_Undoc, 0 +ud2, twobyte_insn, 1, SUF_Z, 0x0F, 0x0B, 0, 0, CPU_286, 0, 0 +umov, umov_insn, 6, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_Undoc, 0 +unpckhpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x15, 0, 0, CPU_SSE2, 0, 0 +unpckhps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x15, 0, 0, CPU_SSE, 0, 0 +unpcklpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x14, 0, 0, CPU_SSE2, 0, 0 +unpcklps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x14, 0, 0, CPU_SSE, 0, 0 +vaddpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x58, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaddps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x58, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaddsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x58, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaddss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x58, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaddsubpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0xD0, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaddsubps, xmm_xmm128_256_insn, 4, SUF_Z, 0xF2, 0xD0, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaesdec, aes_insn, 2, SUF_Z, 0x38, 0xDE, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaesdeclast, aes_insn, 2, SUF_Z, 0x38, 0xDF, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaesenc, aes_insn, 2, SUF_Z, 0x38, 0xDC, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaesenclast, aes_insn, 2, SUF_Z, 0x38, 0xDD, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaesimc, aesimc_insn, 1, SUF_Z, 0x38, 0xDB, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vaeskeygenassist, aes_imm_insn, 1, SUF_Z, 0x3A, 0xDF, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vandnpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x55, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vandnps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x55, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vandpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x54, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vandps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x54, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vblendpd, sse4imm_256_insn, 4, SUF_Z, 0x0D, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vblendps, sse4imm_256_insn, 4, SUF_Z, 0x0C, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vblendvpd, avx_sse4xmm0_insn, 2, SUF_Z, 0x4B, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vblendvps, avx_sse4xmm0_insn, 2, SUF_Z, 0x4A, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vbroadcastf128, vbroadcastif128_insn, 1, SUF_Z, 0x1A, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vbroadcasti128, vbroadcastif128_insn, 1, SUF_Z, 0x5A, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vbroadcastsd, vbroadcastsd_insn, 2, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vbroadcastss, vbroadcastss_insn, 4, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_ospd, ssecmp_128_insn, 3, SUF_Z, 0x10, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_osps, ssecmp_128_insn, 3, SUF_Z, 0x10, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_ossd, ssecmp_64_insn, 4, SUF_Z, 0x10, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_osss, ssecmp_32_insn, 4, SUF_Z, 0x10, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_uqpd, ssecmp_128_insn, 3, SUF_Z, 0x08, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_uqps, ssecmp_128_insn, 3, SUF_Z, 0x08, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_uqsd, ssecmp_64_insn, 4, SUF_Z, 0x08, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_uqss, ssecmp_32_insn, 4, SUF_Z, 0x08, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_uspd, ssecmp_128_insn, 3, SUF_Z, 0x18, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_usps, ssecmp_128_insn, 3, SUF_Z, 0x18, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_ussd, ssecmp_64_insn, 4, SUF_Z, 0x18, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeq_usss, ssecmp_32_insn, 4, SUF_Z, 0x18, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeqpd, ssecmp_128_insn, 3, SUF_Z, 0x00, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeqps, ssecmp_128_insn, 3, SUF_Z, 0x00, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeqsd, ssecmp_64_insn, 4, SUF_Z, 0x00, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpeqss, ssecmp_32_insn, 4, SUF_Z, 0x00, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpfalse_ospd, ssecmp_128_insn, 3, SUF_Z, 0x1B, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpfalse_osps, ssecmp_128_insn, 3, SUF_Z, 0x1B, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpfalse_ossd, ssecmp_64_insn, 4, SUF_Z, 0x1B, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpfalse_osss, ssecmp_32_insn, 4, SUF_Z, 0x1B, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpfalsepd, ssecmp_128_insn, 3, SUF_Z, 0x0B, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpfalseps, ssecmp_128_insn, 3, SUF_Z, 0x0B, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpfalsesd, ssecmp_64_insn, 4, SUF_Z, 0x0B, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpfalsess, ssecmp_32_insn, 4, SUF_Z, 0x0B, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpge_oqpd, ssecmp_128_insn, 3, SUF_Z, 0x1D, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpge_oqps, ssecmp_128_insn, 3, SUF_Z, 0x1D, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpge_oqsd, ssecmp_64_insn, 4, SUF_Z, 0x1D, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpge_oqss, ssecmp_32_insn, 4, SUF_Z, 0x1D, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgepd, ssecmp_128_insn, 3, SUF_Z, 0x0D, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgeps, ssecmp_128_insn, 3, SUF_Z, 0x0D, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgesd, ssecmp_64_insn, 4, SUF_Z, 0x0D, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgess, ssecmp_32_insn, 4, SUF_Z, 0x0D, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgt_oqpd, ssecmp_128_insn, 3, SUF_Z, 0x1E, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgt_oqps, ssecmp_128_insn, 3, SUF_Z, 0x1E, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgt_oqsd, ssecmp_64_insn, 4, SUF_Z, 0x1E, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgt_oqss, ssecmp_32_insn, 4, SUF_Z, 0x1E, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgtpd, ssecmp_128_insn, 3, SUF_Z, 0x0E, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgtps, ssecmp_128_insn, 3, SUF_Z, 0x0E, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgtsd, ssecmp_64_insn, 4, SUF_Z, 0x0E, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpgtss, ssecmp_32_insn, 4, SUF_Z, 0x0E, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmple_oqpd, ssecmp_128_insn, 3, SUF_Z, 0x12, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmple_oqps, ssecmp_128_insn, 3, SUF_Z, 0x12, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmple_oqsd, ssecmp_64_insn, 4, SUF_Z, 0x12, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmple_oqss, ssecmp_32_insn, 4, SUF_Z, 0x12, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmplepd, ssecmp_128_insn, 3, SUF_Z, 0x02, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpleps, ssecmp_128_insn, 3, SUF_Z, 0x02, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmplesd, ssecmp_64_insn, 4, SUF_Z, 0x02, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpless, ssecmp_32_insn, 4, SUF_Z, 0x02, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmplt_oqpd, ssecmp_128_insn, 3, SUF_Z, 0x11, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmplt_oqps, ssecmp_128_insn, 3, SUF_Z, 0x11, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmplt_oqsd, ssecmp_64_insn, 4, SUF_Z, 0x11, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmplt_oqss, ssecmp_32_insn, 4, SUF_Z, 0x11, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpltpd, ssecmp_128_insn, 3, SUF_Z, 0x01, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpltps, ssecmp_128_insn, 3, SUF_Z, 0x01, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpltsd, ssecmp_64_insn, 4, SUF_Z, 0x01, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpltss, ssecmp_32_insn, 4, SUF_Z, 0x01, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_oqpd, ssecmp_128_insn, 3, SUF_Z, 0x0C, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_oqps, ssecmp_128_insn, 3, SUF_Z, 0x0C, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_oqsd, ssecmp_64_insn, 4, SUF_Z, 0x0C, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_oqss, ssecmp_32_insn, 4, SUF_Z, 0x0C, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_ospd, ssecmp_128_insn, 3, SUF_Z, 0x1C, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_osps, ssecmp_128_insn, 3, SUF_Z, 0x1C, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_ossd, ssecmp_64_insn, 4, SUF_Z, 0x1C, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_osss, ssecmp_32_insn, 4, SUF_Z, 0x1C, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_uspd, ssecmp_128_insn, 3, SUF_Z, 0x14, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_usps, ssecmp_128_insn, 3, SUF_Z, 0x14, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_ussd, ssecmp_64_insn, 4, SUF_Z, 0x14, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneq_usss, ssecmp_32_insn, 4, SUF_Z, 0x14, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneqpd, ssecmp_128_insn, 3, SUF_Z, 0x04, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneqps, ssecmp_128_insn, 3, SUF_Z, 0x04, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneqsd, ssecmp_64_insn, 4, SUF_Z, 0x04, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpneqss, ssecmp_32_insn, 4, SUF_Z, 0x04, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnge_uqpd, ssecmp_128_insn, 3, SUF_Z, 0x19, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnge_uqps, ssecmp_128_insn, 3, SUF_Z, 0x19, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnge_uqsd, ssecmp_64_insn, 4, SUF_Z, 0x19, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnge_uqss, ssecmp_32_insn, 4, SUF_Z, 0x19, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngepd, ssecmp_128_insn, 3, SUF_Z, 0x09, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngeps, ssecmp_128_insn, 3, SUF_Z, 0x09, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngesd, ssecmp_64_insn, 4, SUF_Z, 0x09, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngess, ssecmp_32_insn, 4, SUF_Z, 0x09, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngt_uqpd, ssecmp_128_insn, 3, SUF_Z, 0x1A, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngt_uqps, ssecmp_128_insn, 3, SUF_Z, 0x1A, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngt_uqsd, ssecmp_64_insn, 4, SUF_Z, 0x1A, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngt_uqss, ssecmp_32_insn, 4, SUF_Z, 0x1A, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngtpd, ssecmp_128_insn, 3, SUF_Z, 0x0A, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngtps, ssecmp_128_insn, 3, SUF_Z, 0x0A, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngtsd, ssecmp_64_insn, 4, SUF_Z, 0x0A, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpngtss, ssecmp_32_insn, 4, SUF_Z, 0x0A, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnle_uqpd, ssecmp_128_insn, 3, SUF_Z, 0x16, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnle_uqps, ssecmp_128_insn, 3, SUF_Z, 0x16, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnle_uqsd, ssecmp_64_insn, 4, SUF_Z, 0x16, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnle_uqss, ssecmp_32_insn, 4, SUF_Z, 0x16, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnlepd, ssecmp_128_insn, 3, SUF_Z, 0x06, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnleps, ssecmp_128_insn, 3, SUF_Z, 0x06, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnlesd, ssecmp_64_insn, 4, SUF_Z, 0x06, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnless, ssecmp_32_insn, 4, SUF_Z, 0x06, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnlt_uqpd, ssecmp_128_insn, 3, SUF_Z, 0x15, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnlt_uqps, ssecmp_128_insn, 3, SUF_Z, 0x15, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnlt_uqsd, ssecmp_64_insn, 4, SUF_Z, 0x15, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnlt_uqss, ssecmp_32_insn, 4, SUF_Z, 0x15, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnltpd, ssecmp_128_insn, 3, SUF_Z, 0x05, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnltps, ssecmp_128_insn, 3, SUF_Z, 0x05, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnltsd, ssecmp_64_insn, 4, SUF_Z, 0x05, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpnltss, ssecmp_32_insn, 4, SUF_Z, 0x05, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpord_spd, ssecmp_128_insn, 3, SUF_Z, 0x17, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpord_sps, ssecmp_128_insn, 3, SUF_Z, 0x17, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpord_ssd, ssecmp_64_insn, 4, SUF_Z, 0x17, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpord_sss, ssecmp_32_insn, 4, SUF_Z, 0x17, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpordpd, ssecmp_128_insn, 3, SUF_Z, 0x07, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpordps, ssecmp_128_insn, 3, SUF_Z, 0x07, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpordsd, ssecmp_64_insn, 4, SUF_Z, 0x07, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpordss, ssecmp_32_insn, 4, SUF_Z, 0x07, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmppd, xmm_xmm128_imm_256_insn, 3, SUF_Z, 0x66, 0xC2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpps, xmm_xmm128_imm_256_insn, 3, SUF_Z, 0x00, 0xC2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpsd, cmpsd_insn, 5, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpss, xmm_xmm32_imm_insn, 4, SUF_Z, 0xF3, 0xC2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmptrue_uspd, ssecmp_128_insn, 3, SUF_Z, 0x1F, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmptrue_usps, ssecmp_128_insn, 3, SUF_Z, 0x1F, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmptrue_ussd, ssecmp_64_insn, 4, SUF_Z, 0x1F, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmptrue_usss, ssecmp_32_insn, 4, SUF_Z, 0x1F, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmptruepd, ssecmp_128_insn, 3, SUF_Z, 0x0F, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmptrueps, ssecmp_128_insn, 3, SUF_Z, 0x0F, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmptruesd, ssecmp_64_insn, 4, SUF_Z, 0x0F, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmptruess, ssecmp_32_insn, 4, SUF_Z, 0x0F, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpunord_spd, ssecmp_128_insn, 3, SUF_Z, 0x13, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpunord_sps, ssecmp_128_insn, 3, SUF_Z, 0x13, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpunord_ssd, ssecmp_64_insn, 4, SUF_Z, 0x13, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpunord_sss, ssecmp_32_insn, 4, SUF_Z, 0x13, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpunordpd, ssecmp_128_insn, 3, SUF_Z, 0x03, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpunordps, ssecmp_128_insn, 3, SUF_Z, 0x03, 0x00, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpunordsd, ssecmp_64_insn, 4, SUF_Z, 0x03, 0xF2, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcmpunordss, ssecmp_32_insn, 4, SUF_Z, 0x03, 0xF3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcomisd, avx_xmm_xmm64_insn, 2, SUF_Z, 0x66, 0x2F, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcomiss, avx_xmm_xmm32_insn, 2, SUF_Z, 0x00, 0x2F, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtdq2pd, avx_cvt_xmm64_insn, 3, SUF_Z, 0xF3, 0xE6, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtdq2ps, avx_xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x5B, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtpd2dq, avx_cvt_xmm128_insn, 2, SUF_Z, 0xF2, 0xE6, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtpd2ps, avx_cvt_xmm128_insn, 2, SUF_Z, 0x66, 0x5A, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtph2ps, avx_cvtph2ps_insn, 4, SUF_Z, 0x66, 0x13, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtps2dq, avx_xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x5B, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtps2pd, avx_cvt_xmm64_insn, 3, SUF_Z, 0x00, 0x5A, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtps2ph, avx_cvtps2ph_insn, 4, SUF_Z, 0x66, 0x1D, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtsd2si, cvt_rx_xmm64_insn, 4, SUF_Z, 0xF2, 0x2D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtsd2ss, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5A, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtsi2sd, cvt_xmm_rmx_insn, 6, SUF_Z, 0xF2, 0x2A, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtsi2ss, cvt_xmm_rmx_insn, 6, SUF_Z, 0xF3, 0x2A, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtss2sd, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5A, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvtss2si, cvt_rx_xmm32_insn, 4, SUF_Z, 0xF3, 0x2D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvttpd2dq, avx_cvt_xmm128_insn, 2, SUF_Z, 0x66, 0xE6, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvttps2dq, avx_xmm_xmm128_insn, 2, SUF_Z, 0xF3, 0x5B, 0, ONLY_AVX, CPU_AVX, 0, 0 +vcvttsd2si, cvt_rx_xmm64_insn, 4, SUF_Z, 0xF2, 0x2C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vcvttss2si, cvt_rx_xmm32_insn, 4, SUF_Z, 0xF3, 0x2C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vdivpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x5E, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vdivps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x5E, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vdivsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5E, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vdivss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5E, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vdppd, sse4imm_insn, 2, SUF_Z, 0x41, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vdpps, sse4imm_256_insn, 4, SUF_Z, 0x40, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +verr, prot286_insn, 1, SUF_Z, 0x04, 0x00, 0, 0, CPU_286, CPU_Prot, 0 +verw, prot286_insn, 1, SUF_Z, 0x05, 0x00, 0, 0, CPU_286, CPU_Prot, 0 +vextractf128, vextractif128_insn, 1, SUF_Z, 0x19, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vextracti128, vextractif128_insn, 1, SUF_Z, 0x39, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vextractps, extractps_insn, 2, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vfmadd132pd, vfma_pd_insn, 2, SUF_Z, 0x98, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd132ps, vfma_ps_insn, 2, SUF_Z, 0x98, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd132sd, vfma_sd_insn, 2, SUF_Z, 0x99, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd132ss, vfma_ss_insn, 2, SUF_Z, 0x99, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd213pd, vfma_pd_insn, 2, SUF_Z, 0xA8, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd213ps, vfma_ps_insn, 2, SUF_Z, 0xA8, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd213sd, vfma_sd_insn, 2, SUF_Z, 0xA9, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd213ss, vfma_ss_insn, 2, SUF_Z, 0xA9, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd231pd, vfma_pd_insn, 2, SUF_Z, 0xB8, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd231ps, vfma_ps_insn, 2, SUF_Z, 0xB8, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd231sd, vfma_sd_insn, 2, SUF_Z, 0xB9, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmadd231ss, vfma_ss_insn, 2, SUF_Z, 0xB9, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmaddpd, fma_128_256_insn, 4, SUF_Z, 0x69, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmaddps, fma_128_256_insn, 4, SUF_Z, 0x68, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmaddsd, fma_128_m64_insn, 3, SUF_Z, 0x6B, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmaddss, fma_128_m32_insn, 3, SUF_Z, 0x6A, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmaddsub132pd, vfma_pd_insn, 2, SUF_Z, 0x96, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmaddsub132ps, vfma_ps_insn, 2, SUF_Z, 0x96, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmaddsub213pd, vfma_pd_insn, 2, SUF_Z, 0xA6, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmaddsub213ps, vfma_ps_insn, 2, SUF_Z, 0xA6, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmaddsub231pd, vfma_pd_insn, 2, SUF_Z, 0xB6, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmaddsub231ps, vfma_ps_insn, 2, SUF_Z, 0xB6, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmaddsubpd, fma_128_256_insn, 4, SUF_Z, 0x5D, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmaddsubps, fma_128_256_insn, 4, SUF_Z, 0x5C, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmsub132pd, vfma_pd_insn, 2, SUF_Z, 0x9A, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub132ps, vfma_ps_insn, 2, SUF_Z, 0x9A, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub132sd, vfma_sd_insn, 2, SUF_Z, 0x9B, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub132ss, vfma_ss_insn, 2, SUF_Z, 0x9B, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub213pd, vfma_pd_insn, 2, SUF_Z, 0xAA, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub213ps, vfma_ps_insn, 2, SUF_Z, 0xAA, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub213sd, vfma_sd_insn, 2, SUF_Z, 0xAB, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub213ss, vfma_ss_insn, 2, SUF_Z, 0xAB, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub231pd, vfma_pd_insn, 2, SUF_Z, 0xBA, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub231ps, vfma_ps_insn, 2, SUF_Z, 0xBA, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub231sd, vfma_sd_insn, 2, SUF_Z, 0xBB, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsub231ss, vfma_ss_insn, 2, SUF_Z, 0xBB, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsubadd132pd, vfma_pd_insn, 2, SUF_Z, 0x97, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsubadd132ps, vfma_ps_insn, 2, SUF_Z, 0x97, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsubadd213pd, vfma_pd_insn, 2, SUF_Z, 0xA7, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsubadd213ps, vfma_ps_insn, 2, SUF_Z, 0xA7, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsubadd231pd, vfma_pd_insn, 2, SUF_Z, 0xB7, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsubadd231ps, vfma_ps_insn, 2, SUF_Z, 0xB7, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfmsubaddpd, fma_128_256_insn, 4, SUF_Z, 0x5F, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmsubaddps, fma_128_256_insn, 4, SUF_Z, 0x5E, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmsubpd, fma_128_256_insn, 4, SUF_Z, 0x6D, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmsubps, fma_128_256_insn, 4, SUF_Z, 0x6C, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmsubsd, fma_128_m64_insn, 3, SUF_Z, 0x6F, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfmsubss, fma_128_m32_insn, 3, SUF_Z, 0x6E, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfnmadd132pd, vfma_pd_insn, 2, SUF_Z, 0x9C, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd132ps, vfma_ps_insn, 2, SUF_Z, 0x9C, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd132sd, vfma_sd_insn, 2, SUF_Z, 0x9D, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd132ss, vfma_ss_insn, 2, SUF_Z, 0x9D, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd213pd, vfma_pd_insn, 2, SUF_Z, 0xAC, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd213ps, vfma_ps_insn, 2, SUF_Z, 0xAC, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd213sd, vfma_sd_insn, 2, SUF_Z, 0xAD, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd213ss, vfma_ss_insn, 2, SUF_Z, 0xAD, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd231pd, vfma_pd_insn, 2, SUF_Z, 0xBC, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd231ps, vfma_ps_insn, 2, SUF_Z, 0xBC, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd231sd, vfma_sd_insn, 2, SUF_Z, 0xBD, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmadd231ss, vfma_ss_insn, 2, SUF_Z, 0xBD, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmaddpd, fma_128_256_insn, 4, SUF_Z, 0x79, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfnmaddps, fma_128_256_insn, 4, SUF_Z, 0x78, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfnmaddsd, fma_128_m64_insn, 3, SUF_Z, 0x7B, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfnmaddss, fma_128_m32_insn, 3, SUF_Z, 0x7A, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfnmsub132pd, vfma_pd_insn, 2, SUF_Z, 0x9E, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub132ps, vfma_ps_insn, 2, SUF_Z, 0x9E, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub132sd, vfma_sd_insn, 2, SUF_Z, 0x9F, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub132ss, vfma_ss_insn, 2, SUF_Z, 0x9F, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub213pd, vfma_pd_insn, 2, SUF_Z, 0xAE, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub213ps, vfma_ps_insn, 2, SUF_Z, 0xAE, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub213sd, vfma_sd_insn, 2, SUF_Z, 0xAF, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub213ss, vfma_ss_insn, 2, SUF_Z, 0xAF, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub231pd, vfma_pd_insn, 2, SUF_Z, 0xBE, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub231ps, vfma_ps_insn, 2, SUF_Z, 0xBE, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub231sd, vfma_sd_insn, 2, SUF_Z, 0xBF, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsub231ss, vfma_ss_insn, 2, SUF_Z, 0xBF, 0, 0, ONLY_AVX, CPU_FMA, 0, 0 +vfnmsubpd, fma_128_256_insn, 4, SUF_Z, 0x7D, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfnmsubps, fma_128_256_insn, 4, SUF_Z, 0x7C, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfnmsubsd, fma_128_m64_insn, 3, SUF_Z, 0x7F, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfnmsubss, fma_128_m32_insn, 3, SUF_Z, 0x7E, 0, 0, ONLY_AVX, CPU_FMA4, 0, 0 +vfrczpd, vfrc_pdps_insn, 2, SUF_Z, 0x01, 0, 0, 0, CPU_XOP, 0, 0 +vfrczps, vfrc_pdps_insn, 2, SUF_Z, 0x00, 0, 0, 0, CPU_XOP, 0, 0 +vfrczsd, vfrczsd_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_XOP, 0, 0 +vfrczss, vfrczss_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_XOP, 0, 0 +vgatherdpd, gather_64x_64x_insn, 2, SUF_Z, 0x92, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vgatherdps, gather_32x_32y_insn, 2, SUF_Z, 0x92, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vgatherqpd, gather_64x_64y_insn, 2, SUF_Z, 0x93, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vgatherqps, gather_32x_32y_128_insn, 2, SUF_Z, 0x93, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vhaddpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x7C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vhaddps, xmm_xmm128_256_insn, 4, SUF_Z, 0xF2, 0x7C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vhsubpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x7D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vhsubps, xmm_xmm128_256_insn, 4, SUF_Z, 0xF2, 0x7D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vinsertf128, vinsertif128_insn, 1, SUF_Z, 0x18, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vinserti128, vinsertif128_insn, 1, SUF_Z, 0x38, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vinsertps, insertps_insn, 4, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vlddqu, lddqu_insn, 2, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vldmxcsr, ldstmxcsr_insn, 1, SUF_Z, 0x02, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmaskmovdqu, maskmovdqu_insn, 1, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmaskmovpd, vmaskmov_insn, 4, SUF_Z, 0x2D, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmaskmovps, vmaskmov_insn, 4, SUF_Z, 0x2C, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmaxpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x5F, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmaxps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x5F, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmaxsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5F, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmaxss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5F, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmcall, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xC1, 0, CPU_P4, 0, 0 +vmclear, vmxthreebytemem_insn, 1, SUF_Z, 0x66, 0, 0, 0, CPU_P4, 0, 0 +vminpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x5D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vminps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x5D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vminsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vminss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmlaunch, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xC2, 0, CPU_P4, 0, 0 +vmload, svm_rax_insn, 2, SUF_Z, 0xDA, 0, 0, 0, CPU_SVM, 0, 0 +vmmcall, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xD9, 0, CPU_SVM, 0, 0 +vmovapd, movau_insn, 6, SUF_Z, 0x66, 0x28, 0x01, ONLY_AVX, CPU_AVX, 0, 0 +vmovaps, movau_insn, 6, SUF_Z, 0x00, 0x28, 0x01, ONLY_AVX, CPU_AVX, 0, 0 +vmovd, vmovd_insn, 2, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_386, CPU_AVX, 0 +vmovddup, vmovddup_insn, 3, SUF_Z, 0xF2, 0x12, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovdqa, movau_insn, 6, SUF_Z, 0x66, 0x6F, 0x10, ONLY_AVX, CPU_AVX, 0, 0 +vmovdqu, movau_insn, 6, SUF_Z, 0xF3, 0x6F, 0x10, ONLY_AVX, CPU_AVX, 0, 0 +vmovhlps, movhllhps_insn, 2, SUF_Z, 0x12, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovhpd, movhlp_insn, 3, SUF_Z, 0x66, 0x16, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmovhps, movhlp_insn, 3, SUF_Z, 0x00, 0x16, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmovlhps, movhllhps_insn, 2, SUF_Z, 0x16, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovlpd, movhlp_insn, 3, SUF_Z, 0x66, 0x12, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmovlps, movhlp_insn, 3, SUF_Z, 0x00, 0x12, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmovmskpd, movmsk_insn, 4, SUF_Z, 0x66, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovmskps, movmsk_insn, 4, SUF_Z, 0x00, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovntdq, movnt_insn, 2, SUF_Z, 0x66, 0xE7, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmovntdqa, movntdqa_insn, 2, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovntpd, movnt_insn, 2, SUF_Z, 0x66, 0x2B, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmovntps, movnt_insn, 2, SUF_Z, 0x00, 0x2B, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmovq, vmovq_insn, 5, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovsd, movsd_insn, 5, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovshdup, avx_xmm_xmm128_insn, 2, SUF_Z, 0xF3, 0x16, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovsldup, avx_xmm_xmm128_insn, 2, SUF_Z, 0xF3, 0x12, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovss, movss_insn, 4, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmovupd, movau_insn, 6, SUF_Z, 0x66, 0x10, 0x01, ONLY_AVX, CPU_AVX, 0, 0 +vmovups, movau_insn, 6, SUF_Z, 0x00, 0x10, 0x01, ONLY_AVX, CPU_AVX, 0, 0 +vmpsadbw, sse4imm_256avx2_insn, 4, SUF_Z, 0x42, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vmptrld, vmxtwobytemem_insn, 1, SUF_Z, 0x06, 0, 0, 0, CPU_P4, 0, 0 +vmptrst, vmxtwobytemem_insn, 1, SUF_Z, 0x07, 0, 0, 0, CPU_P4, 0, 0 +vmread, vmxmemrd_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_P4, 0, 0 +vmresume, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xC3, 0, CPU_P4, 0, 0 +vmrun, svm_rax_insn, 2, SUF_Z, 0xD8, 0, 0, 0, CPU_SVM, 0, 0 +vmsave, svm_rax_insn, 2, SUF_Z, 0xDB, 0, 0, 0, CPU_SVM, 0, 0 +vmulpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x59, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmulps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x59, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmulsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x59, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmulss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x59, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vmwrite, vmxmemwr_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_P4, 0, 0 +vmxoff, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xC4, 0, CPU_P4, 0, 0 +vmxon, vmxthreebytemem_insn, 1, SUF_Z, 0xF3, 0, 0, 0, CPU_P4, 0, 0 +vorpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x56, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vorps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x56, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpabsb, avx2_ssse3_2op_insn, 2, SUF_Z, 0x1C, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpabsd, avx2_ssse3_2op_insn, 2, SUF_Z, 0x1E, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpabsw, avx2_ssse3_2op_insn, 2, SUF_Z, 0x1D, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpackssdw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x6B, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpacksswb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x63, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpackusdw, ssse3_insn, 5, SUF_Z, 0x2B, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpackuswb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x67, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpaddb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xFC, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpaddd, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xFE, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpaddq, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xD4, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpaddsb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xEC, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpaddsw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xED, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpaddusb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xDC, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpaddusw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xDD, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpaddw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xFD, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpalignr, sse4imm_256avx2_insn, 4, SUF_Z, 0x0F, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpand, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xDB, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpandn, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xDF, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpavgb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xE0, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpavgw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xE3, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpblendd, vex_66_0F3A_imm8_avx2_insn, 2, SUF_Z, 0x02, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpblendvb, avx2_sse4xmm0_insn, 2, SUF_Z, 0x4C, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpblendw, sse4imm_256avx2_insn, 4, SUF_Z, 0x0E, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpbroadcastb, vpbroadcastb_avx2_insn, 4, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpbroadcastd, vpbroadcastd_avx2_insn, 4, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpbroadcastq, vpbroadcastq_avx2_insn, 4, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpbroadcastw, vpbroadcastw_avx2_insn, 4, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpclmulhqhqdq, pclmulqdq_fixed_insn, 2, SUF_Z, 0x11, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpclmulhqlqdq, pclmulqdq_fixed_insn, 2, SUF_Z, 0x01, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpclmullqhqdq, pclmulqdq_fixed_insn, 2, SUF_Z, 0x10, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpclmullqlqdq, pclmulqdq_fixed_insn, 2, SUF_Z, 0x00, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpclmulqdq, pclmulqdq_insn, 2, SUF_Z, 0x3A, 0x44, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmov, vpcmov_insn, 4, SUF_Z, 0, 0, 0, 0, CPU_XOP, 0, 0 +vpcmpeqb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x74, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpeqd, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x76, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpeqq, ssse3_insn, 5, SUF_Z, 0x29, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpeqw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x75, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpestri, sse4pcmpstr_insn, 1, SUF_Z, 0x61, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpestrm, sse4pcmpstr_insn, 1, SUF_Z, 0x60, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpgtb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x64, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpgtd, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x66, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpgtq, ssse3_insn, 5, SUF_Z, 0x37, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpgtw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x65, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpistri, sse4pcmpstr_insn, 1, SUF_Z, 0x63, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpcmpistrm, sse4pcmpstr_insn, 1, SUF_Z, 0x62, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpcomb, vpcom_imm_insn, 1, SUF_Z, 0xCC, 0, 0, 0, CPU_XOP, 0, 0 +vpcomd, vpcom_imm_insn, 1, SUF_Z, 0xCE, 0, 0, 0, CPU_XOP, 0, 0 +vpcomeqb, vpcom_insn, 1, SUF_Z, 0xCC, 0x04, 0, 0, CPU_XOP, 0, 0 +vpcomeqd, vpcom_insn, 1, SUF_Z, 0xCE, 0x04, 0, 0, CPU_XOP, 0, 0 +vpcomeqq, vpcom_insn, 1, SUF_Z, 0xCF, 0x04, 0, 0, CPU_XOP, 0, 0 +vpcomequb, vpcom_insn, 1, SUF_Z, 0xEC, 0x04, 0, 0, CPU_XOP, 0, 0 +vpcomequd, vpcom_insn, 1, SUF_Z, 0xEE, 0x04, 0, 0, CPU_XOP, 0, 0 +vpcomequq, vpcom_insn, 1, SUF_Z, 0xEF, 0x04, 0, 0, CPU_XOP, 0, 0 +vpcomequw, vpcom_insn, 1, SUF_Z, 0xED, 0x04, 0, 0, CPU_XOP, 0, 0 +vpcomeqw, vpcom_insn, 1, SUF_Z, 0xCD, 0x04, 0, 0, CPU_XOP, 0, 0 +vpcomfalseb, vpcom_insn, 1, SUF_Z, 0xCC, 0x06, 0, 0, CPU_XOP, 0, 0 +vpcomfalsed, vpcom_insn, 1, SUF_Z, 0xCE, 0x06, 0, 0, CPU_XOP, 0, 0 +vpcomfalseq, vpcom_insn, 1, SUF_Z, 0xCF, 0x06, 0, 0, CPU_XOP, 0, 0 +vpcomfalseub, vpcom_insn, 1, SUF_Z, 0xEC, 0x06, 0, 0, CPU_XOP, 0, 0 +vpcomfalseud, vpcom_insn, 1, SUF_Z, 0xEE, 0x06, 0, 0, CPU_XOP, 0, 0 +vpcomfalseuq, vpcom_insn, 1, SUF_Z, 0xEF, 0x06, 0, 0, CPU_XOP, 0, 0 +vpcomfalseuw, vpcom_insn, 1, SUF_Z, 0xED, 0x06, 0, 0, CPU_XOP, 0, 0 +vpcomfalsew, vpcom_insn, 1, SUF_Z, 0xCD, 0x06, 0, 0, CPU_XOP, 0, 0 +vpcomgeb, vpcom_insn, 1, SUF_Z, 0xCC, 0x03, 0, 0, CPU_XOP, 0, 0 +vpcomged, vpcom_insn, 1, SUF_Z, 0xCE, 0x03, 0, 0, CPU_XOP, 0, 0 +vpcomgeq, vpcom_insn, 1, SUF_Z, 0xCF, 0x03, 0, 0, CPU_XOP, 0, 0 +vpcomgeub, vpcom_insn, 1, SUF_Z, 0xEC, 0x03, 0, 0, CPU_XOP, 0, 0 +vpcomgeud, vpcom_insn, 1, SUF_Z, 0xEE, 0x03, 0, 0, CPU_XOP, 0, 0 +vpcomgeuq, vpcom_insn, 1, SUF_Z, 0xEF, 0x03, 0, 0, CPU_XOP, 0, 0 +vpcomgeuw, vpcom_insn, 1, SUF_Z, 0xED, 0x03, 0, 0, CPU_XOP, 0, 0 +vpcomgew, vpcom_insn, 1, SUF_Z, 0xCD, 0x03, 0, 0, CPU_XOP, 0, 0 +vpcomgtb, vpcom_insn, 1, SUF_Z, 0xCC, 0x02, 0, 0, CPU_XOP, 0, 0 +vpcomgtd, vpcom_insn, 1, SUF_Z, 0xCE, 0x02, 0, 0, CPU_XOP, 0, 0 +vpcomgtq, vpcom_insn, 1, SUF_Z, 0xCF, 0x02, 0, 0, CPU_XOP, 0, 0 +vpcomgtub, vpcom_insn, 1, SUF_Z, 0xEC, 0x02, 0, 0, CPU_XOP, 0, 0 +vpcomgtud, vpcom_insn, 1, SUF_Z, 0xEE, 0x02, 0, 0, CPU_XOP, 0, 0 +vpcomgtuq, vpcom_insn, 1, SUF_Z, 0xEF, 0x02, 0, 0, CPU_XOP, 0, 0 +vpcomgtuw, vpcom_insn, 1, SUF_Z, 0xED, 0x02, 0, 0, CPU_XOP, 0, 0 +vpcomgtw, vpcom_insn, 1, SUF_Z, 0xCD, 0x02, 0, 0, CPU_XOP, 0, 0 +vpcomleb, vpcom_insn, 1, SUF_Z, 0xCC, 0x01, 0, 0, CPU_XOP, 0, 0 +vpcomled, vpcom_insn, 1, SUF_Z, 0xCE, 0x01, 0, 0, CPU_XOP, 0, 0 +vpcomleq, vpcom_insn, 1, SUF_Z, 0xCF, 0x01, 0, 0, CPU_XOP, 0, 0 +vpcomleub, vpcom_insn, 1, SUF_Z, 0xEC, 0x01, 0, 0, CPU_XOP, 0, 0 +vpcomleud, vpcom_insn, 1, SUF_Z, 0xEE, 0x01, 0, 0, CPU_XOP, 0, 0 +vpcomleuq, vpcom_insn, 1, SUF_Z, 0xEF, 0x01, 0, 0, CPU_XOP, 0, 0 +vpcomleuw, vpcom_insn, 1, SUF_Z, 0xED, 0x01, 0, 0, CPU_XOP, 0, 0 +vpcomlew, vpcom_insn, 1, SUF_Z, 0xCD, 0x01, 0, 0, CPU_XOP, 0, 0 +vpcomltb, vpcom_insn, 1, SUF_Z, 0xCC, 0x00, 0, 0, CPU_XOP, 0, 0 +vpcomltd, vpcom_insn, 1, SUF_Z, 0xCE, 0x00, 0, 0, CPU_XOP, 0, 0 +vpcomltq, vpcom_insn, 1, SUF_Z, 0xCF, 0x00, 0, 0, CPU_XOP, 0, 0 +vpcomltub, vpcom_insn, 1, SUF_Z, 0xEC, 0x00, 0, 0, CPU_XOP, 0, 0 +vpcomltud, vpcom_insn, 1, SUF_Z, 0xEE, 0x00, 0, 0, CPU_XOP, 0, 0 +vpcomltuq, vpcom_insn, 1, SUF_Z, 0xEF, 0x00, 0, 0, CPU_XOP, 0, 0 +vpcomltuw, vpcom_insn, 1, SUF_Z, 0xED, 0x00, 0, 0, CPU_XOP, 0, 0 +vpcomltw, vpcom_insn, 1, SUF_Z, 0xCD, 0x00, 0, 0, CPU_XOP, 0, 0 +vpcomneb, vpcom_insn, 1, SUF_Z, 0xCC, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomned, vpcom_insn, 1, SUF_Z, 0xCE, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomneq, vpcom_insn, 1, SUF_Z, 0xCF, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomneqb, vpcom_insn, 1, SUF_Z, 0xCC, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomneqd, vpcom_insn, 1, SUF_Z, 0xCE, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomneqq, vpcom_insn, 1, SUF_Z, 0xCF, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomnequb, vpcom_insn, 1, SUF_Z, 0xEC, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomnequd, vpcom_insn, 1, SUF_Z, 0xEE, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomnequq, vpcom_insn, 1, SUF_Z, 0xEF, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomnequw, vpcom_insn, 1, SUF_Z, 0xED, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomneqw, vpcom_insn, 1, SUF_Z, 0xCD, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomneub, vpcom_insn, 1, SUF_Z, 0xEC, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomneud, vpcom_insn, 1, SUF_Z, 0xEE, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomneuq, vpcom_insn, 1, SUF_Z, 0xEF, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomneuw, vpcom_insn, 1, SUF_Z, 0xED, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomnew, vpcom_insn, 1, SUF_Z, 0xCD, 0x05, 0, 0, CPU_XOP, 0, 0 +vpcomq, vpcom_imm_insn, 1, SUF_Z, 0xCF, 0, 0, 0, CPU_XOP, 0, 0 +vpcomtrueb, vpcom_insn, 1, SUF_Z, 0xCC, 0x07, 0, 0, CPU_XOP, 0, 0 +vpcomtrued, vpcom_insn, 1, SUF_Z, 0xCE, 0x07, 0, 0, CPU_XOP, 0, 0 +vpcomtrueq, vpcom_insn, 1, SUF_Z, 0xCF, 0x07, 0, 0, CPU_XOP, 0, 0 +vpcomtrueub, vpcom_insn, 1, SUF_Z, 0xEC, 0x07, 0, 0, CPU_XOP, 0, 0 +vpcomtrueud, vpcom_insn, 1, SUF_Z, 0xEE, 0x07, 0, 0, CPU_XOP, 0, 0 +vpcomtrueuq, vpcom_insn, 1, SUF_Z, 0xEF, 0x07, 0, 0, CPU_XOP, 0, 0 +vpcomtrueuw, vpcom_insn, 1, SUF_Z, 0xED, 0x07, 0, 0, CPU_XOP, 0, 0 +vpcomtruew, vpcom_insn, 1, SUF_Z, 0xCD, 0x07, 0, 0, CPU_XOP, 0, 0 +vpcomub, vpcom_imm_insn, 1, SUF_Z, 0xEC, 0, 0, 0, CPU_XOP, 0, 0 +vpcomud, vpcom_imm_insn, 1, SUF_Z, 0xEE, 0, 0, 0, CPU_XOP, 0, 0 +vpcomuq, vpcom_imm_insn, 1, SUF_Z, 0xEF, 0, 0, 0, CPU_XOP, 0, 0 +vpcomuw, vpcom_imm_insn, 1, SUF_Z, 0xED, 0, 0, 0, CPU_XOP, 0, 0 +vpcomw, vpcom_imm_insn, 1, SUF_Z, 0xCD, 0, 0, 0, CPU_XOP, 0, 0 +vperm2f128, vperm2f128_insn, 1, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vperm2i128, vperm2i128_avx2_insn, 1, SUF_Z, 0, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpermd, vperm_var_avx2_insn, 1, SUF_Z, 0x36, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpermilpd, vpermil_insn, 4, SUF_Z, 0x05, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpermilps, vpermil_insn, 4, SUF_Z, 0x04, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpermpd, vperm_imm_avx2_insn, 1, SUF_Z, 0x01, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpermps, vperm_var_avx2_insn, 1, SUF_Z, 0x16, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpermq, vperm_imm_avx2_insn, 1, SUF_Z, 0x00, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpextrb, pextrb_insn, 3, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpextrd, pextrd_insn, 1, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpextrq, pextrq_insn, 1, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpextrw, pextrw_insn, 7, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpgatherdd, gather_32x_32y_insn, 2, SUF_Z, 0x90, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpgatherdq, gather_64x_64x_insn, 2, SUF_Z, 0x90, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpgatherqd, gather_32x_32y_128_insn, 2, SUF_Z, 0x91, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpgatherqq, gather_64x_64y_insn, 2, SUF_Z, 0x91, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vphaddbd, vphaddsub_insn, 1, SUF_Z, 0xC2, 0, 0, 0, CPU_XOP, 0, 0 +vphaddbq, vphaddsub_insn, 1, SUF_Z, 0xC3, 0, 0, 0, CPU_XOP, 0, 0 +vphaddbw, vphaddsub_insn, 1, SUF_Z, 0xC1, 0, 0, 0, CPU_XOP, 0, 0 +vphaddd, ssse3_insn, 5, SUF_Z, 0x02, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vphadddq, vphaddsub_insn, 1, SUF_Z, 0xCB, 0, 0, 0, CPU_XOP, 0, 0 +vphaddsw, ssse3_insn, 5, SUF_Z, 0x03, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vphaddubd, vphaddsub_insn, 1, SUF_Z, 0xD2, 0, 0, 0, CPU_XOP, 0, 0 +vphaddubq, vphaddsub_insn, 1, SUF_Z, 0xD3, 0, 0, 0, CPU_XOP, 0, 0 +vphaddubw, vphaddsub_insn, 1, SUF_Z, 0xD1, 0, 0, 0, CPU_XOP, 0, 0 +vphaddudq, vphaddsub_insn, 1, SUF_Z, 0xDB, 0, 0, 0, CPU_XOP, 0, 0 +vphadduwd, vphaddsub_insn, 1, SUF_Z, 0xD6, 0, 0, 0, CPU_XOP, 0, 0 +vphadduwq, vphaddsub_insn, 1, SUF_Z, 0xD7, 0, 0, 0, CPU_XOP, 0, 0 +vphaddw, ssse3_insn, 5, SUF_Z, 0x01, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vphaddwd, vphaddsub_insn, 1, SUF_Z, 0xC6, 0, 0, 0, CPU_XOP, 0, 0 +vphaddwq, vphaddsub_insn, 1, SUF_Z, 0xC7, 0, 0, 0, CPU_XOP, 0, 0 +vphminposuw, avx_ssse3_2op_insn, 1, SUF_Z, 0x41, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vphsubbw, vphaddsub_insn, 1, SUF_Z, 0xE1, 0, 0, 0, CPU_XOP, 0, 0 +vphsubd, ssse3_insn, 5, SUF_Z, 0x06, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vphsubdq, vphaddsub_insn, 1, SUF_Z, 0xE3, 0, 0, 0, CPU_XOP, 0, 0 +vphsubsw, ssse3_insn, 5, SUF_Z, 0x07, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vphsubw, ssse3_insn, 5, SUF_Z, 0x05, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vphsubwd, vphaddsub_insn, 1, SUF_Z, 0xE2, 0, 0, 0, CPU_XOP, 0, 0 +vpinsrb, pinsrb_insn, 4, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpinsrd, pinsrd_insn, 2, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpinsrq, pinsrq_insn, 2, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpinsrw, pinsrw_insn, 9, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmacsdd, vpma_insn, 1, SUF_Z, 0x9E, 0, 0, 0, CPU_XOP, 0, 0 +vpmacsdqh, vpma_insn, 1, SUF_Z, 0x9F, 0, 0, 0, CPU_XOP, 0, 0 +vpmacsdql, vpma_insn, 1, SUF_Z, 0x97, 0, 0, 0, CPU_XOP, 0, 0 +vpmacssdd, vpma_insn, 1, SUF_Z, 0x8E, 0, 0, 0, CPU_XOP, 0, 0 +vpmacssdqh, vpma_insn, 1, SUF_Z, 0x8F, 0, 0, 0, CPU_XOP, 0, 0 +vpmacssdql, vpma_insn, 1, SUF_Z, 0x87, 0, 0, 0, CPU_XOP, 0, 0 +vpmacsswd, vpma_insn, 1, SUF_Z, 0x86, 0, 0, 0, CPU_XOP, 0, 0 +vpmacssww, vpma_insn, 1, SUF_Z, 0x85, 0, 0, 0, CPU_XOP, 0, 0 +vpmacswd, vpma_insn, 1, SUF_Z, 0x96, 0, 0, 0, CPU_XOP, 0, 0 +vpmacsww, vpma_insn, 1, SUF_Z, 0x95, 0, 0, 0, CPU_XOP, 0, 0 +vpmadcsswd, vpma_insn, 1, SUF_Z, 0xA6, 0, 0, 0, CPU_XOP, 0, 0 +vpmadcswd, vpma_insn, 1, SUF_Z, 0xB6, 0, 0, 0, CPU_XOP, 0, 0 +vpmaddubsw, ssse3_insn, 5, SUF_Z, 0x04, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmaddwd, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xF5, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpmaskmovd, vmaskmov_insn, 4, SUF_Z, 0x8C, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpmaskmovq, vmaskmov_vexw1_avx2_insn, 4, SUF_Z, 0x8C, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpmaxsb, ssse3_insn, 5, SUF_Z, 0x3C, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmaxsd, ssse3_insn, 5, SUF_Z, 0x3D, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmaxsw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xEE, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpmaxub, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xDE, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpmaxud, ssse3_insn, 5, SUF_Z, 0x3F, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmaxuw, ssse3_insn, 5, SUF_Z, 0x3E, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpminsb, ssse3_insn, 5, SUF_Z, 0x38, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpminsd, ssse3_insn, 5, SUF_Z, 0x39, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpminsw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xEA, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpminub, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xDA, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpminud, ssse3_insn, 5, SUF_Z, 0x3B, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpminuw, ssse3_insn, 5, SUF_Z, 0x3A, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovmskb, pmovmskb_insn, 6, SUF_Z, 0xC0, 0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovsxbd, sse4m32_insn, 4, SUF_Z, 0x21, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovsxbq, sse4m16_insn, 4, SUF_Z, 0x22, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovsxbw, sse4m64_insn, 4, SUF_Z, 0x20, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovsxdq, sse4m64_insn, 4, SUF_Z, 0x25, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovsxwd, sse4m64_insn, 4, SUF_Z, 0x23, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovsxwq, sse4m32_insn, 4, SUF_Z, 0x24, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovzxbd, sse4m32_insn, 4, SUF_Z, 0x31, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovzxbq, sse4m16_insn, 4, SUF_Z, 0x32, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovzxbw, sse4m64_insn, 4, SUF_Z, 0x30, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovzxdq, sse4m64_insn, 4, SUF_Z, 0x35, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovzxwd, sse4m64_insn, 4, SUF_Z, 0x33, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmovzxwq, sse4m32_insn, 4, SUF_Z, 0x34, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmuldq, ssse3_insn, 5, SUF_Z, 0x28, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmulhrsw, ssse3_insn, 5, SUF_Z, 0x0B, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmulhuw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xE4, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpmulhw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xE5, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpmulld, ssse3_insn, 5, SUF_Z, 0x40, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpmullw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xD5, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpmuludq, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xF4, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpor, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xEB, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpperm, vpperm_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_XOP, 0, 0 +vprotb, vprot_insn, 3, SUF_Z, 0x00, 0, 0, 0, CPU_XOP, 0, 0 +vprotd, vprot_insn, 3, SUF_Z, 0x02, 0, 0, 0, CPU_XOP, 0, 0 +vprotq, vprot_insn, 3, SUF_Z, 0x03, 0, 0, 0, CPU_XOP, 0, 0 +vprotw, vprot_insn, 3, SUF_Z, 0x01, 0, 0, 0, CPU_XOP, 0, 0 +vpsadbw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xF6, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpshab, amd_vpshift_insn, 2, SUF_Z, 0x98, 0, 0, 0, CPU_XOP, 0, 0 +vpshad, amd_vpshift_insn, 2, SUF_Z, 0x9A, 0, 0, 0, CPU_XOP, 0, 0 +vpshaq, amd_vpshift_insn, 2, SUF_Z, 0x9B, 0, 0, 0, CPU_XOP, 0, 0 +vpshaw, amd_vpshift_insn, 2, SUF_Z, 0x99, 0, 0, 0, CPU_XOP, 0, 0 +vpshlb, amd_vpshift_insn, 2, SUF_Z, 0x94, 0, 0, 0, CPU_XOP, 0, 0 +vpshld, amd_vpshift_insn, 2, SUF_Z, 0x96, 0, 0, 0, CPU_XOP, 0, 0 +vpshlq, amd_vpshift_insn, 2, SUF_Z, 0x97, 0, 0, 0, CPU_XOP, 0, 0 +vpshlw, amd_vpshift_insn, 2, SUF_Z, 0x95, 0, 0, 0, CPU_XOP, 0, 0 +vpshufb, ssse3_insn, 5, SUF_Z, 0x00, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpshufd, xmm_xmm128_imm_256avx2_insn, 2, SUF_Z, 0x66, 0x70, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpshufhw, xmm_xmm128_imm_256avx2_insn, 2, SUF_Z, 0xF3, 0x70, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpshuflw, xmm_xmm128_imm_256avx2_insn, 2, SUF_Z, 0xF2, 0x70, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpsignb, ssse3_insn, 5, SUF_Z, 0x08, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpsignd, ssse3_insn, 5, SUF_Z, 0x0A, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpsignw, ssse3_insn, 5, SUF_Z, 0x09, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpslld, vpshift_insn, 8, SUF_Z, 0xF2, 0x72, 0x06, ONLY_AVX, CPU_AVX, 0, 0 +vpslldq, pslrldq_insn, 4, SUF_Z, 0x07, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpsllq, vpshift_insn, 8, SUF_Z, 0xF3, 0x73, 0x06, ONLY_AVX, CPU_AVX, 0, 0 +vpsllvd, vpshiftv_vexw0_avx2_insn, 2, SUF_Z, 0x47, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpsllvq, vpshiftv_vexw1_avx2_insn, 2, SUF_Z, 0x47, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpsllw, vpshift_insn, 8, SUF_Z, 0xF1, 0x71, 0x06, ONLY_AVX, CPU_AVX, 0, 0 +vpsrad, vpshift_insn, 8, SUF_Z, 0xE2, 0x72, 0x04, ONLY_AVX, CPU_AVX, 0, 0 +vpsravd, vpshiftv_vexw0_avx2_insn, 2, SUF_Z, 0x46, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpsraw, vpshift_insn, 8, SUF_Z, 0xE1, 0x71, 0x04, ONLY_AVX, CPU_AVX, 0, 0 +vpsrld, vpshift_insn, 8, SUF_Z, 0xD2, 0x72, 0x02, ONLY_AVX, CPU_AVX, 0, 0 +vpsrldq, pslrldq_insn, 4, SUF_Z, 0x03, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpsrlq, vpshift_insn, 8, SUF_Z, 0xD3, 0x73, 0x02, ONLY_AVX, CPU_AVX, 0, 0 +vpsrlvd, vpshiftv_vexw0_avx2_insn, 2, SUF_Z, 0x45, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpsrlvq, vpshiftv_vexw1_avx2_insn, 2, SUF_Z, 0x45, 0, 0, ONLY_AVX, CPU_AVX2, 0, 0 +vpsrlw, vpshift_insn, 8, SUF_Z, 0xD1, 0x71, 0x02, ONLY_AVX, CPU_AVX, 0, 0 +vpsubb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xF8, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpsubd, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xFA, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpsubq, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xFB, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpsubsb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xE8, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpsubsw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xE9, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpsubusb, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xD8, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpsubusw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xD9, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpsubw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xF9, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vptest, sse4_insn, 2, SUF_Z, 0x17, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vpunpckhbw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x68, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpunpckhdq, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x6A, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpunpckhqdq, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x6D, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpunpckhwd, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x69, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpunpcklbw, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x60, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpunpckldq, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x62, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpunpcklqdq, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x6C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpunpcklwd, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0x61, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vpxor, xmm_xmm128_256avx2_insn, 4, SUF_Z, 0x66, 0xEF, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vrcpps, avx_xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x53, 0, ONLY_AVX, CPU_AVX, 0, 0 +vrcpss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x53, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vroundpd, avx_sse4imm_insn, 3, SUF_Z, 0x09, 0, 0, ONLY_AVX, CPU_SSE41, 0, 0 +vroundps, avx_sse4imm_insn, 3, SUF_Z, 0x08, 0, 0, ONLY_AVX, CPU_SSE41, 0, 0 +vroundsd, sse4m64imm_insn, 4, SUF_Z, 0x0B, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vroundss, sse4m32imm_insn, 4, SUF_Z, 0x0A, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vrsqrtps, avx_xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x52, 0, ONLY_AVX, CPU_AVX, 0, 0 +vrsqrtss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x52, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vshufpd, xmm_xmm128_imm_256_insn, 3, SUF_Z, 0x66, 0xC6, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vshufps, xmm_xmm128_imm_256_insn, 3, SUF_Z, 0x00, 0xC6, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vsqrtpd, avx_xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x51, 0, ONLY_AVX, CPU_AVX, 0, 0 +vsqrtps, avx_xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x51, 0, ONLY_AVX, CPU_AVX, 0, 0 +vsqrtsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x51, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vsqrtss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x51, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vstmxcsr, ldstmxcsr_insn, 1, SUF_Z, 0x03, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vsubpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x5C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vsubps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x5C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vsubsd, xmm_xmm64_insn, 4, SUF_Z, 0xF2, 0x5C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vsubss, xmm_xmm32_insn, 4, SUF_Z, 0xF3, 0x5C, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vtestpd, sse4_insn, 2, SUF_Z, 0x0F, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vtestps, sse4_insn, 2, SUF_Z, 0x0E, 0xC0, 0, ONLY_AVX, CPU_AVX, 0, 0 +vucomisd, avx_xmm_xmm64_insn, 2, SUF_Z, 0x66, 0x2E, 0, ONLY_AVX, CPU_AVX, 0, 0 +vucomiss, avx_xmm_xmm32_insn, 2, SUF_Z, 0x00, 0x2E, 0, ONLY_AVX, CPU_AVX, 0, 0 +vunpckhpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x15, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vunpckhps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x15, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vunpcklpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x14, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vunpcklps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x14, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vxorpd, xmm_xmm128_256_insn, 4, SUF_Z, 0x66, 0x57, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vxorps, xmm_xmm128_256_insn, 4, SUF_Z, 0x00, 0x57, 0xC0, ONLY_AVX, CPU_AVX, 0, 0 +vzeroall, vzero_insn, 1, SUF_Z, 0xC4, 0, 0, 0, CPU_AVX, 0, 0 +vzeroupper, vzero_insn, 1, SUF_Z, 0xC0, 0, 0, 0, CPU_AVX, 0, 0 +wait, onebyte_insn, 1, SUF_Z, 0x9B, 0, 0, 0, 0, 0, 0 +wbinvd, twobyte_insn, 1, SUF_Z, 0x0F, 0x09, 0, 0, CPU_486, CPU_Priv, 0 +wrfsbase, fs_gs_base_insn, 2, SUF_Z, 0x02, 0, 0, ONLY_64, CPU_FSGSBASE, 0, 0 +wrgsbase, fs_gs_base_insn, 2, SUF_Z, 0x03, 0, 0, ONLY_64, CPU_FSGSBASE, 0, 0 +wrmsr, twobyte_insn, 1, SUF_Z, 0x0F, 0x30, 0, 0, CPU_586, CPU_Priv, 0 +wrshr, rdwrshr_insn, 1, SUF_Z, 0x01, 0, 0, 0, CPU_686, CPU_Cyrix, CPU_SMM +xabort, tsx_xabort_insn, 1, SUF_Z, 0, 0, 0, 0, CPU_TSX, 0, 0 +xacquire, NULL, X86_ACQREL>>8, 0xF2, 0, 0, 0, 0, 0, 0, 0 +xadd, cmpxchgxadd_insn, 4, SUF_Z, 0xC0, 0, 0, 0, CPU_486, 0, 0 +xbegin, tsx_xbegin_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_TSX, 0 +xbts, xbts_insn, 2, SUF_Z, 0, 0, 0, 0, CPU_386, CPU_Obs, CPU_Undoc +xchg, xchg_insn, 16, SUF_Z, 0, 0, 0, 0, 0, 0, 0 +xcryptcbc, padlock_insn, 1, SUF_Z, 0xD0, 0xF3, 0xA7, 0, CPU_PadLock, 0, 0 +xcryptcfb, padlock_insn, 1, SUF_Z, 0xE0, 0xF3, 0xA7, 0, CPU_PadLock, 0, 0 +xcryptctr, padlock_insn, 1, SUF_Z, 0xD8, 0xF3, 0xA7, 0, CPU_PadLock, 0, 0 +xcryptecb, padlock_insn, 1, SUF_Z, 0xC8, 0xF3, 0xA7, 0, CPU_PadLock, 0, 0 +xcryptofb, padlock_insn, 1, SUF_Z, 0xE8, 0xF3, 0xA7, 0, CPU_PadLock, 0, 0 +xend, tsx_0x0F_0x01_insn, 1, SUF_Z, 0xD5, 0, 0, 0, CPU_TSX, 0, 0 +xgetbv, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xD0, 0, CPU_386, CPU_XSAVE, 0 +xlatb, onebyte_insn, 1, SUF_Z, 0xD7, 0x00, 0, 0, 0, 0, 0 +xor, arith_insn, 22, SUF_Z, 0x30, 0x06, 0, 0, 0, 0, 0 +xorpd, xmm_xmm128_insn, 2, SUF_Z, 0x66, 0x57, 0, 0, CPU_SSE2, 0, 0 +xorps, xmm_xmm128_insn, 2, SUF_Z, 0x00, 0x57, 0, 0, CPU_SSE, 0, 0 +xrelease, NULL, X86_ACQREL>>8, 0xF3, 0, 0, 0, 0, 0, 0, 0 +xrstor, twobytemem_insn, 1, SUF_Z, 0x05, 0x0F, 0xAE, 0, CPU_386, CPU_XSAVE, 0 +xsave, twobytemem_insn, 1, SUF_Z, 0x04, 0x0F, 0xAE, 0, CPU_386, CPU_XSAVE, 0 +xsaveopt, twobytemem_insn, 1, SUF_Z, 0x06, 0x0F, 0xAE, 0, CPU_XSAVEOPT, 0, 0 +xsaveopt64, xsaveopt64_insn, 1, SUF_Z, 0x06, 0x0F, 0xAE, ONLY_64, CPU_XSAVEOPT, 0, 0 +xsetbv, threebyte_insn, 1, SUF_Z, 0x0F, 0x01, 0xD1, 0, CPU_386, CPU_Priv, CPU_XSAVE +xsha1, padlock_insn, 1, SUF_Z, 0xC8, 0xF3, 0xA6, 0, CPU_PadLock, 0, 0 +xsha256, padlock_insn, 1, SUF_Z, 0xD0, 0xF3, 0xA6, 0, CPU_PadLock, 0, 0 +xstore, padlock_insn, 1, SUF_Z, 0xC0, 0x00, 0xA7, 0, CPU_PadLock, 0, 0 +xstorerng, padlock_insn, 1, SUF_Z, 0xC0, 0x00, 0xA7, 0, CPU_PadLock, 0, 0 +xtest, tsx_0x0F_0x01_insn, 1, SUF_Z, 0xD6, 0, 0, 0, CPU_TSX, 0, 0 diff --git a/third-party/yasm/yasm-1.3.0/x86insns.c b/third-party/yasm/yasm-1.3.0/x86insns.c new file mode 100644 index 0000000000..aee63db0e3 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/x86insns.c @@ -0,0 +1,2423 @@ +/* Generated by gen_x86_insn.py rHEAD, do not edit */ +static const x86_info_operand insn_operands[] = { + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_Mem, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDRM, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDRM, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEXImmSrc, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDRM, OPS_256, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_VEXImmSrc, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDRM, OPS_256, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_Mem, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEXImmSrc, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_Mem, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEXImmSrc, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEXImmSrc, OPAP_None}, + {OPT_Mem, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_Mem, OPS_8, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_SpareVEX, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_Mem, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDRM, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEXImmSrc, OPAP_None}, + {OPT_SIMDRM, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_VEXImmSrc, OPAP_None}, + {OPT_SIMDRM, OPS_256, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_Mem, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEXImmSrc, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEXImmSrc, OPAP_None}, + {OPT_Mem, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_SpareVEX, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_RM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_RM, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_SpareVEX, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_SpareVEX, OPAP_None}, + {OPT_Mem, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Reg, OPS_16, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 0, 0, OPTM_None, OPA_SImm, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 0, 0, OPTM_None, OPA_SImm, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 0, 0, OPTM_None, OPA_SImm, OPAP_None}, + {OPT_Reg, OPS_16, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_16, 1, 0, OPTM_None, OPA_SImm, OPAP_SImm8}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_32, 1, 0, OPTM_None, OPA_SImm, OPAP_SImm8}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_32, 1, 0, OPTM_None, OPA_SImm, OPAP_SImm8}, + {OPT_SIMDReg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_SpareVEX, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_SpareVEX, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_SpareVEX, OPAP_None}, + {OPT_Mem, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDRM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_SpareVEX, OPAP_None}, + {OPT_Mem, OPS_8, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_SpareVEX, OPAP_None}, + {OPT_Mem, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDRM, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_SpareVEX, OPAP_None}, + {OPT_SIMDRM, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Mem, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_RM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDRM, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_RM, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDRM, OPS_256, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Mem, OPS_8, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_SpareVEX, OPAP_None}, + {OPT_SIMDRM, OPS_256, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDRM, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDRM, OPS_256, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Mem, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Mem, OPS_128, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_MemXMMIndex, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_MemXMMIndex, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_SpareVEX, OPAP_None}, + {OPT_RM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_32, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_32, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDRM, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_SpareVEX, OPAP_None}, + {OPT_RM, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDRM, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_XMM0, OPS_128, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_MemXMMIndex, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_MemYMMIndex, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_MemYMMIndex, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_RM, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_RM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_RM, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_16, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_RM, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_16, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Creg, OPS_8, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_RM, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_RM, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Creg, OPS_8, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_RM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_RM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Creg, OPS_8, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_MemYMMIndex, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_RM, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_VEX, OPAP_None}, + {OPT_RM, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_RM, OPS_16, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_RM, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_RM, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_RM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_16, 0, 0, OPTM_None, OPA_SpareEA, OPAP_None}, + {OPT_Imm, OPS_8, 0, 0, OPTM_None, OPA_SImm, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_SpareEA, OPAP_None}, + {OPT_Imm, OPS_8, 0, 0, OPTM_None, OPA_SImm, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_SpareEA, OPAP_None}, + {OPT_Imm, OPS_8, 0, 0, OPTM_None, OPA_SImm, OPAP_None}, + {OPT_Reg, OPS_16, 0, 0, OPTM_None, OPA_SpareEA, OPAP_None}, + {OPT_Imm, OPS_16, 1, 0, OPTM_None, OPA_SImm, OPAP_SImm8}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_SpareEA, OPAP_None}, + {OPT_Imm, OPS_32, 1, 0, OPTM_None, OPA_SImm, OPAP_SImm8}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_SpareEA, OPAP_None}, + {OPT_Imm, OPS_32, 1, 0, OPTM_None, OPA_SImm, OPAP_SImm8}, + {OPT_SIMDReg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_RM, OPS_8, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_8, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_8, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_8, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_ST0, OPS_80, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Reg, OPS_80, 0, 0, OPTM_None, OPA_Op1Add, OPAP_None}, + {OPT_Reg, OPS_80, 0, 0, OPTM_None, OPA_Op1Add, OPAP_None}, + {OPT_ST0, OPS_80, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_SIMDRM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDRM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDRM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Areg, OPS_8, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_MemOffs, OPS_8, 1, 1, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_MemOffs, OPS_16, 1, 1, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_MemOffs, OPS_32, 1, 1, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_64, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_MemOffs, OPS_64, 1, 1, OPTM_None, OPA_EA, OPAP_None}, + {OPT_MemOffs, OPS_8, 1, 1, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_8, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_MemOffs, OPS_16, 1, 1, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_MemOffs, OPS_32, 1, 1, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_MemOffs, OPS_64, 1, 1, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_64, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Op0Add, OPAP_None}, + {OPT_Imm, OPS_64, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Mem, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Areg, OPS_8, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_MemOffs, OPS_8, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_MemOffs, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_MemOffs, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_MemOffs, OPS_8, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_8, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_MemOffs, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_MemOffs, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_RM, OPS_8, 1, 0, OPTM_None, OPA_EA, OPAP_ShortMov}, + {OPT_Areg, OPS_8, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_ShortMov}, + {OPT_Areg, OPS_16, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_ShortMov}, + {OPT_Areg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_ShortMov}, + {OPT_Areg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Areg, OPS_8, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_8, 1, 0, OPTM_None, OPA_EA, OPAP_ShortMov}, + {OPT_Areg, OPS_16, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_ShortMov}, + {OPT_Areg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_ShortMov}, + {OPT_Areg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_ShortMov}, + {OPT_Mem, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SegReg, OPS_16, 1, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_16, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SegReg, OPS_16, 1, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SegReg, OPS_16, 1, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SegReg, OPS_16, 1, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SegReg, OPS_16, 1, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_8, 0, 0, OPTM_None, OPA_Op0Add, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Reg, OPS_16, 0, 0, OPTM_None, OPA_Op0Add, OPAP_None}, + {OPT_Imm, OPS_16, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Op0Add, OPAP_None}, + {OPT_Imm, OPS_32, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Op0Add, OPAP_None}, + {OPT_Imm, OPS_64, 0, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Op0Add, OPAP_None}, + {OPT_Imm, OPS_64, 1, 0, OPTM_None, OPA_Imm, OPAP_SImm32Avail}, + {OPT_RM, OPS_8, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 0, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_RM, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_16, 0, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_RM, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_32, 0, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_RM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_32, 0, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_RM, OPS_8, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_RM, OPS_16, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_16, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_RM, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_32, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_RM, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_32, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_CR4, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_CRReg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_CRReg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_CR4, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_CRReg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_DRReg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_DRReg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_DRReg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDRM, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_16, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_16, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_16, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Mem, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_16, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_8, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_RM, OPS_8, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_RM, OPS_16, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_RM, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_64, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_RM, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_Any, 0, 0, OPTM_None, OPA_JmpRel, OPAP_None}, + {OPT_Creg, OPS_32, 0, 0, OPTM_None, OPA_AdSizeR, OPAP_None}, + {OPT_Imm, OPS_Any, 0, 0, OPTM_Short, OPA_JmpRel, OPAP_None}, + {OPT_Creg, OPS_32, 0, 0, OPTM_None, OPA_AdSizeR, OPAP_None}, + {OPT_SIMDRM, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDRM, OPS_256, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Imm, OPS_Any, 0, 0, OPTM_None, OPA_JmpRel, OPAP_None}, + {OPT_Creg, OPS_64, 0, 0, OPTM_None, OPA_AdSizeR, OPAP_None}, + {OPT_Imm, OPS_Any, 0, 0, OPTM_Short, OPA_JmpRel, OPAP_None}, + {OPT_Creg, OPS_64, 0, 0, OPTM_None, OPA_AdSizeR, OPAP_None}, + {OPT_Imm, OPS_Any, 0, 0, OPTM_None, OPA_JmpRel, OPAP_None}, + {OPT_Creg, OPS_16, 0, 0, OPTM_None, OPA_AdSizeR, OPAP_None}, + {OPT_Imm, OPS_Any, 0, 0, OPTM_Short, OPA_JmpRel, OPAP_None}, + {OPT_Creg, OPS_16, 0, 0, OPTM_None, OPA_AdSizeR, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Areg, OPS_8, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Areg, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Areg, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Dreg, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Areg, OPS_8, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Dreg, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Areg, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Dreg, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Areg, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_EAVEX, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_EAVEX, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_MemrAX, OPS_Any, 0, 0, OPTM_None, OPA_AdSizeEA, OPAP_None}, + {OPT_Creg, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Areg, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Reg, OPS_16, 0, 0, OPTM_None, OPA_Op0Add, OPAP_None}, + {OPT_Reg, OPS_16, 0, 0, OPTM_None, OPA_Op0Add, OPAP_None}, + {OPT_Areg, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Areg, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Areg, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Op0Add, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Op0Add, OPAP_None}, + {OPT_Areg, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Areg, OPS_64, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Areg, OPS_64, 0, 0, OPTM_None, OPA_Op0Add, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Op0Add, OPAP_None}, + {OPT_Areg, OPS_64, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Reg, OPS_16, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_Any, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_Any, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_Any, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_8, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_16, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_8, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_RM, OPS_8, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Creg, OPS_8, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_RM, OPS_8, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm1, OPS_8, 1, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_RM, OPS_16, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Creg, OPS_8, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_RM, OPS_16, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm1, OPS_8, 1, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_RM, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Creg, OPS_8, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_RM, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm1, OPS_8, 1, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_RM, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Creg, OPS_8, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_RM, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm1, OPS_8, 1, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Imm, OPS_16, 1, 0, OPTM_None, OPA_JmpFar, OPAP_None}, + {OPT_Imm, OPS_16, 1, 0, OPTM_None, OPA_JmpFar, OPAP_None}, + {OPT_Imm, OPS_16, 1, 0, OPTM_None, OPA_JmpFar, OPAP_None}, + {OPT_Imm, OPS_32, 1, 0, OPTM_None, OPA_JmpFar, OPAP_None}, + {OPT_Imm, OPS_16, 1, 0, OPTM_None, OPA_JmpFar, OPAP_None}, + {OPT_Imm, OPS_BITS, 1, 0, OPTM_None, OPA_JmpFar, OPAP_None}, + {OPT_Areg, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Imm, OPS_16, 1, 0, OPTM_None, OPA_Imm, OPAP_SImm8}, + {OPT_Areg, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Imm, OPS_32, 1, 0, OPTM_None, OPA_Imm, OPAP_SImm8}, + {OPT_Areg, OPS_64, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Imm, OPS_32, 1, 0, OPTM_None, OPA_Imm, OPAP_SImm8}, + {OPT_RM, OPS_16, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 0, 0, OPTM_None, OPA_SImm, OPAP_None}, + {OPT_RM, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_16, 0, 0, OPTM_None, OPA_Imm, OPAP_SImm8}, + {OPT_RM, OPS_16, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_16, 1, 0, OPTM_None, OPA_Imm, OPAP_SImm8}, + {OPT_RM, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 0, 0, OPTM_None, OPA_SImm, OPAP_None}, + {OPT_RM, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_32, 0, 0, OPTM_None, OPA_Imm, OPAP_SImm8}, + {OPT_RM, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_32, 1, 0, OPTM_None, OPA_Imm, OPAP_SImm8}, + {OPT_RM, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_8, 0, 0, OPTM_None, OPA_SImm, OPAP_None}, + {OPT_RM, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_32, 1, 0, OPTM_None, OPA_Imm, OPAP_SImm8}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_256, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Mem, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_256, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Reg, OPS_16, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_8, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_16, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDRM, OPS_128, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDRM, OPS_256, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDRM, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Mem, OPS_80, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SegReg, OPS_16, 1, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDRM, OPS_64, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Areg, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Imm, OPS_16, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Areg, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Imm, OPS_32, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Areg, OPS_64, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Imm, OPS_32, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_SegReg, OPS_16, 1, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_80, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_Mem, OPS_128, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_8, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_8, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_SpareVEX, OPAP_None}, + {OPT_SIMDRM, OPS_128, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_SIMDReg, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_256, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_32, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_16, 1, 0, OPTM_None, OPA_EA, OPAP_A16}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_Imm, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Spare, OPAP_None}, + {OPT_RM, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_SpareVEX, OPAP_None}, + {OPT_RM, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SIMDReg, OPS_128, 0, 0, OPTM_None, OPA_SpareVEX, OPAP_None}, + {OPT_RM, OPS_64, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Mem, OPS_16, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Mem, OPS_32, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_MemEAX, OPS_Any, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Mem, OPS_80, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Reg, OPS_BITS, 0, 0, OPTM_None, OPA_Op0Add, OPAP_None}, + {OPT_RM, OPS_BITS, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_SS, OPS_Any, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_SS, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_SS, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_DS, OPS_Any, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_DS, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_DS, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_ES, OPS_Any, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_ES, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_ES, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_FS, OPS_Any, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_FS, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_FS, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_GS, OPS_Any, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_GS, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_GS, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_Mem, OPS_Any, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_ImmNotSegOff, OPS_Any, 0, 0, OPTM_None, OPA_JmpRel, OPAP_None}, + {OPT_ImmNotSegOff, OPS_16, 0, 0, OPTM_None, OPA_JmpRel, OPAP_None}, + {OPT_ImmNotSegOff, OPS_32, 0, 0, OPTM_None, OPA_JmpRel, OPAP_None}, + {OPT_Imm, OPS_16, 0, 0, OPTM_Near, OPA_JmpRel, OPAP_None}, + {OPT_Imm, OPS_32, 0, 0, OPTM_Near, OPA_JmpRel, OPAP_None}, + {OPT_Imm, OPS_Any, 0, 0, OPTM_Near, OPA_JmpRel, OPAP_None}, + {OPT_Reg, OPS_BITS, 0, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_RM, OPS_16, 0, 0, OPTM_Near, OPA_EA, OPAP_None}, + {OPT_RM, OPS_32, 0, 0, OPTM_Near, OPA_EA, OPAP_None}, + {OPT_RM, OPS_64, 0, 0, OPTM_Near, OPA_EA, OPAP_None}, + {OPT_Mem, OPS_Any, 0, 0, OPTM_Near, OPA_EA, OPAP_None}, + {OPT_Mem, OPS_16, 0, 0, OPTM_Far, OPA_EA, OPAP_None}, + {OPT_Mem, OPS_32, 0, 0, OPTM_Far, OPA_EA, OPAP_None}, + {OPT_Mem, OPS_64, 0, 0, OPTM_Far, OPA_EA, OPAP_None}, + {OPT_Mem, OPS_Any, 0, 0, OPTM_Far, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_16, 0, 0, OPTM_Far, OPA_JmpFar, OPAP_None}, + {OPT_Imm, OPS_32, 0, 0, OPTM_Far, OPA_JmpFar, OPAP_None}, + {OPT_Imm, OPS_Any, 0, 0, OPTM_Far, OPA_JmpFar, OPAP_None}, + {OPT_Imm, OPS_16, 0, 0, OPTM_None, OPA_JmpFar, OPAP_None}, + {OPT_Imm, OPS_32, 0, 0, OPTM_None, OPA_JmpFar, OPAP_None}, + {OPT_Imm, OPS_Any, 0, 0, OPTM_None, OPA_JmpFar, OPAP_None}, + {OPT_Reg, OPS_80, 0, 0, OPTM_To, OPA_Op1Add, OPAP_None}, + {OPT_Reg, OPS_32, 0, 0, OPTM_None, OPA_Op1Add, OPAP_None}, + {OPT_Reg, OPS_64, 0, 0, OPTM_None, OPA_Op1Add, OPAP_None}, + {OPT_Mem, OPS_BITS, 1, 0, OPTM_None, OPA_EA, OPAP_None}, + {OPT_Imm, OPS_16, 0, 0, OPTM_None, OPA_JmpRel, OPAP_None}, + {OPT_Imm, OPS_32, 0, 0, OPTM_None, OPA_JmpRel, OPAP_None}, + {OPT_Imm, OPS_8, 1, 0, OPTM_None, OPA_SImm, OPAP_None}, + {OPT_Imm, OPS_BITS, 1, 0, OPTM_None, OPA_Imm, OPAP_SImm8}, + {OPT_Imm, OPS_32, 0, 0, OPTM_None, OPA_SImm, OPAP_None}, + {OPT_CS, OPS_Any, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_CS, OPS_16, 0, 0, OPTM_None, OPA_None, OPAP_None}, + {OPT_CS, OPS_32, 0, 0, OPTM_None, OPA_None, OPAP_None} +}; + +static const x86_insn_info empty_insn[] = { + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0 } +}; + +static const x86_insn_info not64_insn[] = { + { SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0 } +}; + +static const x86_insn_info onebyte_insn[] = { + { SUF_Z, 0, 0, 0, 0, {MOD_Op0Add, MOD_OpSizeR, MOD_DOpS64R}, 0, 0, 0, 1, {0x00, 0, 0}, 0, 0, 0 } +}; + +static const x86_insn_info onebyte_prefix_insn[] = { + { SUF_Z, 0, 0, 0, 0, {MOD_PreAdd, MOD_Op0Add, 0}, 0, 0, 0x00, 1, {0x00, 0, 0}, 0, 0, 0 } +}; + +static const x86_insn_info twobyte_insn[] = { + { SUF_L|SUF_Q|SUF_Z, 0, 0, 0, 0, {MOD_Op0Add, MOD_Op1Add, 0}, 0, 0, 0, 2, {0x00, 0x00, 0}, 0, 0, 0 } +}; + +static const x86_insn_info threebyte_insn[] = { + { SUF_Z, 0, 0, 0, 0, {MOD_Op0Add, MOD_Op1Add, MOD_Op2Add}, 0, 0, 0, 3, {0x00, 0x00, 0x00}, 0, 0, 0 } +}; + +static const x86_insn_info onebytemem_insn[] = { + { SUF_L|SUF_Q|SUF_S|SUF_Z, 0, 0, 0, 0, {MOD_SpAdd, MOD_Op0Add, 0}, 0, 0, 0, 1, {0x00, 0, 0}, 0, 1, 674 } +}; + +static const x86_insn_info twobytemem_insn[] = { + { SUF_L|SUF_Q|SUF_S|SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_SpAdd, MOD_Op0Add, MOD_Op1Add}, 0, 0, 0, 2, {0x00, 0x00, 0}, 0, 1, 532 } +}; + +static const x86_insn_info mov_insn[] = { + { SUF_B|SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xA0, 0, 0}, 0, 2, 365 }, + { SUF_W|SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xA1, 0, 0}, 0, 2, 367 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xA1, 0, 0}, 0, 2, 369 }, + { SUF_B|SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xA2, 0, 0}, 0, 2, 371 }, + { SUF_W|SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xA3, 0, 0}, 0, 2, 373 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xA3, 0, 0}, 0, 2, 375 }, + { SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xA0, 0, 0}, 0, 2, 341 }, + { SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xA1, 0, 0}, 0, 2, 343 }, + { SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xA1, 0, 0}, 0, 2, 345 }, + { SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0xA1, 0, 0}, 0, 2, 347 }, + { SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xA2, 0, 0}, 0, 2, 349 }, + { SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xA3, 0, 0}, 0, 2, 351 }, + { SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xA3, 0, 0}, 0, 2, 353 }, + { SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0xA3, 0, 0}, 0, 2, 355 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x88, 0xA2, 0}, 0, 2, 377 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x89, 0xA3, 0}, 0, 2, 379 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x89, 0xA3, 0}, 0, 2, 381 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0x89, 0xA3, 0}, 0, 2, 383 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x88, 0, 0}, 0, 2, 323 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x89, 0, 0}, 0, 2, 260 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x89, 0, 0}, 0, 2, 266 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0x89, 0, 0}, 0, 2, 272 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x8A, 0xA0, 0}, 0, 2, 385 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x8B, 0xA1, 0}, 0, 2, 387 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x8B, 0xA1, 0}, 0, 2, 389 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0x8B, 0xA1, 0}, 0, 2, 391 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x8A, 0, 0}, 0, 2, 325 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x8B, 0, 0}, 0, 2, 98 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x8B, 0, 0}, 0, 2, 101 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0x8B, 0, 0}, 0, 2, 104 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x8C, 0, 0}, 0, 2, 393 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x8C, 0, 0}, 0, 2, 395 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x8C, 0, 0}, 0, 2, 397 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0x8C, 0, 0}, 0, 2, 399 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x8E, 0, 0}, 0, 2, 401 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x8E, 0, 0}, 0, 2, 396 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x8E, 0, 0}, 0, 2, 398 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xB0, 0, 0}, 0, 2, 403 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xB8, 0, 0}, 0, 2, 405 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xB8, 0, 0}, 0, 2, 407 }, + { GAS_ILLEGAL|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0xB8, 0, 0}, 0, 2, 409 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0xB8, 0xC7, 0}, 0, 2, 411 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xC6, 0, 0}, 0, 2, 413 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xC7, 0, 0}, 0, 2, 415 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xC7, 0, 0}, 0, 2, 417 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0xC7, 0, 0}, 0, 2, 419 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xC6, 0, 0}, 0, 2, 421 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xC7, 0, 0}, 0, 2, 423 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xC7, 0, 0}, 0, 2, 425 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0xC7, 0, 0}, 0, 2, 427 }, + { SUF_L|SUF_Z, NOT_64, CPU_586, CPU_Priv, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x22, 0}, 0, 2, 429 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, CPU_Priv, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x22, 0}, 0, 2, 431 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_Priv, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x22, 0}, 0, 2, 433 }, + { SUF_L|SUF_Z, NOT_64, CPU_586, CPU_Priv, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x20, 0}, 0, 2, 435 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, CPU_Priv, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x20, 0}, 0, 2, 430 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_Priv, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x20, 0}, 0, 2, 437 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, CPU_Priv, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x23, 0}, 0, 2, 439 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_Priv, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x23, 0}, 0, 2, 441 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, CPU_Priv, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x21, 0}, 0, 2, 440 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_Priv, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x21, 0}, 0, 2, 443 }, + { GAS_ONLY|SUF_Q|SUF_Z, 0, CPU_MMX, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x6F, 0}, 0, 2, 140 }, + { GAS_ONLY|SUF_Q|SUF_Z, ONLY_64, CPU_MMX, 0, 0, {0, 0, 0}, 64, 0, 0, 2, {0x0F, 0x6E, 0}, 0, 2, 295 }, + { GAS_ONLY|SUF_Q|SUF_Z, 0, CPU_MMX, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x7F, 0}, 0, 2, 331 }, + { GAS_ONLY|SUF_Q|SUF_Z, ONLY_64, CPU_MMX, 0, 0, {0, 0, 0}, 64, 0, 0, 2, {0x0F, 0x7E, 0}, 0, 2, 297 }, + { GAS_ONLY|SUF_Q|SUF_Z, 0, CPU_SSE2, 0, 0, {0, 0, 0}, 0, 0, 0xF3, 2, {0x0F, 0x7E, 0}, 0, 2, 64 }, + { GAS_ONLY|SUF_Q|SUF_Z, 0, CPU_SSE2, 0, 0, {0, 0, 0}, 0, 0, 0xF3, 2, {0x0F, 0x7E, 0}, 0, 2, 333 }, + { GAS_ONLY|SUF_Q|SUF_Z, ONLY_64, CPU_SSE2, 0, 0, {0, 0, 0}, 64, 0, 0x66, 2, {0x0F, 0x6E, 0}, 0, 2, 301 }, + { GAS_ONLY|SUF_Q|SUF_Z, 0, CPU_SSE2, 0, 0, {0, 0, 0}, 0, 0, 0x66, 2, {0x0F, 0xD6, 0}, 0, 2, 335 }, + { GAS_ONLY|SUF_Q|SUF_Z, ONLY_64, CPU_SSE2, 0, 0, {0, 0, 0}, 64, 0, 0x66, 2, {0x0F, 0x7E, 0}, 0, 2, 182 } +}; + +static const x86_insn_info movabs_insn[] = { + { SUF_B|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xA0, 0, 0}, 0, 2, 341 }, + { SUF_W|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xA1, 0, 0}, 0, 2, 343 }, + { SUF_L|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xA1, 0, 0}, 0, 2, 345 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0xA1, 0, 0}, 0, 2, 347 }, + { SUF_B|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xA2, 0, 0}, 0, 2, 349 }, + { SUF_W|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xA3, 0, 0}, 0, 2, 351 }, + { SUF_L|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xA3, 0, 0}, 0, 2, 353 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0xA3, 0, 0}, 0, 2, 355 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0xB8, 0, 0}, 0, 2, 357 } +}; + +static const x86_insn_info movszx_insn[] = { + { SUF_B|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 16, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 603 }, + { SUF_B|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 32, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 537 }, + { SUF_B|SUF_Z, ONLY_64, 0, 0, 0, {MOD_Op1Add, 0, 0}, 64, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 541 }, + { SUF_W|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 32, 0, 0, 2, {0x0F, 0x01, 0}, 0, 2, 539 }, + { SUF_W|SUF_Z, ONLY_64, 0, 0, 0, {MOD_Op1Add, 0, 0}, 64, 0, 0, 2, {0x0F, 0x01, 0}, 0, 2, 605 } +}; + +static const x86_insn_info movsxd_insn[] = { + { SUF_L|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0x63, 0, 0}, 0, 2, 647 } +}; + +static const x86_insn_info push_insn[] = { + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0x50, 0, 0}, 0, 1, 657 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 64, 0, 1, {0x50, 0, 0}, 0, 1, 405 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x50, 0, 0}, 0, 1, 407 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0x50, 0, 0}, 0, 1, 357 }, + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0xFF, 0, 0}, 6, 1, 658 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 64, 0, 1, {0xFF, 0, 0}, 6, 1, 287 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xFF, 0, 0}, 6, 1, 283 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0xFF, 0, 0}, 6, 1, 286 }, + { GAS_ILLEGAL|SUF_Z, 0, CPU_186, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0x6A, 0, 0}, 0, 1, 100 }, + { GAS_ONLY|SUF_Z, 0, CPU_186, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0x6A, 0, 0}, 0, 1, 702 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 64, 0, 1, {0x6A, 0x68, 0}, 0, 1, 112 }, + { GAS_ILLEGAL|SUF_Z, NOT_64, CPU_186, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x6A, 0x68, 0}, 0, 1, 703 }, + { SUF_W|SUF_Z, 0, CPU_186, 0, 0, {0, 0, 0}, 16, 64, 0, 1, {0x6A, 0x68, 0}, 0, 1, 574 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x6A, 0x68, 0}, 0, 1, 576 }, + { GAS_ILLEGAL|SUF_Z, 0, CPU_186, 0, 0, {0, 0, 0}, 16, 64, 0, 1, {0x68, 0, 0}, 0, 1, 416 }, + { GAS_ILLEGAL|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x68, 0, 0}, 0, 1, 418 }, + { GAS_ILLEGAL|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 64, 0, 1, {0x68, 0, 0}, 0, 1, 704 }, + { SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x0E, 0, 0}, 0, 1, 705 }, + { SUF_W|SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x0E, 0, 0}, 0, 1, 706 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x0E, 0, 0}, 0, 1, 707 }, + { SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x16, 0, 0}, 0, 1, 659 }, + { SUF_W|SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x16, 0, 0}, 0, 1, 660 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x16, 0, 0}, 0, 1, 661 }, + { SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x1E, 0, 0}, 0, 1, 662 }, + { SUF_W|SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x1E, 0, 0}, 0, 1, 663 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x1E, 0, 0}, 0, 1, 664 }, + { SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x06, 0, 0}, 0, 1, 665 }, + { SUF_W|SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x06, 0, 0}, 0, 1, 666 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x06, 0, 0}, 0, 1, 667 }, + { SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0xA0, 0}, 0, 1, 668 }, + { SUF_W|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 16, 0, 0, 2, {0x0F, 0xA0, 0}, 0, 1, 669 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 2, {0x0F, 0xA0, 0}, 0, 1, 670 }, + { SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0xA8, 0}, 0, 1, 671 }, + { SUF_W|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 16, 0, 0, 2, {0x0F, 0xA8, 0}, 0, 1, 672 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 2, {0x0F, 0xA8, 0}, 0, 1, 673 } +}; + +static const x86_insn_info pop_insn[] = { + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0x58, 0, 0}, 0, 1, 657 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 64, 0, 1, {0x58, 0, 0}, 0, 1, 405 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x58, 0, 0}, 0, 1, 407 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0x58, 0, 0}, 0, 1, 357 }, + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0x8F, 0, 0}, 0, 1, 658 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 64, 0, 1, {0x8F, 0, 0}, 0, 1, 287 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x8F, 0, 0}, 0, 1, 283 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0x8F, 0, 0}, 0, 1, 286 }, + { SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x17, 0, 0}, 0, 1, 659 }, + { SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x17, 0, 0}, 0, 1, 660 }, + { SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x17, 0, 0}, 0, 1, 661 }, + { SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x1F, 0, 0}, 0, 1, 662 }, + { SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x1F, 0, 0}, 0, 1, 663 }, + { SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x1F, 0, 0}, 0, 1, 664 }, + { SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x07, 0, 0}, 0, 1, 665 }, + { SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x07, 0, 0}, 0, 1, 666 }, + { SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x07, 0, 0}, 0, 1, 667 }, + { SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0xA1, 0}, 0, 1, 668 }, + { SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 16, 0, 0, 2, {0x0F, 0xA1, 0}, 0, 1, 669 }, + { SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 2, {0x0F, 0xA1, 0}, 0, 1, 670 }, + { SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0xA9, 0}, 0, 1, 671 }, + { SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 16, 0, 0, 2, {0x0F, 0xA9, 0}, 0, 1, 672 }, + { SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 2, {0x0F, 0xA9, 0}, 0, 1, 673 } +}; + +static const x86_insn_info xchg_insn[] = { + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x86, 0, 0}, 0, 2, 323 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x86, 0, 0}, 0, 2, 325 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x90, 0, 0}, 0, 2, 517 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x90, 0, 0}, 0, 2, 519 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x87, 0, 0}, 0, 2, 260 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x87, 0, 0}, 0, 2, 98 }, + { SUF_L|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x87, 0, 0}, 0, 2, 521 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x90, 0, 0}, 0, 2, 523 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x90, 0, 0}, 0, 2, 525 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x87, 0, 0}, 0, 2, 266 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x87, 0, 0}, 0, 2, 101 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x90, 0, 0}, 0, 2, 527 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0x90, 0, 0}, 0, 2, 356 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0x90, 0, 0}, 0, 2, 529 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0x87, 0, 0}, 0, 2, 272 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0x87, 0, 0}, 0, 2, 104 } +}; + +static const x86_insn_info in_insn[] = { + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xE4, 0, 0}, 0, 2, 498 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xE5, 0, 0}, 0, 2, 500 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xE5, 0, 0}, 0, 2, 617 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xEC, 0, 0}, 0, 2, 504 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xED, 0, 0}, 0, 2, 506 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xED, 0, 0}, 0, 2, 502 }, + { GAS_ONLY|SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xE4, 0, 0}, 0, 1, 3 }, + { GAS_ONLY|SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xE5, 0, 0}, 0, 1, 3 }, + { GAS_ONLY|SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xE5, 0, 0}, 0, 1, 3 }, + { GAS_ONLY|SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xEC, 0, 0}, 0, 1, 503 }, + { GAS_ONLY|SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xED, 0, 0}, 0, 1, 503 }, + { GAS_ONLY|SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xED, 0, 0}, 0, 1, 503 } +}; + +static const x86_insn_info out_insn[] = { + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xE6, 0, 0}, 0, 2, 497 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xE7, 0, 0}, 0, 2, 499 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xE7, 0, 0}, 0, 2, 501 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xEE, 0, 0}, 0, 2, 503 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xEF, 0, 0}, 0, 2, 505 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xEF, 0, 0}, 0, 2, 507 }, + { GAS_ONLY|SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xE6, 0, 0}, 0, 1, 3 }, + { GAS_ONLY|SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xE7, 0, 0}, 0, 1, 3 }, + { GAS_ONLY|SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xE7, 0, 0}, 0, 1, 3 }, + { GAS_ONLY|SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xEE, 0, 0}, 0, 1, 503 }, + { GAS_ONLY|SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xEF, 0, 0}, 0, 1, 503 }, + { GAS_ONLY|SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xEF, 0, 0}, 0, 1, 503 } +}; + +static const x86_insn_info lea_insn[] = { + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x8D, 0, 0}, 0, 2, 531 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x8D, 0, 0}, 0, 2, 533 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0x8D, 0, 0}, 0, 2, 535 } +}; + +static const x86_insn_info ldes_insn[] = { + { SUF_W|SUF_Z, NOT_64, 0, 0, 0, {MOD_Op0Add, 0, 0}, 16, 0, 0, 1, {0x00, 0, 0}, 0, 2, 531 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, 0, 0, {MOD_Op0Add, 0, 0}, 32, 0, 0, 1, {0x00, 0, 0}, 0, 2, 533 } +}; + +static const x86_insn_info lfgss_insn[] = { + { SUF_W|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 16, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 531 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 32, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 533 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 64, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 535 } +}; + +static const x86_insn_info arith_insn[] = { + { SUF_B|SUF_Z, 0, 0, 0, 0, {MOD_Op0Add, 0, 0}, 0, 0, 0, 1, {0x04, 0, 0}, 0, 2, 498 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_Op2Add, MOD_Op1AddSp, 0}, 16, 0, 0, 2, {0x83, 0xC0, 0x05}, 0, 2, 573 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op2Add, MOD_Op1AddSp, 0}, 32, 0, 0, 2, {0x83, 0xC0, 0x05}, 0, 2, 575 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {MOD_Op2Add, MOD_Op1AddSp, 0}, 64, 0, 0, 2, {0x83, 0xC0, 0x05}, 0, 2, 577 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 0, 0, 0, 1, {0x80, 0, 0}, 0, 2, 421 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 0, 0, 0, 1, {0x80, 0, 0}, 0, 2, 413 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 16, 0, 0, 1, {0x83, 0, 0}, 0, 2, 579 }, + { GAS_ILLEGAL|SUF_Z, 0, 0, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 16, 0, 0, 1, {0x83, 0x81, 0}, 0, 2, 581 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 16, 0, 0, 1, {0x83, 0x81, 0}, 0, 2, 583 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 32, 0, 0, 1, {0x83, 0, 0}, 0, 2, 585 }, + { GAS_ILLEGAL|SUF_Z, NOT_64, CPU_386, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 32, 0, 0, 1, {0x83, 0x81, 0}, 0, 2, 587 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 32, 0, 0, 1, {0x83, 0x81, 0}, 0, 2, 589 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 64, 0, 0, 1, {0x83, 0, 0}, 0, 2, 591 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 64, 0, 0, 1, {0x83, 0x81, 0}, 0, 2, 593 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {MOD_Op0Add, 0, 0}, 0, 0, 0, 1, {0x00, 0, 0}, 0, 2, 323 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_Op0Add, 0, 0}, 16, 0, 0, 1, {0x01, 0, 0}, 0, 2, 260 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op0Add, 0, 0}, 32, 0, 0, 1, {0x01, 0, 0}, 0, 2, 266 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {MOD_Op0Add, 0, 0}, 64, 0, 0, 1, {0x01, 0, 0}, 0, 2, 272 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {MOD_Op0Add, 0, 0}, 0, 0, 0, 1, {0x02, 0, 0}, 0, 2, 325 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_Op0Add, 0, 0}, 16, 0, 0, 1, {0x03, 0, 0}, 0, 2, 98 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op0Add, 0, 0}, 32, 0, 0, 1, {0x03, 0, 0}, 0, 2, 101 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {MOD_Op0Add, 0, 0}, 64, 0, 0, 1, {0x03, 0, 0}, 0, 2, 104 } +}; + +static const x86_insn_info incdec_insn[] = { + { SUF_B|SUF_Z, 0, 0, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 0, 0, 0, 1, {0xFE, 0, 0}, 0, 1, 421 }, + { SUF_W|SUF_Z, NOT_64, 0, 0, 0, {MOD_Op0Add, 0, 0}, 16, 0, 0, 1, {0x00, 0, 0}, 0, 1, 405 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 16, 0, 0, 1, {0xFF, 0, 0}, 0, 1, 287 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, 0, 0, {MOD_Op0Add, 0, 0}, 32, 0, 0, 1, {0x00, 0, 0}, 0, 1, 407 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 32, 0, 0, 1, {0xFF, 0, 0}, 0, 1, 283 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 64, 0, 0, 1, {0xFF, 0, 0}, 0, 1, 286 } +}; + +static const x86_insn_info f6_insn[] = { + { SUF_B|SUF_Z, 0, 0, 0, 0, {MOD_SpAdd, 0, 0}, 0, 0, 0, 1, {0xF6, 0, 0}, 0, 1, 421 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_SpAdd, 0, 0}, 16, 0, 0, 1, {0xF7, 0, 0}, 0, 1, 287 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_SpAdd, 0, 0}, 32, 0, 0, 1, {0xF7, 0, 0}, 0, 1, 283 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {MOD_SpAdd, 0, 0}, 64, 0, 0, 1, {0xF7, 0, 0}, 0, 1, 286 } +}; + +static const x86_insn_info div_insn[] = { + { SUF_B|SUF_Z, 0, 0, 0, 0, {MOD_SpAdd, 0, 0}, 0, 0, 0, 1, {0xF6, 0, 0}, 0, 1, 421 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_SpAdd, 0, 0}, 16, 0, 0, 1, {0xF7, 0, 0}, 0, 1, 287 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_SpAdd, 0, 0}, 32, 0, 0, 1, {0xF7, 0, 0}, 0, 1, 283 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {MOD_SpAdd, 0, 0}, 64, 0, 0, 1, {0xF7, 0, 0}, 0, 1, 286 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {MOD_SpAdd, 0, 0}, 0, 0, 0, 1, {0xF6, 0, 0}, 0, 2, 471 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_SpAdd, 0, 0}, 16, 0, 0, 1, {0xF7, 0, 0}, 0, 2, 473 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_SpAdd, 0, 0}, 32, 0, 0, 1, {0xF7, 0, 0}, 0, 2, 475 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {MOD_SpAdd, 0, 0}, 64, 0, 0, 1, {0xF7, 0, 0}, 0, 2, 477 } +}; + +static const x86_insn_info test_insn[] = { + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xA8, 0, 0}, 0, 2, 498 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xA9, 0, 0}, 0, 2, 623 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xA9, 0, 0}, 0, 2, 625 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0xA9, 0, 0}, 0, 2, 627 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xF6, 0, 0}, 0, 2, 421 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xF6, 0, 0}, 0, 2, 413 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xF7, 0, 0}, 0, 2, 423 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xF7, 0, 0}, 0, 2, 415 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xF7, 0, 0}, 0, 2, 425 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xF7, 0, 0}, 0, 2, 417 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0xF7, 0, 0}, 0, 2, 427 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0xF7, 0, 0}, 0, 2, 419 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x84, 0, 0}, 0, 2, 323 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x85, 0, 0}, 0, 2, 260 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x85, 0, 0}, 0, 2, 266 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0x85, 0, 0}, 0, 2, 272 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x84, 0, 0}, 0, 2, 325 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x85, 0, 0}, 0, 2, 98 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x85, 0, 0}, 0, 2, 101 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0x85, 0, 0}, 0, 2, 104 } +}; + +static const x86_insn_info aadm_insn[] = { + { SUF_Z, 0, 0, 0, 0, {MOD_Op0Add, 0, 0}, 0, 0, 0, 2, {0xD4, 0x0A, 0}, 0, 0, 0 }, + { SUF_Z, 0, 0, 0, 0, {MOD_Op0Add, 0, 0}, 0, 0, 0, 1, {0xD4, 0, 0}, 0, 1, 3 } +}; + +static const x86_insn_info imul_insn[] = { + { SUF_B|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xF6, 0, 0}, 5, 1, 421 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xF7, 0, 0}, 5, 1, 287 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xF7, 0, 0}, 5, 1, 283 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0xF7, 0, 0}, 5, 1, 286 }, + { SUF_W|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 16, 0, 0, 2, {0x0F, 0xAF, 0}, 0, 2, 98 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 2, {0x0F, 0xAF, 0}, 0, 2, 101 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_386, 0, 0, {0, 0, 0}, 64, 0, 0, 2, {0x0F, 0xAF, 0}, 0, 2, 104 }, + { SUF_W|SUF_Z, 0, CPU_186, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x6B, 0, 0}, 0, 3, 98 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x6B, 0, 0}, 0, 3, 101 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_186, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0x6B, 0, 0}, 0, 3, 104 }, + { SUF_W|SUF_Z, 0, CPU_186, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x6B, 0, 0}, 0, 2, 303 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x6B, 0, 0}, 0, 2, 305 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_186, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0x6B, 0, 0}, 0, 2, 307 }, + { SUF_W|SUF_Z, 0, CPU_186, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x6B, 0x69, 0}, 0, 3, 107 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x6B, 0x69, 0}, 0, 3, 110 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_186, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0x6B, 0x69, 0}, 0, 3, 113 }, + { SUF_W|SUF_Z, 0, CPU_186, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x6B, 0x69, 0}, 0, 2, 309 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x6B, 0x69, 0}, 0, 2, 311 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_186, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0x6B, 0x69, 0}, 0, 2, 313 } +}; + +static const x86_insn_info shift_insn[] = { + { SUF_B|SUF_Z, 0, 0, 0, 0, {MOD_SpAdd, 0, 0}, 0, 0, 0, 1, {0xD2, 0, 0}, 0, 2, 551 }, + { SUF_B|SUF_Z, 0, 0, 0, 0, {MOD_SpAdd, 0, 0}, 0, 0, 0, 1, {0xD0, 0, 0}, 0, 2, 553 }, + { SUF_B|SUF_Z, 0, CPU_186, 0, 0, {MOD_SpAdd, 0, 0}, 0, 0, 0, 1, {0xC0, 0, 0}, 0, 2, 421 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_SpAdd, 0, 0}, 16, 0, 0, 1, {0xD3, 0, 0}, 0, 2, 555 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_SpAdd, 0, 0}, 16, 0, 0, 1, {0xD1, 0, 0}, 0, 2, 557 }, + { SUF_W|SUF_Z, 0, CPU_186, 0, 0, {MOD_SpAdd, 0, 0}, 16, 0, 0, 1, {0xC1, 0, 0}, 0, 2, 287 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_SpAdd, 0, 0}, 32, 0, 0, 1, {0xD3, 0, 0}, 0, 2, 559 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_SpAdd, 0, 0}, 32, 0, 0, 1, {0xD1, 0, 0}, 0, 2, 561 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_SpAdd, 0, 0}, 32, 0, 0, 1, {0xC1, 0, 0}, 0, 2, 289 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {MOD_SpAdd, 0, 0}, 64, 0, 0, 1, {0xD3, 0, 0}, 0, 2, 563 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {MOD_SpAdd, 0, 0}, 64, 0, 0, 1, {0xD1, 0, 0}, 0, 2, 565 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_186, 0, 0, {MOD_SpAdd, 0, 0}, 64, 0, 0, 1, {0xC1, 0, 0}, 0, 2, 291 }, + { GAS_ONLY|SUF_B|SUF_Z, 0, 0, 0, 0, {MOD_SpAdd, 0, 0}, 0, 0, 0, 1, {0xD0, 0, 0}, 0, 1, 421 }, + { GAS_ONLY|SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_SpAdd, 0, 0}, 16, 0, 0, 1, {0xD1, 0, 0}, 0, 1, 287 }, + { GAS_ONLY|SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_SpAdd, 0, 0}, 32, 0, 0, 1, {0xD1, 0, 0}, 0, 1, 283 }, + { GAS_ONLY|SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {MOD_SpAdd, 0, 0}, 64, 0, 0, 1, {0xD1, 0, 0}, 0, 1, 286 } +}; + +static const x86_insn_info shlrd_insn[] = { + { SUF_W|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 16, 0, 0, 2, {0x0F, 0x00, 0}, 0, 3, 260 }, + { SUF_W|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 16, 0, 0, 2, {0x0F, 0x01, 0}, 0, 3, 263 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 32, 0, 0, 2, {0x0F, 0x00, 0}, 0, 3, 266 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 32, 0, 0, 2, {0x0F, 0x01, 0}, 0, 3, 269 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 64, 0, 0, 2, {0x0F, 0x00, 0}, 0, 3, 272 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 64, 0, 0, 2, {0x0F, 0x01, 0}, 0, 3, 275 }, + { GAS_ONLY|SUF_W|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 16, 0, 0, 2, {0x0F, 0x01, 0}, 0, 2, 260 }, + { GAS_ONLY|SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 32, 0, 0, 2, {0x0F, 0x01, 0}, 0, 2, 266 }, + { GAS_ONLY|SUF_Q|SUF_Z, ONLY_64, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 64, 0, 0, 2, {0x0F, 0x01, 0}, 0, 2, 272 } +}; + +static const x86_insn_info call_insn[] = { + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 0, {0, 0, 0}, 0, 1, 675 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 0, {0, 0, 0}, 0, 1, 676 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 0, {0, 0, 0}, 0, 1, 677 }, + { SUF_L|SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 0, {0, 0, 0}, 0, 1, 677 }, + { SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xE8, 0, 0}, 0, 1, 678 }, + { SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xE8, 0, 0}, 0, 1, 679 }, + { SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 64, 0, 1, {0xE8, 0, 0}, 0, 1, 679 }, + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0xE8, 0, 0}, 0, 1, 680 }, + { SUF_W, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xFF, 0, 0}, 2, 1, 287 }, + { SUF_L, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xFF, 0, 0}, 2, 1, 283 }, + { SUF_Q, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 64, 0, 1, {0xFF, 0, 0}, 2, 1, 286 }, + { GAS_ONLY|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0xFF, 0, 0}, 2, 1, 681 }, + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0xFF, 0, 0}, 2, 1, 674 }, + { GAS_ILLEGAL|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 64, 0, 1, {0xFF, 0, 0}, 2, 1, 682 }, + { GAS_ILLEGAL|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xFF, 0, 0}, 2, 1, 683 }, + { GAS_ILLEGAL|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 64, 0, 1, {0xFF, 0, 0}, 2, 1, 684 }, + { GAS_ILLEGAL|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0xFF, 0, 0}, 2, 1, 685 }, + { GAS_ILLEGAL|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xFF, 0, 0}, 3, 1, 686 }, + { GAS_ILLEGAL|SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xFF, 0, 0}, 3, 1, 687 }, + { GAS_ILLEGAL|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0xFF, 0, 0}, 3, 1, 688 }, + { GAS_ILLEGAL|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xFF, 0, 0}, 3, 1, 689 }, + { GAS_ILLEGAL|SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x9A, 0, 0}, 0, 1, 690 }, + { GAS_ILLEGAL|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x9A, 0, 0}, 0, 1, 691 }, + { GAS_ILLEGAL|SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x9A, 0, 0}, 0, 1, 692 }, + { GAS_ILLEGAL|SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x9A, 0, 0}, 0, 1, 693 }, + { GAS_ILLEGAL|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x9A, 0, 0}, 0, 1, 694 }, + { GAS_ILLEGAL|SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x9A, 0, 0}, 0, 1, 695 }, + { GAS_ONLY|GAS_NO_REV|SUF_W, NOT_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x9A, 0, 0}, 0, 2, 567 }, + { GAS_ONLY|GAS_NO_REV|SUF_L, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x9A, 0, 0}, 0, 2, 569 }, + { GAS_ONLY|GAS_NO_REV|SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0x9A, 0, 0}, 0, 2, 571 } +}; + +static const x86_insn_info jmp_insn[] = { + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 0, {0, 0, 0}, 0, 1, 675 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 0, {0, 0, 0}, 0, 1, 676 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x00, 0, 0}, 0, 1, 677 }, + { SUF_L|SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0x00, 0, 0}, 0, 1, 677 }, + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0xEB, 0, 0}, 0, 1, 483 }, + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 64, 0, 1, {0xE9, 0, 0}, 0, 1, 678 }, + { SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xE9, 0, 0}, 0, 1, 679 }, + { SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 64, 0, 1, {0xE9, 0, 0}, 0, 1, 679 }, + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0xE9, 0, 0}, 0, 1, 680 }, + { SUF_W, 0, 0, 0, 0, {0, 0, 0}, 16, 64, 0, 1, {0xFF, 0, 0}, 4, 1, 287 }, + { SUF_L, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xFF, 0, 0}, 4, 1, 283 }, + { SUF_Q, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 64, 0, 1, {0xFF, 0, 0}, 4, 1, 286 }, + { GAS_ONLY|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0xFF, 0, 0}, 4, 1, 681 }, + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0xFF, 0, 0}, 4, 1, 674 }, + { GAS_ILLEGAL|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 64, 0, 1, {0xFF, 0, 0}, 4, 1, 682 }, + { GAS_ILLEGAL|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xFF, 0, 0}, 4, 1, 683 }, + { GAS_ILLEGAL|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 64, 0, 1, {0xFF, 0, 0}, 4, 1, 684 }, + { GAS_ILLEGAL|SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 1, {0xFF, 0, 0}, 4, 1, 685 }, + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xFF, 0, 0}, 5, 1, 686 }, + { SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xFF, 0, 0}, 5, 1, 687 }, + { SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 1, {0xFF, 0, 0}, 5, 1, 688 }, + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xFF, 0, 0}, 5, 1, 689 }, + { SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xEA, 0, 0}, 0, 1, 690 }, + { SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xEA, 0, 0}, 0, 1, 691 }, + { SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xEA, 0, 0}, 0, 1, 692 }, + { GAS_ILLEGAL|SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xEA, 0, 0}, 0, 1, 693 }, + { GAS_ILLEGAL|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xEA, 0, 0}, 0, 1, 694 }, + { GAS_ILLEGAL|SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xEA, 0, 0}, 0, 1, 695 }, + { GAS_ONLY|GAS_NO_REV|SUF_W, NOT_64, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xEA, 0, 0}, 0, 2, 567 }, + { GAS_ONLY|GAS_NO_REV|SUF_L, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xEA, 0, 0}, 0, 2, 569 }, + { GAS_ONLY|GAS_NO_REV|SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xEA, 0, 0}, 0, 2, 571 } +}; + +static const x86_insn_info ljmpcall_insn[] = { + { SUF_W, 0, 0, 0, 0, {MOD_SpAdd, 0, 0}, 16, 0, 0, 1, {0xFF, 0, 0}, 0, 1, 34 }, + { SUF_L, 0, CPU_386, 0, 0, {MOD_SpAdd, 0, 0}, 32, 0, 0, 1, {0xFF, 0, 0}, 0, 1, 58 }, + { SUF_Q, ONLY_64, 0, 0, 0, {MOD_SpAdd, 0, 0}, 64, 0, 0, 1, {0xFF, 0, 0}, 0, 1, 6 }, + { SUF_Z, 0, 0, 0, 0, {MOD_SpAdd, 0, 0}, 0, 0, 0, 1, {0xFF, 0, 0}, 0, 1, 699 }, + { GAS_NO_REV|SUF_W, NOT_64, 0, 0, 0, {MOD_Gap, MOD_Op0Add, 0}, 16, 0, 0, 1, {0x00, 0, 0}, 0, 2, 567 }, + { GAS_NO_REV|SUF_L, NOT_64, CPU_386, 0, 0, {MOD_Gap, MOD_Op0Add, 0}, 32, 0, 0, 1, {0x00, 0, 0}, 0, 2, 569 }, + { GAS_NO_REV|SUF_Z, NOT_64, 0, 0, 0, {MOD_Gap, MOD_Op0Add, 0}, 0, 0, 0, 1, {0x00, 0, 0}, 0, 2, 571 } +}; + +static const x86_insn_info retnf_insn[] = { + { SUF_Z, NOT_64, 0, 0, 0, {MOD_Op0Add, 0, 0}, 0, 0, 0, 1, {0x01, 0, 0}, 0, 0, 0 }, + { SUF_Z, NOT_64, 0, 0, 0, {MOD_Op0Add, 0, 0}, 0, 0, 0, 1, {0x00, 0, 0}, 0, 1, 406 }, + { SUF_Z, ONLY_64, 0, 0, 0, {MOD_Op0Add, MOD_OpSizeR, 0}, 0, 0, 0, 1, {0x01, 0, 0}, 0, 0, 0 }, + { SUF_Z, ONLY_64, 0, 0, 0, {MOD_Op0Add, MOD_OpSizeR, 0}, 0, 0, 0, 1, {0x00, 0, 0}, 0, 1, 406 }, + { SUF_L|SUF_Q|SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_Op0Add, MOD_OpSizeR, 0}, 0, 0, 0, 1, {0x01, 0, 0}, 0, 0, 0 }, + { SUF_L|SUF_Q|SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_Op0Add, MOD_OpSizeR, 0}, 0, 0, 0, 1, {0x00, 0, 0}, 0, 1, 406 } +}; + +static const x86_insn_info enter_insn[] = { + { GAS_NO_REV|SUF_L|SUF_Z, NOT_64, CPU_186, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xC8, 0, 0}, 0, 2, 645 }, + { GAS_NO_REV|SUF_Q|SUF_Z, ONLY_64, CPU_186, 0, 0, {0, 0, 0}, 64, 64, 0, 1, {0xC8, 0, 0}, 0, 2, 645 }, + { GAS_ONLY|GAS_NO_REV|SUF_W|SUF_Z, 0, CPU_186, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0xC8, 0, 0}, 0, 2, 645 } +}; + +static const x86_insn_info jcc_insn[] = { + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 0, {0, 0, 0}, 0, 1, 481 }, + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 16, 0, 0, 0, {0, 0, 0}, 0, 1, 700 }, + { SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 0, {0, 0, 0}, 0, 1, 701 }, + { SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 0, {0, 0, 0}, 0, 1, 701 }, + { SUF_Z, 0, 0, 0, 0, {MOD_Op0Add, 0, 0}, 0, 64, 0, 1, {0x70, 0, 0}, 0, 1, 483 }, + { SUF_Z, 0, CPU_186, 0, 0, {MOD_Op1Add, 0, 0}, 16, 64, 0, 2, {0x0F, 0x80, 0}, 0, 1, 678 }, + { SUF_Z, NOT_64, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 32, 0, 0, 2, {0x0F, 0x80, 0}, 0, 1, 679 }, + { SUF_Z, ONLY_64, 0, 0, 0, {MOD_Op1Add, 0, 0}, 64, 64, 0, 2, {0x0F, 0x80, 0}, 0, 1, 679 }, + { SUF_Z, 0, CPU_186, 0, 0, {MOD_Op1Add, 0, 0}, 0, 64, 0, 2, {0x0F, 0x80, 0}, 0, 1, 680 } +}; + +static const x86_insn_info jcxz_insn[] = { + { SUF_Z, 0, 0, 0, 0, {MOD_AdSizeR, 0, 0}, 0, 0, 0, 0, {0, 0, 0}, 0, 1, 481 }, + { SUF_Z, 0, 0, 0, 0, {MOD_AdSizeR, 0, 0}, 0, 64, 0, 1, {0xE3, 0, 0}, 0, 1, 483 } +}; + +static const x86_insn_info loop_insn[] = { + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 0, {0, 0, 0}, 0, 1, 481 }, + { SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 0, {0, 0, 0}, 0, 2, 493 }, + { SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 0, 64, 0, 0, {0, 0, 0}, 0, 2, 481 }, + { SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 0, {0, 0, 0}, 0, 2, 489 }, + { SUF_Z, NOT_64, 0, 0, 0, {MOD_Op0Add, 0, 0}, 0, 0, 0, 1, {0xE0, 0, 0}, 0, 1, 483 }, + { SUF_Z, 0, 0, 0, 0, {MOD_Op0Add, 0, 0}, 0, 64, 0, 1, {0xE0, 0, 0}, 0, 2, 495 }, + { SUF_Z, 0, CPU_386, 0, 0, {MOD_Op0Add, 0, 0}, 0, 64, 0, 1, {0xE0, 0, 0}, 0, 2, 483 }, + { SUF_Z, ONLY_64, 0, 0, 0, {MOD_Op0Add, 0, 0}, 0, 64, 0, 1, {0xE0, 0, 0}, 0, 2, 491 } +}; + +static const x86_insn_info loopw_insn[] = { + { SUF_Z, NOT_64, 0, 0, 0, {MOD_Gap, MOD_AdSizeR, 0}, 0, 64, 0, 0, {0, 0, 0}, 0, 1, 481 }, + { SUF_Z, NOT_64, 0, 0, 0, {MOD_Op0Add, MOD_AdSizeR, 0}, 0, 64, 0, 1, {0xE0, 0, 0}, 0, 1, 483 }, + { SUF_Z, NOT_64, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 0, {0, 0, 0}, 0, 2, 493 }, + { SUF_Z, NOT_64, 0, 0, 0, {MOD_Op0Add, 0, 0}, 0, 64, 0, 1, {0xE0, 0, 0}, 0, 2, 495 } +}; + +static const x86_insn_info loopl_insn[] = { + { SUF_Z, 0, 0, 0, 0, {MOD_Gap, MOD_AdSizeR, 0}, 0, 64, 0, 0, {0, 0, 0}, 0, 1, 481 }, + { SUF_Z, 0, 0, 0, 0, {MOD_Op0Add, MOD_AdSizeR, 0}, 0, 64, 0, 1, {0xE0, 0, 0}, 0, 1, 483 }, + { SUF_Z, 0, CPU_386, 0, 0, {0, 0, 0}, 0, 64, 0, 0, {0, 0, 0}, 0, 2, 481 }, + { SUF_Z, 0, CPU_386, 0, 0, {MOD_Op0Add, 0, 0}, 0, 64, 0, 1, {0xE0, 0, 0}, 0, 2, 483 } +}; + +static const x86_insn_info loopq_insn[] = { + { SUF_Z, ONLY_64, 0, 0, 0, {MOD_Gap, MOD_AdSizeR, 0}, 0, 64, 0, 0, {0, 0, 0}, 0, 1, 481 }, + { SUF_Z, ONLY_64, 0, 0, 0, {MOD_Op0Add, MOD_AdSizeR, 0}, 0, 64, 0, 1, {0xE0, 0, 0}, 0, 1, 483 }, + { SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 0, 64, 0, 0, {0, 0, 0}, 0, 2, 489 }, + { SUF_Z, ONLY_64, 0, 0, 0, {MOD_Op0Add, 0, 0}, 0, 64, 0, 1, {0xE0, 0, 0}, 0, 2, 491 } +}; + +static const x86_insn_info setcc_insn[] = { + { SUF_B|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0, 2, {0x0F, 0x90, 0}, 2, 1, 323 } +}; + +static const x86_insn_info cmpsd_insn[] = { + { GAS_ILLEGAL|SUF_Z, NOT_AVX, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xA7, 0, 0}, 0, 0, 0 }, + { SUF_Z, 0, CPU_SSE2, 0, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0xF2, 2, {0x0F, 0xC2, 0}, 0, 3, 92 }, + { SUF_Z, 0, CPU_SSE2, 0, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0xF2, 2, {0x0F, 0xC2, 0}, 0, 3, 95 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 0, 0, 0xC3, 2, {0x0F, 0xC2, 0}, 0, 4, 0 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 0, 0, 0xC3, 2, {0x0F, 0xC2, 0}, 0, 4, 4 } +}; + +static const x86_insn_info movsd_insn[] = { + { SUF_Z, NOT_AVX, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0xA5, 0, 0}, 0, 0, 0 }, + { SUF_Z, 0, CPU_SSE2, 0, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0xF2, 2, {0x0F, 0x10, 0}, 0, 2, 92 }, + { SUF_Z, 0, CPU_SSE2, 0, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0xF2, 2, {0x0F, 0x10, 0}, 0, 2, 451 }, + { SUF_Z, 0, CPU_SSE2, 0, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0xF2, 2, {0x0F, 0x11, 0}, 0, 2, 47 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 0, 0, 0xC3, 2, {0x0F, 0x10, 0}, 0, 3, 0 } +}; + +static const x86_insn_info bittest_insn[] = { + { SUF_W|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 16, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 260 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 32, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 266 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 64, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 272 }, + { SUF_W|SUF_Z, 0, CPU_386, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 16, 0, 0, 2, {0x0F, 0xBA, 0}, 0, 2, 287 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 32, 0, 0, 2, {0x0F, 0xBA, 0}, 0, 2, 289 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_386, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 64, 0, 0, 2, {0x0F, 0xBA, 0}, 0, 2, 291 } +}; + +static const x86_insn_info bsfr_insn[] = { + { SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_Op1Add, 0, 0}, 16, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 98 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 32, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 101 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {MOD_Op1Add, 0, 0}, 64, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 104 } +}; + +static const x86_insn_info int_insn[] = { + { SUF_Z, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xCD, 0, 0}, 0, 1, 3 } +}; + +static const x86_insn_info bound_insn[] = { + { SUF_W|SUF_Z, NOT_64, CPU_186, 0, 0, {0, 0, 0}, 16, 0, 0, 1, {0x62, 0, 0}, 0, 2, 465 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, 0, 0, {0, 0, 0}, 32, 0, 0, 1, {0x62, 0, 0}, 0, 2, 359 } +}; + +static const x86_insn_info larlsl_insn[] = { + { SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_Op1Add, 0, 0}, 16, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 455 }, + { SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_Op1Add, 0, 0}, 16, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 98 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 32, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 457 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 32, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 459 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {MOD_Op1Add, 0, 0}, 64, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 461 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {MOD_Op1Add, 0, 0}, 64, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 463 } +}; + +static const x86_insn_info arpl_insn[] = { + { SUF_W|SUF_Z, NOT_64, CPU_286, CPU_Prot, 0, {0, 0, 0}, 0, 0, 0, 1, {0x63, 0, 0}, 0, 2, 260 } +}; + +static const x86_insn_info str_insn[] = { + { SUF_W|SUF_Z, 0, CPU_286, CPU_Prot, 0, {0, 0, 0}, 16, 0, 0, 2, {0x0F, 0x00, 0}, 1, 1, 395 }, + { SUF_L|SUF_Z, 0, CPU_386, CPU_Prot, 0, {0, 0, 0}, 32, 0, 0, 2, {0x0F, 0x00, 0}, 1, 1, 26 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_286, CPU_Prot, 0, {0, 0, 0}, 64, 0, 0, 2, {0x0F, 0x00, 0}, 1, 1, 30 }, + { SUF_L|SUF_W|SUF_Z, 0, CPU_286, CPU_Prot, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x00, 0}, 1, 1, 99 } +}; + +static const x86_insn_info prot286_insn[] = { + { SUF_W|SUF_Z, 0, CPU_286, 0, 0, {MOD_SpAdd, MOD_Op1Add, 0}, 0, 0, 0, 2, {0x0F, 0x00, 0}, 0, 1, 99 } +}; + +static const x86_insn_info sldtmsw_insn[] = { + { SUF_W|SUF_Z, 0, CPU_286, 0, 0, {MOD_SpAdd, MOD_Op1Add, 0}, 0, 0, 0, 2, {0x0F, 0x00, 0}, 0, 1, 34 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_SpAdd, MOD_Op1Add, 0}, 0, 0, 0, 2, {0x0F, 0x00, 0}, 0, 1, 58 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_286, 0, 0, {MOD_SpAdd, MOD_Op1Add, 0}, 0, 0, 0, 2, {0x0F, 0x00, 0}, 0, 1, 6 }, + { SUF_W|SUF_Z, 0, CPU_286, 0, 0, {MOD_SpAdd, MOD_Op1Add, 0}, 16, 0, 0, 2, {0x0F, 0x00, 0}, 0, 1, 395 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_SpAdd, MOD_Op1Add, 0}, 32, 0, 0, 2, {0x0F, 0x00, 0}, 0, 1, 26 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_286, 0, 0, {MOD_SpAdd, MOD_Op1Add, 0}, 64, 0, 0, 2, {0x0F, 0x00, 0}, 0, 1, 30 } +}; + +static const x86_insn_info fld_insn[] = { + { SUF_S|SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xD9, 0, 0}, 0, 1, 654 }, + { SUF_L|SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xDD, 0, 0}, 0, 1, 212 }, + { SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xDB, 0, 0}, 5, 1, 656 }, + { SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0xD9, 0xC0, 0}, 0, 1, 328 } +}; + +static const x86_insn_info fstp_insn[] = { + { SUF_S|SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xD9, 0, 0}, 3, 1, 654 }, + { SUF_L|SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xDD, 0, 0}, 3, 1, 212 }, + { SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xDB, 0, 0}, 7, 1, 656 }, + { SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0xDD, 0xD8, 0}, 0, 1, 328 } +}; + +static const x86_insn_info fldstpt_insn[] = { + { SUF_Z, 0, CPU_FPU, 0, 0, {MOD_SpAdd, 0, 0}, 0, 0, 0, 1, {0xDB, 0, 0}, 0, 1, 619 } +}; + +static const x86_insn_info fildstp_insn[] = { + { SUF_S|SUF_Z, 0, CPU_FPU, 0, 0, {MOD_SpAdd, 0, 0}, 0, 0, 0, 1, {0xDF, 0, 0}, 0, 1, 653 }, + { SUF_L|SUF_Z, 0, CPU_FPU, 0, 0, {MOD_SpAdd, 0, 0}, 0, 0, 0, 1, {0xDB, 0, 0}, 0, 1, 654 }, + { SUF_Q|SUF_Z, 0, CPU_FPU, 0, 0, {MOD_Gap, MOD_Op0Add, MOD_SpAdd}, 0, 0, 0, 1, {0xDD, 0, 0}, 0, 1, 212 }, + { GAS_ONLY|SUF_Z, 0, CPU_FPU, 0, 0, {MOD_SpAdd, 0, 0}, 0, 0, 0, 1, {0xDF, 0, 0}, 0, 1, 34 } +}; + +static const x86_insn_info fbldstp_insn[] = { + { SUF_Z, 0, CPU_FPU, 0, 0, {MOD_SpAdd, 0, 0}, 0, 0, 0, 1, {0xDF, 0, 0}, 0, 1, 619 } +}; + +static const x86_insn_info fst_insn[] = { + { SUF_S|SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xD9, 0, 0}, 2, 1, 654 }, + { SUF_L|SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xDD, 0, 0}, 2, 1, 212 }, + { SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0xDD, 0xD0, 0}, 0, 1, 328 } +}; + +static const x86_insn_info fxch_insn[] = { + { SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0xD9, 0xC8, 0}, 0, 1, 328 }, + { SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0xD9, 0xC8, 0}, 0, 2, 327 }, + { SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0xD9, 0xC8, 0}, 0, 2, 329 }, + { SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0xD9, 0xC9, 0}, 0, 0, 0 } +}; + +static const x86_insn_info fcom_insn[] = { + { SUF_S|SUF_Z, 0, CPU_FPU, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 0, 0, 0, 1, {0xD8, 0, 0}, 0, 1, 654 }, + { SUF_L|SUF_Z, 0, CPU_FPU, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 0, 0, 0, 1, {0xDC, 0, 0}, 0, 1, 212 }, + { SUF_Z, 0, CPU_FPU, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0, 2, {0xD8, 0x00, 0}, 0, 1, 328 }, + { GAS_ONLY|SUF_Z, 0, CPU_FPU, 0, 0, {MOD_Gap, MOD_SpAdd, 0}, 0, 0, 0, 1, {0xD8, 0, 0}, 0, 1, 58 }, + { GAS_ONLY|SUF_Z, 0, CPU_FPU, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0, 2, {0xD8, 0x01, 0}, 0, 0, 0 }, + { GAS_ILLEGAL|SUF_Z, 0, CPU_FPU, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0, 2, {0xD8, 0x00, 0}, 0, 2, 327 } +}; + +static const x86_insn_info fcom2_insn[] = { + { SUF_Z, 0, CPU_286, CPU_FPU, 0, {MOD_Op0Add, MOD_Op1Add, 0}, 0, 0, 0, 2, {0x00, 0x00, 0}, 0, 1, 328 }, + { SUF_Z, 0, CPU_286, CPU_FPU, 0, {MOD_Op0Add, MOD_Op1Add, 0}, 0, 0, 0, 2, {0x00, 0x00, 0}, 0, 2, 327 } +}; + +static const x86_insn_info farith_insn[] = { + { SUF_S|SUF_Z, 0, CPU_FPU, 0, 0, {MOD_Gap, MOD_Gap, MOD_SpAdd}, 0, 0, 0, 1, {0xD8, 0, 0}, 0, 1, 654 }, + { SUF_L|SUF_Z, 0, CPU_FPU, 0, 0, {MOD_Gap, MOD_Gap, MOD_SpAdd}, 0, 0, 0, 1, {0xDC, 0, 0}, 0, 1, 212 }, + { SUF_Z, 0, CPU_FPU, 0, 0, {MOD_Gap, MOD_Op1Add, 0}, 0, 0, 0, 2, {0xD8, 0x00, 0}, 0, 1, 328 }, + { SUF_Z, 0, CPU_FPU, 0, 0, {MOD_Gap, MOD_Op1Add, 0}, 0, 0, 0, 2, {0xD8, 0x00, 0}, 0, 2, 327 }, + { SUF_Z, 0, CPU_FPU, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0, 2, {0xDC, 0x00, 0}, 0, 1, 696 }, + { GAS_ILLEGAL|SUF_Z, 0, CPU_FPU, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0, 2, {0xDC, 0x00, 0}, 0, 2, 329 }, + { GAS_ONLY|SUF_Z, 0, CPU_FPU, 0, 0, {MOD_Gap, MOD_Op1Add, 0}, 0, 0, 0, 2, {0xDC, 0x00, 0}, 0, 2, 329 } +}; + +static const x86_insn_info farithp_insn[] = { + { SUF_Z, 0, CPU_FPU, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0, 2, {0xDE, 0x01, 0}, 0, 0, 0 }, + { SUF_Z, 0, CPU_FPU, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0, 2, {0xDE, 0x00, 0}, 0, 1, 328 }, + { SUF_Z, 0, CPU_FPU, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0, 2, {0xDE, 0x00, 0}, 0, 2, 329 } +}; + +static const x86_insn_info fiarith_insn[] = { + { SUF_S|SUF_Z, 0, CPU_FPU, 0, 0, {MOD_SpAdd, MOD_Op0Add, 0}, 0, 0, 0, 1, {0x04, 0, 0}, 0, 1, 653 }, + { SUF_L|SUF_Z, 0, CPU_FPU, 0, 0, {MOD_SpAdd, MOD_Op0Add, 0}, 0, 0, 0, 1, {0x00, 0, 0}, 0, 1, 654 } +}; + +static const x86_insn_info fldnstcw_insn[] = { + { SUF_W|SUF_Z, 0, CPU_FPU, 0, 0, {MOD_SpAdd, 0, 0}, 0, 0, 0, 1, {0xD9, 0, 0}, 0, 1, 34 } +}; + +static const x86_insn_info fstcw_insn[] = { + { SUF_W|SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0x9B, 0xD9, 0}, 7, 1, 34 } +}; + +static const x86_insn_info fnstsw_insn[] = { + { SUF_W|SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 1, {0xDD, 0, 0}, 7, 1, 34 }, + { SUF_W|SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0xDF, 0xE0, 0}, 0, 1, 343 } +}; + +static const x86_insn_info fstsw_insn[] = { + { SUF_W|SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0x9B, 0xDD, 0}, 7, 1, 34 }, + { SUF_W|SUF_Z, 0, CPU_FPU, 0, 0, {0, 0, 0}, 0, 0, 0, 3, {0x9B, 0xDF, 0xE0}, 0, 1, 343 } +}; + +static const x86_insn_info ffree_insn[] = { + { SUF_Z, 0, CPU_FPU, 0, 0, {MOD_Op0Add, 0, 0}, 0, 0, 0, 2, {0x00, 0xC0, 0}, 0, 1, 328 } +}; + +static const x86_insn_info bswap_insn[] = { + { SUF_L|SUF_Z, 0, CPU_486, 0, 0, {0, 0, 0}, 32, 0, 0, 2, {0x0F, 0xC8, 0}, 0, 1, 697 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 2, {0x0F, 0xC8, 0}, 0, 1, 698 } +}; + +static const x86_insn_info cmpxchgxadd_insn[] = { + { SUF_B|SUF_Z, 0, CPU_486, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 323 }, + { SUF_W|SUF_Z, 0, CPU_486, 0, 0, {MOD_Op1Add, 0, 0}, 16, 0, 0, 2, {0x0F, 0x01, 0}, 0, 2, 260 }, + { SUF_L|SUF_Z, 0, CPU_486, 0, 0, {MOD_Op1Add, 0, 0}, 32, 0, 0, 2, {0x0F, 0x01, 0}, 0, 2, 266 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_486, 0, 0, {MOD_Op1Add, 0, 0}, 64, 0, 0, 2, {0x0F, 0x01, 0}, 0, 2, 272 } +}; + +static const x86_insn_info cmpxchg8b_insn[] = { + { SUF_Q|SUF_Z, 0, CPU_586, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0xC7, 0}, 1, 1, 6 } +}; + +static const x86_insn_info cmovcc_insn[] = { + { SUF_W|SUF_Z, 0, CPU_686, 0, 0, {MOD_Op1Add, 0, 0}, 16, 0, 0, 2, {0x0F, 0x40, 0}, 0, 2, 98 }, + { SUF_L|SUF_Z, 0, CPU_686, 0, 0, {MOD_Op1Add, 0, 0}, 32, 0, 0, 2, {0x0F, 0x40, 0}, 0, 2, 101 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_686, 0, 0, {MOD_Op1Add, 0, 0}, 64, 0, 0, 2, {0x0F, 0x40, 0}, 0, 2, 104 } +}; + +static const x86_insn_info fcmovcc_insn[] = { + { SUF_Z, 0, CPU_686, CPU_FPU, 0, {MOD_Op0Add, MOD_Op1Add, 0}, 0, 0, 0, 2, {0x00, 0x00, 0}, 0, 2, 327 } +}; + +static const x86_insn_info movnti_insn[] = { + { SUF_L|SUF_Z, 0, CPU_P4, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0xC3, 0}, 0, 2, 337 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_P4, 0, 0, {0, 0, 0}, 64, 0, 0, 2, {0x0F, 0xC3, 0}, 0, 2, 339 } +}; + +static const x86_insn_info clflush_insn[] = { + { SUF_Z, 0, CPU_P3, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0xAE, 0}, 7, 1, 50 } +}; + +static const x86_insn_info movd_insn[] = { + { SUF_Z, 0, CPU_386, CPU_MMX, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x6E, 0}, 0, 2, 293 }, + { SUF_Z, ONLY_64, CPU_MMX, 0, 0, {0, 0, 0}, 64, 0, 0, 2, {0x0F, 0x6E, 0}, 0, 2, 295 }, + { SUF_Z, 0, CPU_386, CPU_MMX, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x7E, 0}, 0, 2, 294 }, + { SUF_Z, ONLY_64, CPU_MMX, 0, 0, {0, 0, 0}, 64, 0, 0, 2, {0x0F, 0x7E, 0}, 0, 2, 297 }, + { SUF_Z, 0, CPU_386, CPU_SSE2, 0, {0, 0, 0}, 0, 0, 0x66, 2, {0x0F, 0x6E, 0}, 0, 2, 299 }, + { SUF_Z, ONLY_64, CPU_SSE2, 0, 0, {0, 0, 0}, 64, 0, 0x66, 2, {0x0F, 0x6E, 0}, 0, 2, 301 }, + { SUF_Z, 0, CPU_386, CPU_SSE2, 0, {0, 0, 0}, 0, 0, 0x66, 2, {0x0F, 0x7E, 0}, 0, 2, 188 }, + { SUF_Z, ONLY_64, CPU_SSE2, 0, 0, {0, 0, 0}, 64, 0, 0x66, 2, {0x0F, 0x7E, 0}, 0, 2, 182 } +}; + +static const x86_insn_info movq_insn[] = { + { GAS_ILLEGAL|SUF_Z, 0, CPU_MMX, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x6F, 0}, 0, 2, 140 }, + { GAS_ILLEGAL|SUF_Z, ONLY_64, CPU_MMX, 0, 0, {0, 0, 0}, 64, 0, 0, 2, {0x0F, 0x6E, 0}, 0, 2, 295 }, + { GAS_ILLEGAL|SUF_Z, 0, CPU_MMX, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x7F, 0}, 0, 2, 331 }, + { GAS_ILLEGAL|SUF_Z, ONLY_64, CPU_MMX, 0, 0, {0, 0, 0}, 64, 0, 0, 2, {0x0F, 0x7E, 0}, 0, 2, 297 }, + { GAS_ILLEGAL|SUF_Z, 0, CPU_SSE2, 0, 0, {0, 0, 0}, 0, 0, 0xF3, 2, {0x0F, 0x7E, 0}, 0, 2, 64 }, + { GAS_ILLEGAL|SUF_Z, 0, CPU_SSE2, 0, 0, {0, 0, 0}, 0, 0, 0xF3, 2, {0x0F, 0x7E, 0}, 0, 2, 333 }, + { GAS_ILLEGAL|SUF_Z, ONLY_64, CPU_SSE2, 0, 0, {0, 0, 0}, 64, 0, 0x66, 2, {0x0F, 0x6E, 0}, 0, 2, 301 }, + { GAS_ILLEGAL|SUF_Z, 0, CPU_SSE2, 0, 0, {0, 0, 0}, 0, 0, 0x66, 2, {0x0F, 0xD6, 0}, 0, 2, 335 }, + { GAS_ILLEGAL|SUF_Z, ONLY_64, CPU_SSE2, 0, 0, {0, 0, 0}, 64, 0, 0x66, 2, {0x0F, 0x7E, 0}, 0, 2, 182 } +}; + +static const x86_insn_info mmxsse2_insn[] = { + { SUF_Z, 0, CPU_MMX, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 140 }, + { SUF_Z, 0, CPU_SSE2, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0x66, 2, {0x0F, 0x00, 0}, 0, 2, 155 } +}; + +static const x86_insn_info pshift_insn[] = { + { SUF_Z, 0, CPU_MMX, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 140 }, + { SUF_Z, 0, CPU_MMX, 0, 0, {MOD_Gap, MOD_Op1Add, MOD_SpAdd}, 0, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 162 }, + { SUF_Z, 0, CPU_SSE2, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0x66, 2, {0x0F, 0x00, 0}, 0, 2, 155 }, + { SUF_Z, 0, CPU_SSE2, 0, 0, {MOD_Gap, MOD_Op1Add, MOD_SpAdd}, 0, 0, 0x66, 2, {0x0F, 0x00, 0}, 0, 2, 2 } +}; + +static const x86_insn_info vpshift_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0xC1, 2, {0x0F, 0x00, 0}, 0, 2, 158 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Gap, MOD_Op1Add, MOD_SpAdd}, 0, 0, 0xC1, 2, {0x0F, 0x00, 0}, 0, 2, 511 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0xC1, 2, {0x0F, 0x00, 0}, 0, 3, 12 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Gap, MOD_Op1Add, MOD_SpAdd}, 0, 0, 0xC1, 2, {0x0F, 0x00, 0}, 0, 3, 1 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0xC5, 2, {0x0F, 0x00, 0}, 0, 2, 639 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Gap, MOD_Op1Add, MOD_SpAdd}, 0, 0, 0xC5, 2, {0x0F, 0x00, 0}, 0, 2, 513 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0xC5, 2, {0x0F, 0x00, 0}, 0, 3, 8 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Gap, MOD_Op1Add, MOD_SpAdd}, 0, 0, 0xC5, 2, {0x0F, 0x00, 0}, 0, 3, 200 } +}; + +static const x86_insn_info xmm_xmm128_256_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 158 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 3, 12 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC4, 2, {0x0F, 0x00, 0}, 0, 2, 197 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC4, 2, {0x0F, 0x00, 0}, 0, 3, 16 } +}; + +static const x86_insn_info xmm_xmm128_256avx2_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 158 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 3, 12 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC4, 2, {0x0F, 0x00, 0}, 0, 2, 197 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC4, 2, {0x0F, 0x00, 0}, 0, 3, 16 } +}; + +static const x86_insn_info xmm_xmm128_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 158 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 3, 12 } +}; + +static const x86_insn_info cvt_rx_xmm32_insn[] = { + { SUF_L|SUF_Z, 0, CPU_386, CPU_SSE, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 164 }, + { SUF_L|SUF_Z, 0, CPU_386, CPU_SSE, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 359 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 64, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 170 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 64, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 361 } +}; + +static const x86_insn_info cvt_mm_xmm64_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 315 }, + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 317 } +}; + +static const x86_insn_info cvt_xmm_mm_ps_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 333 } +}; + +static const x86_insn_info cvt_xmm_rmx_insn[] = { + { SUF_L|SUF_Z, 0, CPU_386, CPU_SSE, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 649 }, + { SUF_L|SUF_Z, NOT_64, CPU_386, CPU_SSE, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 239 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 64, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 651 }, + { SUF_L|SUF_Z, ONLY_AVX|NOT_64, CPU_386, CPU_AVX, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 3, 88 }, + { SUF_L|SUF_Z, ONLY_AVX, CPU_386, CPU_AVX, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 3, 281 }, + { SUF_Q|SUF_Z, ONLY_64|ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 64, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 3, 284 } +}; + +static const x86_insn_info xmm_xmm32_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 92 }, + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 146 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 3, 0 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 3, 56 } +}; + +static const x86_insn_info ssecmp_128_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_Imm8, MOD_PreAdd, MOD_SetVEX}, 0, 0, 0, 2, {0x0F, 0xC2, 0}, 0, 2, 158 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Imm8, MOD_PreAdd, 0}, 0, 0, 0xC0, 2, {0x0F, 0xC2, 0}, 0, 3, 12 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Imm8, MOD_PreAdd, 0}, 0, 0, 0xC4, 2, {0x0F, 0xC2, 0}, 0, 3, 16 } +}; + +static const x86_insn_info ssecmp_32_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_Imm8, MOD_PreAdd, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0xC2, 0}, 0, 2, 92 }, + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_Imm8, MOD_PreAdd, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0xC2, 0}, 0, 2, 146 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Imm8, MOD_PreAdd, 0}, 0, 0, 0xC0, 2, {0x0F, 0xC2, 0}, 0, 3, 0 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Imm8, MOD_PreAdd, 0}, 0, 0, 0xC0, 2, {0x0F, 0xC2, 0}, 0, 3, 56 } +}; + +static const x86_insn_info xmm_xmm128_imm_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0, 2, {0x0F, 0x00, 0}, 0, 3, 185 } +}; + +static const x86_insn_info xmm_xmm128_imm_256avx2_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0, 2, {0x0F, 0x00, 0}, 0, 3, 185 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC4, 2, {0x0F, 0x00, 0}, 0, 3, 191 } +}; + +static const x86_insn_info xmm_xmm128_imm_256_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0, 2, {0x0F, 0x00, 0}, 0, 3, 158 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 4, 60 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC4, 2, {0x0F, 0x00, 0}, 0, 4, 20 } +}; + +static const x86_insn_info xmm_xmm32_imm_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 3, 92 }, + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 3, 146 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 4, 0 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 4, 56 } +}; + +static const x86_insn_info ldstmxcsr_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_SpAdd, MOD_SetVEX, 0}, 0, 0, 0, 2, {0x0F, 0xAE, 0}, 0, 1, 58 } +}; + +static const x86_insn_info maskmovq_insn[] = { + { SUF_Z, 0, CPU_MMX, CPU_P3, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0xF7, 0}, 0, 2, 641 } +}; + +static const x86_insn_info movau_insn[] = { + { SUF_Z, NOT_AVX, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 155 }, + { SUF_Z, NOT_AVX, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_Op1Add}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 485 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 2, 155 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_Op1Add}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 2, 485 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC4, 2, {0x0F, 0x00, 0}, 0, 2, 191 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_Op1Add}, 0, 0, 0xC4, 2, {0x0F, 0x00, 0}, 0, 2, 487 } +}; + +static const x86_insn_info movhllhps_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_Op1Add, MOD_SetVEX, 0}, 0, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 92 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 3, 0 } +}; + +static const x86_insn_info movhlp_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 95 }, + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0x01, 0}, 0, 2, 47 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 3, 4 } +}; + +static const x86_insn_info movmsk_insn[] = { + { SUF_L|SUF_Z, 0, CPU_386, CPU_SSE, 0, {MOD_PreAdd, MOD_SetVEX, 0}, 0, 0, 0x00, 2, {0x0F, 0x50, 0}, 0, 2, 164 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_SetVEX, 0}, 64, 0, 0x00, 2, {0x0F, 0x50, 0}, 0, 2, 170 }, + { SUF_L|SUF_Z, ONLY_AVX, CPU_386, CPU_AVX, 0, {MOD_PreAdd, 0, 0}, 0, 0, 0xC4, 2, {0x0F, 0x50, 0}, 0, 2, 319 }, + { SUF_Q|SUF_Z, ONLY_64|ONLY_AVX, CPU_SSE, 0, 0, {MOD_PreAdd, 0, 0}, 64, 0, 0xC4, 2, {0x0F, 0x50, 0}, 0, 2, 321 } +}; + +static const x86_insn_info movnt_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 599 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC4, 2, {0x0F, 0x00, 0}, 0, 2, 601 } +}; + +static const x86_insn_info movntq_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0xE7, 0}, 0, 2, 363 } +}; + +static const x86_insn_info movss_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0xF3, 2, {0x0F, 0x10, 0}, 0, 2, 92 }, + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0xF3, 2, {0x0F, 0x10, 0}, 0, 2, 336 }, + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0xF3, 2, {0x0F, 0x11, 0}, 0, 2, 450 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 0, 0, 0xC2, 2, {0x0F, 0x10, 0}, 0, 3, 0 } +}; + +static const x86_insn_info pextrw_insn[] = { + { SUF_L|SUF_Z, NOT_AVX, CPU_MMX, CPU_P3, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0xC5, 0}, 0, 3, 161 }, + { SUF_L|SUF_Z, 0, CPU_386, CPU_SSE2, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0x66, 2, {0x0F, 0xC5, 0}, 0, 3, 164 }, + { SUF_Q|SUF_Z, ONLY_64|NOT_AVX, CPU_MMX, CPU_P3, 0, {0, 0, 0}, 64, 0, 0, 2, {0x0F, 0xC5, 0}, 0, 3, 167 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_SSE2, 0, 0, {MOD_SetVEX, 0, 0}, 64, 0, 0x66, 2, {0x0F, 0xC5, 0}, 0, 3, 170 }, + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x15}, 0, 3, 173 }, + { SUF_Z, 0, CPU_386, CPU_SSE41, 0, {MOD_SetVEX, 0, 0}, 32, 0, 0x66, 3, {0x0F, 0x3A, 0x15}, 0, 3, 176 }, + { SUF_Z, ONLY_64, CPU_SSE41, 0, 0, {MOD_SetVEX, 0, 0}, 64, 0, 0x66, 3, {0x0F, 0x3A, 0x15}, 0, 3, 179 } +}; + +static const x86_insn_info pinsrw_insn[] = { + { SUF_L|SUF_Z, NOT_AVX, CPU_MMX, CPU_P3, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0xC4, 0}, 0, 3, 116 }, + { SUF_Q|SUF_Z, ONLY_64|NOT_AVX, CPU_MMX, CPU_P3, 0, {0, 0, 0}, 64, 64, 0, 2, {0x0F, 0xC4, 0}, 0, 3, 119 }, + { SUF_L|SUF_Z, NOT_AVX, CPU_MMX, CPU_P3, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0xC4, 0}, 0, 3, 122 }, + { SUF_L|SUF_Z, 0, CPU_386, CPU_SSE2, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0x66, 2, {0x0F, 0xC4, 0}, 0, 3, 125 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_SSE2, 0, 0, {MOD_SetVEX, 0, 0}, 64, 64, 0x66, 2, {0x0F, 0xC4, 0}, 0, 3, 128 }, + { SUF_L|SUF_Z, 0, CPU_SSE2, 0, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0x66, 2, {0x0F, 0xC4, 0}, 0, 3, 131 }, + { SUF_L|SUF_Z, ONLY_AVX, CPU_386, CPU_AVX, 0, {0, 0, 0}, 0, 0, 0xC1, 2, {0x0F, 0xC4, 0}, 0, 4, 24 }, + { SUF_Q|SUF_Z, ONLY_64|ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 64, 64, 0xC1, 2, {0x0F, 0xC4, 0}, 0, 4, 28 }, + { SUF_L|SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 0, 0, 0xC1, 2, {0x0F, 0xC4, 0}, 0, 4, 32 } +}; + +static const x86_insn_info pmovmskb_insn[] = { + { SUF_L|SUF_Z, NOT_AVX, CPU_MMX, CPU_P3, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0xD7, 0}, 0, 2, 161 }, + { SUF_L|SUF_Z, 0, CPU_386, CPU_SSE2, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0x66, 2, {0x0F, 0xD7, 0}, 0, 2, 164 }, + { SUF_L|SUF_Z, ONLY_AVX, CPU_386, CPU_AVX2, 0, {0, 0, 0}, 0, 0, 0xC5, 2, {0x0F, 0xD7, 0}, 0, 2, 319 }, + { SUF_Q|SUF_Z, ONLY_64|NOT_AVX, CPU_MMX, CPU_P3, 0, {0, 0, 0}, 64, 64, 0, 2, {0x0F, 0xD7, 0}, 0, 2, 167 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_SSE2, 0, 0, {MOD_SetVEX, 0, 0}, 64, 64, 0x66, 2, {0x0F, 0xD7, 0}, 0, 2, 170 }, + { SUF_Q|SUF_Z, ONLY_64|ONLY_AVX, CPU_SSE2, 0, 0, {0, 0, 0}, 64, 64, 0xC5, 2, {0x0F, 0xD7, 0}, 0, 2, 321 } +}; + +static const x86_insn_info pshufw_insn[] = { + { SUF_Z, 0, CPU_MMX, CPU_P3, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x70, 0}, 0, 3, 140 } +}; + +static const x86_insn_info xmm_xmm64_insn[] = { + { SUF_Z, 0, CPU_SSE2, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 92 }, + { SUF_Z, 0, CPU_SSE2, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 95 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 3, 0 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 3, 4 } +}; + +static const x86_insn_info ssecmp_64_insn[] = { + { SUF_Z, 0, CPU_SSE2, 0, 0, {MOD_Imm8, MOD_PreAdd, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0xC2, 0}, 0, 2, 92 }, + { SUF_Z, 0, CPU_SSE2, 0, 0, {MOD_Imm8, MOD_PreAdd, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0xC2, 0}, 0, 2, 95 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Imm8, MOD_PreAdd, 0}, 0, 0, 0xC0, 2, {0x0F, 0xC2, 0}, 0, 3, 0 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Imm8, MOD_PreAdd, 0}, 0, 0, 0xC0, 2, {0x0F, 0xC2, 0}, 0, 3, 4 } +}; + +static const x86_insn_info cvt_rx_xmm64_insn[] = { + { SUF_L|SUF_Z, 0, CPU_386, CPU_SSE2, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 164 }, + { SUF_L|SUF_Z, 0, CPU_386, CPU_SSE2, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 338 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_SSE2, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 64, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 170 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_SSE2, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_SetVEX}, 64, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 469 } +}; + +static const x86_insn_info cvt_mm_xmm_insn[] = { + { SUF_Z, 0, CPU_SSE2, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 615 } +}; + +static const x86_insn_info cvt_xmm_mm_ss_insn[] = { + { SUF_Z, 0, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 2, 333 } +}; + +static const x86_insn_info eptvpid_insn[] = { + { SUF_L|SUF_Z, NOT_64, CPU_386, CPU_EPTVPID, 0, {MOD_Op2Add, 0, 0}, 32, 0, 0x66, 3, {0x0F, 0x38, 0x80}, 0, 2, 611 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_EPTVPID, 0, 0, {MOD_Op2Add, 0, 0}, 64, 0, 0x66, 3, {0x0F, 0x38, 0x80}, 0, 2, 613 } +}; + +static const x86_insn_info vmxmemrd_insn[] = { + { SUF_L|SUF_Z, NOT_64, CPU_P4, 0, 0, {0, 0, 0}, 32, 0, 0, 2, {0x0F, 0x78, 0}, 0, 2, 266 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_P4, 0, 0, {0, 0, 0}, 64, 64, 0, 2, {0x0F, 0x78, 0}, 0, 2, 272 } +}; + +static const x86_insn_info vmxmemwr_insn[] = { + { SUF_L|SUF_Z, NOT_64, CPU_P4, 0, 0, {0, 0, 0}, 32, 0, 0, 2, {0x0F, 0x79, 0}, 0, 2, 101 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_P4, 0, 0, {0, 0, 0}, 64, 64, 0, 2, {0x0F, 0x79, 0}, 0, 2, 104 } +}; + +static const x86_insn_info vmxtwobytemem_insn[] = { + { SUF_Z, 0, CPU_P4, 0, 0, {MOD_SpAdd, 0, 0}, 0, 0, 0, 2, {0x0F, 0xC7, 0}, 0, 1, 6 } +}; + +static const x86_insn_info vmxthreebytemem_insn[] = { + { SUF_Z, 0, CPU_P4, 0, 0, {MOD_PreAdd, 0, 0}, 0, 0, 0x00, 2, {0x0F, 0xC7, 0}, 6, 1, 6 } +}; + +static const x86_insn_info maskmovdqu_insn[] = { + { SUF_Z, 0, CPU_SSE2, 0, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0x66, 2, {0x0F, 0xF7, 0}, 0, 2, 64 } +}; + +static const x86_insn_info movdq2q_insn[] = { + { SUF_Z, 0, CPU_SSE2, 0, 0, {0, 0, 0}, 0, 0, 0xF2, 2, {0x0F, 0xD6, 0}, 0, 2, 315 } +}; + +static const x86_insn_info movq2dq_insn[] = { + { SUF_Z, 0, CPU_SSE2, 0, 0, {0, 0, 0}, 0, 0, 0xF3, 2, {0x0F, 0xD6, 0}, 0, 2, 445 } +}; + +static const x86_insn_info pslrldq_insn[] = { + { SUF_Z, 0, CPU_SSE2, 0, 0, {MOD_SpAdd, MOD_SetVEX, 0}, 0, 0, 0x66, 2, {0x0F, 0x73, 0}, 0, 2, 511 }, + { SUF_Z, 0, CPU_SSE2, 0, 0, {MOD_SpAdd, MOD_SetVEX, 0}, 0, 0, 0x66, 2, {0x0F, 0x73, 0}, 0, 3, 1 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_SpAdd, 0, 0}, 0, 0, 0xC5, 2, {0x0F, 0x73, 0}, 0, 2, 513 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_SpAdd, 0, 0}, 0, 0, 0xC5, 2, {0x0F, 0x73, 0}, 0, 3, 200 } +}; + +static const x86_insn_info lddqu_insn[] = { + { SUF_Z, 0, CPU_SSE3, 0, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0xF2, 2, {0x0F, 0xF0, 0}, 0, 2, 595 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 0, 0, 0xC7, 2, {0x0F, 0xF0, 0}, 0, 2, 597 } +}; + +static const x86_insn_info ssse3_insn[] = { + { SUF_Z, NOT_AVX, CPU_SSSE3, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0, 3, {0x0F, 0x38, 0x00}, 0, 2, 140 }, + { SUF_Z, 0, CPU_SSSE3, 0, 0, {MOD_Op2Add, MOD_SetVEX, 0}, 0, 0, 0x66, 3, {0x0F, 0x38, 0x00}, 0, 2, 158 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x00}, 0, 3, 12 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x00}, 0, 2, 197 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x00}, 0, 3, 16 } +}; + +static const x86_insn_info ssse3imm_insn[] = { + { SUF_Z, 0, CPU_SSSE3, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0, 3, {0x0F, 0x3A, 0x00}, 0, 3, 140 }, + { SUF_Z, 0, CPU_SSSE3, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x00}, 0, 3, 185 } +}; + +static const x86_insn_info sse4_insn[] = { + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_Op2Add, MOD_SetVEX, 0}, 0, 0, 0x66, 3, {0x0F, 0x38, 0x00}, 0, 2, 155 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x00}, 0, 2, 191 } +}; + +static const x86_insn_info sse4imm_256_insn[] = { + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_Op2Add, MOD_SetVEX, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x00}, 0, 3, 158 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x00}, 0, 4, 60 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x3A, 0x00}, 0, 3, 197 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x3A, 0x00}, 0, 4, 20 } +}; + +static const x86_insn_info sse4imm_256avx2_insn[] = { + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_Op2Add, MOD_SetVEX, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x00}, 0, 3, 158 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x00}, 0, 4, 60 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x3A, 0x00}, 0, 3, 197 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x3A, 0x00}, 0, 4, 20 } +}; + +static const x86_insn_info sse4imm_insn[] = { + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_Op2Add, MOD_SetVEX, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x00}, 0, 3, 158 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x00}, 0, 4, 60 } +}; + +static const x86_insn_info sse4m32imm_insn[] = { + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_Op2Add, MOD_SetVEX, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x00}, 0, 3, 92 }, + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_Op2Add, MOD_SetVEX, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x00}, 0, 3, 146 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x00}, 0, 4, 0 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x00}, 0, 4, 56 } +}; + +static const x86_insn_info sse4m64imm_insn[] = { + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_Op2Add, MOD_SetVEX, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x00}, 0, 3, 92 }, + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_Op2Add, MOD_SetVEX, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x00}, 0, 3, 95 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x00}, 0, 4, 0 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x00}, 0, 4, 4 } +}; + +static const x86_insn_info sse4xmm0_insn[] = { + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0x66, 3, {0x0F, 0x38, 0x00}, 0, 2, 155 }, + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0x66, 3, {0x0F, 0x38, 0x00}, 0, 3, 242 } +}; + +static const x86_insn_info avx_sse4xmm0_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x00}, 0, 4, 12 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x3A, 0x00}, 0, 4, 16 } +}; + +static const x86_insn_info avx2_sse4xmm0_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x00}, 0, 4, 12 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x3A, 0x00}, 0, 4, 16 } +}; + +static const x86_insn_info crc32_insn[] = { + { SUF_B|SUF_Z, 0, CPU_386, CPU_SSE42, 0, {0, 0, 0}, 0, 0, 0xF2, 3, {0x0F, 0x38, 0xF0}, 0, 2, 537 }, + { SUF_W|SUF_Z, 0, CPU_386, CPU_SSE42, 0, {0, 0, 0}, 16, 0, 0xF2, 3, {0x0F, 0x38, 0xF1}, 0, 2, 539 }, + { SUF_L|SUF_Z, 0, CPU_386, CPU_SSE42, 0, {0, 0, 0}, 32, 0, 0xF2, 3, {0x0F, 0x38, 0xF1}, 0, 2, 101 }, + { SUF_B|SUF_Z, ONLY_64, CPU_SSE42, 0, 0, {0, 0, 0}, 64, 0, 0xF2, 3, {0x0F, 0x38, 0xF0}, 0, 2, 541 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_SSE42, 0, 0, {0, 0, 0}, 64, 0, 0xF2, 3, {0x0F, 0x38, 0xF1}, 0, 2, 104 } +}; + +static const x86_insn_info extractps_insn[] = { + { SUF_Z, 0, CPU_386, CPU_SSE41, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x17}, 0, 3, 188 }, + { SUF_Z, ONLY_64, CPU_SSE41, 0, 0, {MOD_SetVEX, 0, 0}, 64, 0, 0x66, 3, {0x0F, 0x3A, 0x17}, 0, 3, 179 } +}; + +static const x86_insn_info insertps_insn[] = { + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x21}, 0, 3, 146 }, + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x21}, 0, 3, 92 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x21}, 0, 4, 56 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x21}, 0, 4, 0 } +}; + +static const x86_insn_info movntdqa_insn[] = { + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0x66, 3, {0x0F, 0x38, 0x2A}, 0, 2, 595 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x2A}, 0, 2, 597 } +}; + +static const x86_insn_info sse4pcmpstr_insn[] = { + { SUF_Z, 0, CPU_SSE42, 0, 0, {MOD_Op2Add, MOD_SetVEX, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x00}, 0, 3, 185 } +}; + +static const x86_insn_info pextrb_insn[] = { + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x14}, 0, 3, 194 }, + { SUF_Z, 0, CPU_386, CPU_SSE41, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x14}, 0, 3, 176 }, + { SUF_Z, ONLY_64, CPU_SSE41, 0, 0, {MOD_SetVEX, 0, 0}, 64, 0, 0x66, 3, {0x0F, 0x3A, 0x14}, 0, 3, 179 } +}; + +static const x86_insn_info pextrd_insn[] = { + { SUF_Z, 0, CPU_386, CPU_SSE41, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x16}, 0, 3, 188 } +}; + +static const x86_insn_info pextrq_insn[] = { + { SUF_Z, ONLY_64, CPU_SSE41, 0, 0, {MOD_SetVEX, 0, 0}, 64, 0, 0x66, 3, {0x0F, 0x3A, 0x16}, 0, 3, 182 } +}; + +static const x86_insn_info pinsrb_insn[] = { + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x20}, 0, 3, 143 }, + { SUF_Z, 0, CPU_386, CPU_SSE41, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x20}, 0, 3, 125 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x20}, 0, 4, 48 }, + { SUF_Z, ONLY_AVX, CPU_386, CPU_AVX, 0, {0, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x20}, 0, 4, 52 } +}; + +static const x86_insn_info pinsrd_insn[] = { + { SUF_Z, 0, CPU_386, CPU_SSE41, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x22}, 0, 3, 239 }, + { SUF_Z, ONLY_AVX, CPU_386, CPU_AVX, 0, {0, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x22}, 0, 4, 88 } +}; + +static const x86_insn_info pinsrq_insn[] = { + { SUF_Z, ONLY_64, CPU_SSE41, 0, 0, {MOD_SetVEX, 0, 0}, 64, 0, 0x66, 3, {0x0F, 0x3A, 0x22}, 0, 3, 227 }, + { SUF_Z, ONLY_64|ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 64, 0, 0xC1, 3, {0x0F, 0x3A, 0x22}, 0, 4, 84 } +}; + +static const x86_insn_info sse4m16_insn[] = { + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_Op2Add, MOD_SetVEX, 0}, 0, 0, 0x66, 3, {0x0F, 0x38, 0x00}, 0, 2, 447 }, + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_Op2Add, MOD_SetVEX, 0}, 0, 0, 0x66, 3, {0x0F, 0x38, 0x00}, 0, 2, 64 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x00}, 0, 2, 449 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x00}, 0, 2, 208 } +}; + +static const x86_insn_info sse4m32_insn[] = { + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_Op2Add, MOD_SetVEX, 0}, 0, 0, 0x66, 3, {0x0F, 0x38, 0x00}, 0, 2, 336 }, + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_Op2Add, MOD_SetVEX, 0}, 0, 0, 0x66, 3, {0x0F, 0x38, 0x00}, 0, 2, 64 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x00}, 0, 2, 479 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x00}, 0, 2, 208 } +}; + +static const x86_insn_info sse4m64_insn[] = { + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_Op2Add, MOD_SetVEX, 0}, 0, 0, 0x66, 3, {0x0F, 0x38, 0x00}, 0, 2, 451 }, + { SUF_Z, 0, CPU_SSE41, 0, 0, {MOD_Op2Add, MOD_SetVEX, 0}, 0, 0, 0x66, 3, {0x0F, 0x38, 0x00}, 0, 2, 64 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x00}, 0, 2, 509 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x00}, 0, 2, 208 } +}; + +static const x86_insn_info cnt_insn[] = { + { SUF_W|SUF_Z, 0, 0, 0, 0, {MOD_Op1Add, 0, 0}, 16, 0, 0xF3, 2, {0x0F, 0x00, 0}, 0, 2, 98 }, + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_Op1Add, 0, 0}, 32, 0, 0xF3, 2, {0x0F, 0x00, 0}, 0, 2, 101 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {MOD_Op1Add, 0, 0}, 64, 0, 0xF3, 2, {0x0F, 0x00, 0}, 0, 2, 104 } +}; + +static const x86_insn_info vmovd_insn[] = { + { SUF_Z, ONLY_AVX, CPU_386, CPU_AVX, 0, {0, 0, 0}, 0, 0, 0xC1, 2, {0x0F, 0x6E, 0}, 0, 2, 299 }, + { SUF_Z, ONLY_AVX, CPU_386, CPU_AVX, 0, {0, 0, 0}, 0, 0, 0xC1, 2, {0x0F, 0x7E, 0}, 0, 2, 188 } +}; + +static const x86_insn_info vmovq_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 0, 0, 0xC2, 2, {0x0F, 0x7E, 0}, 0, 2, 64 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 0, 0, 0xC2, 2, {0x0F, 0x7E, 0}, 0, 2, 451 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 0, 0, 0xC1, 2, {0x0F, 0xD6, 0}, 0, 2, 47 }, + { SUF_Z, ONLY_64|ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 64, 0, 0xC1, 2, {0x0F, 0x6E, 0}, 0, 2, 301 }, + { SUF_Z, ONLY_64|ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 64, 0, 0xC1, 2, {0x0F, 0x7E, 0}, 0, 2, 182 } +}; + +static const x86_insn_info avx_xmm_xmm128_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 2, 155 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC4, 2, {0x0F, 0x00, 0}, 0, 2, 191 } +}; + +static const x86_insn_info avx_sse4imm_insn[] = { + { SUF_Z, ONLY_AVX, CPU_SSE41, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x00}, 0, 3, 185 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x00}, 0, 3, 185 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x3A, 0x00}, 0, 3, 191 } +}; + +static const x86_insn_info vmovddup_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 2, 64 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 2, 451 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC4, 2, {0x0F, 0x00, 0}, 0, 2, 191 } +}; + +static const x86_insn_info avx_xmm_xmm64_insn[] = { + { SUF_Z, ONLY_AVX, CPU_SSE2, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 2, 64 }, + { SUF_Z, ONLY_AVX, CPU_SSE2, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 2, 451 } +}; + +static const x86_insn_info avx_xmm_xmm32_insn[] = { + { SUF_Z, ONLY_AVX, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 2, 64 }, + { SUF_Z, ONLY_AVX, CPU_SSE, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 2, 336 } +}; + +static const x86_insn_info avx_cvt_xmm64_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 2, 64 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 2, 451 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC4, 2, {0x0F, 0x00, 0}, 0, 2, 453 } +}; + +static const x86_insn_info avx_ssse3_2op_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x00}, 0, 2, 155 } +}; + +static const x86_insn_info avx2_ssse3_2op_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x00}, 0, 2, 155 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x00}, 0, 2, 191 } +}; + +static const x86_insn_info avx_cvt_xmm128_x_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 2, 155 } +}; + +static const x86_insn_info avx_cvt_xmm128_y_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC4, 2, {0x0F, 0x00, 0}, 0, 2, 205 } +}; + +static const x86_insn_info avx_cvt_xmm128_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC0, 2, {0x0F, 0x00, 0}, 0, 2, 607 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_PreAdd, MOD_Op1Add, 0}, 0, 0, 0xC4, 2, {0x0F, 0x00, 0}, 0, 2, 609 } +}; + +static const x86_insn_info vbroadcastss_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x18}, 0, 2, 336 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x18}, 0, 2, 449 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x18}, 0, 2, 64 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x18}, 0, 2, 208 } +}; + +static const x86_insn_info vbroadcastsd_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x19}, 0, 2, 479 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x19}, 0, 2, 208 } +}; + +static const x86_insn_info vbroadcastif128_insn[] = { + { SUF_Z, ONLY_AVX, 0, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x00}, 0, 2, 509 } +}; + +static const x86_insn_info vextractif128_insn[] = { + { SUF_Z, ONLY_AVX, 0, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x3A, 0x00}, 0, 3, 236 } +}; + +static const x86_insn_info vinsertif128_insn[] = { + { SUF_Z, ONLY_AVX, 0, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x3A, 0x00}, 0, 4, 8 } +}; + +static const x86_insn_info vzero_insn[] = { + { SUF_Z, 0, CPU_AVX, 0, 0, {MOD_SetVEX, 0, 0}, 0, 0, 0, 2, {0x0F, 0x77, 0}, 0, 0, 0 } +}; + +static const x86_insn_info vmaskmov_insn[] = { + { SUF_Z, ONLY_AVX, 0, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x00}, 0, 3, 12 }, + { SUF_Z, ONLY_AVX, 0, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x00}, 0, 3, 16 }, + { SUF_Z, ONLY_AVX, 0, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x02}, 0, 3, 203 }, + { SUF_Z, ONLY_AVX, 0, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x02}, 0, 3, 206 } +}; + +static const x86_insn_info vpermil_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x08}, 0, 3, 12 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x08}, 0, 3, 16 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x00}, 0, 3, 185 }, + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x3A, 0x00}, 0, 3, 191 } +}; + +static const x86_insn_info vperm2f128_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX, 0, 0, {0, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x3A, 0x06}, 0, 4, 20 } +}; + +static const x86_insn_info vperm_var_avx2_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x00}, 0, 3, 16 } +}; + +static const x86_insn_info vperm_imm_avx2_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xCD, 3, {0x0F, 0x3A, 0x00}, 0, 3, 191 } +}; + +static const x86_insn_info vperm2i128_avx2_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x3A, 0x46}, 0, 4, 20 } +}; + +static const x86_insn_info vpbroadcastb_avx2_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x78}, 0, 2, 543 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x78}, 0, 2, 545 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x78}, 0, 2, 635 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x78}, 0, 2, 637 } +}; + +static const x86_insn_info vpbroadcastw_avx2_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x79}, 0, 2, 543 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x79}, 0, 2, 545 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x79}, 0, 2, 547 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x79}, 0, 2, 549 } +}; + +static const x86_insn_info vpbroadcastd_avx2_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x58}, 0, 2, 543 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x58}, 0, 2, 545 }, + { SUF_Z, ONLY_AVX, CPU_386, CPU_AVX2, 0, {0, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x58}, 0, 2, 299 }, + { SUF_Z, ONLY_AVX, CPU_386, CPU_AVX2, 0, {0, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x58}, 0, 2, 643 } +}; + +static const x86_insn_info vpbroadcastq_avx2_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x59}, 0, 2, 543 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x59}, 0, 2, 545 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x59}, 0, 2, 333 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {0, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x59}, 0, 2, 621 } +}; + +static const x86_insn_info vpshiftv_vexw0_avx2_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x00}, 0, 3, 12 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x00}, 0, 3, 16 } +}; + +static const x86_insn_info vpshiftv_vexw1_avx2_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC9, 3, {0x0F, 0x38, 0x00}, 0, 3, 12 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xCD, 3, {0x0F, 0x38, 0x00}, 0, 3, 16 } +}; + +static const x86_insn_info vmaskmov_vexw1_avx2_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC9, 3, {0x0F, 0x38, 0x00}, 0, 3, 12 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xCD, 3, {0x0F, 0x38, 0x00}, 0, 3, 16 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC9, 3, {0x0F, 0x38, 0x02}, 0, 3, 203 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xCD, 3, {0x0F, 0x38, 0x02}, 0, 3, 206 } +}; + +static const x86_insn_info vex_66_0F3A_imm8_avx2_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x00}, 0, 4, 60 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x3A, 0x00}, 0, 4, 20 } +}; + +static const x86_insn_info gather_64x_64x_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC9, 3, {0x0F, 0x38, 0x00}, 0, 3, 221 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xCD, 3, {0x0F, 0x38, 0x00}, 0, 3, 224 } +}; + +static const x86_insn_info gather_64x_64y_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC9, 3, {0x0F, 0x38, 0x00}, 0, 3, 221 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xCD, 3, {0x0F, 0x38, 0x00}, 0, 3, 278 } +}; + +static const x86_insn_info gather_32x_32y_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x00}, 0, 3, 245 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x00}, 0, 3, 251 } +}; + +static const x86_insn_info gather_32x_32y_128_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x00}, 0, 3, 245 }, + { SUF_Z, ONLY_AVX, CPU_AVX2, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x00}, 0, 3, 248 } +}; + +static const x86_insn_info tsx_xabort_insn[] = { + { SUF_Z, 0, CPU_TSX, 0, 0, {0, 0, 0}, 0, 0, 0, 2, {0xC6, 0xF8, 0}, 0, 1, 3 } +}; + +static const x86_insn_info tsx_xbegin_insn[] = { + { SUF_Z, 0, CPU_386, CPU_TSX, 0, {0, 0, 0}, 0, 0, 0, 2, {0xC7, 0xF8, 0}, 0, 1, 679 }, + { SUF_Z, NOT_64, CPU_TSX, 0, 0, {0, 0, 0}, 16, 0, 0, 2, {0xC7, 0xF8, 0}, 0, 1, 678 } +}; + +static const x86_insn_info tsx_0x0F_0x01_insn[] = { + { SUF_Z, 0, CPU_TSX, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0, 3, {0x0F, 0x01, 0x00}, 0, 0, 0 } +}; + +static const x86_insn_info vfma_ps_insn[] = { + { SUF_Z, ONLY_AVX, CPU_FMA, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x00}, 0, 3, 12 }, + { SUF_Z, ONLY_AVX, CPU_FMA, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x38, 0x00}, 0, 3, 16 } +}; + +static const x86_insn_info vfma_pd_insn[] = { + { SUF_Z, ONLY_AVX, CPU_FMA, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC9, 3, {0x0F, 0x38, 0x00}, 0, 3, 12 }, + { SUF_Z, ONLY_AVX, CPU_FMA, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xCD, 3, {0x0F, 0x38, 0x00}, 0, 3, 16 } +}; + +static const x86_insn_info vfma_ss_insn[] = { + { SUF_Z, ONLY_AVX, CPU_FMA, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x00}, 0, 3, 0 }, + { SUF_Z, ONLY_AVX, CPU_FMA, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x38, 0x00}, 0, 3, 56 } +}; + +static const x86_insn_info vfma_sd_insn[] = { + { SUF_Z, ONLY_AVX, CPU_FMA, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC9, 3, {0x0F, 0x38, 0x00}, 0, 3, 0 }, + { SUF_Z, ONLY_AVX, CPU_FMA, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC9, 3, {0x0F, 0x38, 0x00}, 0, 3, 4 } +}; + +static const x86_insn_info aes_insn[] = { + { SUF_Z, 0, CPU_AES, 0, 0, {MOD_Op1Add, MOD_Op2Add, MOD_SetVEX}, 0, 0, 0x66, 3, {0x0F, 0x00, 0x00}, 0, 2, 158 }, + { SUF_Z, ONLY_AVX, CPU_AES, CPU_AVX, 0, {MOD_Op1Add, MOD_Op2Add, 0}, 0, 0, 0xC1, 3, {0x0F, 0x00, 0x00}, 0, 3, 12 } +}; + +static const x86_insn_info aesimc_insn[] = { + { SUF_Z, 0, CPU_AES, 0, 0, {MOD_Op1Add, MOD_Op2Add, MOD_SetVEX}, 0, 0, 0x66, 3, {0x0F, 0x00, 0x00}, 0, 2, 155 } +}; + +static const x86_insn_info aes_imm_insn[] = { + { SUF_Z, 0, CPU_AES, 0, 0, {MOD_Op1Add, MOD_Op2Add, MOD_SetVEX}, 0, 0, 0x66, 3, {0x0F, 0x00, 0x00}, 0, 3, 185 } +}; + +static const x86_insn_info pclmulqdq_insn[] = { + { SUF_Z, 0, CPU_CLMUL, 0, 0, {MOD_Op1Add, MOD_Op2Add, MOD_SetVEX}, 0, 0, 0x66, 3, {0x0F, 0x00, 0x00}, 0, 3, 158 }, + { SUF_Z, ONLY_AVX, CPU_AVX, CPU_CLMUL, 0, {MOD_Op1Add, MOD_Op2Add, 0}, 0, 0, 0xC1, 3, {0x0F, 0x00, 0x00}, 0, 4, 60 } +}; + +static const x86_insn_info pclmulqdq_fixed_insn[] = { + { SUF_Z, 0, CPU_CLMUL, 0, 0, {MOD_Imm8, MOD_SetVEX, 0}, 0, 0, 0x66, 3, {0x0F, 0x3A, 0x44}, 0, 2, 158 }, + { SUF_Z, ONLY_AVX, CPU_AVX, CPU_CLMUL, 0, {MOD_Imm8, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x44}, 0, 3, 12 } +}; + +static const x86_insn_info rdrand_insn[] = { + { SUF_Z, 0, 0, 0, 0, {MOD_SpAdd, 0, 0}, 16, 0, 0, 2, {0x0F, 0xC7, 0}, 0, 1, 395 }, + { SUF_Z, 0, CPU_386, 0, 0, {MOD_SpAdd, 0, 0}, 32, 0, 0, 2, {0x0F, 0xC7, 0}, 0, 1, 26 }, + { SUF_Z, ONLY_64, 0, 0, 0, {MOD_SpAdd, 0, 0}, 64, 0, 0, 2, {0x0F, 0xC7, 0}, 0, 1, 30 } +}; + +static const x86_insn_info fs_gs_base_insn[] = { + { SUF_Z, ONLY_64, CPU_FSGSBASE, 0, 0, {MOD_SpAdd, 0, 0}, 32, 0, 0xF3, 2, {0x0F, 0xAE, 0}, 0, 1, 26 }, + { SUF_Z, ONLY_64, CPU_FSGSBASE, 0, 0, {MOD_SpAdd, 0, 0}, 64, 0, 0xF3, 2, {0x0F, 0xAE, 0}, 0, 1, 30 } +}; + +static const x86_insn_info avx_cvtps2ph_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX, CPU_F16C, 0, {MOD_PreAdd, MOD_Op2Add, 0}, 0, 0, 0xC0, 3, {0x0F, 0x3A, 0x00}, 0, 3, 209 }, + { SUF_Z, ONLY_AVX, CPU_AVX, CPU_F16C, 0, {MOD_PreAdd, MOD_Op2Add, 0}, 0, 0, 0xC0, 3, {0x0F, 0x3A, 0x00}, 0, 3, 212 }, + { SUF_Z, ONLY_AVX, CPU_AVX, CPU_F16C, 0, {MOD_PreAdd, MOD_Op2Add, 0}, 0, 0, 0xC4, 3, {0x0F, 0x3A, 0x00}, 0, 3, 215 }, + { SUF_Z, ONLY_AVX, CPU_AVX, CPU_F16C, 0, {MOD_PreAdd, MOD_Op2Add, 0}, 0, 0, 0xC4, 3, {0x0F, 0x3A, 0x00}, 0, 3, 218 } +}; + +static const x86_insn_info avx_cvtph2ps_insn[] = { + { SUF_Z, ONLY_AVX, CPU_AVX, CPU_F16C, 0, {MOD_PreAdd, MOD_Op2Add, 0}, 0, 0, 0xC0, 3, {0x0F, 0x38, 0x00}, 0, 2, 64 }, + { SUF_Z, ONLY_AVX, CPU_AVX, CPU_F16C, 0, {MOD_PreAdd, MOD_Op2Add, 0}, 0, 0, 0xC0, 3, {0x0F, 0x38, 0x00}, 0, 2, 631 }, + { SUF_Z, ONLY_AVX, CPU_AVX, CPU_F16C, 0, {MOD_PreAdd, MOD_Op2Add, 0}, 0, 0, 0xC4, 3, {0x0F, 0x38, 0x00}, 0, 2, 208 }, + { SUF_Z, ONLY_AVX, CPU_AVX, CPU_F16C, 0, {MOD_PreAdd, MOD_Op2Add, 0}, 0, 0, 0xC4, 3, {0x0F, 0x38, 0x00}, 0, 2, 633 } +}; + +static const x86_insn_info extrq_insn[] = { + { SUF_Z, 0, CPU_SSE4a, 0, 0, {0, 0, 0}, 0, 0, 0x66, 2, {0x0F, 0x78, 0}, 0, 3, 65 }, + { SUF_Z, 0, CPU_SSE4a, 0, 0, {0, 0, 0}, 0, 0, 0x66, 2, {0x0F, 0x79, 0}, 0, 2, 64 } +}; + +static const x86_insn_info insertq_insn[] = { + { SUF_Z, 0, CPU_SSE4a, 0, 0, {0, 0, 0}, 0, 0, 0xF2, 2, {0x0F, 0x78, 0}, 0, 4, 64 }, + { SUF_Z, 0, CPU_SSE4a, 0, 0, {0, 0, 0}, 0, 0, 0xF2, 2, {0x0F, 0x79, 0}, 0, 2, 64 } +}; + +static const x86_insn_info movntsd_insn[] = { + { SUF_Z, 0, CPU_SSE4a, 0, 0, {0, 0, 0}, 0, 0, 0xF2, 2, {0x0F, 0x2B, 0}, 0, 2, 47 } +}; + +static const x86_insn_info movntss_insn[] = { + { SUF_Z, 0, CPU_SSE4a, 0, 0, {0, 0, 0}, 0, 0, 0xF3, 2, {0x0F, 0x2B, 0}, 0, 2, 450 } +}; + +static const x86_insn_info vfrc_pdps_insn[] = { + { SUF_Z, 0, CPU_XOP, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0x80, 2, {0x09, 0x80, 0}, 0, 2, 155 }, + { SUF_Z, 0, CPU_XOP, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0x84, 2, {0x09, 0x80, 0}, 0, 2, 191 } +}; + +static const x86_insn_info vfrczsd_insn[] = { + { SUF_Z, 0, CPU_XOP, 0, 0, {0, 0, 0}, 0, 0, 0x80, 2, {0x09, 0x83, 0}, 0, 2, 64 }, + { SUF_Z, 0, CPU_XOP, 0, 0, {0, 0, 0}, 0, 0, 0x80, 2, {0x09, 0x83, 0}, 0, 2, 451 } +}; + +static const x86_insn_info vfrczss_insn[] = { + { SUF_Z, 0, CPU_XOP, 0, 0, {0, 0, 0}, 0, 0, 0x80, 2, {0x09, 0x82, 0}, 0, 2, 64 }, + { SUF_Z, 0, CPU_XOP, 0, 0, {0, 0, 0}, 0, 0, 0x80, 2, {0x09, 0x82, 0}, 0, 2, 336 } +}; + +static const x86_insn_info vpcmov_insn[] = { + { SUF_Z, 0, CPU_XOP, 0, 0, {0, 0, 0}, 0, 0, 0x80, 2, {0x08, 0xA2, 0}, 0, 4, 12 }, + { SUF_Z, 0, CPU_XOP, 0, 0, {0, 0, 0}, 0, 0, 0x88, 2, {0x08, 0xA2, 0}, 0, 4, 68 }, + { SUF_Z, 0, CPU_XOP, 0, 0, {0, 0, 0}, 0, 0, 0x84, 2, {0x08, 0xA2, 0}, 0, 4, 16 }, + { SUF_Z, 0, CPU_XOP, 0, 0, {0, 0, 0}, 0, 0, 0x8C, 2, {0x08, 0xA2, 0}, 0, 4, 72 } +}; + +static const x86_insn_info vpcom_insn[] = { + { SUF_Z, 0, CPU_XOP, 0, 0, {MOD_Op1Add, MOD_Imm8, 0}, 0, 0, 0x80, 2, {0x08, 0x00, 0}, 0, 3, 12 } +}; + +static const x86_insn_info vpcom_imm_insn[] = { + { SUF_Z, 0, CPU_XOP, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0x80, 2, {0x08, 0x00, 0}, 0, 4, 60 } +}; + +static const x86_insn_info vphaddsub_insn[] = { + { SUF_Z, 0, CPU_XOP, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0x80, 2, {0x09, 0x00, 0}, 0, 2, 155 } +}; + +static const x86_insn_info vpma_insn[] = { + { SUF_Z, 0, CPU_XOP, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0x80, 2, {0x08, 0x00, 0}, 0, 4, 12 } +}; + +static const x86_insn_info vpperm_insn[] = { + { SUF_Z, 0, CPU_XOP, 0, 0, {0, 0, 0}, 0, 0, 0x80, 2, {0x08, 0xA3, 0}, 0, 4, 12 }, + { SUF_Z, 0, CPU_XOP, 0, 0, {0, 0, 0}, 0, 0, 0x88, 2, {0x08, 0xA3, 0}, 0, 4, 68 } +}; + +static const x86_insn_info vprot_insn[] = { + { SUF_Z, 0, CPU_XOP, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0x80, 2, {0x09, 0x90, 0}, 0, 3, 155 }, + { SUF_Z, 0, CPU_XOP, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0x88, 2, {0x09, 0x90, 0}, 0, 3, 12 }, + { SUF_Z, 0, CPU_XOP, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0x80, 2, {0x08, 0xC0, 0}, 0, 3, 185 } +}; + +static const x86_insn_info amd_vpshift_insn[] = { + { SUF_Z, 0, CPU_XOP, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0x80, 2, {0x09, 0x00, 0}, 0, 3, 155 }, + { SUF_Z, 0, CPU_XOP, 0, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0x88, 2, {0x09, 0x00, 0}, 0, 3, 12 } +}; + +static const x86_insn_info fma_128_256_insn[] = { + { SUF_Z, ONLY_AVX, CPU_FMA4, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x00}, 0, 4, 12 }, + { SUF_Z, ONLY_AVX, CPU_FMA4, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC9, 3, {0x0F, 0x3A, 0x00}, 0, 4, 68 }, + { SUF_Z, ONLY_AVX, CPU_FMA4, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC5, 3, {0x0F, 0x3A, 0x00}, 0, 4, 16 }, + { SUF_Z, ONLY_AVX, CPU_FMA4, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xCD, 3, {0x0F, 0x3A, 0x00}, 0, 4, 72 } +}; + +static const x86_insn_info fma_128_m32_insn[] = { + { SUF_Z, ONLY_AVX, CPU_FMA4, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x00}, 0, 4, 36 }, + { SUF_Z, ONLY_AVX, CPU_FMA4, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x00}, 0, 4, 76 }, + { SUF_Z, ONLY_AVX, CPU_FMA4, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC9, 3, {0x0F, 0x3A, 0x00}, 0, 4, 80 } +}; + +static const x86_insn_info fma_128_m64_insn[] = { + { SUF_Z, ONLY_AVX, CPU_FMA4, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x00}, 0, 4, 36 }, + { SUF_Z, ONLY_AVX, CPU_FMA4, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC1, 3, {0x0F, 0x3A, 0x00}, 0, 4, 40 }, + { SUF_Z, ONLY_AVX, CPU_FMA4, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0xC9, 3, {0x0F, 0x3A, 0x00}, 0, 4, 44 } +}; + +static const x86_insn_info xsaveopt64_insn[] = { + { SUF_Z, ONLY_64, 0, 0, 0, {MOD_SpAdd, MOD_Op0Add, MOD_Op1Add}, 64, 0, 0, 2, {0x00, 0x00, 0}, 0, 1, 532 } +}; + +static const x86_insn_info movbe_insn[] = { + { SUF_Z, 0, CPU_MOVBE, 0, 0, {0, 0, 0}, 16, 0, 0, 3, {0x0F, 0x38, 0xF0}, 0, 2, 465 }, + { SUF_Z, 0, CPU_MOVBE, 0, 0, {0, 0, 0}, 16, 0, 0, 3, {0x0F, 0x38, 0xF1}, 0, 2, 467 }, + { SUF_Z, 0, CPU_386, CPU_MOVBE, 0, {0, 0, 0}, 32, 0, 0, 3, {0x0F, 0x38, 0xF0}, 0, 2, 359 }, + { SUF_Z, 0, CPU_386, CPU_MOVBE, 0, {0, 0, 0}, 32, 0, 0, 3, {0x0F, 0x38, 0xF1}, 0, 2, 337 }, + { SUF_Z, ONLY_64, CPU_MOVBE, 0, 0, {0, 0, 0}, 64, 0, 0, 3, {0x0F, 0x38, 0xF0}, 0, 2, 469 }, + { SUF_Z, ONLY_64, CPU_MOVBE, 0, 0, {0, 0, 0}, 64, 0, 0, 3, {0x0F, 0x38, 0xF1}, 0, 2, 339 } +}; + +static const x86_insn_info vex_gpr_ndd_rm_0F38_regext_insn[] = { + { SUF_L|SUF_Z, ONLY_AVX, CPU_386, 0, 0, {MOD_PreAdd, MOD_Op2Add, MOD_SpAdd}, 32, 0, 0xC0, 3, {0x0F, 0x38, 0x00}, 0, 2, 255 }, + { SUF_Q|SUF_Z, ONLY_64|ONLY_AVX, 0, 0, 0, {MOD_PreAdd, MOD_Op2Add, MOD_SpAdd}, 64, 0, 0xC0, 3, {0x0F, 0x38, 0x00}, 0, 2, 258 } +}; + +static const x86_insn_info vex_gpr_reg_rm_0F_imm8_insn[] = { + { SUF_L|SUF_Z, ONLY_AVX, CPU_386, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_Op2Add}, 32, 0, 0xC0, 3, {0x0F, 0x00, 0x00}, 0, 3, 134 }, + { SUF_Q|SUF_Z, ONLY_64|ONLY_AVX, 0, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_Op2Add}, 64, 0, 0xC0, 3, {0x0F, 0x00, 0x00}, 0, 3, 137 } +}; + +static const x86_insn_info vex_gpr_reg_nds_rm_0F_insn[] = { + { SUF_L|SUF_Z, ONLY_AVX, CPU_386, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_Op2Add}, 32, 0, 0xC0, 3, {0x0F, 0x00, 0x00}, 0, 3, 254 }, + { SUF_Q|SUF_Z, ONLY_64|ONLY_AVX, 0, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_Op2Add}, 64, 0, 0xC0, 3, {0x0F, 0x00, 0x00}, 0, 3, 257 } +}; + +static const x86_insn_info vex_gpr_reg_rm_nds_0F_insn[] = { + { SUF_L|SUF_Z, ONLY_AVX, CPU_386, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_Op2Add}, 32, 0, 0xC0, 3, {0x0F, 0x00, 0x00}, 0, 3, 149 }, + { SUF_Q|SUF_Z, ONLY_64|ONLY_AVX, 0, 0, 0, {MOD_PreAdd, MOD_Op1Add, MOD_Op2Add}, 64, 0, 0xC0, 3, {0x0F, 0x00, 0x00}, 0, 3, 152 } +}; + +static const x86_insn_info bextr_insn[] = { + { SUF_L|SUF_Z, ONLY_AVX, CPU_386, CPU_BMI1, 0, {0, 0, 0}, 32, 0, 0xC0, 3, {0x0F, 0x38, 0xF7}, 0, 3, 149 }, + { SUF_L|SUF_Z, ONLY_AVX, CPU_386, CPU_TBM, 0, {0, 0, 0}, 32, 0, 0x80, 2, {0x0A, 0x10, 0}, 0, 3, 230 }, + { SUF_Q|SUF_Z, ONLY_64|ONLY_AVX, CPU_BMI1, 0, 0, {0, 0, 0}, 64, 0, 0xC0, 3, {0x0F, 0x38, 0xF7}, 0, 3, 152 }, + { SUF_Q|SUF_Z, ONLY_64|ONLY_AVX, CPU_TBM, 0, 0, {0, 0, 0}, 64, 0, 0x88, 2, {0x0A, 0x10, 0}, 0, 3, 233 } +}; + +static const x86_insn_info invpcid_insn[] = { + { SUF_Z, NOT_64, CPU_386, CPU_INVPCID, CPU_Priv, {0, 0, 0}, 0, 0, 0x66, 3, {0x0F, 0x38, 0x82}, 0, 2, 611 }, + { SUF_Z, ONLY_64, CPU_INVPCID, CPU_Priv, 0, {0, 0, 0}, 0, 64, 0x66, 3, {0x0F, 0x38, 0x82}, 0, 2, 613 } +}; + +static const x86_insn_info intel_SHA1MSG1_insn[] = { + { SUF_Z, 0, CPU_SHA, 0, 0, {0, 0, 0}, 0, 0, 0, 3, {0x0F, 0x38, 0xC9}, 0, 2, 155 } +}; + +static const x86_insn_info intel_SHA1MSG2_insn[] = { + { SUF_Z, 0, CPU_SHA, 0, 0, {0, 0, 0}, 0, 0, 0, 3, {0x0F, 0x38, 0xCA}, 0, 2, 155 } +}; + +static const x86_insn_info intel_SHA1NEXTE_insn[] = { + { SUF_Z, 0, CPU_SHA, 0, 0, {0, 0, 0}, 0, 0, 0, 3, {0x0F, 0x38, 0xC8}, 0, 2, 155 } +}; + +static const x86_insn_info intel_SHA1RNDS4_insn[] = { + { SUF_Z, 0, CPU_SHA, 0, 0, {0, 0, 0}, 0, 0, 0, 3, {0x0F, 0x3A, 0xCC}, 0, 3, 185 } +}; + +static const x86_insn_info intel_SHA256MSG1_insn[] = { + { SUF_Z, 0, CPU_SHA, 0, 0, {0, 0, 0}, 0, 0, 0, 3, {0x0F, 0x38, 0xCC}, 0, 2, 155 } +}; + +static const x86_insn_info intel_SHA256MSG2_insn[] = { + { SUF_Z, 0, CPU_SHA, 0, 0, {0, 0, 0}, 0, 0, 0, 3, {0x0F, 0x38, 0xCD}, 0, 2, 155 } +}; + +static const x86_insn_info intel_SHA256RNDS2_insn[] = { + { SUF_Z, 0, CPU_SHA, 0, 0, {0, 0, 0}, 0, 0, 0, 3, {0x0F, 0x38, 0xCB}, 0, 2, 64 } +}; + +static const x86_insn_info vex_gpr_ndd_rm_0F38_insn[] = { + { SUF_L|SUF_Z, 0, CPU_386, 0, 0, {MOD_PreAdd, MOD_Op2Add, 0}, 32, 0, 0x00, 3, {0x0F, 0x38, 0x00}, 0, 2, 101 }, + { SUF_Q|SUF_Z, ONLY_64, 0, 0, 0, {MOD_PreAdd, MOD_Op2Add, 0}, 64, 0, 0x00, 3, {0x0F, 0x38, 0x00}, 0, 2, 104 } +}; + +static const x86_insn_info xop_gpr_reg_rm_09_insn[] = { + { SUF_L|SUF_Z, 0, CPU_386, CPU_TBM, 0, {MOD_Op1Add, MOD_SpAdd, 0}, 32, 0, 0x80, 2, {0x09, 0x00, 0}, 0, 2, 255 }, + { SUF_Q|SUF_Z, ONLY_64, CPU_TBM, 0, 0, {MOD_Op1Add, MOD_SpAdd, 0}, 64, 0, 0x88, 2, {0x09, 0x00, 0}, 0, 2, 258 } +}; + +static const x86_insn_info now3d_insn[] = { + { SUF_Z, 0, CPU_3DNow, 0, 0, {MOD_Imm8, 0, 0}, 0, 0, 0, 2, {0x0F, 0x0F, 0}, 0, 2, 140 } +}; + +static const x86_insn_info cmpxchg16b_insn[] = { + { SUF_Z, ONLY_64, 0, 0, 0, {0, 0, 0}, 64, 0, 0, 2, {0x0F, 0xC7, 0}, 1, 1, 510 } +}; + +static const x86_insn_info invlpga_insn[] = { + { SUF_Z, 0, CPU_SVM, 0, 0, {0, 0, 0}, 0, 0, 0, 3, {0x0F, 0x01, 0xDF}, 0, 0, 0 }, + { SUF_Z, 0, CPU_386, CPU_SVM, 0, {0, 0, 0}, 0, 0, 0, 3, {0x0F, 0x01, 0xDF}, 0, 2, 515 } +}; + +static const x86_insn_info skinit_insn[] = { + { SUF_Z, 0, CPU_SVM, 0, 0, {0, 0, 0}, 0, 0, 0, 3, {0x0F, 0x01, 0xDE}, 0, 0, 0 }, + { SUF_Z, 0, CPU_SVM, 0, 0, {0, 0, 0}, 0, 0, 0, 3, {0x0F, 0x01, 0xDE}, 0, 1, 655 } +}; + +static const x86_insn_info svm_rax_insn[] = { + { SUF_Z, 0, CPU_SVM, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0, 3, {0x0F, 0x01, 0x00}, 0, 0, 0 }, + { SUF_Z, 0, CPU_SVM, 0, 0, {MOD_Op2Add, 0, 0}, 0, 0, 0, 3, {0x0F, 0x01, 0x00}, 0, 1, 515 } +}; + +static const x86_insn_info padlock_insn[] = { + { SUF_Z, 0, CPU_PadLock, 0, 0, {MOD_Imm8, MOD_PreAdd, MOD_Op1Add}, 0, 0, 0x00, 2, {0x0F, 0x00, 0}, 0, 0, 0 } +}; + +static const x86_insn_info cyrixmmx_insn[] = { + { SUF_Z, 0, CPU_Cyrix, CPU_MMX, 0, {MOD_Op1Add, 0, 0}, 0, 0, 0, 2, {0x0F, 0x00, 0}, 0, 2, 140 } +}; + +static const x86_insn_info pmachriw_insn[] = { + { SUF_Z, 0, CPU_Cyrix, CPU_MMX, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x5E, 0}, 0, 2, 317 } +}; + +static const x86_insn_info rdwrshr_insn[] = { + { SUF_Z, 0, CPU_686, CPU_Cyrix, CPU_SMM, {MOD_Op1Add, 0, 0}, 0, 0, 0, 2, {0x0F, 0x36, 0}, 0, 1, 90 } +}; + +static const x86_insn_info rsdc_insn[] = { + { SUF_Z, 0, CPU_486, CPU_Cyrix, CPU_SMM, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x79, 0}, 0, 2, 629 } +}; + +static const x86_insn_info cyrixsmm_insn[] = { + { SUF_Z, 0, CPU_486, CPU_Cyrix, CPU_SMM, {MOD_Op1Add, 0, 0}, 0, 0, 0, 2, {0x0F, 0x00, 0}, 0, 1, 619 } +}; + +static const x86_insn_info svdc_insn[] = { + { SUF_Z, 0, CPU_486, CPU_Cyrix, CPU_SMM, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x78, 0}, 0, 2, 619 } +}; + +static const x86_insn_info ibts_insn[] = { + { SUF_Z, 0, CPU_386, CPU_Obs, CPU_Undoc, {0, 0, 0}, 16, 0, 0, 2, {0x0F, 0xA7, 0}, 0, 2, 260 }, + { SUF_Z, 0, CPU_386, CPU_Obs, CPU_Undoc, {0, 0, 0}, 32, 0, 0, 2, {0x0F, 0xA7, 0}, 0, 2, 266 } +}; + +static const x86_insn_info umov_insn[] = { + { SUF_Z, 0, CPU_386, CPU_Undoc, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x10, 0}, 0, 2, 323 }, + { SUF_Z, 0, CPU_386, CPU_Undoc, 0, {0, 0, 0}, 16, 0, 0, 2, {0x0F, 0x11, 0}, 0, 2, 260 }, + { SUF_Z, 0, CPU_386, CPU_Undoc, 0, {0, 0, 0}, 32, 0, 0, 2, {0x0F, 0x11, 0}, 0, 2, 266 }, + { SUF_Z, 0, CPU_386, CPU_Undoc, 0, {0, 0, 0}, 0, 0, 0, 2, {0x0F, 0x12, 0}, 0, 2, 325 }, + { SUF_Z, 0, CPU_386, CPU_Undoc, 0, {0, 0, 0}, 16, 0, 0, 2, {0x0F, 0x13, 0}, 0, 2, 98 }, + { SUF_Z, 0, CPU_386, CPU_Undoc, 0, {0, 0, 0}, 32, 0, 0, 2, {0x0F, 0x13, 0}, 0, 2, 101 } +}; + +static const x86_insn_info xbts_insn[] = { + { SUF_Z, 0, CPU_386, CPU_Obs, CPU_Undoc, {0, 0, 0}, 16, 0, 0, 2, {0x0F, 0xA6, 0}, 0, 2, 465 }, + { SUF_Z, 0, CPU_386, CPU_Obs, CPU_Undoc, {0, 0, 0}, 32, 0, 0, 2, {0x0F, 0xA6, 0}, 0, 2, 359 } +}; + diff --git a/third-party/yasm/yasm-1.3.0/yasm.1 b/third-party/yasm/yasm-1.3.0/yasm.1 new file mode 100644 index 0000000000..8b0d845640 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/yasm.1 @@ -0,0 +1,349 @@ +'\" t +.\" Title: yasm +.\" Author: Peter Johnson +.\" Generator: DocBook XSL Stylesheets v1.75.2 +.\" Date: April 2007 +.\" Manual: The Yasm Modular Assembler +.\" Source: Yasm +.\" Language: English +.\" +.TH "YASM" "1" "April 2007" "Yasm" "The Yasm Modular Assembler" +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +yasm \- The Yasm Modular Assembler +.SH "SYNOPSIS" +.HP \w'\fByasm\fR\ 'u +\fByasm\fR [\fB\-f\ \fR\fB\fIformat\fR\fR] [\fB\-o\ \fR\fB\fIoutfile\fR\fR] [\fB\fIother\ options\fR\fR...] {\fIinfile\fR} +.HP \w'\fByasm\fR\ 'u +\fByasm\fR \fB\-h\fR +.SH "DESCRIPTION" +.PP +The Yasm Modular Assembler is a portable, retargetable assembler written under the +\(lqnew\(rq +(2 or 3 clause) BSD license\&. Yasm currently supports the x86 and AMD64 instruction sets, accepts NASM and GAS assembler syntaxes, outputs binary, ELF32, ELF64, COFF, Win32, and Win64 object formats, and generates source debugging information in STABS, DWARF 2, and CodeView 8 formats\&. +.PP +YASM consists of the +\fByasm\fR +command, libyasm, the core backend library, and a large number of modules\&. Currently, libyasm and the loadable modules are statically built into the +\fByasm\fR +executable\&. +.PP +The +\fByasm\fR +command assembles the file infile and directs output to the file +\fIoutfile\fR +if specified\&. If +\fIoutfile\fR +is not specified, +\fByasm\fR +will derive a default output file name from the name of its input file, usually by appending +\&.o +or +\&.obj, or by removing all extensions for a raw binary file\&. Failing that, the output file name will be +yasm\&.out\&. +.PP +If called with an +\fIinfile\fR +of +\(lq\-\(rq, +\fByasm\fR +assembles the standard input and directs output to the file +\fIoutfile\fR, or +yasm\&.out +if no +\fIoutfile\fR +is specified\&. +.SH "OPTIONS" +.PP +Many options may be given in one of two forms: either a dash followed by a single letter, or two dashes followed by a long option name\&. Options are listed in alphabetical order\&. +.SS "General Options" +.PP +\fB\-a \fR\fB\fIarch\fR\fR or \fB\-\-arch=\fR\fB\fIarch\fR\fR: Select target architecture +.RS 4 +Selects the target architecture\&. The default architecture is +\(lqx86\(rq, which supports both the IA\-32 and derivatives and AMD64 instruction sets\&. To print a list of available architectures to standard output, use +\(lqhelp\(rq +as +\fIarch\fR\&. See +\fByasm_arch\fR(7) +for a list of supported architectures\&. +.RE +.PP +\fB\-f \fR\fB\fIformat\fR\fR or \fB\-\-oformat=\fR\fB\fIformat\fR\fR: Select object format +.RS 4 +Selects the output object format\&. The default object format is +\(lqbin\(rq, which is a flat format binary with no relocation\&. To print a list of available object formats to standard output, use +\(lqhelp\(rq +as +\fIformat\fR\&. See +\fByasm_objfmts\fR(7) +for a list of supported object formats\&. +.RE +.PP +\fB\-g \fR\fB\fIdebug\fR\fR or \fB\-\-dformat=\fR\fB\fIdebug\fR\fR: Select debugging format +.RS 4 +Selects the debugging format for debug information\&. Debugging information can be used by a debugger to associate executable code back to the source file or get data structure and type information\&. Available debug formats vary between different object formats; +\fByasm\fR +will error when an invalid combination is selected\&. The default object format is selected by the object format\&. To print a list of available debugging formats to standard output, use +\(lqhelp\(rq +as +\fIdebug\fR\&. See +\fByasm_dbgfmts\fR(7) +for a list of supported debugging formats\&. +.RE +.PP +\fB\-L \fR\fB\fIlist\fR\fR or \fB\-\-lformat=\fR\fB\fIlist\fR\fR: Select list file format +.RS 4 +Selects the format/style of the output list file\&. List files typically intermix the original source with the machine code generated by the assembler\&. The default list format is +\(lqnasm\(rq, which mimics the NASM list file format\&. To print a list of available list file formats to standard output, use +\(lqhelp\(rq +as +\fIlist\fR\&. +.RE +.PP +\fB\-l \fR\fB\fIlistfile\fR\fR or \fB\-\-list=\fR\fB\fIlistfile\fR\fR: Specify list filename +.RS 4 +Specifies the name of the output list file\&. If this option is not used, no list file is generated\&. +.RE +.PP +\fB\-m \fR\fB\fImachine\fR\fR or \fB\-\-machine=\fR\fB\fImachine\fR\fR: Select target machine architecture +.RS 4 +Selects the target machine architecture\&. Essentially a subtype of the selected architecture, the machine type selects between major subsets of an architecture\&. For example, for the +\(lqx86\(rq +architecture, the two available machines are +\(lqx86\(rq, which is used for the IA\-32 and derivative 32\-bit instruction set, and +\(lqamd64\(rq, which is used for the 64\-bit instruction set\&. This differentiation is required to generate the proper object file for relocatable object formats such as COFF and ELF\&. To print a list of available machines for a given architecture to standard output, use +\(lqhelp\(rq +as +\fImachine\fR +and the given architecture using +\fB\-a \fR\fB\fIarch\fR\fR\&. See +\fByasm_arch\fR(7) +for more details\&. +.RE +.PP +\fB\-o \fR\fB\fIfilename\fR\fR or \fB\-\-objfile=\fR\fB\fIfilename\fR\fR: Specify object filename +.RS 4 +Specifies the name of the output file, overriding any default name generated by Yasm\&. +.RE +.PP +\fB\-p \fR\fB\fIparser\fR\fR or \fB\-\-parser=\fR\fB\fIparser\fR\fR: Select parser +.RS 4 +Selects the parser (the assembler syntax)\&. The default parser is +\(lqnasm\(rq, which emulates the syntax of NASM, the Netwide Assembler\&. Another available parser is +\(lqgas\(rq, which emulates the syntax of GNU AS\&. To print a list of available parsers to standard output, use +\(lqhelp\(rq +as +\fIparser\fR\&. See +\fByasm_parsers\fR(7) +for a list of supported parsers\&. +.RE +.PP +\fB\-r \fR\fB\fIpreproc\fR\fR or \fB\-\-preproc=\fR\fB\fIpreproc\fR\fR: Select preprocessor +.RS 4 +Selects the preprocessor to use on the input file before passing it to the parser\&. Preprocessors often provide macro functionality that is not included in the main parser\&. The default preprocessor is +\(lqnasm\(rq, which is an imported version of the actual NASM preprocessor\&. A +\(lqraw\(rq +preprocessor is also available, which simply skips the preprocessing step, passing the input file directly to the parser\&. To print a list of available preprocessors to standard output, use +\(lqhelp\(rq +as +\fIpreproc\fR\&. +.RE +.PP +\fB\-h\fR or \fB\-\-help\fR: Print a summary of options +.RS 4 +Prints a summary of invocation options\&. All other options are ignored, and no output file is generated\&. +.RE +.PP +\fB\-\-version\fR: Get the Yasm version +.RS 4 +This option causes Yasm to prints the version number of Yasm as well as a license summary to standard output\&. All other options are ignored, and no output file is generated\&. +.RE +.SS "Warning Options" +.PP +\fB\-W\fR +options have two contrary forms: +\fB\-W\fR\fB\fIname\fR\fR +and +\fB\-Wno\-\fR\fB\fIname\fR\fR\&. Only the non\-default forms are shown here\&. +.PP +The warning options are handled in the order given on the command line, so if +\fB\-w\fR +is followed by +\fB\-Worphan\-labels\fR, all warnings are turned off +\fIexcept\fR +for orphan\-labels\&. +.PP +\fB\-w\fR: Inhibit all warning messages +.RS 4 +This option causes Yasm to inhibit all warning messages\&. As discussed above, this option may be followed by other options to re\-enable specified warnings\&. +.RE +.PP +\fB\-Werror\fR: Treat warnings as errors +.RS 4 +This option causes Yasm to treat all warnings as errors\&. Normally warnings do not prevent an object file from being generated and do not result in a failure exit status from +\fByasm\fR, whereas errors do\&. This option makes warnings equivalent to errors in terms of this behavior\&. +.RE +.PP +\fB\-Wno\-unrecognized\-char\fR: Do not warn on unrecognized input characters +.RS 4 +Causes Yasm to not warn on unrecognized characters found in the input\&. Normally Yasm will generate a warning for any non\-ASCII character found in the input file\&. +.RE +.PP +\fB\-Worphan\-labels\fR: Warn on labels lacking a trailing option +.RS 4 +When using the NASM\-compatible parser, causes Yasm to warn about labels found alone on a line without a trailing colon\&. While these are legal labels in NASM syntax, they may be unintentional, due to typos or macro definition ordering\&. +.RE +.PP +\fB\-X \fR\fB\fIstyle\fR\fR: Change error/warning reporting style +.RS 4 +Selects a specific output style for error and warning messages\&. The default is +\(lqgnu\(rq +style, which mimics the output of +\fBgcc\fR\&. The +\(lqvc\(rq +style is also available, which mimics the output of Microsoft\'s Visual C++ compiler\&. +.sp +This option is available so that Yasm integrates more naturally into IDE environments such as +Visual Studio +or +Emacs, allowing the IDE to correctly recognize the error/warning message as such and link back to the offending line of source code\&. +.RE +.SS "Preprocessor Options" +.PP +While these preprocessor options theoretically will affect any preprocessor, the only preprocessor currently in Yasm is the +\(lqnasm\(rq +preprocessor\&. +.PP +\fB\-D \fR\fB\fImacro[=value]\fR\fR: Pre\-define a macro +.RS 4 +Pre\-defines a single\-line macro\&. The value is optional (if no value is given, the macro is still defined, but to an empty value)\&. +.RE +.PP +\fB\-e\fR or \fB\-\-preproc\-only\fR: Only preprocess +.RS 4 +Stops assembly after the preprocessing stage; preprocessed output is sent to the specified output name or, if no output name is specified, the standard output\&. No object file is produced\&. +.RE +.PP +\fB\-I \fR\fB\fIpath\fR\fR: Add include file path +.RS 4 +Adds directory +\fIpath\fR +to the search path for include files\&. The search path defaults to only including the directory in which the source file resides\&. +.RE +.PP +\fB\-P \fR\fB\fIfilename\fR\fR: Pre\-include a file +.RS 4 +Pre\-includes file +\fIfilename\fR, making it look as though +\fIfilename\fR +was prepended to the input\&. Can be useful for prepending multi\-line macros that the +\fB\-D\fR +can\'t support\&. +.RE +.PP +\fB\-U \fR\fB\fImacro\fR\fR: Undefine a macro +.RS 4 +Undefines a single\-line macro (may be either a built\-in macro or one defined earlier in the command line with +\fB\-D\fR\&. +.RE +.SH "EXAMPLES" +.PP +To assemble NASM syntax, 32\-bit x86 source +source\&.asm +into ELF file +source\&.o, warning on orphan labels: +.sp +.if n \{\ +.RS 4 +.\} +.nf +yasm \-f elf32 \-Worphan\-labels source\&.asm +.fi +.if n \{\ +.RE +.\} +.PP +To assemble NASM syntax AMD64 source +x\&.asm +into Win64 file +object\&.obj: +.sp +.if n \{\ +.RS 4 +.\} +.nf +yasm \-f win64 \-o object\&.obj x\&.asm +.fi +.if n \{\ +.RE +.\} +.PP +To assemble already preprocessed NASM syntax x86 source +y\&.asm +into flat binary file +y\&.com: +.sp +.if n \{\ +.RS 4 +.\} +.nf +yasm \-f bin \-r raw \-o y\&.com y\&.asm +.fi +.if n \{\ +.RE +.\} +.SH "DIAGNOSTICS" +.PP +The +\fByasm\fR +command exits 0 on success, and nonzero if an error occurs\&. +.SH "COMPATIBILITY" +.PP +Yasm\'s NASM parser and preprocessor, while they strive to be as compatible as possible with NASM, have a few incompatibilities due to YASM\'s different internal structure\&. +.PP +Yasm\'s GAS parser and preprocessor are missing a number of features present in GNU AS\&. +.SH "RESTRICTIONS" +.PP +As object files are often architecture and machine dependent, not all combinations of object formats, architectures, and machines are legal; trying to use an invalid combination will result in an error\&. +.PP +There is no support for symbol maps\&. +.SH "SEE ALSO" +.PP +\fByasm_arch\fR(7), +\fByasm_dbgfmts\fR(7), +\fByasm_objfmts\fR(7), +\fByasm_parsers\fR(7) +.PP +Related tools: +\fBas\fR(1), +\fBld\fR(1), +\fBnasm\fR(1) +.SH "BUGS" +.PP +When using the +\(lqx86\(rq +architecture, it is overly easy to generate AMD64 code (using the +\fBBITS 64\fR +directive) and generate a 32\-bit object file (by failing to specify +\fB\-m amd64\fR +or selecting a 64\-bit object format such as ELF64 on the command line)\&. +.SH "AUTHOR" +.PP +\fBPeter Johnson\fR <\&peter@tortall\&.net\&> +.RS 4 +Author. +.RE +.SH "COPYRIGHT" +.br +Copyright \(co 2004, 2005, 2006, 2007 Peter Johnson +.br diff --git a/third-party/yasm/yasm-1.3.0/yasm_arch.7 b/third-party/yasm/yasm-1.3.0/yasm_arch.7 new file mode 100644 index 0000000000..ccdfd05632 --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/yasm_arch.7 @@ -0,0 +1,860 @@ +'\" t +.\" Title: yasm_arch +.\" Author: Peter Johnson +.\" Generator: DocBook XSL Stylesheets v1.76.1 +.\" Date: October 2006 +.\" Manual: Yasm Supported Architectures +.\" Source: Yasm +.\" Language: English +.\" +.TH "YASM_ARCH" "7" "October 2006" "Yasm" "Yasm Supported Architectures" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +yasm_arch \- Yasm Supported Target Architectures +.SH "SYNOPSIS" +.HP \w'\fByasm\fR\ 'u +\fByasm\fR \fB\-a\ \fR\fB\fIarch\fR\fR [\fB\-m\ \fR\fB\fImachine\fR\fR] \fB\fI\&.\&.\&.\fR\fR +.SH "DESCRIPTION" +.PP +The standard Yasm distribution includes a number of modules for different target architectures\&. Each target architecture can support one or more machine architectures\&. +.PP +The architecture and machine are selected on the +\fByasm\fR(1) +command line by use of the +\fB\-a \fR\fB\fIarch\fR\fR +and +\fB\-m \fR\fB\fImachine\fR\fR +command line options, respectively\&. +.PP +The machine architecture may also automatically be selected by certain object formats\&. For example, the +\(lqelf32\(rq +object format selects the +\(lqx86\(rq +machine architecture by default, while the +\(lqelf64\(rq +object format selects the +\(lqamd64\(rq +machine architecture by default\&. +.SH "X86 ARCHITECTURE" +.PP +The +\(lqx86\(rq +architecture supports the IA\-32 instruction set and derivatives and the AMD64 instruction set\&. It consists of two machines: +\(lqx86\(rq +(for the IA\-32 and derivatives) and +\(lqamd64\(rq +(for the AMD64 and derivatives)\&. The default machine for the +\(lqx86\(rq +architecture is the +\(lqx86\(rq +machine\&. +.SS "BITS Setting" +.PP +The x86 architecture BITS setting specifies to Yasm the processor mode in which the generated code is intended to execute\&. x86 processors can run in three different major execution modes: 16\-bit, 32\-bit, and on AMD64\-supporting processors, 64\-bit\&. As the x86 instruction set contains portions whose function is execution\-mode dependent (such as operand\-size and address\-size override prefixes), Yasm cannot assemble x86 instructions correctly unless it is told by the user in what processor mode the code will execute\&. +.PP +The BITS setting can be changed in a variety of ways\&. When using the NASM\-compatible parser, the BITS setting can be changed directly via the use of the +\fBBITS xx\fR +assembler directive\&. The default BITS setting is determined by the object format in use\&. +.SS "BITS 64 Extensions" +.PP +The AMD64 architecture is a new 64\-bit architecture developed by AMD, based on the 32\-bit x86 architecture\&. It extends the original x86 architecture by doubling the number of general purpose and SIMD registers, extending the arithmetic operations and address space to 64 bits, as well as other features\&. +.PP +Recently, Intel has introduced an essentially identical version of AMD64 called EM64T\&. +.PP +When an AMD64\-supporting processor is executing in 64\-bit mode, a number of additional extensions are available, including extra general purpose registers, extra SSE2 registers, and RIP\-relative addressing\&. +.PP +Yasm extends the base NASM syntax to support AMD64 as follows\&. To enable assembly of instructions for the 64\-bit mode of AMD64 processors, use the directive +\fBBITS 64\fR\&. As with NASM\*(Aqs BITS directive, this does not change the format of the output object file to 64 bits; it only changes the assembler mode to assume that the instructions being assembled will be run in 64\-bit mode\&. To specify an AMD64 object file, use +\fB\-m amd64\fR +on the Yasm command line, or explicitly target a 64\-bit object format such as +\fB\-f win64\fR +or +\fB\-f elf64\fR\&. +\fB\-f elfx32\fR +can be used to select 32\-bit ELF object format for AMD64 processors\&. +.sp +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBRegister Changes\fR +.RS 4 +.PP +The additional 64\-bit general purpose registers are named r8\-r15\&. There are also 8\-bit (rXb), 16\-bit (rXw), and 32\-bit (rXd) subregisters that map to the least significant 8, 16, or 32 bits of the 64\-bit register\&. The original 8 general purpose registers have also been extended to 64\-bits: eax, edx, ecx, ebx, esi, edi, esp, and ebp have new 64\-bit versions called rax, rdx, rcx, rbx, rsi, rdi, rsp, and rbp respectively\&. The old 32\-bit registers map to the least significant bits of the new 64\-bit registers\&. +.PP +New 8\-bit registers are also available that map to the 8 least significant bits of rsi, rdi, rsp, and rbp\&. These are called sil, dil, spl, and bpl respectively\&. Unfortunately, due to the way instructions are encoded, these new 8\-bit registers are encoded the same as the old 8\-bit registers ah, dh, ch, and bh\&. The processor tells which is being used by the presence of the new REX prefix that is used to specify the other extended registers\&. This means it is illegal to mix the use of ah, dh, ch, and bh with an instruction that requires the REX prefix for other reasons\&. For instance: +.sp +.if n \{\ +.RS 4 +.\} +.nf +add ah, [r10] +.fi +.if n \{\ +.RE +.\} +.PP +(NASM syntax) is not a legal instruction because the use of r10 requires a REX prefix, making it impossible to use ah\&. +.PP +In 64\-bit mode, an additional 8 SSE2 registers are also available\&. These are named xmm8\-xmm15\&. +.RE +.sp +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fB64 Bit Instructions\fR +.RS 4 +.PP +By default, most operations in 64\-bit mode remain 32\-bit; operations that are 64\-bit usually require a REX prefix (one bit in the REX prefix determines whether an operation is 64\-bit or 32\-bit)\&. Thus, essentially all 32\-bit instructions have a 64\-bit version, and the 64\-bit versions of instructions can use extended registers +\(lqfor free\(rq +(as the REX prefix is already present)\&. Examples in NASM syntax: +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov eax, 1 ; 32\-bit instruction +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov rcx, 1 ; 64\-bit instruction +.fi +.if n \{\ +.RE +.\} +.PP +Instructions that modify the stack (push, pop, call, ret, enter, and leave) are implicitly 64\-bit\&. Their 32\-bit counterparts are not available, but their 16\-bit counterparts are\&. Examples in NASM syntax: +.sp +.if n \{\ +.RS 4 +.\} +.nf +push eax ; illegal instruction +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +push rbx ; 1\-byte instruction +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +push r11 ; 2\-byte instruction with REX prefix +.fi +.if n \{\ +.RE +.\} +.RE +.sp +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBImplicit Zero Extension\fR +.RS 4 +.PP +Results of 32\-bit operations are implicitly zero\-extended to the upper 32 bits of the corresponding 64\-bit register\&. 16 and 8 bit operations, on the other hand, do not affect upper bits of the register (just as in 32\-bit and 16\-bit modes)\&. This can be used to generate smaller code in some instances\&. Examples in NASM syntax: +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov ecx, 1 ; 1 byte shorter than mov rcx, 1 +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +and edx, 3 ; equivalent to and rdx, 3 +.fi +.if n \{\ +.RE +.\} +.RE +.sp +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBImmediates\fR +.RS 4 +.PP +For most instructions in 64\-bit mode, immediate values remain 32 bits; their value is sign\-extended into the upper 32 bits of the target register prior to being used\&. The exception is the mov instruction, which can take a 64\-bit immediate when the destination is a 64\-bit register\&. Examples in NASM syntax: +.sp +.if n \{\ +.RS 4 +.\} +.nf +add rax, 1 ; optimized down to signed 8\-bit +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +add rax, dword 1 ; force size to 32\-bit +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +add rax, 0xffffffff ; sign\-extended 32\-bit +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +add rax, \-1 ; same as above +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +add rax, 0xffffffffffffffff ; truncated to 32\-bit (warning) +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov eax, 1 ; 5 byte +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov rax, 1 ; 5 byte (optimized to signed 32\-bit) +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov rax, qword 1 ; 10 byte (forced 64\-bit) +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov rbx, 0x1234567890abcdef ; 10 byte +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov rcx, 0xffffffff ; 10 byte (does not fit in signed 32\-bit) +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov ecx, \-1 ; 5 byte, equivalent to above +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov rcx, sym ; 5 byte, 32\-bit size default for symbols +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov rcx, qword sym ; 10 byte, override default size +.fi +.if n \{\ +.RE +.\} +.PP +The handling of mov reg64, unsized immediate is different between YASM and NASM 2\&.x; YASM follows the above behavior, while NASM 2\&.x does the following: +.sp +.if n \{\ +.RS 4 +.\} +.nf +add rax, 0xffffffff ; sign\-extended 32\-bit immediate +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +add rax, \-1 ; same as above +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +add rax, 0xffffffffffffffff ; truncated 32\-bit (warning) +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +add rax, sym ; sign\-extended 32\-bit immediate +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov eax, 1 ; 5 byte (32\-bit immediate) +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov rax, 1 ; 10 byte (64\-bit immediate) +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov rbx, 0x1234567890abcdef ; 10 byte instruction +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov rcx, 0xffffffff ; 10 byte instruction +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov ecx, \-1 ; 5 byte, equivalent to above +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov ecx, sym ; 5 byte (32\-bit immediate) +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov rcx, sym ; 10 byte instruction +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov rcx, qword sym ; 10 byte (64\-bit immediate) +.fi +.if n \{\ +.RE +.\} +.RE +.sp +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBDisplacements\fR +.RS 4 +.PP +Just like immediates, displacements, for the most part, remain 32 bits and are sign extended prior to use\&. Again, the exception is one restricted form of the mov instruction: between the al/ax/eax/rax register and a 64\-bit absolute address (no registers allowed in the effective address)\&. In NASM syntax, use of the 64\-bit absolute form requires +\fB[qword]\fR\&. Examples in NASM syntax: +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov eax, [1] ; 32 bit, with sign extension +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov al, [rax\-1] ; 32 bit, with sign extension +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov al, [qword 0x1122334455667788] ; 64\-bit absolute +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov al, [0x1122334455667788] ; truncated to 32\-bit (warning) +.fi +.if n \{\ +.RE +.\} +.RE +.sp +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBRIP Relative Addressing\fR +.RS 4 +.PP +In 64\-bit mode, a new form of effective addressing is available to make it easier to write position\-independent code\&. Any memory reference may be made RIP relative (RIP is the instruction pointer register, which contains the address of the location immediately following the current instruction)\&. +.PP +In NASM syntax, there are two ways to specify RIP\-relative addressing: +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov dword [rip+10], 1 +.fi +.if n \{\ +.RE +.\} +.PP +stores the value 1 ten bytes after the end of the instruction\&. +\fB10\fR +can also be a symbolic constant, and will be treated the same way\&. On the other hand, +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov dword [symb wrt rip], 1 +.fi +.if n \{\ +.RE +.\} +.PP +stores the value 1 into the address of symbol +\fBsymb\fR\&. This is distinctly different than the behavior of: +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov dword [symb+rip], 1 +.fi +.if n \{\ +.RE +.\} +.PP +which takes the address of the end of the instruction, adds the address of +\fBsymb\fR +to it, then stores the value 1 there\&. If +\fBsymb\fR +is a variable, this will +\fInot\fR +store the value 1 into the +\fBsymb\fR +variable! +.PP +Yasm also supports the following syntax for RIP\-relative addressing: +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov [rel sym], rax ; RIP\-relative +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov [abs sym], rax ; not RIP\-relative +.fi +.if n \{\ +.RE +.\} +.PP +The behavior of: +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov [sym], rax +.fi +.if n \{\ +.RE +.\} +.PP +Depends on a mode set by the DEFAULT directive, as follows\&. The default mode is always "abs", and in "rel" mode, use of registers, an fs or gs segment override, or an explicit "abs" override will result in a non\-RIP\-relative effective address\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +default rel +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov [sym], rbx ; RIP\-relative +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov [abs sym], rbx ; not RIP\-relative (explicit override) +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov [rbx+1], rbx ; not RIP\-relative (register use) +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov [fs:sym], rbx ; not RIP\-relative (fs or gs use) +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov [ds:sym], rbx ; RIP\-relative (segment, but not fs or gs) +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov [rel sym], rbx ; RIP\-relative (redundant override) +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +default abs +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov [sym], rbx ; not RIP\-relative +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov [abs sym], rbx ; not RIP\-relative +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov [rbx+1], rbx ; not RIP\-relative +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov [fs:sym], rbx ; not RIP\-relative +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov [ds:sym], rbx ; not RIP\-relative +.fi +.if n \{\ +.RE +.\} +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov [rel sym], rbx ; RIP\-relative (explicit override) +.fi +.if n \{\ +.RE +.\} +.RE +.sp +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBMemory references\fR +.RS 4 +.PP +Usually the size of a memory reference can be deduced by which registers you\*(Aqre moving\-\-for example, "mov [rax],ecx" is a 32\-bit move, because ecx is 32 bits\&. YASM currently gives the non\-obvious "invalid combination of opcode and operands" error if it can\*(Aqt figure out how much memory you\*(Aqre moving\&. The fix in this case is to add a memory size specifier: qword, dword, word, or byte\&. +.PP +Here\*(Aqs a 64\-bit memory move, which sets 8 bytes starting at rax: +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov qword [rax], 1 +.fi +.if n \{\ +.RE +.\} +.PP +Here\*(Aqs a 32\-bit memory move, which sets 4 bytes: +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov dword [rax], 1 +.fi +.if n \{\ +.RE +.\} +.PP +Here\*(Aqs a 16\-bit memory move, which sets 2 bytes: +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov word [rax], 1 +.fi +.if n \{\ +.RE +.\} +.PP +Here\*(Aqs an 8\-bit memory move, which sets 1 byte: +.sp +.if n \{\ +.RS 4 +.\} +.nf +mov byte [rax], 1 +.fi +.if n \{\ +.RE +.\} +.RE +.SH "LC3B ARCHITECTURE" +.PP +The +\(lqlc3b\(rq +architecture supports the LC\-3b ISA as used in the ECE 312 (now ECE 411) course at the University of Illinois, Urbana\-Champaign, as well as other university courses\&. See +\m[blue]\fB\%http://courses.ece.uiuc.edu/ece411/\fR\m[] +for more details and example code\&. The +\(lqlc3b\(rq +architecture consists of only one machine: +\(lqlc3b\(rq\&. +.SH "SEE ALSO" +.PP +\fByasm\fR(1) +.SH "BUGS" +.PP +When using the +\(lqx86\(rq +architecture, it is overly easy to generate AMD64 code (using the +\fBBITS 64\fR +directive) and generate a 32\-bit object file (by failing to specify +\fB\-m amd64\fR +on the command line or selecting a 64\-bit object format)\&. Similarly, specifying +\fB\-m amd64\fR +does not default the BITS setting to 64\&. An easy way to avoid this is by directly specifying a 64\-bit object format such as +\fB\-f elf64\fR\&. +.SH "AUTHOR" +.PP +\fBPeter Johnson\fR <\&peter@tortall\&.net\&> +.RS 4 +Author. +.RE +.SH "COPYRIGHT" +.br +Copyright \(co 2004, 2005, 2006, 2007 Peter Johnson +.br diff --git a/third-party/yasm/yasm-1.3.0/yasm_dbgfmts.7 b/third-party/yasm/yasm-1.3.0/yasm_dbgfmts.7 new file mode 100644 index 0000000000..aed288237f --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/yasm_dbgfmts.7 @@ -0,0 +1,63 @@ +'\" t +.\" Title: yasm_dbgfmts +.\" Author: Peter Johnson +.\" Generator: DocBook XSL Stylesheets v1.75.2 +.\" Date: October 2006 +.\" Manual: Yasm Supported Debug Formats +.\" Source: Yasm +.\" Language: English +.\" +.TH "YASM_DBGFMTS" "7" "October 2006" "Yasm" "Yasm Supported Debug Formats" +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +yasm_dbgfmts \- Yasm Supported Debugging Formats +.SH "SYNOPSIS" +.HP \w'\fByasm\fR\ 'u +\fByasm\fR \fB\-g\ \fR\fB\fIdbgfmt\fR\fR \fB\fI\&.\&.\&.\fR\fR +.SH "DESCRIPTION" +.PP +The standard Yasm distribution includes a number of modules for different debugging formats\&. The debugging information is embedded into the object file\&. Use of a non\-\(lqnull\(rq +debug format also causes Yasm to output all symbols to the object file (including local symbols)\&. +.PP +The debug format is selected on the +\fByasm\fR(1) +command line by use of the +\fB\-g \fR\fB\fIdbgfmt\fR\fR +command line option\&. +.SH "CV8" +.PP +The CV8 debug format is used by Microsoft Visual Studio 2005 (version 8\&.0) and is completely undocumented, although it bears strong similarities to earlier CodeView formats\&. Yasm\'s support for the CV8 debug format is currently limited to generating assembly\-level line number information (to allow some level of source\-level debugging)\&. The CV8 debug information is stored in the \&.debug$S and \&.debug$T sections of the Win64 object file\&. +.SH "DWARF2" +.PP +The DWARF 2 debug format is a complex, well\-documented standard for debugging information\&. It was created to overcome shortcomings in STABS, allowing for much more detailed and compact descriptions of data structures, data variable movement, and complex language structures such as in C++\&. The debugging information is stored in sections (just like normal program sections) in the object file\&. Yasm supports full pass\-through of DWARF2 debugging information (e\&.g\&. from a C++ compiler), and can also generate assembly\-level line number information\&. +.SH "NULL" +.PP +The +\(lqnull\(rq +debug format is a placeholder; it adds no debugging information to the output file\&. +.SH "STABS" +.PP +The STABS debug format is a poorly documented, semi\-standard format for debugging information in COFF and ELF object files\&. The debugging information is stored as part of the object file\'s symbol table and thus is limited in complexity and scope\&. Despite this, STABS is a common debugging format on older Unix and compatible systems, as well as DJGPP\&. +.SH "SEE ALSO" +.PP +\fByasm\fR(1), +\fByasm_objfmts\fR(7) +.SH "AUTHOR" +.PP +\fBPeter Johnson\fR <\&peter@tortall\&.net\&> +.RS 4 +Author. +.RE +.SH "COPYRIGHT" +.br +Copyright \(co 2006 Peter Johnson +.br diff --git a/third-party/yasm/yasm-1.3.0/yasm_objfmts.7 b/third-party/yasm/yasm-1.3.0/yasm_objfmts.7 new file mode 100644 index 0000000000..bc6498601e --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/yasm_objfmts.7 @@ -0,0 +1,102 @@ +'\" t +.\" Title: yasm_objfmts +.\" Author: Peter Johnson +.\" Generator: DocBook XSL Stylesheets v1.76.1 +.\" Date: February 2007 +.\" Manual: Yasm Supported Object Formats +.\" Source: Yasm +.\" Language: English +.\" +.TH "YASM_OBJFMTS" "7" "February 2007" "Yasm" "Yasm Supported Object Formats" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +yasm_objfmts \- Yasm Supported Object Formats +.SH "SYNOPSIS" +.HP \w'\fByasm\fR\ 'u +\fByasm\fR \fB\-f\ \fR\fB\fIobjfmt\fR\fR \fB\fI\&.\&.\&.\fR\fR +.SH "DESCRIPTION" +.PP +The standard Yasm distribution includes a number of modules for different object formats (Yasm\*(Aqs primary output)\&. +.PP +The object format is selected on the +\fByasm\fR(1) +command line by use of the +\fB\-f \fR\fB\fIobjfmt\fR\fR +command line option\&. +.SH "BIN" +.PP +The +\(lqbin\(rq +object format produces a flat\-format, non\-relocatable binary file\&. It is appropriate for producing DOS \&.COM executables or things like boot blocks\&. It supports only 3 sections and those sections are written in a predefined order to the output file\&. +.SH "COFF" +.PP +The COFF object format is an older relocatable object format used on older Unix and compatible systems, and also (more recently) on the DJGPP development system for DOS\&. +.SH "DBG" +.PP +The +\(lqdbg\(rq +object format is not a +\(lqreal\(rq +object format; the output file it creates simply describes the sequence of calls made to it by Yasm and the final object and symbol table information in a human\-readable text format (that in a normal object format would get processed into that object format\*(Aqs particular binary representation)\&. This object format is not intended for real use, but rather for debugging Yasm\*(Aqs internals\&. +.SH "ELF" +.PP +The ELF object format really comes in three flavors: +\(lqelf32\(rq +(for 32\-bit targets), +\(lqelf64\(rq +(for 64\-bit targets and +\(lqelfx32\(rq +(for x32 targets)\&. ELF is a standard object format in common use on modern Unix and compatible systems (e\&.g\&. Linux, FreeBSD)\&. ELF has complex support for relocatable and shared objects\&. +.SH "MACHO" +.PP +The Mach\-O object format really comes in two flavors: +\(lqmacho32\(rq +(for 32\-bit targets) and +\(lqmacho64\(rq +(for 64\-bit targets)\&. Mach\-O is used as the object format on MacOS X\&. As Yasm currently only supports x86 and AMD64 instruction sets, it can only generate Mach\-O objects for Intel\-based Macs\&. +.SH "RDF" +.PP +The RDOFF2 object format is a simple multi\-section format originally designed for NASM\&. It supports segment references but not WRT references\&. It was designed primarily for simplicity and has minimalistic headers for ease of loading and linking\&. A complete toolchain (linker, librarian, and loader) is distributed with NASM\&. +.SH "WIN32" +.PP +The Win32 object format produces object files compatible with Microsoft compilers (such as Visual C++) that target the 32\-bit x86 Windows platform\&. The object format itself is an extended version of COFF\&. +.SH "WIN64" +.PP +The Win64 object format produces object files compatible with Microsoft compilers that target the 64\-bit +\(lqx64\(rq +Windows platform\&. This format is very similar to the win32 object format, but produces 64\-bit objects\&. +.SH "XDF" +.PP +The XDF object format is essentially a simplified version of COFF\&. It\*(Aqs a multi\-section relocatable format that supports 64\-bit physical and virtual addresses\&. +.SH "SEE ALSO" +.PP +\fByasm\fR(1), +\fByasm_arch\fR(7) +.SH "AUTHOR" +.PP +\fBPeter Johnson\fR <\&peter@tortall\&.net\&> +.RS 4 +Author. +.RE +.SH "COPYRIGHT" +.br +Copyright \(co 2006 Peter Johnson +.br diff --git a/third-party/yasm/yasm-1.3.0/yasm_parsers.7 b/third-party/yasm/yasm-1.3.0/yasm_parsers.7 new file mode 100644 index 0000000000..058db4b7dd --- /dev/null +++ b/third-party/yasm/yasm-1.3.0/yasm_parsers.7 @@ -0,0 +1,58 @@ +'\" t +.\" Title: yasm_parsers +.\" Author: Peter Johnson +.\" Generator: DocBook XSL Stylesheets v1.75.2 +.\" Date: October 2006 +.\" Manual: Yasm Supported Parsers +.\" Source: Yasm +.\" Language: English +.\" +.TH "YASM_PARSERS" "7" "October 2006" "Yasm" "Yasm Supported Parsers" +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +yasm_parsers \- Yasm Supported Parsers (Assembler Syntaxes) +.SH "SYNOPSIS" +.HP \w'\fByasm\fR\ 'u +\fByasm\fR \fB\-p\ \fR\fB\fIparser\fR\fR [\fB\-r\ \fR\fB\fIpreproc\fR\fR] \fB\fI\&.\&.\&.\fR\fR +.SH "DESCRIPTION" +.PP +The standard Yasm distribution includes a number of modules for different parsers (assembler syntaxes)\&. +.PP +The parser is selected on the +\fByasm\fR(1) +command line by use of the +\fB\-p \fR\fB\fIparser\fR\fR +command line option\&. +.SH "NASM PARSER" +.PP +NASM syntax, selected with +\fB\-p nasm\fR, is the most full\-featured syntax supported by Yasm\&. Yasm is nearly 100% compatible with NASM for 16\-bit and 32\-bit x86 code\&. Yasm additionally supports 64\-bit AMD64 code with Yasm extensions to the NASM syntax; see +\fByasm_arch\fR(7) +for details\&. NASM syntax is the Yasm default\&. +.SH "GAS PARSER" +.PP +The GNU Assembler (GAS) is the de\-facto cross\-platform assembler for modern Unix systems, and is used as the backend for the GCC compiler\&. Yasm\'s support for GAS syntax is moderately good, although immature: not all directives are supported, and only 32\-bit x86 and AMD64 architectures are supported\&. Nearly all of the GAS preprocessor is also supported\&. Yasm\'s GAS syntax support is good enough to handle essentially all x86 and AMD64 GCC compiler output\&. The GAS parser can be selected with +\fB\-p gas\fR\&. +.SH "SEE ALSO" +.PP +\fByasm\fR(1), +\fByasm_arch\fR(7) +.SH "AUTHOR" +.PP +\fBPeter Johnson\fR <\&peter@tortall\&.net\&> +.RS 4 +Author. +.RE +.SH "COPYRIGHT" +.br +Copyright \(co 2006 Peter Johnson +.br